Tcp Syn Flood

TCP SYN FLOOD

"반만 열린" TCP 연결들을 생성하므로써 서비스거부공격을 하는 코드가 공개되어 있다. 인터넷에 연결되어 TCP 기반의 서비스(예를 들면, 웹서버, FTP서버, 또는 메일서버 등)를 제공하는 모든 시스템들이 이 공격에 노출되어 있으며, 공격의 결과는 시스템에 따라 다르다. 그러나 이 문제에 대한 완벽한 해결책은 없으며 단지 영향을 감소시키는 방법들만이 알려져 있다.

어떤 시스템(클라이언트)이 서비스를 제공하는 시스템(서버)에 TCP 연결을 시도할 때, 클라이언트와 서버는 다음과 같이 일련의 메시지들을 교환한다. 먼저 클라이언트 시스템은 서버에 SYN 메시지를 보내며, 서버는 SYN-ACK 메시지를 클라이언트에 전송하므로써 접수된 SYN 메시지에 대해 확인한다. 클라이언트는 다시 ACK 메시지를 전송하므로써 접속 설정을 완료한다. 이렇게 하므로써 클라이언트와 서버 사이의 접속이 열리게 되고, 클라이언트와 서버사이에 서비스에 고유한 자료들을 교환할 수 있게된다. 이러한 접속방법은 모든 TCP 연결(텔넷, 전자우편, 웹 등) 에 대해 적용된다.

공격의 가능성은 바로 서버가 클라이언트에 확인 메시지(ACK-SYN)을 보낸 후 클라이언트로 부터 다시 확인 메시지(ACK)를 받기 이전의 시점에서 발생한다. 이 상태가 바로 "반만 열린" 연결이라고 불린다. 서버는 모든 진행중인 연결에 대한 정보를 저장하기 위해 시스템 메모리에 자료구조를 구축하며 이 자료구조는 그 크기가 제한되어 있다. 따라서 계속하여 "반 만 열린" 연결을 생성하므로써 이 자료구조를 넘치게 할 수 있다.

반만 열린 연결은 IP 속이기를 이용하면 손쉽게 생성할 수 있다. 공격자 시스템에서 피공격 서버에 적법하게 보이지만 실제로는 ACK-SYN에 대해 응답할 수 없는 클라이언트를 참조하는 SYN 메시지를 발송한다. 따라서 피공격 서버는 최종 SYN 메시지를 받을 수 없게된다. 마침내 피공격 서버측의 "반만 열린" 연결을 위한 자료 구조가 가득차게 되고 이 자료 구조가 비워 질 때까지 피공격 서버는 새로운 연결 요구에 대해 응답할 수 없게 된다. 일반적으로 반만 열린 연결에 대해서는 타임아웃 값이 설정되어 있어 일정 시간이 경과하면 자동적으로 취소되게 되므로 새로운 연결에 대해 응답할 수 있게 된다. 그러나 이와같은 복구에 소요되는 시간보다 빠르게 공격자 시스템이 반복적으로 속임용 IP 패킷을 전송할 수 있다.

대부분의 경우, 이러한 공격의 피해 시스템은 새로운 네트워크 연결 요청을 받아 들이는데 곤란을 겪게 되며 서비스제공 능력의 저하를 가져온다. 그러나 기존의 외부로 부터의 연결이나, 외부로의 새로운 접속 요청 전송에는 영향을 받지 않는다. 그러나 특별한 경우, 시스템의 메모리가 고갈되거나, 파괴되거나, 또는 작동불가능하게 될 수도 있다.

SYN 패킷의 근원지 주소가 가짜이므로 공격의 근원을 알아내는 것은 어려우며 패킷이 피공격 서버에 도착한 뒤에 근원을 알아내는 것은 불가능하다. 네트워크는 패킷을 목적지 주소만을 이용하여 전달하므로 근원을 검증하는 유일한 방법은 입력 소스 필터링을 이용하는 것 뿐이다. 현재의 IP 프로토콜 기술로는 IP 속임 패킷을 제거하는 것이 불가능하므로 현재로서는 이 문제에 대한 완전한 해결책이 없는 상태이다. 그러나 관리하고 있는 네트워크로 유입되거나 이로부터 유출되는 IP 속임 패킷을 감소시킬 수 있는 방법이 있다. 즉, 라우터를 적절히 구성하므로써 공격당할 가능성을 줄이거나, 해당 사이트내의 시스템이 공격의 근원이 될 수 있는 가능성을 감 소시킬 수는 있다.

현재로서의 최상의 해결책은 외부 접속용 인터페이스로의 유입을 제한하는 필터링 라우터(입력 필터라고 부름)를 설치하여 근원이 내부 네크워크인 모든 패킷의 유입을 금지시키는 것이다. 이에 더하여 근원이 내부 네트워크가 아닌 모든 패킷의 유출을 금지시켜 관리하의 사이트로 부터 IP 속임 공격이 발생되는 것을 방지할 수 있다. 그러나 이러한 방법도 외부 공격자가 다른 임의의 외부 주소를 이용하거나, 내부의 공격자가 내부의 주소를 이용하여 공격하는 것에 대해서는 방어하지 못한다.

역링크