본문 바로가기

Programing/Network Programing

[C/C++] Windows ICMP Flood Programing

오늘은 Dos공격에 사용되는
ICMP Flood Program을 간단히 다뤄보겠다.
들어가기에 앞서
ICMP Flood에 대하여 조금 설명하면,

ICMP Flood는 널리 알려진
Dos/DDos 공격에 사용되는 대표적인 공격방법으로,
특정 목적 호스트로 Ping Request 패킷을
자신의 대역폭 만큼 보내기만 하는 공격방법이다.

일반적인 Ping의 사용은
Ping Request와 Ping Reply를 통하여
목적지가 되는 호스트와의
통신이 원활한지를 테스트 하는데 사용되는데,
Reply를 무시하고 Request만 보냄으로써
공격 host에서 가능한 대역폭 만큼 패킷을 전송하여
공격하는 방법이 ICMP Flood 공격이다.

사실 우리가 널리 알고 있는 DDos 공격도 수많은 host에서 동시 다발적인
ICMP Flood 공격을 통해서 이뤄졌다고 할 수 있다.


testtool.exe

위 프로그램은 인터넷에 떠도는 Win raw_sock을 이용한 프로그램 소스를 내가 조금 고쳐 프로그래밍 한 것이다.

실행파일을 실행시키면 DLL파일이 없다는 오류창이 나올 수 있다.
당황하지 말고 google 검색을 통해서 에러 나오는
해당 dll 파일을 다운 받아 같은 폴더안에 넣고 실행시키면 된다.
사용 시 주의할 점 한가지는 윈도우에서 출발지 아이피를
자신의 host의 IP로 설정하지 않으면 윈도우 차원에서
차단 시킨다는 점을 유의하자.

이제 간단히 icmp flood programing을 위한 소스를 간단히 살펴보면,


icmp flood 프로그래밍은Win Raw_sock Programing의 응용이라 할 수 있다.
따라서 Raw_sock을 사용하기 위해서 IP헤더와 그 위의 사용할 헤더들을 정의 또는 헤더파일로 설정해 주어야 한다.


그리고 Windows에서 Raw_sock 프로그래밍을 하려면 특정한 라이브러리를 필요로 하는데,
이를 위한 것이 맨 윗줄이다. 이를 하지 않으면 링크에러가 발생한다.

메인에서는 Raw socket을 initialize 해준 다음에,
ip 헤더와 icmp 패킷을 세팅해 주어야 한다.


다음은 패킷의 전송부분이다.



전체 소스를 다루기 보다는 몇몇 핵심적인 부분만 짚어 보았다.
사실 위의 소스는 인터넷에 떠도는 Win Raw sock의 소스를 조금 응용한 것에 지나지 않기에
큰 의미는 없다. 그렇지만 같이 공부하는 여러 많은 이 들의 편의를 위해 조금 살펴보았다.

참조한 레퍼런스
http://kldp.org/node/96898
http://www.codeproject.com/KB/IP/rawsocket.aspx
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/ICMP_%C7%C1%B7%CE%B1%D7%B7%A1%B9%D6


전체 소스가 필요하신 분을 위해 업데이트!