KOROMOON

착한 사마리아인이 되고 싶습니다.

2/20/2018

리눅스 passwd 와 shadow 파일 구조


( 1 ) /etc/passwd 파일 구조
< passwd 파일 >

root : x : 0 : 0 : root : /root : /bin/bash
1      2   3   4   5      6       7

한 줄의 각 항목은 콜론 문자(:)에 의하여 분리됨.
1 - 사용자 계정
2 - 사용자 패스워드로 x 문자가 들어있으며 암호화된 패스워드 정보는 /etc/shadow 파일에 저장됨.
3 - 사용자 ID 를 의미하며 root 경우 0 임.
    adduser 스크립트에 의하여 부여됨.
4 - 사용자가 속한 그룹 ID 를 의미하며 root 경우 0 임.
    보통 그룹 ID 와 사용자 ID 가 같음.
5 - 사용자의 코멘트 정보
6 - 사용자의 홈 디렉토리
7 - 사용자가 기본으로 사용하는 쉘 종류 지정


( 2 ) /etc/shadow 파일 구조
< shadow 파일 >

root : $6$E2loH6yC$0lcZ0hG...        : 15426 : 0 : 99999 : 7 :   :   :  
1      2                               3       4   5       6   7   8   9

한 줄의 각 항목은 콜론 문자(:)에 의하여 분리됨.
1 - 사용자 계정
2 - 패스워드를 암호화시킨 값
    패스워드를 암호화할때는 본문에서 E2loH6yC 부분이 salt 값인데 이 salt 값을 이용해서 암호화를 하게 됨.
    비어있는 경우(::) 는 로그인하는데 패스워드가 필요없다는 것을 나타냄.
    * 라고 되어 있으면(:*:) 그 계정은 막아두었다는 것을 나타냄.
3 - 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산한 값
4 - 패스워드가 변경되기 전 최소사용기간(일수)
    0 이면 언제든지 바꿀 수 있다는 의미임.
5 - 패스워드 변경 전 최대사용기간(일수)
    99999 는 오랫동안 패스워드를 바꾸지 않았다는 것을 나타냄.
6 - 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수
7 - 로그인 접속차단 일 수
8 - 로그인 사용을 금지하는 일 수 (월/일/연도)
9 - 예약 필드로 사용되지 않음.


( 3 ) /etc/shadow 파일에서 2번째 항목은 패스워드 부분
< /etc/shadow 파일의 hashid 에 따른 해시 방법 >

shadow 패스워드 크랙에 있어서 주요한 개념임.
2번 항목의 패스워드 부분을 잘 보면 $ 로 구분되어 있으며 다음과 같은 형식을 지님.
$hashid $salt $hash value

HashID 는 어떤 Scheme 를 이용해서 Hash 했는지 보여줌.
주로 많이 사용하는 HashID 는 $1, $5, $6 임.
< cript(Salt, 설정한 암호) >

Salt 는 패스워드를 암호화하는데 있어서 OS 내에서 생성하는 임의의 값임.
Salt 값과 설정한 암호를 Cript() 함수를 이용하여 암호화함.
형식 : cript(Salt, 설정한 암호)
passwd 명령어를 통해 설정한 암호를 똑같이 같은 암호로 바꾼 후 shadow 파일을 확인해보면 달라져있음을 확인할 수 있음.
이는 패스워드를 변경하는 명령어를 사용할 때마다 Salt 값이 변하기 때문임.
패스워크 크랙하기 위해서는 Salt 값을 알아야 하며 해당 Salt 값을 모르면 레이보우 테이블을 가지고 있어도 의미가 없음.

Hash Value 는 HashID 에 따른 해시 방법과 Salt 값을 가지고 암호화된 결과임.

참고로 Hash 는 단방향 함수로 A -> B 는 가능하지만 B -> A 는 불가능한 함수임.
해시를 하고 난 값을 가지고 해시하기 전의 값을 못 구하므로 이를 공격하기 위해서 레이보우 테이블을 구해야 함.
레인보우 테이블은 모든 해시 쌍들을 구해놓은 것으로 이를 통해 해시값들을 대입하여 고속으로 패스워드 크랙을 시도함.


( 4 ) shadow 패스워드와 관련된 리눅스 명령어

pwconv 명령어
일반 패스워드에서 shadow 패스워드로 변경하는 명령어임.
이 명령어가 수행되고 나면 /etc/passwd 의 내용 중 두 번째 필드에 있는 암호화된 패스워드 부분만이 /etc/shadow 파일에 따로 저장되게 됨.

pwunconv 명령어
shadow 패스워드에서 일반 패스워드로 되돌리는 명령어임.
이 명령어는 /etc/shadow 파일에 보관되었던 패스워드를 다시 /etc/passwd 파일에 저장 하게 됨.


참고 사이트 : 
http://idchowto.com/?p=10251
http://kcats.tistory.com/128
http://sonsecurity.tistory.com/20


============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기