개발/AWS

SYN FLOOD 공격 및 대응 사례

bitofsky 2024. 2. 8. 14:41

서론
최근 우리 서비스는 네트워크 이상 현상과 그로 인해 발생한 장애를 경험했다.

이 문제는 특정 시간대에 집중적으로 발생했으며, AWS GlobalAccelerator, ELB (L4 NLB), EKS 구성을 통해 제공되는 서비스에 영향을 미쳤다. 문제는 사용자 수의 급격한 감소와 서비스 오동작으로 나타났다.

여러 시스템 지표와 로그 분석 결과 SYN FLOOD 공격으로 인한 것으로 강하게 의심되었다.

SYN FLOOD 공격의 원리
SYN FLOOD 공격은 TCP 연결 과정에서의 취약점을 이용하는 DoS (Denial of Service) 공격 유형 중 하나다.

공격자는 대량의 SYN 요청을 목표 서버에 보내 서버의 반응을 기다리는 SYN-RECEIVED 상태의 연결을 대량으로 생성하게 만든다.

서버는 이러한 미완성 연결에 대해 자원을 할당하며, 이 과정에서 너무 많은 요청이 들어오면 정상적인 트래픽을 처리할 수 없게 된다.

신규 커넥션 연결 뿐 아니라, 기존 연결되어있는 소켓에도 문제가 발생하게 된다.

여타 DDoS 유형의 공격과 차이점은, 신규 연결은 폭발적으로 증가하지만 송수신 트래픽은 급감하는 지표가 관찰된다는 점이다.

실제 사례 분석
우리 서비스에서 발생한 문제는 사용자의 급격한 감소와 서비스의 오동작으로 나타났다.

이 문제를 분석한 결과, AWS의 NLB에서 Pod 타겟에 대한 deregister → register 호출이 지속적으로 감지되었으며, 이는 SYN Flood 공격으로 인한 네트워크 트래픽 이슈가 발생했고 그로인한 health check 실패가 트리거로 작용해 LoadBalancer에서 서비스 Pod가 Deregister된 것이 문제였다.

공격으로 인해 NLB를 관리하는 aws-loadbalancer-controller에서 타겟 노드들이 비정상으로 인식되어 deregister되었으며 Pod 자체의 비정상 동작보다도 NLB에서 Pod들이 제거되어 서비스 트래픽을 아예 받지 못하는 상황이 된 것이 문제였다.

방어 기술 및 대응 조치
이 문제에 대응하기 위해 몇 가지 조치를 취했다.

우선, AWS 엔지니어와 협의를 통해 AWS Shield Advanced를 활성화하여 SYN Flood 공격으로부터의 보호와 알람을 강화했다. 이 서비스는 공격을 완전히 차단할 수는 없지만, 미티게이션을 통해 증상을 완화시키는데 도움을 줄 수 있다.

추가로, 서비스의 상태를 기반으로 연관 서비스에 서킷브레이크 되는 기능을 개발해 도입했다.
이 기능은 단시간에 특정 서비스 트래픽이 발생하는 경우 서비스 레벨에서 일정 시간 기능을 멈추도록 하는 완화 기능을 제공하도록 했다. 서킷브레이크가 동작하면 Grafana와 Slack 등을 통해 담당자에게 알림을 보내어, 신속하게 상황을 인식하고 대응할 수 있도록 했다.

그리고 서킷브레이크를 라이브 환경에 적용한 다음날 바로 이루어진 재공격으로 의심되는 트래픽에서 크게 효과를 보았으며, 서비스 장애를 막는데 큰 도움이 되었다.

서비스에 별다른 타격이 없다고 생각했는지, 공격자들이 더이상 이 서비스로 공격하는 행위를 보지 못하고있다.

결론 및 교훈
SYN FLOOD 공격은 네트워크 보안에 큰 위협이 되며, 이에 대한 효과적인 대응 방안을 마련하는 것이 중요하다.

이번 사례를 통해, 공격에 대한 신속한 인지와 적절한 대응 조치가 서비스의 안정성을 유지하는 데 필수적임을 다시 한번 확인할 수 있었다.

또한, 지속적인 모니터링과 예방 조치의 중요성을 재확인하며, 네트워크 보안을 강화하기 위한 노력을 계속해야 할 필요성을 느꼈다.