- 서비스 거부 공격 DoS(Denial-of-Service)
1. DoS란?
공격자가 시스템의 자원을 모두 소진시켜서 다른 사람이 서비스를 받지 못하게 방해하는 공격이다. 과부하 걸리게 하는 공격이기에 많은 종류가 있고, 자주 발생하며 보통 테러의 성격을 가지고 있다.
2. 취약점 공격 DOS
일반적으로 데이터는 네트워크로 한 번에 보내지 않는다. 한 번에 전송될 수 있는 데이터는 기본적으로 1500byte 정도이다. 그 이상의 데이터를 보낼 때에는 데이터가 여러 번 전송되는 것이다.
이때 데이터의 순서가 뒤바뀌어서 목적지에 도착할 수 있으니, 데이터(패킷)을 보낼 때, 앞에 순서를 붙인다. 이때 공격자는 데이터를 조작하여 순서가 불완전하도록 한다.
공격자는 이렇게 데이터 순서가 중복되거나, 순서 사이에 빈 것이 존재하도록 패킷을 만들어서 공격 대상에게 전송한다. 공격 대상은 해결할 수 없는 문제를 해결하고자 무한히 시도하다가 과부하가 걸린다.
- 방어 방법
안정된 버전의 최신 운영체제(+보안 업데이트)를 쓰면 자동적으로 거의 완전한 방어가 가능하다. 취약점에 그대로 당하는 오래된 운영체제라면, 하나하나 이런 공격의 방어를 구현해주어야 한다.
2. SYN Flooding
tcp는 양방향을 지향한다. tcp로 통신을 시작할 때 일어나는 과정은 아래와 같다.
a가 syn 패킷을 보낼 경우, b가 이것을 받고 syn+ack(a에게 syn 패킷을 받았다는 ack 응답 패킷, a도 통신 준비가 완료되었는지를 물어보는 syn 패킷)을 보낸다. 그리고 a에게서 올 예정인 ack 패킷을 기다린다.
여기서 공격자는 ack 패킷을 보내지 않는다. 엄밀히 말하면, 출발지 주소를 존재하지 않는 곳으로 위조하기 때문에 ack 패킷을 받을 수가 없다. 위의 상황에서라면 b는 하염없이 a에게 올 예정인 ack 패킷을 기다리게 되며, 너무 오래기다가 timeout이 되어 자동적으로 통신 연결이 끝난다. 이때 timeout이 될 때까지 컴퓨터 자원이 소모된다.
(한 번으로는 영향이 없고, 서로 다른 곳에서 보낸 척하는 syn 패킷을 동시에 공격 대상에게 보낸다.)
이런 공격은 대응이 간단해 보일 수 있다. timeout 되는 시간을 짧게 줄여 최대한 빨리 공격 패킷이 무효화되길 기대할 수 있다. 그러나 단순해 보이는 대처 방법인 만큼 잘못된 대처 결과를 가져올 수 있습니다. 너무 시간을 짧게 줄여버리면, 데이터 전송이 조금 느린 컴퓨터를 가진 일반 사용자도 접근이 거부될 수 있다. 보안 관점에서는 괜찮을 지 몰라도, 사용자 경험이 안 좋아질 수 있다.
- 방어 방법
syn 쿠키라는 기술을 이용하여 효과적으로 방어할 수 있다. 공격 대상은 들어온 syn 패킷에서 연결이 정상적으로 되어 있을 때, 필요한 정보들을 쿠키 형태로 만들어 놓는다. 그리고 다시 syn+ack 패킷을 보낼 때, 이 쿠키를 첨부하여 보낸다. 즉, 공격 대상은 더이상 syn 데이터를 메모리에 담아둘 필요가 없게 된다.
만약 정상적인 사용자라면 ack 패킷을 보내줄 때, 자신이 받은 이 쿠키를 다시 첨부하여 보내줄 것이고 이를 이용해 정상적인 연결을 만들 수 있다. 보통의 경우(일반적인 운영체제)에서는 syn flooding이 의심되거나, 메모리 사용량이 크게 늘어날 경우 자동적으로 syn 쿠키가 적용된다.
4. Ping of Death
Ping of Death는 ICMP를 이용한 공격이다. (윈도우에서 흔히 사용하는 ping이 ICMP를 이용하는 것이다.)
icmp는 인터넷 제어 메시지 프로토콜로, 네트워크가 잘 작동하는지 체크해주는 기능을 수행한다. 아주 간단한 역할을 수행하기 때문에 신경을 써야 할 필요가 있나 싶지만, 이를 악용하면 강력한 DOS를 할 수 있다.
공격자는 icmp 패킷의 크기를 매우 크게 조작하여, 동시에 여러 개를 공격 대상에게 보낸다. 앞서 나왔던 것처럼 네트워크 패킷의 크기는 매우 작다. 공격자의 icmp 패킷은 이동을 하면서, 여러 개의 패킷으로 갈라지게 되고, 공격 대상은 받은 여러 개의 패킷을 다시 합친다. 이 과정을 많이 반복하다보면 시스템에 과부하가 걸리게 된다.
- 방어 방법
icmp 패킷을 이용한 공격은 시스템의 방화벽에서 icmp를 차단하면 끝난다. 일반적인 패턴의 죽음의 핑 공격은 최신 운영체제에서 자동적으로 방어할 수 있도록 되어 있다. 확실하게 웹 서버에서 확실하게 죽음의 핑 공격을 방어하고 싶다면, icmp를 차단시켜 놓으면 된다.
5. 스머프 공격
이 공격 또한 icmp를 이용한 공격이다. 이 공격을 이해하기 위해서는 Broadcast 주소의 특징을 알아야 한다. 브로드캐스트는 어떤 네트워크의 ip 주소 중 가장 큰 값을 말한다. 예를 들어, 라우터에 연결된 장비들의 ip 주소가 1.1.1.1, 1.1.1.2, 1.1.1.3 이런 식으로 되어 있을 때, 브로드캐스트 주소는 1.1.1.255이다.
이 브로드캐스트의 역할은 연결된 모든 시스템에 패킷을 보낼 수 있다는 것이다. 공격자는 출발지가 공격 대상인 icmp 패킷을 어떤 네트워크의 브로드캐스트 주소로 해서 보낸다. 이 패킷은 브로드캐스트의 해당 네트워크 전체에 패킷이 퍼지게 된다. 각 시스템은 icmp에 응답하고자, 출발지로 적혀있는 공격 대상에게 응답을 보낸다. 연결된 시스템이 많을 경우 위력이 커지고, 공격 대상은 원하지 않은 너무 많은 icmp 응답을 받고 마비되어 버린다.
- 방어 방법
이 공격은 브로드캐스트의 역할을 제한하는 것으로 방어할 수 있다. 브로드캐스트 주소를 악용한 공격들을 막기 위해, 라우터에서 브로드캐스트 주소로 된 응답을 내보내는 것을 막는 것이다.
그럼 이 공격을 수행할 때, 공격자가 보낸 icmp 패킷은 라우터와 연결된 시스템으로 보내지지만, 시스템에서 응답한 각 패킷들은 라우터에서 지나가지 못하도록 막는다. 공격을 받는 쪽에서 할 수 있는 조치로는 죽음의 핑처럼 아예 icmp 패킷을 방화벽에서 막아버리는 것으로 방어할 수 있다.