POODLE 공격(Padding Oracle On Downgraded Legacy Encryption) 은 SSL 3.0이라는 오래된 보안 프로토콜의 취약점을 악용하여, 클라이언트와 서버 간의 암호화된 데이터를 훔치거나 해독하는 공격입니다. 이름 그대로 구식 암호화 방식을 강제로 사용하게 만들어 암호화된 데이터를 중간에서 가로채고 분석하는 방식입니다.
Padding Oracle에서 오라클이란?
여기서 말하는 오라클은 암호화와 관련된 패딩 오라클(Padding Oracle) 공격을 의미하는 것입니다. Oracle은 오라클 데이터베이스나 오라클 서버와 같은 특정 소프트웨어를 말하는 것이 아닙니다.
오라클은 암호화 시스템이 취약점에 의해 정보를 유출할 때 이를 이용하는 방식으로 공격자가 데이터를 복호화하는 데 활용되는 메커니즘을 말하는 것입니다.
패딩은?
패딩(Padding)은 암호화에서 사용되는 기법으로, 데이터의 길이를 특정 블록 크기(Block Size)에 맞추기 위해 추가되는 데이터를 의미합니다. 대칭 키 암호화 알고리즘 중 많은 블록 암호(Block Cipher)는 고정된 길이의 데이터 블록(예: 128비트 또는 16바이트)을 입력으로 받기 때문에, 암호화할 데이터의 길이가 이 블록 크기의 배수가 아니면, 이 길이를 맞추기 위해 패딩을 추가합니다.
패딩의 필요성
블록 암호는 일정한 크기의 데이터 블록을 처리하도록 설계되어 있습니다. 예를 들어, AES(Advanced Encryption Standard) 암호화 알고리즘은 128비트(16바이트) 크기의 블록을 사용합니다. 만약 암호화할 데이터가 16바이트의 배수가 아닌 경우, 마지막 블록의 크기가 부족하게 되므로 이 데이터의 길이를 맞추기 위해 패딩을 추가합니다.
패딩의 역할
패딩은 데이터가 암호화 알고리즘의 요구사항을 충족하도록 데이터를 정렬하는 역할을 합니다. 그러나 패딩이 올바르게 처리되지 않거나, 패딩을 검증하는 과정에서 특정 응답을 제공하면, 이를 악용한 공격(예: 패딩 오라클 공격)이 가능합니다.
패딩의 종류
패딩은 여러 가지 방식으로 추가될 수 있습니다. 가장 일반적인 패딩 방법은 다음과 같습니다.
1. PKCS#7 패딩:
- 이 방식은 부족한 바이트의 수만큼 각 바이트에 그 값을 채웁니다.
- 예를 들어, 블록 크기가 8바이트이고 마지막 블록이 5바이트 길이라면, 3바이트가 부족합니다. 따라서 패딩은 03 03 03으로 추가됩니다.
2. Zero Padding:
- 부족한 부분을 0으로 채우는 방식입니다.
- 이 방식은 데이터의 마지막 바이트가 실제로 0인 경우 구분이 어려울 수 있습니다.
3. ANSI X.923 패딩:
- 부족한 부분은 0으로 채우고, 마지막 바이트에 패딩의 길이를 명시합니다.
- 예를 들어, 마지막 블록에 3바이트가 부족하면 00 00 03이 추가됩니다.
4. ISO/IEC 7816-4 패딩:
- 첫 번째 패딩 바이트는 0x80로 설정되고, 나머지는 0x00으로 채워집니다.
패딩 오라클(Padding Oracle) 공격
- 패딩 오라클 공격은 암호화된 데이터의 패딩을 이용해 암호문을 복호화하는 공격 방법 중 하나입니다. 여기서 오라클(Oracle)은 암호화 프로토콜이 패딩이 유효한지 아닌지를 공격자에게 알려주는 취약한 시스템을 지칭하는 일반적인 용어입니다.
- 이 공격은 주로 CBC(Cipher Block Chaining) 모드를 사용하는 블록 암호에서 발생하며, 시스템이 잘못된 패딩 오류에 대해 다르게 응답하면 공격자가 이를 이용해 암호화된 데이터를 점진적으로 해독할 수 있습니다.
POODLE 공격을 이해하는 비유
한 번 상상해보세요. 두 사람이 비밀스럽게 통화하고 있습니다. 이 통화를 엿듣고 싶은 사람이 그들 사이에 끼어들어, 구식 전화기를 사용해 대화를 하도록 강요한다고 생각해보세요. 구식 전화기에는 보안이 부족해서 대화 내용을 쉽게 들을 수 있습니다. POODLE 공격은 바로 이런 식으로, 안전하지 않은 오래된 방법(SSL 3.0)으로 웹사이트와 사용자가 소통하게 만든 다음 그 내용을 훔쳐보는 것입니다.
POODLE 공격이 일어나는 상황
POODLE 공격이 발생할 수 있는 상황은 다음과 같습니다.
1. 웹 브라우저와 웹 서버가 SSL 3.0을 지원하는 경우:
- 많은 웹사이트와 웹 브라우저는 최신의 안전한 보안 프로토콜인 TLS(Transport Layer Security)를 사용합니다. 그러나 하위 호환성 때문에 여전히 오래된 SSL 3.0도 지원하는 경우가 있습니다.
- POODLE 공격은 바로 이 점을 노립니다. 공격자는 브라우저와 웹 서버가 SSL 3.0으로 통신하게끔 유도하여, 취약점을 악용할 수 있는 환경을 만듭니다.
2. 다운그레이드 공격(Downgrade Attack):
- 다운그레이드 공격이란, 클라이언트(예: 웹 브라우저)와 서버가 더 안전한 TLS가 아닌, 취약한 SSL 3.0을 사용하도록 강제로 ‘강등’시키는 공격입니다.
- 공격자는 클라이언트와 서버 간의 연결을 방해하고, TLS 연결을 실패하게 만들어 두 시스템이 SSL 3.0으로 연결되도록 만듭니다.
3. 공용 와이파이 및 네트워크 상황:
- POODLE 공격은 주로 공용 와이파이 네트워크나, 해커가 제어할 수 있는 네트워크 환경에서 발생합니다. 공격자는 공용 네트워크에서 데이터를 중간에서 가로채는 방식으로 공격을 수행합니다.
POODLE 공격이 어떻게 작동하는지
이제 POODLE 공격이 구체적으로 어떻게 이루어지는지 좀 더 쉽게 풀어서 설명해 보겠습니다.
1. 공격 환경 설정:
공격자는 웹 브라우저와 웹 서버가 SSL 3.0을 사용하도록 유도합니다. 이를 위해 클라이언트와 서버 간의 초기 연결을 방해하거나, SSL 3.0을 사용하도록 강제할 수 있는 상황을 만듭니다.
2. 암호화된 메시지를 가로채기:
- 클라이언트와 서버가 SSL 3.0으로 연결된 상태에서, 클라이언트가 서버에 요청을 보냅니다. 이 요청은 SSL 3.0에 의해 암호화된 상태입니다.
- 공격자는 클라이언트가 서버로 보내는 암호화된 데이터를 가로챕니다.
3. 패딩 오라클 공격 실행:
- SSL 3.0에서는 암호화된 데이터를 전송할 때, 패딩(padding)이라는 데이터를 추가하여 메시지의 길이를 맞춥니다. 여기서 패딩이란, 데이터를 암호화할 때 필요한 추가 데이터를 의미합니다.
- SSL 3.0의 문제는 이 패딩을 처리하는 방법이 매우 취약하다는 점입니다. 공격자는 이 점을 이용해 클라이언트가 서버로 보내는 데이터를 여러 번 조작하여 보내고, 그때마다 서버의 반응을 분석하여 패딩이 올바른지 확인합니다.
- 이렇게 반복하면서, 공격자는 암호화된 데이터를 한 글자씩 해독해 나갑니다.
POODLE 공격이 가능한 조건
POODLE 공격이 성공적으로 수행되기 위해서는 다음 조건이 필요합니다:
- SSL 3.0을 사용하는 경우:
클라이언트와 서버가 최신 보안 프로토콜(TLS) 대신 SSL 3.0을 사용해야 합니다. 대부분의 최신 시스템에서는 기본적으로 TLS를 사용하지만, SSL 3.0도 여전히 지원하는 경우가 있습니다. - 중간자 위치에서의 공격 가능:
공격자는 클라이언트와 서버 간의 통신을 감시하거나 중간에서 데이터를 가로챌 수 있어야 합니다. 주로 공용 와이파이 같은 개방된 네트워크에서 발생할 수 있습니다.
POODLE 공격을 방지하는 방법
1. SSL 3.0 지원 비활성화:
- 서버와 클라이언트 모두 SSL 3.0 지원을 완전히 비활성화해야 합니다. 대부분의 웹 브라우저와 웹 서버는 이러한 옵션을 제공합니다.
2. 최신 TLS 버전 사용:
- TLS 1.2 또는 TLS 1.3과 같은 최신의 보안 프로토콜을 사용하여 암호화된 통신을 보호합니다. 최신 TLS 프로토콜은 POODLE 공격에 대한 취약점이 없습니다.
3. HSTS(HTTP Strict Transport Security) 사용:
- 웹사이트가 항상 HTTPS 연결을 사용하도록 강제하는 HSTS 헤더를 사용하면, SSL 3.0으로의 다운그레이드를 방지할 수 있습니다. 이를 통해 클라이언트가 항상 최신 보안 프로토콜을 사용하도록 보장할 수 있습니다.
4. 네트워크 보안 강화:
- 공용 와이파이를 사용할 때는 VPN을 사용하는 것이 좋습니다. VPN은 데이터 트래픽을 암호화하여 MITM(중간자 공격)을 방지할 수 있습니다.
TLS를 사용하자
POODLE 공격은 SSL 3.0의 취약점을 악용하여, 안전하지 않은 암호화 방식으로 데이터를 주고받도록 유도한 뒤, 그 데이터를 해독하는 공격입니다. 이를 방지하려면 SSL 3.0을 비활성화하고 최신의 안전한 보안 프로토콜(TLS)을 사용하는 것이 필수적입니다. 개인 사용자는 최신 웹 브라우저를 사용하고, 공용 네트워크 사용 시 주의하는 것이 중요합니다.