티스토리 뷰

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. 참고

Padding_Oracle_Attack_by_laughfool.pdf


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함