출처 : http://packetinside.com/73
장비의 성능을 테스트 해 보거나, 방화벽이 제대로 패킷을 차단하는지, 프로토콜이 올바른지 등을
장비의 성능을 테스트 해 보거나, 방화벽이 제대로 패킷을 차단하는지, 프로토콜이 올바른지 등을
확인해
보고자 할때 의도적으로 패킷을 생성할 필요가 있다. 또는 조작된 패킷으로.
다양한 도구들이 많이 나와있는데,
앞으로 차차 소개하기로 하고 오늘은 리눅스기반의 패킷생성도구인
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 를
실행한다.
1.
$
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
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 로 제작된 만큼 빠른 속도를 제공하고 자유롭게 사용할 수 있다. 다만, 아직 윈도우 기반은
지원하지
않고 리눅스(기타 유닉스 플랫폼) 에서만 가능하다.
'IT인생_스크랩 > Linux' 카테고리의 다른 글
우분투 Bonding (0) | 2010.12.16 |
---|---|
젠투 (Gentoo) 리눅스 설치 (0) | 2010.12.13 |
TCPDUMP 사용법 (0) | 2010.06.24 |
리눅스 시스템 Bonding (0) | 2010.06.23 |
NTP 시간서버 설정 (0) | 2010.06.23 |