IT/정보보안기사

FTP(File Transfer Protocol)

Insight7777 2023. 3. 13. 23:10

FTP(File Transfer Protocol)

● FTP 프로그램 설치

- apt-get install vsftpd 명령으로 프로그램 설치

***참고) vsftpd?

Very Secure File Transfer Protocol Daemon의 약자

우분투, CentOS, 페도라 리눅스, NimbleX, 슬랙웨어, RHEL 등의 리눅스를 포함한 유닉스 계열 시스템용 FTP 프로그램이다. 보안을 강조한 FTP프로그램으로 리눅스 서버에 vsftpd를 설치하면 그 리눅스 서버는 FTP서버가 된다.

클라이언트가 FTP서버와 통신하기 위해서 대표적으로 사용하는 프로그램으로는 FileZilla, Winscp, ftp voyager 등이 있다.

 

- apt-get의 레포지터리 주소는 /etc/apt/sources.list에 존재

 

● FTP서비스 기동

- service vsftpd start 명령어 입력

 

vsftpd 정상실행 여부 확인

- netstat -antp 명령어 입력

 

FTP 포트정보 확인

- /etc/services 파일 안에 사용하는 포트정보가 있음.

- FTP 명령을 주고 받을 때는 21번 포트 사용.

- Active Mode일 때 데이터 송수신을 위해 20번 포트 사용.

- Passive Mode일 때는 1024~65535 범위의 랜덤 포트를 선택(서버가 결정)하여 사용.

/etc/services 파일 내용

 

클라이언트와 FTP서버 연결

-윈도우 명령프롬프트를  사용하여 FTP서버에 연결 및 디렉터리 구조 확인

-응답코드 220: TCP 연결 성공

-응답코드 230: 로그인 성공

-get 파일명 : 특정 파일을 다운로드

get 파일명 명령어를 통한 파일다운로드

 

 FTP로그파일

- vsftpd.log

  * 경로 : /var/log/vsftpd.log

  * 설명 : 로그인 성공여부와 다운로드 및 업로드 여부를 알 수 있음

- xferlog

  * 경로 : /var/log/xferlog

  * 설명 : xferlogFTP 로그파일로써 proftpd 혹은 vsftpd 데몬이 수행한 서비스를 기록하는 파일이다. (칼리Linux에서는 해당 파일 생성 안됨, CentOS에서 생성)

  * xferlog가 포함하고 있는 정보

xferlog파일 내 로그내용

    1. [Tue Mar 14 10:01:58 2023] : 전송 날짜와 시간

    2. [1] : 전송시간

    3. [::1] : 접속한IP (localhost(자기자신)으로 ftp를 접속한 경우 IP주소가 [::1]로 나옴)

    4. [0] : 파일사이즈 (0은 파일크기가 0인경우임)

    5. [/home/test_usr/abc.txt] : 전송파일명

    6. [b] : 전송파일유형

      - b : 바이너리(파일)

      - a : 아스키(문자, 텍스트)

    7. [ _ ] : 액션플래그(어떠한 동작을 수행했는지 나타냄)

      - _  : 아무일도 발생하지 않음

      - C : 파일이 압축된 경우

      - U : 파일이 압축되지 않은 경우

      - T : tar로 묶여져 있는 파일

    8. [o] : 전송방향

      - i : 파일을 업로드하여 서버로 들어오는 것(incoming)

      - o : 파일을 다운로드하여 서버에서 나가는 것(outgoing)

      - d : 파일을 삭제하는 것(delete)

    9. [r] : 액세스모드(사용자가 접근한 방식이나 형태)

      - r : 시스템의 사용자 계정(real)

      - a : 익명 유저(anonymous)

      - g : 비밀번호가 있는 게스트 계정(guest)

    10. [test_user] : 로그인 계정

    11. [ftp] : 서비스명(호출된 서비스를 나타내는 것으로, 일반적으로 ftp)

    12. [0] : 사용자의 인증방식

      - 0인 경우 없음, 1인 경우 RFC 931 authentication

    13. [*]인증사용자ID

      - 인증 메소드가 되돌려주는 사용자 ID. *은 인증된 사용자 ID를 사용할 수 없는 경우

    14. [c] : 완료상태

      - c : 전송성공(complete)

      - i : 전송실패(incomplete)

 

FTP 연결거부 계정 등록(ftpusers)

- /etc/ftpusers 파일에 연결을 거부할 리눅스 계정을 등록할 수 있다.

- root계정으로 FTP를 사용하면 안되기 때문에 root계정은 반드시 등록해둬야 한다.

/etc/ftpusers 파일 내 등록된 계정

 

 FTP설정(vsftpd.conf)

- /etc/vsftpd.conf 설정파일을 통해 FTP에 관련된 설정을 할 수 있다.

- FTP보안을 위해서 anonymous_enable 설정을 NO로 한다.

 

- FTP 연결 및 다운로드 정보에 대한 로그를 남기기 위해 xferlog_enable 설정을 YES로 한다.

 

 FTP종류

종류 내용
FTP ID/Password 인증 수행, TCP 프로토콜을 사용하여 데이터 송수신
tFTP 인증과정 없이 UDP 기반으로 데이터를 빠르게 송수신. 69번 포트 사용(만약 사용하려면 secure mode로 운영)
sFTP 전송 구간에 암호화를 통해 기밀성 제공

 

 FTP보안 취약점

-Bounce Attack

  * nmap -b <IP주소>

  * 익명 FTP 서버를 경유하여 호스트 스캔

  * 네트워크 포트스캐닝을 위해서 사용

  * FTP 바운스 공격을 통해서 전자메일을 보내는 공격을 Fake Mail이라고 함