기타/IT

hping3 - 패킷을 손쉽게 만들어보자, 리눅스 패킷생성기 (2 - 고급활용편)

한그마 2020. 8. 19. 08:21

https://steer.tistory.com/10

 

hping3 - 패킷을 손쉽게 만들어보자, 리눅스 패킷생성기 (1 - 기본사용편)

리눅스 환경에서 패킷을 만드는 방법은 여러가지가 있습니다. 여기서는 제일 간단한 방법으로 패킷을 만드는 방법을 소개합니다. Ubuntu 기준으로 터미널에서 "apt-get install hping3"으로 hping3을 설치

steer.tistory.com

간단한 옵션을 안내한 "hping3 - 패킷을 손쉽게 만들어보자, 리눅스 패킷생성기" 1편에 이어

hping3 고급 활용편을 알려드리는 2편을 시작합니다.

패킷의 payload를 조작하는 방법, 무작위 출발지/목적지 IP를 설정하여 패킷 전송하는 방법을 알려드립니다.

구성 환경은 PC1(12.12.12.1)에서 PC2(13.13.13.1)로 패킷을 전송하는 상황을 가정해보겠습니다.


주의사항

폐쇄된 네트워크 환경에서 실습하시기 바라며, 외부 인터넷망으로 패킷이 흘러나가지 않도록 주의하시기 바랍니다.

 


 

페이로드 조작

hping3 툴은 패킷의 페이로드를 조작할 수 있도록 옵션을 제공하고 있습니다.응용하면 페이로드 조작을 통해서 시그니처 탐지 및 특정 패킷을 차단하는 시험을 수행할 수 있습니다.

 

  • -e : 패킷 내용
  • -d : 데이터 사이즈

1. "ABCDE" 페이로드를 가진 100byte 패킷을 전송합니다.

PC1

root@PC1:~# hping3 -2 13.13.13.1 -d 100 -e "ABCDE" -c 1
HPING 13.13.13.1 (eth1 13.13.13.1): udp mode set, 28 headers + 100 data bytes
[main] memlockall(): Operation not supported
Warning: can't disable memory paging!
ICMP Port Unreachable from ip=13.13.13.1 name=UNKNOWN
status=0 port=2086 seq=0

--- 13.13.13.1 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 9.3/9.3/9.3 ms

PC2

root@PC2:~# tcpdump -ni eth1 host 12.12.12.1 -xX
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
20:01:24.841284 IP 12.12.12.1.2086 > 13.13.13.1.0: UDP, length 100
        0x0000:  4500 0080 3b3d 0000 3f11 0e16 0c0c 0c01  E...;=..?.......
        0x0010:  0d0d 0d01 0826 0000 006c c2be 4142 4344  .....&...l..ABCD
        0x0020:  4558 5858 5858 5858 5858 5858 5858 5858  EXXXXXXXXXXXXXXX
        0x0030:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0040:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0050:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0060:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0070:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX

PC2에서 tcpdump의 hexa 옵션으로 패킷을 까 보면 "ABCDE" payload를 가진 100byte 패킷이 확인됩니다.

 

1. "ABCDEFGHIJK123456789" 페이로드를 가진 200byte 패킷을 전송합니다.

PC1

root@PC1:~# hping3 -2 13.13.13.1 -d 200 -e "ABCDEFGHIJK123456789" -c 1
HPING 13.13.13.1 (eth1 13.13.13.1): udp mode set, 28 headers + 200 data bytes
[main] memlockall(): Operation not supported
Warning: can't disable memory paging!
ICMP Port Unreachable from ip=13.13.13.1 name=UNKNOWN
status=0 port=2008 seq=0

--- 13.13.13.1 hping statistic ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 9.3/9.3/9.3 ms

PC2

root@PC2:~# tcpdump -ni eth1 host 12.12.12.1 -xX
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
20:04:47.310314 IP 12.12.12.1.2008 > 13.13.13.1.0: UDP, length 200
        0x0000:  4500 00e4 fc29 0000 3f11 4cc5 0c0c 0c01  E....)..?.L.....
        0x0010:  0d0d 0d01 07d8 0000 00d0 3ae3 4142 4344  ..........:.ABCD
        0x0020:  4546 4748 494a 4b31 3233 3435 3637 3839  EFGHIJK123456789
        0x0030:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0040:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0050:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0060:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0070:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0080:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x0090:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x00a0:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x00b0:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x00c0:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXXXXXXXXXX
        0x00d0:  5858 5858 5858 5858 5858 5858 5858 5858  XXXXXXXX

PC2에서 "ABCDEABCDEFGHIJK123456789" payload를 가진 200byte 패킷이 확인됩니다.

 


출발지/목적지 IP 임의 조작

hping3 툴은 패킷의 출발지/목적지를 조작할 수 있도록 옵션을 제공하고 있습니다.

앞서 말씀드렸다시피 절대 외부 인터넷망으로 패킷이 나가지 않도록 유의하시기 바랍니다.

 

  • --rand-source : 출발지 IP 임의 사용
  • --rand-dest : 임의의 목적지 IP로 전송

1. 임의 출발지 IP 사용하여 패킷 전송

PC1

root@PC1:~# hping3 -2 13.13.13.1 --rand-source
HPING 13.13.13.1 (eth1 13.13.13.1): udp mode set, 28 headers + 0 data bytes
^C
--- 13.13.13.1 hping statistic ---
39 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

PC2

root@PC2:~# tcpdump -ni eth1 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
20:08:44.382384 IP 56.241.22.204.2866 > 13.13.13.1.0: UDP, length 0
20:08:45.382520 IP 90.24.75.120.2867 > 13.13.13.1.0: UDP, length 0
20:08:46.382672 IP 129.63.24.2.2868 > 13.13.13.1.0: UDP, length 0
20:08:47.382799 IP 48.159.63.82.2869 > 13.13.13.1.0: UDP, length 0
20:08:48.382881 IP 135.56.249.86.2870 > 13.13.13.1.0: UDP, length 0
20:08:49.382985 IP 155.63.197.69.2871 > 13.13.13.1.0: UDP, length 0
20:08:51.383235 IP 39.26.30.69.2873 > 13.13.13.1.0: UDP, length 0
20:08:52.383355 IP 3.123.130.25.2874 > 13.13.13.1.0: UDP, length 0
20:08:53.383467 IP 81.146.124.159.2875 > 13.13.13.1.0: UDP, length 0
20:08:54.383592 IP 131.21.98.160.2876 > 13.13.13.1.0: UDP, length 0

PC2에서 패킷을 캡처해보면 출발지 IP가 무작위값으로 수신됨을 확인할 수 있습니다.

 

1. 임의 목적지 IP로 패킷 전송

임의 목적지 IP로 전송 시에는 "--rand-dest" 옵션과 함께 아래와 같은 추가 옵션을 사용해야 합니다.

  • "100.x.x.x" 와 같이 랜덤으로 생성할 목적지 IP 범위 지정
  • "--interface" 옵션으로 패킷 전송할 인터페이스 지정

 

PC1

root@PC1:~# hping3 -2 100.x.x.x --rand-dest --interface eth1 -c 10
HPING 100.x.x.x (eth1 100.x.x.x): udp mode set, 28 headers + 0 data bytes

--- 100.x.x.x hping statistic ---
10 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms

PC1의 "eth1" 인터페이스를 통해 패킷을 전송합니다.

 

PC2

root@PC2:~# tcpdump -ni eth1 udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
20:17:17.120812 IP 12.12.12.1.2290 > 100.47.90.147.0: UDP, length 0
20:17:18.120906 IP 12.12.12.1.2291 > 100.186.177.30.0: UDP, length 0
20:17:19.121005 IP 12.12.12.1.2292 > 100.231.122.95.0: UDP, length 0
20:17:20.121091 IP 12.12.12.1.2293 > 100.4.33.187.0: UDP, length 0
20:17:21.121190 IP 12.12.12.1.2294 > 100.90.211.111.0: UDP, length 0
20:17:22.121296 IP 12.12.12.1.2295 > 100.158.218.241.0: UDP, length 0
20:17:23.121418 IP 12.12.12.1.2296 > 100.203.17.160.0: UDP, length 0
20:17:24.121548 IP 12.12.12.1.2297 > 100.130.206.29.0: UDP, length 0
20:17:25.121669 IP 12.12.12.1.2298 > 100.188.233.185.0: UDP, length 0
20:17:26.121725 IP 12.12.12.1.2299 > 100.23.131.157.0: UDP, length 0

PC2에서 확인해보면 100.0.0.0/8 이내의 범위로 무작위 목적지로 패킷 생성됨이 확인됩니다.


다양한 종류의 패킷을 생성할때는 hping3 패킷 생성도구만 한 툴도 없는 것 같습니다.

실제 현업에서 절찬리에 사용중인 툴이며, 일관성 있고 간단한 옵션으로 패킷을 만들 수 있는 장점이 있어서 패킷 생성 자동화하기 아주 편리합니다.

네트워크 관련해서 학습하실 때 참고하시면 나중에 큰 도움이 될 수 있습니다.