본문 바로가기
Hacking/infra 진단

[Linux] U-01 (상) root 계정 원격접속 제한

by 알거음슴 2021. 8. 17.
취약점 개요
점검 내용 시스템 정책에 root 계정의 원격터미널 접속차단 설정이 적용되어 있는지 점검
점검 목적 소유 관리자계정 탈취로 인한 시스템 장악을 방지하기 위해 외부 비인가자의 root 계정 접근 시도를 원천적으로 차단하기 위함
보안 위협 root 계정은 운영체제의 모든기능을 설정 및 변경이 가능하여(프로세스, 커널변경 등) root 계정을 탈취하여 외부에서 원격을 이용한 시스템 장악 및 각종 공격으로(무작위 대입 공격) 인한 root 계정 사용 불가 위협
참고 root 계정: 여러 사용자가 사용하는 컴퓨터에서 모든 기능을 관리할 수 있는 총괄권한을 가진 유일한 특별 계정. 유닉스 시스템의 루트(root)는 시스템 관리자인 운용 관리자(Super User)로서 윈도우의 Administrator 보다 높은 System 계정에 해당하며, 사용자 계정을 생성하거나 소프트웨어를 설치하고, 환경 및 설정을 변경하거나 시스템의 동작을 감시 및 제어할 수 있음
※ 무작위 대입 공격(Brute Force Attack): 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 공격 방법
※ 사전 대입 공격(Dictionary Attack): 사전에 있는 단어를 입력하여 암호를 알아내거나 암호를 해독하는 데 사용되는 컴퓨터 공격 방법
점검대상 및 판단 기준
대상 LINUX
판단기준 양호 : 원격 터미널 서비스를 사용하지 않거나, 사용 시 root 직접 접속을 차단한 경우
취약 : 원격 터미널 서비스 사용 시 root 직접 접속을 허용한 경우
조치 방법 원격 접속 시 root 계정으로 바로 접속 할 수 없도록 설정파일 수정

 

점검 및 조치
점검 [Telnet]
#cat /etc/pam.d/login
auth required /lib/security/pam_securetty.so
#cat /etc/securetty
pts/0 ~ pts/x 관련 설정이 존재하지 않음
[SSH]
#cat /etc/sshd_config
PermitRootLogin no
위에 제시한 내용으로 설정되어 있을 경우 root 원격 접속이 차단됨 / 내용 설정에 대해서는
아래의 보안설정방법을 참고함
조치 [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
/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, 터미널 등을 이용하여 접속함
 
[SSH 서비스 사용시]
Step 1) vi 편집기를 이용하여 “/etc/ssh/sshd_config” 파일 열기
Step 2) 아래와 같이 주석 제거 또는, 신규 삽입
 (수정 전) #PermitRootLogin Yes
 (수정 후) PermitRootLogin No

 

점검 스크립트

#!/bin/bash

. function.sh

BAR
CODE [U-01] root 계정 원격 접속 제한
cat << EOF >> $RESULT
[양호]: 원격 서비스를 사용하지 않거나 사용 시 직접 접속을 차단한 경우.
[취약]: root 직접 접속을 허용하고 원격 서비스를 사용하는 경우.
EOF
BAR

SERVICE1=telnet.socket
systemctl is-active $SERVICE1 >/dev/null 2>&1

if [ $? = 0 ]; then
    INFO "텔넷 서비스가 활성화 되어있습니다."
    VALUE1=$(cat /etc/securetty | grep "^pts" | wc -l)
    if [ $VALUE1 != 0 ] ; then
        VULN "root 직접 접속을 허용하고 원격 서비스를 사용하는 경우."
    else 
        OK "원격 서비스를 사용하지 않거나 사용 시 직접 접속을 차단한 경우."
    fi    
else
    OK "텔넷 서비스가 비활성화 되어있습니다."
fi

SERVICE2=sshd.service
systemctl is-active $SERVICE2 >/dev/null 2>&1
if [ $? = 0 ]; then
    INFO "SSH 서비스가 활성화 되어있습니다."
    VALUE2=$(cat /etc/ssh/sshd_config | grep 'PermitRootLogin yes' | awk {'print $2'} | sed '/the/d')
    if [ $VALUE2 == "yes" ] ; then
        VULN "root 직접 접속을 허용하고 원격 서비스를 사용하는 경우."
    else 
        OK "원격 서비스를 사용하지 않거나 사용 시 직접 접속을 차단한 경우."
    fi    
else
    OK "SSH 서비스가 비활성화 되어있습니다."
fi

cat $RESULT