Hacking/infra 진단

[Linux] U-20 (상) Anonymous FTP 비활성화

알거음슴 2021. 9. 1. 09:56
취약점 개요
점검 내용 익명 FTP 접속 허용 여부 점검
점검 목적 실행중인 FTP 서비스에 익명 FTP 접속이 허용되고 있는지 확인하여 접속허용을 차단하는 것을 목적으로 함
보안 위협 Anonymous FTP(익명 FTP)를 사용 시 anonymous 계정으로 로그인 후 디렉터리에 쓰기 권한이 설정되어 있다면 악의적인 사용자가 local exploit을 사용하여 시스템에 대한 공격을 가능하게 함
참고 Anonymous FTP(익명 FTP): 파일 전송을 위해서는 원칙적으로 상대방 컴퓨터를 사용할 수 있는 계정이 필요하나 누구든지 계정 없이도 anonymous 또는 ftp라는 로그인 명과 임의의 비밀번호를 사용하여 FTP를 실행할 수 있음
점검대상 및 판단 기준
대상 LINUX
판단기준 양호 : Anonymous FTP (익명 ftp) 접속을 차단한 경우
취약 : Anonymous FTP (익명 ftp) 접속을 차단하지 않은 경우
조치 방법 Anonymous FTP를 사용하지 않는 경우 Anonymous FTP 접속 차단 설정 적용

 

점검 및 조치
점검 /etc/passwd 파일에 ftp 계정 존재 여부 확인
#cat /etc/passwd | grep "ftp"
“passwd" 파일 내 ftp 계정이 존재하는 경우 아래의 보안설정방법에 따라 서비스 접속
제한
조치 Case 1) 일반 FTP - Anonymous FTP 접속 제한 설정 방법
“/etc/passwd” 파일에서 ftp 또는, anonymous 계정 삭제
SOLARIS, LINUX, HP-UX 설정: #userdel ftp
AIX 설정: #rmuser ftp
Case 2) ProFTP - Anonymous FTP 접속 제한 설정 방법
conf/proftpd.conf 파일의 anonymous 관련 설정 중 User, Useralias 항목 주석처리 (proftpd.conf 파일의 위치는 운영체제 종류별로 상이함)
<Anonymous ~ftp> <- Anonymous 설정 구간
 # User ftp <- anonymous로 사용되는 계정
 Group ftp
 # UserAlias anonymous ftp <- 별칭으로 사용되는 계정
~~이하생략~~
</Anonymous>
Case 3) vsFTP - Anonymous FTP 접속 제한 설정 방법
vsFTP 설정파일(“/etc/vsftpd/vsftpd.conf” 또는, “/etc/vsftpd.conf”)에서
anonymous_enable=NO 설정

 

점검 스크립트

#!/bin/bash

. function.sh

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

VALUE=0
FILE=/etc/proftpd.conf
FILE2=/etc/vsftpd/vsftpd.conf

cat /etc/passwd | grep -i ^ftp >/dev/null 2>&1

if [ $? = 0 ] ; then
    WARN "일반 FTP - ftp 사용자를 제거하십시오."
    VALUE=1
fi

cat /etc/passwd | grep -i ^anonymous >/dev/null 2>&1

if [ $? = 0 ] ; then
    WARN "일반 FTP - anonymous 사용자를 제거하십시오."
    VALUE=1
fi

if [ $VALUE = 0 ] ; then
    OK "Anonymous FTP (익명 ftp) 접속을 차단한 경우 - 일반 FTP"
else
    VULN "Anonymous FTP (익명 ftp) 접속을 차단하지 않은 경우 - 일반 FTP"
fi

BAR
INFO "PROFTP - 수동 점검을 진행하십시오."
INFO $FILE2 "의 anonymous 관련 설정 중 User, Useralias 항목을 주석처리하십시오."
BAR

CHECK=$(cat $FILE2 | grep ^anonymous | awk -F= '{print $2}')
VALUE2=0

if [ $CHECK == 'YES' ] ; then
    VULN "VSFTP - "$FILE2 "의 anonymous_enable 값을 NO 로 설정하십시오."
    VALUE2=1
fi

if [ $VALUE2 = 0 ] ; then
    OK "Anonymous FTP (익명 ftp) 접속을 차단한 경우 -  VSFTP"
else
    VULN "Anonymous FTP (익명 ftp) 접속을 차단하지 않은 경우 -  VSFTP"
fi

cat $RESULT