오늘 학습 주제
1. 공격 실습
2. 계정 관리
3. Password Cracking
4. 패스워드 관리 정책
공격 실습
- Rootkit -
Rootkit | |
정의 | " root"와 "kit"의 합성어 시스템에서 악성 코드나 악성 활동을 숨기고, 시스템에 대한 완전한 제어 권한을 획득하는 데 사용되는 소프트웨어 |
기능 |
|
- 스케줄링 -
프로세스 스케줄링 | |
정의 | 특정한 시간에 특정한 작업을 수행하게 하는 것 |
명령어 at | • 지정한 시간에 원하는 명령이나 작업을 실행 • 한번만 실행되는 경우 주로 사용 • atd데몬의 의해 실행 • 지정한 작업은 큐에 저장되며 저장된 작업들은 /var/spool/at 디렉터리에 저장 |
명령어 cron | • 주기적으로 프로세스를 실행 시 사용 • 시스템 운영 또는 사용자의 필요에 의한 작업으로 나뉨 - 시스템 운영에 필요한 작업 : root권한으로 /etc/crontab에 등록 - 일반 사용자 : /var/spool/cron/사용자ID 에 등록 |
- SetUID를 이용한 local Backdoor 생성과 root 권한 탈취 -
일반 계정으로 로그인하여 특정 프로그램을 실행시켜 관리자 권한 탈취
setuid(0) UID를 변경하는 함수
setgid(0) GID를 변경하는 함수
관리자만 실행 가능한 함수
system("/bind/sh") 쉘 실행
rwxr-xr-x
rwsr-xr-x
- Backdoor 숨기기 -
발각 될 수 있다
보안점검 항목 -> 주기적으로 특수파일 점검
- cron 데몬을 이용한 Back door 생성 -
find / -user root –perm -4000 > /home/gildong/sfile.txt
→ 루트 사용자에 의해 소유된 setuid 비트가 4000으로 설정된 파일을 찾아
"/home/gildong/sfile.txt" 파일에 저장
ls /home/gildong/sfile.txt
→ sfile.txt의 파일 존재 확인
cat /home/gildong/sfile.txt
→ sfile.txt의 내용 확인
md5sum sfile.txt > sfile_h.txt
→ "sfile.txt" 파일의 MD5 해시 값을 계산하고, 그 값을 "sfile_h.txt" 파일에 저장
cat sfile_h.txt
→ sfile_h.txt의 내용 확인
#ls –ld /etc/cro*
#ls –ld /etc/cro*
계정 관리
- 계정 / 그룹 관리 파일 -
< 파일 /etc/passwd >
/etc/passwd | ||
정의 | • 사용자들의 기본 정보를 저장하는 파일 • 시스템에 로그인하여 자원을 이용할 수 있는 사용자의 목록을 저장하고 있는 정보파일 • /etc/passwd에는 콜론(:)을 구분자로 7개의 기본적인 정보를 담고 있음 |
|
① | 사용자 이름(계정명) | |
② | 암호화된 비밀번호 | |
③ | 사용자의 UID | 사용자에게 부여한 번호 (계정명은 중복이 안되지만, UID는 중복 가능) |
④ | 사용자의 GID | 해당 사용자가 속해 있는 주그룹 ID |
⑤ | 설명(주석) | |
⑥ | 사용자 홈 디렉토리 | |
⑦ | 실행 프로그램 | 일반적으로 사용자가 로그인 시 실행되는 shell 지정 |
《 계정명 》
사용자 역할에 따라 root, 일반 사용자, 시스템 계정으로 분류
계정명 | |
root | • 시스템운영에 있어서 모든 권한을 행사( Privileged User 또는 Super User) • Root UID(User Identity)는 0 할당 (UID 0번 사용자를 슈퍼유저로 인식) |
일반 사용자 | • 로그인이 가능한 사용자( Normal user 또는 Unprivileged user라 부름) • 시스템에 대해 제한적인 권한을 행사 |
시스템 계정 | • 로그인은 되지 않고 시스템의 필요에 의해 생성된 계정 - /etc/passwd 파일에 bin, daemon, adm, game 등 관리자가 생성하지 않는 계정들이 존재 • 시스템 필요에 의해 생성된 계정 • 시스템 계정이 없다면 모든 파일 생성과 프로세스 생성 시에 root 권한이 부여되어야 함 |
시스템 계정 | |
root | • 시스템에서 모든 권한을 가지고 있는 최고 권한 사용자 • 시스템 내의 보호되는 파일이나 권한 등의 제한 사항에 대해 영향을 받지 않음 |
bin | • 시스템의 구동중인 실행 파일을 관리하기 위한 계정 |
daemon | • 백그라운드 프로세스에 대한 작업을 제어하기 위한 시스템 계정 |
adm | • 시스템 로깅이나 특정 작업을 관리하는 시스템 계정 |
lp | • 프린터 관리를 위한 계정 |
gdm | • Gnome display를 관리 계정 |
《 UID(User ID) 》
UID | |
정의 | • 시스템이 사용자를 식별하는 번호 • 리눅스에서는 사용자를 숫자값 형태의 UID(User Identity)로 관리 • 계정명은 중복이 불가능하지만, UID는 중복이 가능 • UID로 root 권한을 가질 수 있음 |
[중요] root 이외 UID ‘0’ 금지 |
• root(UID=0)와 동일한 UID를 가진 계정 존재 시 root 권한 으로 시스템 접근이 가능 • 사용자간 UID 중복시에 권한 중복으로 사용자 감사 추적이 어려움 |
계정자 | CentOS 6 이전 | CentOS 7 |
root | 0 | 0 |
시스템 계정 | 1~499 | 1~999 |
일반 사용자 | 500번부터 할당 | 1000번부터 할당 |
< 파일 /etc/shadow >
/etc/shadow | |
정의 | • 사용자 패스워드 저장 • /etc/passwd의 두 번째 필드인 패스워드 부분을 암호화하여 관리 • root 사용자만 접근할 수 있고, 총 9개 필드로 구성 • 패스워드 만기일, 계정 만기일 등을 설정 |
① | 사용자명 |
② | 암호화된 비밀번호(역으로 풀 수 없음) |
③ | 최근 비밀번호 변경일(1970년 1월 1일 기준의 날짜 수 : timestamp) |
④ | 패스워드 최소 사용 일 수 |
⑤ | 패스워드 최대 사용 일 수 (예) 15일 경우, 15일이 지나면 패스워드 변경 유도가 진행 |
⑥ | 패스워드 만료 전(또는 계정만료 전⑧) 해당 사항을 경고 메시지로 알려줌 |
⑦ | inactive(휴면계정, 지정기간동안 로그인이 안된 경우 잠금 계정으로 지정 ) 유효 기간 (10일이면, 10일에 한번도 로그인을 되지 않으면 휴면계정으로 전환) 계정자가 로그인을 시도하면 다시 활성화가 됨 |
⑧ | 패스워드 만료일 또는 계정 만료일, 비밀번호 만료 기간 이후 해당 계정을 더 이상 사용할 수 없게 되는 날 |
⑨ | 나중에 사용하기 위해 예약으로 설정되어 있고, 현재는 사용되지 않으며, 0으로 지정 |
《 패스워드 》
패스워드 | |
ID | 해시알고리즘 명시 1 : MD5 , 2 : BlowFish , 5 : SHA-256 , 6 : SHA-512 |
Salt | 패스워드 암호화 강도를 높이기 위한 임의 값 운영체제에서 Random하게 만들어내는 값 동일한 패스워드에 서로 다른 패스워드 값 산출 (같은 암호를 사용시 혼락막음) |
Encrypted_password | 사용자 패스워드에 Salt를 조합해서 해시한 해시값 * : 패스워드가 잠긴 상태로 로그인 불가(SSH 인증로그인 가능) !! : 패스워드가 잠긴 상태로 모든 로그인 불가 공백 : 패스워드가 설정되지 않은 상태 |
[명령어 pwconv]
#pwconv → shadow 패스워드 정잭 적용
#pwunconv → 일반 패스워드 정책 적용
#pwck → password check약자 (예) pwck –r 또는 pwck /etc/passwd
* /etc/passwd와 /etc/shadow 점검
* 각 사용자의 필드 개수 검사, 아이디중복 유무 검사, 유효한 사용자 여부검사,
유효한 UID및 GUI 여부 검사
* 사용자의 primary 그룹 존재 유무검사
* 홈 디렉터리 존재 유무검사, 로그인 셀 검사 등을 함
《 lastchange/warndays/expire 》
< 파일 /etc/group >
/etc/group | |
정의 | • 그룹 정보 저장 • 그룹 목록이 들어 있는 파일로 4개의 필드로 구성 |
그룹(Group) 개요 | • 서버에 존재하는 많은 사용자 중에 특정 사용자끼리 파일 공유할 때 유용 • 사용자들을 같은 그룹으로 묶어서 Permission 설정을 통해 파일/디렉터리를 공유 • 모든 사용자는 하나 이상의 그룹에 반드시 속하도록 설정 • 레드햇 계열에서는 사용자간의 불필요한 공유를 막기 위해 사용자의 아이디와 동일한 그룹 을 생성해서 단독으로 그룹에 포함 |
GroupName | • 그룹 패스워드를 나타내는 부분 • 리눅스 배포판에서는 그룹패스워드도 /etc/gshadow에서 별도로 관리 • 별도로 관리되는 경우에는 'x'라고만 나타남 |
Password | • 그룹 패스워드를 나타내는 부분 • 리눅스 배포판에서는 그룹패스워드도 /etc/gshadow에서 별도로 관리 • 별도로 관리되는 경우에는 'x'라고만 나타남 |
GID | • 리눅스에서 그룹에 부여한 숫자값 |
Member_List | • 해당 그룹에 속한 사용자의 아이디가 기록 • 주 그룹(Primary Group)이 아닌 2차 그룹(Secondary Group) 멤버들이 기록 |
< 파일 /etc/gshadow>
/etc/group | |
정의 | • 그룹 암호를 관리하는 파일로 4개의 필드로 구성 |
GroupName | • 그룹이름 |
Password | • 그룹 패스워드가 기록 • 그룹의 패스워들 설정하지 않으면 ‘!’로 표시 • gpasswd 명령으로 설정하면 암호화된 패스워드가 기록 • SHA-512 알고리즘을 사용해서 $6으로 시작하는 패스워드가 기록 • 다른 그룹에 속한 사용자가 newgrp명령을 이용해서 해당 그룹으로 변경 가능 |
Admin | • 그룹관리자가 기록 |
Member_List | • 그룹의 멤버를 나타냄 • 보통 2차 그룹으로 속한 사용자의 아이디가 기록되며 여러 명이 존재할 수도 있음 • 여기에 등록된 사용자는 newgrp명령으로 주 그룹(Primayr Group)으로 전환 할 때 패스워드를 묻지 않음 |
- 계정 / 그룹 관리 파일 -
< 명령어 useradd (또는 adduser) >
옵션 | 설명 |
-p | 사용자의 암호를 추가 시에 지정 |
-d | 홈디렉터리 지정 |
-g | 그룹 지정 |
-e | 사용자 계정 만기일 지정 |
-u | 사용자 계정의 UID 지정 |
-g | 사용자 계정의 GID 지정 |
-s | 기본 쉘 지정 |
-f | 계정 유효일 지정 |
< 명령어 usermod >
옵션 | 설명 |
-d | 사용자의 홈디렉터리 변경 |
-m | 홈디렉터리변경 시 기존 사용 했던 파일 및 디렉터리를 이동 |
-g | 사용자 그룹 변경 |
-s | 사용자 shell qusrud |
-u | 사용자 UID 변경 |
-e | 계정 만료일 변경 |
-f | 계정 유효일(inactive) 변경 |
-l | 사용자 계정명 변경 |
< 명령어 passwd >
passwd | • useradd로 계정을 생성한 후에 암호를 지정하지 않으면 로그인이 되지 않음 • passwd만 입력하면 현재 로그인 사용자의 암호 변경 • root만 다른 사용자의 암호를 변경 |
옵션 | 설명 |
#passwd -l [사용자명] | 패스워드 잠금 설정, 로그인을 막음 /etc/shadow의 두번째 필드 ‘!!’을 넣어서 막음 |
#passwd -u [사용자명] | 패스워드 잠금 해제 |
#passwd -d [사용자명] | 패스워드 제거 |
#passwd -e [사용자명] | 사용자가 다음 로그인 시 패스워드를 변경하도록 설정 패스워드 변경시 패스워드 정책 적용(관리자 제외) |
< 명령어 chage>
chage | • 사용자의 패스워드에 대한 정보를 출력하고 설정하는 명령어 • /etc/shadow의 날짜관련 필드 설정 |
옵션 | 설명 |
#chage -l [사용자명] | 사용자 패스워드 정보를 보여줌 |
#chage –m 10 –M 100 –W 5 [사용자명] | • 최소 사용 날짜 : 10일(-m) • 최대 사용 가능한 날 : 100일(-M) • 패스워드만기일 5일전에 경고메세지 보냄 (–W 5) |
< 명령어 userdel>
userdel | • 소유자가 불확실한 파일은 삭제해야 함 |
옵션 | 설명 |
-l | 사용자의 홈 디렉터리와 메일 관련 파일까지 삭제 |
< 명령어 groupadd>
groupadd | • 새로운 그룹을 생성하는 명령으로 root만 사용 가능한 명령어 |
< 명령어 groupmod>
groupmod | • 그룹명이나 GID를 변경할 때 사용하는 명령 |
< 명령어 gpasswd>
gpasswd | • 그룹의 패스워드를 설정하거나 그룹관리자를 지정하는 명령어 • 그룹관리자는 해당 그룹에 속하지 않아도 지정 가능 • 지정된 그룹관리자는 다른 사용자들을 해당 그룹에 2차 그룹으로 속하게 하거나 그룹 패스워드를 설정 • 그룹 패스워드가 설정되면, 해당 그룹에 속하지 않은 사용자들이 newgrp 명령을 이용하여 그룹 패스워드 입력 후에 일시적으로 1차 그룹을 변경 할 수 있음 |
< 명령어 groupdel>
groupdel | • 생성된 그룹을 삭제하는 명령 • 삭제할 그룹에 속한 사용자가 없어야 하는데, 2차 그룹(Secondary Group)으로 속한 사용자들은 존재해도 상관없음 |
Password Cracking
- Password Cracking -
정의 | 공격대상의 ID를 알고 있다는 전제 하에 비밀번호를 알아내는 공격 기법 | |
종류 | 사전 대입 공격 (Dictionary attack) | • 패스워드로 사용할 만한 사전 파일을 미리 만들어 놓고 하나씩 대입하여 패스워 드 일치 여부를 확인 |
무차별 대입 공격 (Brute-force attack) | • 가능한 모든 경우의 수를 모두 대입 | |
레인보우 테이블 공격 (Rainbow table attack) | • 패스워드와 해시로 이루어진 체인을 무수히 만들어 테이블에 저장한 다음, 암화 화 값을 데이블에서 찾는 방법 |
|
사회공학 기법 (Social Engineering) | • 개인 정보가 들어 있는 비밀번호 사용 • 자신의 이름을 사용 또는 생년월일, 전화번호 등 상대방을 속여 비밀번호 획득 또는 카페나 도서관에서 대화내용을 수집 |
- 해쉬 값 기반의 패스워드 크래킹 -
(hello)의 해쉬 값 생성
nano pword
→ 해쉬값을 저장한 pword 파일 생성
john --format=raw-md5 /usr/share/wordlists/rockyou.txt.gz /TEST/pword
→ 'John The Ripper'로 /usr/share/wordlists/rockyou.txt.gz 파일 내용으로
md5 포맷인 pword 내용과 비교 / 아래에서 4번째 줄에 결과 출력
- 패스워드 파일의 패스워드 크래킹 -
cp /etc/passwd passwd
→ /etc/passwd에 있는 passwd파일 복사
cp /etc/shadow shadow
→ /etc/shadow에 있는 shadow파일 복수
unshadow passwd shadow | grep ‘\$y’ | tee passcrack
→ '\$y'의 값을 가진 계정만 합친 후 passcrack 파일로 저장
john passcrack --wordlist /usr/share/wordlists/fasttrack.txt --format=crypt
→ 'John The Ripper'로 /usr/share/wordlists/fasttrack.txt 파일 내용을 암호화 시킨 후 passcrack과 비교
john --show passcrack
→ 결과가 저장된 passcrack 파일 내용 확인
패스워드 관리 정책
- 패스워드 정책 -
정의 | 조직이나 시스템에서 사용자가 생성하고 유지하는 비밀번호에 대한 규칙과 규정 |
정책 | • 대/소문자, 숫자, 특수문자를 혼용하여 8개 글자 이상의 패스워드를 사용 • 동일 문자를 연속 4회 이상 사용 금지 • 패스워드 히스토리를 관리하여 2~3개 이상의 동일 패스워드 사용금지 • 패스워드 변경주기를 설정(패스워드 유효기간을 90일 이하로 설정) • 사전에 나오는 쉬운 단어나 이름은 패스워드로 사용하지 못하도록 설정 • 기본 설정된 패스워드는 사용하지 못하도록 설정 • 초기 부여된 패스워드는 사용자 최초 접속 시 변경하도록 설정 |
- 패스워드 정책 설정 파일 /etc/security/pwqualitym.conf -
/etc/security/pwquality.conf | |
difok = N | 기존 패스워드와 비교. 기본값 10(50%) |
minlen = 8 | 최소 패스워드 길이 설정 |
dcredit = -1 | 최소 필요한 숫자 수 |
ucredit = -1 | 최소 필요한 대문자 수 |
lcredit = -1 | 최소 필요한 소문자 수 |
ocredit = -1 | 최소 필요한 특수문자 수 |
maxrepeat = 3 | 최대 연속된 동일한 반복 수 (예 aaa,111 형태를 사용 못함) |
maxclassrepeat = 3 | 최대 연속 문자 반복 수 [최소 3 이상 권장] (예 abc,123 형태를 사용 못함) |
usercheck = 1 | 패스워드에 유저 ID가 포함되어 있는지 점검 [1 권장/0 체크 안 함] (예 ID:gildong PASS:gildong123 형태를 사용 못함) |
retry = 3 | 패스워드 입력 실패 시 재시도 횟수 |
- 패스워드 기본값 설정 파일 /etc/login.defs -
정의 | 패스워드 정책, 계정 잠금 및 해제 규칙, 로깅 및 기타 로그인 관련 설정을 포함 한 로그인 관련 설정을 정의하는 파일 |
설정값 | • 사용자 추가할 때 참고하는 메일 디렉터리 • 패스워드 관련 설정(최대 사용기한, 최소 사용기한, 최소 길이, 만기 이전 경고 주는 날짜) • UID의 최소값 및 최대값 • GID의 최소값 및 최대값 • 홈 디렉터리 생성 여부 • 기본 umask 값 • 패스워드에 적용되는 암호화 알고리즘 등이 정의되어 있는 파일 |
- 패스워드 관련 명령어 -
정의 | • 패스워드를 부여하거나 변경 • 사용자명을 입력하지 않으면 현재 사용자의 패스워드로 변경 • 계정을 사용하지 못하게 하거나 패스워드 만기일 및 유효기간을 설정 |
|
옵션 | -n | 패스워드 변경 후 최소 사용 기간 |
-x | 패스워드 변경 후 최대 사용 기간 | |
-w | 패스워드 만기일 이전에 사용자에게 경고 메시지를 전달할 날짜 지정 | |
-e | 최초 로그인 시에 강제로 패스워드를 변경하도록 설정 | |
-d | passwd 입력 없이 로그인 가능 (shadow 파일의 패스워드 필드 값 제거) | |
-l | 해당 사용자의 상태를 locking으로 변경 | |
-S | 해당 사용자의 현재 패스워드 설정 조회 |
'SK shieldus Rookies 16기' 카테고리의 다른 글
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(24일차) (0) | 2023.11.23 |
---|---|
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(23일차) (0) | 2023.11.22 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(21일차) - 수정 중 (0) | 2023.11.20 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(20일차) - 수정 중 (0) | 2023.11.17 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(19일차) - 수정 중 (0) | 2023.11.16 |