2017. 1. 8. 00:13 :: 시스템 보안

안녕하세요. Message 입니다.

오늘은 존더리퍼(John the Ripper) 도구를 이용한 패스워드 크래킹 실습을 포스팅합니다.

실습환경은 윈도우/리눅스 모두 가능하며, 저의 경우는 칼리리눅스로 진행했습니다.

 

 

-----------------------------------------------------------------------------------------------------------------

0x00 준비

-----------------------------------------------------------------------------------------------------------------

 

비밀번호 크래킹과 관련된 도구는 크게 온라인/오프라인 나뉩니다.

온라인 도구로는 Hydra, Medusa, 데이터베이스 기반의 Findmyhash 등이 있습니다.

오프라인 도구는 오늘 살펴볼 John the Ripper (JTR) 가 대표적입니다.

존더리퍼는 유닉스 패스워드 크랙 도구로서, 초당 백만개 이상의 패스워드를 비교할 수 있다고 합니다.

성능이 더 좋은 도구들도 있지만, 크랙에 대한 배경지식을 쌓기에 유용한 도구라고 생각합니다.

 

윈도우 기반으로 사용하실분은 공식 홈페이지에서 Windows 버전으로 다운받으시면 됩니다.

URL : http://www.openwall.com/john/

 

존더리퍼는 칼리리눅스 05 - Password Attack 항목에 있으며, Johnny는 GUI기반입니다.

John의 경우 각종 옵션을 알아야 사용할 수 있으므로, 

Johnny를 통해 존더리퍼와 친숙해진 다음 John으로 넘어가겠습니다.

 

일단 존더리퍼로 크랙할 테스트 계정을 생성합니다.

저의 경우 아래와 같이 4개의 신규 계정을 추가하고, 비밀번호를 할당해주었습니다.

 test1 : test

 test2 : test!@#

 test3 : gksrmf -> 한글을 영어로 타자침

 test4 : gksrmf!@#

 

할당이 완료되었다면, shadow 파일에 패스워드가 해쉬되어 저장되었는지 확인합니다.

 

존더리퍼를 사용하기 이전에, 위에서 나온 shadow 파일과 구조에 대해서 간략히 알 필요가 있습니다.

일단 shadow 파일은 /etc/passwd 파일에 있는 패스워드 부분을 /etc/shadow에 두고 root만이 읽을 수 있는

400 권한으로 설정해두어 보안을 강화하기 위한 목적입니다.

shadow파일은 9개 항목으로 구성되며, 우리가 존더리퍼를 사용하면서 알아야할 부분은 암호가 해쉬되어 저장된 encryped 항목입니다.

구조 : [ $Hashid $Salt $Hash Value ]

 

Hashid는 첫번째 $ 뒤에 있는 문자로서, 아래 그림과 같이 Identifier에 따라 Hash Function과 Salt length 등이 변경됩니다.

 

Salt는 레인보우테이블을 이용한 단순 복호화를 방지하기 위한 값으로서, 두번째 $ 뒤에 있는 값입니다.

위에 있는 shadow 파일은 Identifier가 $6 이므로, SHA-512로 해쉬되어 2byte의 Salt 값을 가집니다.

Hash Value는 Hashid에 따른 해쉬방법과 Salt 값을 이용하여 Hash Function을 수행한 결과입니다.

 

 

 

-----------------------------------------------------------------------------------------------------------------

0x01 기능파악

-----------------------------------------------------------------------------------------------------------------

 

이제 어느정도 배경지식이 쌓였다면 Johnny를 통해 shadow 파일을 로드하여 살펴봅니다.

Shadow 파일의 내용이 User, Password, Hash 값 등으로 분리되어 있군요.

디폴트 모드로 바로 시작하려면 Start Attack 버튼을 누르면 되며, 결과값이 실시간으로 Password 항목에 채워집니다.

 

말이 나온김에 일단 Start Attack 버튼을 클릭해봅니다.

클릭한지 1초만에 root, test1 계정의 비밀번호가 바로 크랙되어 UI에 표기되었습니다.

gksrmf, test!@# 패스워드도 조금만 기다리면 될거라 예상했지만, 2시간이 넘어도 크랙되지 않았습니다.

하단에는 패스워드 크랙이 진행중인 계정의 개수와 함께 진행도가 %로 표시됩니다.

 

0~1초 크랙의 의미는, "크래킹 속도 매우 빠름" or "기본 사전파일에 해당 문구 있음" 정도로 유추할 수 있습니다.

존더리퍼 설정파일인 john.conf 파일의 내부를 살펴보면, Default wordlist를 사용하고 있음을 알 수 있으며

기본 wordlist에는 대부분이 문자열, 숫자열이고 특수문자는 거의 존재하지 않습니다.

 

Output 탭으로 이동하면 콘솔모드의 john에 표기되는 문구들을 볼 수 있습니다.

Identifier가 $6 이었기 때문에 sha512crypt 알고리즘으로 인지하였고, 4 OpenMP threads 모드로 크랙이 진행되는군요.

 

실제로 존더리퍼가 어떤 작업을 수행하고 있는지는 로그 파일을 살펴보면 됩니다.

John의 로그파일이 생성되는 경로는 환경마다 다를 수 있지만, 저의 경우 /root/.john/ 폴더에 생성되었습니다.

Johnny 로그파일은 동일 경로 jhonny 폴더 내부에 생성됩니다. 3개가 생성되어 있네요.

 

default.log 파일을 살펴보면 session의 시작부터 각종 rule이 적용되는 부분이 보입니다.

root와 test1 계정의 패스워드는 0초만에 크랙되었습니다.

 

이후 타임라인이 1시간이 지나도록 별다른 성과는 없었습니다.

 

 

이제 실행도 시켜 보았으니 존더리퍼를 좀더 유용하게 사용하기 위한 옵션을 알아봅니다.

Options 탭으로 이동하면 존더리퍼의 기능 5가지가 나옵니다.

Default behavior

   기본적인 모드로서, "Single crack"  → "wordlist" → "incremental" 순으로 크랙이 진행됩니다.

   순차적으로 실행되는 모드들은 기본으로 실행됩니다.

"Single crack" mode

   존더리퍼에서 가장 빠른 크래킹 기능입니다.

   계정명 + other information + word mangling(혼합)을 이용한 "Single" rule을 사용합니다.

   여기서 other information은 존더리퍼의 나름 자체적인 알고리즘이 아닐까 싶습니다.

"Wordlist" mode

   가장 많이 사용될만한 기능입니다. 말그대로 사용자가 사전파일을 대입하여 크랙을 진행할 수 있습니다.

   use rules 옵션을 지정하지 않으면, 사전파일에 있는 문구만 대입합니다.

   use rules 옵션을 지정하면, 대입한 사전파일 단어에 각종 알고리즘을 적용합니다. (사전파일이 클수록 많은 시간이 소요됨)

  

  

 

   하지만 Johnny 에서 use rules를 체크하거나, John에서 -rules 옵션을 지정해주면

   아래와 같이 mangling 옵션등을 활성화하여 룰을 적용합니다.

  

 

"Incremental" mode

   가장 강력한 기능을 가진 크래킹 옵션입니다. 모든 가능한 조합을 시도합니다.

   하지만 그만큼 시간이 필요하므로, 침투테스트 시간이 길지 않다면 사용하기 힘든 옵션입니다.

"External" mode

   사용자의 코드를 이용하여 크래킹을 flexible 하게 시도할 수 있습니다.

 

 

 

-----------------------------------------------------------------------------------------------------------------

0x02 크래킹의 시작 + 마무리

-----------------------------------------------------------------------------------------------------------------

 

이제 어느정도 기능 파악이 되었으니, 주어진 환경에서 크랙을 시도해볼일만 남았습니다.

침투테스트 기간이 항상 길다는 보장이 없으므로, 아마 사전파일을 이용한 크랙이 주를 이룰거라 생각됩니다.

사전파일을 만드는 방법은 이미 작성된 파일을 구하거나 직접 유추하는 방법이 있으며,

crunch,  cupp, 워드하운드, BruteScrape 등의 도구를 사용하는 방법도 있습니다.

 

여기서는 도구를 사용하는 방법보다는 기존에 작성된 파일을 이용한 크랙을 시도합니다.

제가 사용한 사전파일 다운로드는 아래 URL에서 가능합니다. 10억개의 사전파일이 있다는군요.

URL : https://dazzlepod.com/uniqpass/

 

또한 HackerPlaybook 책에서도 소개된 brutescrape 도구를 이용하여

침투테스트를 수행하고 있는 웹사이트의 정보를 모아 사전파일을 만들어 추가시키는것도 큰 도움이 될 수 있습니다.

GitHub : https://github.com/cheetz/brutescrape

 

아래 명령어는 콘솔모드인 John에 사전파일(passwords.txt)을 대입하여 크랙을 시도하는 명령어입니다.

진행도는 다른 콘솔을 열어서 -show 옵션을 주면 체크할 수 있습니다.

크랙 명령어 :  john -w:passwords.txt -rules shadow

진행도 확인 :  john -show shadow

 

이제 기다리는 일만 남았습니다.

개인적으로 패스워드 크래킹을 공부하면서, 시간 + 사전파일(+노하우)이 중요하다는 느낌이 듭니다.

시간이 제한적이라면 노하우를 통해 조금이라도 시간을 줄여야겠죠..

포스팅을 마칩니다. 읽어주셔서 감사합니다.

 

posted By Message.

Commit your way to the LORD, trust in him and he will do this. [PSALms 37:5]

 

posted by Red_Message