0Pricing
Cryptology Academy · 강의

패딩 오라클 공격 자세히 알아보기

CBC 패딩 오라클 공격을 단계별로 살펴보고 사소해 보이는 복호화 오류 오라클도 치명적인 이유를 이해합니다.

패딩 오라클 공격 자세히 알아보기은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

CBC 모드 복호화 구조

CBC(암호 블록 연결) 모드에서는 각 블록을 복호화할 때 블록 암호로 암호문 블록을 복호화한 다음 그 결과를 이전 암호문 블록과 XOR합니다. 이 XOR 연산에는 중요한 특성이 있습니다. 공격자는 암호문 블록의 비트를 변경하여 다음 블록의 복호화된 평문에서 특정 비트가 예측 가능하게 영향을 받도록 만들 수 있습니다. 이 특성으로 패딩 오라클 공격이 가능해집니다.

PKCS#7 패딩 설명

블록 암호는 고정 크기 블록으로 된 입력을 요구합니다. PKCS#7 패딩은 마지막 블록을 채웁니다. 패딩에 3바이트가 필요하면 값이 각각 0x03인 바이트 3개를 추가합니다. 블록이 이미 가득 찼다면 모든 16바이트의 값이 0x10인 완전한 패딩 블록을 추가합니다. 복호화 중에는 패딩 바이트가 일관적인지(모든 N바이트의 값이 N인지) 확인한 후 제거합니다. 패딩이 유효하지 않으면 복호화에 실패해야 합니다.

오라클: 패딩 검증 악용

패딩 오라클은 복호화된 암호문의 PKCS#7 패딩이 유효한지 알려 주는 모든 시스템을 의미합니다. 오라클은 명시적인 오류 메시지(잘못된 패딩), 서로 다른 HTTP 상태 코드(500 대 403), 서로 다른 오류 응답 본문, 심지어 시간 차이일 수도 있습니다(유효한 패딩의 복호화가 약간 더 빠릅니다). 공격자는 키를 알 필요가 없으며, 유효한 패딩인지 아닌지를 나타내는 이진 신호만 있으면 됩니다.

바이트 단위 평문 복구

공격자는 특정 암호문 블록을 목표로 삼습니다. 평문의 마지막 바이트를 복구하려면 이전 암호문 블록의 마지막 바이트를 변경한 후 수정된 암호문을 오라클에 보냅니다. 오라클이 유효한 패딩을 보고할 때까지 가능한 256개의 값을 차례로 시도합니다. 유효한 패딩(0x01)을 만들어 내는 값에서 중간 복호화 값이 알려집니다. 이 값은 수정된 바이트와 XOR되어 0x01을 만들기 때문입니다. 여기에 원래 암호문 바이트를 XOR하면 평문 바이트가 드러납니다.

전체 블록 복구

마지막 바이트를 복구한 후에는 그 앞의 바이트를 목표로 삼습니다. 마지막 바이트의 중간 값은 이미 알려져 있으므로 이를 0x02가 되도록 만들 수 있습니다. 그런 다음 그 앞의 바이트에 대해 256개의 값을 시도하여 0x02 0x02 패딩이 유효해질 때까지 반복합니다. 이 과정을 각 바이트에 대해 반복하면 256 * 16 = 4,096회의 오라클 질의로 평균적으로 완전한 16바이트 블록 하나를 복구할 수 있습니다. 오라클이 빠르면 몇 초 안에 완료할 수 있습니다.

전체 메시지 복구

이 과정을 각 암호문 블록에 대해 반복합니다(이전 블록 없이는 복구할 수 없는 IV는 제외합니다). 128바이트 암호문(AES 블록 8개)을 완전히 복호화하려면 평균적으로 약 32,000회의 오라클 질의가 필요합니다. 초당 수백 건의 요청을 처리하는 웹 서버를 대상으로 하면 몇 분이면 충분합니다. 공격자는 암호화 키를 전혀 알지 못한 채 전체 평문을 복구합니다.

실제 공격 사례: POODLE

POODLE(다운그레이드된 레거시 암호화에 대한 패딩 오라클)은 SSL 3.0의 CBC 패딩 검증을 악용했습니다. SSL 3.0은 PKCS#7과 다른 패딩 방식을 사용했지만, 공격에는 오라클 개념을 적용할 수 있었습니다. 공격자가 SSL 3.0 세션에 콘텐츠를 주입하고 클라이언트가 SSL 3.0으로 다운그레이드되도록 만들 수 있었다면 패딩 오라클 기법으로 세션 쿠키를 복구할 수 있었습니다. POODLE은 SSL 3.0의 폐기를 촉진했습니다.

럭키 서틴과 BEAST

럭키 서틴(2013)은 TLS의 CBC MAC-then-encrypt 방식에 존재하는 타이밍 부채널을 악용했습니다. 패딩이 유효한지에 따라 MAC 검증 시간이 몇 나노초 정도 달라져 타이밍 오라클이 만들어졌습니다. BEAST(2011)는 TLS 1.0 CBC 모드에서 예측 가능한 IV를 악용해 세션 쿠키를 대상으로 선택 평문 공격을 수행했습니다. 두 공격 모두 TLS에서 CBC 모드를 올바르게 구현하기가 근본적으로 어렵다는 사실을 보여 주었습니다.

방어: CBC 대신 AEAD 사용

패딩 오라클 공격에 대한 확실한 방어책은 CBC 대신 AEAD(연관 데이터가 포함된 인증 암호화) 모드를 사용하는 것입니다. AES-256-GCM 및 ChaCha20-Poly1305와 같은 AEAD 모드는 복호화나 패딩 확인을 수행하기 전에 인증을 검증합니다. 인증 태그가 유효하지 않으면 복호화가 아예 수행되지 않으므로 패딩 정보가 유출되지 않습니다. TLS 1.3은 AEAD를 의무화하고 CBC를 완전히 제거합니다.

방어: 암호화 후 MAC

AEAD를 사용할 수 없다면 암호화 후 MAC 구성은 평문이 아니라 암호문에 MAC을 추가합니다. 복호화나 패딩 확인을 수행하기 전에 MAC을 검증합니다. MAC 검증에 실패하면 패딩 정보를 드러내지 않고 즉시 작업을 중단합니다. 타이밍 오라클을 방지하려면 이 작업을 상수 시간으로 수행해야 합니다. MAC 검증 실패만으로는 패딩이 유효했을지 여부에 관한 어떤 정보도 알 수 없습니다.

패딩 오라클 취약점 탐지

패딩 오라클 취약점을 시험하려면 먼저 알려진 메시지를 암호화한 다음, 수정한 암호문을 애플리케이션에 제출하고 응답을 관찰합니다. 유효한 패딩과 유효하지 않은 패딩에서 관찰 가능한 차이가 있는 응답(오류 메시지, 상태 코드, 응답 시간)이 나오면 패딩 오라클이 존재합니다. padbuster 및 PadBuster와 같은 자동화 도구는 암호문을 체계적으로 수정하고 응답을 분석하여 웹 애플리케이션의 패딩 오라클을 특별히 시험합니다.

패딩 오라클 작동 원리

키 없이 암호문을 복호화하려면 대상 시스템이 패딩 오라클 공격에 무엇을 제공해야 합니까?

패딩 오라클 공격 복습

패딩 오라클 복습: CBC 복호화의 XOR 속성을 이용하면 평문 바이트를 제어하여 조작할 수 있고, PKCS#7 패딩 검증은 이진 오라클을 드러냅니다. 공격자는 바이트 값을 반복적으로 시도하고 유효하거나 유효하지 않은 응답을 관찰하여 평문을 한 바이트씩 복구합니다. 실제 공격 사례로는 POODLE, 럭키 서틴, BEAST가 있으며, 방어책은 복호화 전에 인증을 검증하는 AEAD(GCM, ChaCha20-Poly1305)로 전환하는 것입니다.

자주 묻는 질문

“패딩 오라클 공격 자세히 알아보기” 강의는 무료인가요?

네 — “패딩 오라클 공격 자세히 알아보기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“패딩 오라클 공격 자세히 알아보기”에서 뭘 배우나요?

CBC 패딩 오라클 공격을 단계별로 살펴보고 사소해 보이는 복호화 오류 오라클도 치명적인 이유를 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“패딩 오라클 공격 자세히 알아보기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 패딩 오라클 공격 자세히 알아보기
  2. 재생 공격과 논스 재사용 취약점
  3. 애플리케이션 수준 코드의 타이밍 공격
  4. 주요 암호 오용 패턴
← Cryptology Academy(으)로 돌아가기