[목차]

 

 

 

 

finger 서비스 비활성화(U-36)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

Anonymous FTP 비활성화(U-37)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

r 계열 서비스 비활성화(U-38)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

cron 파일 소유자 및 권한 설정 (U-39)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

Dos 공격에 취약한 서비스 비활성화 (U-40)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

 


 

 

 

[ finger 서비스 비활성화]

 

 

 

1. 취약점 분석/평가 방법 상세 가이드

3.1 finger 서비스 비활성화

 

■ 점검 분류 항목: 서비스 관리

■ 세부 점검 항목: finger 서비스 비활성화

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-36

 

(1) 취약점 개요

*Finger(사용자정보 확인 서비스)를 통해서 네트워크 외부에서 해당 시스템에 등록된 사용자 정보를 확인할 수 있으므로, 사용하지 않는다면 해당 서비스를 중지하여야 함.

*Finger(사용자정보 확인 서비스): who 명령어가 현재 사용 중인 사용자들에 대한 간단한 정보만을 보여주는 데 반해 finger 명령은 옵션에 따른 시스템에 등록된 사용자뿐만 아니라 네트워크를 통하여 연결되어 있는 다른 시스템에 등록된 사용자들에 대한 자세한 정보를 보여줌.

 

(2) 판단기준

양호: Finger 서비스가 비활성화 되어 있는 경우

취약: Finger 서비스가 활성화 되어 있는 경우

 

(3) 조치방법

Finger 서비스 비활성화

 

(4) 보안 설정 방법

■ 점검 방법

#ls -alL /etc/xinetd.d/* | egrep "finger"

제시된 파일 내 “finger” 서비스가 활성화된 경우 아래의 보안설정방법에 따라 서비스 중지

 

■ 설정 방법

#chkconfig finger off (# vi /etc/xinetd.d/finger (disable = yes))

#service xinetd restart

 

(5) 조치시 영향

일반적으로 영향 없음

 

 

 

2. 취약점 점검 스크립트 제작

 

 

 

(스크립트 작성시 참고사항)

 

0. 존재 유무 확인 / 설치 / 서비스 활성화 여부 확인

 

# yum list finger*

finger

fingerserver

 

# systemctl list-unit-files | grep –q finger.socket

# echo $?

1

 

# systemctl is-active finger.socket

unknown

 

# yum install finger finger-server

 

# systemctl list-unit-files | grep –q finger.socket

# echo $?

0

 

# systemctl is-active finger.socket

unknown

 

# systemctl enable —now finger.socket

# systemctl is-active finger.socket

active

 

*다른 항목과 마찬가지로 컨설팅 하는 사람에게

확인시켜줄 수 있는 커맨드를 함께 제공.

 

 

1. finger 서비스가 존재 하는가?

ls -lL /etc/xinetd.d | grep finger >/dev/null 2>&1

If [ $? -eq 0 ] ; then

echo "WARN"

else

echo "OK"

Fi

 

2. 존재한다면 서비스가 on(enable) 되어 있는가?

RES=`cat /etc/xinetd.d/finger | grep disable | awk '{print $3}'`

If [ $RES = yes ] ; then

echo "OK"

else

echo "WARN"

fi

 

3. 취약하다.

 

 

(스크립트 작성)

U-36.sh

#!/bin/bash

 

. function.sh

 

BAR

CODE '[U-36] finger 서비스 비활성화'

cat << EOF >> $RESULT

[양호]: Finger 서비스가 비활성화 되어 있는 경우

[취약]: Finger 서비스가 활성화 되어 있는 경우

EOF

BAR

 

ls -lL /etc/xinetd.d | grep finger >/dev/null 2>&1

if [ $? -eq 0 ] ; then

WARN Finger 서비스가 존재합니다.

RES=`cat /etc/xinetd.d/finger | grep disable | awk '{print $3}'`

if [ $RES = 'yes' ] ;then

OK Finger 서비스가 활성화되어 있지 않습니다.

else

WARN Finger 서비스가 활성화되어 있습니다.

fi

else

OK Finger 서비스가 존재하지 않습니다.

fi

 

cat $RESULT

echo ; echo

 

 

(CentOS 7.x) U-36.sh

#!/bin/bash

 

. function.sh

 

BAR

CODE '[U-36] finger 서비스 비활성화'

cat << EOF >> $RESULT

[양호]: Finger 서비스가 비활성화 되어 있는 경우

[취약]: Finger 서비스가 활성화 되어 있는 경우

EOF

BAR

 

SERVICENAME='finger.socket'

systemctl list-unit-files $SERVICENAME \

| grep -v UNIT \

| grep -v 'unit files' \

| grep $SERVICENAME >/dev/null 2>&1

if [ $? -eq 0 ] ; then

INFO Finger 서비스가 설치 되어 있습니다.

STATUS=$(systemctl is-active $SERVICENAME)

if [ $STATUS = 'active' ] ; then

WARN Finger 서비스가 활성화 되어 있습니다.

else

OK Finger 서비스가 비활성화 되어 있습니다.

fi

else

OK Finger 서비스가 설치 되어 있지 않습니다.

fi

 

cat $RESULT

echo ; echo

 

#!/bin/bash

. function.sh

BAR
CODE '[U-36] finger 서비스 비활성화'
cat << EOF >> $RESULT
[양호]: Finger 서비스가 비활성화 되어 있는 경우
[취약]: Finger 서비스가 활성화 되어 있는 경우
EOF
BAR

SERVICENAME='finger.socket'
systemctl list-unit-files | grep -q $SERVICENAME | grep -v UNIT | \
							#grep -v 'unit-files' \
							#grep $SERVICENAME >/dev/null 2>&1

if [ $? -eq 0 ] ; then
	INFO 'Finger 서비스가 설치되어 있습니다.'
	STATUS=$(systemctl is-active $SERVICENAME)
	if [ $STATUS = 'active' ] ; then
		WARN 'Finger 서비스가 활성화 되어 있습니다.'
	else 
		OK '서비스가 비활성화 되어 있습니다.'
	fi
else
	OK 'Finger 서비스가 설치 되어 있지 않습니다.'
fi

cat $RESULT
echo ; echo

 

 

 

 

 


 

 

 

[Anonymous FTP 비활성화]

 

 

 

1. 취약점 분석/평가 방법 상세 가이드

3.2 Anonymous FTP 비활성화

■ 점검 분류 항목: 서비스 관리

■ 세부 점검 항목: anonymous 서비스 비활성화

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-37

 

(1) 취약점 개요

*Anonymous FTP(익명 FTP)를 사용할 경우 악의적인 사용자가 시스템에 관한 정보를 획득할 수 있으며 디렉터리에 쓰기 권한이 설정되어 있을 경우 local exploit을 사용하여 다양한 공격이 가능하게 되므로 반드시 필요한 사용자만 접속 할 수 있도록 설정하여 권한 없는 사용자의 FTP 사용을 제한하여야 함.

*Anonymous FTP(익명 FTP): 파일 전송을 위해서는 원칙적으로 상대방 컴퓨터를 사용할 수 있는 계정이 필요하나 누구든지 계정 없이도 anonymous 또는, ftp라는 로그인 명과 임의의 비밀번호를 사용하여 FTP를 실행할 수 있음.

 

(2) 판단기준

양호: Anonymous FTP (익명 ftp) 접속을 차단한 경우

취약: Anonymous FTP (익명 ftp) 접속을 차단하지 않은 경우

 

(3) 조치방법

Anonymous FTP 서비스 비활성화

 

(4) 보안 설정 방법

■ 점검 방법

/etc/passwd 파일에 ftp 계정 존재 여부 확인

#cat /etc/passwd | grep "ftp"

# grep ftp /etc/passwd

 

■ 설정 방법

1. 일반 FTP - Anonymous FTP 접속 제한 설정 방법

“/etc/passwd” 파일에서 ftp 또는, anonymous 계정 삭제

# userdel ftp

 

2. ProFTP - Anonymous FTP 접속 제한 설정 방법

“/etc/passwd” 파일에서 ftp 계정 삭제

# userdel ftp

 

3. vsFTP - Anonymous FTP 접속 제한 설정 방법

vsFTP 설정파일(“/etc/vsftpd/vsftpd.conf” 또는, “/etc/vsftpd.conf”)에서

anonymous_enable=NO 설정

 

(5) 조치시 영향

Anonymous FTP를 사용하지 않을 경우 영향 없음

 

 

 

 

2. 취약점 진단 스크립트 제작

 

 

(스크립트 작성시 참고 사항)

 

* 고객한테 보여줄때는 항상

최대한 많은 정보를 수집하고 다양한 방법을 통해 점검작업을 했다는 것을 보여줘야 함.

 

 

* FTP 서비스가 존재 유무 확인

# grep ftp /etc/passwd

# cat /etc/passwd | grep '^ftp'

 

 

*고객한테 기동중인 서비스 확인시켜 줄때 사용 명령어

# netstat -antp | grep :21

# netstat -antp

 

 

* FTP 기동을 중지시키고 다른 FTP 서비스를 설치해보자

# systemctl disable --now vsftpd.service

(두 서비스를 동시에 올리면 충돌나서 문제 생길 수 있으니까)

# yum list *ftp*

보통 vsftpd 하나만 있음

 

 

* 서비스 추가 및 설치 실습

# yum install yum-utils -> yum-config-manager

# yum install epel-release -> fedoraproject dnf repository

 

# yum repo list

# yum list *ftp*

# yum install proftpd.x86_64

# yum install proftpd-utils.x86_64

 

 

* ftp 서비스 리스트 확인

# systemctl list-unit-files | grep ftp

proftpd.service disabled

vsftpd.service disabled

vsftpd@.service disabled

vsftpd.target disabled

 

* proftpd

# rpm -ql proftpd

/etc/proftpd.conf (주설정 파일)

/usr/lib/systemd/system/proftpd.service

/var/ftp

/var/log/proftpd

 

# systemctl enable --now progtpd

# cat /etc/ftpusers (등록된 사용자는 접속 불가)

# ftp localhost

> anonymous

> asdf@asdfsd.com

> 로긴 안됨(다른 사용자는 가능)

 

설정 변경

# vi /etc/sysconfig/proftpd

 

# systemctl restart proftpd

다시 시도 : 실패

 

 

 

* vsftpd 서비스로 가정, 코딩 아이디어

 

anonymous 접속 가능 여부 확인

# ftp localhost

login > anonymous

pass > asdf@asdf.com

login success!

 

접속 불가능 유저 목록 확인

# grep ftp /etc/passwd

 

서비스 이름 뽑아내기

# netstat -antp | grep ftp | awk '{print $7}' | awk -F: '{print $1}' | awk -F/ '{print $2}'

 

기동 유무 확인

# systemctl is-active vsftpd

 

# systemctl list-unit-files | grep ftp

# systemctl list-unit-files | grep ftp | grep .service

# systemctl list-unit-files | grep ftp | grep .service | grep -v '@'

 

 

ftp 서버(EX: vsftpd) 동작 유무 확인

pgrep vsftpd > vsftpd.pid

if [ -s vsftpd.pid ] ; then

echo "[ INFO ]"

else

echo "[ INFO ]"

fi

 

 

anonymous ftp 서버가 구성되어 있는지 존재 유무 확인

RES=`cat /etc/vsftpd/vsftpd.conf | grep -v '^#' | grep anonymous_enable | awk -F= '{print $2}'`

if [ $RES = YES ] ; then

echo "[ WARN ]"

else

echo "[ OK ]"

fi

 

(스크립트 제작)

■ U-37.sh

#!/bin/bash

. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1


BAR
CODE '[U-37] Anonymous FTP 비활성화'
cat << EOF >> $RESULT
[양호]: Anonymous FTP (익명 ftp) 접속을 차단한 경우
[취약]: Anonymous FTP (익명 ftp) 접속을 차단하지 않은 경우
EOF
BAR

INFO $TMP1 파일을 점검한다.

netstat -antp | grep ftp | awk '{print $7}' | awk -F: '{print $1}' | awk -F/ '{print $2}' >/dev/null 2>&1

if [ $? -eq 0 ] ; then 
	WARN 'FTP 서비스가 존재합니다'
	pgrep -lf vsftpd > vsftpd.pid
	if [ -s vsftpd.pid ] ; then 
		cat vsftpd.pid > $TMP1
		WARN vsftpd 서비스가 동작 중 입니다.
		RES=$(cat /etc/vsftpd/vsftpd.conf | egrep -v '^#' \
			| egrep anonymous_enable \
			| awk -F= '{print $2}')
		if [ $RES = 'YES' ] ; then
			WARN Anonymous FTP 서비스가 활성화 되어 있습니다.
			echo "/etc/vsftpd/vsftpd.conf(anonymous_enable=YES)" >> $TMP1
		else
			OK Anonymous FTP 서비스가 비활성화 되어 있습니다.
		fi
	else
		OK vsftpd 서비스가 동작 중이 아닙니다.
	fi
else
	INFO 'FTP 서비스가 존재하지 않습니다'
fi
cat $RESULT
echo ; echo

 

 

 

 


 

 

 

[r 계열 서비스 비활성화]

 

 

 

1. 취약점 분석/평가 방법 상세 가이드

3.3 r 계열 서비스 비활성화

■ 점검 분류 항목: 서비스 관리

■ 세부 점검 항목: r 계열 서비스 비활성화

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-38

 

 

(1) 취약점 개요

*‘r’command *NET Backup이나 다른 용도로 사용되기도 하나 보안상 매우 취약하여 서비스 포트가 열려있는 경우 중요 정보 유출 및 시스템 , 장애 발생 등 침해사고의 위험이 있음.

*‘r’command: 인증 없이 관리자의 원격접속을 가능하게 하는 명령어들로 rsh(remsh), rlogin,rexec 등이 있음.

*NET Backup: 이기종 운영체제간 백업을 지원하는 시멘틱사의 백업 및 복구 툴을 말함

 

 

(2) 판단기준

양호: r 계열 서비스가 비활성화 되어 있는 경우

취약: r 계열 서비스가 활성화 되어 있는 경우

(3) 조치방법

NET Backup등 특별한 용도로 사용하지 않는다면 아래의 서비스 중지

- shell(514), login(513), exec(512)

 

 

(4) 보안 설정 방법

■ 점검 방법

rsh, rlogin, rexec (shell, login, exec) 서비스 구동 확인

# ls -alL /etc/xinetd.d/* | egrep “rsh|rlogin|rexec” | egrep -v

"grep|klogin|kshell|kexec"

 

■ 설정 방법

# chkconfig rlogin off (# vi /etc/xinetd.d/rlogin(disable = yes))

# chkconfig rsh off (# vi /etc/xinetd.d/rsh(disable = yes))

# chkconfig rexec off (# vi /etc/xinetd.d/rexec(disable = yes))

# service xinetd restart

(5) 조치시 영향

 

 

rlogin, rshell, rexec 서비스는 backup 등의 용도로 종종 사용되며 /etc/hosts.equiv

또는, 각 홈 디렉터리 밑에 있는 .rhosts 파일에 설정 유무를 확인하여 해당 파일이

존재하지 않거나 해당 파일 내에 설정이 없다면 사용하지 않는 것으로 파악



 

* 참고사항

■ r CMD(rlogin, rsh, rcp) - /etc/host.equiv, ~/.rhosts

■ s CMD(ssh, sftp, scp)

 

rlogin, rsh --- encryption ---> ssh

rcp --- encryption ---> scp

 

-------------------------------------------------------------------------------

# rlogin -l root 172.16.9.254 # ssh -l root 172.16.9.254

# rsh 172.16.9.254 CMD # ssh 172.16.9.254 CMD

-------------------------------------------------------------------------------

# rcp file1 172.16.9.254:/tmp # scp file1 172.16.9.254:/tmp

# rcp 172.16.9.254:/tmp/file1 /test # scp 172.16.9.254:/tmp/file1 /test

-------------------------------------------------------------------------------

 

# ping 172.16.6.xxx

# nmap -p 512-514 172.16.6.xxx

# /usr/bin/rlogin 172.16.6.xxx

# cat /.rhosts

# exit

 

# dd if=/dev/zero of=file1 bs=1M count=10

# /usr/bin/rcp file1 172.16.6.245:/tmp/linux2XX

# /usr/bin/rcp 172.16.6.245:/tmp/linux2XX /test

# ls -l /test

 

 

 

* Local r COM 서비스 구성 방법

 

# yum install rsh rsh-server

# rpm –ql rsh

# rpm –ql rsh-server

# systemctl enable —-now rexec.socket

# systemctl enable —-now rlogin.socket

# systemctl enable --now rsh.socket

 

 

테스트

# namp -p 512-514 IP

# /usr/bin/rlogin IP

 

rlogin, rsh --- encryption ---> ssh

rcp --- encryption ---> scp

 

-------------------------------------------------------------------------------

# rlogin -l root 172.16.x.xxx # ssh -l root 172.16.x.xxx

# rsh 172.16.x.xxx CMD # ssh 172.16.x.xxx CMD

-------------------------------------------------------------------------------

# rcp file1 172.16.x.xxx:/tmp # scp file1 172.16.x.xxx:/tmp

# rcp 172.16.x.xxx:/tmp/file1 /test # scp 172.16.x.xxx:/tmp/file1 /test

-------------------------------------------------------------------------------

 

 

 

서비스 검색 및 기동 유무 확인

# systemctl list-unit-files | egrep 'rlogin.socket|rsh.socket|rexec.socket'

# systemctl enable

 

 

 

2. 취약점 진단 스크립트 제작

 

 

(스크립트 제작)

U-38.sh (CentOS 5.x)

#!/bin/bash

 

. function.sh

 

BAR

CODE 'r 계열 서비스 비활성화'

cat << EOF >> $RESULT

[양호]: r 계열 서비스가 비활성화 되어 있는 경우

[취약]: r 계열 서비스가 활성화 되어 있는 경우

EOF

BAR

 

TMP2=/tmp/tmp2

ls -1 /etc/xinetd.d | egrep '(rsh|rlogin|rexec)' > $TMP2

if [ -s $TMP2 ] ; then

WARN 'rCMD(rlogin,rsh,rcp) 서비스가 존재합니다.'

for i in `cat $TMP2`

do

RES=`cat /etc/xinetd.d/$i | egrep -v '^#' \

| egrep disable \

| awk '{print $3}'`

if [ $RES = 'yes' ] ; then

OK $i 서비스가 활성화 되어 있지 않습니다.

else

WARN $i 서비스가 활성화 되어 있습니다.

fi

done

else

OK 'rCMD(rlogin,rsh,rcp) 서비스가 존재하지 않습니다.'

fi

 

cat $RESULT

echo ; echo

 

U-38.sh (CentOS 7.x)

#!/bin/bash

. function.sh

TMP1=`SCRIPTNAME`.log
> $TMP1
TMP2=/tmp/tmp2
> $TMP2

BAR
CODE 'r 계열 서비스 비활성화'
cat << EOF >> $RESULT
[양호]: r 계열 서비스가 비활성화 되어 있는 경우
[취약]: r 계열 서비스가 활성화 되어 있는 경우
EOF
BAR



SERVICE_LIST='rlogin.socket rexec.socket rsh.socket'
for SERVICE in $SERVICE_LIST
do
	#echo $SERVICE
	STATUS=$(systemctl is-active $SERVICE)
	if [ $STATUS = 'active' ] ; then
		echo "[ WARN ] $SERVICE is Active". >> $TMP1
	else
		echo "[  OK  ] $SERVICE not configured">> $TMP1
	fi
done

if grep -q WARN $TMP1 ; then
	WARN 'r 계열 서비스가 활성화 되어 있습니다.'
	INFO "$TMP1 파일의 내용을 참고 하세요."
else
	OK 'r 계열 서비스가 비활성회 되어 있습니다.'
fi

cat $RESULT
echo ; echo

 

 

 


 

 

 

[cron 파일 소유자 및 권한 설정]

 

 

1. 취약점 분석/평가 방법 상세 가이드

3.4 cron 파일 소유자 및 권한 설정

■ 점검 분류 항목: 서비스 관리

■ 세부 점검 항목: cron 파일 소유자 및 권한 설정

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-39

 

(1) 취약점 개요

* Cron 시스템은 cron.allow 파일과 cron.deny 파일을 통하여 명령어 사용자를 제한할수 있으며 보안상 해당 파일에 대한 접근제한이 필요함. 만약 cron 접근제한 파일의 권한이 잘못되어 있을 경우 권한을 획득한 사용자가 악의적인 목적으로 임의의 계정을 등록하여 불법적인 예약 파일 실행으로 시스템 피해를 일으킬 수 있음.

* Cron 시스템: 특정 작업을 정해진 시간에 주기적이고 반복적으로 실행하기 위한 데몬과 그 설정들을 말함.

 

(2) 판단기준

양호: cron 접근제어 파일 소유자가 root이고, 권한이 640 이하인 경우

취약: cron 접근제어 파일 소유자가 root가 아니거나, 권한이 640 이하가 아닌 경우

 

(3) 조치방법

“cron.allow”, “cron.deny” 파일 소유자 및 권한 변경 (소유자 root, 권한 640 이하)

 

(4) 보안 설정 방법

■ 점검 방법

# ls -al /etc/cron.allow

# ls -al /etc/cron.deny

 

■ 설정 방법

1. “/etc/cron.allow” 및 “/etc/cron.deny” 파일의 소유자 및 권한 확인

# ls -l /etc/cron.allow

# ls -l /etc/cron.deny

2. “/etc/cron.allow” 및 “/etc/cron.deny” 파일의 소유자 및 권한 변경

 

# chown root /etc/cron.allow

# chmod 640 /etc/cron.allow

# chown root /etc/cron.deny

# chmod 640 /etc/cron.deny

 

(5) 조치시 영향

일반적인 경우 영향 없음

 

 

 

 

2. 취약점 진단 스크립트 제작

 

 

(스크립트 제작시 참고 사항)

# cd /root/scripts

# vi perm.list

/etc/cron.deny 640 rw-r-----

/etc/at.deny 640 rw-r-----

/etc/hosts.deny 640 rw-r-----

/etc/hosts.allow 640 rw-r-----


# find /etc/cron.deny

# find /etc/ -name cron.deny

# find /etc/cron.deny -type f -ls

# find /etc/cron.deny -type f -ls -perm -640 | grep -v 'rw-r-----' | sort

 

* '-640'은 640을 포함한 이상의 숫자. 즉 640 이상.

최소 640 퍼미션을 가진 이란 뜻.

퍼미션 체계에서 이상을 점검하는건 있지만

이하를 검색하는 명령어는 없기 때문에 아이디어가 필요하다.

 

이상을 점검하는것은 있으니

640을 찾아서 640을 빼버리고

640의 초과분을 찾아 초과되는 부분과 아닌 부분을 나눌 수 있겠다.

 

 

 

cat perm.list | while read FILE1 PERM1 PERM2

do

echo $FILE1

echo $PERM1

echo $PERM2

done

 

or

 

# ls -l /etc/cron.deny | awk '{print $1}' | grep '\-\-\-$'

 

 

 

(스크립트 제작)

■ U-39.sh

#!/bin/bash

 

. function.sh

TMP1=`SCRIPTNAME`.log

> $TMP1

 

BAR

CODE 'cron 파일 소유자 및 권한 설정'

cat << EOF >> $RESULT

[양호]: cron 접근제어 파일 소유자가 root이고, 권한이 640 이하인 경우

[취약]: cron 접근제어 파일 소유자가 root가 아니거나, 권한이 640 이하가 아닌 경우

EOF

BAR

 

TMP3=/tmp/tmp3

TMP2=`SCRIPTNAME`.list

> $TMP2

cat << EOF >> $TMP2

cron.allow root 640 rw-r-----

cron.deny root 640 rw-r-----

EOF

INFO $TMP1 파일 내용을 확인 합니다.

 

cat $TMP2 | while read FILE1 USER1 PERM1 PERM2

do

if [ -f /etc/$FILE1 ] ; then

INFO /etc/$FILE1 존재합니다.

find /etc -name $FILE1 -user $USER1 -perm -$PERM1 -ls | grep -v $PERM2 > $TMP3

if [ -s $TMP3 ] ; then

WARN $FILE1 소유자가 root 사용자가 아니거나 퍼미션이 640 이하가 아닙니다.

cat $TMP3 > $TMP1

else

OK $FILE1 소유자가 root 사용자이며, 퍼미션이 640 이하입니다.

fi

else

INFO /etc/$FILE1 존재하지 않습니다.

fi

done

 

cat $RESULT

echo ; echo

 

#!/bin/bash

. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1

BAR
CODE 'cron 파일 소유자 및 권한 설정'
cat << EOF >> $RESULT
[양호]: cron 접근제어 파일 소유자가 root이고, 권한이 640 이하인 경우
[취약]: cron 접근제어 파일 소유자가 root가 아니거나, 권한이 640 이하가 아닌 경우
EOF
BAR


# cat filepem.list
# /etc/cron.allow		root	640  rw-r-----
# /etc/cron.deny		root	640  rw-r-----


PEM_FILE=filepem.list #상대경로
TMP2=/tmp/tmp2
> $TMP2
TMP3=/tmp/tmp3
> $TMP3

cat $PEM_FILE | while read FILE1 OWNER1 PERM1 PERM2
do
	# echo "$FILE1 $OWNER1 $PERM1 $PERM2"
	FILENAME=$(basename $FILE1)
	if [ -f $FILE1 ] ; then
	FILE_ATTR=$(ls -l $FILE1 | awk '{print $1, $3, $4}')
	find /etc -name $FILENAME -type f -user $OWNER1 -perm -$PERM1 \
             -ls | grep -v $PERM2 > $TMP2
		if [ -s $TMP2 ] ; then
			echo "[ WARN ] $FILE1 ($FILE_ATTR)" >> $TMP3
		else
			echo "[  OK  ] $FILE1 ($FILE_ATTR)" >> $TMP3
		fi
	else
		echo "[  OK  ] $FILE1 존재하지 않습니다." >> $TMP3
	fi
done



cat << EOF >> $TMP1
=======================================================================
/etc/cron.allow 파일이 존재하면서, root 사용자 소유이고, 권한이 640 이하인지 점검한다.
/etc/cron.deny 파일이 존재하면서, root 사용자 소유이고, 권한이 640 이하인지 점검한다.
ex) find /etc/ -name /etc/cron.deny -user root -perm -640 -ls | grep -v 'rw-r-----'
=======================================================================
EOF

cat $TMP3 >> $TMP1


if grep -w -q 'WARN' $TMP3 ; then
	WARN 'cron 접근제어 파일 소유자가 root가 아니거나, 권한이 640 이하가 아닌 경우'
else
	OK 'cron 접근제어 파일 소유자가 root이고, 권한이 640 이하인 경우 입니다'
fi
INFO '자세한 정보는 $TMP1 파일을 참고해 주세요.'


# 오류나는 부분에  ; read 추가해 bash -x 디버깅 모드로 돌려 검사
cat $RESULT
echo ; echo

 

 

 


 

 

[ Dos 공격에 취약한 서비스 비활성화]

 

 

 

1. 취약점 분석/평가 방법 상세 가이드

3.5 DoS 공격에 취약한 서비스 비활성화

 

■ 점검 분류 항목: 서비스 관리

■ 세부 점검 항목: DoS 공격에 취약한 서비스 비활성화

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-40

 

(1) 취약점 개요

* Dos(서비스 거부 공격)에 취약한 echo, discard, daytime, chargen 서비스는 취약점이 많이 발표된 불필요한 서비스들로 해당 서비스 사용을 중지하여야 함. 만약 해당 서비스가 활성화되어 있는 경우 시스템 정보 유출 및 Dos(서비스 거부 공격)의 대상이 될 수 있음.

 

* Dos(Denial of Service attack): 시스템을 악의적으로 공격해 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격임. 특정 서버에게 수많은 접속 시도를 만들

어 다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP 연결을 바닥내는 등의 공격이 이 범위에 포함됨.

 

(2) 판단기준

양호: Dos 공격에 취약한 echo, discard, daytime, chargen 서비스가 비활성화 된 경우

취약: Dos 공격에 취약한 echo, discard, daytime, chargen 서비스 활성화 된 경우

 

(3) 조치방법

echo, discard, daytime, chargen 서비스 비활성화 설정

 

(4) 보안 설정 방법

■ 점검 방법

# ls -alL /etc/xinetd.d/*

# ls -alL /etc/xinetd.d/ | egrep '(echo|discard|daytime|chargen)'

 

■ 설정 방법

1. vi 편집기를 이용하여 “/etc/xinetd.d/” 디렉터리 내 echo, discard, daytime, chargen 파일을 연 후

2. 아래와 같이 설정 (Disable = yes 설정)

* /etc/xinetd.d/echo 파일

* /etc/xinetd.d/discard 파일

* /etc/xinetd.d/daytime 파일

* /etc/xinetd.d/chargen 파일

3. xietd 서비스 재시작

# service xinetd restart

 

(5) 조치시 영향

일반적으로 사용하지 않는 서비스들임, 따라서 영향 없음.



 

(고객에게 설명)

Dos (서비스 거부 공격) 공격에 취약한 echo, discard, daytime ,chargen은

취약점이 많이 때문에 서비스를 비활성화 하는 것이 좋음

echo, discard, daytime, chargen은 DoS(서비스 거부 공격)에 악용될 수 있다.

 

 

 

2. 취약점 진단 스크립트 제작

 

(스크립트 제작시 참고사항)

■ 운영체제 종류 확인

OS=`uname -s`

case $OS in

Linux) CMD='chkconfig'

*) CMD='....'

esac

 

■ 운영체제 버전 확인

VER=`uname -r | awk -F- '{print $1}`

case $VER in

2.6.18) CMD='chkconfig'

*) CMD='....'

esac

 

■ 운영체제 종류별 파일 접근 방법

RedHat 계열) /etc/redhat-release

Debian 계열) /etc/lsb-release

Unix 계열 ) /etc/release (Oracle Solaris)

 

OS_TYPE=`ls /etc/*release | sed -n '1p'`

case $OS_TYPE in

/etc/redhat-release) echo "RedHat" ;;

/etc/lsb-relase) echo "Debian" ;;

/etc/release) echo "Unix - Solaris" ;;

*) echo "Unknown OS"

exit 1;;

esac

 

 

■ 서비스 점검 방법

# chkconfig --list | sed -n '/xinetd based/,$p'

 

# chkconfig <서비스> off (# vi /etc/xinetd.d/<서비스> => disable = yes)

# service xinetd restart

 

# cat check_service_list.txt

-----------------------------

echo-dgram

echo-stream

discard-dgram

discard-stream

......

-----------------------------

 

# cat check_dos_service.sh

----------------------------

cat check_service_list.txt | while read SERVICE1

do

chkconfig --list $SERVICE1 > /tmp/.tmp1

if grep -w on /tmp/.tmp1 >/dev/null 2>&1 ; then

echo "[ WARN ] : $SERVICE1" >> report.txt

else

echo "[ OK ] : $SERVICE1" >> report.txt

fi

done

.....

----------------------------

 

(출력결과)

----------------------------

[ OK ] : echo-dgram

[ OK ] : echo-stream

[ OK ] : discard-dgram

[ OK ] : discard-stream

......

------------------------------

 

(스크립트 제작)

U-40.sh

 

728x90

+ Recent posts