블로그 내의 모든 예시와 실습은 VMware workstation16.2.3, Kali Linux 2022.03, CentOS 6.5 를 활용 합니다.
TCP SYN Flooding
- TCP가 데이터를 보내기 전에 연결을 먼저 맺어야 하는 연결지향성을 이용한 방법
- Attacker는 Victim에 Source IP Address를 Spoofing 하여 SYN 패킷을 특정 포트로 전송하여 해당 포트의 대기 규(Backlog Queue)를 가득 차게 하여 해당 포트에 들어오는 정상적인 연결요청을 큐가 빌 때까지 무시하도록 한다.
- UDP Flooding 이 주류를 이루기 이전에 많이 사용되던 방식
- 시스템 부하 -> 메모리 부하(프로그램의 Backlog Queue)
Backlog Queue
- TCP 서비스에서 클라이언트의 연결 상태정보를 기억하기 위한 공간(IP로 구분)
- SYN Backlog -> 클라이언트의 SYN을 받고 SYN/ACK를 전달한 SYN_RCVD 상태정보 기억
- Listen Backlog -> SYN/ACK의 대한 응답 받은 Esablished 상태 정보 기억
공격원리
- 출발지 IP를 Random하게 변조하여 연결요청(SYN)을 전달한다.
- 공격 대상의 Backlog Queue가 가득 차서 정상 클라이언트의 연결 정보를 저장 하지 못하게 된다.
- #hping3 –rand-source [공격대상 IP] -p 80 -S –flood
Kali에서 Wire shark 실행
Kali에서 공격
- 공격하기전 만약 web server가 centos에 설치가 안되어있다면 yum -y install httpd를 입력해 설치해준다.
- 필자는 웹 서버가 이미 구축되어 있다.
공격 성공
centos에서 확인
보안
- 시스템 최적화
- Backlog Queue 사이즈 증가, SYN_RCVD 대기시간 단축, Registry 설정
- syncookie 기능 활성화
- 보안 솔루션을 통한 방어
syncookie
- SYN Flooding을 발생했을 때 정상 사용자의 Connection을 보장하는 기술
- 연결요청(SYN)의 초기 순서번호(ISN)를 이용하여 정상 연결된 연결을 구분 한다
- 동작 순서
- 클라이언트의 SYN에 대한 SYN/ACK를 전달한 후 ISN을 식별값으로 설정한다.
- syncookie에게 전달 정보를 전달하고 서버는 SYN에 대한 정보를 Backlog Queue에서 삭제 한다.
- 이용 정상적인 확인 응답(ACK)를 전달받아서 3WQY-Handshake가 정상적으로 이뤄지면 깃별값(ISN)을 이용하여 Backlog Queue에 클라이언트 정보를 복원시킨다.
- vim /etc/sysctl.conf
- #sysctl net.ipv4.tcp_syncookies=1