Hongfluenza

DoS, DDoS : Denial of Service, 서비스 거부 공격 본문

STUDY/NETWORK

DoS, DDoS : Denial of Service, 서비스 거부 공격

Hongfluenza 2019. 7. 26. 18:07
1. DoS(Denial Of Service) - 서비스 거부 공격

- 시스템을 악의적으로 공격해 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격

- 특정 서버에게 수많은 접속시도를 만들어 다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP연결을 바닥내는 등의 공격이 포함

- 보통 인터넷 사이트 또는 서비스의 기능을 일시적으로 또는 무기한으로 방해 또는 중단을 초래

 

 

2. DoS 공격과 DDoS 공격의 차이점
2.1> DoS 공격 [서비스 거부 공격]

DoS 공격

- DoS는 공격자 PC에서 희생자 서버에게 악의성 패킷을 보낸다.

- 희생자는 공격자의 주소를 확인하고 차단하면 공격자는 더 이상 공격을 하지 못하게 된다.

- 이를 보완하기 위해 DDoS 공격 기법이 탄생

 

 

2.2> DoS 공격의 목적

- 파괴 공격 : 디스크나 데이터, 시스템의 파괴
- 시스템 자원의 고갈 : CPU, 메모리, 디스크의 사용에 과다한 부하를 가중시킴
- 네트워크 자원의 고갈 : 쓰레기 데이터로 네트워크의 대역폭을 고갈시킴

 

 

2.3> DDoS 공격 [분산 서비스 거부 공격]

DDoS 공격

- 여러 대의 공격자를 분산적으로 배치에 동시에 서비스 거부 공격을 하는 방법

- 여러 대의 좀비 PC를 통해 DoS 공격을 하도록 하는 것
- 원격으로 여러 대의 컴퓨터를 특정 웹사이트에 동시에 접속시켜 과부하를 일으키는 행위
- 대부분 자동화된 툴을 이용하고 있으며, 공격의 범위가 방대하며, 공격을 하려면 최종 공격 대상 이외에도 공격을 증폭시켜주는 중간자가 필요함

 

 

2.4> DDoS 공격과정

1. 많은 사용자가 사용하며, 대역폭(bandwidth)이 큰 네트워크를 찾는다. 관리자가 모든 시스템을 세세하게 관리할 수 없는 곳의 계정을 획득하여 스니핑이나 버퍼 오버플로우 등의 공격으로 설치 권한이나 루트 권한을 획득한다.
2. 잠재적인 공격 대상을 파악하기 위해 네트워크 블록별로 스캔을 실시하여, 원격지에서 버퍼 오버플로우를 일으킬 수 있는 취약한 서비스를 제공하는 서버를 파악한다.
3. 취약한 시스템의 리스트를 확인한 뒤, 실제 공격을 위한 Exploit을 작성한다.
4. 권한을 획득한 시스템에 침투하여 Exploit을 컴파일하여 설치한다.
5. 설치한 Exploit으로 공격을 시작한다.

 

 

3. DoS 공격으로 의심할 수 있는 상황

- 비정상적인 네트워크 성능 저하
- 특정 혹은 모든 웹사이트에 접근 불가
- 특정 전자 우편의 급속한 증가

 

DoS 공격은 공격을 받고 있는 컴퓨터 주위의 다른 컴퓨터에도 문제를 일으킬 수 있다.
예를 들어 인터넷과 지역망을 연결하는 라우터의 대역폭이 공격으로 소진되면 전체 네트워크에 문제를 일으킬 수 있다.
공격이 충분히 큰 규모로 이루어지면 전체 지역의 인터넷 접속이 영향을 받을 수도 있다.

 

 

3.1> 기본적인 DoS 공격 유형

DoS 공격은 라우터, 웹, 전자 우편, DNS 서버 등 모든 네트워크 장비를 대상으로 이루어질 수 있다.

서비스 거부 공격은 몇 가지 방법으로 침투할 수 있는데, 다섯 가지 기본 공격 유형은 다음과 같다.

 

- 전산 자원을 소진
- 구성 정보를 교란
- 상태 정보를 교란
- 물리적 전산망 요소를 교란
- 원래 사용자와 희생물 사이의 통신 매체를 차단

 

 

3.2> 악성코드 사용이 침투가능한 DoS 공격

- 프로세서를 바쁘게 하여 아무 일도 못하게 한다.
- 마이크로코드에 오류를 발생시킨다.
- 순차적 명령어 실행에 오류를 발생시켜 컴퓨터가 불안정한 상태에 빠지게 하거나 멈추게 한다.
- 운영체제의 오류를 이용하여 전산 자원을 소진시키거나 투입된 더 많은 자원의 효과를 감소시킨다
- 운영체제 자체를 깨뜨린다.

 

4. DoS 공격 유형

 

4.1>Ping Of Death

- Ping을 이용하여 ICMP 패킷을 인터넷 프로토콜 허용 범위(65,536 byte) 이상으로 크게 만들어 전송함으로써 수신 측 서버에게 부하를 주는 공격

- 공격대상 서버에 도달하는 동안 패킷은 네트워크 전송크기(MTU)에 맞게 쪼개지며, 조각화된 패킷을 모두 처리하는 과정에서 부하가 생김

- Ping(ICMP Echo Request(8), ICMP Echo Reply(0)) 사이즈를 매우 크게 생성하여 전송

 

Ping of Death 공격 과정

1. 공격자가 ICMP 패킷의 사이즈를 정상적인 크기보다 훨씬 크게 만들어 보냄 (출발지 ip도 변조)
2. 변조된 패킷은 공격대상 서버로 도달하는 동안 네트워크 전송크기(MTU)에 맞게 작은 조각으로 쪼개짐
3. 조각화(fragment)된 패킷은 헤더정보를 포함해 크기가 더 커짐
4. 서버는 수신된 패킷을 원래 크기로 재조합하는 과정에서 부하 발생
5. ICMP 패킷의 특성상 서버는 각각의 패킷에 응답 메시지를 보내게 되어 2차 부하 발생
6. 공격받은 서버는 서비스불가 상태가 됨

 

 

4.2> SYN Flooding 공격

TCP SYN Flooding 공격

- TCP 초기 연결과정(3-Way-Handshaking)을 이용한 공격으로 다량의 연결 요청을 전송하여 서비스를 중단시키는 공격

 

SYN Flooding 공격 과정

1. 공격자는 출발지 ip를 유효하지 않은 ip로 위조(IP Spoofing)하여 공격대상 서버에게 다량의 SYN 요청을 보냄
2. 요청을 받은 서버는 위조된 출발지 IP로 (SYN+ACK) 응답을 보냄
3. 서버는 Client의 접속을 받아들이기 위해 RAM(메모리) 공간인 백로그(backlog) 큐에 예약상태로 공간을 할당
4. 위조된 IP는 ACK 응답을 서버로 보내지 않음
5. 서버는 Clinet로부터 응답이 올 것을 기대하고 RAM에 백로그(backlog) 큐 공간을 계속 할당함
6. 서버의 RAM이 꽉 차게되어 서비스불가 상태가 됨

 

 

4.3> LAND 공격

- 출발지와 목적지의 IP 주소를 공격자의 IP로 동일하게 만들어서 공격대상에게 보내는 공격
- 패킷을 받은 호스트는 응답을 위해서 수신한 패킷에서 출발지 IP를 이용하여 패킷을 만들어 전송하더라도 자신의 IP이므로 외부로 전송하지 못하고 자신의 컴퓨터에서 부하를 발생하게 된다.
- 즉, 루프상태에 빠지게되어 IP 프로토콜 스택에 심각한 장애를 유발시킨다.

- 시스템의 가용성을 침해하는 공격

- 현재 대부분의 시스템은 출발지와 목적지 IP주소를 확인하여 동일할 경우, 패킷을 버리도록 되어있어 효과가 없다.

- 라우터나 방화벽에서 내부 IP주소와 동일한 출발지 IP주소를 갖는 패킷은 처음부터 차단하도록 하는 것이 좋다.

 

4.4> Smurf 

 

Smurf 공격

- 여러 Host가 특정 대상에게 다량의 ICMP Echo Request를 보내게 하여 서비스 거부 상태를 만드는 공격
- 출발지IP를 공격대상 서버IP로 위조하여 ICMP 패킷을 Broadcast 주소로 보내면 근처의 컴퓨터가 다량의 Echo Reply를 보내어 공격하게 된다.
- 하나의 Echo 패킷이 엄청난 양이 되어 나가므로 ICMP echo reply amplifier 공격이라고도 함

- Smurf 공격을 막기 위해서는 Direct 브로드캐스트를 막아야 한다.

 

※Fraggle 공격은 Smurf와 유사하나, UDP 프로토콜을 사용한다. 

 

 

4.5> Boink, Bonk, Teardrop

- 프로토콜은 목적의 차이는 있으나 기본적으로 데이터 전송에 있어 신뢰성 있는 연결을 제공하려 하기 때문에 신뢰성이 확인되지 않는 데이터 전송에 대하여 반복적인 재요구와 수정을 하게 된다.

- 데이터 전송에서 신뢰성 있는 연결을 제공하려면, 다음을 확인하는 기능을 기본적으로 제공한다.

>> 패킷의 순서가 올바른가?
>> 중간에 손실된 패킷은 없는가?

- 이러한 사항이 확인되지 않는 데이터 전송에 대해 프로토콜은 신뢰도를 확보하고자 반복적으로 재요구하고 수정하게 된다.

- Bonk, Boink, Teardrop은 이러한 반복적인 재요구와 수정을 계속하게 함으로써 시스템 자원을 고갈시키는 공격이다.

 

Bonk

처음 패킷을 1번으로 보낸 후, 두 번째, 세 번째 패킷 모두 시퀀스 넘버를 1번으로 조작해서 보냄

 

Boink

처음 패킷을 1번으로 보낸 후, 두 번째 패킷은 101번, 세 번째 패킷은 201번으로 정상적으로 보내다가 중간에서 일정한 시퀀스 넘버로 보냄

 

Teardrop

UDP를 이용. 

단순히 시퀀스 넘버를 일정하게 바꾸는 것을 넘어 중첩과 빈 공간을 만들며, 시퀀스 넘버를 좀 더 복잡하게 섞음

 

 

4.7> HTTP Slowloris, Slowread, Slowbody
HTTP Slowloris 공격 ( Slow HTTP GET Flooding)

HTTP GET 메소드를 사용하여 헤더의 최종 끝을 알리는 개행 문자열 \r\n\r\n(HEX: 0d 0a 0d 0a)을 포함하지 않고 전송함으로써 웹서버와의 Connection을 최대한 오랫동안 유지하여 Client Connection 자원을 고갈시키는 공격

 

1. 세션이 연결된 뒤 GET요청을 보냄
2. 완전하지 않는 요청을 보냄으로 Open connection 유지
3. 서버는 헤더를 기다리게 됨
4. 서버는 연결 양에 따라 DoS 상태가 됨
5. 요청의 헤더끝이 [0d0a0d0a]로 끝나지 않음

 

 

Slowread 공격

- HTTP 공격의 일종

- 버퍼의 크기, TCP Window Size를 조작하여 응답을 천천히 읽어 TCP 연결을 지연시키는 공격

- 대부분의 웹서버가 연결 지연을 제한하지 않는 사실을 이용한다. 

- 따라서 데이터의 흐름 속에서 TCP 연결을 끊임없이 지연시킬 수 있는 방법은 TCP 윈도우 사이즈의 값을 조작하여 '0'이나 작은 데이터를 받는 것

- 한마디로 Slowread 공격은 공격자가 TCP 윈도우 크기를 작게 조작하고 데이터 처리율을 감소시킨 상태에서 HTTP 패킷을 송신하여, 웹서버가 정상적으로 응답하지 못하게 하여 DoS 상태를 유발시키는 행위

- 공격자와 공격 대상 서버는 데이터 전송이 완료될 때까지 Connection 지원을 점유하게 되며, 이러한 과정이 대량 발생할 경우 공격 대상 서버의 Connection 자원이 모두 고갈되어 서비스 거부 상태가 된다.

 

 

Slowbody 공격 (HTTP POST Attack 혹은 RUDY) 

- RUDY : R U Dead Yet ? : Are You Dead Yet?의 약자

- HTTP POST 메소드를 이용하여 서버로 전달할 대량의 데이터를 장시간에 걸쳐 분할 전송하며, 서버는 POST데이터를 모두 수신하지 않았다고 판단하여 연결을 장시간 유지하므로 가용량을 소비하게 되어 다른 클라이언트의 정상적인 서비스를 방해하는 서비스 거부 공격

- 클라이언트(웹 브라우저)는 HTTP요청을 통해 데이터를 웹서버로 전달하고자 할 때 POST방식(메소드)을 사용하고, 메시지의 유형과 크기 정보를 전달하기 위해 Content-Type 헤더 필드와 Content-Length 헤더 필드를 사용함

- 웹서버는
Content-Type 헤더 필드 → 데이터의 유형 파악
Content-Length 헤더 필드 → 데이터의 길이를 파악한 후 해당 데이터의 길이만큼 읽어들이는 작업을 수행함.
공격자는 이 부분의 취약점을 이용하여 공격할 수 있다.

- 공격자는 Content-Length를 비정상적으로 크게 설정한 후 매우 소량의 데이터를 지속적으로 천천히 웹서버에 전송하면 웹 서버는 Content-Length 헤더 필드에 명시된 크기만큼 데이터를 모두 수신하기 위해 연결 상태를 유지하면서 대기하게 된다. 이런 방식으로 다수의 연결을 지속시키게 되면 대상 웹서버의 연결 자원(가용량:웹서버로 접속할 수 있는 최대 클라이언트 수)이 모두 소진되어 정상적인 요청을 받을 수 없는 상태가 됨

 

 

5. 대응책

 

1> 방화벽 설치와 운영

방화벽은 통상 내부 네트워크와 외부 네트워크의 경계에 우선적으로 설치한다.
일부에선 방화벽만 있으면 모든 보안이 다 되는 것으로 착각할 수 있는데, 방화벽으로 막을 수 있는 건 전체의 30%정도밖에 안된다. 단순히 1차적 방어막이라고 생각하면 된다.

 

2> 침입탐지 시스템 설치와 운영

침입탐지 시스템은 외부 공격에 대한 일차적인 차단이 실패한 경우 네트워크에 침입해 들어온 공격을 탐지하기 위한 시스템으로 DoS와 DDoS공격이 일정한 패턴으로 되어 있고, 각 구성 요소 간에도 특정한 형식의 통신이 지속적으로 이루어지고 있기 때문에 공격 전이나 공격 시에 그 양상을 탐지할 수 있으므로 설치 후 업그레이드를 꾸준히 해야한다.

 

3> 안정적인 네트워크의 설계

일정량 이상의 패킷이 라우터로 들어올 경우, 그 이상의 패킷은 통과시키지 않도록 하거나 각 장비간 로드 밸런싱을 설정하는 방법 등이 있다.

 

4> 홈페이지 보안 관리

현재 악성코드 분포 유형을 보면 인터넷을 이용한 웹 페이지 상의 취약점 때문에 해킹 당한 사이트에서 사용자들도 모르게 다운 받는 경우가 제일 많다.
홈페이지 관리자들의 경우 편하다는 이유로 혹은 귀찮다는 이유로 주민등록번호나 주요 사항을 체크할 때 자바스크립트나 html소스를 가지고 하는 경우가 있는데, 이는 매우 취약한 부분이며 반드시 시스템 소스 상에서 설정해야 한다.
또한 관리의 편의성을 위해 임의로 보안을 풀어놓는 경우가 있는데 이 또한 바람직하지 않으며 관리자 계정 또한 ID와 패스워드를 분실 혹은 유추하지 못하도록 주기적으로 변경해 주어야 한다.

 

5> 시스템 패치

시스템에 대한 지속적인 서비스 팩 설치와 팟픽스를 해야 한다.
바이러스와 악성코드의 경우 일단 발견이 되면 대책을 세워 패치를 하게 되는데 제공되는 패치를 단지 귀찮다는 이유로 사용자들이 무시해버릴 경우 취약성을 띤 시스템을 그대로 유지하는 것이기 때문에 반드시 보안패치를 하는 것이 좋다.

 

6> 스캔 및 서비스별 대역폭 제한

 

 

 

 

 

...더보기

'STUDY > NETWORK' 카테고리의 다른 글

FTP(File Transfer Protocol)  (0) 2019.08.03
스푸핑(Spoofing) : ARP Spoofing, DNS Spoofing, IP Spoofing, E-mail Spoofing  (0) 2019.07.21
ARP Redirect 실습  (0) 2019.07.18
스니핑(Sniffing)  (0) 2019.07.17
포트 스캐닝(Port Scanning)  (0) 2019.07.15