본문 바로가기

Security

유닉스 패스워드 크래커, 압축파일 패스워드 크래커

# 뻐꾸기의 알

해커의 언어 치명적 파이썬, 뻐꾸기의 알

위와 같은 사실로 공격자가 암호화된 패스워드를 알아내기 위해서 딕셔너리 공격을 했다는 것을 알게되었다.

해커는 딕셔너리에 있는 모든 단어를 사용하여 유닉스의 Crypt()함수로 암호화 하였다.

그리고 각 패스워드를 암호화한 후에 해커는 탈취한 암호화된 패스워드와 비교하였다.

딕셔너리와 패스워드가 일치하면 패스워드 크래킹에 성공한다.

 

1. 첫번째 파이썬 프로그램 - 유닉스 패스워드 크래커

- 유닉스 패스워드 크래커를 만들기 위해 crypt() 알고리즘 사용

help('crypt')

- 암호화된 유닉스 패스워드 해시를 계산하기

   1) crypt.crypt()함수 호출

   2) 이 함수에 패스워드와 솔트(salt) 전달

PW : egg, salt : HX,  해시값 : HX9LLTdc/jiDE

  # 유닉스 패스워드 크래커 프로그램 만들기

    1. main 함수 만들기

      - 암호화된 패스워드 파일인 "passwords.txt"를 열고 패스워드 파일에 있는 각 라인을 읽어온다.

      - 각 라인마다 사용자이름과 해시화된 패스워드를 분리한다.

      - testpass()함수를 호출하여 딕셔너리 파일에 있는 패스워드와 일치하는 지 확인

    2. testpass 함수 만들기

      - 암호화된 패스워드를 인자값으로 입력 받은 후 패스워드를 찾거나 딕셔너리에 있는 모든 단어를 대입해본 후에            반환한다(* 첫번째 두 문자를 사용하여 솔트를 제거)

      - 딕셔너리를 열어서 딕셔너리에 있는 각 단어를 읽어와 단어마다 솔트를 상ㅇ하여 패스워드 해시를 생성한다.

      - 결과값이 암호화된 패스워드 해시와 동일하다면 패스워드 찾기 성공

      - 찾을 때 까지 계속한다.

 

crack.py
password.txt

user : victim//root

cryptPass : HX9LLTdc/jiDE // DFNxgW7C05fo

 

dictionary.txt
victim의 패스워드 크랙 성공/ root 패스워드 크랙 실패

-> 최신 유닉스나 리눅스 계열의 운영체제에서는 /etc/shadow파일에 해시화된 패스워드를 저장하고 더욱 보안적으로 안전한 해시화 알고리즘을 사용함

 

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

 

2. 두번째 파이썬 프로그램 - 압축파일 패스워드 크래커

 

# 선을 위해 악을 사용하기

해커의 언어 치명적 파이썬, 선을 위해 악을 사용하기


1. 압축파일 패스워드 크래커

- 'zipfile' 라이브러리와 extractall()메소드를 사용할 예정

help('zipfile')
extractall()

* .extractall() : 패스워드를 입력할 수 있는 파라미터로 사용

 

evil.zip으로 압축중

- evil이라는 파일 생성 후 evil.zip파일로 압축

evil을 evil.zip으로 압축 후 제거함 -> python unzip.py을 통해 evil.zip의 압축을 품

unzip.py

- extractall() : 패스워드를 전달하는 파라미터로 사용(패스워드 = secret)

 

# 패스워드를 잘못입력했을 경우

패스워드를 "melon"으로 잘못 입력했을 경우
오류메시지

=> 잘못된 패스워드를 입력하면 예외가 발생한다는 점을 사용하여 딕셔너리 파일에 있는 패스워드가 압축파일의 패스워드와 일치하는지 확인가능

=> 예외가 발생하지 않는다면 패스워드를 찾았다는 의미

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

dictionary.txt로 password 전수조사를 위한 unzip.py 수정

dictionary.txt에 있는 파일로 password 검사
password : secret " 찾음

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

+ 쓰레드를 활용하여 더욱 효율적으로 실행가능

unzip.py
password 찾기 성공