
Universal Plug and Fuzz
UFuzz(Universal Plug and Fuzz)는 자동화된 UPnP 퍼징 도구입니다. 네트워크의 모든 UPnP 엔드포인트를 열거하고, 사용 가능한 서비스를 찾아 퍼징합니다. 또한 Burp 프록시 로그를 사용하여 HTTP를 퍼징할 수 있습니다.
임베디드 시스템을 퍼징하도록 설계되었으며, 따라서 단일 스레드(single-threaded)로만 동작합니다. 또한 이러한 시스템을 퍼징하는 데 시간이 오래 걸릴 수 있으므로 페이로드 세트도 매우 제한적입니다. 블라인드 SQLi 및 커맨드 인젝션과 같은 일부 페이로드는 인젝션 성공 여부를 판단하기 위해 지연(delay)에 의존하므로 오탐(false positive)이 발생할 수 있습니다. 포맷 스트링(format string) 및 버퍼 오버플로우와 같은 다른 페이로드는 크래시를 감지하기 위해 사용자 정의 모니터를 사용하도록 설계되었습니다.
예제 구성 모듈과 모니터 모듈이 포함되어 있습니다. 사용자 정의 모니터를 사용하면 대상 시스템의 텔레메트리(telemetry)를 활용하여 크래시를 감지할 수 있습니다. 텔넷 기반 및 시리얼 콘솔 기반 크래시 감지를 위한 예제 모듈이 제공되어 있습니다.
코드가 매우 조잡하다는 점에 유의하세요. "Hacky"하다고 표현하는 것이 가장 적절할 것입니다. 안타깝게도 이 프로젝트는 빠르게 작성되었고 제대로 아키텍처링된 적이 없습니다. 앞으로 몇 달 안에 이를 해결하기 위해 노력할 것입니다.
마지막으로, 일부 코드는 다른 프로젝트에서 차용되었습니다:
UPnP 코드는 주로 Craig Heffner의 miranda 코드를 기반으로 합니다. Craig는 저에게 영감을 준 사람이며, 그의 블로그 /dev/ttys0를 꼭 읽어보시길 권합니다.
테스트 세트 생성 코드 중 일부는 Ben Nagy의 Metafuzz 프로젝트를 기반으로 합니다.
소켓 및 HTTP 파싱 코드는 Excon을 기반으로 합니다.
UFuzz는 Ruby 1.9.3 및 Ruby 2.1.1에서 테스트되었습니다. UFuzz 디렉터리에서 bundle install을 실행하면 필요한 모든 gem을 설치할 수 있습니다.
모든 명령줄 옵션을 보려면 -h 옵션과 함께 ufuzz를 실행하세요. 도구가 실행되면 로그가 log 디렉터리에 기록됩니다.
네트워크의 모든 UPnP 디바이스를 기본적으로 퍼징하려면 ufuzz --upnp를 실행하기만 하면 됩니다. 요청 및 응답 요약을 보려면 -v 4 옵션도 사용하는 것이 좋습니다.