
Melkor — это очень интуитивно понятный и простой в использовании фаззер формата ELF, предназначенный для поиска функциональных ошибок и уязвимостей безопасности в парсерах ELF.
--------------------------------~
| -- ОПИСАНИЕ -- |
--------------------------------~
Melkor — фаззер формата файлов ELF
Мелкор, вымышленный персонаж легендариума Средиземья Дж. Р. Р. Толкина, был первым Тёмным Властелином и повелителем Саурона. Он кратко упоминается во «Властелине Колец» и известен тем, что:
«... Мелкор захватил несколько ЭЛЬФОВ до того, как Валар напали на него, и он пытал и развращал их, выведя первых Орков.» (http://en.wikipedia.org/wiki/Morgoth)
«... Мелкор был хитёр и преисполнен злобы сильнее, чем когда-либо. Видя блаженство ЭЛЬФОВ и помня, что из-за них он был низвергнут, Мелкор превыше всего желал развратить их.» (http://lotr.wikia.com/wiki/Melkor)
«Орки... Так было с самого дня, когда они были выведены Мелкором из развращённых, замученных и искалеченных ЭЛЬФОВ, которых, возможно, также принуждали к спариванию с другими противоестественными мерзостями во владениях Тёмных Сил.» (http://lotr.wikia.com/wiki/Orcs)
В честь его имени этот код берёт ELF-файл, искажает его и создаёт столько Орков, сколько вы пожелаете.
Melkor — гибридный фаззер (мутационный и генерационный). Он мутирует существующие данные в предоставленном образце ELF, создавая орков (повреждённые ELF-файлы), однако не изменяет значения случайным образом (слепой фаззинг), а вместо этого фаззит определённые метаданные полувалидными значениями с помощью правил фаззинга (базы знаний). Написанный на C, Melkor — очень интуитивный и простой в использовании фаззер для поиска функциональных (и связанных с безопасностью) ошибок в парсерах ELF.
Правила фаззинга были разработаны с учётом следующих источников:
Детальные правила фаззинга и некоторые другие схемы вы найдёте в каталоге docs/.
--------------------------------~
| -- ТРЕБОВАНИЯ -- |
--------------------------------~
--------------------------------~
| -- КОМПИЛЯЦИЯ И ИСПОЛЬЗОВАНИЕ -- |
--------------------------------~
Компиляция очень проста, просто введите: $make
Будет создан файл 'melkor' — сам фаззер, а также некоторые другие ELF-файлы в папке templates/, включая обычные ELF-файлы: обычный исполняемый файл ELF, несколько общих библиотек, статический ELF (автономный исполняемый файл) и некоторые другие.
При запуске melkor будет показан список опций, и вы поймёте, что он очень интуитивен и прост в использовании. Вам нужно лишь указать имя ELF-файла, который будет использоваться в качестве шаблона; это может быть любой из файлов в каталоге templates/.
В зависимости от того, какое ПО вы хотите тестировать, вам нужно выбрать, какие метаданные фаззить. Например, если вы хотите протестировать загрузчик ОС, вероятно, вам стоит фаззить только таблицу программных заголовков (-P) и/или динамический раздел (-D). С другой стороны, возможно, вы захотите фаззить таблицу заголовков секций и ELF-заголовок для тестирования антивирусного движка или отладчика. Фаззинг таблиц символов (-s) и/или таблиц перемещений (-R) в перемещаемых файлах (.o) или общих библиотеках (.so) — для тестирования компиляторов и/или компоновщиков. Таблицы строк также можно фаззить (-Z). Решать, насколько сильно вы хотите исказить ELF, только вам }:-)
Как только орки созданы в каталоге orcs_*/, наступает время протестировать их с помощью test_fuzzed.sh, где вы можете просто указать имя папки с орками для запуска (тестирование загрузчика ОС) или добавить дополнительный параметр, чтобы указать, какую программу (и её параметры) вы хотите протестировать на каждом повреждённом ELF-файле в папке с орками. Этот скрипт имеет опцию фаззинга некоторых переменных окружения (также определённых как правила фаззинга). Просмотр логов с помощью #dmesg после запуска скрипта может быть полезен для определения того, какая программа/библиотека упала и где произошло падение. Некоторые примеры показаны при запуске скрипта без параметров.
Если вы хотите автоматически тестировать повреждённые ELF-файлы (орков) в среде Windows, включён пакетный скрипт (win_test_fuzzed.bat) с почти той же функциональностью, что и скрипт для *NIX.
Счастливого фаззинга!
--------------------------------~
| -- КАТАЛОГИ -- |
--------------------------------~
docs/ Содержит связанную документацию, такую как подробный список правил фаззинга, а также список зависимостей метаданных ELF.
templates/ Содержит некоторые ELF-файлы, скомпилированные одновременно с melkor; их можно использовать для «скармливания» melkor: foo.c -> foo.o (объектный файл ELF) -> foo (исполняемый файл ELF) foo.c -> foo_static (статический исполняемый файл ELF) libfoo.c -> libfoo.so (разделяемый объектный файл ELF) и некоторые другие. Введите «$make templ», чтобы подробно посмотреть, какие ещё ELF-шаблоны создаются.
orcs_*/ Будет содержать повреждённые ELF-файлы (на основе указанного файла шаблона), созданные в процессе фаззинга.
src/ Исходный код Melkor.
--------------------------------~
| -- ОШИБКИ -- |
--------------------------------~
Пожалуйста, прочтите BUGS.txt
--------------------------------~
| -- КОНТАКТЫ -- |
--------------------------------~
Имя: Alejandro Hernandez H. [nitr0us] Twitter: http://twitter.com/nitr0usmx Email: nitrousenador [at] gmail [dot] com Website: http://www.brainoverflow.org Blog: http://chatsubo-labs.blogspot.com
--------------------------------~
| -- В ПАМЯТЬ -- |
--------------------------------~
Этот проект посвящён памяти одного из моих лучших друзей, Аарона Альбы.
--------------------------------~
| -- ЛИЦЕНЗИЯ -- |
--------------------------------~
Melkor — фаззер формата файлов ELF Copyright (C) 2014 Alejandro Hernandez H. (nitr0us)
Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять её на условиях Стандартной общественной лицензии GNU в том виде, в каком она опубликована Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННЫХ ЦЕЛЕЙ. Подробнее см. Стандартную общественную лицензию GNU.
Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если вы её не получили, см. http://www.gnu.org/licenses/.