2010년 6월 23일 수요일

와이어샤크를 윈도우 서비스로 등록하여 자동실행 하기

컴퓨터가 부팅되면서 자동으로 패킷 캡쳐를 시작하게 할 수 없을까? 하는 의문에서 이번 포스팅을
작성하였다. 필자가 궁금하였다기 보다, 주변에서 이를 궁금해 하는 경우를 봤고 생각을 하다 보니
다음과 같이 방법이 압축되었다.

우선, 가장 간단한 방법으로는 앞서 포스팅에서 바로가기 아이콘을 만드는 경우를 소개했다.
바로가기 아이콘에서 바로 시작되도록 옵션을 조정하면 시작 폴더에 넣어두는 것으로 간단히
해결은 될 것이다.

또 다른 방법은 와이어샤크를 윈도우 서비스 형태로 등록하는 것이다. 그렇다면 백 그라운드로
자연스럽게 동작시킬 수 있으므로 좀더 Smooth 한 동작이 된다.
그런데 수동으로 직접 동작시키는 방법 말고, 자동으로 이렇게 시작시켜야 할 필요가 있을까?
각자 필요에 의해서 다르겠지만, 몇몇의 경우는 유용할 것 같다. 시스템 한대를 패킷 덤프 용도로
사용하는 경우 라든지 또는 윈도우 시스템이 다 부팅된 후 실행하는 것이 아니라, 서비스로 미리
시작시켜 악성코드와 같은 분석시에 먼저 패킷 덤프를 하는 경우다. 예를 들어, 악성코드 분석을
하는데 악성코드가 부팅되면서 자동으로 올라오게 되어 있다. 시작되기 전에 패킷 형태를 보고 싶을때
이런 경우 서비스로 등록시키면 원하는 패킷 데이터를 얻을 수도 있다.

물론 이것은 악성코드의 동작 형태에 따라 달라지기 때문에 모든 경우에 해당은 안된다. 다만
하나의 방법으로 이런것도 있구나 하구 머리속에 담아두자

자 서두는 이쯤에서 줄이고, 서비스로 등록하는 방법에 대해 알아보자.
일단 instsrv.exe, srvany.exe 파일이 필요하다. 이 파일은 윈도우 리소스 키트에 포함된 것으로
다음의 경로를 통해 다운로드 받는다.


다운받은 파일을 설치하면 윈도우의 프로그램 폴더 밑에 리소스 키트 폴더가 생성되어 있다.
이 안에 해당파일이 들어 있다. 동작의 편의를 위하여 두 파일을 윈도우 시스템 폴더인

c:\windows\system32 아래에 복사해 넣어둔다.

그리고 instsrv 로 서비스를 등록한다. 아래 옵션은 WireSharkService 라는 이름으로 등록하는 것이다.

C:\Play>instsrv WireSharkService "c:\windows\system32\srvany.exe"
The service was successfuly added!

Make sure that you go into the Control Panel and use
the Services applet to change the Account Name and
Password that this newly installed service will use
for its Security Context.

WireSharkService 라는 이름으로 서비스를 등록하는데 기본 이미지는 srvany.exe 가 되는 것이다.

등록 후, 윈도우의 시작->실행에서 regedit 를 실행하자! 즉 레지스트리 편집기를 실행하게 되는 것이다.
그리고 다음 경로의 레지스트리를 찾아 들어간다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WireSharkService


그리고 WireSharkService 에서 오른쪽을 클릭하여 "새로만들기 -> 키(K)" 를 선택하고
이름을 Parameters 로 저장한다.
다음 Parameters 에서 오른쪽을 선택하고 "새로만들기 -> 문자열 값" 을 선택후
Application 이름을 만들고 값 데이터로 아래와 같이 넣어준다.

C:\Program Files\Wireshark\tshark.exe -w c:\play\service.pcap

앞서 instsrv 를 통해 만든 서비스에 파라미터를 만들고 실행될 애플리케이션으로 tshark.exe 를 지정한 것이다.
tshark.exe 의 경로는 각자 시스템에 맞게 설정하고 사용한 옵션은 -w 로 c:\play 아래에 service.pcap 으로 저장되게 하였다. 결국은 srvany.exe 가 tshark 를 자식 프로세스로 형태로 실행해 주는 것이다.

무한정 패킷 데이터를 저장할 수 없으므로 다음과 같은 옵션을 사용하면 더욱 좋다

C:\Play>net start WireSharkService
WireSharkService 서비스를 시작합니다..
WireSharkService 서비스가 잘 시작되었습니다.

서비스를 만들었으면 net 명령어로 서비스를 쉽게 실행시킬 수 있다. 실행되고 -w 로 지정한 경로에
보면 파일이 존재할 것이다. 바로 패킷 파일이 저장이 되고 있는 것이다. 그러면 서비스로 등록되었으니
부팅 후에도 자동 실행이 가능하다. 만들어진 서비스는 제어판->관리도구->서비스 에서도 확인하여
쉽게 볼 수 있다.

그런데 여기서 잠깐! 그러면 무작정 데이터를 저장할 것인가. 앞서 소개한 와이어샤크의 옵션을 기억한다면
나눠서 저장하는 것도 가능하다라는 것이 머리속에 스치지 않는가 ? 아래 옵션을 추가로 사용하면 1메가 단위로 3개 파일로 저장이 이뤄진다. filesize 의 값은 1024 바이트 즉, 1K 기준이다.

 -b filesize:1024 -b files:3

와이어샤크의 GUI 를 실행해 보면 패킷 캡쳐 시작 전에 여러 옵션을 지정할 수 있는데, 그것이 커맨드형태로
사용할 수 있는 것으로 보면된다. 윈도우 환경의 저장옵션은 아래 글을 참고한다.


이외 캡쳐 필터를 사용해 tcp 만 저장한다든지 캡쳐 필터 옵션을 사용할 수 있다. 캡쳐 필터 옵션도 여기서
찾아볼 수 있다.

지금까지 살펴본 것으로 어렵지 않게 와이어샤크를 서비스로 등록하여 사용할 수 있을 것이다.
추가적으로 sc.exe 를 사용하여 서비스 정보를 더 알아볼 수 있는데 그냥 참고하길 바란다.

sc.exe 는 ftp://ftp.microsoft.com/reskit/win2000/sc.zip 에서 받을 수 있다.

C:\Play>sc query WireSharkService

SERVICE_NAME: WireSharkService
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE,PAUSABLE,ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

sc.exe 로 서비스도 만들수 있는데, 왜 이걸로는 안될까? 다음과 같이 사용하면 일단 서비스로 만들 수 있다.

C:\Play>sc create WireSharkService binPath= "C:\Program Files\Wireshark\tshark.exe -w c:\play\test.pcap -q" DisplayName= "WireShark Service"
[SC] CreateService SUCCESS

그러나 실행을 해보면 정상적 실행이 안될것이다. 앞선 경우에서는 srvany.exe 를 통해서 실행된 것이고
이것은 직접적으로 와이어샤크를 통해 실행한 차이가 있다. 만약, 아파치 웹 서버와 같이 서비스 모드를
지원한다면 아래와 같이 사용이 가능하다.

C:\Play>sc.exe create ApacheService
   binPath= "C:\local\apache\bin\httpd.exe -k runservice"
   DisplayName= "Apache Server"

[SC] CreateService SUCCESS

이건 서비스를 만드는 또 다른 방법을 참고 차원에서 소개한 것이므로, 와이어샤크를 이용한 경우에는
srvany.exe 를 이용하는 방법을 따르길 바란다.

P.S tshark 에 대해서는 시간이 주어지는 대로 자세하게 소개할 것이다. :-)

[참고자료]
1. How to Create User-Defined Service
2. Tshark Manual
3.와이어샤크 시작을 '바로가기'를 통해 더욱 쉽게 실행해 보자!

댓글 없음:

댓글 쓰기