2023. 12. 23. 22:37ㆍInformation Security 정보보안/System Security 시스템 보안
배울 내용:
snort 탐지
snort 패키지 설치
snort 환경설정
리눅스 한번에 주석처리
IDS/IPS
FTP 서버 탐지
TELNET 서버탐지
네트워크 기반 침입 탐지 시스템
NIDS
리눅스 탐지하는방법
snort 탐지
제가 지금 부터 작성하는 모든글은 제가 공부기록용이기 때문에 정확하지 않을수 있음을 알려드립니다.
틀린게 있으면 댓글로 써주시면 고치겠습니다.
이번엔 Snort 란걸 해볼거다
Snort는
인기 있는 오픈 소스로
네트워크 침입 탐지 시스템(Network Intrusion Detection System, NIDS)과
침입 예방 시스템(Intrusion Prevention System, IPS)의 이름이다
[침입 탐지 시스템]
>snort
먼저
Snort 패키지 다운을 하자
# yum -y install epel-release
# wget https://snort.org/downloads/snort/snort-2.9.20-1.centos.x86_64.rpm
# wget https://snort.org/downloads/snort/snort-openappid-2.9.20-1.centos.x86_64.rpm
wget은 web사이트에서 받겠다는 걸 알수있다 뒤에는 경로
snort 설치
#yum -y install snort-2.9.20-1.centos.x86_64.rpm
#yum -y install snort-openappid-2.9.20-1.centos.x86_64.rpm --skip-broken
--skip-broken (중복된거무시하고 다운)
이렇게하면
cd /etc/snort/
여기에 접근이 가능하다
이제 snort 를 만든뒤 가장기본적인 4가지를 해보자
01 . 관련 패키지 설치
#yum -y install libdnet
02. 관련 라이브러리 링크
#cd /lib64
#ln -s libdnet.so.1.0.1 libdnet.1
03. 디렉터리 생성
#mkdir -p /usr/local/lib/snort_dynamicrules
04. snort 환경 설정
#환경 설정 파일
-/etc/snort/snort.conf
1번은
libdnet은 네트워크 프로그래밍을 위한 간단한 포터블 인터페이스를 제공하는 라이브러리를 다운한것이다
2번을 설명하면
/lib64 라는 디렉토리는 64비트 시스템에서 공유 라이브러리를 보관하는 곳이고
ln -s (심볼릭 링크 생성)를 사용하여 libdnet.so.1.0.1 파일에 대한 심볼릭 링크 libdnet.1을 생성
즉, libdnet.1을 요구할 때 실제로 libdnet.so.1.0.1 파일을 사용하게 된다
3번은
mkdir -p는 필요한 모든 상위 디렉토리가 존재하지 않는 경우 이를 생성하는 옵션으로
경로를 한번에 생성할수있다
그다음 환경설정 파일로 가면
몇가지를 바꿔줘야한다
45 ipvar HOME_NET any -> 192.168.10.0/24
먼저 any를 C 클래스로 바꿔주고
104 var RULE_PATH /etc/snort/rules
105 var SO_RULE_PATH ../so_rules
106 var PREPROC_RULE_PATH ../preproc_rules
104~106 줄은 아래처럼 바꿈
104 var RULE_PATH /etc/snort/rules
105 var SO_RULE_PATH /etc/nort/so_rules
106 var PREPROC_RULE_PATH /etc/snort/preproc_rules
(걍로를 확실하게 지정해준다)
이유는 경로 설정을 명확하고 일관되게 하기 위해서다
더있다 .
113 var WHITE_LIST_PATH ../rules
114 var BLACK_LIST_PATH ../rules
아래처럼 바꿈
113 var WHITE_LIST_PATH /etc/snort/rules
114 var BLACK_LIST_PATH /etc/snort/rules
그리고 548~ 651 을 주석처리해주자
한번에 548 번줄 가는법은 :548 하면되고
한번에 주석처리 하는것은
:548,651s/^/#
하면된다
주석처리하는걸 조금 설명하자면
Vim 편집기에서 사용되는 명령어 형식어로
- 548,651 - 이 부분은 명령이 적용될 줄의 범위를 지정합니다. 여기서는 548번 줄부터 651번 줄까지를 의미합니다.
- s - 'substitute'의 약자로, 문자열 치환을 위해 사용됩니다.
- /^/ - 이것은 치환 명령에서 검색할 패턴을 나타냅니다. ^는 줄의 시작을 의미합니다.
- /# - 이 부분은 치환될 새로운 문자열을 지정합니다. 여기서는 줄의 시작에 # 기호를 추가하라는 의미입니다.
참고로 snort -V 하면 snort의 버전을 자세히 볼수있다
침입탐지 기능을하는지 한번 써보자
vi etc/snort/rules/local.rules
#Ping(ICMP)
alert icmp any any -> $HOME_NET any (msg:"ICMP Echo Request";itype:8;sid:1000001;rev:1;)
alert icmp $HOME_NET any -> any any (msg:"ICMP Echo Response";itype:0;sid:1000002;rev:1;)
이걸 설명하자면 . 이러한 규칙은 네트워크 트래픽을 모니터링하고
특정 패턴이 발견될 때 경고를 생성하는 데 사용된다
1번쨰줄
- Action: alert - 이 규칙이 일치할 때 경고를 생성
- Protocol: icmp - 인터넷 제어 메시지 프로토콜(ICMP)에 대한 규칙
- Source and Destination: any any -> $HOME_NET any - 어떤 소스에서든 ($HOME_NET으로 정의된) 내부 네트워크로 가는 모든 트래픽을 검사 (즉 출발지가 어디에서든 내부내트워크에 어떠한 포트로 오는지를 알려준다)
- Message: msg:"ICMP Echo Request" - 경고 메시지는 "ICMP Echo Request"로 설정 ( 이러한 메세지 출력)
- Type: itype:8 - ICMP 타입 8, 즉 에코 [요청] 메시지를 찾음
- SID: sid:1000001 - 규칙의 고유 식별자 ( 특정하게 번호지정)
- Revision: rev:1 - 규칙의 리비전 번호 (이건크게 상관 X )
2번째는
Source and Destination: $HOME_NET any -> any any - 내부 네트워크($HOME_NET)에서
어떤 대상으로든 가는 모든 트래픽을 검사
Type: itype:0 - ICMP 타입 0, 즉 에코 [응답]메시지를 찾음
Snort
오픈소스 네트워크 기반 침입 탐지 시스템(NIDS)
으로 다양하게 설정하능하다
IDS 엔 2가지가 있는데
1) unused
2) anormaly 가있다
그리고 모드또한 존재하는데
스니퍼 모드 (Sniffer Mode)
-네트워크 패킷읽고, 콘솔에 출력
패킷 로거 모드 (Packet Logger Mode):
-패킷을 디스크에 기록
침입 탐지 모드 (Intrusion Detection Mode)
이 모드에서는 네트워크 패킷을 분석하여 비정상적인 활동이나 알려진 공격 패턴을 감지
각 모드는 네트워크 관리 및 보안의 특정 측면에 중점을 두며, 환경에 따라 적절한 모드를 선택하여 사용한다
또한
IDS/IPS 에는 크게 4가지가 있는데
1)Firewall
2)IDS
3)IPS 능동적 대응
4)UTM
1번은 (침입 차단 시스템) 으로 침입을 막아주고
2번은 (침입탐지 시스템) 으로는 침입을 탐지만 해주고
3번은 (침입방지 시스템) 으로는 침입을 탐지와 동시에 방지까지해주고
4번은 통합 위에3가지가 통합된것이다
이번엔 FTP 를 탐지해보자
#vi /etc/snort/rules/local.rules
에서 아래의 것을 추가
FTP
alert tcp any any -> $HOME_NET 21 (msg:"FTP Request";content:"USER";nocase; sid:1000003; rev:1;)
alert tcp $HOME_NET 21 -> any any (msg:"FTP Response";content:"vsFTPd";nocase; sid:1000004; rev:1;)
content는 이러한 글이 있으면 탐지한다(USER 라는게 있으면 탐지 )
nocase는 대소문자 구분 X
참고로 탐지하는방법은
#snort -i ens33 -A console -c /etc/snort/snort.conf
이것이다
이렇게하면
이렇게 무한대기하고
kali 에서 ping 한뒤에
이런식으로 들어온다 현재는 ICMP Flooding 이라 나오는데 이건 향후에 설명한뒤에 나온다 그러나 현재의 msg 위치에
FTP Request 으로 나올것이다 만약 ftp로 로그인한다면..
┌──(root㉿kali)-[~]
└─# ftp 192.168.10.101
Connected to 192.168.10.101.
220 (vsFTPd 3.0.2)
Name (192.168.10.101:kali): user
331 Please specify the password.
Password:
하면
12/20-21:35:31.877673 [**] [1:1000003:1] FTP Request [**] [Priority: 0] {TCP} 192.168.10.100:57694 -> 192.168.10.101:21
이런식으로 말이다
FTP 말고 Telnet 또한 가능하다
# Telnet
alert tcp any any -> $HOME_NET 23 (msg:"Telnet Request";content:"USER";nocase; sid:1000003; rev:1;)
alert tcp $HOME_NET 23 -> any any (msg:"Telnet Response";content:"vsFTPd";nocase; sid:1000004; rev:1;)
~
~
실제론 content 안줘도 댐 (이미 포트에서 잡음)
그럼 20000