ghkdtlwns987

[암호학] 유닉스 패스워드 크래킹 본문

암호학

[암호학] 유닉스 패스워드 크래킹

2020/03/31 2020. 9. 2. 23:24

Unix 나 Linux 는 기본적으로 사용자의 password 를 MD5, SHA256, SHA512 해시값으로 변경하여 관리하고 있다. 

 

원리는 다음과 같다. 

blossom 이라는 아이디를 가진 사용자의 password 가 '1234' 라고 한다면, '1234' 에 대한

MD5 해시값을 이용한다. 

 

근데 여기서 오류가 발생할 수 있다. 

blossom1 의 password 가 '1234' 이고, blossom2 의 password 가 같다면? 

서로 같은 MD5 해시값을 가지게 된다. 

 

이러한 에러를 방지하기 위해 Unix/Linux 시스템에서는 'salt' 라 부르는 임의의 값을 원래 password 에 추가한 후 

MD5 해시를 구성하는 방식을 사용한다. 

 

예를들어 blossom1 의 password 가 '1234' 라고 한다면

salt 값으로 AA 를 추가해 blossom1 의 password 는 'AA1234' 가 될 것이다.

그리고 'AA1234' 를 MD5 해시값으로 만들어준다. 

 

이러한 방식으로 MD5, SHA256, SHA512 을 활용하는데,

이를 활용하는 경우 salt 의 길이와 password hash 의 길이는 달라진다.

hash function salt_len identifier
MD5 2byte $1$
SHA256 16byte $5$
SHA512 16byte $6$

 

실제로 /etc/passwd 파일을 보면

다음과 같이 많은 인증에 필요한 정보를 저장한다.

 

암호는 /etc/shadow 에 저장이 되어있다. 

막 요런식으로...

내 Ubuntu 버젼은 나름 최신버젼이라 암호 해시값이 들어있어야 할 공간에 * 로 가려놨다.

 

예전엔 이랬다고 한다.

root : $1$a3gSE1RAj6522:14923: 0 : 99999 : 7 :      :      :
samsjang:$1$zfti6chVSQLlQ:14945: 0: 99999: 7:        :      :

 

좀 이전의 리눅스 버젼이라면 $6$E3Kekad..... 와 같은 형식으로 저장이 되어 있는데, 

만약 맨 처음이 $6$ 이라면 SHA512,  $5$ 라면 SHA256,  $1$ 이라면 MD5 해시값을 저장한다고 볼 수 있다. 

만약 악의저긴 해커가 어떤 해시 알고리즘을 사용하는지 파악하고, 이를 복호화하게 된다면 서버 관리자는 

특정한 공격없이 해커에게 root 암호를 내어주게 될 것이다. 

 

Comments