시스템/시스템 보안

패스워드 크래킹

비니화이팅 2018. 1. 7. 22:01

* 패스워드 크래킹

- 해당 시스템에 저장되어 있는 비밀번호를 알아내는 기술

 

* 암호화

- 데이터 전송 시 데이터가 손실되거나 변경되는 것을 방지하기 위해 데이터를 변환하여 전송하는 방법

- 대칭형 DES, 비대칭형 RSA

 

* 해시

- 임의의 데이터로부터 짧은 전자지문을 만들어내는 방법

- 해시 함수는 데이터를 자르고 치환하거나 위치를 바꾸는 방법을 사용해 결과를 만들어 냄

- 리눅스 - md5(취약)

- 왼도우 - lm, ntlm  -> ntlmv2

 

* 패스워드 크래킹 방법

1. Brute Force Attack

- 패스워드에 사용될 수 있는 문자열의 범위를 정하고 그 범위 내에서 가능한 모든 값을 대입

- 언젠간 뚫림

- 시간이 상대적으로 오래 걸림

 

2. Dictionary Attack

- 패스워드로 사용할 만한 것을 사전으로 만들어놓고 이를 하나씩 대입하여 패스워드 일치 여부를 확인

- 시간이 상대적으로 적게 걸림

- 무차별 대입 공격보다 주로 먼저 시도

- 사전 파일이 허접하면 못 뚫음(공격자의 능력에 따라 다름)

 

3. Rainbow Table

- 해시 함수를 사용하여 변환 가능한 모든 해시 값을 저장시켜 놓은 표

- 해시 함수를 이용하여 저장된 비밀번호로부터 원래의 비밀번호를 추출해 내는데 사용(이때 R함수 사용)

- 시간 절감

 

-> Rainbow Table 원리

- 레인보우 테이블은 한 개가 아니라 몇 천개 로 이뤄져 있음. 이 몇 천개가 생성 된 후 진짜 최종 테이블이 생성됨

- 최종 테이블 : 해당 테이블의 최초 패스워드랑 최종 해시값 저장

- 최초 패스워드에서 해시 함수 이용해 해시 값 생성 , 생성된 해시 값 사용하여 R함수로 두 번째 확인하고자 하는 패스워드를 생성

- R함수 : 앞에서부터 숫자인걸 가져와서 저장하는 식으로 이뤄짐

- 최종 테이블은 각 각의 테이블의 최초 패스워드와 마지막 해시 값으로 이뤄짐

 최초 패스워드 12345    827CCB0EEA8A706C4C34A16891F84E7B
 82708    71B8E22700E63C2A0C1BAD6506549D3B
 71822    03010F7D7933A011782C10FAF91C4FCA


 최초 패스워드 23456    ADCAEC3805AA912C0D0B14A81BEDB6FF
 38059    3D194D58A6470121C92F29C1EE4C936F
 31945    F559078E976DF9BADE3F5025D1FE8937


 최초 패스워드 34567    992A6D18B2A148CF20D9014C3524AA11
 99261    1ECF11B8F7D21A65FBCEC5DF353D07A6
 11187    421B9FF13E012545C871FFF7824CD12A

 최종 테이블    12345    03010F7D7933A011782C10FAF91C4FCA
   23456    F559078E976DF9BADE3F5025D1FE8937
                    34567    421B9FF13E012545C871FFF7824CD12A

Q. 3D194D58A6470121C92F29C1EE4C936F 에 해당하는 비밀번호를 찾아보자.

1. 현재 해시값이 최종 테이블에 있는지 확인 한다.

2. 없으면 해시값을 R함수로 추출한다. -> 31945

3. 추출해낸 패스워드 기준으로 해시값을 생성한다. -> F559078E976DF9BADE3F5025D1FE8937

4. 생성한 해시값이 최종 테이블에 있는지 확인한다.

5. 생성한 해시값이 최종 테이블에 있으니까 최종 테이블에서 생성한 해시값에 해당하는 패스워드가 최초 패스워드인 테이블로 이동한다.

6. 이동한 테이블에 찾고자 하는 해시값에 대한 패스워드가 있는 것을 확인한다. -> 38059

 

<실습1 - cain & abel을 이용한 Brute Force Attack>

 - 실습 환경 : Windows XP
 - 사용 도구 : cain & abel

 

cain & abel

- 패스워드 크래킹 툴

- 스니핑도 가능

- 복합적인 툴

 

1. cmd에서 계정을 생성한다.

 

2. net user로 계정 생성한 것 확인

 

3. cain & abel실행하여 Cracker 탭을 선택한다.

 

4. 우측에 LM & NTLM Hashese 클릭, 오른쪽 창 우클릭 하고 LM&NTLM Hashes클릭 한다.

 

5.  오른쪽 창 우클릭 후 Add to list선택후 Next한다.

- 그러면 다음과 같이 뜬다.

- 여기서 X, 열쇠모양은 크랙 진행 여부를 나타낸다.

- X는 크랙이 진행되지 않은 것, 열쇠모양은 크랙이 진행 된 것을 나타낸다

- Adminstrator, Guest 계정는 패스워드가 없어서 크랙 진행됐다고 나온다.

 

6. 계정 선택 후 우 클릭 - Brute Force Attack - LM Hashes을 누른다

- Windows XP는 LM 해시를 사용하기 때문에 LM Hashes을 선택한다.

- 위와 같은 창이 뜨면 Start 한다.

 
9. 다음과 같이 크랙된 패스워드를 확인할 수 있다.

 

<실습2 - John the Ripper을 이용한 Brute Force Attack과 Dictionary Attack>

 - 실습 환경 : CentOS
 - 사용 도구 : John the Ripper

 

1. 일단 크랙할 test00계정을 생성해준다. 비밀번호는 각각 1234로 설정했다.

 

2. john 압축파일을 받아 압축을 해제한다.

 

3. 압축이 풀린 폴더로 이동하면 src폴더가 있는데 src폴더에는 c소스파일, 헤더파일이 있다. 이를 컴파일 해야한다.

 

4. 컴파일 해준다. 

   여기서 make는 gcc와는 다르게 한꺼번에 컴파일이 가능하고, gcc가 설치된 상태여야 사용할 수 있다.

 

5. run폴더로 가보면 john 실행파일이 생성돼있다.

 

6. 먼저 무차별 대입공격을 진행해본다.

- 인자로 크랙할 파일을 지정하여 실행하면 다음과 같이 크랙이 완료된다.

 

7 사전 공격을 진행하기 전에 크랙할 계정을 하나 더 만들어준다.

- test01계정으로 패스워드는 동일하게 1234로 설정했다

 

8. 사전파일은 password.lst라는 이름으로 이미 만들어져 있는 것을 쓸 건데 1234라는 패스워드가 없으므로 추가해놓는다.

 

9. 사전파일과 인자로 크랙할 파일을 지정하고 실행하면 다음과 같이 크랙이 완료된다.

 

8. 크랙이 완료된 모든 계정을 확인한다. 

[참고] PHP 함수 md5에 의해 생성 된 형식이 아닌 경우 raw-md5를 지원하는 John 버전을 설치해야 함(메인 웹 사이트에서 제공되는 커뮤니티 강화 버전 설치)

 

<실습3 - cain & abel을 이용한 Brute Force Attack>
 - 실습 환경 : Windows XP
 - 사용 도구 : cain & abel, winrtgen

 

* winrtgen

- 직접 레인보우 테이블을 생성해주는 도구

 

1. winrtgen을 실행하여 Add Table을 클릭한다.

 

2. 원하는대로 값을 설정해주고 OK를 누른다.

   여기서 Charset은 alpha로 선택하고 테이블 수는 3으로 한다.(테이블 수를 늘릴 수록 성공 확률이 높아진다.)

 

3. 마찬가지로 OK를 누르고 기다린다.(Status에 진행률이 표시된다. 시간이 매우 오래 걸린다.)

 

4. 완료가 되면 cain을 실행시켜서 Cryptanalysis Attack-LM hashes-via FastLM Rainbow Tables(Winrtgen)을 클릭한다.

 

5. Add Table을 눌러 테이블을 추가하고 Start버튼을 눌러 진행한다.