[목차]
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
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day100: 로그보안/시간포멧변경/로그기록삭제 (0) | 2021.01.29 |
---|---|
정보보안 과정 Day99 : 로그 보안 시작 (냉무) (0) | 2021.01.28 |
정보보안 과정 DAY97-2: (주통) U-16, 17, 24 파일 및 디렉토리 관리 시작 (0) | 2021.01.25 |
정보보안 과정 DAY97-1 : 관리자의 잘못된 PATH 변수 설정 (0) | 2021.01.25 |
정보보안 과정 DAY97: (주통) 계정관리 U-13~15 스크립트 제작 / 계정관리 종료 (0) | 2021.01.25 |