본문 바로가기

전공 공부/리눅스 보안 실습

DoS 공격(SYN Flooding)

728x90

이 글은 교육목적으로 작성하는 것으로 절대 타인의 컴퓨터에 공격을 해서는 안됩니다.

범죄 행위이고 처벌을 받을 수 있습니다.

모든 해킹 행위는 자기 자신에게 책임이 있습니다.

 

제 블로그는 불법적인 해킹 행위를 권장하거나 유도하지 않습니다. 오로지 테스트 및 연습 목적으로 읽어주시면 감사하겠습니다.

1. DoS 공격이란?

서비스 거부 공격인 DoS(Denial of Serivce attack) 공격은 공격 대상이 수용할 수 있는 능력 이상의 정보를 제공하거나 사용자 또는 네트워크 용량을 초과시켜 정상적으로 작동하지 못하게 하는 공격입니다.

CPU, 메모리, 디스크의 자원을 고갈시킬 수 있고 네트워크를 마비시킬 수 있습니다.

 

2. SYN Flooding 공격 순서

1. 공격자는 많은 숫자의 SYN 패킷을 서버에 보냅니다.

2. 서버에서는 받은 SYN 패킷에 대해 SYN/ACK 패킷을 클라이언트로 보냅니다.

3. 원래대로라면 서버는 자신이 보낸 SYN/ACK 패킷에 대한 응답을 받게 되지만, 클라이언트 측에서는 SYN/ACK 패킷을 보내지 않습니다.

4. 서버는 세션의 연결을 기다리게 됩니다.

 

SYN: 연결 요청 패킷

ACK: 응답 패킷

RST: 세션 연결 리셋 패킷

3. SYN 패킷 실습

hping3 --rand-source 192.168.196.143 -p 80 -S

--rand-source: 출발지(Source) 주소를 랜덤으로 설정

-S: SYN 패킷 전송

192.168.196.143: 메타스플로잇터블 서버 아이피 주소입니다.

-p: 패킷을 보낼 포트 설정. 여기에서는 80번 포트

 

 

와이어 샤크를 사용해 해당 패킷을 보면 각자 다른 출발지(Source) 주소에서 SYN 요청을 보내는 것을 볼 수 있습니다.

해당 서버에서 [SYN, ACK] 패킷을 다시 보내는 것 또한 확인할 수 있습니다.

 

 

4. SYN Flooding 공격

 

hping3 --rand-source --flood 192.168.196.143 -p 80 -S

 

--flood: 최대한 빠른 속도로 패킷을 전달

 

기존 명령에 추가로 --flood 옵션을 주어 최대한 빠른 속도로 SYN 요청 패킷을 보냈습니다.

 

 

 

여기에서 사용한 피해자 서버는 메타스플로잇터블 서버입니다.

원래 80번 포트로 접속을 하게 되면, 왼쪽 그림과 같이 metasploitable2라는 이름의 웹서버가 나타나게 되지만, 

SYN Flooding 공격을 시작한 후 세션이 찰 때까지 조금 기다리면, 오른쪽 그림처럼 접속이 되지 않습니다.

 

 

 

메타스플로잇터블에서 본 네트워크 연결 상태입니다. SYN_RECV 상태로 많은 세션이 유지되고 있는 것을 확인할 수 있습니다. 

 

- SYN RECV: 외부로부터 SYN 요청을 받은 상태

 

 

일정 시간이 지난 후 서버에서 SYN 요청들을 처리하게 되면, 서버 접속이 다시 원활하게 되는 것을 볼 수 있습니다.

 

 

5. 보안대책

1. 시스템 패치 설치

2. 침입 탐지 시스템인 IDS나 침입 차단 시스템(IPS)을 설치합니다.

3. 방화벽, 라우터에서 해당 IP 주소 대역 접속을 금지시킵니다. (짧은 시간 안에 똑같은 형태의 패킷을 보내는 공격을 인지 했을 경우)

4. 서버에서 클라이언트로 보내는 SYN+ACK 패킷에 암호화 기술을 이용해 인증정보가 담긴 seq 값을 생성하여 클라이언트에 보내는 SYN Cookie을 사용합니다. => 서버가 직접 하지 않고 중간에 쿠키값을 두고 검증을 하여, 제대로 되었을 경우만 인증. 

 

/etc/sysctl.conf 에서 설정이 가능합니다.

#net.ipv4.tcp_syncookies=1 에서 주석 처리된 #을 지우고 파일을 저장하면 적용이 됩니다.

728x90