블로그

개발자를 위한 보안 정복: 공유 및 학습 시리즈 - 패딩 오라클

January 24, 2019

패딩 오라클(Padding Oracle)은 얼핏 들으면 얼터너티브 록 밴드 이름 같지만, 사실 암호화 키를 모르더라도 정보를 복호화할 수 있게 만드는 취약점입니다.

공격자 입장에서 이 취약점의 난이도는 최상위권에 속합니다. 마법처럼 버튼 하나로 복호화가 되는 것이 아니라, 해커가 셀 패딩과 관련하여 서버로부터 전송된 오류 메시지를 분석하여 암호화된 데이터가 어디서 끝나고 패딩이 어디서 시작되는지 알아내는 고된 과정을 거쳐야 하기 때문입니다. 이를 통해 암호화의 여러 비트를 파악하고, 충분한 시간과 입력값을 확보하면 암호를 해독할 수도 있습니다.

다행히 패딩 오라클을 이용해 암호화된 데이터를 해독하지 못하도록 막는 몇 가지 비교적 간단한 방법이 있습니다. 이번 에피소드에서는 다음 내용을 다룹니다.

  • 작동 원리
  • 이 취약점이 위험한 이유
  • 취약점을 방어하는 방법

패딩 오라클은 어떻게 작동할까요?

CBC(Cipher Block Chaining)는 데이터베이스에 저장된 셀과 같은 전체 정보 시퀀스를 전체 체인에 적용되는 암호화 키를 사용하여 암호화하는 블록 암호화 방식입니다. CBC를 사용하면 단일 암호문 블록의 암호화는 이전의 모든 블록에 의존하게 됩니다. 이론적으로는 블록 순서만 바뀌어도 데이터가 손상되기 때문에 매우 강력한 암호화 방식입니다.

CBC 암호(및 모든 블록 암호)의 문제는 정확한 크기의 블록으로만 암호화할 수 있다는 점입니다. 일반적으로 8바이트 또는 16바이트 단위로 처리됩니다. 그렇다면 CBC가 2바이트의 데이터를 16바이트 암호문 단위에 맞춰야 할 때는 어떻게 될까요? 이때 빈 공간을 채워 단위를 적절한 크기로 만들기 위해 패딩, 즉 의미 없는 문자를 사용합니다.

대부분의 패딩 방식은 잘 알려져 있으며, 그중 PKCS#7이 가장 널리 사용되므로 공격자는 어떤 패딩 방식이 사용되는지 알고 있을 가능성이 큽니다. 예를 들어, CBC가 블록 내에서 5개의 문자를 패딩해야 한다면, PKCS#7은 평문 뒤에 0x05라는 바이트 값을 5번 반복하여 채웁니다.

공격자는 CBC와 패딩 방식에 대한 지식을 활용하여 호스트 서버(오라클이라고도 함)에 쿼리를 보냅니다. 적절한 도구를 사용하면 서버가 쿼리의 패딩이 올바른지 여부를 응답하도록 강제할 수 있습니다. 이를 통해 공격자는 서버가 패딩이 올바르다고 응답할 때까지 암호문의 각 바이트에 대해 0부터 255까지 값을 대입해 봅니다. 그런 다음 다음 단위로 넘어가 이 과정을 반복하며 매번 패딩이 시작되는 지점을 기록합니다.

이 방법으로 메시지나 셀 전체를 바로 복호화할 수는 없지만, 평문이 끝나고 패딩이 시작되는 지점을 기준으로 체인의 모든 연결 고리를 파악할 수 있습니다. 또한 XOR 연산을 사용하여 원래 평문의 마지막 바이트 값을 알아낼 수도 있습니다.

패딩 오라클이 위험한 이유는 무엇일까요?

해커가 암호를 해독하기 위해 이렇게 많은 노력을 기울이는 이유는 그만큼 얻을 수 있는 이득이 크기 때문입니다. 가치 없는 정보를 암호화하는 사람은 거의 없습니다. 호스트 조직이 입는 피해는 유출된 데이터의 종류에 따라 달라집니다. 여기에는 비밀번호, 사용자 계정, 금융 정보, 신용카드 번호, 환자 기록, 민감한 통신 내용 등 매우 가치 있고 탐나는 정보들이 포함될 수 있습니다.

패딩 오라클을 사용하는 것은 후속 공격의 관문이 될 수도 있습니다. 예를 들어 패딩 오라클을 통해 비밀번호를 훔칠 수 있다면, 권한을 상승시켜 네트워크 내부로 더 깊숙이 침투하는 것은 쉬운 2차 작업이 됩니다.

모두가 암호화를 엿보기나 정보 유출을 막는 궁극적인 방어 수단이라고 생각합니다. 하지만 암호화 기술과 이를 깨려는 시도 사이의 공방은 수 세기 동안 계속되어 왔습니다. 패딩 오라클은 공격자에게 유리한 고지를 점하게 해주는 하나의 방법일 뿐입니다.

패딩 오라클 공격을 무력화하는 방법

다행히 패딩 오라클을 방지할 방법은 꽤 많습니다. 가장 좋은 방법 중 하나는 GCM(Galois/Counter Mode)이나 OCB(Offset Codebook Mode)와 같이 더 강력한 암호화 운영 모드를 사용하는 것입니다. 이는 128비트의 암호 블록 크기를 사용한다는 점에서 CBC와 다릅니다. 또한 각 데이터 블록에 카운터를 사용하고 그 숫자를 사용하여 암호문을 생성합니다. 즉, 패딩 오라클 공격에 취약하지 않습니다.

적절한 오류 처리 제어를 구현하는 것도 공격자의 성공 확률을 크게 낮출 수 있습니다. 패딩 오라클 공격은 정보 누출에 의존하므로, 암호화/복호화 실패 시 구체적인 패딩 오류 대신 일반적인 오류 메시지를 반환하도록 설정하십시오.

메시지 인증 코드(MAC)를 구현할 수도 있습니다. MAC 값은 비밀 키를 사용하여 메시지 내용의 변경 사항을 검증자가 감지할 수 있게 함으로써 데이터의 무결성과 진위 여부를 모두 보호합니다.

마지막으로, 모든 패딩 오라클 공격은 반복적인 쿼리를 필요로 합니다. 단일 셀의 패딩 방식을 파악하는 데 200회 이상의 요청이 발생할 수 있으며, 여기에 보호되는 정보 단위의 수를 곱한 만큼의 요청이 필요합니다. 동일한 소스에서 들어오는 요청 수를 제한하면 공격자가 본격적으로 시도하기 전에 접근을 차단하여 패딩 오라클 공격을 무력화할 수 있습니다.

패딩 오라클 추가 학습

공격자가 민감한 정보를 복호화할 수 있는 모든 방법은 악몽과도 같습니다. 하지만 이번 내용을 통해 이러한 상황을 미연에 방지할 수 있는 효과적인 방법들을 충분히 익히셨기를 바랍니다.

더 자세한 내용은 OWASP의 패딩 오라클 정의 및 체크리스트를 참조하세요. 또한, 사이버 보안 팀을 최고의 사이버 전사로 양성하는 Secure Code Warrior 플랫폼의 무료 데모를 통해 방금 배운 방어 지식을 직접 테스트해 볼 수 있습니다. 이 취약점과 다양한 위협을 방어하는 방법에 대해 더 알아보려면 Secure Code Warrior 블로그를 방문하세요.

지금 바로 패딩 오라클 공격을 막아낼 준비가 되셨나요? Secure Code Warrior 플랫폼에서 직접 도전해 보세요:

태그라인

배포 전 AI 기반 개발 거버넌스 확보

AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.

데모 예약하기
리소스 라이브러리

더 많은 블로그 살펴보기

보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.

전체 보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

더 알아보기
사례 연구
필터 라벨
div 블록 내부의 텍스트입니다.

하나의 보안 문화: Sage는 어떻게 챔피언 프로그램을 구축했는가

Sage가 유연하고 관계 중심적인 접근 방식을 통해 보안을 강화하고, 200명 이상의 보안 챔피언을 양성하며 실질적인 위험 감소를 달성한 사례를 확인해 보세요.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

2026년 사이버 보안 인식의 달: 기업 방어의 핵심, AI 보안 이해하기

주요 AI 기업 대부분이 안전 가이드라인이 마련될 때까지 AI 개발 속도를 전 세계적으로 늦춰야 한다고 공개적으로 촉구하는 시점에 이르렀지만, 사실 심각한 보안 문제는 이미 현실화되었습니다. 이로 인해 AI 도입에 따른 금전적 비용과 위험 부담이 계속 쌓이면서 수많은 보안 책임자와 경영진이 절박한 상황에 놓였습니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

인에이블러 8: 프로그램 브랜딩

성공적인 보안 코딩 프로그램을 위해서는 훌륭한 콘텐츠 그 이상의 것이 필요합니다. 인에이블러 8에서는 브랜딩을 통해 참여를 누구나 선망하는 위상 중심의 경험으로 바꾸는 방법을 알아봅니다.

더 알아보기
블로그
필터 라벨
div 블록 내부의 텍스트입니다.

이제 모든 직원이 AI 사이버 보안의 최전선에 있습니다

엔터프라이즈 기술 환경은 너무 늦기 전까지는 아무도 예상하지 못한 속도로 변화하고 있습니다. 우리는 공식적으로 사람이 직접 작성한 코드와 기본적인 코파일럿 지원의 시대를 지나 '에이전트 기반 개발 수명 주기(ADLC)'의 시대로 진입했습니다. 자율형 AI 에이전트는 여러 기능 전반에 걸쳐 전례 없는 효율성을 약속하지만, 동시에 완전히 새로운 차원의 보안 및 규제 위험을 야기합니다.

더 알아보기

배포 전 AI 기반 개발 보안 확보

소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.

데모 예약하기
항목이 없습니다.