Skip to main content

암호학 공격 기법 입문: Padding Oracle부터 Bit-Flipping까지

CTF를 풀다 보면 암호화된 쿠키나 토큰을 마주칠 때가 많다. 그냥 "암호화됐으니 안전하겠지"라고 넘기면 탈락. 실제로는 구현 실수 하나로 전체가 무너지는 경우가 허다하다.

Padding Oracle Attack

AES-CBC 모드에서 자주 등장하는 공격이다. 서버가 복호화 후 패딩이 올바른지 여부를 힌트로 흘릴 때 발생한다.

원리는 간단하다. CBC의 복호화 구조상 이전 블록의 ciphertext를 조작하면 다음 블록의 plaintext를 바꿀 수 있다. 패딩 오류 여부만 알 수 있어도 1바이트씩 브루트포스로 전체 평문을 복원할 수 있다.

# 핵심 아이디어
# D(C2) XOR C1 = P2
# C1[i] XOR D(C2)[i] = P2[i]
# → C1[i] 조작으로 P2[i] 제어 가능

실전에서는 padbuster 툴을 쓰거나, PyCryptodome으로 직접 구현해도 된다.

Bit-Flipping Attack

CBC 모드의 또 다른 약점. 암호화된 상태에서 특정 비트를 뒤집으면, 다음 블록의 복호화 결과에 예측 가능한 변조가 발생한다.

예: role=userrole=admi 로 바꾸고 싶다면?

C1[i] XOR 0x00 = original
C1[i] XOR (original_byte XOR target_byte) = target

이걸로 권한 상승, 세션 위조 등이 가능하다.

ECB Mode의 함정

ECB는 아예 쓰면 안 된다. 같은 블록은 항상 같은 ciphertext → 패턴 분석으로 내용 추론 가능. ECB Penguin이라고 불리는 유명한 시각적 증거가 있다.

CTF 팁

  • 암호화 오라클이 있으면 무조건 Padding Oracle 시도
  • 쿠키/토큰이 CBC면 Bit-Flipping 체크
  • Base64 디코딩 후 IV가 앞에 붙어있는 구조인지 확인
  • cryptopals 챌린지 풀어보면 실력이 확 는다

암호학은 수학보다 구현의 허점을 파고드는 게 핵심이다. 알고리즘이 맞아도 코드가 틀리면 끝.