[네트워크 보안] DoS, DDoS가 무엇인가? 원리와 개념
DoS(Denial Of Service)
일명 DoS라고 하는 공격은 우리말로 풀어서 설명하면 서비스 거부 공격이라고 하는데요. 이는 공격 대상을 상대로 서비스 불가 상태로 만드는 공격입니다. 시스템의 가용성을 무너뜨리는 공격의 종류입니다. DoS에는 세가지의 공격 유형이 존재합니다.
1. 파괴 공격 : 데이터나 디스크, 또는 시스템을 파괴하는 공격입니다.
2. 자원 소진 공격 - 시스템: 시스템의 자원을 소진시키는 공격입니다. 예를 들어 CPU의 자원을 소진시키는 공격과 메모리를 사용하는 공격, 디스크 용량을 모두 소진시키는 공격 등이 있습니다. 리눅스에서 무한정 fork()함수를 사용해서 프로세스를 무한정 생기게 만드는 것, 그리고 file을 생성시켜 의미없는 데이터로 디스크를 채우는 공격 등이 있을 수 있겠네요.
3. 자원 소진 공격 - 네트워크 : 역시 자원을 소진시키는 공격인데요. 시스템과는 다르게 네트워크의 대역폭을 소진시키는 공격입니다. DoS에서 네트워크 자원 소진을 통한 공격을 매우 많이 볼 수 있을텐데요. 위의 두 유형보다는 수행이 쉽기 때문입니다. 대표적으로 Http 서버를 DoS로 무력화시키면 해당 웹사이트가 서비스 불가한 상태가 됩니다.
DoS 공격으로는 아래와 같은 공격이 있습니다.
- Ping Of Death : ICMP 패킷을 정상적인 크기보다 매우 크게 생성해서 전송하는 방식입니다. 이렇게 되면 MTU(Maximum Transfer Unit)에 의해 IP 패킷의 단편화(Fragment)가 발생합니다. MTU는 네트워크 패킷의 최대 전송 크기를 의미하며 이더넷의 경우 MTU는 1500 바이트입니다. 공격 타켓의 컴퓨터에서는 단편화된 페킷을 다시 재조립해야하는데, 이 과정에서 많은 부하가 발생하여 정상적인 서비스를 할 수 없게 만드는 공격입니다.
- Land Attack : 출발지 IP 주소와 목적지 IP 주소를 같게 만들어 보냄으로써 자시 자신에게 응답을 보내게 만드는 공격입니다. 이런식으로 서비스를 하지 못하게 하여 가용성을 무너뜨리는 DoS공격 방식입니다. 대부분 OS에서는 출발지 IP주소와 목적지 IP 주소가 같으면 Drop 시킴으로써 현재는 거의 사용하지 않는 DoS 공격입니다.
- Smurf Attack : 출발지 IP 주소를 공격 대상의 IP 주소로 변경하고, ICMP Echo Request를 특정 네트워크에 브로드 캐스트로 보냅니다. 그러면 그 네트워크의 모든 컴퓨터들이 ICMP Echo 응답을 생성해서 공격 대상의 IP 주소로 보내게 되는 DoS공격 기법입니다.
- Teardrop Attack : IP 패킷의 재조합 과정에서 Fragment Offset을 일부러 틀리게 전달합니다. 그 결과 재조합하는 과정에서 오류가 발생이 되게 되고, 통신시스템이 문제를 일으키게 되는 DoS 공격방식입니다.
이 밖에도 많은 DoS 공격 방식이 존재합니다.
DDoS(Distrubuted Denial Of Servier)
DoS 공격을 분산적으로 여러 컴퓨터들이 수행하는 것을 DDoS 공격이라고 합니다. DDoS를 어떤 사람들은 Double DoS라고 하는 분을 봤는데, Distributed DoS입니다. DDoS 공격을 수행하는 컴퓨터는 좀비 PC라고 불립니다.
공격의 흐름은 이렇습니다. 1) 공격자는 C&C 서버라는 서버를 두어서 명령어를 전달합니다. 2) C&C 서버는 공격자로부터 직접 명령을 받아서 감염되어 있는 좀비 PC에 분산하여 명령을 전달합니다. 3) 좀비 PC는 명령을 수행하여 Target PC를 공격하게 됩니다. 좀비 PC는 Bot이라고도 불리는데, Bot은 여러분의 컴퓨터가 될 수 있습니다.
DDoS 공격의 유형은 아래와 같은 것들이 존재합니다.
- UDP/ICMP Flooding : 공격자는 다량의 UDP/ICMP 패킷을 서버로 전송하여 네트워크 대역폭을 가득채웁니다. 그래서 다른 사용자들이 서비스를 받지 못하게 만드는 공격입니다.
- SYN Flooding : 무수히 많은 다량의 TCP의 SYN 패킷을 공격 대상에게 전달하여 Backlog Queue를 가득채우게 만드는 공격방식입니다. 이 경우 새로운 클라이언트의 연결 요청을 무시하게 되어서 그 클라이언트는 서비스를 받을 수 없게 됩니다. 이 공격방식은 3-Way Handshake의 취약점을 이용한 공격인데요. 클라이언트가 SYN을 보내면 서버에서 SYN+ACK 응답을 보냅니다. 이때 클라이언트가 ACK응답을 보내야만 Connection이 됩니다. 서버에서는 ACK응답이 오지 않은 경우 incomplete queue에 연결 요청정보를 삽입합니다. 반면 ACK가 도착하면 complete queue로 연결 정보를 이동시키죠. 그렇게 되면 accept() 시스템 콜을 통해 연결 socket을 생성시켜 통신하게 됩니다. 이 공격은 SYN 패킷만을 보내고 ACK응답을 주지 않는 공격으로 서버의 incomplete queue를 모두 채워 더는 연결할 수 없는 상태로 만들어버립니다. backlog queue는 incomplete queue와 complete queue를 합친 queue입니다.
- HTTP GET Flooding : 동일한 URL을 반복 요청하여 웹서버에 부하를 주는 공격입니다. 자, 여러분 대학교 수강신청때 수강 실패한적이 많죠? 갑자기 서버에 요청이 들어와서 처리할것이 많아 느려졌기 때문입니다. 이러한 현상을 공격으로 만든 것이 HTTP GET Flooding입니다.
이 밖에도 해시 도스, 헐크 도스 등 많은 DDoS 공격 방식이 존재합니다.
DDoS 공격을 수행하는 Tool은 인터넷에 뒤져보면 여러가지 존재합니다. 헐크라던가 슬로로리스등 많은데요. Google에 서치해도 여러가지 많이 나오는데 쉽게 구한다고 해서 쓰게 되면 여러분 어떻게 되는지 아시죠? 그냥 테스트 용도로 자기 PC나 test 서버에다가만 시도하시기 바랍니다. 아래의 링크에서 슬로로리스를 다운받을 수 있습니다.
슬로로리스(HTTP Dos 공격 툴)
https://github.com/gkbrk/slowloris
이상으로 DoS의 개념, DDoS의 개념을 알아보았습니다.