1. 개요
RainbowCrack는 Philippe Oechslin's의 time-memory trade-off 기술을 이용하여 구현하였으며, Hash를 크랙하는데 time-memory tradeoff 알고리즘을 이용한다. 일반적인 brute force를 이용하는 해쉬 크래커는 주어진 조건에서 가능한 많은 평문(plaintexts)을 만들고, 만든 평문들에 대해 Hash 값을 계산한다. (주어진 조건이란? 알파벳 소/대문자, 숫자, 특수문자 또는 이들을 결합한 형태, 문자열의 길이 등) 크래커가 만든 평문의 Hash값과 크랙하고자 하는 패스워드의 Hash값을 비교하여, 일치하는 해쉬값이 있으면 패스워드 크랙에 성공한 것이고 없으면 실패한것이 된다.
RainbowCrack은 time-memory trade-off 기술을 이용하기 때문에 일반적인 brute force 크래커보다 훨씬 빠르고 강력하게 해쉬를 크랙한다.
time-memory trade-off는 실제 Hash 값을 크랙하기 전에 선계산 (pre-computation) 단계에서 해쉬 알고리즘, 주어진 조건 안에서의 모든 평문과 그에 대한 Hash 쌍을 계산한다. 그 결과를 레인보우테이블 (Rainbow Table)에 저장하여, Hash 크랙에 사용된다.
2. 테스트 환경
운영 체제 (OS) : BackTrack5 R3 테스트에 사용된 버전 : RainbowCrack 1.5 |
3. 상세 분석
RainbowCrack을 사용하기 위해서는 Rainbow Table이 필요하다. Rainbow Table은 Rainbow Crack Project에서 비용을 주고 구입 (http://project-rainbowcrack.com/buy.php) 하거나, Google 등에서 검색하여 다운로드 받을 수 있다.
RainbowCrack 버전 1.5 이상부터는 레인보우테이블 생성기를 지원한다. RainbowCrack에서 제공하는 레인보우테이블 생성기를 이용하여, 레인보우테이블을 생성하고 Hash 값 크랙을 진행 해 보자.
RainbowCrack에서 제공하는 레인보우테이블 생성기는 아래와 같이 RainbowCrack과 같이 존재하며, 이름은 rtgen 이다.
tgen을 이용하여, 레인보우테이블을 생성하기 위해서는 다음과 같이 진행한다.
rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index 예 : rtgen md5 loweralpha 1 7 0 1000 1000 0 |
여기서 cahrset은 문자열 형식을 의미하는데, 형식은 아래와 같이 정해져 있다.
numeric = [0123456789] alpha = [ABCDEFGHIJKLMNOPQRSTUVWXYZ] alpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] loweralpha = [abcdefghijklmnopqrstuvwxyz] loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789] mixalpha = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ] mixalpha-numeric = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] ascii-32-95 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] ^_`abcdefghijklmnopqrstuvwxyz{|}~] ascii-32-65-123-4 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW XYZ[\]^_`{|}~] alpha-numeric-symbol32-space = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&* ()-_+=~`[]{}|\:;"'<>,.?/ ] oracle-alpha-numeric-symbol3 = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#$_]
참고 : http://project-rainbowcrack.com/charset.txt |
레인보우테이블 생성 command를 입력하기 어렵다고 생각하면, RainbowCrack Project에서 제공하는 레인보우테이블 생성 command를 사용하면 된다. (http://project-rainbowcrack.com/table.htm)
형식에 맞게 command를 입력하면, 아래와 같이 레인보우테이블을 생성하기 시작한다.
root@bt:/pentest/passwords/rainbowcrack# ./rtgen md5 loweralpha 1 7 0 1000 1000 0 rainbow table md5_loweralpha#1-7_0_1000x1000_0.rt parameters hash algorithm: md5 hash length: 16 charset: abcdefghijklmnopqrstuvwxyz charset in hex: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a charset length: 26 plaintext length range: 1 - 7 reduce offset: 0x00000000 plaintext total: 8353082582 sequential starting point begin from 0 (0x0000000000000000) generating... 1000 of 1000 rainbow chains generated (0 m 0.6 s) |
생성되는 레인보우테이블은 *.rt 포맷으로 생성되며, 이 레인보우테이블은 RainbowCrack에서만 사용이 가능하다. 이제 생성된 레인보우테이블을 가지고 Hash 크랙을 하게 된다. Hash 크랙을 하기전에 rtsort를 이용하여, 레인보우테이블을 쉽게 조회할 수 있도록 생성된 레인보우테이블의 체인의 끝점을 정렬해야 한다. 만약 정렬하지 않은 상태에서 Hash 크랙을 시도하면 아래와 같이 경고메시지를 출력하면서, Hash 크랙이 이루어지지 않는다.
root@bt:/pentest/passwords/rainbowcrack# ./rcrack md5_loweralpha#1-7_0_1000x1000_0.rt -l /root/Desktop /test.txt md5_loweralpha#1-7_0_1000x1000_0.rt is not sorted |
rtsort를 이용하여 레인보우테이블 끝점을 정렬하면, 이제서야 Hash 크랙에 이용할 수 있게된다.
이제 rcrack을 이용하여, Hash 값을 크랙해 보자. rcrack에서 사용하는 옵션은 아래와 같다.
옵 션 | 설 명 |
-h hash | 입력한 Hash값만 크랙 |
-l hash_list_file | Hash 값들이 저장되어있는 파일 |
-f pwdump_file | LM pwdump 파일 |
-n pwdump_file | NTLM pwdump 파일 |
저자는 rcrack에 Hash 값들이 저장되어 있는 파일을 아래와 같이 이용하였다.
위 그림은 레인보우테이블과 Hash 값이 저장되어 있는 파일을 디스크가 읽고 있는 그림이다. Hash 크랙이 완료되면 아래와 같은 결과를 출력해 준다.
결과값 확인 중!!!!!
참고 URL 및 도서
http://project-rainbowcrack.com/index.htm
[BackTrack5 R3] DotDotPwn (0) | 2013.03.27 |
---|---|
[BackTrack5 R3] Creddump (0) | 2013.03.04 |
[BackTrack5 R3] Wifi-Honey (0) | 2013.02.19 |
[BackTrack5 R3] HTExploit (0) | 2013.02.14 |
[BackTrack5 R3] Uberharvest (0) | 2013.02.12 |