OpenWrt: DDos ๊ณต๊ฒฉ์ Snort ๋ก ํ์ง
OpenWrt ์์ Snort ๋ฅผ ์ฌ์ฉํ์ฌ DDos ๊ณต๊ฒฉ์ ํ์งํด๋ณด์๋ค.
์คํ ํ๊ฒฝ ์ค์
์ฐ์ , Docker ๋ก ์ค์ต ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ค.
๋ค์์ ๋ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
- OpenWrt (2021.07.16 - [SECURITY/OpenWrt] - OpenWrt ๋ฅผ docker ๋ก :: OpenWrt, SDK, Package, ipk, scp)
- Kali Linux (https://www.kali.org/docs/containers/official-kalilinux-docker-images/)
(์์ธํ ์ค์ ๋ฐฉ๋ฒ์ ์ ํฌ์คํ ๊ณผ Kali Linux ๊ณต์ docker images ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
๊ฐ๋จํ๊ฒ ๋ฐ๋ก ์ค์นํ๊ณ ๋์ด๊ฐ์๋ ค๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ ๋๋ค)
$ docker run -it openwrtorg/rootfs
$ docker run --tty --interactive kalilinux/kali-rolling /bin/bash
Kali Linux ๋ฅผ ๊ณต๊ฒฉ์๋ก ์ฌ์ฉํ์ฌ OpenWrt ์ DDos ๊ณต๊ฒฉ์ ๋ ๋ ค๋ณผ ๊ฒ์ด๋ค!
๋ค์๊ณผ ๊ฐ์ด ip ์ฃผ์๋ฅผ ๋จผ์ ํ์ธํด์ฃผ์.
OpenWrt ๋ 172.17.0.2 ์ด๊ณ , Kali linux ๋ 172.17.0.3 ์ด๋ค.


* ์ฒ์ Kali Linux ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๋ฉด, ifconfig ๋ hping3 ๊ฐ์ ํด์ด ์๋ ์ํ์ด๋ค.
๋ฐ๋ผ์ ๋ค์ ๋ช ๋ น์ด๋ค๋ก ์ค์นํด์ฃผ์.
# apt update
# apt install net-tools
# apt install hping3
OpenWrt ์ Snort ์ค์น
OpenWrt ์์๋ Snort ๊ณต์ ํจํค์ง๋ฅผ ์ง์ํ๋ค.
์ฆ, opkg ๋ก ์ค์นํ ์ ์๋ค!
$ opkg update #update repo
$ opkg install snort #install snort
(https://openwrt.org/docs/guide-user/services/snort)
์ค์ ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ช๊ฐ์ง ์ค์ ์ ํด์ค์ผ ํ๋ค.
snort.conf ํ์ผ์ ์ ์ค์ ํด๋ฌ์ผ ํ๋๋ฐ, ํด๋น ํ์ผ์ rules ํ์ผ์ ์์น ๋ฑ์ ์์ฑํด๋๋ Configuration ํ์ผ์ด๋ค.
Rules ํ์ผ๋ค์ ์์น์ IP ์ฃผ์ ๋ฑ์ ์์ ์ ๋ง๊ฒ ์ค์ ํด์ผ ํ๋ค.
ํด๋น ๋ด์ฉ์ OpenWrt - snort ๋ฌธ์์์ (์ ๋งํฌ) ์์ธํ ์ค๋ช ํด์ฃผ๊ณ ์์ผ๋, ๋ฉ๋ด์ผ์ ๋ง๊ฒ ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ค.
๋ฃฐ (rule) ์ค์
์์ ์ค๋ช ํ DDos ๊ณต๊ฒฉ ๊ธฐ๋ฒ๋ค์ ํ์งํ๊ธฐ ์ํ ๋ฃฐ์ local.rules ํ์ผ์ ์์ฑํ๋ค.
๋ฃฐ์ ํํ๋ ๋ฌ๋ผ์ง ์ ์์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ๋ฃฐ๋ค์ ์์ฑํด๋๋ค.
/etc/snort/rules/local.rules
# SYN Flooding
alert tcp any any -> 172.17.0.2 80 (msg:"SYN-Flooding-Detection"; flags: S; threshold: type threshold, track by_dst, count 5, seconds 10; sid: 1000004;)
# UDP Flooding
alert udp any any -> 172.17.0.2 any (msg:"UDP-Flooding-Detection"; threshold: type threshold, track by_dst, count 10, seconds 1; sid: 1000002;)
# ICMP Flooding
alert icmp any any -> 172.17.0.2 any (msg:"ICMP-Flooding-Detection"; threshold: type threshold, track by_dst, count 10, seconds 1; sid: 1000003;)
๊ฒฐ๊ณผ
์์ ๊ฐ์ด rule ์ ์ค์ ํ rules ํ์ผ๊ณผ ํจ๊ป snort ๋ฅผ ์คํ์ํจ๋ค.
snort -v -c /etc/snort/rules/local.rules --daq-dir /usr/lib/daq

SYN Flooding ์ค์ต
๊ทธ๋ฆฌ๊ณ Kali Linux ์์ hping3 ๋ก SYN ํจํท์ ๋ณด๋ธ๋ค.
$ hping3 -S --rand-source 172.17.0.2 -p 80 --faster
* hping3 ์ฌ์ฉ๋ฒ
-S: SYN ํจํท์ ๋ณด๋ด๋ผ
-i u50: ์ด๋น 50๊ฐ์ ํจํท
-c 100: 100๊ฐ์ ํจํท๋ง ๊ณต๊ฒฉ
--flood: Flooding
--rand-source: Source IP ๋ฅผ Random ํ๊ฒ ๋ณ๊ฒฝํ์ฌ ๊ณต๊ฒฉ
--faster: 1์ด์ 100๊ฐ์ ํจํท์ ๋ณด๋ด๋ผ
--fast: 1์ด์ 10๊ฐ์ ํจํท์ ๋ณด๋ด๋ผ
-1 ๋๋ --icmp : ICMP ๋ชจ๋
-2 ๋๋ --udp: UDP ๋ชจ๋, ์์จ์ฃผ๋ฉด TCP

๋ณด๋ด๊ธฐ ์์ํ๋ฉด, OpenWrt [snort] ์์ ๋ฐ์์ด ์จ๋ค.

์คํ์ํค๋ค ์ข ๋ฃํ๋ฉด, ๋ฐ์ ํจํท ๋ถ์ ๋ด์ญ์ ๋ณด์ฌ์ฃผ๊ณ Snort ๊ฐ ์ข ๋ฃํ๋ค.

ํด๋น Alert ๋ก๊ทธ๋ ๋ค์์ ๊ฒฝ๋ก์ ์๋ค.
/var/log/snort

.log. ํ์ผ๋ค์ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ค์ด๊ณ , alert ๋ ํ ์คํธ ํ์์ผ๋ก ๋ ํ์ผ์ด๋ค..[?]
alert ํ์ผ์ ํ์ธํด๋ณด๋ฉด, ์์ฑํ rules ์ ๋ง๊ฒ alert ๊ฐ ๊ธฐ๋ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

UDP Flooding ์ค์ต
Kali Linux ๋ก UDP ํจํท์ ๋ณด๋๋ค.
์ด๋, 1์ด์ 50๊ฐ ๊ทธ๋ฆฌ๊ณ ์ด 100๊ฐ์ ํจํท์ ๋ณด๋ธ๋ค๋ ์กฐ๊ฑด์ ์ถ๊ฐํ์ฌ ๋ณด๋๋ค.
$ hping3 172.17.0.2 --udp --rand-source -i u50 -c 100

์ด๋ฅผ ๋ณด๋ด๋ฉด, Snort ๊ฐ ์คํ๋๊ณ ์๋ OpenWrt ์์๋ ๋ค์๊ณผ ๊ฐ์ด UDP ํจํท์ด ๋ค์ด์จ ๊ฒ์ ํ์ธํ ์ ์๋ค.

alert log ํ์ผ์ ํ์ธํด๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ์ด UDP-Flooding-Detection ์ด ์ ํ์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ hping3 ๋ก 100๊ฐ์ ํจํท์ ๋ณด๋๊ธฐ ๋๋ฌธ์, ์ด 10๊ฐ์ alert log ๋ฅผ ํ์ธํ ์ ์๋ค.
(10๊ฐ์ ํจํท๋ง๋ค alert ํ๋๋ก ๋ฃฐ์ ์ค์ ํ๊ธฐ ๋๋ฌธ)

ICMP Flooding ์ค์ต
๋ง์ง๋ง์ผ๋ก ICMP Flooding ์ ์ค์ตํ๊ธฐ ์ํด Kali Linux ๋ก ICMP ํจํท์ ๋ณด๋๋ค.
UDP Flooding ์ค์ต๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก 1์ด์ 50๊ฐ ๊ทธ๋ฆฌ๊ณ ์ด 100๊ฐ์ ํจํท์ ๋ณด๋ธ๋ค๋ ์กฐ๊ฑด์ ์ถ๊ฐํ์ฌ ๋ณด๋๋ค.

์คํ์ํค๋ฉด, Snort ๊ฐ ์คํ๋๊ณ ์๋ OpenWrt ์์๋ ๋ค์๊ณผ ๊ฐ์ด ICMP ํจํท์ด ๋ค์ด์จ ๊ฒ์ ํ์ธํ ์ ์๋ค.

๊ทธ๋ฆฌ๊ณ alert log ํ์ผ์ ํ์ธํด๋ณด๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ICMP-Flooding-Detection ์ด ์ ํ์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด ์ญ์ 100๊ฐ์ ํจํท์ ๋ณด๋๊ธฐ ๋๋ฌธ์, ์ด 10๊ฐ์ alert log ๋ฅผ ํ์ธํ ์ ์๋ค.

์ด์์ผ๋ก OpenWrt, Snort ๊ทธ๋ฆฌ๊ณ Kali Linux ๋ฅผ ํ์ฉํ์ฌ DDos ๊ณต๊ฒฉ์ ๋ฐ์์ํค๊ณ ์ด๋ฅผ ํ์งํด๋ณด์๋ค.
๋ฒ์ธ
tcpdump ๋ก๋ ํจํท ํ์ธ๊ฐ๋ฅ.

* tcpdump ๋ฅผ OpenWrt ์์ ์ฐ๋ ค๋ฉด (https://openwrt.org/docs/guide-user/firewall/misc/tcpdump_wireshark)
# opkg update
# opkg install tcpdump
๋ฅผ ์คํํด์ฃผ๋ฉด ์ ์ค์น๋๋ค.