nuga@nugawiki: $ cat ./docs/$1
서버 보안점검 증빙자료
1. 사용자 계정에 0-99사이의 UID나 GID 값이 할당된 계정 확인
- 취약점 점검방법
- cat /etc/passwd 세번째, 네 번째 필드의 값이 0-99사이의 값을 갖는 사용자(일반) 계정이 존재하는지 확인
- cat /etc/passwd 세번째, 네 번째 필드의 값이 0-99사이의 값을 갖는 사용자(일반) 계정이 존재하는지 확인
cat /etc/passwd | grep -v nologin ```
- 취약점 조치 방법(UID, GID 변경)
- passwd 파일 구조

- 사용자(일반) 계정이 0~99사이일 경우 적절한 UID부여
- passwd 파일 구조
usermod –u 1001 test (test 계정을 UID 변경) ```
- 사용자(일반) 계정이 0~99사이일 경우 적절한 GID부여
groupmod –g 1001 test (test 계정 GID 변경) ```
2. root 계정 외에 UID와 GID가 0인 계정이 없는지 점검
- 취약점 점검방법
- cat /etc/passwd 세 번째 필드의 값이 root와 동일한 값을 가진 계정이 존재하는지 확인
- cat /etc/passwd 세 번째 필드의 값이 root와 동일한 값을 가진 계정이 존재하는지 확인
cat /etc/passwd | grep -v nologin ```
※ 각 OS별로 사용자 UID 체계가 달라 시스템 계정 및 일반 사용자 계정이 부여받는 값의 범위가 차이가 있습니다. 공통적으로 관리자는 “UID=0”을 부여받습니다.
- 취약점 조치 방법(UID, GID 변경)
- root 이외의 계정이 “UID=0”인 경우 0이 아닌 적절한 UID부여
- root 이외의 계정이 “UID=0”인 경우 0이 아닌 적절한 UID부여
usermod –u 1001 test (test 계정을 UID 변경) ```
3. 디폴트 시스템 계정 제거
- 취약점 점검방법
불필요한 계정이 점검하여 관리되지 않은 계정에 의한 침입 대비 (퇴직, 전직, 휴직, 유지보수 변경 등의 사유로 기존 계정 반드시 확인!)
Default 계정을 무조건 삭제 조치하라는 의미 아님!(주의!) ※ default 계정: OS나 Package 설치 시 기본적으로 생성되는 계정 (예시: lp, uucp, shutdown, news, opterator, games, gopher 등)
cat /etc/passwd ```
- 취약점 조치 방법(UID, GID 변경)
- 90일 동안 로그인 하지 않은 계정이 있는지 확인
- 90일 동안 로그인 하지 않은 계정이 있는지 확인
lastlog –b 90 ```
- userdel 명령으로 불필요한 사용자 계정 삭제
userdel test ```
4. 로그인 실패 횟수 제한
- 취약점 점검방법
- 계정 잠금 임계값 5이하로 설정 후 확인하여 스샷 제출
- 계정 잠금 임계값 5이하로 설정 후 확인하여 스샷 제출
cat /etc/ssh/sshd_config | grep MaxAuthTries ```
- 취약점 조치 방법
vi /etc/ssh/sshd_config 파일내 MaxAuthTries 값 변경
### 5. /etc/hosts 권한설정
- 취약점 점검방법
- ls –al /etc/hosts 명령어로 파일의 소유가 root이고 권한이 600이하 확인
```bash
ls –al /etc/hosts
```
- 취약점 조치 방법
- /etc/hosts의 소유자를 root로 변경
```bash
chown root /etc/hosts
```
- /etc/hosts의 권한을 600으로 변경
```bash
chmod 600 /etc/hosts
```
### 6. 관리자 계정에 대한 로그인 성공/실패 기록 설정
- 취약점 점검방법
- last 명령어 입력 후 로그인 기록 조회
(wtmp 파일 cat으로 읽을 수 없으므로 last 명령어로 조회)
```bash
last
```
- 취약점 조치 방법
- wtmp 파일 존재 유무 확인
```bash
ls –alL /var/log/wtmp
```
- loginlog 파일 생성 후, 관리자에게 읽기/쓰기 권한을 부여해줌
```bash
touch /var/log/wtmp
chown root /var/log/wtmp
chmod 600 /var/log/wtmp
```
### 7. 네트워크 서비스 데몬 권한 755 초과 여부 설정 확인
- 취약점 점검방법
- xinetd, inetd 조회하여 Group, Others의 쓰기 권한 확인
```bash
ls –alL /etc/xinetd.d/*
ls –alL /etc/inetd/*
```
- 취약점 조치 방법
- ls –alL /usr/sbin/xinetd 조회하여 Group, Others의 쓰기 권한 제거
```bash
usermod –u 1001 test (test 계정을 UID 변경)
```
- 사용자(일반) 계정이 0~99사이일 경우 적절한 GID부여
```bash
groupmod –g 1001 test (test 계정 GID 변경)
```
### 8. 안전한 비밀번호 설정(9자리 이상 숫자 영문자 특수문자 혼용 정기적 변경)
- 취약점 점검방법
- /etc/pam.d/system-auth 파일 확인
```bash
cat /etc/pam.d/system-auth
```
- OS별 점검 파일 내 영문, 숫자, 특수문자 9자리 이상 설정 확인
<table>
<thead>
<tr>
<th>OS 버전</th>
<th>점검 파일 위치 및 점검 방법</th>
</tr>
</thead>
<tbody>
<tr>
<td>SOLARIS</td>
<td>/etc/default/passwd</td>
</tr>
<tr>
<td>INUX-RHEL5</td>
<td>/etc/pam.d/system-auth</td>
</tr>
<tr>
<td>INUX-RHEL7</td>
<td>/etc/security/pwquality.conf</td>
</tr>
<tr>
<td>AIX</td>
<td>/etc/security/user</td>
</tr>
<tr>
<td>HP-UX</td>
<td>/etc/default/security</td>
</tr>
</tbody>
</table>
- 취약점 조치 방법
- OS별 점검 파일을 열어 영문, 숫자, 특수문자 혼용 9자리 이상 설정
```bash
vi /etc/pam.d/system-auth
# 예시
password requisite pam_cracklib.so try_first_pass retry=3
minlen=9 dcredit=-1 ocredit=-1 udredit=-1 lcredit=-1
```
### 9. 패스워드 관리 시스템 파일은 슈퍼관리자만 수정 권한 소유 \[U-07\] \[U-08\]
- 취약점 점검방법
- /etc/passwd, /etc/shadow **소유자 root 확인(양호)**
```bash
ls –l /etc/passwd
ls –l /etc/shadow
```
- 취약점 조치 방법
- chown 명령어로 소유자를 root로 변경
```bash
chown root /etc/passwd
chown root /etc/shadow
```
### 10. 패스워드 관리를 위한 시스템 파일은 슈퍼관리자(root)만 수정 권한 소유 \[U-07,08\]
- 취약점 점검방법
- /etc/passwd(**644권한 양호**) /etc/shadow(**400권한 양호**)
```bash
ls –l /etc/passwd
ls –l /etc/shadow
```
- 취약점 조치 방법
- chmod 명령어로 권한 644 변경
```bash
chmod 644 /etc/passwd
```
- chmod 명령어로 권한 400 변경
```bash
chmod 400 /etc/shadow
```
### 11. 원격 로그인 또는 원격 쉘 등 사용 설정 유무 \[U-21\]
- 취약점 점검방법
- rsh, rlogin, rexec 원격서비스 disable 설정 필요
```bash
cat /etc/xinetd.d/rsync
ls –alL /etc/xinetd.d/* | egrep "rsh|rogin|rexec"
systemctl status rsh.socket/rlogin.socket/rexec.socket
```
- 취약점 조치 방법
- xinetd일 경우, vi 편집기 이용하여 rsh, rlogin, rexec 파일 연 후 disable=yes 설정
```bash
vi /etc/xinetd.d/rlogin
vi /etc/xinetd.d/rsh
vi /etc/xinetd.d/rexec
```
### 12. 불필요한 네트워크 서비스 제거
- 취약점 점검방법
- 불필요한 네트워크 서비스 비활성화 확인
```bash
ls -alL /etc/xinetd.d/*
ls –alL /etc/xinetd.d/* | egrep "rsh|rogin|rexec"
```
<table>
<thead>
<tr>
<th>OS 버전</th>
<th>점검 파일 위치 및 점검 방법</th>
</tr>
</thead>
<tbody>
<tr>
<td>LINUX, AIX</td>
<td></td>
</tr>
</tbody>
</table>
HP-UX,
SOLARIS 5.9
이하 버전 | 불필요한 RPC 서비스 비활성화 여부 확인
#cat /etc/inetd.conf |
| LINUX(xinetd) | “/etc/xinetd.d” 디렉터리 내 서비스별 파일 비활성화 여부 확인
#vi /etc/xinetd.d/\[서비스별 파일명\] |
| SOLARIS 5.10
이상 버전 | RPC 서비스 관련 데몬 확인
#inetadm | grep rpc | grep enabled | egrep “ttdbserver|rex|rstart|rusers| spray|wall|rquota” |
- 취약점 조치 방법
- LINUX, AIXHP-UX,SOLARIS 5.9이하 버전
- “/etc/inetd.conf” 파일에서 해당 라인 #처리(주석처리)
- 주석처리 후 inetd 서비스 재시작 필요!
```bash
#ps –ef | grep inetd (pid값 검색 후 아래 명령어 실행)
#kill –HUP pid
```
- LINUX(xinetd일 경우)
- vi 편집기를 이용하여 “/etc/xinetd.d/” 디렉터리 내의 불필요한 RPC 서비스 파일 열기 (Disable = yes 설정)
- 설정 후 xinetd 서비스 재시작
```bash
groupmod –g 1001 test (test 계정 GID 변경)
```
### 13. 암호화 기능이 없는 프로토콜(TELNET, FTP) 사용 여부
- 취약점 점검방법
- ftp, telnet 사용 여부 확인
```bash
netstat –an | grep "LISTEN" | grep "21"
netstat –an | grep "LISTEN" | grep "23"
systemctl status telenet.socket
systemctl status vsftpd
```
- 취약점 조치 방법
### 14. 익명 FTP 사용 여부
- 취약점 점검방법
- cat /etc/passwd (파일 안에 ftp 또는 익명계정 있는 경우 취약)
```bash
cat /etc/passwd | grep -v nologin
```
- 취약점 조치 방법
- /etc/passwd 파일에서 ftp 또는 익명 계정 삭제 (명령어: userdel ftp)
```bash
userdel ftp
```
- /etc/xinetd.d/ftpd|proftpd|vsftpd 설정 값 변경
disable =no 경우 취약, disable =yes 변경(양호)
- /etc/vsftpd/vsftpd.conf 파일 설정 값 변경
anonymous\_enable=yes 경우 취약, anonymous\_enable=no 변경(양호)
### 15. 자동으로 FTP에 로그인을 허용하는 .netrc 파일 제거
- 취약점 점검방법
- netrc 파일을 find 명령어로 찾습니다.(파일 없음 확인)
```bash
find / -name .netrc
```
- 취약점 조치 방법
- find로 찾은 .netrc 파일을 vi편집기로 불필요한 항목 수정
```bash
vi /경로/.netrc
```
- .netrc 파일이 필요 없는 경우는 삭제
```bash
rm /경로/.netrc
```
- .netrc 파일이 필요한 경우, 소유자 이외의 일반 사용자가 .netrc 파일에 접근하지 못하도록 접근 권한을 변경
```bash
chmod 600 /경로/.netrc
```
### 16. xnetd/xinetd가 불필요한 경우 비활성화
- 취약점 점검방법
- inetd 또는 xinetd 프로세스 비활성화 확인
```bash
ps –ef | grep inetd | grep -v grep
ps –ef | grep xinetd | grep -v grep
```
- 취약점 조치 방법
- inetd 또는 xinetd 프로세스 종료
```bash
/usr/sbin/xinetd stop
```
- /etc/xinetd.d/\[서비스명\] disable=yes로 수정
```bash
vi /etc/inetd.conf/[서비스명]
```
- /etc/inetd.conf 서비스 확인하여 해당 서비스 주석처리(#)
```bash
vi /etc/inetd.conf
```
### 17. 지정된 IP외의 주소에서 FTP나 TELENET으로 접속한 이력여부 점검
- 취약점 점검방법
- last 명령어 조회하여 허용되지 않은 IP 접근 내역 확인
```bash
last
```
- 허용 IP, 차단 IP 확인
```bash
# 허용 IP
cat /etc/hosts.allow
# 차단 IP
cat /etc/hosts.deny
```
- 취약점 조치 방법
- TCP Wrapper를 활용하여 접근허용 IP 등록
- deny 정책: 모든 접근허용 IP 차단 (ALL : ALL)
- allow 정책: 제한적 허용(**접근제어 IP(필수)** 및 **담당공무원PC IP만 **허용)
1. DMZ 접근제어(예시)
- sshd : 211.252.37.254
- ftp : 211.252.37.254
- sendmail : ALL
1. 서버팜 접근제어(예시)
- sshd : 102.1.249.254
- ftp :102.1.249.254
- sendmail : ALL
### 18. Cron 파일 소유자 및 권한 설정 점검 \[U-22\]
- 취약점 점검방법
- /etc/cron.allow, /etc/cron.deny 파일 소유자 root이고, 권한 640이하 확인
```bash
ls -al /etc/cron.allow
ls -al /etc/cron.deny
```
- 취약점 조치 방법
- /etc/cron.allow, /etc/cron.deny 파일 소유자 root 변경, 권한 640이하 변경
```bash
chown root /etc/cron.allow
chmod 640 /etc/cron.allow
```
### 19. 디폴트 SNMP 커뮤니티 스트링(public) 값 변경
- 취약점 점검방법
- 커뮤니티 값이 public, private인 경우 변경
```bash
cat /etc/snmp/snmpd.conf
```
- 취약점 조치 방법
- vi 편집기를 이용하여 SNMP 설정파일 열기
```bash
vi /etc/snmp/snmpd.conf
# Community String 값 설정 변경
(수정전) com2sec nonConfigUser default public
(수정후) com2sec nonConfigUser default <변경값>
```
- 서비스 재구동
```bash
service snmpd rstart
```
### 20. 최신버전의 SSH 사용
- 취약점 점검방법
- 현재 버전의 ssh 확인 OpenSSH 버전 확인
```bash
ssh -V
```
- 취약점 조치 방법
- 패키지 매니저를 통한 최신 업데이트
```bash
# RHEL / CentOS
yum install openssh-server
# Ubuntu
apt-get update
apt-get install openssh-server
```
- 수동 업데이트 : [https://www.openssh.com](https://www.openssh.com/)
### 21. IP 포워딩 비활성화
- 취약점 점검방법
- IP 포워딩 활성화 여부 확인(값이 0이면 양호)
```bash
cat /proc/sys/net/ipv4/ip_forward
```
- 취약점 조치 방법
- 값을 0 으로 변경
```bash
echo 0 > /proc/sys/net/ipv4/ip_forward
```
### 22. 패킷 재전송 설정 비활성화
- 취약점 점검방법
- 패킷 재전송 비활성화 설정 확인(값이 0이면 양호)
```bash
cat /etc/sysctl.conf
```
- 취약점 조치 방법
- 부팅 시 항상 적용될 수 있도록 설정 파일에 다음 행 추가
```bash
vi /etc/sysctl.conf
net.ipv4.ip_forward=0
# 또는
net.ipv4.conf.default.accept_source_route=0
```
### 23. 시간동기화(NTP) 설정
- 취약점 점검방법
- 현재 시간과 일치 여부 확인, 폐쇄망일 경우 수동 설정 필요
```bash
ntpq -p
date
```
- 취약점 조치 방법
- 외부망 NTP: (ADD-PAK)211.252.37.243, (IBM)211.252.37.253 설정
(DMZ 대역 211.252.37.X 등)
- 업무망 NTP: (ADD-PAK)102.1.249.243, (IBM)102.1.246.253 설정
(서버팜 대역 102.1.X.X 등)
./comments