본문 바로가기
Hacking/infra 진단

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

by 알거음슴 2021. 9. 1.
취약점 개요
점검 내용 익명 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