Автоматический анализ исходного кода позволяет выявлять возможные уязвимости на ранних этапах и помогает оптимизировать расходы компании на разработку и внедрение программного обеспечения. Автор статьи рассказывает о популярных в России сканерах кода, которые использовала в своих проектах компания «Инфосистемы Джет».
- Введение
- Популярные в России статические анализаторы кода
- 2.1. Fortify Static Code Analyzer
- 2.2. Checkmarx CxSAST
- 2.3. Solar inCode
- 2.4. IBM App Scan Source
- Выводы
Введение
В борьбе за лояльность существующих клиентов и стремлении завоевать доверие новых потребителей компании постоянно расширяют функциональность приложений и программных продуктов. Одни занимаются разработкой самостоятельно, другие привлекают для этих целей внешних подрядчиков. В погоне за функциональностью вопрос безопасности кода разрабатываемого программного обеспечения нередко отходит на второй план. Как результат, вместе с дополнительными функциями, новым модулем или нетиповой надстройкой можно приобрести уязвимости и недекларированные возможности (НДВ). Обнаружение подобных угроз на этапе эксплуатации системы или приложения несет для компании большие финансовые и в отдельных случаях репутационные риски.
Выявлять уязвимости целесообразно на более ранних этапах — это поможет существенно сократить затраты на доработку и минимизировать возможные риски. Одним из вариантов обнаружения служит статический анализ исходного кода — автоматический процесс поиска ошибок в программном обеспечении. В отличие от ручного анализа кода, выполняемого группой экспертов, программный анализатор может за короткие сроки проверить весь код и выявить ошибки, которые для специалистов на первый взгляд неочевидны. Это ускоряет процесс тестирования и оптимизирует ресурсы. Кроме того, статический анализ позволяет проверить абсолютно весь код — ни одна строка не останется незамеченной. Однако здесь же кроются и недостатки подхода: за счет столь тщательного изучения кода существенно возрастает вероятность ложных срабатываний (false positive), проверка которых отнимает достаточное количество времени программистов и специалистов по безопасности. Также не исключаются и неучтенные уязвимости (false negative), которые по тем или иным причинам могут остаться незамеченными.
В данной статье предлагаю кратко рассмотреть наиболее популярные в России статические анализаторы кода, которые мы использовали в наших проектах.
Популярные в России статические анализаторы кода
Fortify Static Code Analyzer
Fortify Static Code Analyzer — статический анализатор кода компании Micro Focus, занимающий ведущие позиции среди аналогичных решений, согласно квадранту Gartner. Решение позволяет выявлять уязвимости с минимальными затратами времени, при этом сохраняя качество кода. Поддерживает более 20 языков программирования: ABAP/BS, ActionScript/MXML (Flex), Apex, ASP.NET, VB.NET, C# (.NET), C/C++, Classic ASP (w/VBScript), COBOL, ColdFusion CFML, HTML, Java (including Android), JavaScript/AJAX, JSP, Objective-C, PHP, PL/SQL, Python; T-SQL, Ruby, Scala, Swift, Visual Basic; VBScript, XML.
Продукт можно интегрировать с различными системами: службами каталогов (LDAP), средами разработки (Eclipse, Visual Studio, IntelliJ, Webstorm и др.), серверами непрерывной интеграции (Jenkins, GitLab CI и др.) и системами отслеживания ошибок (Atlassian JIRA, Bugzilla и др.). Fortify Static Code Analyzer определяет причины уязвимостей, приоритизирует результаты и дает подробные рекомендации по исправлению кода.
К недостаткам решения можно отнести отсутствие материалов и документации на русском языке, англоязычные отчеты и интерфейс, а также высокую стоимость, которая делает Fortify недоступным для начинающих компаний-разработчиков.
Checkmarx CxSAST
Checkmarx CxSAST — статический анализатор кода компании Checkmarks, еще одного лидера квадранта Gartner. Решение позволяет в автоматическом режиме сканировать нескомпилированный код, обнаруживать и идентифицировать сотни уязвимостей в наиболее распространенных языках программирования. CxSAST доступен как для самостоятельной установки, так и эффективно интегрирован в цикл разработки (SDLC) для сокращения времени на обнаружение и устранение уязвимостей.
CxSAST прост в установке, поддерживает 20 языков программирования: Java, C#, JavaScript, TypeScript, PHP, Apex, Python, Groovy, PL/SQL, HTML 5, ASP, VB.NET, Perl, VBScript, Ruby, C/C++, VB, Scala, iOS (Objective C, Swift), Android (Java). Дополнительно каждый год добавляется по 2-3 новых языка. Решение хорошо интегрируется с различными средами разработки (Eclipse, Visual Studio, IntelliJ и пр.), серверами сборки (Jenkins, Bamboo, TeamCity, Maven, CLI), системами контроля версий (Bitbucket) и отслеживания ошибок (Atlassian JIRA).
Продукт ориентирован прежде всего на разработчиков программного обеспечения и может быть использован на различных этапах жизненного цикла ПО — от разработки до эксплуатации. В CxSAST реализована функция визуализации кода в виде блок-схем маршрутов выполнения. По результатам сканирования выдаются рекомендации по исправлению проблем с привязкой к графической схеме.
Стоимость этого продукта, как и Fortify, достаточно высока, поэтому позволить его себе могут далеко не все желающие.
Solar inCode
Solar inCode — российский анализатор кода компании Ростелеком-Solar, предназначенный для анализа приложений на наличие уязвимостей информационной безопасности и недекларированных возможностей.
InCode может сканировать бинарные и исполняемые файлы на уязвимости. С помощью технологии декомпиляции он восстанавливает исходный код из рабочего файла и выявляет в нем уязвимости. Мобильные приложения могут быть загружены в inCode прямо из Google Play или App Store.
Решение поддерживает 20 языков программирования, среди которых Java, JavaScript, Scala, PHP, Python, Ruby, HTML5, PL/SQL, T/SQL, Java for Android, Swift, Objective C, С#, C/C++, VB 6.0, Delphi, ABAP, Solidity, Groovy, Kotlin. Интегрируется со средой разработки Eclipse, средствами автоматизации сборки Maven, Grandle и SBT, системой отслеживания ошибок Atlassian JIRA. Встраивается в системы непрерывной интеграции Jenkins и TeamCity. Кроме того, Solar InCode может быть встроен в процесс безопасной разработки. По результатам анализа выдаются подробные рекомендации по исправлению кода и по настройке компенсирующих мер на средствах защиты веб-приложений.
Продукт простой и понятный для пользователя, как из ИТ-, так и из ИБ-сферы. Интерфейс, отчетность и вся документация на русском языке. Возможностей интеграции из коробки значительно меньше, чем у конкурентов, но и стоимость приятнее.
IBM App Scan Source
IBM App Scan Source — одно из топовых решений статического анализа исходного кода компании IBM. Анализатор обнаруживает уязвимости в исходном коде приложений на ранних этапах жизненного цикла разработки, позволяет интегрировать анализ исходного кода с автоматическим сканированием в процессе выполнения компоновки. Обладает высокой скоростью сканирования — более миллиона строк кода в час.
Анализатор кода от IBM поддерживает следующие языки программирования: Java, JavaScript, JSP, ColdFusion, C, C++, Objective-C, .NET (C#, ASP.NET and VB.NET), Classic ASP (JavaScript/VBScript), PHP, Perl, VisualBasic 6, PL/SQL, T-SQL, SAP, ABAP and COBOL, Android, iOS. Решение обеспечивает интеграцию с плагинами Eclipse/Visual Studio и автоматизацию сборки (Ant, Make, Maven).
AppScan тесно интегрируется с другими продуктами IBM, связанными с безопасной разработкой: IBM Rational и IBM Worklight. В самой линейке продуктов AppScan есть в том числе и компонент динамического анализа кода.
Решение от IBM в большей степени ориентировано на разработчиков программного обеспечения, поэтому внедрение и работа с ним требует определенного уровня знаний в программировании. Стоимость сопоставима с решениями других лидеров квадранта Gartner.
Выводы
Все рассмотренные продукты так или иначе помогают значительно повысить безопасность разрабатываемого программного обеспечения и улучшить качество кода. Каждый из них занимает свое место на российском рынке. Среди факторов, влияющих на выбор конкретного решения, помимо основных функциональных показателей и анализируемых языков, можно отметить степень зрелости самого заказчика и специализацию непосредственного пользователя системы, будь то ИБ-специалист или разработчик.
Но как бы ни были хороши функциональные характеристики анализаторов, из коробки такие продукты не работают. Чтобы анализатор кода обеспечивал действительно качественную проверку, он должен быть правильно внедрен в инфраструктуру заказчика, настроен с учетом всех индивидуальных особенностей процесса разработки и интегрирован с прочими системами разработки, используемыми в компании, при наличии соответствующей функциональной возможности продукта. Результаты автоматизированного анализа должны быть верифицированы специалистами заказчика или сторонних компаний вручную для минимизации количества ложных срабатываний и повышения качества анализа.
Между тем, не каждый заказчик может позволить себе полноценный анализатор кода, и не для всех покупка такого продукта будет экономически целесообразна. Тогда наилучшим решением станет покупка разовых или периодических услуг по анализу исходного кода, которые могут проводиться, как было сказано ранее, на различных этапах жизненного цикла ПО.
Выполнение статического анализа как минимум на этапе приемки кода в эксплуатацию уже поможет существенно сократить риски информационной безопасности, сэкономить время разработчиков и финансы заказчиков.