
Umap2 is the second revision of NCC Group's python based USB host security assessment tool.
Umap2는 NCC Group의 Python 기반 USB 호스트 보안 평가 도구의 두 번째 개정판입니다.
이 개정판에는 첫 번째 개정판에서 지원되었던 모든 기능이 포함됩니다:
이 개정판에는 몇 가지 추가 기능이 포함됩니다:
Umap2는 NCC Group과 Cisco SAS 팀이 개발했습니다.
경고: umap2는 아직 실험적인 알파 단계 도구입니다. API, 실행 파일 이름 등은 가까운 시일 내에 변경될 가능성이 높습니다. 사용에 따른 책임은 본인에게 있습니다.
#umap2 on Freenode <https://webchat.freenode.net/?channels=umap2>_
Installation아직 매우 초기 버전이므로 Umap2는 pypi에서 사용할 수 없습니다. 대신 pip를 사용하여 github에서 직접 설치하십시오:
::
$ pip install git+https://github.com/nccgroup/umap2.git#egg=umap2
Umap2는 대부분의 부분에서 python2/3와 호환됩니다. 단, 퍼저 스크립트(umap2kitty)는 python2에서만 실행됩니다.
Umap2의 의존성은 setup.py에 나열되어 있으며 umap2와 함께 설치됩니다. 하지만 일부 디바이스에 대한 지원을 추가하려면 몇 가지를 수행해야 할 수 있습니다:
Mass Storage
1. 실행 디렉터리에 **stick.img**라는 디스크 이미지가 필요합니다.
MTP
~~~
1. 현재 디렉터리에 **mtp_fs**라는 폴더/파일이 필요합니다.
2. python 패키지 pymtpdevice가 필요합니다. 이 패키지는 현재 pypi에 없지만
다음에서 다운로드하여 설치할 수 있습니다:
https://github.com/BinyaminSharet/Mtp
Hardware
--------
- `Facedancer <http://goodfet.sourceforge.net/hardware/facedancer21/>`_
는 Umap2에 권장되는 하드웨어입니다.
Umap2는 이를 기반으로 개발되었으며, 가장 많은 지원을 받을 수 있습니다.
- `Raspdancer <http://wiki.yobi.be/wiki/Raspdancer>`는 RPi에서 지원됩니다.
- **GadgetFS**는 부분적으로 지원됩니다.
이 지원은 매우 실험적이며(나머지 Umap2보다도 더) 제한적입니다.
- Linux 커널 4.4.9부터 패치된 gadgetfs 드라이버를 사용하는 BeagleboneBlack
- Linux 커널 4.12.0-rc3+부터 패치가 필요 없는 RaspberryPi Zero W
- 4.12.0-rc3+부터 패치가 필요 없으므로 지원될 수 있는 다른 디바이스가 있을 수 있습니다.
그러한 디바이스를 알고 있거나 다른 디바이스에서 실행되도록 변경한 사항이 있다면 알려주시기 바랍니다.
관심이 있다면 **gadget/README.rst**에서 자세한 정보를 읽어보십시오.
Usage
-----
Device Emulation
Umap2의 기본 기능은 USB 디바이스를 에뮬레이션하는 것입니다. 기존 디바이스 중 하나를 에뮬레이션하거나 (umap2list를 사용하여 사용 가능한 디바이스를 확인하십시오):
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C mass_storage
또는 자신만의 디바이스를 에뮬레이션할 수 있습니다:
::
$ umap2emulate -P fd:/dev/ttyUSB0 -C ~/my_mass_storage.py
자신만의 디바이스를 추가하는 방법에 대한 자세한 가이드는 곧 추가될 예정입니다. 그동안 umap2/dev/ 아래의 umap2 디바이스를 살펴볼 수 있습니다.
Device Support Scanning
Umap2는 호스트가 지원하는 USB 디바이스 유형을 감지하려고 시도할 수 있습니다.
Umap2에 구현된 각 디바이스를 짧은 시간 동안 에뮬레이션하고
디바이스별 메시지가 전송되었는지 확인하는 방식으로 수행됩니다.
::
$ umap2scan -P fd:/dev/ttyUSB0
Vendor Specific Device Support Scanning
다양한 디바이스 클래스에 대한 지원을 스캔하는 것 외에도, Umap2는 벤더 특정 디바이스에 대한 호스트 지원을 스캔할 수 있습니다.
벤더 특정 스캔은 호스트에서 사용 가능한 벤더 특정 드라이버를 식별하는 데 도움이 됩니다.
이 작업은 현재 Umap2 VID-PID DB(아직 작업 중)를 사용하거나 동일한 형식의 다른 파일을 사용하여 수행할 수 있습니다:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -d $UMAP2_DIR/data/vid_pid_db.py
또는 특정 vid-pid 범위를 스캔하여 수행할 수 있습니다.
이 예시에서는 VID 0x10010x1004와 PID 0x00000xffff의
모든 조합을 스캔합니다:
::
$ umap2vsscan -P fd:/dev/ttyUSB0 -s 1001-1004:0000-ffff
vid_pid_db.py 파일에 대한 패치/추가는 언제나 환영합니다!
Fuzzing
Umap2를 사용한 퍼징에 대한 자세한 가이드는
`docs/fuzzing.rst <https://github.com/nccgroup/umap2/blob/master/docs/fuzzing.rst>`_ 에서 확인할 수 있습니다.
Umap2를 사용한 퍼징은 세 단계로 구성되며,
향후 단일 스크립트로 통합될 수 있습니다.
1. 퍼징하려는 호스트와 에뮬레이션하는 USB 디바이스에 대해
메시지의 순서를 확인합니다:
::
$ umap2stages -P fd:/dev/ttyUSB0 -C keyboard -s keyboard.stages
2. 별도의 셸에서 kitty 퍼저를 시작하고
1단계에서 생성된 스테이지를 제공합니다.
::
$ umap2kitty -s keyboard.stages
3. 퍼즈 모드에서 umap2 키보드 에뮬레이션을 시작합니다.
::
$ umap2fuzz -P fd:/dev/ttyUSB0 -C keyboard
3단계가 수행된 후 퍼징 세션이 시작됩니다.
Note About MTP fuzzing
++++++++++++++++++++++
umap2는 MTP 디바이스를 에뮬레이션하고 발견하는 데 사용될 수 있지만
(이 README의 "Soft dependencies" 섹션 참조),
현재 시점에서는 MTP 레이어를 퍼징하지 않습니다.
MTP 레이어를 퍼징하려면 MTP 라이브러리에 내장된 퍼저를 사용할 수 있습니다.
향후 릴리스에서는 umap2에서 직접 MTP 퍼징을 지원할 계획입니다.
Host OS Detection
TBD
Umap2에 문제가 있는 경우
troubleshooting section <https://github.com/nccgroup/umap2/blob/master/docs/troubleshooting.rst>_ 을 시도해 보십시오.
SPI-Py https://github.com/lthiery/SPI-Py 및 GPIO python 라이브러리가 필요합니다.
phy rd를 사용하십시오.