계정관리 / Password Cracking

계정관리

시스템보안에서 핵심은 계정관리, 패스워드 관리가 중요합니다.
계정 관련 파일은 다음과 같습니다.

  • /etc/passwd
  • /etc/shadow
  • /etc/group

 

[Cent OS 실습] etc/passwd

[root@localhost test]# ls -l /etc/passwd
[root@localhost test]# cat /etc/passwd | less

 

리눅스 계정은 크게 3가지로 나눠집니다. root, 일반사용자, 시스템계정으로 나눠지며, 시스템 계정은 목록 뒤에 현재 nologin으로 되어 있습니다. user나 hong은 일반계정자입니다. 

 

root

- 시스템 운영에 있어서 모든 권한을 행사(Privileged User 또는 Super User)

- Root UID(User Identity)는 0 할당 (UID 0번 사용자를 슈퍼유저로 인식)

 

일반사용자

- 로그인이 가능한 사용자( Normal user 또는 Unprivileged user라 부름)

- 시스템에 대해 제한적인 권한을 행사

 

시스템계정

- 로그인은 되지 않고 시스템의 필요에 의해 생성된 계정

   /etc/passwd 파일에 bin, daemon, adm, game 등 관리자가 생성하지 않는 계정들이 존재

- 시스템 필요에 의해 생성된 계정

- 시스템 계정이 없다면 모든 파일 생성과 프로세스 생성 시에 root 권한이 부여되어야 함

시스템 계정


[root@localhost ~]# su - root
[root@localhost ~]# useradd test

[root@localhost ~]# tail -5 /etc/passwd

 

파일 /etc/passwd 

- 사용자들의 기본 정보를 저장하는 파일

- 시스템에 로그인하여 자원을 이용할 수 있는 사용자의 목록을 저장하고 있는 정보파일

- /etc/passwd에는 콜론(:)을 구분자로 7개의 기본적인 정보를 담고 있음

실습을 함께 보면 

test:x:1002:1002::/home/test:/bin/bash

test는 계정명, x는 비밀번호, 1002는 UID,GID입니다. 주석은 없고, /home/test가 사용자 홈 디렉터리입니다. 실행프로그램은 bin/bash입니다.

=> 계정명:패스워드:uid:gid:주석:홈디렉토리(저장소):쉘종류

 

UID는 시스템이 사용자를 식별하는 번호로, 리눅스에서는 사용자를 숫자값 형태의 UID로 관리합니다. 계정명은 중복이 불가능하지만 UID는 중복이 가능하며  UID로 root 권한을 가질 수 있습니다.

=> root의 uid 범위는 0
=>  시스템계정은 1~999
=>  일반사용자는 1000부터

그래서 위에서 입력한 tail -5 /etc/passwd 명령어로 확인하면 user는 1000번 hong은 1001번 test는 1002인 것을 확인할 수 있습니다.

 

id와 계정의 차이
id는 인증을 위한 것이고, 네이버 하드디스크의 일부분을 나에게 할당해 준 것은 계정입니다.

 

[root@localhost ~]# ls -l /home


user, hong, test의 저장소가 있습니다. 계정을 만든다는 것은 그 시스템의 저장소 일부분을 할당받는 것입니다.

[Cent OS 실습] etc/shadow

[root@localhost ~]# tail -5 /etc/shadow

 

패스워드 관리 정책
- 일반 패스워드 정책 (pwnuconv)
- 쉐도우 패스워드 정책 : 계정정보와 패스워드를 분리(pwconv)

 

[root@localhost ~]# pwunconv

[root@localhost ~]# tail -3 /etc/passwd

[root@localhost ~]# pwconv

[root@localhost ~]# tail -3 /etc/passwd

 

pwunconv의 경우 패스워드가 모두 보여 위험합니다. pwconv의 경우는 패스워드가 나오지 않고 분리되어 저장됩니다.

 

파일 /etc/shadow

- 사용자 패스워드 저장

- /etc/passwd의 두 번째 필드인 패스워드 부분을 암호화하여 관리

- root 사용자만 접근할 수 있고, 총 9개 필드로 구성

- 패스워드 만기일, 계정 만기일 등을 설정

 

password 자리에는 $가 3개가 나옵니다.
ex) $1$2$3
1: 사용한 암호화 알고리즘(암호화, 해시) 어떤 알고리즘으로 패스워드가 암호화가 되었는지를 나타냄
2: salt값 사용. 패스워드 암호화 강도를 높이기 위한 임의의 값
3: encrypted_password: 패스워드와 salt를 조합한 해시값

암호화된 패스워드 필드 구성

[root@localhost ~]# tail -3 /etc/shadow

[root@localhost ~]# passwd test

[root@localhost ~]# tail -3 /etc/shadow

test 계정을 보니 !!로 로그인 불가 상태임을 알 수 있습니다. passwd를 설정해 주면 생성된 것을 볼 수 있습니다. 

 

test:!!:19682:0:99999:7:::

test를 보면 패스워드 뒤로 이어 19682 값은 1970.1.1 기준으로 패스워드 바꾼 날짜를 의미합니다. 그다음 0은 암호를 바꿀 수 있는 최소 날수, 그 다음 99999는 암호를 바꿔야 하는 최대 날수(바꾸지 않아도 된다는 뜻), 7은 암호 만료 예고를 나타내는 날수를 의미합니다.

 

이렇게 보기 어려우니 간단하게 명령어를 통해 패스워드 정보를 볼 수 있습니다.

[root@localhost ~]# chage -l test 

 

[root@localhost ~]# chage -m 10 -M 100 -W 5 test

=> 패스워드 최소 10일 최대 100일까지 사용할 수 있고 100일 5일 전 즉 95일 되는 날부터 경고를 줌.

[root@localhost ~]# chage -l test 

 

[Cent OS 실습] etc/group

[root@localhost ~]# tail -3 /etc/group

user, hong, test 그룹이 있고, 뒤에 그룹 멤버는 없는 것을 알 수 있습니다.

 

파일 /etc/group

- 그룹 정보 저장

- 그룹 목록이 들어 있는 파일로 4개의 필드로 구성

group은 서버에 존재하는 많은 사용자 중에서 특정 사용자들끼리 파일을 공유할 때 유용합니다. 사용자들을 같은 그룹으로 묶어서 Permission 설정을 통해 파일/디렉터리를 공유합니다. 모든 사용자는 하나 이상의 그룹에 반드시 속하도록 설정하고, 레드햇 계열에서는 사용자 간의 불필요한 공유를 막기 위해 사용자의 아이디와 동일한 그룹을 생성해서 단독으로 그룹에 포함시킵니다.

 

그룹에 포함시키는 방법입니다. user그룹에 hong 포함시키고, user그룹에 test를 포함시킵니다.

[root@localhost ~]# gpasswd -a hong user

[root@localhost ~]# tail -3 /etc/group

[root@localhost ~]# gpasswd -a test user

[root@localhost ~]# tail -3 /etc/group

 

리눅스는 배포본마다 명령어가 다릅니다. 명령어가 헷갈린다면 직접 문서에 넣으면 됩니다.

[root@localhost ~]# nano /etc/group

[내용입력]

test:x:1002: 뒤에 hong, user를 입력하고 저장합니다.

 

[root@localhost ~]# tail -3 /etc/group

 

사용자 계정 추가하기(useradd)

useradd [option] 사용자 계정이름

ex) useradd user01 -> user01이라는 계정을 생성

ex) useradd user02 -d /home/test -> user02라는 사용자를 생성하면서 홈 디렉터리의 경로 지정

ex) useradd  -u 0 user03 -> user03라는 사용자를 생성하면서 UID를 0으로 지정

ex) useradd -e 2023-11-22 user04 -> 계정 만료일 2023년 11월 22일로 설정하고 계정 생성

ex) useradd -f 3 –e 2023-10-31 user05

-> 계정만료일 2023년 10월 31일로 설정하여 계정 생성하고, 3일 동안 로그인을 하지 않을 경우 locking

 

만들어진 계정의 환경변경(usermod)

usermod [option] 사용자 계정이름

ex) usermod –d /home/TEST –m user01 -> 사용자 홈 디렉터리를 변경, 이동된 디렉터리로 파일 변경

ex) usermod –g terran drone -> drone이란 사용자 그룹을 terran으로 변경

ex) usermod –s /bin/sh user01 -> user01의 사용자 쉘을 /bin/sh로 변경

 

passwd 

passwd [option] 사용자명

(실습)

hong 계정의 패스워드 잠금 설정을 하고 로그인해 보면 인증 실패합니다.

[root@localhost ~]# pass -l hong

[user@localhost 바탕화면]# su - hong

 

[root@localhost ~]# pass -u hong

[user@localhost 바탕화면]# su - hong

 

계정삭제(userdel)

-r 옵션을 사용하면 사용자의 홈 디렉터리와 메일 관련 파일까지 삭제합니다.

[root@localhost ~]# userdel -r test

 

계정이 완벽하게 삭제가 되지 않은 경우 또는 계정이 삭제가 되었지만 퇴사직원이 만든 파일인 경우, 그 계정이 남긴 파일은 남아있을 수도 있다. 서버관리자는 사용자가 불분명한 파일들을 삭제해줘야 합니다.

 

Password Cracking

공격 대상의 ID를 알고 있다는 전제 하에 비밀번호를 알아내는 공격기법입니다.

  • 사전 대입 공격(Dictionary attack) : 패스워드로 사용할만한 사전 파일을 미리 만들어 놓고 하나씩 대입하여 패스워드 일치 여부를 확인
  • 무차별 대입 공격(Brute-force attack) : 가능한 모든 경우의 수를 모두 대입
  • 레인보우 테이블 공격(Rainbow table attack) : 패스워드와 해시로 이루어진 체인을 무수히 만들어 테이블에 저장한 다음, 암호화 값을 테이블에서 찾는 방법
  • 사회공학 기법(Social Engineering) : 개인정보가 들어 있는 비밀번호 사용, 자신의 이름을 사용 또는 생년월일, 전화번호 등, 상대방을 속여 비밀번호 획득 또는 카페나 도서관에서 대화내용을 수집

 

우리가 사용하는 패스워드는 해시값으로 저장되어 있습니다.
해시와 암호화 알고리즘의 차이는? 암호화는 양방향성(원문 <-> 암호문), 해시는 단방향성(원문 -> 해시값)

 

[실습1] 해시 값 기반 패스워드 크래킹

해시값 생성 사이트 : http://www.md5hashgenerator.com

 

MD5 Hash Generator

A tool for creating an MD5 hash from a string. Use this fast, free tool to create an MD5 hash from a string.

www.md5hashgenerator.com

 

hello 해시값 : 5d41402abc4b2a76b9719d911017c592 : md5

 

Kali에서 진행합니다.

1) 폴더를 만들어줍니다.

# mkdir /test

 

2) 폴더 이동합니다.

# cd /test

 

3) 해시파일을 생성합니다.

# nano pword

[내용입력]

5d41402abc4b2a76b9719d911017c592

쓰고 저장. 공백도 있으면 안 됩니다.

1~3 과정

 

 

4) john이라는 패스워드 크래커를 사용할 겁니다. 내가 만들어둔 pword 파일과 사전파일을 매칭해서 패스워드를 크래킹 합니다.
# cd /usr/share/wordlists

# ls -l

# john --format=raw-md5 /usr/share/wordlists/rockyou.txt.gz /test/pword

 

[실습2] 패스워드 파일의 패스워드 크래킹

Crack 파일을 생성 -> 패스워드 크래킹 -> 결과확인

백도어 또는 권한탈취 공격을 이용해 이 시스템에 들어왔어
여기서 etc/passwd와 etc shadow를 복사해서 자기 컴퓨터로 가져감
그 후 크랙작업을 시작함.
일단 두 파일이 분리되어 있는데 이걸 조인함(unshadow)
그 후 크랙 시작
결과 확인

 

1) 복사하려는 파일을 확인합니다.

# tail /etc/passwd

# tail /etc/shadow

 

2) Crack 파일을 생성합니다.

# cp /etc/passwd /test/passwd #test에 passwd로 복사
# cp /etc/shadow /test/shadow #test에 shadow로 복사
# cd /test #폴더 이동

# ls -l #복사된 파일 확인

 

# unshadow passwd shadow | grep ‘\$y’ | tee passcrack #분리된 파일 조인

 

3) 패스워드 크래킹을 진행합니다.

john passcrack --wordlist /usr/share/wordlists/fasttrack.txt --format=crypt #크래킹

 

4) 결과 확인

john --show passcrack