Try Attack/Network Hacking[basic]

FTP서버 해킹

D4tai1 2018. 10. 28.

※ 주의사항 : 실제로 공격이 통할 수 있으니 실제로 사용하지 마십시오.

학습용이므로 악용하여 발생한 일에 대해 책임을 지지 않습니다.

 

1. FTP 서버의 패스워드 탈취

1) 환경

- kali linux 2018.1 운영체제의 공격자 클라이언트

- 공격자 클라이언트에 설치된 hydra 프로그램

- 공격자 클라이언트에 설치된 wireshark 프로그램

- 공격자 클라이언트에 설치된 metasploit 프로그램

- ubuntu 16.04 운영체제의 희생자[FTP서버] 클라이언트

- 희생자 클라이언트에 설치된 vsftpd 데몬

 

2) 내용설명

▶ 희생자 PC에 간단한 vsftpd 데몬을 설치 후 어떠한 방법으로 공격을 시도하여 비밀번호를 탈취하려고 한다.

 

3) 사전지식

 [1] hydra : WEB, FTP, SSH, Telnet 등의 서버에 무차별공격과 사전공격을 할 수 있는 툴이다.

 [2] MSF(Metasploit Framework) : 여러방면으로 300가지 이상의 공격을 시도할 수 있는 툴이다.

 [3] vsftpd : ftp서버를 구현한다.

 

4) 시연

 [1] FTP 서버 설치(희생자)

 ▶ [apt-get install vsftpd] 명령어로 비교적 간단한 vsftpd를 설치한다.

 ▶ 이미 설치했기 때문에 [dpkg -l | grep vsftpd] 명령어로 패키지 설치가 되었는지 확인한다.

 

 [2] 설정파일(희생자)

 ▶ write_enable 은 업로드 사용유무를 선택하는 옵션이다.

 ▶ xferlog_enable 은 로그저장 사용유무를 선택하는 옵션이다.

 ▶ chroot_local_user 는 최상위 디렉터리를 홈디렉터리로 선택하는 옵션이다.

 ▶ chroot_list_enable 은 특정한 사용자만 디렉터리 이동을 제한할지 선택하는 옵션이다.

 ▶ chroot_list_file 은 디렉터리 이동이 가능한 사용자 목록을 적어놓은 파일의 위치를 말한다.

 ▶ chroot_local_user과 chroot_list_enable 모두 yes일 경우

  [/etc/vsftpd.chroot_list] 파일에 있는 사용자를 제외하고 모두 디렉터리 이동이 되지 않는다.

 

 [3] 디렉터리 이동가능한 사용자(희생자)

 ▶ [sudo vi /etc/vsftpd.chroot_list] 명령어를 이용하여 root사용자를 추가한다.

 

 [4] 접근제한 리스트(희생자)

 ▶ [sudo vi /etc/ftpusers] 명령어를 이용하여 root사용자를 주석(#)처리 한다.

 ▶ 위 파일에 있는 사용자는 접근이 제한된다.

 

 [5] 폴더 및 파일 생성(희생자)

 ▶ 접속하여 다운로드 할 것을 만들기 위해 imsi디렉터리를 생성 후 내부에 test.txt 파일을 작성한다.

 

 [6] FTP서버의 IP주소 확인(희생자)

 ▶ [ifconfig] 명령어로 IP주소를 확인한다.

 

 [7] FTP서비스 시작(희생자)

 ▶ [sudo service vsftpd start] 명령어를 이용하여 vsftpd서버의 데몬을 동작하도록 한다.

 ▶ [service --status-all | grep vsftpd] 혹은 [service vsftpd status] 명령어를 이용하여 서비스가 동작 중인지 확인할 수 있다.

 

 [8] FTP서버 접속(공격자)

 ▶ [ftp 192.168.234.104] 명령어를 이용하여 접속한다.

 ▶ ftp 이후 open 명령어를 이용하여 접속하여도 무방하다.

 ▶ [cd ./imsi], [get test.txt] 명령어를 이용하여 파일을 다운로드 할 수 있다.

 

 [9] FTP서버 접속 로그확인(희생자)

 ▶ [sudo tail -F /var/log/vsftpd.log] 명령어를 이용하여 서버에 접속한 기록을 확인한다.

 ▶ tail명령어에 -F 옵션을 주면 실시간으로 추가되는 로그를 바로바로 확인할 수 있다.

 ▶ 192.168.234.103의 사용자가 접속을 시도하였고 특정파일을 다운로드한 것도 확인할 수 있다.

 [10] 무차별공격(공격자)

 ▶ [hydra -t 64 -w 1 -l root -V -f -x 4:6:a ftp://192.168.234.104] 명령어를 이용하여 무차별공격을 시도한다.

 ▶ -t는 쓰레드를 몇 개 생성하여 작업할지를 정한다. 최대 64이며 높을수록 속도가 빠르다.

 ▶ -w는 쓰레드를 실행하는 대기 시간을 설정한다. 대기하는 시간이므로 낮을수록 속도가 빠르다.

 ▶ -l은 사용자계정을 의미한다.

 ▶ -V는 무차별공격을 하는 사용자계정과 비밀번호 조합을 보여준다.

 ▶ -f는 성공하였다면 종료하는 것을 말한다.

 ▶ -x는 [최소자리수 : 최대자리수 : 형식]의 양식으로 형식에 1Aa를 적으면 숫자, 대문자, 소문자를 말한다.

 ▶ 위 그림은 4자리~6자리 사이의 비밀번호를 영어 소문자만 넣어서 10000번이상 시도하였다.

 ▶ 이 경우 시간이 굉장히 오래걸리고 8자리 이상의 비밀번호의 경우는 힘들기 때문에 사전공격을 해보려고 한다.

 

 [11] 로그확인(희생자)

 ▶ 공격자가 무차별공격을 할 경우 서버에 로그가 위와 같이남는 것을 확인할 수 있다.

 

 [12] 사전공격을 위한 준비(공격자)

 ▶ 비밀번호에 대입할 사전을 휴리스틱을 이용하여 생성한다.

 

 [13] 사전공격(공격자)

 ▶ [hydra -l root -V -f -P passwd.lst ftp://192.168.234.104] 명령어를 이용하여 사전공격을 시도한다.

 ▶ -P옵션은 패스워드파일의 위치를 지정한다.

 ▶ -f옵션을 부여했기에 사용자계정과 비밀번호가 일치하면 종료한다.

 

 [14] 로그확인(희생자)

 ▶ 접속을 시도한 기록을 확인할 수 있다.

 

 [15] 메타스플로잇 프레임워크(공격자)

 ▶ 메타스플로잇 프레임워크를 이용하여 비밀번호를 탈취해보려고 한다.

 ▶ [msfconsole]을 이용하여 접속한다.

 

 [16] ftp_login 검색 및 접속(공격자)

 ▶ [search ftp_login] 를 입력하여 FTP로그인 프레임워크를 찾는다.

 ▶ search로 찾은 결과를 확인하여 use와 함께 [use auxiliary/scanner/ftp/ftp_login] 입력한다.

 

 [17] ftp_login 옵션(공격자)

 ▶ [show options]를 입력하여 공격 시 사용할 옵션을 확인할 수 있다.

 

 [18] 공격준비(공격자)

 ▶ [set user_file id.lst]를 입력하여 사전공격에 사용할 사용자계정리스트를 추가한다.

 ▶ [set pass_file id.lst]를 입력하여 사전공격에 사용할 패스워드리스트를 추가한다.

 ▶ [set RHOSTS 192.168.234.104]를 입력하여 사전공격에 사용할 FTP서버의 주소를 추가한다.

 ▶ [set THREADS 10]을 입력하여 쓰레드를 추가한다.

 ▶ [set STOP_ON_SUCCESS true]를 입력하여 성공 후 정지하도록 설정한다.

 ▶ [run]을 입력하여 공격을 실행한다.

 ▶ 위와 같이 패스워드를 찾은 후 공격을 멈춘 것을 확인할 수 있다.

 ▶ 그러나 사전에 100개를 입력해서 공격할 경우에 패스워드가 일치함에도 불구하고 정상적으로 찾아지지 않는다.

 ▶ 이유를 알기위해 아래서 패킷을 캡쳐해서 확인해보았다.

 

 [19] 와이어샤크를 이용한 패킷캡처(공격자)

 ▶ 통신한 패킷을 정적으로 캡쳐하기 위해 [Statistics-Conversations]를 선택한다.

 

 [20] 필터링(공격자)

 ▶ 출발지 IP와 목적지IP 포트번호21번을 확인하고 우클릭한다

 ▶ [Apply as Filter-Selected-A<->B]를 클릭하여 출발지와 목적지 간 필터목록을 작성한다.

 

 [21] hydra 사용결과(공격자)

 ▶ hydra를 사용한 경우 로그인 시도 후 RST로 세션을 끊는 것으로 보인다.

 

 [22] ftp_login 사용결과(공격자)

 ▶ ftp_login을 사용한 경우 TCP연결을 종료하지 않고 TCP연결을 반복한다.

 ▶ 그래서 최대 접속횟수에 제한이 걸려 사전이 길어질 경우 정상적으로 찾아지지 않았다.

 

 [23] ftp_login 성공(공격자)

 

 ▶ 성공한 경우 위와 같이 캡쳐된다.

 

 

5) TCP-3Way Handshake(추가지식)

 ▶ Transmisstion Control Protocol의 특징 중 하나는 신뢰성이다.

 ▶ 서버와 클라이언트가 서로의 상태를 확인한다.

 ▶ 신뢰성이다. 연결지향적이다. 등의 특징은 기본적으로 알고 있을 것이라 생각하기에 과정을 적으려고 한다.

 ▶ 이 부분은 네트워크적인 개념이지만 개발, 점검, 분석 등 여러방면에서 중요하게 다뤄지는 부분이다.

 

 [1] 연결요청(클라이언트->서버)

 

  ▶ 송신자는 수신자에게 연결요청을 시도하여 서버의 상태를 확인한다.

  ▶ 송신자는 연결요청(SYN) 패킷을 보낼 때 Sequence Number에 랜덤한 숫자를 넣어서 전송한다.

  ▶ SYN패킷 전송 후 클라이언트의 상태는 SYN-SENT 상태가 된다.

  ▶ SYN-SENT상태는 TCP연결상태 중 하나이며 클라이언트가 연결요청(SYN) 패킷을 보낸 상태(ACK를 기다리는 상태)를 의미한다.

 

 [2] SYN패킷 수신정보 전송(서버->클라이언트)

 

  ▶ 수신자의 상태가 Closed일 경우 포트가 닫혀서 수신할 수 없다.

  ▶ 수신자의 상태가 Listen일 경우 SYN패킷을 받은 수신자는 SYN+ACK패킷을 송신자에게 전송한다.

  ▶ Listen은 수동적으로 개방을 대기중인 상태를 의미한다.

  ▶ 이 때 SYN패킷의 Sequence Number는 서버가 랜덤한 숫자를 넣어서 전송하며, ACK패킷의 Sequence Number는

  송신자가 보낸 Sequence Number + 1이 된다.

  ▶ SYN+ACK패킷 전송 후 서버의 상태는 SYN-RECEIVED 상태가 된다.

  ▶ SYN-RECEIVED 상태는 연결요청(SYN)을 받고 수신자의 SYN+ACK패킷을 전송한 상태를 의미한다.

 

 [3] 연결성립(클라이언트->서버)

 

  ▶ 수신자에게 SYN+ACK 패킷을 받은 송신자는 ESTABLISHED 상태가 된다.

  ▶ ESTABLISHED 상태는 연결회선이 성립되어 데이터를 전송할 수 있는 상태를 의미한다.

  ▶ 수신자에게 ACK패킷을 전송한다.

  ▶ 이 때 ACK패킷의 Sequence Number는 수신자가 보낸 ACK패킷의 Sequence Number + 1이 된다.

  ▶ 송신자에게 ACK패킷을 받은 수신자도 ESTABLISHED 상태가 된다.

 

 [4] TCP Header Flags

  ▶ 아래 6개의 비트조합으로 SYN을 전송 시 SYN만 1비트로 설정 후 전송하며, SYN+ACK를 전송 시 SYN+ACK를 1비트로 설정하여 전송한다.

  ▶ 상세정보는 와이어샤크와 같은 스니핑 툴로 확인할 수 있다.

 

  ▶ SYN : 연결요청

  ▶ ACK : 받은 연결요청에 대한 준비완료 응답

  ▶ FIN : 정상적으로 연결종료

  ▶ RST : 강제로 연결종료

  ▶ PSH : 중간과정 없이 7계층으로 바로 전달

  ▶ URG : 긴급한 처리 요청, 먼저온 데이터보다 우선순위 높음 

'Try Attack > Network Hacking[basic]' 카테고리의 다른 글

iptables  (0) 2018.11.04
Nmap 포트스캔  (1) 2018.11.04
DNS Spoofing  (0) 2018.10.21
ARP Spoofing  (0) 2018.10.21

댓글