IP 주소와 Port 번호를 기반으로 필터링 정책(방화벽 룰 셋)에 따라 패킷 필터링을 수행하는 보안 장비


Iptables is a powerful Linux utility that allows system administrators to configure the kernel’s built-in firewall.

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- kali.linux anywhere tcp flags:RST/RST
$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
368 15164 DROP tcp -- any any kali.linux anywhere tcp flags:RST/RST
┌──(kali㉿kali)-[~]
└─$ sudo iptables -A OUTPUT -d "192.168.40.130" -j DROP
┌──(kali㉿kali)-[~]
└─$ curl http://bee.box ⇐ bee.box로 접속되지 않는 것을 확인
# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
~~~~~~~~~~~~~~
특정 네트워크 ID로부터 온 패킷을 허용
# iptables -A INPUT 2 -s 192.168.1.0/24 -j ACCEPT
~
인바운드 두번째 규칙으로 추가
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
~~~~~~~~~~~~~~~~~
TCP 프로토콜의 22번 포트(SSH)의 접속을 허용
┌──(kali㉿kali)-[~]
└─$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- kali.linux anywhere tcp flags:RST/RST
DROP all -- anywhere bee.box
┌──(kali㉿kali)-[~]
└─$ sudo iptables -D OUTPUT 2 ⇐ 삭제할 체인과 규칙 번호를 입력
┌──(kali㉿kali)-[~]
└─$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- kali.linux anywhere tcp flags:RST/RST
┌──(kali㉿kali)-[~]
└─$ sudo iptables-save > ./iptables.rules
┌──(kali㉿kali)-[~]
└─$ cat ./iptables.rules
# Generated by iptables-save v1.8.9 (nf_tables) on Mon Mar 25 20:44:19 2024
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -s 192.168.40.129/32 -p tcp -m tcp --tcp-flags RST RST -j DROP
COMMIT
# Completed on Mon Mar 25 20:44:19 2024
┌──(kali㉿kali)-[~]
└─$ sudo iptables-restore < ./iptables.rules
https://drive.google.com/file/d/1_5ayAtNWDMQLg9jsKJLEJoTLKZfqooa4/view?usp=drive_link


#1 특정 IP 주소에서 오는 또는 주소로 가는 트래픽을 수집
host 10.3.1.1
not host 10.3.1.1
src host 10.3.1.1
dst host 10.3.1.1
host 10.3.1.1 or host 10.3.1.2
host www.test.com

net 10.3.0.0/16
net 10.3.0.0 mask 255.255.0.0
ipv6 net 2406:da00:ff00::/64
src net 10.3.0.0/16
dst net 10.3.0.0/16
not dst net 10.3.0.0/16
ip broadcast
ip multicast
ether host AA:BB:CC:DD:EE:FF
ether src AA:BB:CC:DD:EE:FF
ether dst AA:BB:CC:DD:EE:FF
not ether host AA:BB:CC:DD:EE:FF
port 53
not port 53
port 80
udp port 67
tcp port 21
portrange 1-80
tcp portrange 1-80
port 20 or port 21
host 10.3.1.1 and port 80
host 10.3.1.1 and not port 80
udp src port 68 and udp dst port 67 ⇐ udp 68 에서 udp 67 로 가는 트래픽

연산자 영어표기 예
== eq ip.src == 10.2.2.2
!= ne tcp.srcport != 80
> gt frame.time_relavive > 1
< lt tcp.window_size < 1400
>= ge dns.count.answers >= 10
<= le ip.ttl <= 10
contains http container "GET"
ip.addr == 10.3.1.1
!ip.addr == 10.3.1.1
ip.src == 10.3.1.1
ip.dst == 10.3.1.1
ip.host == www.test.com
ip.addr > 10.3.0.1 && ip.addr < 10.3.0.5
(ip.addr >= 10.3.0.1 && ip.addr <= 10.3.0.6) && !ip.addr == 10.3.0.3
⇐ 10.3.0.1 ~ 10.3.0.6 범위의 트래픽 중 10.3.0.3 을 제외한 트래픽
ip.addr == 10.3.0.0/16
ip.addr == 10.3.0.0/16 && !ip.addr = 10.3.0.3
!ip.addr == 10.3.0.0/16 && !ip.addr = 10.2.0.0/16
캡처 필터 디스플레이 필터
host 172.16.1.1 ip.host == 172.16.1.1
src host 172.16.1.1 ip.src == 172.16.1.1
dst host 172.16.1.1 ip.dst == 172.16.1.1
port 8080 tcp.port == 8080
!port 8080 tcp.port != 8080
관심 있는 데이터를 빠르게 분석 가능

kali 가상머신에서 wireshark를 실행하고, bee.box (접속 후 로그인), google.com, naver.com으로 접속한 후 패킷 캡처를 종료 후
(1) bee.box로 연결 요청한 트래픽(SYN 플래그가 설정된 트래픽)을 확인하는 필터

(2) bee.box 사이트로 POST 요청한 트래픽을 확인하는 필터

(3) bee.box 사이트로 로그인할 때 사용한 요청 파라미터 정보를 확인









$ tshark -h
TShark (Wireshark) 4.2.0 (Git v4.2.0 packaged as 4.2.0-1)
Dump and analyze network traffic.
See https://www.wireshark.org for more information.
Usage: tshark [options] ...
Capture interface:
-i <interface>, --interface <interface>
name or idx of interface (def: first non-loopback)
-f <capture filter> packet filter in libpcap filter syntax
-s <snaplen>, --snapshot-length <snaplen>
packet snapshot length (def: appropriate maximum)
-p, --no-promiscuous-mode
don't capture in promiscuous mode
-I, --monitor-mode capture in monitor mode, if available
-B <buffer size>, --buffer-size <buffer size>
size of kernel buffer (def: 2MB)
... 생략 ...
$ tshark -D
1. eth0
2. any
3. lo (Loopback)
4. bluetooth0
5. bluetooth-monitor
6. nflog
7. nfqueue
8. dbus-system
9. dbus-session
10. ciscodump (Cisco remote capture)
11. dpauxmon (DisplayPort AUX channel monitor capture)
12. randpkt (Random packet generator)
13. sdjournal (systemd Journal Export)
14. sshdump (SSH remote capture)
15. udpdump (UDP Listener remote capture)
16. wifidump (Wi-Fi remote capture)
$ tshark -i 1 ⇐ 1번 NIC의 트래픽을 캡쳐
Capturing on 'eth0'
1 0.000000000 kali.linux → bee.box TCP 74 50962 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=495650891 TSecr=0 WS=128
2 0.001559399 bee.box → Broadcast ARP 60 Who has 192.168.40.129? Tell 192.168.40.130
3 0.001579685 kali.linux → bee.box ARP 42 192.168.40.129 is at 00:0c:29:ca:54:d8
4 0.001700100 bee.box → kali.linux TCP 74 80 → 50962 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM TSval=71649699 TSecr=495650891 WS=64
5 0.001740862 kali.linux → bee.box TCP 66 50962 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=495650892 TSecr=71649699
6 0.002120977 kali.linux → bee.box HTTP 572 GET /bWAPP/login.php HTTP/1.1
7 0.002282784 bee.box → kali.linux TCP 66 80 → 50962 [ACK] Seq=1 Ack=507 Win=6912 Len=0 TSval=71649700 TSecr=495650893
8 0.003608975 bee.box → kali.linux TCP 2962 HTTP/1.1 200 OK [TCP segment of a reassembled PDU]
9 0.003656759 kali.linux → bee.box TCP 66 50962 → 80 [ACK] Seq=507 Ack=2897 Win=63488 Len=0 TSval=495650894 TSecr=71649700
10 0.003815021 bee.box → kali.linux HTTP 1604 HTTP/1.1 200 OK (text/html)
$ tshark -i 1 -w tshark.pcapng ⇐ 캡쳐한 트래픽을 파일에 저장
Capturing on 'eth0'
52 ^C
$ tshark -r tshark.pcapng ⇐ 캡쳐 파일의 내용을 확인
1 0.000000000 kali.linux → bee.box TCP 74 57766 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=495875753 TSecr=0 WS=128
2 0.000249041 bee.box → kali.linux TCP 74 80 → 57766 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM TSval=71705918 TSecr=495875753 WS=64
3 0.000290779 kali.linux → bee.box TCP 66 57766 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=495875753 TSecr=71705918
4 0.002774296 kali.linux → bee.box HTTP 572 GET /bWAPP/login.php HTTP/1.1
5 0.003096659 bee.box → kali.linux TCP 66 80 → 57766 [ACK] Seq=1 Ack=507 Win=6912 Len=0 TSval=71705919 TSecr=495875756
6 0.004841479 bee.box → kali.linux HTTP 4500 HTTP/1.1 200 OK (text/html)
7 0.004979293 kali.linux → bee.box TCP 66 57766 → 80 [ACK] Seq=507 Ack=4436 Win=62080 Len=0 TSval=495875758 TSecr=71705919
8 0.009162178 kali.linux → bee.box TCP 66 57766 → 80 [FIN, ACK] Seq=507 Ack=4436 Win=64128 Len=0 TSval=495875762 TSecr=71705919
9 0.009477852 bee.box → kali.linux TCP 66 80 → 57766 [ACK] Seq=4436 Ack=508 Win=6912 Len=0 TSval=71705920 TSecr=495875762
$ tshark -i 1 -a files:3 -b duration:10 -w tshark_files.pcapng
~~~~~~~~~~ ~~~~~~~~~~~~~~
| |
| +-- 10초 후 다음 파일을 생성
+-- 3개 파일 수집 후 자동 정지
Capturing on 'eth0'
1928
$ ls -l tshark_files*
-rw------- 1 kali kali 170304 Mar 26 01:57 tshark_files_00001_20240326015704.pcapng
-rw------- 1 kali kali 2188976 Mar 26 01:57 tshark_files_00002_20240326015714.pcapng
-rw------- 1 kali kali 1610200 Mar 26 01:57 tshark_files_00003_20240326015724.pcapng
~~ 10초 간격으로 생성된 것을 확인
$ tshark -i 1 -f "tcp port 443" -w tshark_tcp_port_443.pcapng
Capturing on 'eth0'
693 ^C
$ ls -l tshark_tcp_port_443.pcapng
-rw------- 1 kali kali 1647544 Mar 26 02:01 tshark_tcp_port_443.pcapng
$ tshark -i 1 -f "tcp port 443 and host 192.168.40.1" -w tshark_tcp_port_443.pcapng
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
패킷 필터
$ tshark -r tshark.pcapng -Y "http.request.method == GET"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
디스플레이 필터
4 0.002774296 kali.linux → bee.box HTTP 572 GET /bWAPP/login.php HTTP/1.1
$ tshark -i 1 -qz hosts ⇐ 접속한 호스트 목록을 확인
Capturing on 'eth0'
^C1140 packets captured
# TShark hosts output
#
# Host data gathered from the temporary capture file
61.247.194.89 s1.e.navercdn.com
192.168.40.129 kali.linux
61.247.194.151 s2.e.navercdn.com
142.250.76.130 adservice.google.com
183.111.26.166 ntm.pstatic.net.static.gscdn.net
61.247.194.143 s2.e.navercdn.com
110.93.154.77 shopsquare.naver.com.nheos.com
117.52.137.162 lcs.naver.com.nheos.com
61.247.194.92 s1.e.navercdn.com
61.247.194.154 s2.e.navercdn.com
$ tshark -r tshark.pcapng -qz hosts
# TShark hosts output
#
# Host data gathered from tshark.pcapng
192.168.40.129 kali.linux
192.168.40.130 bee.box
실제 공격 방법을 결정하거나 공격에 이용될 수 있는 네트워크 구조, 시스템이 제공하는 서비스 등의 정보를 얻기 위해 수행되는 방법
Port Scan
|
+------------+------------+
| |
Open Scan Stealth Scan
| |
+-- TCP Scan +-- FIN Scan
+-- UDP Scan +-- XMAX Scan
+-- NULL Scan
스캔 방법에 따른 nmap 옵션 설명
-------------------------- ----------------------------------
-sT connect() 함수를 이용한 Open Scan ⇒ TCP Open Scan
-sS 세션을 성립시키지 않고 TCP SYN 스캔 ⇒ TCP Half-Open Scan
-sF FIN 패킷을 이용한 스캔 ⇒ FIN Scan
-sN Null 패킷을 이용한 스캔 ⇒ NULL Scan
-sX XMAS 패킷을 이용한 스캔 ⇒ XMAX Scan
-sU UDP 포트 스캔 ⇒ UDP Scan
-sA ACK 패킷에 대한 TTL 값을 분석
Attacker Target $ nmap -sT TARGET_IP [ -p 포트번호 ]
SYN
----------------------> . 포트가 열려 있는 경우 SYN/ACK 패킷을 수신
SYN/ACK . SYN/ACK에 ACK 패킷을 전송함으로써 연결을 완료
<---------------------- . 스캔하고자 하는 포트에 접속을 시도해 완전한 TCP 연결을 맺어
ACK 신뢰성 있는 결과를 얻음
----------------------> . 속도가 느리고 로그를 남기므로 탐지가 가능하다는 단점이 있음
Attacker Target
SYN
---------------------->
RST/ACK
<----------------------
Attacker Target
SYN
---------------------->
$ nmap -sT bee.box
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 02:57 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.0025s latency).
Not shown: 983 closed tcp ports (conn-refused)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
666/tcp open doom
3306/tcp open mysql
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp open http-proxy
8443/tcp open https-alt
9080/tcp open glrpc
Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

bee@bee-box:~$ sudo iptables -A INPUT -p tcp --tcp-flags SYN SYN --dport 8080 -j DROP
bee@bee-box:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:webcache flags:SYN/SYN
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
kali 가상머신에서 beebox 가상머신으로 포트 스캔
$ nmap -sT bee.box
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 03:14 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.00053s latency).
Not shown: 983 closed tcp ports (conn-refused)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
666/tcp open doom
3306/tcp open mysql
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp filtered http-proxy
8443/tcp open https-alt
9080/tcp open glrpc
Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds

Attacker Target $ nmap -sS TARGET_IP [ -p 포트번호 ]
SYN
----------------------> . 세션에 대한 로그가 남는 TCP Full Open Scan을 보완하기 위한 기법
SYN/ACK . 공격 대상으로부터 SYN/ACK 패킷을 받으면 공격자는 RST 패킷을 보내서
<---------------------- 연결을 끊음
RST . 세션을 완전히 연결하지 않음
----------------------> . 로그가 남지 않아 추적이 불가능하도록 하는 기법
Attacker Target
SYN
---------------------->
RST/ACK
<----------------------
Attacker Target
SYN
---------------------->
$ sudo nmap -sS bee.box
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 03:44 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.010s latency).
Not shown: 983 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
666/tcp open doom
3306/tcp open mysql
5901/tcp open vnc-1
6001/tcp open X11:1
8080/tcp filtered http-proxy
8443/tcp open https-alt
9080/tcp open glrpc
MAC Address: 00:0C:29:3E:BA:70 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 1.45 seconds

Attacker Target $ nmap -sF TARGET_IP [ -p 포트번호 ]
FIN
----------------------> . TCP 헤더에 FIN 플래그를 설정해서 공격 대상에게 메시지를 전송
. 포트가 열려 있는 경우, 응답이 없음
Attacker Target
FIN
---------------------->
RST/ACK
<----------------------
####Target 서버에 차단정책으로 차단되어 있는 경우
Attacker Target
FIN
---------------------->
Attacker Target $ nmap -sX TARGET_IP [ -p 포트번호 ]
UGR,PSH,FIN
----------------------> . TCP 헤더에 UGR, PSH, FIN 플래그를 동시에 설정해서 전송
. 포트가 열려 있는 경우, 응답이 없음
Attacker Target
UGR,PSH,FIN
---------------------->
RST/ACK
<----------------------
Attacker Target
UGR,PSH,FIN
---------------------->
Attacker Target $ nmap -sN TARGET_IP [ -p 포트번호 ]
null
----------------------> . TCP 헤더에 플래그를 설정핮디 않고 전송
. 포트가 열려 있는 경우, 응답이 없음
Attacker Target
null
---------------------->
RST/ACK
<----------------------
Attacker Target
null
---------------------->
$ sudo nmap -sF bee.box
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 04:00 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.00043s latency).
Not shown: 983 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open|filtered ftp
22/tcp open|filtered ssh
25/tcp open|filtered smtp
80/tcp open|filtered http
139/tcp open|filtered netbios-ssn
443/tcp open|filtered https
445/tcp open|filtered microsoft-ds
512/tcp open|filtered exec
513/tcp open|filtered login
514/tcp open|filtered shell
666/tcp open|filtered doom
3306/tcp open|filtered mysql
5901/tcp open|filtered vnc-1
6001/tcp open|filtered X11:1
8080/tcp open|filtered http-proxy
8443/tcp open|filtered https-alt
9080/tcp open|filtered glrpc
MAC Address: 00:0C:29:3E:BA:70 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 1.47 seconds

$ sudo nmap -sX bee.box
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 04:02 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.017s latency).
Not shown: 983 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open|filtered ftp
22/tcp open|filtered ssh
25/tcp open|filtered smtp
80/tcp open|filtered http
139/tcp open|filtered netbios-ssn
443/tcp open|filtered https
445/tcp open|filtered microsoft-ds
512/tcp open|filtered exec
513/tcp open|filtered login
514/tcp open|filtered shell
666/tcp open|filtered doom
3306/tcp open|filtered mysql
5901/tcp open|filtered vnc-1
6001/tcp open|filtered X11:1
8080/tcp open|filtered http-proxy
8443/tcp open|filtered https-alt
9080/tcp open|filtered glrpc
MAC Address: 00:0C:29:3E:BA:70 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 1.48 seconds

$ sudo nmap -sN bee.box
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-26 04:08 EDT
Nmap scan report for bee.box (192.168.40.130)
Host is up (0.010s latency).
Not shown: 983 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open|filtered ftp
22/tcp open|filtered ssh
25/tcp open|filtered smtp
80/tcp open|filtered http
139/tcp open|filtered netbios-ssn
443/tcp open|filtered https
445/tcp open|filtered microsoft-ds
512/tcp open|filtered exec
513/tcp open|filtered login
514/tcp open|filtered shell
666/tcp open|filtered doom
3306/tcp open|filtered mysql
5901/tcp open|filtered vnc-1
6001/tcp open|filtered X11:1
8080/tcp open|filtered http-proxy
8443/tcp open|filtered https-alt
9080/tcp open|filtered glrpc
MAC Address: 00:0C:29:3E:BA:70 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds

다음 패캣 내용을 보고 진행 중으로 예상되는 공격 방법과 그에 대한 판단 근거를 설명하시오.

Attacker Target
UDP
---------------------->
UDP
<----------------------
Attacker Target
UDP
---------------------->
ICMP Unreachable
<----------------------
Attacker Target
UDP
---------------------->