Snort를 공부하다가 설치부터 오류가 나고... 설치 방법도 옛날버전에 맞춰져있어서, 공부한 것들을 정리하면서 포스팅해봅니다.
Snort(스노트)란?
Snort는 오픈 소스 NIPS(네트워크 침입 차단 시스템)이자, NIDS(네트워크 침입 탐지 시스템)이다.
NIDS는 실시간 트래픽 분석과 IP에서의 패킷 로깅을 수행하는 기능이 있다. 이외에도 프로토콜 분석, 내용 검색, 매칭을 할 수 있다.
크게 3가지 주요 모드가 있는데 스니퍼, 패킷 로거, 네트워크 침입 탐지 모드(NIDS)가 있다.
스니퍼 모드는 네트워크 패킷을 읽고 콘솔에 보여준다.
패킷 로거 모드는 패킷을 디스크에 기록한다.
침입 탐지 모드는 네트워크 트래픽을 모니터하고 사용자에 의해 정의된 규칙에 반하는지 여부를 분석한다.
- 출처 : https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%85%B8%ED%8A%B8
Snort는 libpcap이라는 패킷 캡쳐 라이브러리를 기반으로 만들어졌습니다. libpcap은 TCP/IP에서 넓게 사용되는데 트래픽 스니퍼, 패킷 로깅을 위한 컨텐츠 검색 및 분석, 실시간 트래픽 분석, 프로토콜 분석 및 컨텐츠 매칭등에 사용됩니다.
Snort 동작원리
1. 패킷 디코더에서 읽어드린 패킷을 전처리기에서 사용할 수 있도록 Decoding함
2. 전처리기에선 트래픽을 수신하여 Snort 전처리기 플러그인이 TCP 스트림 재구성, IP 조각 모음, 통계 수집 또는 HTTP 요청 정규화를 포함한 복잡한 기능을 수행할 수 있도록 합니다.
3. 탐지 엔진은 전처리기에서 패킷을 수신하여 Snort 규칙 목록과 비교합니다. 패킷이 규칙과 일치하면 보안 관리자에게 적절한 경고 및 메시지를 생성합니다. 일치하는 항목이 없으면 패킷이 무시되거나 삭제됩니다. (아랫쪽에서 rule, 규칙에 대해서도 다루겠습니다)
4. Snort 규칙과 일치하는 패킷은 "Logging and Alerting System"으로 이동합니다. 이 시스템은 tcpdump 와 .pcap 파일과 같은 파일 형식으로 로깅하기 위해 정보를 보냅니다. (".pcap" 파일 확장자는 packet capture의 약자로 libpcap 라이브러리를 사용하는 여러 네트워크 분석툴(WireShark 등)에서 활용할 수 있습니다.)
- 출처 : https://thecybersecurityman.com/2018/03/19/what-is-snort-bonus-how-to-write-snort-rules/
테스트(설치) 환경 및 프로그램 버전
- OS : Ubuntu Server 22.04 LTS (64bit, x86)
- DAQ 2.0.7
- Snort 2.9.20
설치
1. AWS EC2 서버 세팅 및 SSH 접속
2. snort가 의존하는 라이브러리들 설치
sudo su
apt-get update
apt-get upgrade
apt-get install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev bison flex libdnet autoconf libtool
3. https://snort.org/downloads 로 들어가서 snort 최신버전 확인
4. DAQ(Data Acquisition, 특정 현상을 문서화하거나 분석하기 위한 정보를 수집하는데 사용되는 프로세스) 설치
mkdir snort
cd 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
5. Snort 설치
여기서 Snort버전을 잘 보고 설치한다. 만약 Flag에서 에러가 난다면 5-1 부터 시행
cd ..
wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
tar -xvzf snort-2.9.20.tar.gz
cd snort-2.9.20
./configure --enable-sourcefire && make && make install // Flag
ldconfig
5-1. rpc/rpc.h 헤더파일이 없다는 에러가 발생시
sp_rpc_check.c:32:10: fatal error: rpc/rpc.h: No such file or directory
32 | #include <rpc/rpc.h>
| ^~~~~~~~~~~
compilation terminated.
뒤적뒤적 해본결과 여기 있는 파일을 못 읽어오는듯하다. 아래 커멘드로 해결
cp -r /usr/include/tirpc/{netconfig.h,rpc} /usr/local/include
https://github.com/dyninst/dyninst/issues/486#issuecomment-426346917
6. snort 설치 확인(버전 확인)
snort -v
Rules 작성
Snort 룰은 2가지 파트로 구성됩니다.
"Header"는 Snort가 수행할 작업을 지정합니다. 출발지(source) 목적지(destination)의 IP주소(혹은 범위), 포트, 프로토콜 등을 지정하고, 수행할 Action을 지정합니다.
"Options"는 Snort가 헤더에서 지정된 룰을 패킷과 매칭되는 것을 확인했을 때, 패킷과 관련된 내용과 그것이 어떻게 보여지게 할지를 정의할 수 있습니다.
Header
1. Rule Action : 5개의 내장 액션 중 선택 가능, log, alert, pass, activate, dynamic. 보통 alert 옵션이 가장 많이 사용되는데, alert는 룰과 맞는 패킷을 로깅하고, 보안 담당자에게 알림을 주게 된다.
2. Protocol : rule을 만들 프로토콜을 선택할 수 있는데, HTTP와 같은 high-level 프로토콜들이나, TCP, UDP, ICMP와 같은 low-level 프로토콜들로 설정할 수도 있다.
3. Source IP Address : 출발지 IP 설정
4. Source Port : 출발지 포트 설정
5. Flow : "->"로 화살표 심볼을 써서 flow를 표시한다
6. Destination IP Address : 도착지 IP 설정
7. Destination Port : 도착지 포트 설정
* 3, 4, 6, 7 : 특정할 수도 있고, 이 자리에 any를 써서 전체 ip/port를 대상으로 할 수도 있다
Option(필수로 작성할 필요 x, 너무 많으니 아래의 메뉴얼 참조요망)
각 옵션은 세미콜론으로 구분하고 괄호로 감싸서 Header와 합친다.(아래 예시 참조)
General Rule Option
1. msg : 탐지 되었을 때 관리자가 볼 수 있는 메시지
2. reference : 외부공격에 대한 참조(url 등)를 포함해서 표시할 수 있음
3. gid : 그룹으로 관리하기 위해 주는 id
4. sid : snort rule을 유니크하게 관리하기 위한
5. rev : Snort 규칙의 개정판을 고유하게 식별하는 데 사용
6. classtype : 일반적인 유형의 공격 클래스에 속하는 공격을 탐지하는 것으로 분류하는 데 사용
7. priority : 위험도의 우선순위 표시
8. metadata : rule에 대한 추가 정보(일반적으로 key-value 형식)를 포함할 수 있음
Payload Detection Rule Option
1. Content : 패킷 페이로드에서 특정 내용을 검색하고 해당 데이터를 기반으로 응답을 트리거하는 규칙을 설정할 수 있음
2. nocase : nocase 키워드를 사용하면 규칙 작성기에서 대소문자를 무시하고 특정 패턴을 검색하도록 지정
3. depth : depth 키워드를 사용하면 rule에서 Snort가 지정된 패턴을 검색해야 하는 패킷의 범위를 지정할 수 있음
4. offset : offset 키워드를 사용하면 rule에서 패킷 내에서 패턴 검색을 시작할 위치를 지정할 수 있음
...
* 3, 4로 검색 속도 향상 가능
예시
alert icmp any any -> 163.239.255.151 any (msg:"TEST It is ICMP packet"; sid:10000001; nocase; content:"naver";)
참고자료
snort 메뉴얼
-* http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node1.html
참고한 자료 & 블로그
- https://jdh5202.tistory.com/630
-* https://fastsecurity.tistory.com/25
- https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%85%B8%ED%8A%B8
- https://j-ungry.tistory.com/277
- https://www.techtarget.com/searchnetworking/definition/Snort
-* https://thecybersecurityman.com/2018/03/19/what-is-snort-bonus-how-to-write-snort-rules/
-* https://j-ungry.tistory.com/277
-* http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node31.html
오류 Fix를 위한 자료
- https://github.com/dyninst/dyninst/issues/486
- https://askubuntu.com/questions/1360945/fatal-error-rpc-rpc-h-no-such-file-or-directory
'보안' 카테고리의 다른 글
[보안][LOS] 1~3번 문제 풀이 (0) | 2021.12.15 |
---|