주요정보통신기반기설 기술적 취약점 분석 평가 방법 상세가이드/UNIX 서버 진단

1.1 root 계정 원격 접속 제한 [U-01] (상) - 주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세 가이드(2021)

재민스 2020. 1. 21. 10:42

가.   취약점 개요

   내용 : 시스템 정책에 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 로 수정