가. 취약점 개요
■ 내용 : 시스템 정책에 root 계정의 원격터미널 접속차단 설정이 적용되어 있는지 점검
■ 목적 : 관리자계정 탈취로 인한 시스템 장악을 방지하기 위해 외부 비인가자의 root 계정 접근 시도를 원천적으로 차단하기 위함
■ 보안 위협
root 계정은 운영체제의 모든기능을 설정 및 변경이 가능하여(프로세스, 커 널변경 등) root 계정을 탈취하여 외부에서 원격을 이용한 시스템 장악 및 각종 공격으로(무작위 대입 공격) 인한 root 계정 사용 불가 위협
■ 참고
- root 계정: 여러 사용자가 사용하는 컴퓨터에서 모든 기능을 관리할 수 있는 총괄권한을 가진 유일한 특별 계정. 유닉스 시스템의 루트(root)는 시스템 관리자인 운용 관리자(Super User)로서 윈도우의 Administrator 보다 높은 System 계정에 해당하며, 사용자 계정을 생성하거나 소프트웨어를 설치하고, 환경 및 설정을 변경하거나 시스템의 동작을 감시 및 제어할 수 있음
- 무작위 대입 공격 (Brute Force Attack): 특정한 암호를 풀기 위해 가능한 모든 값을 대 입하는 공격 방법
- 사전 대입 공격 (Dictionary Attack): 사전에 있는 단어를 입력하여 암호를 알아내거나 암호를 해독하는 데 사용되는 컴퓨터 공격 방법
나. 점검 방법
■ 대상 : SOLARIS, LINUX, AIX, HP-UX 등
■ 판단기준
- 양호 : 원격 터미널 서비스를 사용하지 않거나, 사용 시 root 직접 접속을 차단한 경우
- 취약 : 원격 터미널 서비스 사용 시 root 직접 접속을 허용한 경우
■ 점검 명령어
[표 : 원격터미널 사용하는 경우 점검 명령어 및 양호한 설정]
OS | 사용 서비스 | 점검 파일 위치 및 점검 방법 | 설명 |
SOLARIS | [Telnet] | #cat /etc/default/login CONSOLE=/dev/console |
|
[SSH] | #cat /etc/ssh/sshd_config PermitRootLogin no |
||
LINUX | [Telnet] | #cat /etc/pam.d/login auth required /lib/security/pam_securetty.so #cat /etc/securetty pts/0 ~ pts/x 관련 설정이 존재하지 않음 |
“/etc/securetty” 파일 내 *pts 설정이 존재하는 경우 PAM 모듈 설정과 관계없이 root 계정 접속을 허용하므로 pts설정 제거 |
[SSH] | #cat /etc/ssh/sshd_config PermitRootLogin no |
* 가이드와 다름 (확인함) | |
AIX | [Telnet] | #cat /etc/security/user rlogin = false |
root 설정에 해당되는 부분 수정 |
[SSH] | #cat /etc/ssh/sshd_config PermitRootLogin no |
||
HP-UX | [Telnet] | #cat /etc/securetty console |
|
[SSH] | #cat /etc/opt/sshd_config DenyUsers root |
* 가이드와 다름 (검증필요) |
다. 조치 방법
■ SOLARIS
[Telnet 서비스 이용시]
Step 1) vi 편집기를 이용하여 “/etc/default/login” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
(수정 전) #CONSOLE=/dev/console
(수정 후) CONSOLE=/dev/console
[SSH 서비스 이용 시]
Step 1) vi 편집기를 이용하여 “/etc/ssh/sshd_config” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
(수정 전) #PermitRootLogin yes
(수정 후) PermitRootLogin no
■ LINUX
[Telnet 서비스 이용시]
Step 1) “/etc/securetty” 파일에서 pts/0 ~ pts/x 설정 제거 또는, 주석 처리
Step 2) “/etc/pam.d/login” 파일 수정 또는, 신규 삽입
(수정 전) #auth required /lib/security/pam_securetty.so
(수정 후) auth required /lib/security/pam_securetty.so
※ 참고
pam_securetty.so 모듈은 root 로그인을 특수 장치들로 제한하는 모듈입니다. 이 모듈은 /etc/securetty 파일에 지정된 "안전한" tty로 사용자가 로그인할 때만 root 로그인을 허용하고, 그렇지 않으면 인증에 실패하게 합니다. 이 모듈은 로컬 콘솔에서만 root 로그인을 허용하고, 원격 접속에서는 차단하는 역할을 합니다. /etc/securetty : Telnet 접속 시 root 접근 제한 설정 파일 “/etc/securetty” 파일 내 *pts/x 관련 설정이 존재하는 경우 PAM 모듈 설정과 관계없이 root 계정 접속을 허용하므로 반드시 "securetty" 파일에서 pts/x 관련 설정 제거 필요 *pts/0 ~ pts/x 설정 : tty(terminal-teletype) : 서버와 연결된 모니터, 키보드 등을 통해 사용자가 콘솔로 직접 로그인함 pts(pseudo-terminal, 가상터미널) : Telnet, SSH, 터미널 등을 이용하여 접속함 ** 만약, /etc/securetty 파일이 없을 경우는 pam_securetty.so 파일이 vendordir를 지원하게 빌드되어 있으면 %vendordir%/securetty 파일을 사용 vendordir도 없으면 인증에 실패하고 root 로그인을 거절 최신 리눅스 시스템에서는 securetty, PAM 모듈이 디폴트로 비활성화되어 있으므로 /etc/securetty 파일이 불필요함 |
[SSH 서비스 이용 시]
Step 1) vi 편집기를 이용하여 “/etc/ssh/sshd_config” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
(수정 전) #PermitRootLogin yes
(수정 후) PermitRootLogin no
■ AIX
[Telnet 서비스 이용 시]
Step 1) vi 편집기를 이용하여 “/etc/security/user” 파일 열기
Step 2) rlogin 설정을 아래와 같이 수정 또는, 신규 삽입 (root 설정에 해당되는 부분 수정)
(수정 전) rlogin = true
(수정 후) rlogin = false
※ rlogin(remote-login): 자주 접속하는 호스트에 대해 자동으로 원격 접속을 할 수 있도록 사용 하는 명령어
[SSH 서비스 사용시]
Step 1) vi 편집기를 이용하여 “/etc/ssh/sshd_config” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
(수정 전) #PermitRootLogin yes
(수정 후) PermitRootLogin no
■ HP-UX
[Telnet 서비스 사용시]
Step 1) vi 편집기를 이용하여 “/etc/securetty” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
(수정 전) #console
(수정 후) console
※ 참고 “/etc/securetty” 파일은 디폴트로 존재하지 않으므로 /etc 디렉터리 내에 "securetty" 파일 이 존재하지 않는 경우 새로 생성한 후 적용함 #vi /etc/securetty |
[SSH 서비스 사용시]
Step 1) vi 편집기를 이용하여 “/etc/ssh/sshd_config” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
(수정 전) #PermitRootLogin yes
(수정 후) PermitRootLogin no
라. 조치시 영향 : 일반적인 경우 영향 없음
마. 재민스 주석
■ root(관리자) 계정으로 원격 접속하면 안된다는 것으로, 원격 접속 시에는 일반 사용자 계정으로 접속해야 한다.
- 원격 터미널 서비스(telnet, ssh)를 사용하지 않으면 양호
- 원격 터미널 서비스를 사용할 경우, root 계정으로 직접 접속이 안되면 양호
- root 계정으로 원격터미널 서비스 직접 로그인 되면 취약
■ 점검 스크립트
** 원격 터미널 서비스 사용 확인
1. /etc/services 파일 에서 telnet 포트 찾기
# cat /etc/services | awk -F" " '$1=="telnet" {print $1 " " $2}' | grep "tcp"
telnet 23/tcp
2 /etc/services 파일 에서 ssh 포트 찾기
# cat /etc/services | awk -F" " '$1=="ssh" {print $1 " " $2}' | grep "tcp"
ssh 22/tcp
3. netstat 명령으로 네트워크 서비스 상태 확인 - telnet 사용 확인
# netstat -na | grep ":23 " | grep -i "^tcp"
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
tcp6 0 0 :::23 :::* LISTEN
-> 결과값이 나오면 telnet 서비스 사용 중 (결과가 나오지 않으면 telnet 사용하지 않음)
4. netstat 명령으로 네트워크 서비스 상태 확인 - ssh 사용 확인
# netstat -na | grep ":22 " | grep -i "^tcp"
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 172.30.1.27:22 172.30.1.55:21292 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
-> 결과값이 나오면 ssh 사용 중 (결과가 나오지 않으면 ssh 사용하지 않음)
** root 로그인 설정 확인 - telnet
1. /etc/securetty 파일에서 pts/0~pts/x 설정 확인
#cat /etc/securetty | grep "pts"
pts/0 ~ pts/x 관련 설정이 존재하지 않아야 함. 혹은 /etc/securetty 파일이 없어야 함
/etc/securetty 는 Telnet 접속 시 root 접근을 제한하기 위한 설정 파일이다.
파일이 없을 경우 모든 터미널에서 root로 로그인 가능하다.
/etc/securetty 에 pts/0 와 같이 입력하면 해당 가상터미널(pts/0) 에서 root로 접속이 가능해진다
또한 이 경우 PAM 모듈 설정과 관계없이 root 계정 접속을 허용하므로 반드시 "securetty" 파일에서 pts/x 관련 설정 제거해야 한다.
tty(terminal-teletype) : 서버와 연결된 모니터, 키보드 등을 통해 사용자가 콘솔로 직접 로그인함
pts(pseudo-terminal, 가상터미널) : Telnet, SSH, 터미널 등을 이용하여 접속함
2. /etc/pam.d/login” 파일 수정
#cat /etc/pam.d/login | grep "pam_securetty.so"
auth required pam_securetty.so 설정 필요
** root 로그인 설정 확인 - ssh
1. /etc/ssh/sshd_config 파일 수정
# cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin yes -> 취약. yes 를 no 로 수정