본문 바로가기
SK shieldus Rookies 16기

[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(22일차) - 수정 중

by Challenge programmers 2023. 11. 21.

오늘 학습 주제

1. 공격 실습

2. 계정 관리

3. Password Cracking

4. 패스워드 관리 정책

 

 

 

 

 공격 실습


- Rootkit -

Rootkit
정의 " root"와 "kit"의 합성어
시스템에서 악성 코드나 악성 활동을 숨기고,
시스템에 대한 완전한 제어 권한을 획득하는 데 사용되는 소프트웨어
기능
  1. 숨김 및 은폐: 루트킷은 자체를 숨기고, 악성 활동을 감추기 위해 시스템에서 발견되기 어렵게 동작하여
    시스템 관리자나 보안 소프트웨어로부터 감지를 회피합니다.
  2. 관리자 권한 획득: 루트 또는 관리자 수준의 권한을 획득하여 시스템의 모든 부분에 접근하고 제어
  3. 백도어 설치: 공격자는 루트킷을 사용하여 시스템에 나중에 공격자가 재접근할 수 있도록 하는 수단인
    백도어(backdoor)를 설치가능
  4. 로그 및 감시 우회: 시스템 로그 및 감시 도구를 우회하여 자신의 활동을 감지되지 않도록 합니다.
  5. 악성 프로세스 실행: 루트킷은 악성 코드를 실행하거나 다운로드하여 시스템에 추가적인 악성 활동을 수행합니다.

 

 

- 스케줄링 -

프로세스 스케줄링
정의 특정한 시간에 특정한 작업을 수행하게 하는 것
   
명령어 at  지정한 시간에 원하는 명령이나 작업을 실행

• 한번만 실행되는 경우 주로 사용

• atd데몬의 의해 실행

• 지정한 작업은 큐에 저장되며 저장된 작업들은 /var/spool/at 디렉터리에 저장

명령어 cron • 주기적으로 프로세스를 실행 시 사용

• 시스템 운영 또는 사용자의 필요에 의한 작업으로 나뉨
  - 시스템 운영에 필요한 작업 : root권한으로 /etc/crontab에 등록
  - 일반 사용자 : /var/spool/cron/사용자ID 에 등록

 

at 명령어

 

명령어 cron

 

 

- 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 해당 사용자의 현재 패스워드 설정 조회