DoS 공격이란 악의적으로 시스템을 공격해서 해당 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격이다.
특정 서버에게 수많은 접속 시도를 만들어 다른 이용자가 정상적으로 서비스 이용을 하지 못하게 하거나, 서버의 TCP 연결을 소진시키는 등의 공격이다.
DoS 공격은 1대의 공격자 컴퓨터에서 타깃 시스템에 악성 패킷을 보내는 방식으로 공격하고, 타깃 시스템 측에서 공격자의 주소를 확인하고 차단하면 더 이상 공격을 하지 못하는 단점이 있다.
DDos 공격은 DoS 공격의 진화된 형태로 완벽한 공격을 위해 공격자가 여러 대의 컴퓨터를 감염시키고, 분산된 좀비 PC들을 이용해 타깃 시스템을 집중적으로 공격해서 서비스를 마비시킨다.
이미지 출처: [네트워크]TCP 연결 3 way handshake (SYN, SYN/ACK, ACK)
정상적인 흐름은 클라이언트가 서버에게 SYN 데이터를 보내 연결 요청을 하면 서버에서 데이터를 받았다는 대답(ACK)과 클라이언트도 포트를 열어달라는 SYN을 함께 보낸다. 클라이언트가 상태를 ESTABLISHED로 변경하고 서버에게 다시 대답을 보내면 서버도 ESTABLISHED로 상태를 변경하며 연결이 완료된다.
이미지 출처: SYN Flooding Attack[펌]
SYN 플러딩의 공격 방식은 다음과 같다
TCP 프로토콜의 구조적인 문제를 이용한 공격으로 서버의 동시 가용 사용자 수를 SYN 패킷만 보내 점유하여 다른 사용자가 서버를 사용 불가능하게 하는 공격이다.
공격자는 ACK를 발송하지 않고 계속 새로운 연결 요청을 하게 되어 서버는 자원 할당을 해지하지 않고 자원만 소비하여 고갈된다.
이미지 출처: 저대역 DDoS 공격 대응 시스템
UDP란 보안성을 보장하지만 속도가 느린 TCP/IP를 대신하기 위한 통신 프로토콜로 속도를 올린 대신 보안성을 버린 방식의 프로토콜이다. 주로 라이브 스트리밍 등에 사용되는데, 이 보안 약점을 이용하여 Spoofing된 ip로 공격 대상 서버의 아무 포트번호로 많은양의 패킷을 보내 응답 메시지를 생성하는데 서버자원을 소모시키는 공격이다. 많은양의 ip를 사용해서 공격하는 UDP/ICMP Traffic Flooding 공격 방식도 있다.
대량의 UDP 패킷을 만들어 임의의 포트 번호로 전송하여 응답 메시지(ICMP Destination Unreachable)를 생성하게 하여 지속해서 자원을 고갈시키는 공격이다.
ICMP 패킷은 변조되어 공격자에게 전달되지 않아 대기한다.
이미지 출처: SMURF 공격과 PING OF DEATH 란?
스머핑은 UDP 플러딩과 마찬가지로 Spoofing된 ip를 이용하는 방법인데, 스머핑에서는 공격 대상의 ip를 출발지로 설정하여 제 3의 사이트(바운싱 사이트)에게 ping을 보내고, 공격 대상이 속해있는 네트워크 상의 모든 호스트들에게 ICMP Echo Request가 전달된다. 그러면 ICMP Echo Request를 받은 호스트들은 공격대상에게 응답패킷을 보내게 된다.
호스트들이 IP broadcast 주소로 전송된 ICMP 패킷에 대하여 응답하지 않도록 설정하여 대응한다.
출발지 주소를 공격 대상의 IP로 설정하여 네트워크 전체에게 ICMP Echo 패킷을 직접 브로드캐스팅하게 하여 마비시키는 공격이다.
'바운스 사이트'라고 불리는 제 3의 사이트를 이용해 공격한다.
이미지 출처: SMURF 공격과 PING OF DEATH 란?
ICMP 프로토콜에 대해 응답을 하지 않게하여 대응한다.
ICMP 패킷(ping)을 정상적인 크기보다 아주 크게 만들어 전송하면 다수의 IP 단편화가 발생하고, 수신 측에서는 단편화된 패킷을 처리(재조합)하는 과정에서 많은 부하가 발생하거나, 재조합 버퍼의 오버플로우가 발생하여 정상적인 서비스를 하지 못하도록 하는 공격기법이다.
이미지 출처: Land Attack이란?
출발지와 목적지의 IP를 같은 주소로 보내 서버가 계속 자신에게 응답을 보내게 만들어 자원을 소진시키는 공격법이다.
source ip와 destination ip가 같은 패킷을 차단하여 대응한다.
출발지(Source) IP와 목적지(Destination) IP를 같은 패킷 주소로 만들어 보냄으로써 수신자가 자기 자신에게 응답을 보내게 하여 시스템의 가용성을 침해하는 공격 기법이다.
이미지 출처: Tear Drop, Bonk Attack, Boink Attack이란?
위 그림과 같이 Fragment Offset 값을 중첩되거나 빈 공간이 있게 보낸다.
최근에는 대부분 막혀서 보안 업데이트만 해줘도 된다고 한다.
IP 패킷의 재조합 과정에서 잘못된 Fragment Offset 정보로 인해 수신 시스템이 문제를 발생하도록 만드는 공격이다.
공격자는 IP Fragment Offset 값을 서로 중첩되도록 조작하여 전송하고, 이를 수신한 시스템이 재조합하는 과정에서 오류가 발생하게 해서 시스템의 기능을 마비시킨다.
패킷을 분할하여 보낼 때 처음 패킷을 1번으로 보낸 후 다음 패킷을 보낼 때도 순서번호(Sequence Number)를 모두 1번으로 조작하여 전송한다.
처음 패킷의 크기를 100이라고 가정했을 때 처음 패킷을 1번으로 보낸 후 다음 패킷을 100번, 200번 으로 보내다가 중간에 100번 2001, 2002번 과 같은 식으로 비정상적인 순서번호(Sequence Number)로 보내서 부하를 일으키게 한다.
SYN 플러딩: 연결요청하는 편지를 보내는데 하자고 하니까 계속 요청만 함
UDP 플러딩: 다른 사람(특정한 어떤 사람) 사칭해서 공격대상에게 편지 마구 보냄
Smurfing: 공격 대상 거주 아파트에 편지 마구 뿌려서 대상 집에 컴플레인 들어감
Ping of Death: 매우 장문의 편지를 여러장으로 나눠 보내서 편지 읽느라 다른일 못하게 함
Land Attack: 발신자를 공격대상으로 해서 공격대상은 답장을 써서 보내는데 본인에게 오고 또 본인에게 답장쓰고 반복