Supply Chain Security
Узнать большеАнализ безопасности ПО – важный этап при разработке приложений. Один из самых распространенных методов для поиска уязвимостей — статический анализ кода. Рассказываем, как и с помощью каких инструментов он выполняется, что выявляет и в каких случаях используется.
Что из себя представляет статический анализ кода
Речь о Static Application Security Testing (сокращенно — SAST) — методе исследования кода ПО без необходимости запуска программы. В этом его главное отличие от еще одного вида анализа — динамического, который подразумевает тестирование в процессе выполнения приложения.
Статический анализ еще называет тестированием методом белого ящика. Это значит, что он учитывает внутренние компоненты приложений в отличие от тестирований по стратегии черного ящика, которые не знают, «что находится внутри ящика» и проводят анализ как внешний пользователь. Его задача — обнаруживать уязвимости в работающем приложении.
Какие методы анализа могут использоваться для поиска слабых мест ПО:
- Лексический — разбор последовательности символов кода на лексемы с целью формирования токенов, которые будут передаваться на следующий, синтаксический, этап исследования.
- Синтаксический — этап статического анализа, на котором проверяется соответствие кода синтаксису используемого языка программирования.
- Семантический — проверка согласованности кода, то есть его соответствия внутреннему представлению объектов, с которыми работает программа.
- Taint-анализ — технология, позволяющая обнаруживать уязвимости, связанные с внедрением и распространением каких-либо внешних непроверенных данных, которые могут вызвать такие проблемы безопасности, как SQL-инъекции и межсайтовый скриптинг.
- Распространение констант — тип анализа, целью которого является поиск величин, неизменных при любом сценарии выполнения программы.
- Распространение типов — задача, которая позволяет выяснить тип переменной.
- Исследование графов потока управления — анализ, который проводится с целью отследить порядок выполнение программы.
Статический анализ кода может проводиться вручную или с помощью специальных инструментов — анализаторов. Первый вариант требует немалых временных затрат, а тот, кто анализирует код, зачастую не успевает за скоростью разработки, поэтому оптимальный способ – внедрение качественного инструмента для анализа кода приложений.
Какие задачи решает статический анализ
Статический анализ выполняется для поиска ошибок, потенциальных недекларированных возможностей и уязвимостей, которые могут в дальнейшем вызвать проблемы в эксплуатации программ и стать точками входа для хакеров, которые хотят нарушить работу ПО или украсть персональные данные пользователей.
Где применяется статический анализ кода
Статический анализ применим на разных этапах разработки ПО и полезен для контроля безопасности любых приложений. Например, будет уместно использовать его в следующих случаях:
- При приемке готового программного обеспечения. Этот сценарий реализуется, когда приложения разрабатываются подрядчиками. При приемке заказчик может проверить код на уязвимости, чтобы поставить задачу на исправление недостатков до запуска продуктов в эксплуатацию.
-
Для проверки наследованного программного обеспечения. Этот сценарий подразумевает, что продукты разрабатывались давно и доступ к исходному коду отсутствует. В таком случае будет анализироваться безопасность бинарного кода, который можно просто загрузить в статический анализатор и получить результаты теста.
Этот сценарий с проверкой наследованного ПО применим не для всех статических анализаторов — это одна из уникальная функция решения Solar appScreener. - На любом этапе разработки. Статический анализ помогает оперативно выявить уязвимости и недостатки кода, что дает возможность устранить проблемы до релиза готового продукта и сократить расходы на срочное устранение уязвимостей прямо перед выпуском приложения на рынок.
Преимущества и возможности статического анализа кода
Разберем преимущества использования статического анализа кода:
- Практически 100% охват кода, что позволяет обнаруживать максимальное количество существующих проблем и потенциальных недекларированных возможностей.
- Выявление уязвимостей уже на первых этапах разработки программных продуктов, когда другие виды тестирований не применимы
- Возможность анализировать бинарный код, если нет доступа к исходному. Эта функция доступна в инструменте Solar appScreener и позволяет проверять ПО, загружая на анализ бинарный код.
- Статический анализ не требует развертывания виртуальных сред для тестирования.
- Возможность сравнивать результаты анализа за разные периоды и отслеживать динамику появления и устранения уязвимостей.
Такой анализ используется в комплексе с другими видами тестирований:
- Dynamic Application Security Testing (сокращенно — DAST). Это динамическое тестирование, предполагающее имитацию реальных атак на программу с эксплуатацией потенциальных уязвимостей. Цель — отследить поведение приложения и найти слабые места, не обнаруженные при статическом анализе, или подтвердить эксплуатацию выявленных уязвимостей.
- Interactive Application Security Testing (сокращенно — IAST). Подвид динамического анализа, который позволяет мониторить выполнение кода программы и обнаруживать записи критической информации в логе.
- Software Composition Analysis (сокращенно — SCA). Это сканирование программных продуктов с целью выявить open-source составляющие кода, небезопасные компоненты от сторонних разработчиков, закладки в библиотеках и т.д.
Делать выбор в пользу какого-то одного анализа, отказавшись от других — нецелесообразно, поскольку у каждой методики есть слабые стороны. Например, у SAST это ложноположительные сигналы, то есть ситуации, когда анализатор оповещает о наличии проблем, которых по факту нет. Из-за этого значительно увеличивается время на исследование безопасности программных продуктов, поскольку приходится вручную проверять каждый выявленный фактор. Динамический анализ может не обнаружить уязвимости, которые никак не сказываются на поведении интерфейса приложения. Комплексный подход позволит максимально использовать преимущества разных видов тестирований и компенсировать их слабые стороны.
Какие проблемы выявляет статический анализ кода
Благодаря SAST-анализу можно выявить все недостатки кода из ключевых мировых классификаций уязвимостей, например, таких, как OWASP TOP 10. Коротко расскажем, какие именно обнаруживаются чаще всего:
- Отсутствие функций контроля доступа. К этой категории можно отнести любые уязвимости, подразумевающие слабый контроль уровней доступа к функциям приложений или хранящейся в программах информации. В результате хакеры путем видоизменения запросов могут легко завладеть данными.
- Некорректная реализация криптографической защиты персональных сведений. Например, эксплуатация использование устаревших подходов и алгоритмов, слишком короткие ключи, непродуманные условия хранения ключей, слабое шифрование атрибутов учетных записей и т.д. Самое банальное, что могут сделать злоумышленники, эксплуатируя данные уязвимости — подобрать пароль и войти в приложение от лица пользователя. Без статического анализа обнаружить такие проблемы довольно сложно, поэтому разработчики будут думать, что их продукт защищен.
- Инъекции, то есть ввод пользовательских команд, содержащих вредоносные коды, которые затем будут выполняться на сервере. Такая тактика позволяет хакерам красть или повреждать информацию, провоцировать сбои в системах.
- Сомнительная архитектура программного продукта. В этом случае нарушается логика работы ПО, в результате чего злоумышленники могут эксплуатировать для взлома заложенные в нем функции.
- Небезопасная конфигурация, то есть уязвимость, подразумевающая проблемы с процедурами аутентификации и авторизации.
- Несовершенные механизмы подтверждения личности пользователей. Это могут быть: использование слабых и коротких паролей, отсутствие многофакторной проверки, недостаточный контроль сеансов, непродуманные способы восстановления атрибутов учетных записей.
- Слабый контроль безопасности. Эта уязвимость подразумевает, что приложение некорректно регистрирует подозрительные события или вообще не отмечает их, не отправляет уведомления об аномалиях. Логично, что при такой проблеме атаки на ПО могут пройти незамеченными.
- Фальсификация команд на серверной стороне. В этом случае речь о теоретической возможности отправлять запросы с сервера к различным сайтам и внутренним ресурсам, что иногда и делают злоумышленники.
Это далеко не полный перечень уязвимостей, которые может обнаружить статический анализатор. После сканирования ПО ответственные лица получают детальный отчет с описанием проблем и указанием конкретных строк кода, в которых они встречаются. Также инструмент предоставляет подробные инструкции по устранению слабых мест приложений.
Внедрение статического анализа кода в цикл безопасной разработки ПО
Для удобства контроля безопасности ПО важно, чтобы анализатор кода легко встраивался в процесс безопасной разработки. Речь о подходе DevSecOps, который призван обеспечить выпуск защищенных приложений в необходимые сроки.
Методология предполагает фокус на безопасности ПО прямо в ходе разработки, поэтому анализ безопасности проводится на всех этапах, что позволяет вовремя максимально рано выявлять недочеты и уязвимости кода. В итоге пользователи получают качественные продукты с высоким уровнем защищенности, а создатели сокращают расходы на стадии поддержки приложений, поскольку проблемы с такими программами случаются редко.
Решения для реализации статического анализа кода удается встроить в цикл безопасной разработки благодаря их интеграции с другими инструментами. Например, в Solar appScreener есть коннекторы для интеграции с самыми популярными репозиториями, инструментами разработки, сборки, серверами и т.д.:
- Платформой для измерения качества исходного кода SonarQube
- Различными средствами, которые используются для разработки ПО. Примеры: IntelliJ IDEA, Eclipse и многие другие.
- Инструментами для сборки приложений: Visual Studio, Maven, Xcode и т.д.
- Version Control System-хостингами для управления вариациями кода: Bitbucket и другими.
- Репозиториями Git и Subversion.
- VCS-хостингами GitLab, GitHub, Bitbucket
- Средствами разработки Eclipse, Microsoft Visual Studio, IntelliJ IDEA;
- Средствами сборки Xcode, CMake, Visual Studio, GNU Make, GNU Autotools, Gradle, sbt, Maven;
- Платформой непрерывного анализа и измерения качества кода SonarQube;
- Серверами CI/CD Jenkins, Azure DevOps Server и TeamCity;
- Системами отслеживания ошибок Atlassian Jira и ТУРБО Трекинг.
- Платформами для отслеживания недочетов в программных продуктах и т.д.