Dos 공격이란?
- 시스템이나 네트워크의 구조적인 취약점을 이용하거나 대량의 데이터를 보내어 타깃 시스템이 정상적인 서비스를 하지 못하도록 마비시키는 공격
- 1 대 1 공격 방식이다.
Dos 공격의 종류
- 물리적인 파괴(디스크 및 시스템 파괴)
- 시스템 자원 공격(CPU, MEM, DISK의 자원고갈)
- 네트워크 자원 공격(대역폭 고갈)
1. Ping Of Death(POD)
- 최대 IP 패킷 사이즈보다 큰 Ping 패킷에 대한 검사를 하지 않음으로써 문제가 발생한다.
- 타깃은 해당 쪼개진 패킷을 재조합하는 과정에서 buffer overflow 및 시스템 충돌이 발생한다
2. Land Attack
- 자신으로부터 전달된 TCP SYN 패킷에 대해 검증 없이 스스로에게 응답을 함으로써 발생한다.
- 출발지 주소/포트 와 목적지 주소/포트가 같은 곳으로 설정한다.
- SYN Flooding 공격과 같이 타깃의 자원 고갈로 인한 서비스 장애를 유발한다.
- POD공격과 Land Attack공격은 현재 보안 기술이 적용되어있어 사용되지 않는다.
3. SYN Flooding 공격
- TCP Three-way Handshake 과정에서 타깃은 SYN 패킷을 받은 후 Backlog Queue의 자원을 할당해 주며, 이에 대한 SYN/ACK 응답을 한 후 ACK 패킷이 들어올 때까지 기다린다.
- 이러한 TCP/IP 프로토콜의 구조적인 문제는 다수의 SYN 요청으로 인한 Backlog Queue의 자원을 낭비하여 일반 유저 들에 대한 서비스 장애를 초래 (Half-Open을 저장할 공간이 남아있지 않게 된다.)
Kali Linux에서 SYN Flooding 공격
네트워크 구성
- Kali Linux(2.2.2.1)에서 Web Server(10.1.250.3)에게 STN Flooding 공격을 실시하려고 한다.
1. 공격전 WebServer 확인
- netstat -an 명령어로 현재 TCP 연결 상태를 확인한다.
- 대부분의 TCP가 LISTENING 상태인 것을 확인할 수 있다.
2. Kali Linux에서 hping3 공격(SYN Flooding)
--rand-source: 랜덤한 출발지 주소
www.ictsec.com: 목적지 주소
-p 80: 포트번호 80번으로 전송
-S: SYN Flooding 공격
3. Wireshack로 패킷 확인
- 랜덤한 출발지 IP에서 SYN Flooding이 발생하는 것을 확인할 수 있다.
4. Web Server에서 확인
- netstat an 명령어를 사용하면 SYN_RECEIVED 메시지가 있는 것을 확인할 수 있다.
Dos 공격 방어 방법
- Dos 공격 방어 방법은 TCP Intercept, CoPP 2가지 방법이 존재한다.
1. TCP Intercept
- SYN Flooding 공격을 방어할 수 있는 방법 중 하나이다.
- SYN Flooding 공격은 Firewall, L4 / L7 스위치에서 방어할 수 있다.
- L4/L7 스위치의 TCP Delay Binding 기능을 활성화하면 SYN Flooding 공격이 발생됐을 때 서버에게 공격이 전달되지 않는다.
- TCP Delay Binding 기능을 L3 장비에서 구현한 것이 TCP Intercept이다.
- TCP Intercept 기능이 구성된 장비는 클라이언트와 서버 사이에서 TCP 3-Way-Handshakes 과정을 감시하는 것이 가능하다.
Intercept 모드
1. Default(기본) 모드
- L3 장비가 자신이 서버 인척 클라이언트와 TCP Connection을 맺고, 정상적으로 TCP Connection이 생성되면 (Established) 해당 Connection 정보를 서버에게 전달한다. (스위치가 중간자 역할을 수행한다.)
- Attacker가 마지막 Ack를 일정 시간 동안 전송하지 않을 경우 해당 Half-Open 상태를 서버에게 전달하지 않기 때문에 서버에게 부하를 주지 않는다.
DSW1, 2 스위치에 Intercept 모드 설정
conf t access-list 100 permit tcp any host 10.1.250.3 eq 80 ip tcp intercept mode intercept ip tcp intercept list 100 ip tcp intercept connection-timeout 30 |
패킷 확인
1. netstat -an 확인
- 스위치에서 차단하기 때문에 LISTENING 상태만 표시되게 된다.
2. WireShack 패킷 확인
- WebServer로 들어오는 패킷은 SYN Flooding이 발생하지 않는다.
- DSW1, 2로 들어오는 패킷은 SYN Flooding 공격이 발생하지만 RST 패킷을 보낸다.
3. show tcp intercept statistics 명령어 확인
- 연결이 허용되지 않는 것을 확인할 수 있다. (19 incomplete, 0 established connections)
2. Watch 모드
- Intercept 모드의 경우 L3 장비에 부담이 될 수 있다.
- Watch 모드를 사용할 경우 L3 장비가 대신 연결을 맺는 것이 아니라 클라이언트와 서버의 TCP 연결 과정을 감시하게 된다.
- 클라이언트가 전송해야 하는 마지막 ACK가 30초 이내에 전송되지 않는 경우 자신이 클라이언트 인척 서버에게 RST를 전송하여 연결을 빠르게 종료하도록 유도한다. (Timer 시간 조정 가능하다.)
DSW1, 2 스위치에 Watch 모드 설정
conf t access-list 100 permit tcp any host 10.1.250.3 eq 80 ip tcp intercept mode watch ip tcp intercept list 100 ip tcp intercept watch-timeout 30 |
access-list 100 permit tcp any host 10.1.250.3 eq 80: 출발지는 아무나 10.1.250.3 IP의 80번 포트로 가는 패킷을 허용한다.
ip tcp intercept mode watch: watch 모드로 설정한다.
ip tcp intercept list 100: access-list 100번을 watch 대상으로 설정한다.
ip tcp intercept watch-timeout 30: ACK 대기시간을 30초로 설정한다.
패킷 확인
1. show tcp intercept connection 확인
- STNRCVD, SYNSENT 패킷들이 W(Watch) 모드인 것을 확인할 수 있다.
2. Wireshack 패킷 확인
- 패킷을 확인하면 30초가 지나면 RST 패킷을 보내는 것을 확인할 수 있다.
- 이로써 Backlog Queue가 가득 차는 것을 어느 정도 방지할 수 있다.
2. CoPP(Control Plane Policing)
- Server가 아닌 Network Device(Router / Switch 등)를 대상으로 DoS 공격을 진행하는 경우 Copp를 사용하여 공격을 방어하는 것이 가능하다.
네트워크 구성도
- Attacker(Kali Linux)에서 CE Router로 공격을 시도하려고 한다.
- 공격자가 Network Device의 IP 주소를 대량의 Packet을 전송하게 되면 해당 Device는 Control Plane으로 Packet들을 처리하기 때문에 CPU 혹은 메모리 등에 과부하가 발생하게 된다.
- Control-Plane이 정상적으로 동작할 수 없기 때문에 트래픽 처리가 불가능해 질 수 있다.
★CE Router IP주소를 확인하는 방법(NMAP)을 알고싶다면 아래링크 클릭!★
https://peemangit.tistory.com/88
- 이를 방지 하기 휘해서 CoPP를 구성하는 것이 가능하다. CoPP가 적용된 L3 Device의 경우 Data PlaneControl Plane이 연결 통로(Punt)에 Policing을 적용하기 때문에 Control Plane으로 이동되는 트래픽의 을 제어하는 것이 가능하다.
CE Router 설정
- MQC(Modular QoS Command)를 사용한다.
conf t access-list 100 permit ip any host 1.1.100.1 class-map CoPP_Class match access-group 100 exit ! policy-map CoPP_Policy class CoPP_Class police 8000 conform-action transmit exceed-action drop exit exit control-plane service-policy input CoPP_Policy exit |
access-list 100 permit ip any host 1.1.100.1: 출발지는 아무나 1.1.100.1번 IP로 가는 패킷을 허용한다.
class-map CoPP_Class: CoPP_Class를 생성한다.
match access-group 100: CoPP_Class에 Access-group 100번을 추가한다.
policy-map CoPP_Policy: CoPP_Policy라는 정책을 생성한다.
class CoPP_Class: CoPP_Class를 적용한다.
police 8000 conform-action transmit exceed-action drop: 초당 8000bit를 허용하고 초과하는 패킷은 drop한다.
service-policy input CoPP_Policy: CoPP_Policy 정책을 적용한다.
방어 후 CE Router 확인
1. show processes cpu 명령어 사용
- CPU 부하율이 내려간 것을 확인할 수 있다. (가상 머신에서 구동해서 차이가 크지 않다.)
2. show policy-map control-plane 명령어 사용
- 정책 동작 확인을 해 보면 패킷들을 Drop 시키는 것을 확인할 수 있다.
'Hacking & Security > Kali Linux' 카테고리의 다른 글
[Kali Linux] CDP(Cisco Device Protocol) 공격 및 방어 (0) | 2019.11.12 |
---|---|
[Kali Linux] NMAP 사용법 (0) | 2019.11.11 |
[Kali Linux] IP Spoofing 공격과 방어(2/2) (0) | 2019.11.11 |
[Kali Linux] IP Spoofing 공격과 방어(1/2) (0) | 2019.11.08 |
[Kali Linux] DHCP(Dynamic Host Configuration Protocol) 공격과 방어(2/2) (0) | 2019.11.07 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊