POODLE ATTACK(푸들공격)은 SSL3.0을 이용하여 암호문을 추측하는 공격이다. SSL3.0은 오래된 버전으로 안전하지 않으며, 공격자는 이 버전을 사용하는 서버와 클라이언트 사이의 연결을 제어하여 공격을 성공시킨다. 이를 위해 공격자는 SSL 협상 체계를 조작하여 SSL3.0 프로토콜을 사용하도록 만들고, MAC-THEN-ENCRYPT 모드와 SSL3.0 패딩정의의 결함을 이용하여 평문을 추측한다. 이를 위해 공격자는 클라이언트-서버 접속을 제어하고, 마지막 패딩블록을 복제하여 메시지를 변경한다.
POODLE ATTACK을 완화하기 위해서는 SSL3.0 사용을 중단하고, TLS_FALLBACK_SCSV 메커니즘을 사용하여 SSL 협상을 실패해도 낮은 버전으로 시도하지 않도록 하는 등의 조치가 필요하다. CBC(Cipher Block Chaining) 모드는 블록 암호화 운영 모드 중 보안성이 제일 높은 암호화 방법이지만, POODLE ATTACK과 같은 패딩 오라클 공격으로 인해 보안 취약점이 발생할 수 있다. 따라서 CBC 모드를 사용할 때는 패딩을 제대로 처리하여 보안성을 강화해야 한다.POODLE ATTACK
POODLE(padding oracle on downgraded legacy encryption)의 약자다. 구글
SSL3.0을 TLS3.0으로 낮추어 암호문 추측하는 공격이다.
SSL3.0에서 이루어지는 공격이다. 해당 프로토콜은 오래되고 안전하지 않다. 공격자들은 웹사이트에서 쓰이는 인증쿠키를 해독할 수 문제점이 있다.
취약점을 발현시키기 위하여 공격자들은 다음과같은 사항을 따라야한다.
1. 공격자들은 클라이언트와 서버사이를 제어해야한다.
2. 공격자는 공격을 성공적으로 실행할수 있도록 희생자의 브라우저에 코드를 삽입할수 있어야한다(JavaScript 등)
클라이언트와 서버의 연결을 제어할수 있어야한다. 왜냐하면 공격자는 클라이언트를 제어하고 서버가 SSL3.0을 사용할수 있도록 만족시켜야한다.
공격자는 SSL 협상과정을 조작한다. SSL 핸드셰이크는 TSL 최신버전을 서버와 클라이언트 모두에 사용하려한다. 하지만 복잡한 이유 때문에
많은 클라이언트는 고전방식을 보함하고있다. 이러한 이유때문로 협상에 실패해 오래된 버전을 사용한다. 만약에 공격자가 SLL 협상 체계를 망치기위해 방해 한다면 클라이언트는
TLS1.1, TLS 10. 그리고 끝내는 SSL3.0 버전으 프로토콜로 통신하게 되는 것이다.
SSL3.0 프로토콜에서 Beast, Crime, Lucky-13 과 같은 공격이 있었다. 이와같은 공격들은 대책이 있지만
POODLE 공격은 SSL3.0을 사용하는 이상 취약점이 통한다.
POODLE 공격 동작 원리
SSL 설계 결함으로 공격이 가능하다.
1. SSL은 인증된 암호화인 MAC-THEN-ENCRYPT 모드를 사용한다.수신자측에서 패킷을 받으면 메세지를 복호화 하고나서 MAC의 유효성을 검증하게 된다.
이러한 순서로인해 공격자는 암호문을 변경해가며 평문을 추측할수 있게된다.
2. SSL3.0 패딩정의는 불완전하다. SSL3.0은 암호화에 블록암호화인 CBC 모드가 사용된다. SSL은 암호블록의 길이의 전체 데이터 정수만큼 패딩 바이트를
추가해야 한다. SSL3.0은 마지막 바이트만 패딩하기로 정의했다. 나머지 바이트가 패딩 되어야하는지는 정해지지 않았은 점이 2번째 결함이다.
공격자는 위의 두가지 결함을 이용해서 취약점을 발생시킨다.
평문이 하나있다고 가정하자. SSL3.0 프로토콜이 이 평문을 암호화 하기전에 MAC을 만들어 메세지에 MAC을 추가한다.
메세지의 길이를 정수로 만들기위해 마지막을 패딩한다.
만약에 메시지와 MAC을 붙여 블록의 길이가 정수로 끝낙 된다면 FUll 패딩 블록하나는 붙인다.
완성된 블록하나의 크기가 16 바이트 long 이라고 가정하면 (AES 암호화를 사용한다 가정) 패딩블록은 15의 값을 가지게된다. 패딩블록의 값은 정해지지않고 다른값일수도있다
키 K와 초기화 요소 IV로 암호화되면 평문은 암호블록으로 연결될 것이다.
CBC 모드에서 복호화는 다음과같이 이루어진다.
1. C3에 해당하는 평문을 알고싶으면 C3이 마지막으로 복사된 서버로 전체 패딩블록이 필요하다는 메시지를 보낼 것이다.
공격자는 마지막 바이트 값을 알기위해 정해진 길이만큼 고정해야한다. 평문요청을 패딩공격으로 수행하게된다.
2. 서버는 이러한 요청을 패디잉 올바른지에따라 수락하거나 거절하게된다. 즉 마지막 패딩블록이 15 값을 가진지 확인한다.
3. 암호화 CBC 모드에서, 다음과 같은 공식이 될 것이다.
4. 15가 아니라면 서버는 거부할것이다. 마지막바이트의 길이가 범위내가 아니라면 outright 매세지를 출력한다 만약 범위내라면 패딩을 벗겨내고 MAC의 유효성을 검사하게된다.
5. 만약 공격자가 같은 요청을 만들어낸다면(요청이 같아도 IV로인해서 암호문은 랜덤 이다) 평균 256개의 요청마다 서버가 요청을 받게된다.
블록 C3의 평문은 요청간에 내용이 바뀌지않는다. 하지만 Cn-1로 XOR되어 요청마다 바뀌게된다.
6. 공격자는 평문의 한문자를 알아냈고 평문매세지를 효율적으로 한바이트씩 바꾸어나갈수있다.
7. 메세지가 복호화될때까지 반복한다.
간단한 시나리오
공격자는 자바스크립트를 실행할 수 있다. 희생자의 브라우저에서 그리고 해당브라우저가 다른 곳으로 요청을 보낸다. 삽입된 자바스크립트는
HTTP 요청 경로와 바디에대해 완전한 제어를 가지고있다. 이 주입된 코드는 이제 SSL 3.0이 요청을 암호화할 때 일반 텍스트와 MAC가
하나의 전체 패딩 블록을 생성하도록 경로와 본체의 길이를 "관리"할 수 있다.
브라우저는 요청과 함께 쿠키를 보낼 것이다. 클라이언트-서버 접속도 제어하는 공격자는 이제 (마지막 블록으로서)
관심 블록을 복제함으로써 이 공격을 개시할 수 있다. 수신자가 레코드를 수신하면 공격자는 (평균) 256개의 요청을 사용하여
쿠키의 마지막 바이트를 안다. 공격자는 메시지의 경로와 본문에 대한 완전한 제어를 가지고 있기 때문에 콘텐츠를 이동 및 정렬하여
완전한 패딩 블록을 만들 수 있다
푸들공격영향
푸들어택은 Beast attack 보다 발동시키기 쉽지만 heartbleed attack 만큼 위험하진않다. 덜중유한 이유는 SSL3.0에서만 작동하기 때문이다.
SSL3.0은 민감한 HTTP헤더 데이터(세션 ID가 저장된 쿠키)를 공격자들이 복호화 할수있다.
SSL 3.0은 현재 주로 TLS 1.x 버전의 프로토콜로 대체되었다. 그러나 기존 이유(IE-6에 대한 지원이 주요 이유 중 하나임)로 인해
많은 웹 서버는 여전히 SSL 3.0 프로토콜을 지원한다.
많은 브라우저도 마찬가지다. 오늘날 대부분의 브라우저는 SSL 3.0 프로토콜을 지원한다.
푸들공격완화방법
위에 언급했듯이 타당한 예방책은없다. 완화책으로써 SSL3.0사용을 안할것으로 조취한다. 다음과 같이 따른다.
1. 브라우저에서 SSL3.0 지원 끄기.
2. 웹서버에서 SSL3.0 지원 끄기
3. TLS_FALLBACK_SCSV 메커니즘을 사용하기 SSL 협상을 실패해도 낮은버전으로 시도를 하지않게한다. 구글크롬과 구글서버는 이기능을 지원한다
CBC(Cipher Block Chaining) 모드
블록 암호화 운영 모드 중 보안성이 제일 높은 암호화 방법이며 가장 많이 사용된다.
처음 암호화시 IV(Initial Vector)와 평문을 XOR하고 첫 암호화를 시작한다. 평문의 각 블록은 암호문과 XOR 연산을한고 블록암호화한다.
암호문이 블록의 배수가 되기에 복호화후 평문을 얻기위해서 Padding 해야한다.
암호화가 순차적으로 수행이된다.
복호화시 암호문이 깨지게되면 해당블록과 다음블록의 평문까지 영향을 미치게된다.
Cyber-Luna