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

Автор turbo, 29 Октября 2008, 20:01

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

turbo

Ассоциация SAFECode, созданная для пропаганды методов повышения безопасности программ, оборудования и сервисов, представила документ "Fundamental Practices for Secure Software Development" (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", в которой разобраны типичные ошибки программистов на языке Си, приводящие к проблемам с безопасностью: игнорирование кодов возврата при вызове функций, ошибки приведения типов, неаккуратная работа с буферами и строками.
http://www.opennet.ru/opennews/art.shtml?num=18617