소개
Snort 는 네트워크 트래픽을 실시간으로 모니터링하고 미리 정의된 규칙 세트와 비교하는 강력한 오픈 소스 침입 탐지 시스템 (IDS) 입니다. 의심스러운 활동이 규칙과 일치하면 Snort 는 경고를 생성합니다. 이러한 경고를 읽고 해석하는 방법을 이해하는 것은 모든 사이버 보안 전문가에게 필수적인 기술입니다.
경고를 생성하는 것은 방어 워크플로우의 시작일 뿐입니다. 분석가는 해당 이벤트가 의미가 있는지, 네트워크에서 무슨 일이 일어났는지, 후속 조치가 필요한지 결정해야 합니다. 이것이 바로 규칙 생성만큼이나 경고 해석이 중요한 이유입니다. 사람이 출력 결과를 정확하게 읽고 분류할 수 없다면 강력한 탐지 스택도 무용지물입니다.
이 실습에서는 Snort 경고와 상호 작용하는 방법을 배웁니다. 사용자 지정 구성으로 Snort 를 시작하고, 네트워크 트래픽을 생성하여 특정 탐지 규칙을 트리거한 다음, 결과 로그 파일을 분석합니다. Snort 는 다양한 형식으로 로그를 출력할 수 있습니다. 여기서는 이벤트에 대한 빠르고 한 줄로 된 요약을 제공하는 fast 로그와 상세한 패킷 헤더 정보를 포함하는 full 로그에 중점을 둘 것입니다.
여러 규칙 트리거하기
이 단계에서는 Snort 침입 탐지 시스템을 시작하고 네트워크 트래픽을 생성하여 미리 구성된 사용자 지정 규칙을 트리거합니다.
알려진 정상적인 테스트 트래픽을 생성하는 것은 탐지 엔지니어링의 표준 관행입니다. 어떤 패킷이 어떤 규칙을 트리거해야 하는지 정확히 알고 있다면, 모니터링 파이프라인이 처음부터 끝까지 제대로 작동하는지 검증할 수 있는 명확한 기준이 생깁니다.
환경에는 두 가지 간단한 Snort 규칙이 설정되어 있습니다. 하나는 ICMP(Ping) 트래픽을 탐지하고, 다른 하나는 포트 80 에서 HTTP(웹) 트래픽을 탐지합니다. 또한 /etc/snort/custom.conf에 Snort 가 경고를 "fast" 로그와 "full" 로그라는 두 가지 다른 형식으로 저장하도록 지시하는 사용자 지정 구성 파일을 만들었습니다.
먼저, 사용자 지정 구성 파일을 사용하여 데몬 (백그라운드) 모드에서 Snort 를 시작합니다. -D 플래그는 Snort 를 백그라운드에서 실행하도록 지시하고, -c는 구성 파일을 지정하며, -l은 로그 디렉토리를 지정하고, -i eth0은 Snort 가 기본 네트워크 인터페이스에서 수신 대기하도록 합니다.
sudo snort -c /etc/snort/custom.conf -l /var/log/snort -i eth0 -D
Snort 가 성공적으로 초기화되고 데몬화되었다는 메시지가 표시될 것입니다.
다음으로, 규칙을 트리거하기 위해 네트워크 트래픽을 생성합니다. ICMP 규칙을 트리거하기 위해 공용 DNS 서버 (8.8.8.8) 로 3 개의 ICMP 핑 패킷을 보냅니다.
ping -c 3 8.8.8.8
이제 curl 명령을 사용하여 웹 페이지를 가져와 HTTP 트래픽을 생성합니다. 이는 HTTP 규칙을 트리거합니다. 터미널이 HTML 출력으로 어지러워지는 것을 방지하기 위해 > /dev/null을 사용합니다.
curl -s http://example.com > /dev/null
마지막으로, Snort 가 패킷을 처리하고 로그 파일에 기록할 때까지 잠시 기다립니다. Snort 로그 디렉토리의 내용을 나열하여 로그 파일이 생성되었는지 확인할 수 있습니다.
sleep 2
ls -l /var/log/snort
출력에서 fast_alert.log와 full_alert.log를 볼 수 있어야 하며, 이는 Snort 가 트래픽을 성공적으로 탐지하고 경고를 생성했음을 나타냅니다.
total 8
-rw-r--r-- 1 root root 345 Sep 15 10:00 fast_alert.log
-rw-r--r-- 1 root root 1250 Sep 15 10:00 full_alert.log
Fast 로그 분석
이 단계에서는 fast_alert.log 파일을 검사합니다. "fast" 경고 형식은 읽기 쉽고 간결하도록 설계되었습니다. 경고에 대한 가장 중요한 정보를 한 줄에 기록하므로 빠른 검토나 자동화된 스크립트 파싱에 이상적입니다.
분류 작업은 보통 광범위하게 시작되기 때문에 많은 분석가가 이 형식을 가장 먼저 접하게 됩니다. 더 깊은 패킷 세부 정보가 필요한지 결정하기 전에 무엇이 발생했는지, 언제 발생했는지, 어떤 엔드포인트가 관련되었는지 알아야 합니다.
cat 명령을 사용하여 fast 로그 파일의 내용을 표시합니다.
cat /var/log/snort/fast_alert.log
출력은 다음과 유사하게 나타납니다.
09/15-10:00:01.123456 [**] [1:1000001:1] ICMP Ping Detected [**] {ICMP} 192.168.1.10 -> 8.8.8.8
09/15-10:00:01.123456 [**] [1:1000001:1] ICMP Ping Detected [**] {ICMP} 8.8.8.8 -> 192.168.1.10
09/15-10:00:05.654321 [**] [1:1000002:1] HTTP Traffic Detected [**] {TCP} 192.168.1.10:45678 -> 93.184.216.34:80
fast 경고 라인의 구성 요소를 분석해 보겠습니다.
- 타임스탬프:
09/15-10:00:01.123456은 패킷이 캡처된 정확한 날짜와 시간을 보여줍니다. - Generator, SID 및 Revision:
[1:1000001:1]은 Generator ID(1 은 표준 Snort 규칙임을 의미), 규칙을 고유하게 식별하는 Snort ID(SID, 1000001), 규칙의 개정 번호 (1) 를 나타냅니다. - 메시지:
ICMP Ping Detected는 규칙에 정의된 사람이 읽을 수 있는 메시지입니다. - 프로토콜:
{ICMP}또는{TCP}는 사용된 네트워크 프로토콜을 나타냅니다. - 소스 및 대상:
192.168.1.10:45678 -> 93.184.216.34:80은 소스 IP 와 포트, 트래픽 방향을 나타내는 화살표, 대상 IP 와 포트를 보여줍니다.
이 로그를 읽음으로써 보안 분석가는 누가 공격하는지 (소스 IP), 대상이 무엇인지 (대상 IP 및 포트), 어떤 유형의 공격이 의심되는지 (메시지) 를 빠르게 파악할 수 있습니다.
전체 패킷 덤프 검사
fast 로그는 빠른 개요를 파악하는 데는 좋지만, 철저한 조사를 위해 필요한 심층적인 기술적 세부 정보가 부족합니다. 이 단계에서는 full_alert.log 파일을 검사합니다.
full 로그는 "어떤 경고가 발생했는가?"뿐만 아니라 "트리거된 패킷이 실제로 어떻게 생겼는가?"라는 질문을 해결하는 데 도움을 줍니다. 이러한 더 깊은 맥락은 분석가가 경고를 검증하고, 프로토콜 동작을 이해하며, 잠재적인 오탐 (false positive) 이나 우회 시도를 조사하는 데 도움이 됩니다.
"full" 경고 형식에는 전체 패킷 헤더 정보가 포함됩니다. 이를 통해 분석가는 TTL(Time to Live), TOS(Type of Service), 패킷 길이, TCP 플래그와 같은 세부 정보를 검사할 수 있으며, 이는 공격의 성격을 이해하거나 오탐을 식별하는 데 매우 중요할 수 있습니다.
full 로그는 경고당 여러 줄을 포함하므로 매우 길 수 있습니다. head 명령을 사용하여 파일의 처음 30 줄을 확인하면 처음 몇 개의 경고에 대한 세부 정보를 볼 수 있습니다.
head -n 30 /var/log/snort/full_alert.log
출력은 다음과 유사하게 나타납니다.
[**] [1:1000001:1] ICMP Ping Detected [**]
09/15-10:00:01.123456 192.168.1.10 -> 8.8.8.8
ICMP TTL:64 TOS:0x0 ID:12345 IpLen:20 DgmLen:84 DF
Type:8 Code:0 ID:15 Seq:1 ECHO
...
[**] [1:1000002:1] HTTP Traffic Detected [**]
09/15-10:00:05.654321 192.168.1.10:45678 -> 93.184.216.34:80
TCP TTL:64 TOS:0x0 ID:54321 IpLen:20 DgmLen:60 DF
******S* Seq: 0x1A2B3C4D Ack: 0x0 Win: 0xFAF0 TcpLen: 40
full 로그에서 제공하는 추가 세부 정보를 확인하십시오.
- IP 헤더 정보:
TTL:64(Time to Live),TOS:0x0(Type of Service),ID:12345(IP 식별자),DgmLen:84(데이터그램 길이). - ICMP 세부 정보:
Type:8 Code:0은 ICMP 에코 요청 (표준 핑) 을 나타냅니다. - TCP 세부 정보:
******S*는 패킷에 설정된 TCP 플래그를 나타냅니다 (이 경우 SYN 플래그가 설정되어 연결 시작을 나타냄). 또한 시퀀스 번호 (Seq), 확인 응답 번호 (Ack), 윈도우 크기 (Win) 를 보여줍니다.
이러한 전체 패킷 덤프를 분석함으로써 IDS 경고를 트리거한 네트워크 트래픽에 대해 훨씬 더 깊이 이해할 수 있습니다.
요약
이 실습에서는 네트워크 트래픽을 모니터링하기 위해 Snort 침입 탐지 시스템을 성공적으로 구성하고 실행했습니다. ICMP 핑 및 HTTP 요청과 같은 특정 유형의 네트워크 트래픽을 생성하여 사용자 지정 탐지 규칙을 트리거하는 방법을 배웠습니다. 또한 Snort 의 fast 및 full 경고 로그 간의 차이점을 살펴보고, 기본적인 소스 및 대상 IP 부터 상세한 패킷 헤더 플래그에 이르기까지 포함된 중요한 정보를 읽고 해석하는 실무 경험을 쌓았습니다. 이러한 기술은 네트워크 보안을 효과적으로 모니터링하고 잠재적인 위협에 대응하는 데 필수적입니다.



