Fuzzing Linux Kernel: студент в опасности. - PullRequest
6 голосов
/ 26 сентября 2011

В настоящее время я учусь в университете и изучаю степень, связанную с компьютерами, и мой текущий проект направлен на поиск уязвимостей в ядре Linux.Моя цель состоит в том, чтобы как статически проверять, так и «фаззить» ядро ​​(нацеленное на версию 3.0) в попытке найти уязвимость.

Мой первый вопрос «простой» - возможно ли фаззирование ядра Linux?Я слышал о людях, размышляющих о множестве протоколов и т. Д., Но мало о модулях ядра.Я также понимаю, что в системе Linux все можно увидеть в виде файла, и, следовательно, вход в модули ядра должен быть возможен через этот интерфейс, не так ли?

Мой второй вопрос: какой фаззер вы бы предложили?Как указывалось ранее, существует множество фаззеров, которые используют протоколы фазз, однако я не вижу, чтобы многие из них были полезны при атаке на модуль ядра.Очевидно, есть фреймворки, такие как фаззер Peach, который позволяет вам «создать» свой собственный фаззер с нуля, и якобы превосходный, однако я неоднократно пытался установить Peach безрезультатно, и мне трудно поверить, что он подходитучитывая трудности, которые я уже испытывал, просто устанавливая его (если кто-нибудь знает какие-либо приличные руководства по установке, пожалуйста, сообщите мне: P)

Буду признателен за любую информацию, которую вы сможете предоставить мне по этой проблеме.Учитывая широту темы, которую я выбрал, любая идея о направлении всегда высоко ценится.Точно так же я хотел бы попросить людей воздерживаться от того, чтобы они говорили мне начинать в другом месте.Я понимаю, насколько важна задача под рукой, однако я все равно попытаюсь выполнить ее независимо (я - мыслитель голубого неба: П АКА упрямый как бык)

Приветствия

А. Смит

Ответы [ 3 ]

6 голосов
/ 27 сентября 2011

Я думаю, что хорошей отправной точкой было бы расширение фейзера ядра Linux Дэйва Джонса, Trinity: http://codemonkey.org.uk/2010/12/15/system-call-fuzzing-continued/ и http://codemonkey.org.uk/2010/11/09/system-call-abuse/

Кажется, что Дейв находит больше ошибок всякий раз, когда он расширяет это немного больше,Основная идея состоит в том, чтобы посмотреть на системные вызовы, которые вы называете, и вместо того, чтобы передавать абсолютно случайный мусор, заставьте своего фаззера выбрать случайный мусор, который, по крайней мере, пройдет базовые проверки работоспособности в реальном коде системного вызова.Другими словами, вы используете исходный код ядра, чтобы ваш фаззер мог проникнуть в системные вызовы дальше, чем обычно происходил бы совершенно случайный ввод.

4 голосов
/ 27 сентября 2011

«Fuzzing» в ядре - довольно широкий способ описания ваших целей. С точки зрения ядра вы можете

  • попробуйте запустить системные вызовы
  • Символьные и блочные устройства в / dev

Не уверен, чего ты хочешь достичь.

Нечеткое обращение к системным вызовам будет означать проверку каждого системного вызова Linux (http://linux.die.net/man/2/syscalls) и попытаться нарушить обычную работу нечетными значениями параметров.

Нечеткие символьные или блочные драйверы означают попытку отправки данных через / dev-интерфейсы таким образом, что это приведет к нечетному результату.

Также вы должны различать попытки непривилегированного пользователя и пользователя root.

Мое предложение сводит ваши попытки к подмножеству вашего предложения. Это слишком чертовски широк.

Удачи - Алекс.

1 голос
/ 31 октября 2011

Один из способов фаззинга - это системный вызов фаззинга.

По сути, идея состоит в том, чтобы принять системный вызов, распознать входные данные во всем диапазоне возможных значений - остаются ли они в пределах спецификации, определенной для системы.звонок не имеет значения.

...