4/17/2016

Wireshark를 이용하여 Window에서 USB 분석

1. Wireshark의 USB 분석 기능 

USB를 분석하기위해서는 별도의 USB 스니퍼 프로그램이 필요하며, 잘 설치된 경우 쉽게 Wireshark에서 분석가능하다.
회사 컴퓨터의 경우 USB 분석이 쉽게 잘되었는데, 이상하게 나의 개인노트북은 Wireshark에서 interface 부분에서 USB를 찾지를 못한다.

Wireshark의 USB의 분석기능의 핵심은 URB 분석이 될 것이며, 이는 USB Descriptor의 정의되어진 구조와 맞는지 확인을 하자.

이 부분을 조금씩 문제를 해결하기 위해서 아래와 같이 원인파악을 해보고 분석하려한다.

  • 개인 삼성 노트북의 USB 내부구성 
  1. USB Webcam 
  2. USB Buletooth 
  3. USB SD Card Reader (Host)
  4. Hub 구성 

상위와 같이 노트북 내부의 Device가 USB로 연결구성이 되어있다. (복잡하게 만들었군)
좀 더 확인을 하고자 하면 제어판의 장치관리자에서 확인하자.



  • USBPcap Driver 확인 
USB Capture를 위해 USBPcap Driver 설정확인



1.1 USBPcap 관련 설치 검증 및 관련 테스트 

일단 Hub의 각각의 Driver 정보를 확인하자.
그리고, Hub의 장치 Class GUID를 확인하자

  • USBPcap Class GUID 값 



  • 장치관리자에서 USB Hub의 장치클래스 GUID 확인
  1. 장치관리자->범용 직렬 버스 컨트롤러->Generic USB Hub->속성 
  2. 자세히->장치클래스 GUID 확인

       36FC9E60-C465-11CF-8056-444553540000


  • 레지스터 편집기에서 USBPCap 검색 
  1. regedit.exe를 실행
  2. 편집->찾기 USBPCap 검색
  3. 관련 장치 클래스 GUID 확인 

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class{36FC9E60-C465-11CF-8056-444553540000}\UpperFilters
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Class{36FC9E60-C465-11CF-8056-444553540000}\UpperFilters
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class{36FC9E60-C465-11CF-8056-444553540000}\UpperFilters

  https://github.com/desowin/usbpcap/issues/3



  • USBPcapCMD 값 Regedit 값 비교 
USBPcapCMD의 USBPcap1,2,3 과 같은 regedit에서 Class GUID를 찾지 못했다.


C:\Program Files\USBPcap\USBPcapCMD.exe 



USBPcap1,2,3을 Class GUID 아래와 같이 동일하지만 앞의 값은 다르다.
   f18a0e88-c30c-11d0-8815-00a0c906bed8

1 \\.\USBPcap1
  \??\USB#ROOT_HUB20#4&4f07082&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
    [Port 1] Generic USB Hub
2 \\.\USBPcap2
  \??\USB#ROOT_HUB20#4&1c0cc4&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
    [Port 1] Generic USB Hub
3 \\.\USBPcap3
  \??\IUSB3#ROOT_HUB30#4&1e43ead0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8} 


f18a0e88-c30c-11d0-8815-00a0c906bed8 관련사항
  https://docs.microsoft.com/en-us/windows-hardware/drivers/install/guid-devinterface-usb-hub


  • 레지스터 편집기 1차 검색
regedit에서 USBPcap 및 아래의 값으로 검색을 해보면 아래의 값을 찾을 수 있다
하지만 위와 동일 하지 않다. 장치 Class GUID가 맞지가 않다

ROOT_HUB20

  1. 4&4f07082&0
  2. 4&1c0cc4&0


  • 레지스터 편집기 2차 검색
f18a0e88-c30c-11d0-8815-00a0c906bed8로 검색을 해보면 USBPcap과 연결된 부분을 찾지를 못했다.

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses{f18a0e88-c30c-11d0-8815-00a0c906bed8}

...


  • 개인노트북의 문제결론 
현재 내 개인 노트북은 USB가 꼬인것 같은데, 일단 직접 Command를 이용하여 각 기능을 기본으로 확인해보자.
아래와 같이 기본 캡쳐와 분석을 해보면 된다.
회사 컴퓨터는 잘되는데, 왜 내 개인 노트북이 문제인지 , 젠장.


2.1 USBPcapCMD이용한 기본 캡쳐 및 분석  

개인노트북에서 직접 USBPcapCMD 명령이용하여 USB 관련 부분을 캡쳐 해보고, 이를 분석해보자.
아래의 파일을 를 관리자 모드로 실행을 해주며,그냥 실행을 하였더니, WRITE가 허용이 되지 않았다.


C:\Program Files\USBPcap\USBPcapCMD.exe 


나의 개인노트북은 위와 같이 Filter 3번 (USBPcap3) 에 잡히는 것을 알수있으며, 우측 전용 USB3.0 Hub에 연결하여도, USB2.0 Hub에 부분에 연결해도 동일하다.
상위에 보듯이 Filter 3번 은 USB 3.0 Hub이며 이부분을 캡쳐해서 분석하자.

  • USB Data Capture 
  1. Select Filter to monitor를 Filter 3번(USBPcap3)로 설정
  2. 저장파일을 test.pcap 저장

  • Wireshark로 USB Data *.pcap 분석 
Ctrl+C로 캡쳐를 종료했다면 이제 test.pcap을 Wireshark를 이용하여 File->Open으로 test.pcap을 분석하자.

위와 같이 중요한 USB Descriptor 관련파일들을 확인을 할수가 있다.

USB Descriptor 부터 URB 분석까지 쉽게 분석이 가능



기본기능은 내노트북에서도 잘동작한다.

2.2 링크파일을 이용한 쉽게 이용 

상위 방법을 이제 간단히 링크로 만들어 쉽게 만들어보자.

  1. 바탕화면화면->새로만들기->바로가기 실행
  2. "C:\Program Files\USBPcap\USBPcapCMD.exe"



2.3  USBPcapCMD.exe 와 Wireshark.exe  기능확인 

cmd를 이용하여 USBPcapCMD.exe와 Wireshark.exe 옵션을 확인하자

C:\Users\JHLEE> cd C:\Program Files\USBPcap
C:\Program Files\USBPcap>USBPcapCMD.exe --help

C:\Program Files\USBPcap> cd C:\Program Files\Wireshark
C:\Program Files\Wireshark> wireshark.exe --help






2.4. Live Capture 기능 

개인노트북에서는 Wireshark에서 Interface가 USB가 잡히지 않아 아래와 같이 cmd.exe를 이용하여 강제로 실행을 했지만, Live Capture는 동작이 되지 않았다.

  • Live Capture 설정 
쉽게 파이프를 이용하여 아래와 같이 설정하자.
C:\Users\JHLEE> cd C:\Program Files\USBPcap
C:\Program Files\USBPcap>USBPcapCMD.exe -d \\.\USBPcap3 -o - | "C:\Program Files\Wireshark\Wireshark.exe" -k -i - 
Selected capture options result in empty capture.

캡쳐 중인 Wireshark 실행되고, 캡쳐모드로 동작하나 USB Capture는 동작되지 않는다.
원인분석을 위해서, 상위 로그내용을 "Selected .. " 부분을 소스에서 찾아보자

  • USBPcapCMD.exe 소스분석  
  start_capture 함수-> "Selected Capture options result.." 관련에러를 확인가능
  상위 에러가 발생하면 start capture 함수가 동작 되지 않는 것을 확인가능

  https://github.com/desowin/usbpcap/blob/master/USBPcapCMD/cmd.c


  • 단위 TEST 진행 
아래와 같이 설정변경하여 USBPcapCMD만  부분 TEST를 진행하자
-o 옵션에 파일명을 적고 실행해도 위와동일하게 에러 메시지를 본다.
하지만 -A 옵션을 추가하면 아래의 에러메시지는 없어지고 USBPcapCMD는 동작된다.

C:\Users\JHLEE> cd C:\Program Files\USBPcap
C:\Program Files\USBPcap>USBPcapCMD.exe -d \\.\USBPcap3 -o test.pcap
Selected capture options result in empty capture.

  • Live Capture 재설정 
이제 원인을 알았으니, 상위에러는 -A 옵션추가하여 다시 실행하면, 상위 에러로그는 사라지지만, Wireshark는 캡쳐 중일 뿐 아무런 동작되지 않는다.

또 다른 문제가 존재하는 것 같은데 추후 이부분을 더 알아보자.
(상위 장치 Class GUID 때문에  USB Interface를 잘 못찾는 느낌 인것 같은데)

C:\Users\JHLEE> cd C:\Program Files\USBPcap
C:\Program Files\USBPcap>USBPcapCMD.exe -d \\.\USBPcap3 -A -o - | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -  

아래와 같이 Capture Interface에 "-" 추가 되었지만 동작되지 않는다.




USBPcapCMD.exe 기본설명서
  http://desowin.org/usbpcap/tour.html

다른 Window USB Driver 설정참조 (*.inf 파일)
  https://blog.sverrirs.com/2016/04/reverse-engineer-usb-protocol.html

WireShark 이용한 USB Capture 부분 
  http://www.packetinside.com/2011/04/usb.html
  https://wiki.wireshark.org/CaptureSetup/USB

댓글 없음 :