본문으로 바로가기

- 주요정보통신기반시설 파일을 참고하여 서버 점검 스크립트 제작


 

 1.1  root 계정 원격 접속 제한


■ 점검 분류 항목: 계정 관리

■ 세부 점검 항목: root 계정 원격 접속 제한

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-01


(1) 취약점 개요

● root는 시스템을 관리하는 매우 중요한 계정임 계정으로 직접 로그인하도록 . root 허용하면 불법적인 침입자의 목표가 될 수 있으므로 계정 접속에 대한 관리가 root 필요함 계정의 원격 접속 허용은 공격자에게 더 좋은 기회를 제공할 수 있으므로 의 원격 접속은 금지하여야 함.

● root : 계정 여러 사용자가 사용하는 컴퓨터에서 전체적으로 관리할 수 있는 총괄 권한을 가진 유일한 특별 계정 유닉스 시스템의 루트는 시스템 관리자인 운용 관리자로서 . (root) (Super User) 윈도우의 관리자 에 해당하며 사용자 계정을 생성하거나 소프트웨어를 설치하고 (Administrator) , ,환경 및 설정을 변경하거나 시스템의 동작을 감시 및 제어할 수 있음.


(2) 판단기준

● 양호: 원격 서비스를 사용하지 않거나 사용 시 직접 접속을 차단한 경우

● 취약: root 직접 접속을 허용하고 원격 서비스를 사용하는 경우


(3) 조치방법

● 원격 접속 시 계정으로 바로 접속 할 수 없도록 설정파일 수정


(4) 보안 설정 방법

■ 점검 방법

# cat /etc/securetty

"pts/#" 들어 있는지 확인 후 삭제(or 주석처리)


■ 설정 방법

① "/etc/securetty" 파일의 pts/0 ~ pts/x , 파일에서 설정 제거 또는 주석 처리

② "/etc/pam.d/login" 파일 수정

(수정전) #auth required /lib/security/pam_securetty.so 수정 전

(수정후) auth required /lib/security/pam_securetty.so 수정 후


(5) 조치시 영향

일반적으로 영향 없음.

 


(고객에게 설명) 

root 사용자의 이름은 정해져 있으며, 암호만 맞추면 되기 때문에 원격에서 무작위 대입을 통해 root 사용자의 암호가 크랙당하는 위험성이 존재한다. 따라서 일반 사용자로 로그인하여 root 사용자로 전환하여 사용하도록 권장하여야 한다. => Brute Force Attack, Dictionary Attack 


- 쉘 스크립트 작성

root 사용자로 원격에서 로그인하면 안된다.-> /etc/securetty 파일은 기본값을 사용한다.

일반사용자로 로그인하여 su 명령어를 통해 스위칭하여 사용한다.-> 로그에 남겨지기 때문에, root 사용자의 telnet 로그인이 패킷 스니핑에 약하기 때문이다.

su 명령어를 통해 스위칭할수 있는 사용자 그룹(wheel)을 설정한다.-> /etc/pam.d/su-> usermod -G wheel user01

sudo 명령어를 사용할 수 있는 사용자/그룹 지정, 명령어의 집합의 지정이 필요하다.-> /etc/sudoers


[참고] 실습환경 

linux ( CentOS )


# function.sh

 

 LOG=check.log

RESULT=result.log

> $LOG

> $RESULT


BAR() {

echo "========================================================================" >> $RESULT

}


NOTICE() {

[ OK ] : 정상 

[WARN] : 비정상

[INFO] : Information 파일을 보고, 고객과 상의

}


OK() {

echo -e '\033[32m'"[ 양호 ] : $*"'\033[0m'

} >> $RESULT

WARN() {

echo -e '\033[31m'"[ 경고 ] : $*"'\033[0m'

} >> $RESULT

INFO() { 

echo -e '\033[35m'"[ 정보 ] : $*"'\033[0m'

} >> $RESULT

CODE(){

echo -e '\033[36m'$*'\033[0m' 

} >> $RESULT

 


자주 사용하는 구문은 따로 만들어 사용한다. 

check.log와 result.log를 초기화함

BAR와 NOTICE는 간단한 출력문

OK/WARN/INFO/CODE 는 색상을 바꿔 출력함 


# U-01.sh

 

 #!/bin/bash


. function.sh


BAR

CODE [U-01] root 계정 원격 접속 제한 

cat << EOF >> $RESULT

[양호]: 원격 서비스를 사용하지 않거나 사용 시 직접 접속을 차단한 경우.

[취약]: root 직접 접속을 허용하고 원격 서비스를 사용하는 경우.

EOF

BAR


for i in `ls /etc/xinetd.d/*telnet`

do

    BOOLEAN=`cat $i | grep disable | awk '{print $3}'`

    if [ $BOOLEAN = 'yes' ] ; then

        OK  $i : 원격서비스가 사용되고 있지 않습니다.

    else

        WARN  $i : 원격서비스가 사용되고 있습니다.

        if [ -f /etc/securetty -a grep pts /etc/securetty >/dev/null 2>&1 ] ; then

            WARN  $i : root 사용자 접속이 가능합니다.

        else

            OK  $i : root 사용자 접속이 가능하지 않습니다.            

        fi

    fi

done

cat $RESULT

echo ; echo

 


ls /etc/xinetd.d/*telnet 의 출력결과를 가지고 서비스를 판단한다. 

-> chkconfig는 redhat 계열에서만 사용가능하기 때문에 디렉토리에서 찾는다.


BOOLEAN 은 /etc/xinetd.d/*telnet의 출력결과 속의 disable을 검색하여 3번째 필드로 서비스 on/off 확인

서비스가 사용중이면

 /etc/securetty 파일이 존재하고 grep으로 pts 라는 단어가 들어있다면 출력은 생성하고 WARN 출력, 없다면 OK 출력