Навмисні помилки в коді допоможуть захиститися від хакерів

Американські дослідники запропонували незвичайний підхід до захисту програмного забезпечення - навмисно додавати в код програми помилки. Вони створили систему, яка автоматично додає в код безліч помилок, але таких, які не можуть призвести до реальної вразливості, а тільки до завершення програми або інших некритичних проблем. Передбачається, що це завадить зловмисниками шукати справжні вразливості, розповідають дослідники в статті, опублікованій на arXiv.org.


Зазвичай програмні помилки призводять лише до некоректного функціонування самої програми, але в деяких випадках вони дозволяють зловмиснику виконувати довільний код, який, наприклад, може красти особисті дані користувача. Для захисту від таких помилок існує кілька способів. Найочевидніший з них - ручний або автоматизований пошук помилок і їх виправлення. Крім того, існують механізми ускладнення експлуатації існуючих вразливостей, такі як рандомізація розміщення адресного простору, або мови програмування з автоматичним управлінням пам'яттю, які також підвищують безпеку написаних на них програм.


Група дослідників у галузі комп'ютерної безпеки з Нью-Йоркського університету під керівництвом Брендана Долан-Гавітта (Brendan Dolan-Gavitt) запропонувала контринтуїтивний метод підвищення безпеки програм, в основі якого лежить додавання в них нових помилок. Основна ідея дослідників полягає в тому, що чим більша кількість «підроблених» помилок в коді програми, тим більше часу знадобиться зловмиснику на пошук критичних помилок і написання програми для їх експлуатації.

У своїй роботі автори сконцентрувалися на безпеці доступу до пам'яті комп'ютера. Створена ними система створює «безпечні» помилки, що призводять до переповнення буфера, зокрема, переповнення стека і купи. Для автоматизованого створення таких помилок дослідники скористалися представленою в 2016 році утилітою LAVA.

Дослідники заклали в систему два важливих обмеження. Вона створює помилки, які не призводять до некоректної роботи при використанні нормальних даних, реально використовуваних користувачами. Також вона обмежує значення даних, що використовуються для порушення цілісності пам'яті і вимагає, щоб перезаписувані дані не використовувалися програмою. Таким чином, вона створює контрольовані помилки в певних місцях програми і з певними параметрами, в результаті чого генеровані помилки не несуть в собі серйозної небезпеки.

Розробники протестували систему на трьох програмах - популярному веб-сервері nginx, бібліотеці кодування аудіофайлів libFLAC і системній утиліті file з Unix-подібних операційних систем. Дослідники давали програмам дані з двох наборів - нормальні значення і значення, які повинні привести до аварійного завершення програми через впроваджену помилку. Автори показали, що система здатна впроваджувати тисячі помилок у код програм, але їх наявність не призводить до некоректного функціонування програм у відповідь на коректні дані. Крім того, дослідники протестували метод на програмі для фаззингу і налагоджувача, і показали, що створені ними помилки розглядаються такими програмами як потенційно експлуатовані, а значить, можуть привернути увагу зловмисників.

У 2015 році розробники з Массачусетського технологічного університету представили алгоритм для автоматичного виправлення помилок у програмах, а в 2016 році представили його значно доопрацьовану версію, здатну до самонавчання.

COM_SPPAGEBUILDER_NO_ITEMS_FOUND