[주요정보통신기반시설] U-01 root 계정 원격 접속 차단
1. 취약점 개요
점검내용
root 계정의 원격터미널 접속차단 설정이 적용되어 있는지 점검합니다.
점검목적
관리자계정 탈취로 인한 시스템 장악을 방지하기 위해 외부 비인가자의 root 계정 접근 시도를 원천적으로 차단하는 것을 목적으로 하고 있습니다.
보안위협
운영체제의 모든 기능을 설정 및 변경이 가능한 root 계정을 탈취하여 외부에서 원격 접속을 통해 시스템 장악 및 각종 공격으로 인한 root 계정 사용 불가 위협
점검환경
OS : CentOS 7
2. 점검방법 및 조치방안
판단기준
양호 : 원격터미널 서비스를 사용하지 않거나, 사용 시 root 계정 직접 접속을 차단한 경우
취약 : 원격터미널 서비스 사용 시 root 계정 직접 접속을 차단하고 있지 않는 경우
점검방법
- TELNET 서비스 점검
- telnet 서비스 활성화 여부 확인
- /etc/securetty 파일 내 pts/0 ~ pts/x 관련 설정 확인
- /etc/pam.d/login 파일 내 pam_securetty.so 설정 확인
- SSH 서비스 점검
- ssh 서비스 활성화 여부 확인
- /etc/ssh/sshd_config 파일 내 PermitRootLogin 설정 확인
점검 명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 1. TELNET 서비스 점검
# - telnet 서비스 활성화 여부 확인
cat /etc/services | grep "telnet"
netstat -na | grep [:]23
# - /etc/securetty 파일 내 pts/0 ~ pts/x 관련 설정 확인
# 양호 : pts/0 ~ pts/x 관련 설정이 존재하지 않거나 주석처리 되어 있는 경우
# 취약 : pts/0 ~ pts/x 관련 설정이 존재하는 경우
cat /etc/securetty | grep "pts" | egrep -v "^#"
# - /etc/pam.d/login 파일 내 pam_securetty.so 설정 확인
# 양호 : "auth require /lib/security/pam_securetty.so" 설정이 존재하는 경우
# 취약 : "auth require /lib/security/pam_securetty.so" 설정이 존재하지 않거나 주석처리되어 있는 경우
cat /etc/pam.d/login | grep pam_securetty.so | egrep -v "^#"
# 2. SSH 서비스 점검
# - ssh 서비스 활성화 여부 확인
cat /etc/services | grep "ssh"
netstat -na | grep "ssh"
# - /etc/ssh/sshd_config 파일 내 PermitRootLogin 설정 확인
# 양호 : PermitRootLogin 설정이 no인 경우
# 취약 : PermitRootLogin 설정이 yes이거나 주석처리 되어 있는 경우
cat /etc/ssh/sshd_config | grep "PermitRootLogin" | grep -v "^#"
조치방안
- TELNET 서비스 사용 시
- telnet 서비스의 경우 취약한 서비스이므로 차단할 것을 권고
- /etc/securetty 파일 내 pts/0 ~ pts/x 관련 설정 주석 처리 또는 제거
- /etc/pam.d/login 파일 내 “auth require /lib/security/pam_securetty.so” 설정을 추가 - pam_securetty.so 설정은 /etc/securetty 파일 내 pts 관련 설정이 존재하지 않아야 적용
- SSH 서비스 사용 시
- /etc/ssh/sshd_config 파일 내 PermitRootLogin 설정을 yes로 변경
3. 진단 스크립트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/sh
# 호스트네임
HOSTNAME=`hostname`
# 결과 저장
mkdir ./result
# [U-01] root 계정 원격 접속 제한
U_01() {
U_no=1
U_log=$(printf "./result/%s_U_%02d.log" "$HOSTNAME" "$U_no")
echo "==============================" >> $U_log 2>&1
echo "[U-01] root 계정 원격 접속 제한" >> $U_log 2>&1
echo "==============================" >> $U_log 2>&1
# Telnet 서비스 활성화 여부 확인
if [ `cat /etc/services | awk -F" " '$1=="telnet" {print $0}' | grep "tcp" | awk -F" " '{print $2}' | awk -F"/" '{print $1}' | wc -l` -gt 0 ]
then
port=`cat /etc/services | awk -F" " '$1=="telnet" {print $0}' | grep "tcp" | awk -F" " '{print $2}' | awk -F"/" '{print $1}'`
echo "" >> $U_log 2>&1
echo "[Telnet 서비스 활성화 여부]" >> $U_log 2>&1
if [ `netstat -na | grep ":$port" | grep -i "^tcp" | wc -l` -gt 0 ]
then
echo "Telnet 서비스가 활성화 되어 있음" >> $U_log 2>&1
echo `netstat -na | grep ":$port" | grep -i "^tcp"` >> $U_log 2>&1
else
echo "Telnet 서비스가 비활성화 되어 있음" >> $U_log 2>&1
fi
fi
# pts/0 ~ pts/x 설정 여부 확인
echo "" >> $U_log 2>&1
echo "[pts 설정 여부]" >> $U_log 2>&1
if [ -e /etc/securetty ]
then
if [ `cat /etc/securetty | grep "pts" | egrep -v "^#" | wc -l` -gt 0 ]
then
echo "pts가 설정되어 있음" >> $U_log 2>&1
echo `cat /etc/securetty | grep "pts" | egrep -v "^#"` >> $U_log 2>&1
else
echo "pts가 설정되어 있지 않음" >> $U_log 2>&1
fi
else
echo "/etc/securetty 파일이 존재하지 않음" >> $U_log 2>&1
fi
# pam_securetty.so 설정 여부 확인
echo "" >> $U_log 2>&1
echo "[pam_securetty.so 설정 여부]" >> $U_log 2>&1
if [ `cat /etc/pam.d/login | grep "pam_securetty.so" | egrep -v "^#" | wc -l` -gt 0 ]
then
echo "pam_securetty.so 설정되어 있음" >> $U_log 2>&1
echo `cat /etc/pam.d/login | grep "pam_securetty.so" | egrep -v "^#"`
else
echo "pam_securetty.so 설정되어 있지 않음" >> $U_log 2>&1
fi
# SSH 서비스 활성화 여부 확인
if [ `cat /etc/services | awk -F" " '$1=="ssh" {print $0}' | grep "tcp" | awk -F" " '{print $2}' | awk -F"/" '{print $1}' | wc -l` -gt 0 ]
then
port=`cat /etc/services | awk -F" " '$1=="ssh" {print $0}' | grep "tcp" | awk -F" " '{print $2}' | awk -F"/" '{print $1}'`
echo "" >> $U_log 2>&1
echo "[SSH 서비스 활성화 여부]" >> $U_log 2>&1
if [ `netstat -na | grep ":$port" | grep -i "^tcp" | wc -l` -gt 0 ]
then
echo "ssh 서비스가 활성화 되어 있음" >> $U_log 2>&1
echo `netstat -na | grep ":$port" | grep -i "^tcp"` >> $U_log 2>&1
# SSH 서비스 PermitRootLogin 설정 확인
echo "" >> $U_log 2>&1
echo "[PermitRootLogin 설정 확인]" >> $U_log 2>&1
if [ `cat /etc/ssh/sshd_config | grep "PermitRootLogin" | wc -l` -gt 0 ]
then
echo `cat /etc/ssh/sshd_config | grep "PermitRootLogin"` >> $U_log 2>&1
else
echo "PermitRootLogin 설정이 존재하지 않음" >> $U_log 2>&1
fi
else
echo "ssh 서비스가 비활성화 되어 있음" >> $U_log 2>&1
fi
fi
}
U_01
This post is licensed under CC BY 4.0 by the author.