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를 했지만, 다시 재접속을 시도하는 걸 볼 수 있음.
- 연결이 끊기지 않고 계속 유지된 것이 문제
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 |