레이블이 패스워드인 게시물을 표시합니다. 모든 게시물 표시
레이블이 패스워드인 게시물을 표시합니다. 모든 게시물 표시

2013년 4월 10일 수요일

25개의 GPU 를 이용해 6시간안에 윈도우 패스워드를 깨트린다고 ?

패스워드 해쉬 크랙 관련하여 몇 개의 글을 포스팅 했었는데요, 작년12월에 나왔던 것을 이제야 하나 보게되었습니다. 재미있는 내용인데 그 내용인즉 25개의 GPU 를 이용해 윈도우 패스워드는 6시간 이내에 깨트릴 수 있다는 것입니다.

성능이 대단하죠? 초당 3500 억개를 연산할 수 있다고 합니다. MS 윈도우 제품중 NTLM 암호화 알고리즘을 사용하는 해쉬를 대상으로 한 것으로 패스워드 구성은 8 자 이내로 대문자/소문자, 숫자, 특수기호 등을 모두 포함한 것입니다. 이런 형태가 일반적으로 기업에서 사용하는 범주의 암호 형태이지요.

시스템은 5개의 4U 서버를 이용했고, 리눅스 기반으로 GPU 클러스트를 구성했습니다. 25개의 AMD Radeon GPU (HD7970, HD5970, HD6990, HD5870) 가 이용되었고 사용된 전략만도 7kW 라고 하네요.

한 컴퓨터에서 25개의 GPU 를 이용할 수 있는 없기 때문에 클러스트 구성을 한 것이고요 Virtual OpenCL 클러스트 플랫폼을 이용해 5개의 서버의 GPU 가 하나의 로컬 컴퓨터에 있는것 같이 구현한 것입니다. 패스워드 해쉬에 사용한 프로그램은 ocl-Hashcat Plus 로 GPU 를 지원하면서 무료로 이용할 수 있습니다.

이전에 테스트 하였던 컴퓨터는 Radeon HD6990 4개를 이용해 NTLM 해쉬에 대해 초당 880 억개를 했다고 하는데, 이전에 비하면 속도가 4배 가까이 증가한 것입니다. 일전에 링크드인 패스워드가 유출된 적이 있었습니다. 그 당시 그 패스워드 해쉬를 크랙하는데 650 만개의 패스워드중 90% 가 크랙되었다고 합니다. 그만큼 사용자들이 패스워드를 단순한 조합으로 사용하고 있다는 뜻이기도 합니다.

이전의 포스팅에서도 언급했듯이 패스워드를 사용시 어렵게 구성해야 합니다. 그러나, 현실은 쉽지 않죠 ^^
너무나 많은 사이트들에서 패스워드를 요구하다 보니 일일이 다 다르게 만들기도 힘들고 어렵게 하자니 외우기도 힘들어지고요. 그러다 보니 패스워드를 쉽게 만들어 사용하는 경우가 많은데, 이런 걸 보면 생각이 바뀌시지 않나요 ? :-)

[관련 포스팅]

2013년03월13일 15기가의 1,493,677,782 패스워드 단어 사전 공개 
2011년07월14일 분산 기반의 CPU/GPU 해쉬 크랙 프로젝트 'Durandal'
2010년09월15일 8자리 패스워드는 저리가~ 12자리 패스워드를 사용하자 
2010년11월23일 당신의 패스워드는 안전한가? 클라우드 기반 패스워드 크랙킹
2010년12월01일 자바스크립트기반의 분산 해쉬 크랙킹


[참고]
1. Password Cracking HPC, Passwords^12 보안 컨퍼런스
http://passwords12.at.ifi.uio.no/Jeremi_Gosney_Password_Cracking_HPC_Passwords12.pdf
2. ocl-Hashcat Plus
http://hashcat.net/oclhashcat-plus/
3. 관련 기사
http://arstechnica.com/security/2012/12/25-gpu-cluster-cracks-every-standard-windows-password-in-6-hours/

2010년 11월 23일 화요일

당신의 패스워드는 안전한가? 클라우드 기반 패스워드 크랙킹

패스워드 크랙킹을 하는데는 많은 컴퓨팅 자원이 필요하다. 많은 연산이 필요해지는데,
CPU 보다는 GPU 가 연산하는데 있어 훨씬 파워풀한 성능을 제공한다. 그런데,이런 GPU 도
클라우드 방식으로 이용하면 더욱 빠르게 처리 가능할 것이다. 최근 아마존에서 제공하는
EC2 클라우드 서비스를 이용해 패스워드를 크랙킹한 것이 소개되었다. 사용된 하드웨어
스펙은 아래와 같다:

22기가 메모리
33.5 EC2 컴퓨터 ( 인텔 제온 X5570, 쿼드코어 X 2)
NVIDIA M2050GPU X 2
1690GB 스토리지
64비트 플랫폼

CUDA-Multiforce 를 이용해 sha1 해쉬 파일을 크랙킹 하는데, 단지 49분이 걸렸다고 한다.
테스트로 이용된 해쉬는 총 14개이며, 아마존 EC2 를 이용하는데 비용은 1시간에 $2.10
이라고 한다. 클라우드 기반의 컴퓨팅 파워를 이용해 저렴한 패스워드 크랙킹이 가능해 진것이다.

일반적으로 이용되는 시스템 자원을 이용하면 얼마나 걸릴까? 때마침 잠깐 테스트할 만한
시스템도 있고하여 겸사겸사 테스트 해보았다. GPU 는 장착되어 있지 않고,
시스템 사양은 아래와같다 :

Intel(R) Xeon(R) CPU E5520  @ 2.27GHz 듀얼 쿼드코아 (16개 로지컬 CPU)
SAS 15K RPM 디스크
메모리 32 기가
64bit 플랫폼/리눅스

사용한 소프트웨어는 RainbowCrack 이다. 사전에 미리 테이블을 만드는 작업을
거쳐 최종 검증을 하게 되는데, 이 테이블을 만드는 사전 작업이 많은 시간이 소요된다.

1. 우선 앞서 예제에서 소개되었던 해쉬는 아래와 같다.

# more sha1_hashes.txt
EB45E66E03EE06E74AC824081C7A71352E51DF90
A94B95A7A4D432DE056B0030DA879AF841376069
3B615E3CD3ACA03AC818C7752A109EC7E2168532
8F2005004F8BAA7A1090A9BF3B03C48D38E78157
26BFB52D1809F04EAD2B7F5C002C1EAA7A584696
7110EDA4D09E062AA5E4A390B0A572AC0D2C0220
1902E3D6FC4E78A0BCC50BA12B882769AFBF4A8C
BFE06C47BE2390ACA934AB6A128C141DCEB4072F
CD3724AC40034097A3D27865D710E4F791B6AEDB
A9993E364706816ABA3E25717850C26C9CD0D89D
0D824508182A1AA0EEF9A0B6EE52F8A32AF06F0A
5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8
EF8420D70DD7676E04BEA55F405FA39B022A90C8
DA39A3EE5E6B4B0D3255BFEF95601890AFD80709

2. rtgen 을 이용해 레인보우 테이블을 생성한다.  이때 패스워드의 길이는 최소 1 에서
6 사이의 길이로 한 것이다.

# time ./rtgen sha1 ascii-32-95 1 6 1 3800 33554432 0
rainbow table sha1_ascii-32-95#1-6_1_3800x33554432_0.rt parameters
hash algorithm:         sha1
hash length:            20
charset:                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
charset in hex:         20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 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 7b 7c 7d 7e
charset length:         95
plaintext length range: 1 - 6
reduce offset:          0x00010000
plaintext total:        742912017120

sequential starting point begin from 0 (0x0000000000000000)
generating...
524288 of 33554432 rainbow chains generated (1 m 18.4 s)
1048576 of 33554432 rainbow chains generated (1 m 17.2 s)
1572864 of 33554432 rainbow chains generated (1 m 17.8 s)
2097152 of 33554432 rainbow chains generated (1 m 18.2 s)
2621440 of 33554432 rainbow chains generated (1 m 18.4 s)
3145728 of 33554432 rainbow chains generated (1 m 18.3 s)
3670016 of 33554432 rainbow chains generated (1 m 18.4 s)
4194304 of 33554432 rainbow chains generated (1 m 18.4 s)
4718592 of 33554432 rainbow chains generated (1 m 18.3 s)
5242880 of 33554432 rainbow chains generated (1 m 18.2 s)
5767168 of 33554432 rainbow chains generated (1 m 18.2 s)
(생략...)

real    83m51.179s

시간을 측정해 보았더니 83 분이 걸렸다. 적지 않은 시간이 걸렸는데, 이 작업이
진행되는 동안 CPU 는 100% 풀로 사용된 것이다. (16개의 Logical CPU)

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29166 root      20   0  157m  13m 1012 S 1600  0.0  22:01.80 rtgen

3. 생성된 테이블을 rtsort 로 정렬을 한다.

# ./rtsort  sha1_ascii-32-95#1-6_5_3800x33554432_0.rt
sha1_ascii-32-95#1-6_5_3800x33554432_0.rt:
32361852928 bytes memory available
loading rainbow table...
sorting rainbow table by end point...
writing sorted rainbow table...

4. 만들어진 테이블을 이용해 패스워드 해쉬 파일을 크랙킹 해본다.

# ./rcrack sha1_ascii-32-95#1-6_0_3800x33554432_0.rt -l sha1_hashes.txt
33167699968 bytes memory available
1 x 536870912 bytes memory allocated for table buffer
851200 bytes memory allocated for chain traverse
disk: sha1_ascii-32-95#1-6_0_3800x33554432_0.rt: 536870912 bytes read
searching for 14 hashes...
plaintext of 7110eda4d09e062aa5e4a390b0a572ac0d2c0220 is 1234
plaintext of cd3724ac40034097a3d27865d710e4f791b6aedb is Bwah
plaintext of 8f2005004f8baa7a1090a9bf3b03c48d38e78157 is P4s$
plaintext of a9993e364706816aba3e25717850c26c9cd0d89d is abc
plaintext of 1902e3d6fc4e78a0bcc50ba12b882769afbf4a8c is bad
disk: finished reading all files

statistics
-------------------------------------------------------
plaintext found:                              5 of 14
total time:                                   7.49 s
  time of chain traverse:                     7.19 s
  time of alarm check:                        0.19 s
  time of wait:                               0.00 s
  time of other operation:                    0.11 s
time of disk read:                            0.64 s
hash & reduce calculation of chain traverse:  101026800
hash & reduce calculation of alarm check:     3773101
number of alarm:                              3140
speed of chain traverse:                      14.04 million/s
speed of alarm check:                         19.96 million/s

result
-------------------------------------------------------
eb45e66e03ee06e74ac824081c7a71352e51df90  <not found>  hex:<not found>
a94b95a7a4d432de056b0030da879af841376069  <not found>  hex:<not found>
3b615e3cd3aca03ac818c7752a109ec7e2168532  <not found>  hex:<not found>
8f2005004f8baa7a1090a9bf3b03c48d38e78157  P4s$  hex:50347324
26bfb52d1809f04ead2b7f5c002c1eaa7a584696  <not found>  hex:<not found>
7110eda4d09e062aa5e4a390b0a572ac0d2c0220  1234  hex:31323334
1902e3d6fc4e78a0bcc50ba12b882769afbf4a8c  bad  hex:626164
bfe06c47be2390aca934ab6a128c141dceb4072f  <not found>  hex:<not found>
cd3724ac40034097a3d27865d710e4f791b6aedb  Bwah  hex:42776168
a9993e364706816aba3e25717850c26c9cd0d89d  abc  hex:616263
0d824508182a1aa0eef9a0b6ee52f8a32af06f0a  <not found>  hex:<not found>
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8  <not found>  hex:<not found>
ef8420d70dd7676e04bea55f405fa39b022a90c8  <not found>  hex:<not found>
da39a3ee5e6b4b0d3255bfef95601890afd80709  <not found>  hex:<not found>

위 결과와 같이 14개의 패스워드 중 5개를 발견하였다.  레인보우 테이블을 2개로
이용한 후에는 6개로 1개의 테이블을 이용했을 때보다 1개를 더 찾아내었다.
테이블을 더 만들어 해 보았더니 6개에서는 9개를 찾아냈다. (1개 테이블 생성에 80분이라고 하면,
6개 생성에만 8시간이 소요된 것이다)

# ./rcrack *.rt -l sha1_hashes.txt
32374755328 bytes memory available
6 x 536870912 bytes memory allocated for table buffer
851200 bytes memory allocated for chain traverse
disk: sha1_ascii-32-95#1-6_0_3800x33554432_0.rt: 536870912 bytes read
disk: sha1_ascii-32-95#1-6_1_3800x33554432_0.rt: 536870912 bytes read
disk: sha1_ascii-32-95#1-6_2_3800x33554432_0.rt: 536870912 bytes read
disk: sha1_ascii-32-95#1-6_3_3800x33554432_0.rt: 536870912 bytes read
disk: sha1_ascii-32-95#1-6_4_3800x33554432_0.rt: 536870912 bytes read
disk: sha1_ascii-32-95#1-6_5_3800x33554432_0.rt: 536870912 bytes read
searching for 14 hashes...
plaintext of 7110eda4d09e062aa5e4a390b0a572ac0d2c0220 is 1234
plaintext of cd3724ac40034097a3d27865d710e4f791b6aedb is Bwah
plaintext of 8f2005004f8baa7a1090a9bf3b03c48d38e78157 is P4s$
plaintext of a9993e364706816aba3e25717850c26c9cd0d89d is abc
plaintext of 1902e3d6fc4e78a0bcc50ba12b882769afbf4a8c is bad
disk: finished reading all files
searching for 9 hashes...
plaintext of eb45e66e03ee06e74ac824081c7a71352e51df90 is nVidia
searching for 8 hashes...
plaintext of 0d824508182a1aa0eef9a0b6ee52f8a32af06f0a is GoOd!
plaintext of bfe06c47be2390aca934ab6a128c141dceb4072f is G0o|)
searching for 6 hashes...
plaintext of 3b615e3cd3aca03ac818c7752a109ec7e2168532 is W3a$eL
searching for 5 hashes...
searching for 5 hashes...

statistics
-------------------------------------------------------
plaintext found:                              9 of 14
total time:                                   18.14 s
  time of chain traverse:                     17.06 s
  time of alarm check:                        0.76 s
  time of wait:                               0.00 s
  time of other operation:                    0.32 s
time of disk read:                            2.87 s
hash & reduce calculation of chain traverse:  339161400
hash & reduce calculation of alarm check:     17185485
number of alarm:                              13776
speed of chain traverse:                      19.88 million/s
speed of alarm check:                         22.52 million/s

테이블을 생성하기 까지는 많은 시간이 걸리나, 테이블을 이용해서 찾는 경우는
금방 찾아진다. 그렇다면, 위와 같은 경우를 접목해 보면
클라우드 기반의 시스템 파워를 이용해 테이블을 크게 생성해 놓는다면
추후에 패스워드를 찾는데 오랜 시간이 걸리지 않는것이다. 패스워드 길이가 왜
짧으면 위험한지에 대한 이유를 알 수 있을 것이다. 다음 글은 왜 12자리의 패스워드를 사용해야 하는 가에
대한 포스팅이다.


각 개별 컴퓨팅 파워는 높아지고, 클라우드 방식의 활용은 점차 확대되고 있다. 여기서 필자가 이것을
소개한 이유는 크랙킹을 소개하고자 하는 것은 아니다. 이런 자원이 좋은 쪽으로 이용되면
다양한 과학발전등 큰 도움이 되지만, 악의적 형태로 이용되면 말 하지 않아도 알 것이다.

현재의 수준이 이렇다는 것을 함께 공유하고 싶다. 왜 자꾸 '보안' 이라는 것에 대해서 관심을
가져야 하는 것인지를 말이다...

[참고]
1. 아마존 EC2 를 이용한 클라우트 크랙킹
2. RainbowCrack Project

2010년 9월 15일 수요일

8자리 패스워드는 저리가~ 12자리 패스워드를 사용하자

패스워드 이야기를 해 보자. 인터넷이 일상화 되면서 오히려 패스워드는 머리를 골치아프게 하는 놈이 되었다.
쇼핑을 하든 멀 하든, 국내 사이트는 특히 사이트에 가입을 요구한다. 이건 머, 울며겨자 먹기로 가입하는 경우도 허다하다. 또, 무슨 정보를 그렇게 많이 물어보고 기록하는지.

국내 외 사이트는 가입절차도 Simple 하다. 그냥 아이디 패스워드 정도다. 국내는 주민번호에, 회사 전화번호, 자택 전화번호, 주소, 결혼유무, 취미 등 아주 다양하다. 그런데 이 정보가 왜 필요하냐고. 묻고싶다.
더 답답한 것은, 이렇게 모은 정보를 안전하게라도 관리해야지. 허술한 보안정책에 개인정보는 인터넷 공간을 이리저리 떠 돌아 다니고 있다.

개인정보 이야기는 다음에 하고, 사이트 마다 가입시 기록하는 이 패스워드. 한 개로 사용하자니 위험하고 이래저래 달리 사용하자니 복잡하고. 거기다 몇 자지로 사용해야 할지도 고민이다. 이 패스워드와 관련한 글 한개를 보아서 같이 공유해 보고자 한다.

보통 많이 사용하는 8자리 이내의 패스워드 말고 12자리의 패스워드에 대한 이야기 이다. 조지아공대에서 발표한 보고서에 따르면 8자리 문자의 패스워드는 2시간 이내에 깰 수 있었다고 한다. 그런데 만약 12자리의 패스워드를 사용하면 8 자리를 깬것과 같은 컴퓨팅 환경에서 17,134 년이나 걸린다는 것이다.  12자리 이상은 거의 현실적으로 깨기 힘들어진다는 것이다.

그러므로 8자리 보다는 이제 12 자리의 패스워드를 사용하기를 권장한다고 한다.
한 예로, 한 해커가 초당 1조개의 패스워드를 조합할 수 있다는 가정하에 11 자리의 패스워드는 크랙하기 까지 180년이 소요되지만, 한 자리 문자를 늘리는 것만으로도 그 가능성은 아주 희박해진다. 왜냐 바로 17,134 년으로 확 높아지기 때문이다.

컴퓨팅 파워가 높아질 수록 패스워드 길이도 그에 따라 높아지도록 요구될 것이다. 우리는 이제 12 자리에 익숙해져 가야 할 것같다.

[참고]
1. 12-character passwords in the future