본문 바로가기

해킹-보안

리눅스 snort 설치 및 악성 트래픽 탐지 룰 학습

반응형

ி 설치

 

snort를 위한 라이브러리 설치

 

apt-get install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev
apt-get install -y libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev
apt-get install -y bison flex libdnet autoconf libtool


snort 설치

 

wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz

tar -xvzf daq-2.0.7.tar.gz
cd daq-2.0.7
autoreconf -f -i
./configure && make && make install

wget https://www.snort.org/downloads/snort/snort-2.9.16.tar.gz

tar -xvzf snort-2.9.16.tar.gz
cd snort-2.9.16
./configure --enable-sourcefire && make && make install
ldconfig



snort 작동 확인

 

스니핑 모드 동작 확인

snort –v

snort 테스트 룰 생성

snort-2.9.16/rules/local.rules
위 파일을 생성한 후 아래 내용을 입력한다.
alert TCP any any -> any any (msg:test"; sid:0001;)

mkdir /var/log/snort
snort log 파일 저장을 위한 디렉토리를 생성한다.

snort -q -A console -c /root/snort-2.9.16/local.rules
만든 snort 룰을 콘솔에 띄워서 패킷 수신을 대기한다.
[snort 패킷 잡힌 사진]



ி 정보 수집 탐지

 

공격자가 nmap과 같은 프로그램으로 서버의 포트 정보를 수집하는 행위를
탐지하도록 룰을 만들어본다.

공격자(kali)

: 192.168.111.132

서버

: 192.168.111.134

nmap으로 포트 정보를 수집할 때 상대에게 한 번에 많은 패킷이 전달된다.
이때 패킷이 단시간 내에 많이 유입된 것을 판단하는

임계치

설정 법을 이용한다.


➽ 임계치(threshold) 설정 옵션
type

limit : 매 m초 동안 s번째 이벤트까지 action 수행
threshold : 매 m초 동안 s번째 이벤트마다 action 수행
both : 매 m초 동안 s번째 이벤트 시 한번 action 수행

track

by_src : 발신자 ip 기준으로 추적한다.(1:N)
by_dst : 수신자 ip 기준으로 추적한다.(N:1)
count/seconds : 횟수/시간

tcp half open scan

 

목적지 기준으로 SYN 패킷이 초당 100개 이상 발생 시 경고한다. 

alert tcp any any -> 192.168.111.134 any (msg:"syn scan"; flags:S;
threshold:type both, track by_dst, count 100, seconds 1; sid:0001;)

x-mas scan은 flags:UPF, Nullscan은 flags:!UAPRSF;로 설정한다.

type both인 경우 flags가 syn인 패킷에 대하여 1초동안 패킷이 100개 이상이 발생하면 

한 번 로그를 발생시킨다.

type threshold는 1초당 100개 이상의 패킷이 들어오면 여러 번 로그가 발생될 수도 있다. 

1초에 1000개가 들어왔다면 both는 한 번 이벤트를 발생하지만 threshold는 10번 발생시킨다.


type limit는 flags가 syn인 패킷을 1초에 최대 100개까지만 출력하겠다는 의미다.

즉 여기서 count는 패킷 개수를 나타내는게 아닌 로그 최대 출력 개수를 나타낸다. 

[syn_scan 탐지 결과]위 룰은 사용자가 많은 시스템이라면 짧은 시간에 많은 SYN이 유입되어  정상적인 접속도 탐지되는 문제가 있다.
따라서 정상/비정상 패킷을 구분하려면 snort -v를 통한 스니핑 모드나
와이어샤크로 악성 패킷의 특징을 추출하여 추가로 패턴화 시켜야할 것이다.

예를들어 syn을 이용한 포트 스캔을 탐지하고 싶을 때 
실제 syn 포트 스캔을 캡쳐한 패킷과 정상적인 접속 syn 패킷을 비교하여
비정상적인 부분을 검출하는 방법 정도를 생각해 볼 수 있다.


UDP port scan

 

UDP port scan의 특징은 닫힌 포트에 대해서 Destination unreachable(code=3)을
주기적으로 보낸다

alert icmp 192.168.111.134 any -> any any ( msg:"udp scan"; itype:3; icode:3;
threshold:type both, track by_dst, count 100, seconds 1; sid:0001;)

ICMP는 서버가 공격자에게 응답해준 패킷이므로 서버 IP 주소를 출발지에 입력한다.
UDP port scan 또한 syn_scan처럼 임계치 기반으로도 가능하긴 하나 오탐의 여지가 있다.




ி DDos 공격 탐지

 

DNS Query Flooding

 

출발지 기준으로 웹 접속시도(www)가 많다면 DNS query flooding으로 의심한다.

alert udp any any -> 192.168.111.134 53 (msg:"DNS query flooding"; content:"www"; nocase; threshold:type both, track by_src, count 100, seconds 1; sid:0001;)

nocase 옵션을 사용하면 대소문자를 구분하지 않는데 이 옵션을 쓰지 않으면

WwW와 같이 대소문자를 섞어서 flooding을 시도하는 패턴은 탐지하지 못할 것이다.

 

NTP Reflection

 

요청 대비 응답을 크게 하는 NTP의 MON_GETLIST 명령을 사용한 DOS 공격 기법이다.
MON_GETLIST에 해당하는 코드는 42번, 16진수로 변환하면 2a이다.




alert udp 192.168.111.134 123 -> any any (msg:"ntp"; content:"|2a|";
"threshold:type both, track by_dst, count 100, seconds 1; sid:0001;)




Smurf attack

 
공격자가 자신을 피해서버 IP라고 속여서 피해 서버 네트워크 전체에 요청을 날리면
응답을 모두 피해 서버가 받으므로 자원을 소모하는 서비스 거부 공격이다.

alert icmp 192.168.111.0/24 any -> 192.168.111.134 any (msg:"smurf"; icode:0; itype:0;
threshold: type both, track by_dst, count 100, seconds 1; sid:0001;)

출발지는 피해 서버가 속한 네트워크의 모든 호스트로 지정해야 한다.


Slowloris

 
HTTP의 요청 헤더를 비정상적으로 마무리하여 서버의 자원을 소진시키는 공격으로
HTTP GET 요청과 개행문자(0d 0a)가 1개만 있는 패킷을 탐색한다.

alert tcp any any -> any any (msg:"slowloris"; content:"|47 45 54|";
content:!"|0d 0a 0d 0a|"; nocase; sid:0001;)

47 75 54는 문자열 "GET"의 HEX 값이다.
 
패킷 검색시 범위를 지정하면 더 좋다. 전체를 검색하면 속도가 저하되기 때문이다.
content:"|47 45 54|"; offset:0; depth:3;
➽ 첫 byte 부터 3byte 사이에서 content를 탐색한다.




ி MALWARE 분석 탐지

 

위 사진은 packettotal IDS에서 나온 악성 패킷 분석 결과인데
저 IDS와 유사한 방식으로 단순하게 룰 메시지를 출력해보도록 한다.

실습의 목적은 packettotal 분석 결과가 IDS 내부적으로 어떻게 해석되어
사용자에게 표현되는지 아는 것이다.

우선 멀웨어 샘플 패킷이 필요하므로 아래 사이트에서 예제를 다운받는다.
https://www.malware-traffic-analysis.net/2017/04/26/index.html
다른 곳에서 캡처한 패킷을 이용해서 내 컴퓨터로 다시 패킷을 재생하는 명령어는 아래와 같다.

# tcpreplay -i [인터페이스명] --topspeed [pcap 파일명]
topspeed 옵션을 넣으면 빠른 속도로 패킷을 재전송한다.
해당 옵션이 없는 경우 실제 이벤트가 일어난 시간만큼 기다려야 한다.


악성코드에 감염된 사이트로 redirection, 유포지 접속, 다운로드

 
➽ 복잡한 옵션은 생략하고 content만을 이용해서 구현한다.

# tcpreplay -i eth0 -topspeed malware_sample.pcap

1. alert tcp 185.189.14.112 80 -> any any (msg:"Keitaro TDS Redirect";
content:"/tds/"; sid:1000001;)

2. alert tcp any any -> 213.136.26.180 80 (msg:"TROJAN WS/JS Downloader";
content:"/administrator/templates/"; sid:1000002;)

3. alert tcp any any <> 213.136.26.180 80 (msg:"executable downloader";
content:".exe"; sid:1000003;)



C&C 서버와 통신

 
4. alert tcp any any <> 94.198.98.20 80 (msg:"Ransomware CnC Beacon";
content:"info-static.php"; sid:1000004;)


옵션을 상세하게 주지 않아서 결과가 중복되어 겹치는 부분도 있지만 

어느정도 packettotal과 흡사하게 메시지가 표현되었다. 

 

 

 

 

 

 

 

 

 

 

 

반응형

'해킹-보안' 카테고리의 다른 글

SNMP 보안 취약점  (0) 2020.06.19
Security Onion 설치하기  (0) 2020.06.16
hping3 명령어 사용법  (1) 2020.06.03
ARP spoofing 공격 실습  (0) 2020.06.03
DDoS 패킷 분석 및 대응 방법  (0) 2020.06.02