Suricata-Based NIDS/NIPS (2)
4. 가상머신을 통한 네트워크 침투 테스트 탐지 실습
4.1 네트워크 침투 테스트와 탐지 룰 작성 실습
이제 가상머신을 활용해 네트워크 침투 테스트를 진행해 보고, suricata 툴이 탐지 룰을 통해 탐지할 수 있는지 실습을 진행해 보려고 한다.

Testmynids.org는 NIDS 탐지 테스트를 위한 웹 사이트와 프레임워크를 제공한다. 해당 모드를 사용하면 효과적으로 NIDS를 테스트해 볼 수 있다.

Curl 명령어를 통해 URL에서 제공되는 리소스를 반환하도록 한다. 이 테스트 공격은 공격자가 시스템, 권한에 대해 root 권한을 가질 수 있다고 시뮬레이션 된다. 이제 이 공격이 suricata 내장 룰로 탐지가 될 수 있는지 확인한다.

Tail 명령어를 통해 실시간으로 모니터링이 출력되도록 설정하고, 2100498이라는 SID 넘버를 픽스한다. Suricata는 TCP 프로토콜을 사용한 악성 활동을 수행하는 공격 GPL 공격을 탐지하였다. 해당 공격의 우선순위는 2이며 심각도는 1이 가장 높다.

1 | ┌──(root㉿kali)-[/var/lib/suricata/rules] |
다양한 침입 시도에 대해 custom rules를 작성해 보기로 했다. 이때 직접 작성한 탐지 룰이 작동하는지 확인하기 위해 suricata에서 자체 제공되는 .rules 파일은 모두 해제하고 yaml 파일을 수행하며, systemctl을 재시작하였다.
[TCP Flood Attack]

TCP Flood Attack 공격을 탐지하는지 확인하기 위한 실습을 진행하였다. 공격자 가상머신에서 TCP SYN 패킷을 suricata 가 설치된 IP 주소로 다량의 패킷을 전송해 과부하를 일으키는 TCP Flood Attack를 수행한다.

/var/log/suricata에서는 .rules 에는 작성한 TCP SYN Flood Attack 이 탐지되었다. 만약 TCP SYN Flood Attack 이 발생한다면 tcpdump 나 wireshark 툴과 연계하여 동작을 분석할 수 있다.
[Xmas Tree Attack]

Xmas Tree Attack을 탐지하는지 확인하기 위해 nmap을 통해 탐지 실습을 진행하였다. Nmap 스캔은 열린 포트와 사용된 프로토콜을 스캔해 민감 개인 식별 정보를 훔칠 수 있으므로, -sX 옵션을 사용해서 Xmas Tree 스캔을 수행했다. Nmap 을 사용하여 허가되지 않은 타인의 시스템의 네트워크를 스캐닝하는 행위는 불법이며, 일부 국가에서는 징계를 받을 수 있다.

마찬가지로 이번에도 suricata 툴의 fast.log에서는 Xmas Tree Attack에 대한 실시간 탐지가 로그 파일에 기록되었다. 공격자와 대상 사용자의 ip 주소가 나타났으며, 소스 포트 또한 확인할 수 있었다.
[SQL Injection Attempt(DVWA)]

마지막 실습에서는 DVWA SQL Injection 실습 사이트에서 공격자가 SQL Injection 취약점을 악용해 페이로드를 작성해 Submit 했을 때, 이를 suricata 가 탐지할 수 있는지를 확인해 보았다. 이때 동일한 네트워크상에서 DVWA를 구축하고 방어를 수행하는 환경과, Firefox를 통해 방어자의 DVWA 사이트에 접근해 공격을 수행하는 환경 총 두 개의 가상머신을 준비했다. 위 이미지는 SQL Injection Attack을 방지할 수 있는 규칙이다.

1 | 5' union select column_name, 2 from information_schema.columns where table_schema='dvwa' and table_name='users'# |
그림과 같이 공격자의 가상머신에서 Information_schema.columns 테이블을 통해 DVWA users 테이블에 대한 컬럼 네임을 확인하는 구문을 작성해 Submit 버튼을 눌러주었다.
[Eve.json로그를 확인해본 결과]

Eve.json파일은 JSON 포맷으로 저장되어 구조화된 데이터 형식을 가지고 있고, 세부 정보를 제공하며, SIEM 과 같은 보안 분석 시스템에 통합하기에 용이하다. 해당 json 파일은 Timestamp, flow_id, src_ip, dest_ip, http 필드 등을 제공하였고, 특히 공격자의 ip 주소와 SQLi 공격문 url 이 어떤 형태로 나타나는지 정보를 모두 확인할 수 있었다.
[Fast.log를 확인해본 결과]

Fast.log는 실시간으로 비교적 간단하고 직관적인 suricata 로그 파일로, 어떤 규칙이 탐지되었는지를 확인할 수 있다. eve.json과 같이 세부적인 기록은 제공되지 않는다. 그러나 짧은 로그 기록, 간단한 중요 정보라는 이점 때문에 fast.log는 주로 실시간 모니터링 확인에 적합하다. 해당 로그 파일에서 singlequote, UNION, SELECT, comment # 같은 대표적인 공격 구문들이 탐지되었다.
4.2 암호화 트래픽 분석

Suricata에서는 암호화된 트래픽을 탐지할 수 있는 규칙을 지정할 수 있다. 특히 SSL/TLS 인증서와 JA3 fingerprint와 관련된 부분이다. 네트워크 보안 환경에서 악의적인 도메인이 비정상적인 SSL/TLS 인증서를 사용했다고 가정해보자. 다음 규칙은 16 진수 값을 통해 인증서의 여러 가지 필드를 확인하거나, 특정 JA3 해시를 사용해 TLS 연결을 식별할 때마다 Sliver 변형을 감지한다.

사전에 구성된 암호화된 트래픽 pcap 파일을 실행해 ET MALWARE 이 감지된 것을 확인한다. Dridex 악성코드와 관련된 SSL 인증서에 대해 SSL/TLS handshake 과정에서 교환되는 인증서 정보를 분석하고, suricata는 외부 네트워크에서 내부로의 TLS 트래픽에 대해 특정한 패턴과 내용 탐지를 적용했다.

1 | ja3 -a --json /home/htb-student/pcaps/sliverenc.pcap |
JA3 해시를 사용해 암호화된 트래픽을 분석할 수 있도록 지정한 Sliver 트래픽 부분을 확인한다. 해당 명령어를 사용하면 JA3 해시 도구가 pcap 파일에서 TLS handshake 데이터를 해석하는 암호화된 Sliver 트래픽을 담고 있다. Sliverence.pcap 파일을 suricata에서 실행하면 sliver 을 감지하는 로그가 기록된다.
4.3 Suricata로 파일 추출하기
Suricata에는 포렌식이나 데이터 분석에 매우 중요하게 사용될 수 있는 파일 추출 기능이 내장되어 있다. 이 기능을 사용하면 다양한 프로토콜을 통해 전송된 파일을 캡처하고 저장할 수 있다.

suricata.yaml에 들어가 -file-store 부분을 활성화해준다. 결과는 다음과 같도록 한다.

파일 추출 기능을 활성화한 suricata 규칙을 개발할 때에는 어떤 종류의 파일을 추출해야 하는지 명확하게 기입한다.

특정 pcap 파일을 suricata에 실행해 주었고, filestore이라는 디렉토리가 새롭게 생성되었다. Suricata는 .pcap 파일을 읽어 803 개의 패킷을 오프라인 분석했고, 이에 대한 수행 기록을 나타낸다.
1 | root@ubuntu:~/filestore# find . -type f |
Filestore의 기본 logging 디렉토리 안에는 SHA256 문자열이 시작되는 규칙에 따라 분류되어 디렉토리에 저장된다. ./ea/ea0936257b8d96ee6ae443adee0f3dacc3eff72b559cd5ee3f9d6763cf5ee2ab 라면 ea 디렉토리 안에 저장된다.
1 | root@ubuntu:~/filestore# |
원하는 파일의 내부 파일을 선별해 검사하였다. 21…로 시작하는 추출 파일을 검사하면 MZ라는 형식의 Windows 실행 파일이 발견되었다.
4.4 Suricata .pcap 파일 분석

/etc/suricata/suricata.yaml에 pcap-log 을 검사할 수 있는 설정 란이 있다. Pcap-log 부분을 수정해 규칙 옵션을 적용시켜주면 pcap 분석을 위한 사전 작업이 완료된다.
1 | root@ubuntu:~# suricata -r /home/htb-student/pcaps/vm-2.pcap |
오프라인 입력으로 pcap 파일을 읽어줄 경우 다음의 명령어를 실행해 주어야 하며, eve.json과 fast.log 및 stats.log, 추가로 YAML 파일 설정 시 pcap-log 세부 파일을 생성할 수 있다.
1 |
|
실시간 트래픽을 처리하기 위해서 다음 명령어를 통해 tcpreplay pcap 파일의 네트워크 트래픽을 replay 한다.
1 | (root㉿kali)-[/etc/suricata] |

이 명령어는 IDS/IPS 시스템을 사용해 malware-traffic-analysis.net 의 pcap 파일을 분석할 수 있게 해주었다. 해당 파일을 통해 suricata 가 네트워크 트래픽을 모니터링하고 미리 정해둔 규칙에 따라 악성 활동을 탐지해 로그 기록으로 보고한다.
1 | ┌──(root㉿kali)-[/var/log/suricata] |
suricata.yaml에서 pcap 로그 파일을 구분 가능하게 이름을 지정해 주었는데, pcap- log.pcap.1727195066 이라고 적혀져 있는 부분이 바로 직전 pcap 파일을 분석해 보고한 로그 파일이다. 또한 eve.json, fast.log, stats.log 와 같은 파일에 저장된 pcap 파일 로그 정보가 나타날 수 있다.

특히 suricata 로그 디렉터리에 해당되는 eve.json파일에서는 suricata로 이벤트를 기록한 pcap 파일에 대해 더 자세한 분석 정보나 네트워크 트래픽과 관련된 정보를 확인할 수 있다. Eve.json에서 Kerberos 프로토콜 관련 트래픽에서 특정 사용자인 plucero 가 네트워크 자원에 접근하기 위해 AES256 암호화 인증에 접근을 시도한 내역이 기록되었다.
5. NIDPS 통합 탐지 툴을 통한 pcap 분석 실습
5.1 Security Onion 통합 탐지 툴을 활용한 악성 네트워크 트래픽 분석 실습
Security Onion 은 NIDS/NIPS(suricata, zeek), SIEM, HIDS, 네트워크 패킷 캡처, 포렌식, threat huning 기능이 포함된 매우 유용한 통합 탐지 모니터링 툴이다. Security Onion 은 네트워크 전반 로그 통계를 제공하며, suricata를 취급하고 있으므로 네트워크 트래픽 분석 실습을 진행해 보기로 했다.

Security Onion의 NIDS/NIPS 기능을 기업과 실무 등의 환경에서 사용하면 주요 프로토콜 트래픽을 분석하여 비정상적인 사용을 통제하고, 실시간 트래픽 분석을 통해 데이터 유출 시도나 이상 징후를 빠르게 파악할 수 있다. 또한 threat hunting 기능을 사용하여 기존에 있는 위협 패턴뿐만이 아닌 발견되지 않은 패턴을 발견하여 NIDS/NIPS의 단점을 보완한다.

Security onion 을 통한 악성 트래픽 분석 시나리오는 다음과 같다.

초기 구성은 Web user swing@vonion.com이라는 name 을 지정해 oracle linux에서 Security Onion 서버 환경 구축을 완료했으며, 192.168.132.133에 위치한 kali linux 클라이언트의 로그인을 통한 접속을 허용하였다.

1 | sudo so-import-pcap 2022-01-07-traffic-analysis-exercise.pcap |
so-import 명령어를 통해 분석하고자 하는 pcap 파일을 import 해주고, 나타난 security onion hyperlink에 접속한다.

이와 같이 특정 hyperlink에 접속하면 security onion 이 해당 pcap를 분석해준 데이터 검색 조건을 전부 포함하고 있으며, 날짜 지정을 통한 dashboards에는 해당 시간 범위에 이루어진 수치화 그래프, NIDS/NIPS 이상 징후 탐색, 중요한 이벤트 분석 기록이 나타난다.

Alerts 탭을 확인해 보면 중요도 순으로 중요 알림들을 확인할 수 있는데, 이 경고들을 모두 suricata 가 탐지해준 것을 확인할 수 있다. Suricata 가 가장 많이 count 한 ET MALWARE Vidar/Arkei/Megumin/Oski Stealer HTTP POST Pattern 을 별도로 중요 case로 분류해주고 이를 hunt 하여, 이후 징후를 자세히 탐색해 보도록 하였다.

Hunt 된 내용에서는 2022 년도 1 월 7 일경 source ip 192.168.1.216 이 Vidar/Arkei/Oski 같은 정보 탈취형 악성코드에 감염되어 해당 시스템이 destination ip인 2.56.57.108 서버로 민감 정보를 전송하려고 했을 수도 있는 시도가 발견되었다. 이는 suricata.alert ET 규칙에 의해 탐지되었다.

해당 분석과 같은 source ip 와 destination ip 와 같은 내용이 wireshark에서도 나타나는 것을 확인한다.

또한 ET MALWARE Vidar/Arkei/Megumin/Oski Stealer HTTP POST Pattern 경고 부분의 case를 종합적으로 분석해 본 결과, windowsupdate.com 와 같은 도메인으로부터 /osk/ 아래 .php와 .jpg와 같은 여러 가지 파일 요청들이 2.56.57.108 ip 주소를 대상으로 발생하고 있다. 이때 windowsupdate.com 은 위장된 도메인일 가능성이 있다.

다시 돌아와, ET POLICY PE EXE or DLL Windows file download HTTP를 중요하게 파악 후 case 분류하여 network.data.decoded의 부분에서 다음과 같은 EXE, DLL 에 사용되는 DOS 실행 파일의 시그니처인 MZ 형식의 내용을 발견했다.


Security onion, wireshark에서는 똑같은 TCP stream 내용이 발견되었는데, 이들의 차이점에 유의해야 한다.
-> 각각의 로그를 확인해보면 security onion 은 이상 징후나 악성 트래픽을 NIDS/NIPS 가 탐지한 이벤트에 대한 내용들을 나타내고 있으며, wireshark 는 개별 패킷을 직접 선별하고 필터링 해 발견한 TCP Stream 내용을 나타내고 있는 것이다.

Wireshark 와 suricata 가 분석한 내용들을 종합적으로 확인해 본 결과, 탐지된 HTTP POST 요청에서 Chrome_default.txt 파일이 담긴 ZIP 파일이 전송되고 있었으며, 해당 데이터에는 passwords.txtUT, system.txtUT… 와 같이 민감한 내용이 탈취당할 수 있는 정보들이 담겨있었다.

마지막으로 NIDPS 툴인 zeek 가 수집한 Kerberos 요청 실패 내용을 확인 해본다. 클라이언트 192.168.1.216, steve.smith 가 SPOONWATCH라는 서비스에 접속하기 위해 192.168.1.2에 인증 요청을 보냈지만, 서버는 KDC_ERR_PREAUTH_REQUIRED 메시지를 통해 요청을 에러로 응답했다. 이 행위가 공격자에 의한 것이라면, 비밀번호, 인증 토큰과 같은 인증 데이터가 부족해 인증에 실패했을 가능성이 존재한다.
이 정보들을 토대로 종합적으로 분석한 결과는 다음과 같다.
- 사건 일시: 2022년 1월 7일 1607UTC
- 감염된 악성코드 명: Spoonwatch Malware
- 감염된 호스트 이름: DESKTOP-GXMYNO2
- 사용자: steve.smith
- 감염된 호스트 IP 주소: 192.168.1.216
- MAC 주소: 9c:5c:8e:32:58:f9
- 사건 요약: DESKTOP-GXMYNO2 가 Oski Stealer 이라는 malware에 감염되었을 위험이 존재한다. 공격자는 위장된 .jpg, .php 파일을 통해 악성 MZ 파일을 배포하려고 했다. 공격자는 감염된 시스템에서 암호를 추출해 .passwords.txtUT, .system.txtUT를 인증 정보로 활용하려고 했을 수 있으며, Kerberos 인증을 통해 사용자 인증 정보를 우회하려고 했지만 실패했다.
5.2 security onion 트래픽 탐지에 사용된 suricata rules 분석
Security onion 통합 툴에서 pcap 파일에 의해 suricata 가 탐지한 주요 탐지 룰의 내용을 알아보자.
1 | alert http $HOME_NET any -> $EXTERNAL_NET any |
ET MALWARE Vidar/Arkei/Megumin/Oski Stealer HTTP POST Pattern이라는 내용으로 HTTP 헤더 내에 boundary=1BEF0A57B110FD467A(고유 악성 패턴)라는 문자열이 포함되어 있는지 확인하고, 내부 네트워크에서 외부로 발생하는 TCP 프로토콜에 의해 연결된 POST 요청이 발생한 경우 경고를 발생시켰다. Arkei Stealer 악성코드는 실제로 존재하며, 사용자가 특정한 악성 파일을 실행할 때 시스템에 감염될 수 있는 정형화된 패턴을 이용해 suricata 가 Arkei Stealer 로 분류하고 탐지 룰을 적용했다.
1 | alert http $EXTERNAL_NET any > $HOME_NET any (msg:"ET POLICY PE EXE or DLL Windows file download HTTP"; flow:established,to_client; flowbits:isnotset,ET.http.binary; flowbits:isnotset,ET.INFO. WindowsUpdate; file_data; content:"MZ"; within:2; byte_jump:4,58,relative,little; content:"PE|00 00|"; distance:-64; within:4; flowbits:set,ET.http.binary; classtype:policy- |
해당 탐지 룰은 suricata 가 PE 형식의 EXE 파일, DLL 파일이 HTTP를 통해 다운로드될 때, 사용자에게 경고 기능을 발생시키고 있다. 특히 모든 PE 파일의 첫 두 바이트에 나타나는 매직 넘버가 MZ 인지 확인했다. 이후 추가로 byte_jump를 이용해 PE 파일의 점프 과정을 거치며 최종 위치에서 PE 파일의 헤더 시그니처에서 해당 부분이 올바른지 분석하는 과정을 수행하였다.
1 | alert http $HOME_NET any - |
네트워크 POST 요청의 페이로드를 검사하여, ZIP, Chrome_Default.txt 이 포함된 경우 suricata 가 경고를 할 수 있는 탐지문이 작성되었다. HTTP 요청의 payload를 분석하고, ZIP 파일의 매직 넘버인 PK|03 04|를 추적해 POST 요청 본문에 ZIP 파일이 포함되어 의심스러운 요청을 보내고 있는지 확인하였다. 또한 해당 ZIP 파일에 Chrome_Default.txt라는 파일명이 있는지 탐색하여 조건이 모두 만족하면 경고를 생성하였다.
References
Sophos. (n.d.). Survey of Current Network Intrusion Detection Techniques. https://www.cse.wustl.edu/~jain/cse571-07/ftp/ids/
Oisf. (n.d.). Suricata User Guide. https://github.com/OISF/suricata/blob/suricata-4.1.4/doc/userguide/index.rst
오동진, 추다영, & 에이콘출판사. (n.d.). 우분투 리눅스 기반의 IDS/IPS 설치와 운영. https://www.yes24.com/Product/Goods/60742058
디지털 산업정보학회논문지. (2016, January). 오픈소스 IDS/IPS Snort 와 Suricata 의 탐지 성능에 대한 비교 연구. https://www.dbpia.co.kr/Journal/articleDetail?nodeId=NODE10130103
(N.d.). Which Open-Source IDS? Snort, Suricata or Zeek. https://www.sciencedirect.com/science/article/abs/pii/S1389128622002420
(N.d.). Install a Real-Time Intrusion Detection System (IDS) with Suricata and Python. https://medium.com/@rubenszimbres/install-a-real-time-intrusion-detection-system-ids- with-suricata-and-python-7ce7ae78c5a3
(N.d.). HTB ACADEMY Working with IDS/IPS Module. https://academy.hackthebox.com/module/details/226
(N.d.). Security Onion Blog - quick malware analysis https://blog.securityonion.net/search/label/quick%20malware%20analysis
(N.d.). Gartner - Intrusion Detection and Prevention Systems Reviews https://www.gartner.com/reviews/market/intrusion-prevention-systems
(N.d.). A comprehensive review of AI based intrusion detection system https://www.sciencedirect.com/science/article/pii/S2665917423001630
(N.d.). suricata SQLi Example rules – seanlinmt https://github.com/seanlinmt/suricata/blob/master/README.md