USB를 분석하기위해서는 별도의 USB 스니퍼 프로그램이 필요하며, 잘 설치된 경우 쉽게 Wireshark에서 분석가능하다.
회사 컴퓨터의 경우 USB 분석이 쉽게 잘되었는데, 이상하게 나의 개인노트북은 Wireshark에서 interface 부분에서 USB를 찾지를 못한다.
Wireshark의 USB의 분석기능의 핵심은 URB 분석이 될 것이며, 이는 USB Descriptor의 정의되어진 구조와 맞는지 확인을 하자.
이 부분을 조금씩 문제를 해결하기 위해서 아래와 같이 원인파악을 해보고 분석하려한다.
- 개인 삼성 노트북의 USB 내부구성
- USB Webcam
- USB Buletooth
- USB SD Card Reader (Host)
- Hub 구성
상위와 같이 노트북 내부의 Device가 USB로 연결구성이 되어있다. (복잡하게 만들었군)
좀 더 확인을 하고자 하면 제어판의 장치관리자에서 확인하자.
- USBPcap Driver 확인
1.1 USBPcap 관련 설치 검증 및 관련 테스트
일단 Hub의 각각의 Driver 정보를 확인하자.
그리고, Hub의 장치 Class GUID를 확인하자
- USBPcap Class GUID 값
- 장치관리자에서 USB Hub의 장치클래스 GUID 확인
- 장치관리자->범용 직렬 버스 컨트롤러->Generic USB Hub->속성
- 자세히->장치클래스 GUID 확인
36FC9E60-C465-11CF-8056-444553540000
- 레지스터 편집기에서 USBPCap 검색
- regedit.exe를 실행
- 편집->찾기 USBPCap 검색
- 관련 장치 클래스 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 값 비교
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차 검색
하지만 위와 동일 하지 않다. 장치 Class GUID가 맞지가 않다
ROOT_HUB20
- 4&4f07082&0
- 4&1c0cc4&0
- 레지스터 편집기 2차 검색
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses{f18a0e88-c30c-11d0-8815-00a0c906bed8} ...
- 개인노트북의 문제결론
아래와 같이 기본 캡쳐와 분석을 해보면 된다.
회사 컴퓨터는 잘되는데, 왜 내 개인 노트북이 문제인지 , 젠장.
개인노트북에서 직접 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
- Select Filter to monitor를 Filter 3번(USBPcap3)로 설정
- 저장파일을 test.pcap 저장
- Wireshark로 USB Data *.pcap 분석
위와 같이 중요한 USB Descriptor 관련파일들을 확인을 할수가 있다.
USB Descriptor 부터 URB 분석까지 쉽게 분석이 가능
기본기능은 내노트북에서도 잘동작한다.
2.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 함수가 동작 되지 않는 것을 확인가능
https://github.com/desowin/usbpcap/blob/master/USBPcapCMD/cmd.c
- 단위 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 재설정
또 다른 문제가 존재하는 것 같은데 추후 이부분을 더 알아보자.
(상위 장치 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