DDoS 공격은 OSI 7계층의 3(네트워크), 4(전송), 6(표현), 7(응용) 계층에서 일반적으로 발생합니다.
인프라 구간에서 일어나는 방식인 3, 4계층 공격은 클라우드 서비스 제공 업체가 대응을 보장해 주지만 7계층에서 일어나는 공격은 코드 수정 및 설정 변경이 필요합니다.
애플리케이션 계층 공격은 공격자가 애플리케이션의 특정 함수에 오버로드 하여 애플리케이션을 사용할 수 없게 하거나 합법적인 사용자가 응답하지 않도록 합니다. 소량의 네트워크 트래픽만으로 공격이 가능하여 이를 감지하기 어려운 경우도 있습니다. HTTP 기반의 7계층 공격의 대표적인 DDoS 기법 중 RUDY 공격에 대해 알아보겠습니다!
Slow HTTP POST DoS 공격으로 RU-Dead-Yet?의 약자입니다. 개발자의 보안 설정 오류 또는 애플리케이션, 프레임워크 등이 최신 버전이 아닌 경우 취약점을 활용한 공격 기법입니다. DDoS 공격은 대용량 트래픽을 보내 서버의 가용량을 침해하는 방해 공격이라면, slow 공격 기법은 적은 트래픽으로 가용량을 침해합니다.
HTTP 특성 중 하나인 상태 정보를 유지하지 않는다를 이용한 공격으로 이를 강제로 지속하기 위해 지연시키는 공격입니다. POST 방식으로 비정상적으로 많은 데이터를 보낸다고 하고, 천천히 조금씩 작은 데이터를 전송합니다.
HTTP POST 메소드를 사용하여 헤더의 Content-Length 값을 매우 큰 값으로 조작하고 데이터를 아주 작은 단위로 분할하여 전송합니다. 서버는 클라이언트의 HTTP 헤더의 Content-Length 값을 보고 그 길이만큼 Content가 올 때까지 Connetion을 유지합니다. 실질적인 Content는 일정한 시간 간격으로 한 문자씩 전송합니다. 결국 서버는 한 세션당 Contetn-Length X Interval Seconds 만큼의 지연이 발생합니다. 이는 KeepAlive의 취약점을 활용하여 비정상적인 크기의 데이터를 잘게 쪼개어 보내 커넥션을 점유하는 방식입니다.
느리고 낮은 공격은 전통적인 서비스 거부 공격보다 훨씬 더 조심스럽게 수행되기 때문에 감자하기 어려울 수 있습니다. 또한, 서버 측에서 KeepAliveTimeout으로 연결을 끊지 않는 이상 실제 요청은 정상적으로 이루어지기 때문에 에러 로그 역시 남지 않습니다.
까다로운 RUDY 공격을 와탭을 통해 확인하는 방법은 다음과 같습니다.
1. 애플리케이션 대시보드의 히트맵에서 응답시간이 긴 트랜잭션을 선택합니다. 히트맵의 Y 축은 응답시간을 의미하므로 응답시간이 긴 트랜잭션은 커녁션이 오랫동안 끊기지 않은 요청일 확률이 높습니다.
2. HTTP 메소드가 POST인 경우 HTTP 호출 시간을 내림차순 정렬하여 호출시간이 가장 큰 트랜잭션의 HTTP 헤더 값을 확인합니다.
3. HTTP 헤더의 Content-Length 길이를 확인합니다. Content-Length 길이가 비정상적으로 길며 응답시간이 긴 POST 호출은 해당 공격으로 인지할 수 있습니다.
세션 임계치 설정 또는 적절한 타임아웃 설정을 통해 해당 공격을 방지할 수 있습니다.
1. 임계치 설정 Content-Length 및 실제 인입 패킷 사이즈를 임계치로 설정하여 차단합니다. Content-Length가 설정한 크기보다 큰 POST 패킷이 인입될 때 지정된 시간 동안 지정한 크기 이하의 패킷이 n개 이상 확인될 경우 차단하도록 설정합니다. 또한, 동일한 출발지 IP에서 동시에 연결할 수 있는 연결 개수에 대한 임계치를 설정합니다.
2. 타임아웃 설정
- 연결 타임아웃 설정
클라이언트와 웹서버 간에 아무런 데이터 송수신 없이 세션을 유지하는 시간에 대한 타임아웃을 설정하여 연결을 종료합니다.
하지만 해당 설정으로 인터넷 연결이 느린 올바른 사용자 연결이 서버에서 서비스 거부가 될 수 있습니다.
- 읽기 타임아웃 설정
요청 바디 정보가 일정 시간 동안 모두 수신되지 않으면 오류를 응답하도록 설정합니다.
와탭을 통해 7계층에서 일어날 수 있는 DDoS를 판별하고 조치를 위한 근거를 마련할 수 있습니다.