서비스 거부 공격을 완화하기 위해 TCP 연결을 불순하게 닫을 수 있습니까?

서비스 거부 공격을 완화하기 위해 TCP 연결을 불순하게 닫을 수 있습니까?

저는 서비스 거부 공격의 대상이 될 수 있는 웹 서비스를 개발하고 있습니다. "SYN 플러드" 스타일 공격에 대한 몇 가지 완화 조치가 마련되어 있습니다. 그러나 우리 서비스에 대한 다른 "애플리케이션 수준" 공격이 있는데, 악의적이거나 손상된 클라이언트가 웹 서비스에 비용이 많이 드는 작업을 수행하도록 반복적으로 지시할 수 있습니다.

우리는 애플리케이션 계층, 즉 서버 프로세스에서 이러한 악의적인 클라이언트를 식별할 수 있습니다. 프로세스에서 악의적인 클라이언트 연결을 식별하면 해당 클라이언트에 대한 서비스 수준을 낮추고 싶습니다.

close(2)순진한 방법은 , shutdown(2)또는 유사한 명령을 사용하여 TCP 연결을 종료하는 것입니다 . 그러나 클라이언트는 즉시 다시 연결할 수 있으며(SYN 플러드를 완화하기 위해 설정된 연결/초 제한까지) TLS 핸드셰이크 및 기타 연결 설정 비용으로 인해 이 재연결에는 비용이 많이 듭니다. 우리는 클라이언트가 우리 서비스와 상호 작용하는 것을 잠시 중단하는 방법을 찾고 있지만 완전한 TCP 연결 종료로는 이를 수행할 수 없습니다.

그러나 프로세스가 TCP 연결을 종료할 수 있는 경우불결하게, 악의적인 클라이언트는 다시 연결되기 전에 일정 시간 동안 지연되므로 "냉각" 기간이 제공됩니다. "비정상 종료"란 FIN클라이언트에게 종료를 알리기 위해 패킷을 보내지 않고 해당 연결을 참조하는 추가 패킷을 보내지 않고 서버 측에서 TCP 연결(전이중의 두 절반 모두)을 닫는 것을 의미합니다 . 이렇게 하면 클라이언트가 연결이 여전히 ESTABLISHED상태(Linux에서는 13~30분) 에 있다고 간주하는 동안 클라이언트가 지연됩니다 .

그러나 UNIX/Linux 프로세스가 TCP 연결을 불결하게 종료하는 방법은 없습니다. close(2), shutdown(2)및 이와 유사한 모든 것이 연결을 깔끔하게 종료하는 것으로 보이며 비정상 종료에 대한 옵션을 제공하지 않습니다.

DOS 공격을 완화하기 위해 즉각적이고 비정상적 TCP 연결 종료를 위한 옵션이 UNIX/Linux에 존재합니까?

답변1

당신이 조사해야 할 것은 방화벽과 fail2ban. iptablesLinux 배포판에서는 여전히 표준이며 fail2ban대부분의 서비스에서 작동합니다. 당신이 원하는 것은 fail2ban특정 정규식 패턴을 사용하여 특정 로그 파일을 모니터링하여 이러한 '문제가 있는' 클라이언트 중 하나가 연결되는 시기를 파악한 다음 fail2ban자동으로 방화벽 규칙을 추가하여 연결을 삭제하거나 거부하도록 구성하는 것입니다. Fail2ban은 방화벽 규칙을 벗어나는 방법을 구성할 수 있으므로 원하는 대로 클라이언트를 5분 또는 5일 동안 차단할 수 있습니다.

이러한 유형의 작업에는 웹 애플리케이션 방화벽(WAF)을 사용할 수도 있습니다.

DOS 공격에 관한 한, 수행 방법에 따라 로컬 방화벽이 없을 수도 있고 문제가 있고 원인이 되는 것으로 알려진 블랙홀 경로나 호스트에 대해 업스트림 공급자에게 문의해야 할 수도 있습니다. 심각한 서비스 중단. 귀하는 이러한 유형의 위치에 있지 않고 해결해야 할 잠재적인 애플리케이션 계층 문제가 있는 것처럼 들리므로 이는 과잉입니다.

답변2

프로세스에서 악의적인 클라이언트 연결을 식별하면 해당 클라이언트에 대한 서비스 수준을 낮추고 싶습니다.

새로운 연결을 설정하는 데 비용이 든다고 이미 말씀하셨으므로 연결을 종료하는 것보다 다른 방법을 고려하는 것이 좋습니다. 분당 1바이트 또는 이와 유사한 연결 속도 제한을 고려할 수 있습니다. 이 접근 방식을 사용하면 최소한의 비용으로 공격자의 리소스를 바쁘게 유지할 수 있습니다. 시간이 더 많고 창의적이기를 원한다면 다른 서버가 열린 파일 제한을 낭비하지 않도록 이러한 모든 연결을 환경의 한 서버로 리디렉션하십시오. Andrew가 언급했듯이 공격자가 연결한 것을 확인한 후 몇 시간 동안 연결을 금지해도 안전하다는 점을 확인한 후에는 Fail2ban 사용을 고려할 수도 있습니다.

관련 정보