2010년 3월 31일 수요일

트래픽 패킷 생성도구 Mausezahn 을 소개합니다.

장비의 성능을 테스트 해 보거나, 방화벽이 제대로 패킷을 차단하는지, 프로토콜이 올바른지 등을
확인해 보고자 할때 의도적으로 패킷을 생성할 필요가 있다. 또는 조작된 패킷으로.
다양한 도구들이 많이 나와있는데, 앞으로 차차 소개하기로 하고 오늘은 리눅스기반의 패킷생성도구인
Mausezahn 을 소개한다.

패킷을 의도적으로 생성하여 이용할 수 있는 곳은 서두에서 잠깐 언급한 것과 같이
사용처가 아주 다양하다. 악의적으로 조작되어 공격에 이용될 수도 있는 문제점도 있지만,
패킷인사이드를 방문하시는 분들은 업무의 활용, 스터디 목적이므로.

mztitle.png

이미지출처 : 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 로 제작된 만큼 빠른 속도를 제공하고 자유롭게 사용할 수 있다. 다만, 아직 윈도우 기반은
지원하지 않고 리눅스(기타 유닉스 플랫폼) 에서만 가능하다.

댓글 6개:

  1. 2010년3월달의 마지막 글을 11시59분에 겨우 썼네요. 집에서 짬짬히 쓰다보니 맨날 늦은 시간입니다. :-(

    답글삭제
  2. 어휴 고생이 많으십니다. 저도 항상 마음으로는 조금이라도 아는것들을 정리해서 올리고 싶은데..



    잘 되지가 않네요. 이렇게 하시는거 보면 대단해 보여요... 짱임..ㅎ



    Smartbit 라는 하드웨어 장비로 패킷을 생성하는걸 본적이 있는데, 임의로 패킷생성하는건 s/w/적으로도 충분히 가능할꺼라고 생각했었는데 그 소프트웨어가 여기있네요..ㅎ

    하드웨어 장비로하면 더 안정적으로 보낼수 있다는 장점 이외에 또 뭐가 있을까요??

    답글삭제
  3. @홍홍 - 2010/04/01 12:04
    Smartbit 도 하드웨어 장비지만 그 안에는 소프트웨어적으로 구현이 되어있지요. 보통 네트워크 제품 테스트 용도로 많이 사용하고 있는데, 트래픽 생성 능력도 더욱 뛰어날 것이고요, 사용자 편의성, 다양한 프로토콜 지원,분석기능등 상업용 버전이니 만큼 다양한 기능이 있습니다. 그래도 돈주고 사는 것이니까요. ^^;;;

    답글삭제
  4. 네이버 검색 시 딱 이곳에서 정보를 확인 할 수 있었네요.



    감사합니다^^;



    제 블로그에 링크 걸겠습니다.



    문제 시 알려주세요. 삭제하겠습니다.

    답글삭제
  5. @쏠라구구 - 2010/07/14 22:35
    방문해 주셔서 감사합니다. 출처만 밝혀주신다면 링크 거셔도 무방합니다. 오히려 링크 걸어주셔서 감사하네요 ^^

    답글삭제
  6. Mausezahn 의 0.40 버전이 나왔습니다. 몇 가지 기능 추가 및 버그가 픽스되었습니다.

    답글삭제