본문 바로가기
  • AI (Artificial Intelligence)
Security/Snort

Snort를 이용한 Port Scanning & Reverse Shell 탐지

by 로샤스 2014. 3. 31.

시나리오

Snort를 이용한 Nmap Port Scanning 탐지

   

시나리오 사용 툴

  • Snort
  • Nmap
  • Hping2

   

시나리오 망 구성도

   

시나리오 개념

BackTrack(공격자)에서 WIN_XP를 Port Scanning을 통해 활성화 되 있는 포트를 찾아 취약점을 공략하려 한다. 이때 관리자는 Snort의 탐지 룰을 추가하여 자신 이외에 다른 사용자가 XP에 포트 스캐닝을 하는 것을 탐지하려고 한다. 이에 따라 룰을 추가하여 보자.

   

시나리오 순서 설명

  1. Hping을 이용해서 각 플래그옵션을 이용한 공격으로 발생되는 패킷 확인

       

  • SYN 패킷

       

    위를 살펴보면 공격자(172.168.10.10)에서 지속적으로 1004번 포트로 SYN Packet을 전송하는 것을 볼 수 있다.

   

  • ACK 패킷

       

       

    위를 살펴보면 공격자(172.168.10.10)에서 지속적으로 1004번 포트로 ACK Packet을 전송하는 것을 볼 수 있다.

이처럼 Hping2 툴을 이용하여 FIN, SYN, RST, PUSH, ACK, URG Flag등은 각각 Flag의 이름을 달고 패킷이 전송 되는 것을 볼 수 있었다. 이러한 사실을 이용하여 Nmap Port Scanning을 탐지 해보도록 하자.

   

  1. Nmap Port Scanning(-sS , -sF , NULL, XMAS)를 탐지

    가. -sS 탐지 = 먼저 SYN 패킷을 이용하는 옵션인 -sS를 탐지해보도록 하자.

  • 공격자에서 -sS를 이용한 포트 스캐닝 수행

       

    위처럼 먼저 SYN Packet을 보낸 후 ACK 패킷을 받아 서버 자체가 운용되고 있는지 판단을 한 후 SYN 패키을 각 서비스포트마다 보내어 활성화 되어있는 포트를 찾아낸다. 우리는 이 SYN 패킷을 탐지하는 Snort Rule을 구성해보도록 하자.

       

  • Snort Rule 형식

    alert tcp !192.168.10.10 any -> 192.168.10.20 any (msg:Nmap -sS Detect"; flags:S; threshold:type both, track by_src, count 20, seconds 10; sid:10000030;) 본인은 이처럼 룰을 지정해주었다. 간략하게 설명한다면 먼저 flag값을 S즉 SYN 패킷이 유발될때 탐지를 한다는 뜻이고 관리자가 아닌 PC가 WIN_XP에게 유발 할때 탐지하도록 했다. 이때 시간은 10초당 20번의 패킷이 유발되는 것으로 조정하여 매우 짧은 시간에 여러번의 비정상적인 패킷이 유발됨을 봄으로써 포트 스캐닝 임을 알 수 있도록 하였다.

       

  • 결과 확인

       

       

    위처럼 정상적으로 -sS의 옵션을 이용한 포트 스캐닝을 탐지하는 것을 볼 수 있다. Wireshark로 보도록 하자.

       

  • Wireshark로 패킷 덤프 분석

       

    위의 패킷을 살펴본다면 10번째 패킷을 잡은 것으로 해당 패킷을 보면 22번 포트 즉, SSH 서비스에 대한 활성화 여부를 알아보는 포트 스캐닝 패킷임을 알 수 있다.

       

    나. -sF 탐지 = FIN 패킷을 이용하는 옵션인 -sF를 탐지해보도록 하자.

  • 공격자에게서 -sF를 이용한 포트 스캐닝 수행

       

       

    위처럼 FIN 패킷을 이용하여 각 서비스의 활성화 여부를 스캐닝 하는 것을 확인 할 수 있다. 이것을 탐지하는 Rule을 적용해보도록 하자.

       

  • Snort Rule 형식

    alert tcp !192.168.10.10 any -> 192.168.10.20 any (msg:Nmap -sF Detect"; flags:F; threshold:type both, track by_src, count 20, seconds 10; sid:10000031;) 본인은 위처럼 룰을 정해주었다. -sS와 동일하되 flags 옵션만 F즉 FIN 패킷이 비정상적으로 과도하게 유발 될 때를 탐지하는 형식이다.

    정상적으로 탐지를 했는지 결과를 살펴보도록 하자.

       

  • 결과 확인

       

       

    위처럼 정상적으로 -sF옵션을 이용한 포트 스캐닝을 탐지하는 것을 확인 할 수 있다. Wireshark로 패킷을 보도록 하자.

       

  • Wireshark로 패킷 덤프 분석

       

       

    패킷을 살펴본다면 이번에는 FIN 패킷을 이용하여 111번 포트 서비스의 활성화 여부를 스캐닝 하는 것을 볼 수 있다.

       

    다. NULL 탐지 = NULL 패킷을 이용하는 옵션인 -NULL을 탐지해보도록 하자.

    NULL 옵션은 말 그대로 아무런 flags 옵션을 주지 않고 포트를 스캐닝 하는 옵션이다. 먼저 공격을 수행해보도록 하자.

  • 공격자에서 NULL 옵션을 이용한 포트 스캐닝 수행

       

       

    위처럼 none즉 flags에 아무런 옵션이 지정되지 않은 패킷이 전달 되는 것을 볼 수 있다. 이것이 바로 NULL 옵션을 이용한 포트 스캐닝이다. 이 스캐닝을 탐지할 수 있는 Rule을 정해보도록 하자.

       

  • Snort Rule 형식

    alert tcp !192.168.10.10 any -> 192.168.10.20 any (msg:Nmap Null Detect"; flags:!AFPSUR; threshold:type both, track by_src, count 20, seconds 10; sid:10000032;) 본인은 이처럼 입력을 하였다. 이전과 동일 하되 !AFPSU 즉 , 부정연산자인 '!'를 사용하여 각 패킷의 옵션이 할당 되지 않았을 경우 탐지하도록 하였다. 결과를 확인해보도록 하자.

       

  • 결과 확인

       

       

    위의 그림을 살펴보면 Flags: 0x00 즉 아무런 옵션도 지정되 않았음을 볼 수 있다. 즉 정상적으로 NULL 옵션을 이용한 포트 스캐닝을 탐지 하는 것을 볼 수 있다.

       

    라. XMAS 탐지 = URG, PUSH, FIN 패킷을 이용하는 옵션인 XMAS을 탐지해보도록 하자.

       

  • 공격자에서 XMAS 옵션을 이용한 포트 스캐닝 수행

       

       

    이처럼 XMAS는 FIN, PSH, URG가 전달 되는 것을 볼 수 있다. 우리는 이 옵션을 이용한 XMAS 포트 스캐닝을 탐지 해보도록 하자.

       

  • Snort Rule 형식

    alert tcp !192.168.10.10 any -> 192.168.10.20 any (msg:Nmap XMAS Detect"; flags:UPF; threshold:type both, track by_src, count 20, seconds 10; sid:10000033;) 본인은 이처럼 입력을 하였다. 이전과 동일하되 Flag를 UPF로 지정하여 URG,PSH,FIN 옵션이 짧은 시간에 다량으로 유발될 때 탐지하도록 하였다. 결과를 확인 해보도록 하자.

       

  • 결과 확인

       

       

    위처럼 XMAS를 이용한 포트 스캐닝을 정상적으로 탐지 하는 것을 볼 수 있었다. Wireshark로 확인 해보도록 하자.

       

  • Wireshark로 패킷 덤프 분석

       

       

    위처럼 Flags가 FIN, PSH, URG가 셋팅 되어서 올 경우를 정상적으로 탐지 한 것을 볼 수 있다.

       

   

======================================================================================

시나리오

Snort를 이용한 Reverse Shell 탐지

   

시나리오 사용 툴

  • Wireshark
  • netcat

   

시나리오 망 구성도

   

   

시나리오 개념

  • 공격자인 BackTrack인 Netcat을 어떤 방법으로든 XP에게 심어 놓은 후 특정 Port를 열고 XP가 세션 요청을 하길 기다리고 있다. 이 경우 XP의 Shell 권한을 따기 위해 공격자는 백도어 등을 이용 Netcat를 실행 시킨다. 관리자는 이 경우를 탐지하기 위한 Rule을 Snort에 추가해보도록 하자.

       

시나리오 순서 설명

  1. 공격자는 Netcat을 실행하여 특정 포트를 열고 대기를 하도록 한다.

       

       

  2. 공격자는 피해자에게 Netcat을 실행 시킬 수 있는 악성코드나 백도어 등을 심어 놓은 후 피해자가 세션을 요청하도록 한다. 이때 발생하는 패킷을 확인 한 후 Snort Rule을 지정해주도록 하자.

       

       

    위처럼 공격자가 어떤 경로를 이용해서든 피해자에게서 세션 요청을 하도록 하고 그 결과 값으로 자신의 CMD 창을 보내도록 하는 것을 볼 수 있다. 패킷을 확인해보도록 하자.

       

       

       

    위를 살펴보도록 하자. 먼저 내부에서 외부로 SYN을 보내는 것을 확인 할 수 있다. 사실 이 경우 매우 많은 경우 중에 하나이다. 인터넷 접속등 모든 Network 환경을 사용할 경우 일어날 수 있는 패킷이며 이 패킷을 Rule로 지정하면 안될 것이다. 그래서 본인은 문자열을 탐지하도록 해보았다. HTTP 프로토콜로 전성된 부분을 살펴보면 PSH, ACK의 Flags 옵션을 사용하며 내부에서 외부로 Microsoft windows XP 와 버전을 보내는 것을 볼 수 있다. 이 경우 내부에서 외부로 이러한 메시지를 보내는 경우는 거의 없다고 봐야 된다. 외부에서 Telnet의 서비스를 사용할때나 나올법한 메시지이고 관리자는 해당 XP에 Telnet 서비스를 수행한 적이 없기 때문에 나올 수가 없는 문자열이 되는 것이다. 이것을 이용하여 Rule을 지정해보도록 하자.

       

  • Snort Rule 형식

    alert tcp 192.168.10.0/24 any -> !192.168.10.0/24 any (msg:Reverse Shell Detect"; flag s:PA; content:"Microsoft"; nocase; sid:10000034;) 본인은 이처럼 입력을 하였다. 피해자인 XP와 같은 네트워크 대역대에서 같은 대역대가 아닌 어떠한 Host로든 PUSH, ACK를 셋팅한 flags 옵션과 Microsoft라는 문자열을 포함해서 보내는 패킷을 탐지하도록 한 것이다. 결과를 확인해보도록 하자.

       

  • 결과 확인

       

       

    위처럼 정상적으로 Reverse Shell 공격을 탐지 한 것을 볼 수 있다. Wireshark로 패킷을 분석해보도록 하자.

       

  • Wireshark로 패킷 덤프 분석

       

    위의 그림을 살펴본다면 피해자가 공격자인 172.168.10.10으로 Microsoft가 담긴 문자열과 PSH, ACK가 셋팅된 flags 옵션을 포함해서 패킷을 전송하는 것을 볼 수 있으며 이 것으로 우리는 Reverse Shell을 탐지 할 수 있다.

       

 

 

 

 

 

출처 : http://god2zuzu.blog.me/70168951403
         (해당 사이트로 가서 그림을 꼭 참조 할 것)

 

 

 

 

댓글