
구조화된 데이터(JSON, XML, X.509)를 변형하여 문법 기반 퍼징을 지원하는 라이브러리 및 CLI로, 다양한 변형 전략과 Radamsa 통합을 제공합니다.
Umberto는 일반적인 구조화된 데이터(예: JSON, XML, X.509)를 변형하도록 설계된 라이브러리이자, 이 기능을 래핑하는 명령줄 애플리케이션입니다. 다양한 변형을 적용하고, 완전히 새로운 값을 합성하며, 기존 변형 도구(예: Radamsa)를 구조 구성 요소에 적용할 수 있습니다. 문법 기반 퍼징을 수행하려고 한다면 매우 유용하게 사용할 수 있습니다. 아마도 예시를 보는 것이 가장 이해하기 쉬울 것입니다:
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json knuth all
{"a":2,"c":"tesb","t":1}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json newvals nums
{"a":-2.8e-20,"b":-40000,"c":"test"}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json radamsa strings
{"c\u0008^\u001f":"ó ¨teï»â¨¿st","1313131313131313â":1,"ô ó ó ¶Db":2}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate string replacement all
:"c2:tb{ :"{c"}t"as }c"e": "2
Umberto는 stack을 사용합니다. stack을 설치하고, 이 저장소를 클론한 다음, stack build && stack install을 실행하세요. Radamsa 퍼저를 사용하려면 별도로 설치해야 합니다.
Umberto는 대부분의 기능을 래핑하는 간단한 실행 파일 umberto-mutate를 제공합니다. 일반적인 사용법은 다음과 같습니다:
echo -n mydata | umberto-mutate FORMAT MUTATOR TARGET
FORMAT은 다음 중 하나일 수 있습니다:
json
string (또는 본질적으로 "형식 없음")
xml (비교적 테스트되지 않음)
der (X.509 DER, 비교적 테스트되지 않음)
MUTATOR는 다음 중 하나일 수 있습니다:
knuth: 대상 값을 녹스(Knuth) 셔플
replacement: 대상 값을 교체-셔플
newvals: 기존 값 대신 새로운 대상 값 합성
radamsa: 변형을 위해 radamsa를 외부 호출(문자열에서만 작동)
TARGET은 다음 중 하나일 수 있습니다:
strings: 문자열 유형
nums: 숫자 유형
all: 모든 유형
Umberto의 대부분의 기능은 lib/Umberto.hs에서 사용할 수 있습니다. 타입클래스 다형성을 사용하는 변형 도구는 개방 세계 가정을 위반하기 위해 Template Haskell을 일부 사용해야 합니다. 이 기능은 Umberto.TH에서 제공되지만 실행 가능한 코드에서만 사용해야 하며, 라이브러리에서는 절대 사용하면 안 됩니다.