Американские исследователи предложили необычный подход к защите программного обеспечения — намеренно добавлять в код программы ошибки. Они создали систему, которая автоматически добавляет в код множество ошибок, но таких, которые не могут привести к реальной уязвимости, а только к завершению программы или другим некритическим проблемам. Предполагается, что это помешает злоумышленниками искать настоящие уязвимости, рассказывают исследователи в статье, опубликованной на arXiv.org.
Обычно программные ошибки приводят лишь к некорректному функционированию самой программы, но в некоторых случаях они позволяют злоумышленнику исполнять произвольный код, который, к примеру, может красть личные данные пользователя. Для защиты от таких ошибок существует несколько способов. Самый очевидный из них — ручной или автоматизированный поиск ошибок и их исправление. Кроме того, существуют механизмы усложнения эксплуатации существующих уязвимостей, такие как рандомизация размещения адресного пространства, или языки программирования с автоматическим управлением памятью, которые также повышают безопасность написанных на них программ.
Группа исследователей в области компьютерной безопасности из Нью-Йоркского университета под руководством Брендана Долан-Гавитта (Brendan Dolan-Gavitt) предложила контринтуитивный метод повышения безопасности программ, в основе которого лежит добавление в них новых ошибок. Основная идея исследователей заключается в том, что чем больше количество «поддельных» ошибок в коде программы, тем больше времени понадобится злоумышленнику на поиск критических ошибок и написание программы для их эксплуатации.
В своей работе авторы сконцентрировались на безопасности доступа к памяти компьютера. Созданная ими система создает «безопасные» ошибки, приводящие к переполнению буфера, в частности, переполнению стека и кучи. Для автоматизированного создания таких ошибок исследователи воспользовались представленной в 2016 утилитой LAVA.
Исследователи заложили в систему два важных ограничения. Она создает ошибки, которые не приводят к некорректной работе при использовании нормальных данных, реально используемых пользователями. Также она ограничивает значения данных, используемых для нарушения целостности памяти и требует, чтобы перезаписываемые данные не использовались программой. Таким образом, она создает контролируемые ошибки в определенных местах программы и с определенными параметрами, в результате чего генерируемые ошибки не несут в себе серьезной опасности.
Разработчики протестировали систему на трех программах — популярном веб-сервере nginx, библиотеке кодирования аудиофайлов libFLAC и системной утилите file из Unix-подобных операционных систем. Исследователи давали программам данные из двух наборов — нормальные значения и значения, которые должны привести к аварийному завершению программы из-за внедренной ошибки. Авторы показали, что система способна внедрять тысячи ошибок в код программ, но их наличие не приводит к некорректному функционированию программ в ответ на корректные данные. Кроме того, исследователи протестировали метод на программе для фаззинга и отладчике, и показали, что созданные ими ошибки рассматриваются такими программами как потенциально эксплуатируемые, а значит, могут привлечь внимание злоумышленников.
В 2015 году разработчики из Массачусетского технологического университета представили алгоритм для автоматического исправления ошибок в программах, а в 2016 году представили его значительно доработанную версию, способную к самообучению.
Григорий Копиев
Как сейчас выглядит нейрогенеративное искусство и что с ним будет дальше
Когда работаешь с новостями науки, иллюстрации — это сложно. Ладно еще, когда речь о каком-то наглядном поведенческом эксперименте. Но когда у тебя доказательство математической теоремы или демонстрация тонкого эффекта из области квантовой химии, где в качестве иллюстративного материала в лучшем случае графики — приходится думать. Думать долго и отчаянно. Так что когда разработчики нейросетей начали сначала делиться успехами своих детищ в живописи, а после запустили сервисы нейрогенерации изображений мы, конечно, очень обрадовались. Но простая генерация картинок в ответ на набор слов — это еще не очень интересно. Поэтому мы пошли к Илье Яцкевичу и Алексею Устьянцеву, которые занимаются нейрогенеративным искусством, чтобы они попробовали себя в роли иллюстраторов научных новостей — а потом поговорили с ними о том, как меняют их работу рисующие машины.