728x90
Linux 서버 보안 취약점 점검 항목 및 조치 컨피그에 대해 정리해 보았습니다.
보안 취약점 내용
1 | 불필요한 계정 제거 |
2 | 패스워드 최대 사용 기간 설정 |
3 | 패스워드 최소 길이 설정 |
4 | 로그인 실패 횟수 제한 |
5 | 패스워드 복잡성 설정 |
6 | 취약한 패스워드 사용 제한 |
7 | 패스워드 최소 사용기간 설정 |
8 | 계정이 존재하지 않는 GID 금지 |
9 | 경고 메시지 설정 |
10 | SMTP를 통한 사용자 정보 제공 명령어 제거 |
11 | root 계정 원격 접속 제한 |
12 | 사용자 UMASK 설정 |
13 | SU 명령어 사용 제한 |
14 | Session Timeout 설정 |
15 | FTP 계정 shell 제한 |
16 | AT 파일 소유자 및 권한 설정 |
17 | Bash 버전 취약성 및 최신 패치 사용유무 점검 |
18 | /etc/hosts 파일 소유자 및 권한 설정 |
19 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 |
20 | SUID, SGID 설정 파일 점검 |
21 | 불필요한 서비스 포트 제거 |
조치 방법
1 | 불필요한 계정 제거 | 서버에 등록된 불필요한 사용자 계정을 제거한다 # userdel [사용자명] /etc/passwd 파일에서 계정 앞에 #을 삽입하여도 주석처리가 되지 않으므로 조치 시에는 반드시 계정을 삭제하여야 한다 |
2 | 패스워드 최대 사용 기간 설정 | 1. vi 편집기를 이용하여 "/etc/login.defs" 파일을 연 후 2. 아래와 같이 수정 또는, 신규 삽입 (수정 전) PASS_MAX_DAYS 99999 (수정 후) PASS_MAX_DAYS 90 (단위: 일) |
3 | 패스워드 최소 길이 설정 | 1. 패스워드 최소 길이 설정 방법 # vi /etc/login.defs PASS_MIN_LEN 8 2. 패스워드 최소 길이 설정 방법 (RHEL 6, CentOS 6 이하 버전의 경우) # vi /etc/pam.d/system-auth password requisite pam_cracklib.so try_first_pass retry=3 -> "minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1" 추가 2.1 패스워드 최소 길이 설정 방법 (RHEL 7, CentOS 7 이상 버전의 경우) # vi /etc/pam.d/system-auth password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= -> "minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1" |
4 | 로그인 실패 횟수 제한 | - 계정 잠금 임계값 설정 확인 # cat /etc/pam.d/system-auth # cat /etc/pam.d/password-auth - 계정 잠금 임계값의 경우 /etc/pam.d/sshd, /etc/pam.d/remote, /etc/pam.d/login, /etc/pam.d/su 에 설정된 include 파일 정책에 따라 적용됨 1. 잠금 임계값 정책 적용 # vi /etc/pam.d/system-auth auth required pam_faillock.so preauth silent audit deny=5 unlock_time=120 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=120 |
5 | 패스워드 복잡성 설정 | - /etc/shadow 파일 내 설정된 패스워드 점검 < 부적절한 패스워드 유형 > 1. 사전에 나오는 단어나 이들의 조합 2. 길이가 너무 짧거나, NULL(공백)인 패스워드 3. 키보드 자판의 일련의 나열 (예) abcd, qwert, etc 4. 사용자 계정 정보에서 유추 가능한 단어들 (예) 지역명, 부서명, 계정명, 사용자 이름의 이니셜, root, rootroot, root123, admin 등 < 패스워드 관리 방법 > 1. 영문, 숫자, 특수문자를 조합하여 계정명과 상이한 8자 이상의 패스워드 설정 # 다음 각 목의 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는, 3종류 이상을 조합하여 최소 8자리 이상의 길이로 구성 (공공기관 9자리 이상) 가. 영문 대문자(26개) 나. 영문 소문자(26개) 다. 숫자(10개) 라. 특수문자(32개) 2. 시스템마다 상이한 패스워드 사용 3. 패스워드를 기록해 놓을 경우 변형하여 기록 4. 가급적 자주 패스워드를 변경할 것 < 패스워드 설정 파일 정리 > - 패스워드 복잡성 설정 # vi /etc/pam.d/system-auth password requisite pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 lcredit = -1 : 최소 소문자 요구 ucredit = -1 : 최소 대문자 요구 dcredit = -1 : 최소 숫자 요구 ocredit = -1 : 최소 특수문자 요구 minlen = 8 : 최소 패스워드 길이 설정 retry = 3 : 패스워드 입력 실패 시 재시도 횟수 difok = N : 기존 패스워드와 비교. 기본값 10(50%) # 각 항목에서 -1 값은 반드시 해당하는 문자를 포함시켜야 함 # vi /etc/login.defs pass_warn_age = 7 : 패스워드 기간 만료 경고 (7일이 남은 시점부터 패스워드 변경 알림) pass_max_days = 60 : 최대 패스워드 사용 기간 설정 pass_min_day = 1 : 최소 패스워드 변경 기간 설정 ◆ 주의 패스워드 복잡성 설정시 pam_cracklib 모듈 설치 여부를 반드시 확인해야 한다 # rpm -qa | grep cracklib (RHEL 계열) # dpkg -l | grep libpam-cracklib (Debian 계열) |
6 | 취약한 패스워드 사용 제한 | # passwd [계정명] New password: [변경할패스워드] Retype new password: [변경할패스워드] passwd: password updated successfully |
7 | 패스워드 최소 사용기간 설정 | - 패스워드 최소 사용 기간을 확인한다 # cat /etc/login.defs | grep PASS_MIN_DAYS 1. vi 편집기를 이용하여 "/etc/login.defs" 파일을 연 후 2. 아래와 같이 수정 또는, 신규 삽입 (수정 전) PASS_MIN_DAYS (수정 후) PASS_MIN_DAYS 1 (단위: 일) |
8 | 계정이 존재하지 않는 GID 금지 | 구성원이 없거나, 더 이상 사용하지 않는 그룹명 삭제 # groupdel [그룹명] |
9 | 경고 메시지 설정 | 1. 서버 로그온 메시지 설정: vi 편집기로"/etc/motd" 파일을 연 후 로그온 메시지 입력 # vi /etc/motd (수정 전) 내용 없음 (수정 후) 로그온 메시지 입력 |
10 | SMTP를 통한 사용자 정보 제공 명령어 제거 | - SendMail 서비스 불필요 시 1. 실행중인 서비스 중지 # ps -ef | grep sendmail # kill -9 441 2. 시스템 재시작 시 SMTP Server 가 시작되지 않도록 함 - ls -al /etc/rc*.d/* | grep sendmail 로 검색 하여 위치 확인 후 이름 변경 # mv /etc/rc2.d/S88sendmail /etc/rc2.d/_S88sendmail |
11 | root 계정 원격 접속 제한 | ▶ 원격 접속 시 root 계정으로 바로 접속 할 수 없도록 설정파일 수정 # cat /etc/pam.d/login auth required /lib/security/pam_securetty.so # cat /etc/securetty pts/0 ~ pts/x 관련 설정이 존재하지 않음 1. "/etc/securetty" 파일에서 pts/0 ~ pts/x 설정 제거 또는, 주석 처리 2. "/etc/pam.d/login" 파일 수정 또는, 신규 삽입 (수정 전) #auth required /lib/security/pam_securetty.so (수정 후) auth required /lib/security/pam_securetty.so |
12 | 사용자 UMASK 설정 | - cat /etc/profile UMASK=022 1. vi 편집기를 이용하여 "/etc/profile" 파일을 연 후 2. 아래와 같이 수정 또는, 신규 삽입 umask 022 export umask |
13 | SU 명령어 사용 제한 | 1) wheel group이 존재하지 않을 시 wheel group 생성 # groupadd wheel 2) /bin/su 파일의 그룹을 wheel 그룹으로 변경 # chgrp wheel /bin/su 3) /bin/su 파일의 권한변경 (4750) # chmod 4750 /bin/su 4) su 명령어 사용이 필요한 계정을 wheel 그룹에 추가 # usermod -G wheel [계정명] |
14 | Session Timeout 설정 | ▶ Session Timeout을 600초(10분) 이하 설정 - sh, ksh, bash 사용 시 # cat /etc/profile(.profile) TMOUT=600 export TMOUT - sh(born shell), ksh(korn shell), bash(born again shell)을 사용하는 경우 1. vi 편집기를 이용하여 "/etc/profile(.profile)" 파일을 연 후 2. 아래와 같이 수정 또는, 추가 TMOUT=600 (단위: 초) export TMOUT |
15 | FTP 계정 shell 제한 | 1. vi 편집기를 이용하여 "/etc/passwd" 파일을 연 후 2. FTP 계정의 로그인 쉘 부분인 계정 맨 마지막에 /bin/false 부여 및 변경 (수정 전) ftp:x:500:100:Anonymous FTP USER:/var/ftp:/sbin/bash (수정 후) ftp:x:500:100:Anonymous FTP USER:/var/ftp:/bin/false |
16 | AT 파일 소유자 및 권한 설정 | - "/etc/at.allow", "/etc/at.deny" 파일의 소유자 및 권한 확인 # ls -l /etc/at.allow # ls -l /etc/at.deny rw-r----- root <파일명> 1. "/etc/at.allow" 및 "/etc/at.deny" 파일의 소유자 및 권한 변경 # chown root /etc/at.allow # chmod 640 /etc/at.allow # chown root /etc/at.deny # chmod 640 /etc/at.deny |
17 | Bash 버전 취약성 및 최신 패치 사용유무 점검 | ▶ 최신버전의 Bash 로 업그레이드를 한다 - 시스템에 설치된 Bash 버전을 확인한다 # bash --version GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu) - 업데이트 버전 설치 1) 취약한 bash 버전을 사용하고 있는 경우, GNU 공식 사이트에 방문하여 최신 패치 파일을 다운로드 받아 컴파일하여 설치를 진행하며 소스코드를 통한 설치시 bash는 매우 중요한 시스템 패키지이기 때문에 반드시 백업을 하고 진행하여야 함 2) AIX, Solaris, HP-UX, FreeBSD등의 운영체제는 Bash 쉘이 기본 쉘은 아니지만 설정에 의해 Bash쉘을 이용할 수 있기 때문에 최신 버전의 Bash로 패치하여 운영하여야 함 |
18 | /etc/hosts 파일 소유자 및 권한 설정 | "/etc/hosts" 파일의 소유자 및 권한 변경 (소유자 root, 권한 600) # chown root /etc/hosts # chmod 600 /etc/hosts |
19 | /etc/(x)inetd.conf 파일 소유자 및 권한 설정 | "/etc/inetd.conf" 파일의 소유자 및 권한 변경 (소유자 root, 권한 600) # chown root /etc/xinetd.conf # chmod 600 /etc/xinetd.conf # "/etc/xinetd.d/" 하위 디렉터리에 취약한 파일도 위와 동일한 방법으로 조치 |
20 | SUID, SGID 설정 파일 점검 | 1. 제거 방법 # chmod -s [파일명] 2. 주기적인 감사 방법 # find / -user root -type f \( -perm -04000 -o -perm -02000 \) -xdev -exec ls -al {} \; 3. 반드시 사용이 필요한 경우 특정 그룹에서만 사용하도록 제한하는 방법 일반 사용자의 Setuid 사용을 제한함 (임의의 그룹만 가능) # chgrp [그룹명] [파일명] # chmod 4750 [파일명] |
21 | 불필요한 서비스 포트 제거 | ▶ 불필요한 Listening port 확인 - 불필요한 port가 Listening 되어있는지 확인 # netstat -nao | grep LISTENING 1. 해당 포트를 사용하는 프로세스의 PID 확인 # netstat -nao | grep LISTENING 2. 프로세스 종료 # kill -9 <PID> |
Linux 서버 취약점 점검 내용 중 주로 사용하는 내용을 정리하였으며 상황별, 장비별 조치 방법 및 점검 항목이 다를 수 있습니다.
해당 내용은 참고용으로만 봐주시면 감사하겠습니다.
728x90
'Server' 카테고리의 다른 글
[Server] hosts 파일 위치 및 수정 방법 (0) | 2024.07.23 |
---|