본문 바로가기

Study records/Linux server hacking

FTP 해킹 분석

https://cloudzy.com/blog/ftp-active-vs-passive-which-one-is-right-to-your-needs/

FTP의 전송 방식으로는 크게 액티브 모드(Active Mode)와 패시브 모드(Passive Mode)가 있다. 액티브 모드는 접속을 위해 연결할 때 클라이언트에서 서버로 접근하지만, 데이터 전송을 위해 연결할 때는 서버에서 클라이언트로 접근한다. 클라이언트에 방화벽이 있거나 NAT(주소 변환)를 사용하는 경우에는 FTP 연결이 어렵다는 단점이 있다. 그러나 패시브 모드는 FTP 접속용 연결과 데이터 전송용 연결 모두 클라이언트에서 서버로 접속하기 때문에 서버 네트워크 설정이 제대로 되어 있다면 원활하게 접속할 수 있다.

 

암호화되지 않은 FTP 통신 정보 노출

FPT는 기본적으로 암호화 통신을 하지 않기 때문에 공격자가 ARP 스푸핑 공격이나 네트워크 스니핑이 가능한 상태라면 네트워크에서 통신하는 내용이 모두 공격자에게 노출될 수 있다. 일반 FTP 서비스를 사용할 때 네트워크 트래픽 분석 도구 Wireshark로 네트워크 트래픽을 모니터링하면 FTP 계정의 정보를 확인할 수 있다. 이때 공격자는 FTP로 주고받는 파일들을 중간에서 가로챌 수도 있다.

 

 

무차별 대입 공격

FTP 서버를 운영할 때 가장 많이 발생하는 공격이 무차별 대입 공격이다. 공격자가 네트워크를 스캔해 21번 FTP 통신 포트가 열려 있는 상태를 확인하고, 서버의 사용자 계정을 알고 있는 상황이라면 Hydra를 이용해 서버에 무차별 대입 공격을 할 수 있다.

 

 

로그인 사용자의 디렉터리 탐색

별도로 설정하지 않는 상태로 로그인한 사용자는 자기 작업 디렉터리 이외에 시스템이나 다른 계정의 파일 정보를 확인할 수 있다. 이때 파일 권한 설정이 잘못되어 있다면 다른 사용자 계정의 파일도 다운로드할 수 있고 시스템 파일에도 접근할 수 있다. 이처럼 서버 정보나 사용자 파일들이 유출될 수 있는 문제점이다.

FileZilla와 같이 일반 FTP 클라이언트 프로그램에서도 자신의 계정 폴더 이외에 상위 폴더에 접근하거나 다른 사용자의 계정에 접근하여 원하는 파일을 다운로드할 수 있다.

 

 

FTP 로그 분석

vsftpd의 로그는 /var/log/vsftpd.log 파일에 접속 기록이 남으며, FTP 무차별 대입 공격이 있는 경우는 짧은 시간 내에 로그인 실패 로그가 쌓이게 된다. 이를 이용하면 FTP 서버에 접속하고자 하는 IP를 찾아내고 방어벽 또는 서버 방화벽으로 공격 IP의 접근을 차단할 수 있다.

 

 

FTP 보안 환경 설정

<ftp의 환경 설정 항목>

환경 설정 항목 설명 기본값  추천 값
anonymous_enable FTP 익명 사용자 허용 여부 NO NO
local_enable 로컬 사용자 로그인 허용 여부 YES YES
xferlog_enable FTP 업로드/다운로드 로그 기록 여부 YES YES
xferlog_file FTP 로그 저장 위치 /var/log/xferlog.log 기본값
chroot_local_user 사용자 홈 디렉토리 격리(chroot jail) 로컬 사용자 사용 여부 NO YES
chroot_list_enable 격리할 사용자 정보 제공 여부 NO YES
chroot_list_file chroot 사용자 저장 파일 위치 /etc/vsftpd.chroot_list 기본값
userlist_enable FTP 사용자 록읜 제한 기능 사용 여부 YES YES
userlist_deny FTP 사용자 로그인 제한 범위 설정
YES : list에 쓰여진 사용자 로그인 금지(blacklist)
NO : list에 기록된 사용자만 로그인 허용(whitelist)
YES NO
pasv_min_port 패시브 모드 데이터 통신 포트 1024번 이상 임의 포트
pasv_max_port 패시브 모드 데이터 통신 포트 1024번 이상 임의 포트

 

 

103번째 줄 # 주석을 삭제하고 메시지 입력

vi /etc/vsftpd.conf

 

114번째 줄 # 주석을 삭제해 부모 경로를 탐색하지 못하게 금지시키고 메시지 입력

 

패시브 모드의 통신 포트 50000~53000번만 사용

vi /etc/vsftpd.conf 가장 아래에 다음과 같이 입력

 

모든 사용자에게 FTP 서비스를 제공하기보다는 파일 전송을 위한 전용 FTP 계정을 제공해야 최소의 권한을 부여하는 보안의 원칙을 준수하는 것이 좋다. 이를 위해 userlist 설정을 추가한다. 

userlist_enable=YES로 설정하면 로그인 사용자 제한 설정을 사용하는 것이고, userlist_deny=NO로 설정하면 userlist_file 내에 지정된 사용자를 제외한 나머지 사용자는 FTP 로그인을 금지하는 것이다(화이트리스트 방식: userlist_file에 적힌 사용자만 로그인 허용).

 

vsftpd.user_list 파일을 생성하고, 사용자를 추가한다. 

FTP 접속

 

 

 

FTPS(FTP Secure)설정

FTP 프로토콜은 암호화되지 않은 평문을 전송하기 때문에 중간자 공격 등에 취약하다. 이를 보안하기 위해 SSL/TLS 암호화가 적용된 FTP 서비스인 FTPS 프로토콜을 설정하여 보안을 강화할 수 있다. SSL/TLS 암호화를 적용하려면 암호화 키를 생성한 뒤 vsftpd 환경 설정 파일을 수정해야 한다.

 

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd.pem -out /etc/vsftpd.pem

RSA 키 생성

 

해당 인증서와 개인 키 정보를 입력해 설정을 추가한다.

vi /etc/vsftpd.conf

 

기본 FTP 접속은 암호화가 되지 않은 통신이기 때문에 일단 평문 FTP 프로토콜로는 접속할 수 없다. 리눅스에서 기본 제공하는 FTP 클라이언트 FTPS 프로토콜을 지원하지 않기 때문에 FTPS 접속을 하려면 FTPS 프로토콜을 지원하는 LFTP 혹은 Filezilla 등의 프로그램을 활용해야 한다.