본문 바로가기
정보보안

정보보안6 2차시

by IT매니절 2024. 9. 1.

침입차단 시스템 : Firewall (iptables)
침입탐지 시스템 : IDS (NIDS 호스트기반, HIDS 네트워크기반)
침입방지(차단) 시스템 : IPS, Firewall + IDS

 

snort ( NIDS + IPS )

공식 사이트 : https://snort.org/

 

snort 룰셋 배포
- 커뮤니티 버전, 일반 가입자 버전, 구독자 버전(유료)
- local.rules 파일
- sid 숫자 범위 99 이하(시스템 내부), 100만 이하(외부 제작 배포), 100만  초과(사용자 정의 규칙)

 

 

snort HIDS 설치하기

사용 OS : 로키 리눅스 8

 

1. epel 저장소 설치

$ sudo dnf -y install epel-release

( epel 저장소 : RPM 기반의 리눅스 배포판을 위한 추가 소프트웨어 패키지 저장소.
RHEL 계열의 리눅스 배포판 사용자들에게 추가적인 오픈 소스 소프트웨어 패키지를 제공함 )

 

2. 저장소 활성화

$ sudo dnf config-manager --set-enabled powertools

( config-manager : 리포지토리 설정을 관리하는 도구.

powertools: 개발 도구나 추가 패키지를 포함하고 있는 저장소. )

$ sudo dnf repolist enabled

$ cat /etc/yum.repos.d/Rocky-PowerTools.repo

# Rocky-PowerTools.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for Rocky updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[powertools]
name=Rocky Linux $releasever - PowerTools
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=PowerTools-$releasever
#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/PowerTools/$basearch/os/
gpgcheck=1
enabled=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

#은 주석을 의미
$releasever은 현재 설치된 리눅스버전 참조
gpgcheck는 GPG 검증을 통해 패키지 무결성 확인
enabled가 0이면 비활성화, 1이면 활성화
countme는 사용 통계를 수집하여 Rocky Linux 커뮤니티에 전송하는 옵션

 

3. 개발패키지 설치

$ sudo dnf -y install \
gcc flex bison zlib zlib-devel libpcap libpcap-devel pcre pcre-devel libdnet \
libdnet-devel tcpdump libpcap-devel libdnet libnet-devel openssl-devel wget make

 

4. (소스)컴파일 및 설치

LuaJIT-2.0.5.tar.gz

daq-2.0.7.tar.gz

rules.tar.gz

snort-2.9.20.tar.gz

 

 

LuaJIT : Lua 스크립팅 언어를 위한 Just-In-Time 컴파일러. snort 성능 향상.

$ tar xzf LuaJIT-2.0.5.tar.gz
$ cd LuaJIT-2.0.5
$ make  
$ sudo make install

 

DAQ : Snort에서 패킷 캡처를 처리하는 모듈.

네트워크 인터페이스에서 트래픽을 수집하고 Snort가 이를 분석할 수 있도록 제공한다.

 

$ tar xzf daq-2.0.7.tar.gz
$ cd daq-2.0.7
$ ./configure 
$ make 
$ sudo make install

 

 

snort 설치전에 관련된 것 사전설치

$ sudo dnf -y install libtirpc-devel

$ sudo cp -r /usr/include/tirpc/{netconfig.h,rpc} /usr/local/include

 

$ tar xzf snort-2.9.20.tar.gz
$ cd snort-2.9.20
$ ./configure --enable-sourcefire 
$ make 
$ sudo make install

 

$ ll /usr/local/bin

snort 폴더 확인

 

# snort --daq-list
Available DAQ modules:
pcap(v3): readback live multi unpriv
ipfw(v3): live inline multi unpriv
dump(v3): readback live inline multi unpriv
afpacket(v5): live inline multi unpriv

=> snort 설치 확인 (root로만 실행가능)

 

 

+ DAQ 모듈들

pcap(v3)
libpcap 패킷 캡처 라이브러리를 사용한다.

저장된 패킷 파일을 읽고readback, 실시간 네트워크 트래픽 캡처를 지원하며live, 여러 인터페이스에서 동시 캡처가 가능하고multi 비특권 모드에서도 동작unpriv

 

ipvw(v3)
IPFW를 통해 패킷을 캡처하고 제어하는 모듈
실시간 트래픽 처리, 패킷 전달 제어, 여러 인터페이스 동시 캡처, 비특권 모드 동작

dump(v3)
트래픽을 캡처하고 지정된 파일에 덤프. 디버깅이나 트래픽 분석시 데이터수집에 유용
패킷조회, 실시간 트래픽 처리, 패킷 전달 제어, 여러 인터페이스 동시 캡처, 비특권 모드 동작

 

afpacket(v5)
Linux의 AF_PACKET 소켓 인터페이스를 사용하는 모듈
실시간 네트워크 캡처, 패킷 전달 제어, 여러 인터페이스 동시 캡처, 비특권 모드 동작

 

 

5. 스노트 설치

$ sudo mkdir /etc/snort

$ cd /etc/snort/

$ sudo cp ~/snort-2.9.20/etc/{snort.conf,classification.config,reference.config,threshold.conf,unicode.map} .

$ sudo tar xzf ~/rules.tar.gz -C .

$ sudo wget https://www.snort.org/downloads/community/community-rules.tar.gz

$ sudo tar xzf community-rules.tar.gz

$ sudo mv community-rules/community.rules rules/

 

/etc/snort 만들고 그 안에서 snort-2.9.20/etc 안의 설정 파일들을 복사해온다

snort 룰들을 압축해제, 다운로드 받아 압축해제 하고 rules에 복사한다

 

화이트리스트 정책 룰
/etc/snort/rules/white_list.rules
블랙리스트 정책 룰
/etc/snort/rules/black_list.rules

 

$ sudo touch rules/white_list.rules$ sudo touch rules/black_list.rules현재경로에 맞춰서 파일 생성

 

/etc/snort.conf
메인 설정파일
/etc/snort/rules/local.rules
사용자 정의 룰을 등록할때 사용하는 파일

 

snort 변수
var HOME_NET : 목적지 ip 주소 변수
ex) ipvar HOME_NET 192.168.1.0/24

var EXTERNAL_NET : 출발지 ip 주소 변수
ex) ipvar EXTERNAL_NET any

var RULE_PATH : 룰 파일이 저장된 디렉터리를 설정하는 변수

 

$ sudo vi /etc/snort/snort.conf

자신의 ip주소 설정

 

룰 패스와 정책들 파일 경로 수정

주석처리

###################################################
# Step #7: Customize your rule set
# For more information, see Snort Manual, Writing Snort Rules
#
# NOTE: All categories are enabled in this conf file
###################################################

550번대 즈음의 step 7의 내용을 덮어쓰기한다 (파일이 없는라인을 주석처리하였음)

#include $RULE_PATH/app-detect.rules
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/bad-traffic.rules
#include $RULE_PATH/blacklist.rules
#include $RULE_PATH/botnet-cnc.rules
#include $RULE_PATH/browser-chrome.rules
#include $RULE_PATH/browser-firefox.rules
#include $RULE_PATH/browser-ie.rules
#include $RULE_PATH/browser-other.rules
#include $RULE_PATH/browser-plugins.rules
#include $RULE_PATH/browser-webkit.rules
#include $RULE_PATH/chat.rules
#include $RULE_PATH/content-replace.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/experimental.rules
#include $RULE_PATH/exploit-kit.rules
include $RULE_PATH/exploit.rules
#include $RULE_PATH/file-executable.rules
#include $RULE_PATH/file-flash.rules
#include $RULE_PATH/file-identify.rules
#include $RULE_PATH/file-image.rules
#include $RULE_PATH/file-multimedia.rules
#include $RULE_PATH/file-office.rules
#include $RULE_PATH/file-other.rules
#include $RULE_PATH/file-pdf.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/icmp-info.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/imap.rules
#include $RULE_PATH/indicator-compromise.rules
#include $RULE_PATH/indicator-obfuscation.rules
#include $RULE_PATH/indicator-shellcode.rules
include $RULE_PATH/info.rules
#include $RULE_PATH/malware-backdoor.rules
#include $RULE_PATH/malware-cnc.rules
#include $RULE_PATH/malware-other.rules
#include $RULE_PATH/malware-tools.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/multimedia.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/oracle.rules
#include $RULE_PATH/os-linux.rules
#include $RULE_PATH/os-other.rules
#include $RULE_PATH/os-solaris.rules
#include $RULE_PATH/os-windows.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/p2p.rules
#include $RULE_PATH/phishing-spam.rules
#include $RULE_PATH/policy-multimedia.rules
#include $RULE_PATH/policy-other.rules
include $RULE_PATH/policy.rules
#include $RULE_PATH/policy-social.rules
#include $RULE_PATH/policy-spam.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/pop3.rules
#include $RULE_PATH/protocol-finger.rules
#include $RULE_PATH/protocol-ftp.rules
#include $RULE_PATH/protocol-icmp.rules
#include $RULE_PATH/protocol-imap.rules
#include $RULE_PATH/protocol-pop.rules
#include $RULE_PATH/protocol-services.rules
#include $RULE_PATH/protocol-voip.rules
#include $RULE_PATH/pua-adware.rules
#include $RULE_PATH/pua-other.rules
#include $RULE_PATH/pua-p2p.rules
#include $RULE_PATH/pua-toolbars.rules
include $RULE_PATH/rpc.rules
include $RULE_PATH/rservices.rules
#include $RULE_PATH/scada.rules
include $RULE_PATH/scan.rules
#include $RULE_PATH/server-apache.rules
#include $RULE_PATH/server-iis.rules
#include $RULE_PATH/server-mail.rules
#include $RULE_PATH/server-mssql.rules
#include $RULE_PATH/server-mysql.rules
#include $RULE_PATH/server-oracle.rules
#include $RULE_PATH/server-other.rules
#include $RULE_PATH/server-webapp.rules
#include $RULE_PATH/shellcode.rules
include $RULE_PATH/smtp.rules
include $RULE_PATH/snmp.rules
#include $RULE_PATH/specific-threats.rules
#include $RULE_PATH/spyware-put.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/virus.rules
#include $RULE_PATH/voip.rules
#include $RULE_PATH/web-activex.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-coldfusion.rules
include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/x11.rules

 

저장

 

6. 스노트 사용자 생성, 권한 변경

$ sudo useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS

snort를 실행할 사용자를 생성하고, 로그인은 할 수 없게 한 다음 홈 디렉터리는 /var/log/snort로 설정

 

$ sudo chown -R snort:snort /etc/snort
$ sudo chmod 700 /etc/snort

snort 권한을 변경

 

관리자 계정에서 snort 입력시 실행되면서

    ,,_
   o"  )~
     ''''

귀여운 돼지 텍스트를 볼 수 있음 ㅎㅎ

 

snort 주요옵션
-T 테스트
-i 인터페이스 설정
-u 사용자 지정
-g 그룹 지정
-c 설정파일 옵션
-q 불필요한 메시지 생략

 

7. 실행해보기

# snort -T -i ens160 -u snort -g snort -c /etc/snort/snort.conf

~ Total snort Fixed Memory Cost - MaxRss:86252
Snort successfully validated the configuration!
Snort exiting

대충 이렇게 뜨면 성공

 

8. 스노트 설정 추가

# vim /etc/snort/rules/local.rules

테스트용으로

alert icmp any any -> $HOME_NET any (msg: "ICMP ping test"; sid: 1000001; rev:1;) 추가해줌

 

1) RTN 룰 헤더, 룰 트리노드

룰 액션
alert 경고
log 로그 기록
drop 패킷 차단, 기록
pass 무시
active alert + dynamic 유효화
dynamic active에 의해 유효화될 때 패킷 기록

 

프로토콜
TCP, UDP, ICMP, IP

출발지 IP, 대역
출발지 포트

방향 연산자
-> 왼쪽에서 오른쪽 (반대는 없음)
<> 왼쪽과 오른쪽 양방향 탐지

 

목적지 IP, 대역
목적지 포트

 

2) 룰 옵션 OTN (Option Tree Node)

msg : 룰이 매칭되면 기록할 문자열. -A console 옵션이 없으면 기본적으로 로그(/var/log/snort 디렉터리)에 기록. 있으면 콘솔로 출력함.
sid : 룰의 고유 id
rev : 룰의 수정 번호

 

 

오류 실습# alert icmp any any <-> $HOME_NET any (msg: "ICMP ping test"; sid: 1000001; rev:1;)
-bash: syntax error near unexpected token `('

 

/etc/snort/rules/dns.rules

기존에 작성된 rule 참고

 

 

# snort -q -i ens160 -u snort -g snort -c /etc/snort/snort.conf

하나의 터미널로 snort 작동시켜놓고

다른 터미널에서

$ sudo tail -f /var/log/snort/alert

snort 로그 모니터링

 

그리고 cmd에서 ping을 던지자 로그가 쌓이기 시작한다

룰을 수정한 후 적용하려면 스노트를 다시 시작해야한다

 

콘솔로 출력하는 옵션 사용시

 

 

 

 

snort NIDS 설치

설치과정은 3번까지 똑같고

추가로

$ sudo dnf -y install libnetfilter_queue libnetfilter_queue-devel libmnl

하나 더 설치해준다

 

설치확인

$ rpm -q gcc flex bison zlib zlib-devel libpcap libpcap-devel pcre pcre-devel libdnet \
libdnet-devel tcpdump libpcap-devel libdnet libnet-devel openssl-devel wget make \
libnetfilter_queue libnetfilter_queue-devel libmnl

 

소스파일 다운로드

LuaJIT-2.0.5.tar.gz

daq-2.0.7.tar.gz

rules.tar.gz

snort-2.9.20.tar.gz

 

$ tar xzf LuaJIT-2.0.5.tar.gz && cd LuaJIT-2.0.5 && make && sudo make install
$ tar xzf daq-2.0.7.tar.gz && cd daq-2.0.7 && ./configure && make && sudo make install

한번에 실행

 

$ sudo dnf -y install libtirpc-devel

$ sudo cp -r /usr/include/tirpc/{netconfig.h,rpc} /usr/local/include

$ tar xzf snort-2.9.20.tar.gz && cd snort-2.9.20 && ./configure --enable-sourcefire && make && sudo make install

 

$ snort --daq-list
Available DAQ modules:
pcap(v3): readback live multi unpriv
nfq(v7): live inline multi
ipfw(v3): live inline multi unpriv
dump(v3): readback live inline multi unpriv
afpacket(v5): live inline multi unpriv

=> NIDS와 달리 nfq가 있음

 

nfq

리눅스에서 Netfilter Queue를 사용해 패킷을 커널에서 사용자공간으로 전달하고 처리함

iptables와 연동해서 사용한다

 

$ sudo mkdir /etc/snort

$ cd /etc/snort/

$ sudo cp ~/snort-2.9.20/etc/{snort.conf,classification.config,reference.config,threshold.conf,unicode.map} .

$ sudo tar xzf ~/rules.tar.gz -C .

$ sudo wget https://www.snort.org/downloads/community/community-rules.tar.gz

$ sudo tar xzf community-rules.tar.gz

$ sudo mv community-rules/community.rules rules/

 

/etc/snort 만들고 그 안에서 snort-2.9.20/etc 안의 설정 파일들을 복사해온다

snort 룰들을 압축해제, 다운로드 받아 압축해제 하고 rules에 복사한다

 

화이트리스트 정책 룰
/etc/snort/rules/white_list.rules
블랙리스트 정책 룰
/etc/snort/rules/black_list.rules

 

$ sudo touch rules/white_list.rules

$ sudo touch rules/black_list.rules

현재경로에 맞춰서 파일 생성

 

$ sudo vi /etc/snort/snort.conf

자신의 ip주소 설정

 

룰 패스와 정책들 파일 경로 수정

나머지 설정은 전부 똑같고

daq: nfq 관련 설정 추가만 다르다

 

사용자 추가와 권한변경도 동일.

 

snort 실행 명령어

$ snort -T -i ens160 -u snort -g snort -c /etc/snort/snort.conf

=> HIDS

$ snort -T -Q -u snort -g snort -c /etc/snort/snort.conf

=> NIDS 에서는 -i 인터페이스를 지정할 수 없다. 대신 -Q 옵션( 인라인 모드 옵션 ) 사용 

 

# iptables -A FORWARD -j NFQUEUE -m comment --comment SNORT

iptables에 FORWARD 룰 추가

 

/etc/snort/rules/local.rules에 룰 추가하고 테스트

# snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -Q

 

 

'정보보안' 카테고리의 다른 글

정보보안6 4차시  (0) 2024.09.08
정보보안6 3차시  (0) 2024.09.07
정보보안6 1차시  (0) 2024.08.31
정보보안5 8차시  (0) 2024.08.25
정보보안5 7차시  (0) 2024.08.24