SYN Flooding Attack(DDos) 대응 정리

2021. 12. 27. 14:37·Web/정리글

SYN Flooding Attack란?

SYN ACK는 4 Layer 계층에서 TCP의 3-way hadnshake를 맺을 때 교환하는 비트 정보이다.

 

기본적인 TCP 3-way handshake

  1. 클라이언트가 서버에 SYN을 보낸다.
  2. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다.
  3. 클라이언트가 SYN 응답으로 ACK를 보낸다.

SYN Flooding Attack 방식의 경우

  1. 공격자가 서버에 SYN을 보낸다.
  2. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다. (ACK를 기다리며 대기한다.)
  3. 공격자는 ACK를 보내지 않고 대량의 SYN을 보낸다. (이때 패킷은 내용은 없고 헤더에 SYN 비트만 체크되어있다)
  4. 서버는 SYN에 대응하기 위해 사용하지 않는 포트를 계속 할당하다가 모든 포트가 사용되면 서버는 더 이상 정상적인 수행이 불가능해진다.

즉, 음성사서함이 10개가 있을 수 있다고 하자. 이때 공격자가 10개를 초과하는 아무내용이 없는 음성 메시지를 대량으로 남기면 이후 음성 사서함을 이용하고자 하는 사람은 이용할 수가 없게될 것이다. 이와 같은 원리이다.

 

도식화

위와 같이 공격이 진행된다고 보면된다.


사건

웹 서비스를 운용중에 있는데 자꾸 서버가 죽는 이슈가 발생했다. 이에 원인을 파악하고자 AWS의 Cloud watch를 통해 네트워크, CPU 사용량 등을 확인했다.

CPU 사용량

CPU 사용률이 새벽시간 대에 99.9%까지 치솟고 서버가 다운되는 것을 확인할 수 있었다. 이에 VPC의Flow logs를 사용하여 로그를 확인해보기로 했다.

 

불특정 IP에서 REJECT 하는 모습

수집된 로그는 Cloud Watch에서 확인할 수 있었는데 129.237.x.x 에서 랜덤한 포트번호로 수천개의 요청이 오고 REJECT 된것을 확인할 수 있었다.

이는 공격자가 ACK 요청을 보내고 서버가 보내는 ACK & SYN에 대해 응답을 보내지 않은 상태에서 ACK flooding을 통해 서버의 포트를 마르게 하고 결과적으로 서버가 감당할 수 없는 요청에 정상적인 서비스 진행이 되지 않도록 하는 공격 방식이다.

대응

일단 공격에 대한 대응을 위해 해당 IP주소를 VPC의 보안설정에서 네트워크 ACL에 인바운드 규칙과 아웃바운드 규칙에 해당 IP를 등록해 놓으므로서 처리했다. ACL은 Access Control List로 접근 제어 목록을 의미한다. 규칙 번호가 낮은 것부터 먼저 적용이 되는 방식이므로 해당 IP를 기존 규칙보다 낮은 수로 해서 등록했다.

 

기본적으로 AWS는 DDos 방지를 위해 AWS Shield Standard를 제공하는데 왜 이런 ACK Flooding Attack과 같은 디도스를 방지하지 못하는지 의문이다. CLOUDFLARE 가 이런 류의 공격에 방어를 제공해준다고 하여 이동을 고려해봐야 겠다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'Web > 정리글' 카테고리의 다른 글

Spring @Transactional - JdbcTemplate에 트랜잭션이 전파되는 원리 정리글  (0) 2025.12.07
JWT 사용이유  (0) 2022.05.26
자바 웹 역사 정리  (1) 2021.12.21
멀티 쓰레드 정리  (0) 2021.12.20
HTTPS, TLS 정리  (0) 2021.10.19
'Web/정리글' 카테고리의 다른 글
  • Spring @Transactional - JdbcTemplate에 트랜잭션이 전파되는 원리 정리글
  • JWT 사용이유
  • 자바 웹 역사 정리
  • 멀티 쓰레드 정리
구름뭉치
구름뭉치
구름의 개발일기장
    반응형
  • 구름뭉치
    구름 개발일기장
    구름뭉치
  • 전체
    오늘
    어제
    • ALL (284)
      • 프로젝트 (23)
        • 토스페이먼츠 PG 연동 시리즈 (12)
        • JWT 방식 인증&인가 시리즈 (6)
        • 스우미 웹 애플리케이션 프로젝트 (1)
        • 스프링부트 기본 보일러 플레이트 구축 시리즈 (2)
        • 마이크로서비스 아키텍쳐 시리즈 (1)
      • 스프링 (43)
        • 스프링부트 API 설계 정리 (8)
        • 스프링부트 RestAPI 프로젝트 (18)
        • 스프링부트 WebSocket 적용기 (3)
        • 스프링 JPA 정리 시리즈 (5)
        • 스프링 MVC (5)
        • 스프링 배치 (2)
        • 토비의 스프링 정리 (2)
      • 기술 학습 (29)
        • 아파치 카프카 (9)
        • 클린 코드 (4)
        • 디자인 패턴의 아름다움 (2)
        • 모던 자바 인 액션 (7)
        • JVM 스레드 딥다이브 (7)
      • Web (25)
        • 정리글 (20)
        • GraphQL 정리글 (2)
        • Jenkins 정리글 (3)
      • 취업 (6)
      • CS (77)
        • 네트워크 전공 수업 정리 (11)
        • OSI 7계층 정리 (12)
        • 운영체제 정리 (19)
        • 데이터베이스 정리 (5)
        • MySql 정리 (17)
        • GoF의 Design Pattern 정리 (12)
      • 알고리즘 (70)
        • 백준 (56)
        • 프로그래머스 (12)
        • 알고리즘 정리본 (1)
      • 기초 지식 정리 (2)
      • 일상 (8)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    mx master s3 for mac
    류블라냐
    마우스 패드
    마우스
    크로아티아
    부다페스트
    키보드 손목 받침대
    레이저
    동유럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
구름뭉치
SYN Flooding Attack(DDos) 대응 정리
상단으로

티스토리툴바