네트워크 기반 공격의 종류
- 네트워크 공격: 스니핑, 스푸핑, 세션 하이재킹
- 서비스 거부 공격: Dos, DDos, Drdos
- 네트워크 스캐닝 공격: TCP Scan, UDP Scan
DoS
- Dos(Denial of Service) 정의
- 대상 시스템이 정상적인 서비스를 할 수 없도록 가용성을 떨어뜨리는 공격
- DDos 와의 차이점
- Dos는 공격자가 단일 컴퓨터를 이용해 공격함
- Dos 의 목표
- 네트워크 자원 소진: 네트워크 대역폭(BandWidth)를 소진시킴
- 시스템 자원 소진: CPU, 메모리, 디스크 등 자원에 과도한 부하를 발생시킴 (가용 디스크 자원 고갈, 가용 메모리 자원 고갈, 가용 프로세스 자원 고갈)
- 자원 파괴: 디스크, 데이터, 시스템을 파괴함
Dos 종류
Ping of Death
- Ping of Death 개요
- Ping 을 이용하여 ICMP 패킷을 정상적인 크기보다 아주 크게 만들어진 패킷을 전송하면 네트워크를 통해 라우팅되어 공격 네트워크에 도달하는 동안 아주 작은 조각(Fragment)로 나뉘게 되어 공격대상 시스템은 이렇게 작게 조각화된 패킷을 모두 처리해야해서 정상적인 Ping 보다 훨씬 많은 부하가 걸리게 되고, 시스템의 성능 저하가 된다.
- Ping of Death 대응법
- ICMP Ping에 대해 응답을 하지 않도록 설정한다.
sysctl -w net.ipv4.icmp_echo_ignore_all=1
Land Attack
- Land Attack 개요
- 출발지와 목적지가 같은 패킷을 만들어 공격 대상이 자기 자신에게 응답하도록 해 부하를 발생시킨다.
- Land Attack 대응법
- 침입차단시스템 또는 OS패치를 통해 출발지 주소와 목적지 주소가 동일한 패킷을 차단시킨다.
Smurf Attack
-
Smurf Attack 개요
- ICMP 프로토콜 취약점을 이용한 DoS공격 기법
- ICMP 패킷 소스 주소를 공격 대상 호스트로 위조한 후, 해당 패킷을 브로드캐스트 하면 근처의 호스트가 다량의 Echo Reply 를 공격 대상 호스트로 보낸다.
- ICMP Echo Request & ICMP Echo Reply
-
Smurf Attack 대응법
- 라우터에서 다른 네트워크에서 자신의 네트워크로 들어오는 IP브로드캐스트 패킷을 차단한다. (라우터에서 Direct Broadcast를 Disable시킨다.)
- 호스트는 IP브로드캐스트로 전송된 ICMP패킷에 대해 응답하지 않게 설정한다.
(유닉스) ndd -set /dev/ip ip_forward_directed_broadcasts 0
(리눅스) sysctl -w net.ipv4.icmp_echo_ignore_broadcast=1
Teardrop Attack
-
Teardrop Attack 개요
- 하나의 IP 패킷이 분할된 IP 단편의 offset 값을 서로 중첩되도록 조작하여 이를 재조합하는 공격 (Bonk, Boink와 유사)
- Bonk는 순서번호가 1인 단편을 계속 보냄
- Boink는 처음에는 정상적인 순서의 단편을 보내다가 점점 어긋난 순서번호의 패킷을 보냄(Bonk 개선된 버전)
- Fragmentation 의 취약점을 이용함, 이러한 공격을 Inconsistent Fragmentation 공격 이라함
-
IP Fragmentation
- 패킷의 크기가 MTU(Maximum Transmission Unit)을 초과하면 한번에 전송할 수 없다.
- 이 때문에 패킷을 MTU 이하의 작은 조각으로 분할하는 것을 단편화(Fragmentation), 분할된 조각을 단편(Fragment)라고 한다.
- 4000바이트의 패킷을 전송하려고 하는데 MTU가 1500인 경우 예시는 아래와 같다.
순서 | 페이로드 | 헤더 | More Flag | offset |
---|
1 | 1480 | 20 | 1 | 0 |
2 | 1480 | 20 | 1 | 185 |
3 | 1020 | 20 | 0 | 370 |
tcpdump상의 datagram
id:size@offset[+]
ex) 41421:4000@8000+
DDoS
DDos(Denial of Service) 정의
- 대상 시스템이 정상적인 서비스를 할 수 없도록 가용성을 떨어뜨리는 공격
비고 | 대역폭 소진 공격 | 서비스 마비 공격 |
---|
계층 | OSI 3~4계층 | OSI 7계층 |
프로토콜 | IP, ICMP, IGMP, UDP, TCP 등 | HTTP, DNS, FTP, SMTP 등 |
공격대상 | 네트워크 인프라 | 웹 서버, 정보보호 장비 등 |
특징 | 회선 대역폭 고갈 전체 네트워크의 가용성에 영향을 끼침 단순 Flooding 형태의 대량의 트래픽 발생을 통한 공격 진행 Anti-DDos 장비를 통해 방어 가능 | 공격 대상 시스템만 마비시킴 전체 네트워크에 대한 영향은 작음 소량의 트래픽으로 공격 가능 정상 트래픽을 이용한 공격 진행 |
DDos-대역폭 소진 공격
UDP Flooding
- DNS 증폭 공격
- DNS Amplification DDoS Attack
- DNS를 이용한 UDP Flooding 서비스 거부 공격
- DNS 질의는 DNS 질의량에 비하여 DNS 서버의 응답량이 훨씬 크다는 점을 이용
- DNS 프로토콜에는 인증 절차가 없다는 점을 이용
- DNS Query 타입을 'ANY'로 전송 → 정상패킷보다 크게 증폭됨
- 요청 주소를 희생자의 주소로 위조하여 다량의 서버에 보내는 방법으로 공격
- access-list 1 deny udp any any eq 53
- NTP 증폭 공격
- NTP(123/udp)를 이용한 UDP Flooding 서비스 거부 공격
- 해당 ntp 서버에 최근 ntp질의에 응답을 했던 목록을 보여주는 monlist 기능을 이용
- monlist를 요청 할 경우 600개의 응답이 보여지며 약 4,000 byte 이상의 응답 패킷을 생성함
- 요청 주소를 희생자의 주소로 위조하여 다량의 서버에 보내는 방법으로 공격
NTP(Network Time Protocol): 시간을 동기화하여 정확하게 유지하는데 사용되는 프로토콜
ICMP Flooding
DNS Query Flooding
- DNS Query Flooding 개요
- UDP 프로토콜 기반 서비스를 제공하는 DNS에 DNS 쿼리 데이터를 다량으로 서버에 전송하여 DNS의 정상적인 서비스를 방해하는 공격
- DNS Query Flooding 대응법
- access-list 1 deny udp any any eq 53
TCP SYN Flooding
- TCP SYN Flooding 개요
- TCP의 3-Way-Handshake 취약점을 이용한 DoS공격
- 다량의 SYN 패킷을 보내 백로그큐(Backlog Queue)를 가득 채우는 방법
백로그큐 : 3-Way-Handshake를 위해 연결이 진행중인 요청을 담아두는 큐, 큐가 가득차면 다른 연결을 받아들일 수 없음
- 다수의 클라이언트가 고의로 SYN만 보내고 아무런 동작을 하지 않는다면 SYN Backlog Queue는 가득참 → 더 이상 연결요청을 못 받음
- TCP SYN Flooding 대응법
- TCP Connection Timeout 시간을 짧게 설정함 (너무 짧으면 정상적인 요청도 느리다는 이유로 연결이 거부될 수 있음)
- 백로그 큐를 늘림
리눅스: sysctl -w net.ipv4.tcp_max_syn_backlog = 1024
유닉스: ndd -set /dev/tcp tcp_conn_req_max_q1 1024
- 방화벽 설정: 의심 패킷에 대한 차단 정책을 추가
1초에 10회 발생시 차단: iptables -A INPUT -p TCP --dport 80 --syn -m limit --limit 10/second -j Drop
- 라우터 설정
인터셉트 모드: syn 패킷을 요청한 클라이언트와 방화벽에서 먼저 연결을 맺고 정상적이면 서버로 보냄
와치 모드: syn 패킷을 통과시키고 일정시간 연결이 안되면 라우터에서 차단함
- SYN COOKIE
Syn Flooding 공격을 방지하기 위한 방어 기술
클라이언트에서 연결요청이 있을 경우 SYN/ACK 패킷에 특별한 쿠키값을 담아 보내고, ACK가 올 경우 쿠키값을하여 제대로 된 경우 연결을 형성한다.
연결 정보를 Cookie을 통해 보냄으로써 SYN Backlog Queue 를 사용하지 않는다.
연결 요청이 많을 경우 쿠기 값 생성/전송 과정만으로도 가용성이 떨어질 수 있다.
# sysctl -w net.ipv4.tcp_syncookies=1
DDos-서비스 마비 공격
HTTP GET Flooding
- HTTP GET Flooding 개요
- 동일한 HTTP GET 요청을 다량으로 발생시켜 서버가 요청을 처리하도록 하는 공격
- 서버 자원을 과도하게 사용하도록 하여 정상적인 요청을 처리하지 못하도록 함
- HTTP GET Flooding 대응법
- 임계치를 설정하고 비정상적 트래픽을 유발하는 IP를 방화벽 차단 목록으로 등록
- 콘텐츠 요청 횟수에 대한 임계치 설정
CC Attack
- CC Attack 개요
- HTTP GET Flooding with Cache Control
- HTTP 캐시 옵션을 조작해 캐싱 서버가 아닌 웹서버가 직접 처리하도록 유도 → 웹 서버 자원 소진
- Cache-Control 값이 no-store(캐시저장금지), must-revalidate(웹서버가 캐싱 서버에 저장된 캐시 데이터에 대한 검증 요구) 로 설정되어있으면 공격으로 판단
- CC Attack 대응법
- HTTP Get Flooding 과 마찬가지로 일반적인 방어 기법인 임계치 기반의 DDoS 공격 방어가 효과적임. 즉, TCP 세션 요청과 HTTP 요청에 대한 임계치 기법으로 방어가 가능
- HTTP Cache-Control 헤더 옵션 별 임계치 정책으로 방어해야지만 큰 효과를 얻을 수 있음 (방화벽에 캐싱공격 문자열을 포함하는 IP 차단)
Slow HTTP POST Dos
-
Slow HTTP POST Dos 개요
- R-U-Dead-Yet(RUDY) 라고도 부름
- POST 메소드로 Content-Length 필드에 임의의 큰 값을 설정하여 전송함
- 웹 서버가 클라이언트에서 해당 크기의 메시지를 전송할때까지 커넥션을 유지함
- 대량의 데이터를 장시간에 걸쳐 분할 전송하여 연결을 장시간 유지함 → 웹서버 가용량을 소진하게함 → 다른 클라이언트들의 정상적인 서비스 요청을 처리하지 못함
-
Slow HTTP POST Dos 대응법
- 각 POST 폼에 메시지 크기를 제한함
- 항시 TCP 상태를 모니터링하여, 평상시보다 Established 및 Time Wait 값이 많은지 확인함
- 연결 타임아웃(Connection Timeout) 설정 : 클라이언트와 서버간 일정 연경 유지시간 초과시 자동 연결 종료
- 읽기 타임아웃(Read Timeout) 설정 : 지정한 시간내에 body 정보가 모두 수신되지 않으면 오류코드 반환
- 서버 방화벽 설정 : iptables와 같은 방화벽을 통해 동일한 소스 IP에서 동시 연결가능한 개수의 임계치를 설정하여 초과 시 차단
-
Slow HTTP Header Dos 개요
- Slowloris 공격이라고도 부름
- HTTP Header 정보를 비정상적으로 조작하여 웹서버가 온전한 Header정보가 올때 까지 기다리도록 한다. → 서버가 연결 상태를 유지할 수 있는 가용자원은 한계가 있으므로 임계치를 넘어가면 다른 정상적인 접근을 거부하게 된다.
- HTTP에선 헤더의 끝을 /r/n 이라는 개행문자로 구분
- 공격자는 이 마지막 개행문자를 보내지 않고 지속적으로 의미없는 변수를 추가한다.
- 클라이언트가 PSH ACK 패킷으로 Keep alive 패킷을 지속적으로 보낸다
- Header와 Body를 구분하는 문자가 0d0a0d0a 가 아닌 0d0a 에서 끝났다는 것은 아직 전송할 헤더가 남았음을 의미한다.
- 공격자는 이렇게 연결을 유지하여 가용자원을 소진되게 만든다.
-
Slow HTTP POST Dos 대응법
- 공격자가 동시에 많은 세션을 유지하므로 방화벽 등을 통하여 세션 임계치 제한을 설정한다.
- 공격자가 헤더를 천천히 전달하며 연결 시간을 지속시키므로 연결 타임아웃 시간을 적절히 짧게 두어 의심되는 연결이 종료되도록 한다
Slow HTTP Read DoS
- 정상트래픽 이라면 Window Size가 가변적이지만 공격 트래픽은 Window Size가 "0"으로 고정
- 매우 작은 윈도우크기로 서버에 응답을 보내면 서버는 더 이상 데이터를 전송하지 못하고 연결만 유지한 상태로 대기
Hash DoS
- Hash DoS 개요
- 다량의 POST 파라미터('&'이용)를 보내서 Hash Table의 충돌을 유도하여 부하를 증가시킨다.
- 해시 테이블에서 해시 충돌이 발생하여 해시 테이블에 접근하는 시간이 증가한다.
- Hash DoS 대응법
- HTTP POST 파라미터 제한: 특정 발신지에서 IP로 연결할 수 있는 최대값 설정
- POST 메시지 크기 제한
Hulk DoS
- Hulk DoS 개요
- GET Flooding 공격 유형
- http get 요청을 다량으로 하면서 접속대상주소를 지속적으로 변경하면서 공격
- 파라미터를 계속 변경하면서 보냄 (DDos 차단 정책 우회)
- 임계치 설정 기반 방어가 불가능 (임계치는 고정된 URL에서만 설정 가능함)
- Hulk DoS 대응법
- 접속 임계치 설정
- HTTP Request HOST 임계치 설정 (URL이 아닌 HTTP Request에 포함된 HOST 필드값을 카운트해 임계치 설정)
DRDos
- Distributed Reflection Denial of Service
- 취약점이 있는 외부의 정상적인 서버들을 이용하여 공격을 수행하는 분산 서비스 거부 공격
- IP Spoofing의 적극적인 사용 → 추적 방지
- 반사체(Reflector)의 사용 → 공격량의 증대(공격력 강화)
기출문제
1. 다음은 HTTP Request 메시지를 패킷 분석 도구로 캡쳐한 결과 중 일부이다. 각 물음에 답하시오.
1.1) 어떤 공격을 당하고 있는 것으로 추정할 수 있는가?
1.2) 이 공격의 원리는 무엇인가?
1.3) 대응방법을 2가지 이상 쓰시오.
https://q.fran.kr/%EB%AC%B8%EC%A0%9C/19665
2. NTP DDos 에 대한 아래 보안 권고안의 의미를 설명하시오.
2.1) ntp -version
2.2) disable monlist
2.3) ntpdc-c monlist "점검 대상 NTP 서버 IP"
2.4) iptables -A OUT -p udp --sport 123 -m length --length 100 -j Drop
https://information-security.tistory.com/269
https://ensxoddl.tistory.com/254
https://jeongchul.tistory.com/312
https://itwiki.kr/w/%EC%84%9C%EB%B9%84%EC%8A%A4_%EA%B1%B0%EB%B6%80_%EA%B3%B5%EA%B2%A9
https://itwiki.kr/w/IP_%EB%8B%A8%ED%8E%B8%ED%99%94
https://jjuromi.tistory.com/entry/%EC%9A%A9%EC%96%B4-%EB%B9%88%EC%B9%B8%EB%AC%B8%EC%A0%9C-%EC%A0%95%EB%B3%B4%EB%B3%B4%EC%95%88%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-%EB%8C%80%EB%B9%84-v6
https://repository.kisti.re.kr/bitstream/10580/6252/1/2015-083%20DDoS%20%EA%B3%B5%EA%B2%A9%20%EC%9C%A0%ED%98%95%EB%B3%84%20%EB%B6%84%EC%84%9D%EB%B3%B4%EA%B3%A0%EC%84%9C.pdf
https://darksoulstory.tistory.com/326
https://skogkatt.tistory.com/138
https://itwiki.kr/w/DRDoS
https://information-security.tistory.com/269