장비의 성능을 테스트 해 보거나, 방화벽이 제대로 패킷을 차단하는지, 프로토콜이 올바른지 등을
확인해 보고자 할때 의도적으로 패킷을 생성할 필요가 있다. 또는 조작된 패킷으로.
다양한 도구들이 많이 나와있는데, 앞으로 차차 소개하기로 하고 오늘은 리눅스기반의 패킷생성도구인
Mausezahn 을 소개한다.
패킷을 의도적으로 생성하여 이용할 수 있는 곳은 서두에서 잠깐 언급한 것과 같이
사용처가 아주 다양하다. 악의적으로 조작되어 공격에 이용될 수도 있는 문제점도 있지만,
패킷인사이드를 방문하시는 분들은 업무의 활용, 스터디 목적이므로.
이미지출처 : www.perihel.at
공식 사이트는 다음과 같으며, 명령어는 mz 로 불린다.
자, 우선 소스파일을 다운받고 컴파일을 한다. 단, 컴파일 전에 다음의 요구조건이 충족되는지 확인하자.
[필요한것]
* cmake
* libpcap0.8-dev (version >= 0.8 will definitely work)
* libnet1-dev (version >= 1.1 will definitely work)
* libcli-dev (version >= 1.9.1 will work)
데비안 사용자라면 apt-get install cmake 와 같이 간단히 패키지를 설치할 수 있다. 각 운영체제에 맞는
방법으로 설치하자.
다운로드 받은 소스파일을 적절한 위치에 풀고 진행한다. (참고로, 소스파일을 풀면 해당 위치가
루트 이므로 디렉토리를 하나 만들고 그 안에 풀어주는 것이 좋을것이다)
1. cmake 를 실행해 주자.
$ cmake .
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kwanjin/workout/mz
2. 컴파일을 하기 위해 make 를 실행한다.
[CODE bash]$ make
.
.
[ 98%] Building C object src/CMakeFiles/mz.dir/cli_igmp.o
[100%] Building C object src/CMakeFiles/mz.dir/cli_lldp.o
Linking C executable mz
[100%] Built target mz[/CODE]
3. 컴파일한 mz 를 설치하려면 'make install' 을 한다.
사용방법은 mz -h 를 해보면 볼 수 있고, 많은 내용이 있으므로 직접 한번 살펴보기를 바란다.
간단한 예를 들어보면 아래와 같다.
# ./mz eth4 -c 1000 "ff:ff:ff:ff:ff:ff ff:ff:ff:ff:ff:ff cc:dd 00:00:00:ca:fe:ba:be"
mz 다음에는 이더넷 인퍼페이스를 지정하고 -c 옵션은 카운트를 뜻한다. 그리고 임의의 연속적인 바이트를
지정하였다. tcpdump 로 해당 인터페이스를 덤프하면 다음과 같은 패킷을 볼 수 있다.
23:47:12.169827 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
0x0000: 0000 00ca feba be .......
23:47:12.169831 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
0x0000: 0000 00ca feba be .......
23:47:12.169834 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
0x0000: 0000 00ca feba be .......
23:47:12.169838 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
0x0000: 0000 00ca feba be .......
23:47:12.169841 Broadcast > Broadcast, ethertype Unknown (0xccdd), length 21:
0x0000: 0000 00ca feba be .......
TCP Flooding 형태의 트래픽도 전송할 수 있다. -c 다음에 0 이 오면 루프를 도는 것이다. 즉, 사용자가
멈출때까지 계속 동작하므로 주의한다. -A 는 출발지 IP 를 랜덤으로 설정하고 -t 는 프로토콜 타입으로
tcp 를 선택하고 -B 는 목적지 IP 를 정의한 것으로 예제에서는 C 클래스 대역으로 설정하였다. 그 이후
flags 에는 SYN 타입을 정의했고 목적지 포트로 5555 번을 설정했다.
# ./mz eth4 -c 0 -A rand -t tcp -B 10.29.2.0/24 "flags=syn, dp=5555"
Mausezahn will send frames infinitly...
다음은 프로토콜 타입만 ARP 로 보낸 것이다.
# ./mz eth4 -c 0 -A rand -t arp -B 10.29.2.0/24
한쪽에서는 전송하고 다른 한쪽에서 트래픽을 덤프하면 생성되는 것을 볼 수 있을 것이다.
한가지 이 프로그램이 독특한 부분이 있는데, 위에서 라이브러리 사용된 것을 보고 감을 잡으신 분들도
있을 것이다. libcli 는 시스코스타일의 대화형 화면을 제공해 준다. 시스코 라우터나 스위치를
접해 보신분들은 아마 익숙할 것이다.
-x 후에 사용할 포트를 지정하고 실행하면 지정된 포트로 리스닝을 하며 동작한다.
# ./mz eth4 -x 1234
자 그리고 해당 포트 번호로 접속을 해본다. 지정된 인터페이스에 할당된 IP 로 접속을 시도해 보자.
# telnet 192.168.0.6 1234
Trying 192.168.0.6...
Connected to 192.168.0.6.
Escape character is '^]'.
------------------------------------------
Mausezahn, version 0.39
Copyright (C) 2007-2009 by Herbert Haas.
------------------------------------------
Mausezahn comes with ABSOLUTELY NO WARRANTY; for details
type 'warranty'. This is free software, and you are welcome
to redistribute it under certain conditions; see COPYING
(included in the Mausezahn source package) for details.
For Mausezahn NEWS visit http://www.perihel.at/sec/mz/
위와 같은 화면이 뜨고 사용자 이름과 패스워드로 mz 를 넣어본다.
Username: mz
Password:
그리고 enable 을 넣고 'mops' 라는 패스워드를 입력하면 준비된 것이다.
mz-0.39> enable
Password:
mz-0.39#
시스코 스타일의 형태로 나오므로 어렵지 않게 사용이 가능하다. 도움이 필요하면 ? 를 눌러보자.
아래 그림은 패킷을 만드는 예로 TCP-Flooding 이라는 것을 만들고 목적지 IP 는 192.168.1.1 로 설정하며
목적지 주소는 랜덤하게 한다. 1000번을 수행하며 타입은 TCP 이다. 플래그는 syn 으로 셋팅하고
end 로 종료하였다.
자 다음 sh packet 으로 보면 앞에서 만들었던 내용이 있다. 실행하길 원하면 start 와 함께 ID 를 지정하면
된다. 패킷의 자세한 내용을 보기 위해 sh packet 2 해서 세부 정보를 보는 화면도 보인다.
다른 패킷 생성기와는 달리 이런 대화형 형태를 제공해 주어, 지속적으로 저장해 놓고 임의의 값을 변경하여
수행하고자 하는 경우에는 유용하게 사용할 수 있을 것이다. 예를 들면, 모의해킹등.
물론, 편안한 방법은 각자 다르겠지만, 일단 이러한 것도 있다는 것을 알아두면 좋을 것이다.
Mausezahn은 C 로 제작된 만큼 빠른 속도를 제공하고 자유롭게 사용할 수 있다. 다만, 아직 윈도우 기반은
지원하지 않고 리눅스(기타 유닉스 플랫폼) 에서만 가능하다.