[clearfix]
1. 개요
Denial of Service컴퓨터공학 용어 중 하나.
2. 상세
쉽게 말하면 어떤 시스템의 자원을 고갈시키거나 지나치게 바쁘게 만들거나 해서 의도적으로 정상적인 서비스를 제공하지 못하게 하는 것이다. 어떤 방법이든, 얼마나 많은 시스템이 공격을 시도하든, 얼마나 많은 시스템이 공격을 받든간에 어쨌든 위의 내용이 만족되면 DoS 공격의 일종이다. 즉 사용자들이 흔히 보는 "오류 보고" 창이 떠서 프로그램이 종료되는 상황이 서비스에 발생해도 서비스 거부이다. 이는 소프트웨어 취약점을 이용한 것으로서 일반적으로 Poison 공격이라고 한다.(물론 공격이 되려면 이걸 원할 때 의도적으로 일으킬 수 있어야 한다.)[1]흔하게 사용되는 DoS 공격 기술로 Flood 공격이 대표적이다. 이를 응용한 분산 서비스 거부 공격(DDoS)도 유명하다.
DoS는 해킹의 일종이 아니다. 더 정확히 말하자면 단어의 의미 자체가 다르다. 해킹과 DoS는 목적 자체가 다를 수밖에 없는게, 위에서 말했다시피 DoS는 어떤 방법으로든 대상을 서비스 거부 상태[2]로 몰아넣을 수만 있으면 되기 때문이다. 예를들어 DDoS나 Flood 공격은 소프트웨어를 조작하거나 분석하는 행위가 아니므로 이는 해킹에 해당 된다고 보기 어렵다.[3] 그러나 Ping of Death와 같은 치명적인 오류로 인한 크래쉬, 버그, 응답 불가 상태를 유도하는 등의 DoS 공격은 이를 찾아내기 위해 대상 시스템의 정밀한 분석이 요구될 수 있으며 이런 경우는 취약점을 이용한 DoS 공격이다.
아래에는 알려져 있는 DoS의 종류가 적혀있는데 위의 정의대로 DoS는 의도적인 공격에 의해 서비스가 정상적으로 동작하지 못하게 되는 모든 상황을 말하기 때문에, 가령 어떤 서비스 프로그램(apache 같은)의 취약점 중 하나가 권한 상승, 코드 실행 등은 불가능하지만 0으로 나누게 하거나 0번 주소에 액세스가 되어(Null-pointer dereference) 종료하게 만들 수 있다면 해당 취약점을 DoS 취약점이라 하게 된다. 단지 네트워크 DoS 공격이 주로 대부분의 시스템을 대상으로 하는 대단히 범용적인 DoS 공격 방법이기에 이를 정리한 것일 뿐이다. 따라서 개별 서비스 단위의 DoS 공격법까지 포함하게 된다면 훨씬 더 많은 DoS 공격 방법이 있다.
3. 종류
- IP
- Algorithm
[1] 시스템의 자원이 워낙 없는 상황이라면 브루트 포스공격 중 발생되는 인증 실패(…) 만으로도 이에 준하는 상황이 될 수 있다.[2] 어디까지나 서비스 거부다. 즉 대부분의 DoS는 기밀성, 무결성을 침해시키기 보다는 가용성을 침해시켜 정상적으로 서비스 이용을 하지 못하게 하는 것이 목표다.[3] DDoS 행위만 놓고보면 해킹 행위로 볼 수없다는 뜻이다. 단, DDoS 공격을 하려면 이론상 자신이 수십만 대의 PC를 동원해도 가능은 하지만, 거의 대부분 좀비PC를 만들어 공격하므로 현실적으론 해킹이 선행되는게 일반적이고 해킹 행위로도 처벌이 된다.[A] IP Header만 연관되고 나머지는 의미 없음[5] IP Packet을 이용한 DoS/DDoS 공격을 일반적으로 부르는 명칭이다. TCP SYN Flood, UDP Flood, ICMP Flood(Ping Flood) 등 다양한 하위항목들이 있다.[A] [7] 조작된 IP 패킷의 조각화(Fragmentation)를 이용한 공격이다. IP 패킷은 전송을 위해 큰 조각(Packet)을 작은 조각(Fragment)들로 나누어 전송하게 되는데 이를 조작(헤더 Offset 정보 조작)하여 정상적으로 재조립을 어렵게 한다. 즉 아빠(공격자)가 아이(희생자)에게 공룡레고조각(Fragment)이 담긴 공룡레고셋트(IP Packet)를 선물했는데 일부러 조립설명서(헤더 Offset)를 공룡조립을 위한 것이 아닌 포크레인조립을 위한 것(조작된 헤더 Offset 정보)을 넣은 셈. 당연히 아이 입장에서는 조립이 매우 느려지거나, 조립을 할 수 없게 된다. 이것이 단순하게 아이 수준에 맞을 정도로 몇 조각 안된다면 크게 문제가 없을 지 모르지만, 몇 십 세트를 던져주는 것이 문제. 아이는 조립을 하다 답이 없어 한두방울씩 눈물을 흘리다가 결국에는 울게되니(가용성 고갈로 인한 서비스 정지) 이것이 Teardrop이다.(...)[8] 흔히 보이는건 UDP 기반이지만 기술적으로는 거의 모든 계층의 프로토콜에서 구현이 가능[9] 기술적으로는 거의 모든 계층의 프로토콜에서 구현이 가능[A] [11] 서비스 거부 상태를 유지하기 위해 Flood 공격의 형태가 되어야 함[12] Spoofed SYN[13] 웹브라우저를 이용한 F5키 연타는 여기에 속한다. 단지 전용 프로그램에 비해 어마어마하게 느릴 뿐...