hping3를 이용한 포트스캔 및 DOS Attack

Posted by taeho Tae-Ho
2015.12.22 13:26 정보보호

hping은 TCP/IP 프로토콜을 사용하는 서버 및 네트워크 환경을 분석하거나 공격할 수 있는 패킷 생성기이자 분석도구다. 몇몇 버전이 있지만 현재 사용되는 최신 버전은 hping3다.


hping3의 사용법을 몇가지 정리해 본다.


1. icmp ping

hping3는 ping 명령어 처럼 icmp 프로토콜을 이용해 특정 IP에 대해 장비가 살아있는지...죽어 있는지를 확인할 수 있다. 


root@kali:~# hping3 -1 -c 3 211.xxx.xxx.xxx

HPING 211.xxx.xxx.xxx (eth0 211.xxx.xxx.xxx): icmp mode set, 28 headers + 0 data bytes

len=46 ip=211.xxx.xxx.xxx ttl=128 id=65246 icmp_seq=0 rtt=3.4 ms

len=46 ip=211.xxx.xxx.xxx ttl=128 id=65247 icmp_seq=1 rtt=2.3 ms

len=46 ip=211.xxx.xxx.xxx ttl=128 id=65248 icmp_seq=2 rtt=6.0 ms


--- 211.xxx.xxx.xxx hping statistic ---

3 packets transmitted, 3 packets received, 0% packet loss

round-trip min/avg/max = 2.3/3.9/6.0 ms

root@kali:~# 

root@kali:~# ping 211.xxx.xxx.xxx

PING 211.xxx.xxx.xxx (211.xxx.xxx.xxx) 56(84) bytes of data.

64 bytes from 211.xxx.xxx.xxx: icmp_seq=1 ttl=128 time=1.97 ms

64 bytes from 211.xxx.xxx.xxx: icmp_seq=2 ttl=128 time=2.26 ms

64 bytes from 211.xxx.xxx.xxx: icmp_seq=3 ttl=128 time=2.20 ms

--- 211.xxx.xxx.xxx ping statistics ---

10 packets transmitted, 10 received, 0% packet loss, time 9017ms

rtt min/avg/max/mdev = 1.972/2.182/2.282/0.095 ms

root@kali:~# 



2. 특정 IP에 대한 포트스캔(port scan)

hping3는 특정 IP에서 리스닝(Listening) 중인 포트를 확인할 수 있는 포트스캔(port scan) 기능을 지원한다.


root@kali:~# hping3 --scan 1-1024 -S 211.xxx.xxx.xxx

Scanning 211.xxx.xxx.xxx (211.xxx.xxx.xxx), port 1-1024

1024 ports to scan, use -V to see all the replies

+----+-----------+---------+---+-----+-----+-----+

|port| serv name |  flags  |ttl| id  | win | len |

+----+-----------+---------+---+-----+-----+-----+

   80 http       : .S..A... 128 61950 64240    46

All replies received. Done.

Not responding ports: (1 tcpmux) (2 nbp) (3 ) (4 echo) (5 ) (6 zip) (7 echo) (8 ) (9 discard) (10 ) (11 systat) (12 ) (13 daytime) (14 ) (15 netstat) (16 ) (17 qotd) (18 msp) (19 chargen) (20 ftp-data) (21 ftp) (22 ssh) (23 telnet) (24 ) (25 smtp) (26 ) (27 ) (28 ) (29 ) (30 ) (31 ) (32 ) (33 ) (34 ) (35 ) (36 ) (37 time) (38 ) (39 rlp) (40 ) (41 ) (42 nameserver) (43 whois) (44 ) (45 ) (46 ) (47 ) (48 ) (49 tacacs) (50 re-mail-ck) (51 ) (52 ) (53 domain) (54 ) (55 ) (56 ) (57 mtp) (58 ) (59 ) (60 ) (61 ) (62 ) (63 ) (64 ) (65 tacacs-ds) (66 ) (67 bootps) (68 bootpc) (69 tftp) (70 gopher) (71 ) (72 ) (73 ) (74 ) (75 ) (76 ) (77 rje) (78 ) (79 finger) (81 ) (82 ) (83 ) (84 ) (85 ) (86 ) (87 link) (88 kerberos) (89 ) (90 ) (91 ) (92 ) (93 ) (94 ) (95 supdup) (96 ) (97 ) (98 linuxconf) (99 ) 


위의 예는 특정 ip에 대하여 포트스캔(--scan)을 1번에서 1024번 TCP 포트까지 Syn Flag를 세팅하여(-S) 수행하는 경우다. (TCP Syn Scan)

이 경우 RedCastle과 같은 SecureOS를 적용하여 통제가 수행될 경우 혹은 네트워크 방화벽이 구축되어 있는 경우 감사로그를 보면 출발지IP를 바로 잡아낼 수 있다. 


[ Sync Scan이 탐지되고 차단된 로그 : RedCastle SecureOS]


3. Syn Flooding Attack 및 Land Attack

이러한 Syn Scan을 응용한 것이 TCP Syn Flooding 공격이다. hping3는 출발지 IP를 랜덤하게 바꿔가며 특정 IP의 특정 port에 무차별적으로 Syn 패킷을 보낼 수 있다. 분명히 말해두지만 그런 행위는 범법행위다.


hping3 -S -d 64 111.222.111.222 -p 80 --flood --rand-source


-S : syn 패킷을 보낸다.

-d 64 : 패킷의 데이터사이즈

111.222.111.222 : 공격대상 서버IP

-p 80 : 공격대상 서버의 공격대상 포트

--flood : 최대한 많은 패킷을 전송

-- rand-source : 출발지 IP를 무작위로 하여 공격자IP를 감춤


한가지 주의할 것은 공격자가 사설IP를 사용할 경우 그리고 공격 대상서버가 인터넷을 통해 공인망을 통과할 경우 피해자가 공격자 IP를 알아낼 수 있다. 왜냐하면 공격자가 사설IP를 사용한 다는 것은 공격자가 피해자에게 보낸 패킷의 출발지 IP를 게이트웨이가 자신(게이트웨이)의 IP로 바꾸어 보내기 때문에 게이트웨이 주소를 통해 공격자의 위치를 대략적으로 파악할 수 있기 때문이다.


만약 Land Attack을 하고자 한다면 다음과 같은 명령을 사용하면 된다.


hping3 -1 -a 10.10.10.10 -d 65000 10.10.10.10


-1 : ICMP 모드 (-2는 UDP모드, 안써주면 TCP)

-a 10.10.10.10 : 변조할 출발지 IP 즉 스푸핑할 IP. 공격대상 IP와 동일하게 써준다.

-d 65000 : ICMP 패킷사이즈. 크게 준다. 크면 Fragmentation하여 전송하게 된다.

10.10.10.10 : 목적지 IP. 즉 공격 대상 IP




이외에도 hping3를 이용하면 다양한 DOS 공격을 수행할 수 있다. 쉘스크립트 및 펄 스크립트를 이용해 내부적으로 hping3를 사용하는 스크립트를 작성하면 smurf attack, boink attack, udp fragmentation, udp flooding 등 대부분의 패킷을 조작하여 할 수 있는 TCP/IP 수준의 공격을 테스트해 볼 수 있다.


참 유용하면서도 위험한 명령어다. 참고로 이러한 공격은 라우터나 스위치 혹은 서버의 네트워크 설정에서 대부분 방어할 수 있기도 하다. 인터넷엔 이미 창봐 방패가 모두 공개되어 있다. 


신고
이 댓글을 비밀 댓글로
  1. 사실 접속 테스트 때문에 telnet이나 ping은 많이 사용하는데 이런 툴도 있었군요 ^^ 노트해 두어야 겠습니다
    • 저도 매번 옵션 지정하는 방법을 잊어버려서... ^^
      쉽게 찾을 수 있게 기록하는게 참 어렵습니다..