Проект по парсингу стандартных классов dotnet. Для фаззинга применяется AFL и sharpfuzz
Зависимости:
- Docker
Результаты тестирования расположены в папке result
Для формирования цели необходимо создать директорию в которой расположить следующие элементы:
- Testcases - [обязательно] директория с входным корпусом данных для фаззинга
- Program.cs - [обязательно] код, реализующий цель для фаззинга
- samples.dict - [не обязательно] словарь для фаззинга (если словать будет отсутствовать, то AFL будет запущен без
-x
параметра)
- Производится сборка CoreFX (/build/corefx)
- Производится сборка AFL (/afl/afl-2.52b)
- Устанавливается dotnet
- Устанавливается SharpFuzz (/root/.dotnet/tools)
- В CoreFX.csproj подставляется номер сборки CoreFX с шага 1 (/app/CoreFX.csproj)
- Восстанавливаем все зависимости для сборки цели (указаны в NuGet.Config). Зависимости берутся из сборки CoreFX с шага 1 (/app/NuGet.Config)
- Производим сборку цели Program.cs (/app/Program.cs)
- Инструментируем необходимую нам библиотеку из CoreFX (/app/out/...)
- Запускаем фаззинг
- /app/out/CoreFX - собранная цель
- /app/Testcases - директория с входным корпусом данных для фаззинга
- /app/findings - результаты работы AFL
Аргументы сборки:
- FUZZ_TARGET_LIBRARY - [обязательно] название библиотеки для инструментации
- FUZZ_TARGET_FOLDER - [обязательно] директория цели в которой располагаются Testcases, Program.cs, samples.dict
Для примера возьмем цель XmlSerializer.Deserialize.
Производим сборку Docker контейнера:
docker build -f Dockerfile --build-arg FUZZ_TARGET_LIBRARY=System.Private.Xml.dll --build-arg FUZZ_TARGET_FOLDER=XmlSerializer.Deserialize --tag=xmlserializer.deserialize .
Запускаем фаззинг:
docker run -ti -v $(pwd)/findings:/app/findings xmlserializer.deserialize
Результаты фаззинга должны сохраниться в локальной директории findings, где был запущен контейнер.
- https://github.com/Metalnem/sharpfuzz
- https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/dogfooding.md
- https://github.com/dotnet/corefx/blob/release/3.1/Documentation/building/unix-instructions.md#user-content-linux
- https://github.com/Metalnem/sharpfuzz/blob/master/docs/fuzzing-dotnet-core.md
- https://github.com/Metalnem/sharpfuzz-samples