2026 SPACE WAR - 01.ARIES CTF 문제 풀이

0. 개요

  • 문제 이름 : tinynn
  • 문제 유형 : AI
  • 환경 :
    • 입력 : 8x8 grayscale PNG
    • 모델: model.onnx
    • 서버: 이미지 → 정규화 → logit 계산
  • 목표 :
    • 서버 기준값(threshold=0.98)을 넘는 logit을 생성하는 이미지를 만들어 제출

1. 전체 구조 분석

1-1. 서버 동작

서버 코드를 보면 이미지 처리 과정은 다음과 같다.

이미지 (PNG)
→ grayscale(L)
→ float32 변환
→ 255.0으로 나눔 → [0,1]
→ ONNX 모델 입력
→ logit 계산

조건 : logit > 0.98


1-2. 입력 제약

입력은 8x8 grayscale PNG 이므로:

  • 픽셀 수 : 64개
  • 각 픽셀 : 0 ~ 255 정수
  • 실제 입력값 : p / 255

즉, 다음 문제는 64개의 정수 변수로 logit을 최대화 하는 문제라고 볼수있다.


2. 모델 분석

2-1. 모델 구조

ONNX 모델을 분석하면 구조는 매우 단순하다.

input (1x1x8x8)
→ Conv(3x3, padding=1)
→ ReLU
→ Flatten(64)
→ Linear(64→1)
→ logit

매우 작은 CNN + 선형층 구조


2-2. 파라미터

모델 내부 텐서는 다음과 같다.

conv.weight: (1,1,3,3)
conv.bias: (1,)
fc.weight: (1,64)
fc.bias: (1,)

입력 64개 → 출력 1개


2-3. 수식 형태

출력은 다음과 같이 표현할 수 있다.

z[r,c] = conv(p/255)[r,c] + bias
h[r,c] = max(z[r,c], 0)
logit = Σ(fc_weight * h) + fc_bias

Conv + ReLU + Linear


3. 문제

3-1. 중요한 점

이 문제에서 중요한점은

  • 입력은 연속값이 아니라 정수 (0~255)
  • 모델이 매우 작다
  • ReLU만 있는 단순 구조

즉, 딥러닝 문제가 아니라 작은 최적화 문제 이다.


3-2. 접근 방법

가능한 방법:

  • Gradient-based → 가능
  • Brute force → 불가능
  • Heuristic search → 가능

가장 간단한 접근: 0/255 binary 패턴 탐색


4. 공격 시나리오

4-1. 초기 상태

전체 흰색 이미지:

logit ≈ 0.2774

threshold(0.98)에 한참 부족하다.


4-2. 최적화 방법

사용한 방법 - Hill Climbing

  • 픽셀 하나씩 바꾸면서 logit 증가 확인
  • 0 ↔ 255 토글
  • greedy하게 개선

4-3. 결과 패턴

최종적으로 얻은 8x8 이미지:

1
2
3
4
5
6
7
8
255 255 0 255 255 255 0 255
0 0 255 255 255 0 255 255
0 255 0 255 0 255 255 0
255 255 255 0 255 255 0 255
255 0 255 255 255 255 0 255
0 0 255 0 255 255 255 255
0 0 0 255 255 255 255 0
255 255 255 255 255 255 0 255

4-4. 결과 logit

logit ≈ 0.9962435852

threshold(0.98) 초과


5. 익스플로잇

5-1. 이미지 생성

위 값을 grayscale PNG로 변환 - /home/cyh/answer.png


5-2. 서버 제출

이미지를 제출하면:

1
2
3
4
{
"flag": "hspace{tiny_neural_tiny_gradient}",
"result": "correct"
}

6. 전체 공격 흐름 정리

전체 과정은 다음과 같다.

  1. ONNX 모델 구조 분석
  2. 입력 제약 (8x8, 0~255) 확인
  3. logit 계산식 도출
  4. 최적화 문제로 변환
  5. binary(0/255) 기반 탐색
  6. hill climbing으로 logit 증가
  7. threshold 초과 이미지 생성
  8. PNG 제출 → FLAG 획득

7. 포인트

이 문제의 포인트는 다음과 같다.

  • 딥러닝 모델이지만 매우 단순한 구조
  • 입력이 정수라서 최적화 공간이 제한된다.
  • gradient 없이도 heuristic으로 해결 가능
  • 결국 “모델을 깨는 문제”가 아니라 “값을 맞추는 문제

8. 정리

ONNX 모델 구조를 분석한 뒤, 8x8 픽셀 값을 최적화하여 logit을 threshold 이상으로 만들어 FLAG를 획득하는 문제

9. 최종 플래그

1
hspace{tiny_neural_tiny_gradient}