오랜만에 포스팅을 하니 감회가 새롭다.

john the ripper 에 대해 알아보도록 하자.

john the ripper는 유닉스 패스워드 크랙툴로 리눅스뿐만 아니라 OS X, Window 계열의 플랫폼도 지원한다.

자세한 것은 아래 링크로 들어가서 참고하도록 하자.

http://www.openwall.com/passwords/microsoft-word

나는 kali linux에서 이미 설치한 파일을 이용하였으며, debian계열에서는 apt-get install john을 이용하여

손쉽게 설치 할 수 있다고 한다.

여담으로 이 john the ripper는 영국의 연쇄살인마 jack the ripper에서 이름을 바꾼 것 같다. 

잭 더 리퍼(Jack the Ripper)는 1888년 8월 7일부터 11월 10일까지 2개월에 걸쳐 영국 런던의 이스트 런던 지역인 화이트채플에서 최소 다섯 명이 넘는 매춘부를 엽기적인 방법으로 잇따라 살해한 연쇄 살인범을 말한다. ‘잭’은 특정 인물의 이름이 아니라 영어권에서 이름이 없는 남성을 가리킬 때 쓰는 이름이다. 한국에서는 흔히 ‘칼잡이 잭’, ‘면도날 잭’, ‘살인마 잭’, ‘토막 살인자 잭’ 등으로 불린다. 이 살인마가 살인을 하던 시기는 과학 수사가 매우 뒤떨어진 시대였고 지문확보 조차 되지 않아 많은 이들이 경찰에게 잭 리퍼 검거 방법을 써 보내었고, 심지어 당시 영국 여왕 빅토리아 여왕까지 검거 방법을 보냈을 정도로 많은 이들이 두려워하는 존재였다. 그러나 125년이 지난 지금까지도 잭 리퍼는 검거되지 못했다. 단서가 거의 없으나 그가 남긴 단서는 단 한 가지였다고 한다. 영어로 휘갈겨 쓰여져 있었는데, “유태인들은 아무 책임이 없다. (The Jewes are The men That Will not be Blamed For nothing)”라는 뜻이라고 한다.

출처 : http://ko.wikipedia.org/wiki/%EC%9E%AD_%EB%8D%94_%EB%A6%AC%ED%8D%BC


일단 먼저 john the ripper(이하 john)의 사용법을 알아보기 전에 passwd파일과 shadow파일에 대해 알아보도록 하자. 왜냐하면 리눅스 계열에서 john을 이용하여 shadow파일을 크랙하기 때문이다. 아래 그림은 passwd파일로 /etc 폴더에 위치한다. passwd는 아래 표와 같은 규칙으로 구성된다. 


① : 사용자 계정 이름(대부분 ID라고 부른다)

② : 사용자 비밀 번호(x로 되어 있는것은 섀도우 패스워드 시스템에 의해 /etc/shadow 에 암호화된 형태로 저장 되어있음)

③ : 사용자 UID(리눅스의 모든 정보는 수치값으로 저장 되어 있음 root -> 0(UID))

④ : 사용자 소속 그룹 GID(리눅스의 모든 정보는 수치값으로 저장 되어 있음 root -> 0(GID))

⑤ : 사용자 정보(이름이나 연락처 같은것을 적는란)

⑥ : 사용자 계정 디렉토리(계정 홈 디렉토리)

⑦ : 사용자 로그인 쉘(bash,csh,zsh....)

출처 : http://datax.co.kr/new/bbs/board.php?bo_table=alzza&wr_id=14

▲/etc/passwd파일


위 표에서 나온 것과 같이 id에 대한 비밀번호는 shadow파일에 저장되는데, 이 또한 규칙을 지닌다. 아래 표를 참고 하시라.

계정명 : 암호화된 패스워드 : 최종 암호 변경일 : 암호변경 최소일수 : 암호변경 유예기간 :

암호변경 경고 일수 : 계정 사용 불가 날짜 : 계정 만료일 : 예약

출처 : http://lanian.tistory.com/93


우리의 목적인 암호화된 패스워드는 아래와 3가지로 나뉜다 .

$ hashid $ salt $ hash value 

아래 그림의 세부분처럼 순서대로 hashid salt hash value 값을 가진다.

▲/etc/shadow파일의 암호화된 패스워드의 규칙

hashid는 어떤 scheme을 이용하여 hash를 했는 지를 보여준다 .아래 표와 같이 1는 md5를 나타내며 위 그림에서는 $1, $5, $6이 주를 이루는 것을 알 수 있다. 

▲/etc/shadow파일의 hashid에 따른 해시 방법

그 다음은 salt다. 해시는 단방향함수이다. 다시 말하면,  A->B는 가능하지만 B->A는 불가능하다는 뜻이다. 결국 해시를 하고 난 값을 가지고 해시하기 전의 값을 못 구한다는 말이다. 그래서 이를 공격하기 위해서 해커들은 레인보우테이블을 미리 구해둔다. 레인보우테이블은 모든 해시 쌍들을 구해놓은 것으로, 이를 통해 해시값들을 대입하여 고속으로 패스워드를 크랙할 수 있게한다. 일반 사용자는 아무리 비밀번호를 어렵게 해도 이에 대한 해시값만 해커가 대입을 한다면 패스워드가 노출될 수 밖에 없다. 그래서 이를 좀 더 어렵게, 성가시게 하기 위해 salt를 넣는다. salt는 해시를 하기전에 랜덤한 값을 참고하는데, 해커가 salt값을 모른다면 레인보우테이블을 가지고 있어도 의미가 없다. 해당 salt 따른 값이 아니기 때문이다. 

▲salt와 plainttext(원본 비밀번호)를 함께 사용하는 hash function


마지막은 hash value이다. hash value는 hashid에 따른 해시 방법과 salt값을 가지고 hash function을 수행한 결과라고 보면 되겠다.  john the ripper를 사용하는 순서는 아래와 같다.

1. unshadow passwd파일경로 shadow파일경로 > unshadowed

2. john --show unshadowed

john the ripper 사용순서

그리고 또한 옵션으로 -format=md5나 sha1을 넣을 수 있던 것 같앴는데  kali linux환경에서 할 때는 내가 뭔가를 잘못했는지 오타를 냈는데 올바르게 작동하지 않았다. 아래 그림은 kalilinux에서 shadow을 크랙한 화면이다. 비밀번호는 가렸다.


▲john in kali linux


참고자료 


PasswordCracking.pdf


thesis.pdf







+ Recent posts