-->

[네트워크] 스노트(snort) threshold를 사용한 nmap 포트스캐닝 탐지

반응형

nmap은 대표적인 포트스캐닝 도구로 공격자가 정보수집을 할 때 주로 nmap을 이용해 target pc에 대한 포트스캔을 수행한다. nmap을 사용하면 열린 포트를 찾거나 OS, 네트워크 장치의 버전과 같은 정보를 혹인할 수 있다.

 

저번 포스팅에서 snort를 우분투에 구축해보았기 때문에, 이번 포스팅에서는 실제 snort를 사용해보기 위해 공격자가 nmap 포트스캐닝 하는 상황(SYN 스캐닝)을 탐지해보려 한다.

 

 

실습 환경설명 및 파일 위치

포트스캐닝 수행 PC는 칼리리눅스이고 해당 PC에서 우분투 16.04로 포트스캐닝을 수행할 예정이다. 두 PC 모두 가상머신이기 때문에 192.168.21 대역이다.

 

- 포트스캐닝 수행 PC: Kali Linux 2018.1, 192.168.21.135

- 포트스캐닝 탐지 PC(snort): Ubuntu 16.04, 162.168.21.130

 

 

먼저, snort의 정책(룰), 설정, alert log 파일 위치는 아래와 같다.

 

- 정책(룰) 파일: /etc/snort/rules/local.rules 

- alert 로그 파일: /var/log/snort/alert

 

 

snort threshold 옵션

snort 옵션에는 정말 다양한 옵션들이 있지만 오늘은 포트스캐닝 탐지와 관련된 옵션인 threshold 옵션에 대해 알아본다. threshold 옵션은 패킷 발생량을 검사하는 역할을 하며 사용방법은 아래와 같다.

 

track by_[dst/src]에서 src는 특정 출발지에서 정해진 패킷량이 들어오는 경우를 탐지하는 것이고 dst는 특정 목적지로 정해진 패킷량이 들어오는 경우를 탐지한다. count와 seconds는 얼마 동안의 시간안에(secondes) 몇개의 패킷이 들어오는지(count)에 대한 기준점을 설정하는 것이다.

 


# snort threshold 옵션 사용방법
type threshold: [threshold/limit/both], track by_[dst/src], count [num], seconds [sec]

 

 

nmap SYN 스캔

일단, nmap에서 SYN 스캔은 아래와 같이 수행한다.


nmap -sS [Options] {Target Specification}

 

nmap SYN 포트스캐닝

 

 

SYN 스캔 탐지를 위한 snort 룰 추가

그럼, SYN 스캔 탐지를 위한 snort 룰을 local.rules 파일에 추가해보자.

 

snort 룰 파일 위치 확인

 

 

■ snort 헤더 부분

'TCP 프로토콜에 대해 192.168.1.130'의 모든 포트웨서 192.168.21.165 모든 포트로 들어오는 패킷에 대해 alert를 해라' 라고 할 수 있다. 여기서는 포트스캐닝을 수행하는 PC가 정해져있기 떄문에 IP를 정확히 지정해주었지만, 실제로 어디서 수행할지 모르는 포트스캐닝을 범용적으로 탐지해야하는 경우는 '!192.168.21.130' (혹은 any)으로 Source IP를 작성할 수 있다.

 

■ snort 옵션 부분

위에서 설명한 threshold 옵션을 사용한 것을 알 수 있고, 'SYN 플래그에 대해 동일한 Source IP에서 10초(seconds) 동안 총 5번(count)의 패킷이 오는 상황' 이라고 할 수 있다. 굳이 threshold 옵션을 사용하는 이유는, 단순히 TCP 프로토콜의 SYN 플래그에 대해 탐지를 하게끔 해놓으면 거의 대부분의 연결에 대해 alert가 발생할 것이기 때문이다. 

 

(참고로 아래 룰은 보기 편하게 하기 위해서 개행을 넣었는데 룰 파일에는 당연히 한줄에 써주어야 한다)

alert tcp !192.168.21.135 any 
-> 192.168.21.130 any 
(msg:"SYN Scanning Detection"; 
flags:S; 
threshold:type both,
track by_src,
count 5,
seconds 10;
sid:1000051;)

 

위 룰을 아래와 같이 '/etc/snort/rules/local.rules'에 추가한다.  

 

snort 룰 추가 확인

 

 

snort 실행 및 로그파일 확인

정책을 추가했으니 이제 snort를 해당 룰 파일에 대한 탐지모드로 실행시켜야 한다. 다양한 옵션이 있지만 -v와 -c를 주었다. 정상적으로 실행이 되면, 아래와 같이 'Running in IDS mode'라는 문구를 볼 수 있다.

 

snort, 탐지 모드 실행 (Running in IDS mode)

 

 

이 상태에서 위에서 했던 nmap SYN 포트스캐닝을 다시해주면, 아래와 같이 snort의 alert 로그 파일에서 SYN 포트스캐닝 탐지 결과 로그를 확인할 수 있다.

 

snort SYN 포트스캐닝 탐지 로그 확인 (alert)

 

 

 

포트스캐닝은, flags만 변경되지 snort로 탐지하는 룰 생성 방법은 거의 비슷한 것 같다.

 

다음 snort 관련 포스팅에서는, 이번 포스팅에서 threshold 옵션을 사용해보았던 것과 마찬가지로 pcre 옵션, content 옵션 등 다양한 옵션을 사용하는 방법을 소개하려 한다.

 


관련포스팅

[네트워크] 스노트(snort) content를 사용한 XSS 공격 탐지

 

[네트워크] 스노트(snort) content를 사용한 XSS 공격 탐지

실습환경 설명 웹서버로 사용하기 위해 Ubuntu 16.04에 apache2, MySQL, PHP를 설치했고 XSS를 테스트할 목적으로 간단하게 'xss_test.php'와 'xss_test_server.php'를 넣어놓았다. xss_test.php는 클라이언트가..

liveyourit.tistory.com

[네트워크] 스노트(snort) TCP SYN Flooding(DDoS) 공격 탐지

 

[네트워크] 스노트(snort) TCP SYN Flooding(DDoS) 공격 탐지

저번 포스팅에서 포트스캐닝을 탐지해보았는데 이번엔 DDoS 공격 유형 중 하나로 TCP SYN Flooding을 선택해 snort 룰을 생성하여 탐지해본다. TCP SYN Flooding (DDoS) 공격이란 TCP SYN Flodding은 DDoS 공격 중..

liveyourit.tistory.com

[네트워크] 스노트(snort) 우분투(ubuntu) 설치 방법

 

[네트워크] 스노트(snort) 우분투(ubuntu) 설치 방법

지난 포스팅에서 무료로 사용할 수 있는 오픈소스 IDS/IPS/방화벽/웹방화벽 을 살펴보았다. 이번 포스팅에서는 그 중 첫번째인 snort를 우분투 16.04에 직접 구축, 사용해보려 한다. 관련포스팅 [네트워크] 오픈소..

liveyourit.tistory.com

[네트워크] 오픈소스 무료 IDS/IPS/방화벽/웹방화벽 추천

 

[네트워크] 오픈소스 무료 IDS/IPS/방화벽/웹방화벽 추천

IDS/IPS/방화벽/웹방화벽 중에서는 IDS로 분류되는 snort와 IPS로 분류되는 iptables를 써봤던 게 다이다. 보안 솔루션에 좀 더 친숙해지기 위해 오픈소스 무료 IDS/IPS/방화벽/웹방화벽 방화벽 중, 많이 알려져..

liveyourit.tistory.com

 

댓글

Designed by JB FACTORY