본문 바로가기

Network

[Snort] DoS / 응용 계층

DoS 공격 탐지

 

1. 룰 수정 (alert)

$ sudo vim /etc/snort/rules/local.rules

alert icmp any any -> any any (sid:1000001;)

 

2. Snort, Wireshark 실행

$ sudo snort -A console -q -u snort -g snort -c /etc/snort/snort.conf

 

3. DoS 공격 시도 후, Wireshark에서 대량의 ICMP 패킷 확인 가능 

$ sudo hping3 192.168.100.20 --icmp

 

4. 룰 수정 (reject)

reject icmp 192.168.100.128 any -> any any (sid:1000001;)

 

5. 위의 DoS 공격이 차단되었음을 확인 

 

6. 차단되었으므로 -a 옵션으로 IP를 조작하여 DoS 공격 재시도

$ sudo hping3 192.168.100.20 -a 192.168.111.33 --icmp 

※ -a: src의 IP 조작 -> IP Spoofing 기법으로, 송신 IP 위조하여 dst에서 조작한 IP로 보이도록 함  

 

7. Wireshark 확인

ip.src_host == 192.168.111.33 && icmp 필터링 

 

8. 룰 추가 후 Snort 실행

reject icmp 192.168.100.128 any -> any any (sid:1000001;)

alert icmp any any -> 192.168.111.33 any (msg:"ToDetectICMP"; sid:1000002;) 

- Snort 실행하면, 192.168.100.20에서 192.168.111.33으로 나가는 패킷을 확인 가능 (1000002)

 

++ 탐지된 로그 확인 (가장 최근 로그)

$ cd /var/log/snort

$ ll (로그 파일 확인 - 숫자 랜덤)

$ snort -d -v -r snort.log.xxxxxxxxxx

 

 

 

DoS 공격 탐지 (Flood) 

 

1. 룰 수정 및 실행 (Ping of Death 공격 감지)

alert icmp any any -> 192.168.100.20 any (msg:"ToDetectPingofDeath"; threshold:type both, track by_src, count 10, seconds 2; dsize:>5000; sid:1000001;)

 

- (옵션) threshold: 설정한 시간동안 동일한 패킷이 일정 수 발생하게 되면 경고나 알림 기록

⭐ Ping of Death: ICMP Echo Request 패킷을 조작하여 정상 크기를 초과하는 패킷을 생성, 전송하는 DoS 공격의 한 종류

 

2. DoS 공격 시도

$ hping3 192.168.100.20 --icmp --flood

※ --flood: 최대 속도로 ICMP 패킷을 전송, dst에 대량의 ICMP Echo Request 패킷을 연속적으로 보내게 됨 

-> dst의 네트워크 리소스를 고갈시키고 응답 지연 또는 서비스 중단 유발 가능

 

 

 

응용 계층(FTP) 기반 탐지

 

1. 와이어샤크 실행

 

2. FTP 서버 연결 시도

$ ftp 192.168.100.20

 

 

3. 와이어샤크에서 FTP의 TCP Stream 확인

- FTP ID와 PW가 그대로 노출됨 -> xubuntu 계정 취약성

※ 윈도우 파일질라는 자동으로 암호화

 

 

4. Snort 룰 작성하고, 다시 ftp 접속 시도

$ sudo vim /etc/snort/rules/local.rules

alert tcp any any -> any 21 (msg:"Login Xubuntu"; content:"user xubuntu"; nocase; sid:1000001;)

- (옵션) content: 패킷 페이로드 부분의 문자 탐색

- (옵션) nocase: 대소문자 구분 없음 

 

 

다시 kali에서 ftp 접속을 시도하면, 아래와 같이 탐지됨

 

첫번째 로그인 잘못 입력 후, 다시 재로그인해서 로그 두 번 기록

 

5. (파일 다운로드 탐지 실습) 홈 디렉토리(~)에서 test 파일 생성 후 security 입력 저장

 

 

6. Snort와 와이어샤크 재실행

 

7. ftp 서버 재연결, get으로 다운로드

ftp> get test

 

8. 와이어샤크에서 TCP Stream 확인 

- get이 RETR로 변경되어 기록됨을 알 수 있음 

 

 

9. 이를 탐지할 수 있도록 local.rules에 두번째 룰 추가

alert tcp any any -> any 21 (msg:"Command GET"; content:"retr test"; nocase; sid:1000002;)

 

 

10. Snort 실행하고, 다시 ftp 접속해보기

- Login Xubuntu 로그와 Command GET 로그가 모두 출력됨을 확인 

 

 

11. 아예 로그인 차단시키기 위해 룰 수정 (reject)

 

 

12. Wireshark와 Snort 실행, FTP 재접속 

-> 룰을 reject로 수정했지만, 차단되지 않고 여전히 로그인 가능함을 확인 

 

 

13. Wireshark 확인

- reject를 했지만, 다시 재접속을 시도하는 걸 볼 수 있음.

- 연결이 끊기지 않고 계속 유지된 것이 문제 

 

Kali 와이어샤크 - RST, ACK
xubuntu 와이어샤크

 

14. 룰 수정 - 아래처럼 접속 자체를 차단했더니 ftp 접속이 아예 불가

 

 

 

 

응용 계층(HTTP) 기반 탐지

 

1. Wireshark 실행 후, (Kali) Firefox 192.168.100.20 접속

 

2. Wireshark에서 FTP TCP Steram(HTTP) 확인

- GET / HTTP/1.1 확인

 

3. Snort local.rules 작성

alert tcp any any -> any any (msg:"http connection"; content:"http/1.1"; nocase; sid:1000001;)

- 페이로드에 http/1.1이 있다면 로그 출력 

 

4. Snort 실행, 웹 브라우저 재접속

- 로그가 아예 출력되지 않거나, 1개 정도 출력됨 

-> 클라이언트의 웹 캐시 정보로 인해 서버에 접속 요청 없이 바로 화면이 보여진 것 (보통 캐시로 인해 클라이언트에 반영이 안되는 경우가 잦음) 

 

5. 웹 브라우저에서 캐시 삭제

- Firefox > Setting > Privacy&Security > Clear Data(쿠키, 캐시) > Clear

 

6. Snort 로그 확인

- 로그 3개 정도 출력됨 (요청, 응답 등으로 인해 많은 로그 발생)

 

 

 

응용 계층(Telnet) 기반 탐지

 

1. (Xubuntu) 와이어샤크 실행

 

2. (kali) telnet 접속

$ telnet 192.168.100.20

 

3. 와이어샤크에서 Telnet TCP stream 확인

- xxuubbuunnttuu처럼 특이하게 주고받는 것을 확인 가능 -> ID로 감지하는 건 어려움.

-> 따라서 Welcome같은 일반적인 문자열로 추출해서 감지하려 함

 

4. local.rules 작성

alert tcp any any <> any any (msg:"Telnet Connection"; content:"welcome"; nocase; sid:1000001;)

 

5. Snort를 실행하고, 다시 telnet 접속

⭐ 접속은 잘 되는데, 탐지 로그가 뜨지 않음 -> 탐지 실패

 

6. 와이어샤크에서 페이로드 재확인 후 룰 추가 

- 우측 상단의 DISPLAY 페이로드 이용

- 룰 추가

alert tcp any any -> any 23 (msg:"Telnet Connection"; content:"display"; nocase; sid:1000002;)

 

7. Snort 재실행, telnet 재접속 

- 여전히 탐지 실패 

 

8. 룰 추가

- 가장 기본적인 구조로 롤 추가

alert tcp any any -> any 23 (msg:"Telnet Connection"; sid:1000003;)

23번 포트에 대해서만 감지하도록 !

 

9. Snort 재실행, telnet 재접속

- 탐지 성공

- 1000001과 1000002 탐지 실패 이유: 원래는 로그가 나오는 게 정상, 아마 telnet23 버그가 원인으로 예측됨 

 

 

 

응용 계층(SSH) 기반 탐지

 

1. 와이어샤크 실행

2. SSH 접속

3. 와이어샤크에서 FTP의 TCP Stream(SSH) 확인

4. SSH 패킷 Payload 부분 SSH-2.0 중, "2.0"만 탐지하기 위한 offset과 depth 작성

- 페이로드가 암호화되어 있어 탐지할 정보가 적음

alert tcp 192.168.100.10 any -> 192.168.100.20 any (msg:"SSH-2.0 Connection"; content:"2.0"; offset:4; depth:3; sid:1000001)

- offset: 페이로드에서 패턴 매칭 시작 위치 (0 기준)

- depth: 페이로드에서 패턴 매칭 끝 위치 (offset 기준)

 

 

 

 

과정 정리

 

1. 공격 선정

2. 패킷 모니터링(와이어샤크)

3. 데이터 수집

4. 분석(패턴)

5. 룰 작성

6. 검증

'Network' 카테고리의 다른 글

[FRP] RDP, FRP 설치  (1) 2023.06.22
[Snort] 개념 / 설치 / FTP  (1) 2023.06.02
Firewall (1)  (0) 2021.12.20
Sniffing and Spoofing  (0) 2021.10.25
DNS and DNS Attack  (0) 2021.10.24