Пускай закладки останутся только в книгах: как и зачем проводить аудит программного кода

30.03.2020

Если бы у информационной безопасности были заповеди, хватило бы и двух. Первая – помните: всё, что вы создаёте, может стать инструментом в руках злоумышленника. Вторая – никому не доверяйте. Что это значит в контексте разработки ПО? То, что аудит безопасности, то есть поиск и устранение уязвимостей необходимы на каждом этапе. Как случайных, связанных с ошибками кодирования, так и преднамеренных «закладок».

Каковы группы риска?

Многие IT-компании считают себя «неуловимыми Джо»: как будто злоумышленникам до них попросту нет дела. Наш опыт доказывает обратное. Даже нишевые и не слишком популярные приложения часто становятся объектом спланированных хакерских атак. А как следствие, и серьезных потерь для компании-разработчика: финансовых и репутационных. Предпосылками для неприятностей вследствие кибератак в основном становятся:

  • Недостаточная квалификация штатных кодеров. В отечественных реалиях junior нередко работает за middle, а как только дорастает до нужного уровня — на него тут же обрушиваются обязанности senior. Но эти звания не просто индикатор статуса и зарплаты. Они характеризуют комплексное понимание процесса разработки. В том числе ИБ. Результатом такого несоответствия могут стать ошибки проектирования критически важных подсистем ПО.
  • Упор на аутсорсинг. Бизнесу не обойтись без подрядчиков, но не все они одинаково компетентны и порядочны. Часто задачу без ведома заказчика передают субподрядчикам, а контактное лицо и вовсе не имеет представления, как идут дела. В результате исходные коды и информация об архитектуре ПО становится известна широкому кругу лиц. Нет гарантии, что никто из них не связан со взломщиками.
  • Конфликты и текучка кадров. Авторами «закладок» чаще всего становятся не «внедренные агенты», а простые сотрудники, убежденные, что с ними поступили несправедливо. Последствия такой мести могут быть разрушительными, а потому повышение лояльности персонала и укрепление корпоративного духа — не пустые слова, а один из аспектов информационной безопасности.

Чем опасны непреднамеренные уязвимости исходного кода ПО?

Внедрение «логических бомб», недокументированных деструктивных функций, мастер-паролей или, например, заведомо некорректная реализация алгоритмов шифрования требуют обстоятельного подхода. А чем сложнее и дороже взлом, тем меньше злоумышленников станут доводить операцию до конца. Распространенные некорректности кодирования – другое дело. Ими могут воспользоваться даже случайные хакеры.

Чаще всего мы сталкиваемся с такими классами непреднамеренных уязвимостей исходного кода ПО:

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

По сути, речь о соответствии исходного кода стандартам платформы и языка программирования. Сам язык тоже вносит свои коррективы в ситуацию с информационной безопасностью. Так, по числу специфических уязвимостей, согласно разным источникам, лидируют C и Java, а одними из самых безопасных принято считать C++ и Python. И всё-таки важен не сам язык, а умение им пользоваться.

Как происходит аудит безопасности исходного кода?

В арсенале экспертов по информационной безопасности 3 метода проверки исходного кода. Комбинируя их, можно регулировать глубину и тщательность анализа безопасности ПО, а вместе с этим и затраты сил, времени, а также стоимость работ. Варианты аудита безопасности кода.

  • Инспекции исходного кода вручную. Самый трудоёмкий из доступных способов, требующий привлечения сотрудников высокой квалификации. Еще лучше — нескольких независимых групп таких экспертов, чтобы минимизировать фактор субъективного восприятия. Такой аудит займет много времени, но выявит даже маскируемые «закладки», а также недостатки архитектуры всего приложения и его отдельных подсистем.
  • Статический анализ программного кода по шаблону. Суть этого способа — в проверке программного кода специализированными утилитами, отыскивающими потенциально опасные конструкции. Им чаще всего не под силу определить сложные «закладки», а вот облегчить поиск типовых уязвимостей, от парольных констант до SQL-инъекций, — вполне.
  • Динамический анализ кода программного обеспечения. Это не проверка самого исходного кода, а наблюдение за его выполнением на тестовой станции. Такой способ тоже подразумевает автоматизацию и помогает выявить как некорректности кодирования, так и многие уязвимости. Обычно динамический аудит кода ПО используется как вспомогательный метод, чтобы прояснить отдельные аспекты работы приложения.

Что главное в проверке программного кода?

Профессионализм, внимательность, усидчивость – все эти ответы правильные. Но мы убеждены, что важней всего нацеленность на результат. То есть на создание взломоустойчивого программного обеспечения. А значит, недостаточно предоставить заказчику список обнаруженных слабых мест – нужна подробная инструкция, как в кратчайшие сроки устранить каждую «лазейку» и не допускать подобного в будущем.

Лишь в одном случае потенциальные уязвимости не оборачиваются реальными убытками – если вовремя от них избавиться. А значит, аудит исходного кода ПО – ещё и залог вашего спокойствия.

Это может быть интересно:

The Codeby

МоскваРоссия
Офис компании расположен в Москве. Работаем по всему миру.
Где нас найтиМы здесь:
https://pentest.codeby.net/wp-content/uploads/2020/04/img-footer-map12-1.png
Мы в сетиКодебай в Соцсетях
Подпишитесь на нас, чтобы быть в курсе последних событий.
МоскваРоссия
Офис компании расположен в Москве. Работаем по всему миру.
Где нас найтиМы здесь
https://pentest.codeby.net/wp-content/uploads/2020/04/img-footer-map12-1.png
Мы в сетиКодебай в Соцсетях
Подпишитесь на нас, чтобы быть в курсе последних событий.