홈 > IT > IT정보
IT정보

Oracle Padding Attack 1

Oracle Padding Attack의 경우 블록함호화의 CBC (Cipher Block Chaining)방식의 특징을 활용하여

가장 마지막 문장을 키가 없는 상황에서도 복호화하는 공격기법입니다.

따라서, 공격방식에 앞서 CBC방식의 원리와 구조에 대하여 미리 알아야 공격이 가능합니다.


*Encryption Part*


블록암호화 방식의 특징은 데이터(평문)를 비트단위로 쪼개어 암호화를 진행하는 것이 아니라,

일정한 크기의 블록형태로 쪼개어 암호화를 진행합니다.

처음에는 앞의 암호문 블럭이 존재하지 않으므로,

초기벡터IV(Initialization Vector)와 평문의 첫 블록으로 암호화 연산을 진행하고,

그 결괏값을 암호알고리즘을 통하여 암호화를 하게 됩니다.

암호알고리즘은 대표적으로 그닥 어렵지않은 DES를 들 수가 있겠군요...


+ IV(초기화벡터) : 비밀키와 마찬가지로 송신자와 수신자 간 미리 약속되어야 하나,

공개된 값을 사용해도 무방함. 암호화를 할 때마다 다른 랜덤 비트열을 사용하는 것이 보편적입니다.


+ DES에 관련된 정리문서 - http://www.hacure.com/bbs/board.php?bo_table=util&wr_id=4


암호알고리즘을 통과한 블록은 이제 기존의 초기벡터가 하던 역할을 수행하게 됩니다.

바로 다음 블록과의 CBC연산을 진행하는데요, 이 과정이 계속 반복되겠죠.

마지막 블록의 크기가 처음 IV와 연산한 평문블록의 크기보다 같거나 작을때까지....

만약 같은경우 마지막 블록까지 그대로 위의 방식대로 진행하게 되지만

같을확률이 생각보다 높지 않기 때문에 블록의 크기를 맞추고자, 평문뒤에 임의의 값을 삽입하는

"패딩(Padding)이라는 기법을 사용합니다.

이후 똑같이 CBC방식으로 연산이 진행됩니다.


+ 패딩(Padding) : 부족한 길이만큼을 '0'으로 채우거나 임의의 비트들로 채워넣는 것


여기까지가 CBC블록 암호화 방식의 전반적인 내용입니다. CBC방식은 암호화방식(DES, AES 등)과는

다른 블록암호화 방식으로 암호화방식과 같이 사용되는 점 헷갈리지 않았으면 하네요~


*Decryption Part*


암호문을 블록으로 쪼갠 후 맨 마지막 블록을 복호화 합니다.

그 결과값을 마지막 암호문 바로앞의 블록과 연산을 하면 맨 마지막 문장의 평문이 출력됩니다.

이 과정을 맨 처음블록이 있는 곳 까지 반복하여 시형하면 평문으로 복호화 할 수 있습니다.


*Exploit*


이 취약점은 암호화에서의 패딩방식과 이를 처리하는 서버의 방식에서 발생합니다.

서버에서 암호문을 복호화할 때는 3가지 경우의 수가 있씁니다.(사실 어떻게보는 3가지 뿐일듯..)


1. 복호화가 정상적으로 완료된 경우

 - 올바른 암호문을 정상적인 절차를 거쳐 복호화 한 경우 원래의 제대로 된 평문을 구할 수 있습니다.

(너무 당연한가요...?) 이 경우에는 별다른 오류가 발생하지 않습니다.


2. 복호화 연산 수행 시 패딩 오류가 발생하는 경우

 - 암호화 된 블록을 복호화 하고 IV와 복호문을 연산하면 평문이 나옵니다.

이는 패딩 규칙에 따라 패딩의 수 만큼의 일정한 값을 가지고 있습니다.

만약, 복호문이 이 규칙에 어긋나게 되면 에러가 발생합니다.


3. 복호화 연산 수행 시 패딩 오류는 없지만 복호문이 제대로 된 값이 아닐 경우

 - 복호화는 오류 없이 끝났으나, 결과가 올바르지 않은 경우로, 2번의 경우와 같은 에러를 표출하게 됩니다.


=사용자가 암호문을 조작하는 것이 가능하고, 서버에서 표출하는 오류에 대하여(2번과 3번) 구분할 수 있다면

Blind SQL injection과 비슷한 방식으로 암호문의 마지막 문장을 편법을 통하여 복호화 하는 것이 가능합니다.

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오스토리로 보내기
  • 네이버밴드로 보내기
  • 네이버로 보내기
  • 텀블러로 보내기
  • 핀터레스트로 보내기
0 Comments
Category
State
  • 현재 접속자 79(2) 명
  • 오늘 방문자 519 명
  • 어제 방문자 329 명
  • 최대 방문자 628 명
  • 전체 방문자 25,219 명
  • 전체 게시물 541 개
  • 전체 댓글수 91 개
  • 전체 회원수 30 명
Facebook Twitter GooglePlus KakaoStory NaverBand