티스토리 뷰
1. 개요
- Oracle? DB가 아닌 "응답에 대한 판독"의 의미
- Padding? (PKCS5 - 8 bytes/block , PKCS7 - 16bytes/block)
평문 데이터가 블록 크기의 배수라면 패딩만 있는 빈블록이 생성됨. 왜냐하면 마지막 byte블록이 아래 예제와 같은 문자열일 경우 패딩과 문
자열에 대한 구분이 필요하기 때문에 패딩으로 채운 빈 블록이 생성 됨.
- 패딩 오라클 공격이란 패딩이 올바르게 되었는지 여부에 따라 서버의 응답이 다르기 때문에 이것을 이용한 공격이라고 정의할 수 있음
- CBC Mode?
- 각 블록의 평문과 앞 블록 암호문과의 배타적 논리합(XOR)으로 암호화하는 것으로, 블록 간의 의존 관계를 갖는 이용 모드.
2. 내용
+ 패딩 오라클 공격의 전제는 서버 응답 확인
- 올바른 암호화 값을 받았을 경우(200 OK)
- 패딩이 올바르지 않은 암호문을 받았을 경우(500 Internal Error)
- 패딩은 올바르나 잘못된 암호문을 받았을 경우(200 Ok - 커스텀 에러 메시지)
- 정상적인 암호화 과정
- EX)
- 암호문이 있다고 가정 : 7B216A634951170F / F851D6CC68FC9537 / 858795A28ED4AAC6
- 첫번째 블록은 IV로 사용됨 = 7B216A634951170F = IV
- 암호문1 = 7B216A634951170F
- 평문 : BRIAN;12;1;
- Padding Oracle 공격 방법
1) Intermediary Value만 찾으면 된다
2) How?
3) 패딩은 0x01 ~ 0x08까지로 제한됨(8Byte Block기준), 따라서 패딩이 1개일 경우부터 8개일 때까지의 경우를 모두 생각해서 IV를 대입
4) 평문의 마지막 바이트 패딩이 0x01이라고 가정, IV의 마지막 Byte가 공격벡터, 이 때 공격벡터의 범위는 0x00부터 0xFF, 0x3C일 때 200 응답,
따라서 중간 값은 0x3D(0x3C ^ 0x01)
5) 평문의 마지막 바이트 패딩이 0x02이라고 가정, IV의 마지막 2Byte가 공격벡터, 이런식으로 첫번째 IV까지 한 바이트씩 공격벡터를 늘려감.
6) 이렇게 해서 Intermediary Value를 알아 낼 수 있음
7) Intermediary Value도 알고 IV도 아는 상황(최초 암호문 내의 IV, 따라서 평문을 얻어낼 수 있음
3. 참고
'취약점분석' 카테고리의 다른 글
Apache Struts2 RCE S2-046 - CVE-2017-5638_2 (0) | 2017.03.22 |
---|---|
Apache Struts2 RCE S2-045 - CVE-2017-5638 (2) | 2017.03.12 |
CVE-2016-4971 - Wget Arbitrary File Upload / Remote Code Execution (0) | 2017.02.08 |
CVE-2016-10033 - PHPMailer RCE 취약점 분석 (0) | 2017.01.08 |
- Total
- Today
- Yesterday
- cve-2016-10033
- Struts2
- phpmailer
- Suricata
- s2-046
- cve-2016-10045
- 취약점분석
- 취약점
- Vulmon
- CVE-2017-5638
- PHPMailer RCE
- S2-045
- Snort
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |