본문 바로가기
Python

Python을 이용한 UDP Flooding 구현

by 웹하는빡통 2020. 7. 8.

UDP Flooding Attack: DoS(Denial of Service) 공격의 일종으로 대량의 UDP 패킷을 이용하여 대상 호스트의 네트워크 자원을 소모시키는 공격을 말한다.


UDP Flooding 공격의 경우 SYN Flooding 공격과는 달리 네트워크 bandwidth 를 소모시키는 것이 목적이라. 단일 공격 호스트로는 효과를 볼 수 없기 때문에 DDoS 로 구성해서 공격이 이루어진다.

 

발생원인. 

UDP 패킷에는 출발지 IP 주소 항목이 있지만 프로토콜 특징상 비연결 지향이기 때문에 해당 주소의 정확성 여부를 검증하지 않는다. 이러한 점을 악용해 해커들은 UDP 또는 ICMP 패킷을 다량으로 전송하면서 마치 서로 다른 사용자로부터 출발한 패킷처럼 조작할 수 있다.

 

서버는 자신이 운용 가능한 네트워크 대역폭이 제한적일 수밖에 없으므로 일정 정도의 임계치를 초과하면 해당 서비스가 잠식될 수 있으며, 다른 정상적인 접속 요청을 원활하게 처리할 수 없게 된다. 서버 관리자 입장에서 악성 행위를 일삼는 IP 주소를 조사해 차단하면 될 것이라고 생각하겠지만 사실은 조작된 IP 주소이기 때문에 사실상 불가능하다. 

 

소스코드.

코드를 간단히 설명하자면 bytes 변수에 무작위로 1024만큼의 메시지를 생성한 뒤 

(bytes = random._urandom(1024))를 설정한 IP 주소(127.0.0.1)의 특정 포트 번호(123)로 sendto() 함수를 반복적으로 수행한다. 이처럼 while문을 이용하여 무한대로 실행하다 지정 시간(10초)이 되면 실행을 중지시킨다. 

 

실행결과.

댓글