Введение
Комплексный анализ исходного кода программного обеспечения.
A software code audit is a comprehensive analysis of source code in a programming project with the intent of discovering bugs, security breaches or violations of programming conventions. It is an integral part of the defensive programming paradigm, which attempts to reduce errors before the software is released. C and C++ source code is the most common code to be audited since many higher level languages, such as Python, have fewer potentially vulnerable functions (e. g., functions that do not check bounds).
Аудит программного кода — это всесторонний анализ исходного кода в рамках программного проекта, направленный на выявление ошибок, уязвимостей в системе безопасности или нарушений стандартов кодирования. Он является неотъемлемой частью парадигмы защитного программирования, которая стремится к сокращению числа ошибок до выпуска программного обеспечения. Исходный код на C и C++ чаще всего подвергается аудиту, поскольку многие языки более высокого уровня, такие как Python, содержат меньше потенциально уязвимых функций (например, функций, не осуществляющих проверку границ).
A software code audit is a comprehensive analysis of source code in a programming project with the intent of discovering bugs, security breaches or violations of programming conventions. It is an integral part of the defensive programming paradigm, which attempts to reduce errors before the software is released. C and C++ source code is the most common code to be audited since many higher level languages, such as Python, have fewer potentially vulnerable functions (e. g., functions that do not check bounds).
Руководящие принципы
При аудите программного обеспечения каждый критически важный компонент следует проверять отдельно и в составе всей программы. Рекомендуется начинать с поиска уязвимостей высокого риска и постепенно переходить к уязвимостям низкого риска. Уязвимости средней степени риска обычно возникают в зависимости от конкретной ситуации и способа использования соответствующего исходного кода. Тестирование на проникновение направлено на выявление уязвимостей в программном обеспечении путем применения максимально возможного количества известных техник атак к наиболее вероятным точкам доступа, чтобы попытаться нарушить работу приложения. Это распространенный метод аудита, позволяющий выявить наличие конкретных уязвимостей, но не определить их местоположение в исходном коде. Некоторые считают, что методы аудита, проводимые в конце цикла разработки, часто перегружают разработчиков, в итоге оставляя команду с длинным списком известных проблем, но без существенных улучшений; в таких случаях в качестве альтернативы рекомендуется использовать подход к аудиту, интегрированный в процесс разработки.
Зависимость от требований
Если установить низкий порог, большинство инструментов аудита программного обеспечения обнаруживают множество уязвимостей, особенно если код ранее не проходил аудит. Однако реальная значимость этих предупреждений также зависит от способа использования приложения. Библиотека, которая может быть связана с вредоносным кодом (и должна быть устойчива к нему), предъявляет очень строгие требования, например, клонирование всех возвращаемых структур данных, поскольку ожидаются преднамеренные попытки взлома системы. Программа, которая может подвергаться только вредоносным входным данным (например, серверная часть веб-сервера), в первую очередь должна обеспечивать защиту от этих данных (переполнение буфера, SQL-инъекции и т.п.). Подобные атаки маловероятны для программы, используемой исключительно внутри организации авторизованными пользователями в защищенной инфраструктуре.