OS/Linux

[Linux] KISA 취약점 분석 상세 가이드에 따른 조치 정리(2021년기준)

728x90
반응형

- U-01 : root 계정 원격 접속 제한

양호 : 원격 터미널 서비스를 사용하지 않거나 , 사용 시 root 직접 접속을 차단한 경우

취약 : 원격 터미널 서비스 사용 시 root 직접 접속을 허용한 경우

[SSH 서비스 사용시]
Step 1) vi 편집기를 이용하여 “/etc/ssh/sshd_config” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
(수정 전) #PermitRootLogin Yes
(수정 후) PermitRootLogin No

 

- U-02 : 패스워드 복잡성 설정

양호 : 패스워드 최소길이 8자리 이상, 영문·숫자·특수문자 최소 입력 기능이 설정된 경우

취약 : 패스워드 최소길이 8자리 이상, 영문·숫자·특수문자 최소 입력 기능이 설정된 경우

#vi /etc/pam.d/system-auth

password requisite pam_cracklib.so try_first_pass retry=3 minlen=8 lcredit=1 ucredit=1 dcredit=1 ocredit=1

*주의: 없는 경로를 지정 시 sudo 명령어가 안 먹힘

 

- U-03 : 계정 잠금 임계값 설정

양호 : 계정 잠금 임계값이 10회 이하의 값으로 설정되어 있는 경우

취약 : 계정 잠금 임계값이 설정되어 있지 않거나, 10회 이하의 값으로 설정되 지 않은 경우

#cat /etc/pam.d/system-auth auth

required /lib/security/pam_tally.so deny=5 unlock_time=120 no_magic_root
account required /lib/security/pam_tally.so no_magic_root reset

*주의: 없는 경로를 지정 시 sudo 명령어가 안 먹힘

 

- U-04 : 패스워드 파일 보호

양호 : 쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하는 경우

취약 : 쉐도우 패스워드를 사용하지 않고, 패스워드를 암호화하여 저장하지 않 는 경우

Step 1) /shadow 파일의 패스워드 암호화 존재 확인
(일반적으로 /etc 디렉터리 내 존재)
#ls /etc

Step 2) /etc/passwd 파일 내 두 번째 필드가 “x” 표시되는지 확인
#cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

 

- U-05 : root홈, 패스 디랙터리 권한 및 패스 설정

양호 : PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되지 않은 경우

취약 : PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되어 있는 경우

#echo $PATH

/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin/X11: /usr/local/bin:/usr/bin:/usr/X11R6/bin:/root/bin

1.위와 같이 출력되는 PATH 변수 내에 “.” 또는, “::” 포함 여부 확인
2. PATH 변수 내에 “.”, “::” 이 맨 앞에 존재하는 경우
Step 1) vi 편집기를 이용하여 root 계정의 설정파일(~/.profile 과 /etc/profile) 열기
#vi /etc/profile

Step 2) 아래와 같이 수정
(수정 전) PATH=.:$PATH:$HOME/bin
(수정 후) PATH=$PATH:$HOME/bin:.

 

- U-06 : 파일 및 디렉토리 소유자 설정

양호 : 소유자가 존재하지 않는 파일 및 디렉터리가 존재하지 않는 경우

취약 : 소유자가 존재하지 않는 파일 및 디렉터리가 존재하는 경우

#find / -nouser –print
#find / -nogroup -print

Step 1) 소유자가 존재하지 않는 파일이나 디렉터리가 불필요한 경우 rm 명령으로 삭제
#rm <file_name>
#rm <directory_name>

※ 삭제할 파일명 또는, 디렉터리명 입력

Step 2) 필요한 경우 chown 명령으로 소유자 및 그룹 변경
#chown <user_name> <file_name>

 

- U-07 : /etc/passwd 파일 소유자 및 권한 설정

양호 : /etc/passwd 파일의 소유자가 root이고, 권한이 644 이하인 경우

취약 : /etc/passwd 파일의 소유자가 root가 아니거나, 권한이 644 이하가 아닌 경우

“/etc/passwd” 파일의 소유자 및 권한 변경 (소유자 root, 권한 644)
#chown root /etc/passwd
#chmod 644 /etc/passwd

 

- U-08 : /etc/shadow 파일 소유자 및 권한 설정

양호 : /etc/shadow 파일의 소유자가 root이고, 권한이 400 이하인 경우

취약 : /etc/shadow 파일의 소유자가 root가 아니거나, 권한이 400 이하가 아닌 경우

Step 1) “/etc/shadow” 파일의 소유자 및 권한 확인
#ls -l /etc/shadow

Step 2) “/etc/shadow” 파일의 소유자 및 권한 변경 (소유자 root, 권한 400)
#chown root /etc/shadow
#chmod 400 /etc/shadow

 

- U-09 : /etc/hosts 파일 소유자 및 권한 설정

양호 : /etc/hosts 파일의 소유자가 root이고, 권한이 600인 이하경우

취약 : /etc/hosts 파일의 소유자가 root가 아니거나, 권한이 600 이상인 경우

“/etc/hosts" 파일의 소유자 및 권한 변경 (소유자 root, 권한 600)

#chown root /etc/hosts
#chmod 600 /etc/hosts

 

- U-10 : /etc/(x)inetd.conf 파일 소유자 및 권한 설정

양호 : /etc/inetd.conf 파일의 소유자가 root이고, 권한이 600인 경우

취약 : /etc/inetd.conf 파일의 소유자가 root가 아니거나, 권한이 600이 아닌 경우

“/etc/inetd.conf” 파일의 소유자 및 권한 변경 (소유자 root, 권한 600)

#chown root /etc/xinetd.conf
#chmod 600 /etc/xinetd.conf

 

- U-11 : /etc/syslog.conf 파일 소유자 및 권한 설정

양호 : /etc/syslog.conf 파일의 소유자가 root(또는 bin, sys)이고, 권한이 640 이 하인 경우

취약 : /etc/syslog.conf 파일의 소유자가 root(또는 bin, sys)가 아니거나, 권한이 640 이하가 아닌 경우

■ LINUX (CentOS 6 이상일 경우)

#chown root /etc/rsyslog.conf
#chmod 640 /etc/rsyslog.conf

 

- U-12 : /etc/services 파일 소유자 및 권한 설정

양호 : etc/services 파일의 소유자가 root(또는 bin, sys)이고, 권한이 644 이하 인 경우

취약 : etc/services 파일의 소유자가 root(또는 bin, sys)가 아니거나, 권한이 644 이하가 아닌 경우

“/etc/services” 파일의 소유자 및 권한 변경 (소유자 root, 권한 644)

#chown root /etc/services
#chmod 644 /etc/services

 

- U-13 : SUID, SGID, 설정 파일점검

양호 : 주요 실행파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있지 않은 경우

취약 : 주요 실행파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있는 경우

 OS별 주요 실행파일에 대한 SUID/SGID 설정 여부 확인
#ls –alL [check_file] | awk ‘{ print $1}’ | grep –i ‘s’

Step 1) 제거 방법

#chmod -s

Step 2) 주기적인 감사 방법
#find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls –al {} \;

Step 3) 반드시 사용이 필요한 경우 특정 그룹에서만 사용하도록 제한하는 방법
일반 사용자의 Setuid 사용을 제한함 (임의의 그룹만 가능)

#/usr/bin/chgrp <group_name> <setuid_file_name>
#/usr/bin/chmod 4750 <setuid_file_name>

*주의 : SUID 제거 시 OS 및 응용프로그램 등 서비스 정상작동 유무 확인 필요

 

- U-14 : 사용자,시스템 시작파일 및 환경파일 소유자 및 권한 설정

양호 : 홈 디렉터리 환경변수 파일 소유자가 root 또는, 해당 계정으로 지정되 어 있고, 홈 디렉터리 환경변수 파일에 root와 소유자만 쓰기 권한이 부여 된 경우

취약 : 홈 디렉터리 환경변수 파일 소유자가 root 또는, 해당 계정으로 지정되 지 않고, 홈 디렉터리 환경변수 파일에 root와 소유자 외에 쓰기 권한이 부여된 경우

Step 1) 소유자 변경 방법
#chown <user_name> <file_name>


Step 2) 일반 사용자 쓰기 권한 제거 방법
#chmod o-w <file_name>

 

- U-15 : world writable 파일 점검

양호 : 시스템 중요 파일에 world writable 파일이 존재하지 않거나, 존재 시 설 정 이유를 확인하고 있는 경우

취약 : 시스템 중요 파일에 world writable 파일이 존재하나 해당 설정 이유를 확인하고 있지 않는 경우

■ world writable 파일 존재 여부 확인
#find / -type f -perm –2 –exec ls –l {} \;

Step 1) 일반 사용자 쓰기 권한 제거 방법
#chmod o-w <file_name>

Step 2) 파일 삭제 방법
#rm -rf <word-writable 파일명>

 

- U-16 : /dev에 존재하지 않는 device 파일 점검

양호 : dev에 대한 파일 점검 후 존재하지 않은 device 파일을 제거한 경우

취약 : dev에 대한 파일 미점검 또는, 존재하지 않은 device 파일을 방치한 경우

 dev에 존재하지 않는 device 파일 점검
#find /dev –type f –exec ls –l {} \;

Step 1) /dev 디렉터리 파일 점검
#find /dev -type f -exec ls -l {} \;

Step 2) major, minor number를 가지지 않는 device일 경우 삭제

 

- U-17 : $HOME/.rhosts, hosts.equiv 사용 금지

양호 : login, shell, exec 서비스를 사용하지 않거나, 사용 시 아래와 같은 설정 이 적용된 경우

1. /etc/hosts.equiv 및 $HOME/.rhosts 파일 소유자가 root 또는, 해당 계 정인 경우

2. /etc/hosts.equiv 및 $HOME/.rhosts 파일 권한이 600 이하인 경우

3. /etc/hosts.equiv 및 $HOME/.rhosts 파일 설정에 ‘+’ 설정이 없는 경우

취약 : login, shell, exec 서비스를 사용하고, 위와 같은 설정이 적용되지 않은 경우

 확인

Step 1) 파일 소유자 및 권한 확인

#ls –al /etc/hosts.equiv
#ls –al $HOME/.rhosts
rw------- root <hosts.equiv 파일>
rw------- root <$HOME/.rhosts 파일>

Step 2) 계정 별 ‘+’ 부여 적절성 확인
#cat /etc/hosts.equiv
#cat $HOME/.rhosts

• /etc/hosts.equiv : 서버 설정 파일
• $HOME/.rhosts : 개별 사용자의 설정 파일

 조치
Step 1) “/etc/hosts.equiv” 및 “$HOME/.rhosts” 파일의 소유자를 root 또는, 해당 계정으로 변경
#chown root /etc/hosts.equiv
#chown $HOME/.rhosts

Step 2) “/etc/hosts.equiv” 및 “$HOME/.rhosts” 파일의 권한을 600 이하로 변경
#chmod 600 /etc/hosts.equiv
#chmod 600 $HOME/.rhosts

Step 3) “/etc/hosts.equiv” 및 “$HOME/.rhosts” 파일에서 “+”를 제거하고 허용 호스트 및 계정 등록
#cat /etc/hosts.equiv (or $HOME/.rhosts)

 

- U-20 : Anonymous FTP 비활성화

양호 : Anonymous FTP (익명 ftp) 접속을 차단한 경우

취약 : Anonymous FTP (익명 ftp) 접속을 차단하지 않은 경우

/etc/passwd 파일에 ftp 계정 존재 여부 확인

#cat /etc/passwd | grep "ftp"


Case 1) 일반 FTP - Anonymous FTP 접속 제한 설정 방법
“/etc/passwd” 파일에서 ftp 또는, anonymous 계정 삭제

#userdel ftp


Case 2) ProFTP - Anonymous FTP 접속 제한 설정 방법
conf/proftpd.conf 파일의 anonymous 관련 설정 중 User, Useralias 항목 주석처리
(proftpd.conf 파일의 위치는 운영체제 종류별로 상이함)

Case 3) vsFTP - Anonymous FTP 접속 제한 설정 방법
vsFTP 설정파일(“/etc/vsftpd/vsftpd.conf” 또는, “/etc/vsftpd.conf”)에서
anonymous_enable=NO 설정

 

 

 

U-24 : NFS 서비스 비활성화

양호 : 불필요한 NFS 서비스 관련 데몬이 비활성화 되어 있는 경우

취약 : 불필요한 NFS 서비스 관련 데몬이 활성화 되어 있는 경우

■NFS 서비스 데몬 확인 (NFS 동작 SID 확인)

#ps -ef | egrep "nfs|statd|lockd"
#netstat -tlpan | grep ftp

■조치
Step 1) NFS 서비스 데몬 중지
#kill -9 [PID]

Step 2) 시동 스크립트 삭제 또는, 스크립트 이름 변경
1.. 위치 확인
#ls -al /etc/rc.d/rc*.d/* | grep nfs
2. 이름 변경 #mv /etc/rc.d/rc2.d/S60nfs /etc/rc.d/rc2.d/_S60nfs

 

 

- U -45 : root 계정 su 제한

양호 : su 명령어를 특정 그룹에 속한 사용자만 사용하도록 제한되어 있는 경우

※ 일반사용자 계정 없이 root 계정만 사용하는 경우 su 명령어 사용제한 불필요

취약 : su 명령어를 모든 사용자가 사용하도록 설정되어 있는 경우

■확인
Step 1) “wheel” 그룹 (su 명령어 사용 그룹) 및 그룹 내 구성원 존재 여부 확인

#cat /etc/group (※ “group” 파일 구조: 부록 참조)
wheel:x:10:root,admin

Step 2) wheel 그룹이 su 명령어를 사용할 수 있는지 설정 여부 확인

Step 3) 파일 권한 확인
#ls –l /usr/bin/su
-rwsr-x--- /usr/bin/su
(파일 권한이 4750인 경우 양호)

■조치
Step 1) wheel group 생성 (wheel 그룹이 존재하지 않는 경우)
#groupadd wheel

Step 2) su 명령어 그룹 변경
#chgrp wheel /usr/bin/su

Step 3) su 명령어 사용권한 변경
#chmod 4750 /usr/bin/su

Step 4) wheel 그룹에 su 명령 허용 계정 등록
#usermod –G wheel

또는, 직접 /etc/group 파일을 수정하여 필요한 계정 등록
wheel:x:10: -> wheel:x:10:root,admin

 

- U-46 : 패스워드 최소 길이 설정

양호 : 패스워드 최소 길이가 8자 이상으로 설정되어 있는 경우

취약 : 패스워드 최소 길이가 8자 미만으로 설정되어 있는 경우

■ 확인
#cat /etc/login.defs
PASS_MIN_LEN 8

■ 조치
Step 1) vi 편집기를 이용하여 “/etc/login.defs” 파일 열기
Step 2) 아래와 같이 수정 또는, 신규 삽입
(수정 전) PASS_MIN_LEN 6
(수정 후) PASS_MIN_LEN 8( 8 이상권장)

 

- U-47 : 패스워드 최대 사용기간 설정

양호 : 패스워드 최대 사용기간이 90일(12주) 이하로 설정되어 있는 경우

취약 : 패스워드 최대 사용기간이 90일(12주) 이하로 설정되어 있지 않는 경우

■ 확인
#cat /etc/login.defs
PASS_MAX_DAYS 90

■ 조치
Step 1) vi 편집기를 이용하여 “/etc/login.defs” 파일 열기
Step 2) 아래와 같이 수정 또는, 신규 삽입
(수정 전) PASS_MAX_DAYS 99999
(수정 후) PASS_MAX_DAYS 90 (단위: 일)

 

- U-48 : 패스워드 최소 사용기간 설정

양호 : 패스워드 최소 사용기간이 1일 이상 설정되어 있는 경우

취약 : 패스워드 최소 사용기간이 설정되어 있지 않는 경우

■ 확인
#cat /etc/login.defs
PASS_MIN_DAYS 1

■ 조치
Step 1) vi 편집기를 이용하여 “/etc/login.defs” 파일 열기
Step 2) 아래와 같이 수정 또는, 신규 삽입
(수정 전) PASS_MIN_DAYS
(수정 후) PASS_MIN_DAYS 1 (단위: 일)

 

- U-49 : 불필요한 계정 제거

양호 : 불필요한 계정이 존재하지 않는 경우

취약 : 불필요한 계정이 존재하는 경우

■ 확인
Step 1) 미사용 계정 및 의심스러운 계정 존재 여부 확인
(※ “passwd” 파일 구조: 부록 참조)
#cat /etc/passwd

Step 2) 사용하지 않는 Default 계정 점검
(lp, uucp, nuucp 계정 존재 확인 예시)
#cat /etc/passwd | egrep “lp|uucp|nuucp”

■ 조치
Step 1) 서버에 등록된 불필요한 사용자 계정 확인
Step 2) userdel 명령으로 불필요한 사용자 계정 삭제
#userdel <user_name>

 

- U-51 : 계정이 존재하지 않는 GID 금지

양호 : 시스템 관리나 운용에 불필요한 그룹이 삭제 되어있는 경우

취약 : 시스템 관리나 운용에 불필요한 그룹이 존재할 경우

#cat /etc/group (※ “group” 파일 구조: 부록 참조)
#cat /etc/passwd
#cat /etc/gshadow *gshadow 파일: “shadow” 파일에 사용자 계정의 암호가 저장되어 있는 것처럼 시스템 내 존재하는 그룹의 암호 정보 저장 파일로 그룹 관리자 및 구성원 설정 가능

 

- U-57 : 홈디렉토리 소유자 및 권한 설정

양호 : 홈 디렉터리 소유자가 해당 계정이고, 타 사용자 쓰기 권한이 제거된 경우

취약 : 홈 디렉터리 소유자가 해당 계정이 아니고, 타 사용자 쓰기 권한이 부여된 경우

■ 확인
/etc/passwd" 파일에서 사용자별 홈 디렉터리 확인 후 소유자 및 권한 확인
#cat /etc/passwd
#ls -ald


■ 조치
“/etc/passwd” 파일의 소유자 및 권한 변경
#chown <user_name> <user_home_directory>
#chmod o-w <user_home_directory>

 

- U-59 : 숨겨진 파일 및 디렉토리 검색 및 제거

양호 : 불필요하거나 의심스러운 숨겨진 파일 및 디렉터리를 삭제한 경우

취약 : 불필요하거나 의심스러운 숨겨진 파일 및 디렉터리를 방치한 경우

■ 확인
특정 디렉터리 내 불필요한 파일 점검
#ls -al [디렉터리명]

전체 숨김 디렉터리 및 숨김 파일 점검
#find / -type f –name ".*" (파일 점검)
#find / -type d -name ".*" (디렉터리 점검)

■ 조치
Step 1) 숨겨진 파일 목록에서 불필요한 파일 삭제
Step 2) 마지막으로 변경된 시간에 따라, 최근 작업한 파일 확인 시 [-t] 플래그 사용

 

- U-61 : ftp 서비스 확인

양호 : FTP 서비스가 비활성화 되어 있는 경우

취약 : FTP 서비스가 활성화 되어 있는 경우

■ 확인
일반 ftp 서비스 비활성화 여부 확인
#ps -ef | grep ftp

vsftpd 또는 ProFTP 서비스 데몬 확인(vsftpd, proftpd 동작 SID 확인)
#ps -ef | egrep "vsftpd|proftp"
root 3809 3721 0 08:44:40 ? 0:00 /usr/sbin/vsftpd

■ 조치
< vsFTP, ProFTP 서비스 중지 방법 >
Step 1) 서비스 확인
# ps –ef | egrep "vsftpd|proftpd"

Step 2) vsftpd 또는 ProFTP 서비스 데몬 중지
# service vsftpd(proftp) stop 또는 /etc/rc.d/init.d/vsftpd(proftp) stop 또는 kill -9 [PID]

 

 

*참고

https://www.krcert.or.kr/data/guideView.do?bulletin_writing_sequence=35988&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PXRpdGxlX25hbWUmc2VhcmNoX3dvcmQ9JUVDJUI3JUE4JUVDJTk1JUJE 

 

KISA 인터넷 보호나라&KrCERT

KISA 인터넷 보호나라&KrCERT

www.boho.or.kr

 

728x90
728x90