Основы разработки безопасного программного обеспечения

28 октября 2008 года

Ассоциация SAFECode, созданная для пропаганды методов повышения безопасности программ, оборудования и сервисов, представила (Архивная копия от 14 августа 2014 на Wayback Machine) документ " Fundamental Practices for Secure Software Development (Архивная копия от 15 декабря 2011 на Wayback Machine)" (PDF, 2.1Мб), в котором изложены основы разработки безопасного программного обеспечения. В документе представлены следующие рекомендации:

  • Минимизация использования потенциально небезопасных функций (strcpy, strncpy, strcat, scanf, sprintf, gets и подобных);
  • Использование последних версий средств компиляции и сборки. Например, в новых версиях gcc появились средства для защиты от срыва стека (-fstack-protector); возможность переключения определенных областей памяти, после загрузки исполняемого приложения, в режим только для чтения (-Wl,zrelro); средства рандомизации адресного пространства (-Wl -pie); функции glibc для дополнительной внутренней проверки выхода за пределы буфера функций, таких как strcpy ("-D_FORTIFY_SOURCE=2"); технология защиты от атак через параметры форматирования строки ("-Wformat" и "-Wformat-security").
  • Применение статических и динамических анализаторов кода для выявления вероятных проблем (например, различные lint-системы, хорошую подборку которых можно найти здесь);
  • Дополнительный ручной аудит кода;
  • Особое внимание при проверке входящих, получаемых из вне, и выходящих параметров;
  • Использование дополнительных библиотек для защиты от межсайтового скриптинга. Например, PHP библиотека AntiXSS;
  • Работа с каноническими форматами представления данных (подразумевается, например, что экранированные URL запросы должны приводиться в канонических вид, упрощающий проверку и исключающий передачу скрытых параметров);
  • Избежание формирования динамического SQL запроса через соединение строк (предполагается, что так легче упустить из вида непроверенный параметр);
  • Проверка стойкости используемых криптоалгоритмов;
  • Ведение подробных логов, отражающих все события в работе программы;
  • Тестирование безопасности приложения, используя различные сканеры типовых уязвимостей и генераторы случайного контента ( Fuzz Testing).

Кроме того, можно отметить статью "Writing Insecure C", в которой разобраны типичные ошибки программистов на языке Си, приводящие к проблемам с безопасностью: игнорирование кодов возврата при вызове функций, ошибки приведения типов, неаккуратная работа с буферами и строками.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Основы разработки безопасного программного обеспечения», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.