본문으로 건너뛰기

AES-CBC 비트플립 공격 빠른 감

CBC 모드는 이전 블록의 ciphertext가 다음 블록의 plaintext에 XOR로 섞입니다. 그래서 공격자는 C_{i-1}의 특정 비트를 뒤집어 P_i를 원하는 형태로 바꿀 수 있어요. 서버가 복호화 결과를 그대로 신뢰하고 role=user 같은 문자열을 파싱하면, role=admin으로 승격시키는 식의 변조가 가능합니다.

왜 위험한가

  • CBC는 무결성 보장 없음
  • 에러 메시지가 다르면 oracle로 이어질 수 있음
  • 토큰/쿠키에 “사용자 권한”이 들어있으면 치명적

간단한 실전 흐름

  1. 목표 문자열 위치 계산(블록 경계 맞추기)
  2. delta = desired ^ original
  3. C_{i-1}에 delta XOR → P_i가 원하는 값으로 변형

방어 포인트

  • Encrypt-then-MAC 또는 AEAD(GCM/ChaCha20-Poly1305) 사용
  • 복호화 후 파싱 전에 MAC 검증
  • 에러 메시지/타이밍 통일

CTF에선 흔하지만, 실서비스에서도 “레거시 CBC 쿠키”는 종종 살아 있습니다. 발견하면 즉시 교체가 정답입니다.