Обзор Solar inCode 2.6 — статический анализ исходного кода приложений на уязвимости

Обзор сканера кода Solar inCode 2.6


Обзор сканера кода Solar inCode 2.6

Компания Solar Security сообщила о выходе сканера кода Solar inCode 2.6, который позиционируется как единственное решение, способное без доступа к исходному коду приложений анализировать их на уязвимости. Обзор подготовлен по итогам тестирования новой версии продукта, в том числе уровня реализации его ключевой функциональности — возможности искать и выявлять уязвимости в исполняемых файлах приложений.

Сертификат AM Test Lab

Номер сертификата: 199

Дата выдачи: 26.10.2017

Срок действия: 26.10.2022

Реестр сертифицированных продуктов »

 

  1. Введение
  2. Технологии и принцип работы
  3. Анализ исполняемых файлов программ
  4. Анализ байткода Java
  5. Интеграция со средствами защиты информации
  6. Выводы

 

Введение

Проверка защищенности программного обеспечения сегодня является неотъемлемым этапом процесса его разработки и эксплуатации. Это создает на рынке информационной безопасности нишу для средств автоматического анализа программного кода, к которым относится и решение Solar inCode, разработанное компанией Solar Security.

Solar inCode — это инструмент анализа программного кода, который позволяет автоматически обнаруживать ошибки, уязвимости и закладки. Проверка кода осуществляется с помощью статического, динамического и интерактивного методов анализа. Solar inCode 2.6 поддерживает следующие языки программирования: Scala, PHP, Java for Android, PHP, PL/SQL, JavaScript, Python 2, Python 3, Ruby, Objective-C, Swift, С#, C/C++, T-SQL, Delphi, ABAP, Visual Basic 6.0, HTML5, Solidity.

По итогам сканирования Solar inCode формирует отчет о найденных уязвимостях с рекомендациями по их устранению и настройке средств защиты. Кроме того, инструмент обладает гибким интерфейсом командной строки и готовыми коннекторами для встраивания в технологический процесс разработки и сопровождения программного обеспечения.

Ключевыми нововведениями недавно вышедшей версии Solar inCode 2.6 стала поддержка языков HTML5 и Solidity, а также возможность загружать с локального компьютера проект в виде архива с расширениями .7z, .ear, .aar, .rar, .tar.bz2, .tar.gz, .tar, .cpio. Кроме того, в Solar Security подчеркивают важность направления по легкому встраиванию Solar inCode в процесс безопасной разработки приложений (SDLC), поэтому в дополнение к интеграции со средствами JIRA, Eclipse, maven,gradle, sbt и Visual Studio в версии 2.6 реализован плагин к серверу непрерывной интеграции Jenkins.

Однако главным отличием Solar inCode от конкурирующих решений является возможность статического анализа исполняемых файлов. Помимо исходного кода, инструмент позволяет анализировать исполняемые файлы приложений, скомпилированных в байткод Java, в том числе мобильных Android-приложений (.apk-, .jar-, .war-, .class-файлы), а также исполняемые файлы программ C/C++ (.exe- и .dll-файлы, архитектуры x86 и x64), iOS-приложения (.ipa-файлы — armv8/aarch64, Objective-C и Swift). В разработке находится модуль анализа исполняемых файлов приложений для macOS.

Анализ двоичного программного кода открывает возможность проводить глубокое исследование безопасности приложений в случаях, когда нет возможности получить исходный код. Например, Solar inCode позволяет проводить анализ мобильных приложений по ссылкам на Google Play или AppStore. При этом результаты такого анализа отображаются на декомпилированном исходном коде.

 

Рисунок 1. Интерфейс Solar inCode. Опция загрузки приложения через Google Play или App Store

Интерфейс Solar inCode. Опция загрузки приложения через Google Play или App Store

 

Рисунок 2. Интерфейс Solar inCode. Опция загрузки приложения c локального компьютера

Интерфейс Solar inCode. Опция загрузки приложения c локального компьютера

 

Рисунок 3. Интерфейс Solar inCode. Опция загрузки приложения из репозитория

Интерфейс Solar inCode. Опция загрузки приложения из репозитория

 

Технологии и принцип работы

По заявлениям вендора, в основу продукта были положены многолетние научные и технические труды по трем направлениям: обратная инженерия (декомпиляция, деобфускация), статический анализ (и теория построения компиляторов как обобщение) и ручной аудит программного кода по требованиям информационной безопасности (в том числе мобильных и web-приложений). Команду разработки Solar inCode составляют кандидаты физико-математических наук, диссертации которых посвящены темам компиляции и декомпиляции, обфускации и деобфускации, статического анализа программного кода.

Solar inCode основан на технологиях статического анализа программ. Статический анализ подразумевает три этапа работы с кодом.

Первый — построение промежуточного представления, то есть модели программы. Такое представление позволяет уйти от текстовой формы кода и тем самым осуществлять более глубокий анализ конструкций исходной программы. При анализе исходного кода происходит частичная компиляция (внутренним представлением может являться абстрактное синтаксическое дерево или, например, трехадресный код). При анализе двоичного программного кода происходит дизассемблирование и обратная трансляция, в процессе которой может потребоваться деобфускация программного кода.

Второй этап — запуск ядра статического анализа, в результате которого промежуточное представление обогащается дополнительной информацией о данных и коде. Например, на этом этапе используются алгоритмы анализа потока управления и потока данных программы, такие как поиск синонимов, вывод констант и типов переменных, методы taint-анализа и статическая интерпретация программного кода. Эти алгоритмы позволяют обнаруживать сложные уязвимости, связанные с внедрением данных со стороны злоумышленника, такие как SQL-инъекции и многие другие.

Наконец, третий этап — поиск программных уязвимостей с помощью базы правил поиска уязвимостей. Правила формируют условия наличия уязвимостей в терминах поточного представления и той информации, которая была дополнена в рамках второго этапа.

В процессе аудита защищенности программной системы зачастую возникает необходимость в оценке информационной безопасности программных компонентов, представленных в виде двоичного программного кода. При этом иногда исходный код таких компонентов может быть недоступен. Например, если речь идет об анализе сторонних программных библиотек или программных компонентов, исходный код которых был утрачен.

Предположение о том, что уязвимости закрытых программных компонентов невозможно подвергнуть практической эксплуатации, в корне неверно. В информационных системах, полагающихся на антипаттерн информационной безопасности Security through obscurity, чаще всего и обнаруживаются критические уязвимости нулевого дня. При этом, как правило, такие уязвимости нельзя быстро исправить вследствие закрытости программного кода. Если злоумышленнику удалось осуществить вторжение незаметно для наблюдателей, он может скрыто эксплуатировать программную систему годами, поскольку возможности проанализировать исходный код программного компонента и найти уязвимость не существует.

 

Анализ исполняемых файлов программ

В Solar inCode реализован набор методов для статического анализа исполняемых файлов программ. Приложение осуществляет декомпиляцию двоичного программного кода для всех актуальных микропроцессорных архитектур в модель исходной программы.

Заметно, что разработчик уделяет особое внимание удобству пользовательского интерфейса Solar inCode. С точки зрения пользователя анализ исполняемых файлов программ выглядит очень просто: достаточно загрузить исполняемый файл в любом из современных форматов записи двоичного кода, таком как .exe, .dll, .ipa, и получить результаты анализа. Для всех актуальных компилируемых в двоичный код языков программирования высокого уровня, таких как C/C++, Objective-C и Swift, в статическом анализаторе Solar inCode реализована дополнительная обработка структур данных, идиом и вызовов языка, что позволяет значительно улучшить результаты анализа программного компонента.

Для анализа .ipa файлов пользователю достаточно передать ссылку на приложение в AppStore. В процессе подготовки также находится модуль статического анализа masOS-приложений. Для анализа программы, исполняемой на платформе macOS, пользователю необходимо передать пакет приложения через интерфейс статического анализатора или просто ссылку на приложение в AppStore.

Используемые методы обратной трансляции позволяют построить представление анализируемой программы с очень высокой точностью: восстановлению подвергаются подпрограммы исходной программы, глобальные и локальные переменный исходной программы и их типы. Важной особенностью подхода является возможность восстановления информации о программе, исходя из информации позднего связывания, например, таблиц виртуальный функций, структур RTTI (Run-Time Type Information) и вспомогательных структур обработки исключений для программ, записанных на языке программирования C++, или информации о классах и методах для программ, записанных на языке программирования Objective-C.

Наличие в промежуточном представлении исходной программы, восстанавливаемой в процессе обратной трансляции, и высокоуровневой информации о семантике исходной программы, позволяет применить всю мощь методов статического анализа к исполняемым файлам программ.

Внутреннее представление программ, полученных из языков высокого уровня и в результате обратной трансляции, настолько семантически схожи, что в процессе статического анализа они неразличимы. Таким образом, исходная информационная система может быть проанализирована как покомпонентно, так и целиком, что создает неограниченные возможности для оценки информационной безопасности программной системы.

Для представления результатов статического анализа двоичного программного кода Solar inCode предлагает методологию интеллектуальной декомпиляции, в контексте которой представление исходной программы записывается в терминах языка высокого уровня, семантически схожего с языками программирования семейства C. Таким образом, результаты статического анализа двоичных образов программных компонентов, предоставляемые системой Solar inCode, не требуют высокой квалификации пользователя и потому могут быть проанализированы как разработчиками информационной системы и экспертами по информационной безопасности, так и их руководителями.

Например, в двоичном образе программы, исходный код которой записан в фрагменте программного кода ниже, статический анализатор Solar inCode обнаруживает две программные уязвимости: потенциальное переполнение буфера при осуществлении вызова функции strcpy и небезопасное использование форматной строки при осуществлении вызова функции printf.

 

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

    char buf[64];

    if (argc != 2) {

         return 0;

    } else {

         strcpy(buf, argv[1]);

         printf(buf);

         return 0;

    }

}

Восстановленное с помощью Solar inCode представление исходной программы, записанное в терминах псевдокода, и результаты статического анализа рассматриваются ниже:

 

Рисунок 4. Пример представления исходной программы, восстановленного с помощью Solar inCode и записанного в терминах псевдокода

Пример представления исходной программы, восстановленного с помощью Solar inCode и записанного в терминах псевдокода

 

Рисунок 5. Пример представления исходной программы, восстановленного с помощью Solar inCode и записанного в терминах псевдокода

Пример представления исходной программы, восстановленного с помощью Solar inCode и записанного в терминах псевдокода

 

Анализ байткода Java

При анализе байткода Java (Android-приложения, а также Java/Scala-приложения) в качестве промежуточного представления выступает код, близкий к самому байткоду. При получении байткода для мобильных приложений применяются методы обратной трансляции apk-файлов и деобфускации, так как в таких приложениях чаще всего используются методы запутывания кода для усложнения процесса декомпиляции. При этом для отображения результатов поиска уязвимостей происходит и полная декомпиляция байткода с восстановлением отображения анализируемого байткода на полученный исходный код с точностью до номеров строк.

В Solar inCode реализована возможность частичного анализа байткода — в переданном на анализ коде может содержаться как исходный код, так и байткод. При таком анализе будет проанализирован весь байткод приложения, при этом тот байткод, для которого был передан исходный код, в результатах будет отображен на него, а для остального байткода будет проведена декомпиляция.

Ниже приведем два примера критических уязвимостей, которые были обнаружены методом анализа байткода в Android-приложении и в Java web-приложении.

Первая уязвимость — отсутствие проверки цепочки сертификатов и хоста сертификата при SSL-соединении в мобильном приложении. Анализ данного приложения проводился по ссылке на Google Play. Такая уязвимость позволяет злоумышленнику осуществить атаку типа «человек посередине» и в результате читать и видоизменять все данные, которые отправляются от приложения серверу и наоборот, в том числе логины и пароли, данные кредитных карт и так далее. В коде унаследован класс X509TrustManager, однако его методы являются пустыми, то есть проверка цепочки сертификатов не производится. Также унаследован класс HostnameVerifier, однако метод verify всегда возвращает значение true, то есть не производит проверку хоста сертификата. Ниже приведены участки кода с данной уязвимостью, которые восстановил и отобразил в интерфейсе Solar inCode.

 

Рисунок 6. Пример уязвимости в исходном коде программы, восстановленном с помощью Solar inCode

Пример уязвимости в исходномкоде программы, восстановленномс помощью Solar inCode

 

Рисунок 7. Пример уязвимости в исходном коде программы, восстановленном с помощью Solar inCode

Пример уязвимости в исходномкоде программы, восстановленномс помощью Solar inCode

 

Вторая уязвимость — недостаточная валидация входных данных, в результате которой злоумышленник может осуществить атаку типа «хранимый межсайтовый скриптинг». Недоверенные данные без проверки попадают в функцию печати данных в web-страницу пользователя. Это означает, что злоумышленник может поместить на страницу пользователя JavaScript-код, который будет действовать от лица web-сервера. Таким образом могут быть раскрыты любые конфиденциальные данные пользователя. Solar inCode показывает декомпилированный код и трассу распространения недоверенных данных по коду между функциями.

 

Рисунок 8. Пример уязвимости в исходном коде программы, восстановленном с помощью Solar inCode

Пример уязвимости в исходномкоде программы, восстановленномс помощью Solar inCode

 

Интеграция со средствами защиты информации

Помимо рекомендаций по устранению уязвимостей Solar inCode предоставляет пользователю инструкции по настройке средств защиты (Imperva, F5 и ModSecurity) в качестве временной меры, которая позволяет не допустить эксплуатацию найденных уязвимостей до их устранения.

 

Выводы

Важнейшим достоинством Solar inCode является возможность анализа исполняемых файлов, при этом такой анализ можно запустить в несколько кликов: скопировать ссылку на приложение в магазине или взять рабочий файл с боевого сервера. Поскольку результаты такого анализа отображаются на восстановленный исходный код, их разбор не составляет труда.

Также к сильным сторонам продукта можно отнести простоту интерфейса, понятные описания уязвимостей на русском и английском языках, широкую функциональность по аналитике результатов сканирований и модульную архитектуру решения.

К главным достоинствам продукта относятся:

  • Возможность анализа исполняемых файлов — по ссылкам на магазины мобильных приложений и рабочим файлам.
  • Простота и удобство интерфейса.
  • Наличие рекомендаций по настройке средств защиты информации в качестве временной меры по закрытию уязвимостей.
  • Гибкие возможности по интеграции в процесс безопасной разработки приложений (SDLC), готовая коробочная интеграция со средствами JIRA, Git, Jenkins, Eclipse, maven,gradle, sbt, Visual Studio.
  • Широкие возможности интерфейса по аналитике результатов сканирований: визуализация динамики безопасности кода внутри и между проектами, качественное сравнение сканирований.
  • Возможность классификации уязвимостей по OWASP Top 10 2013, OWASP Mobile Top 10 2014, OWASP Mobile Top 10 2016, PCI DSS, HIPAA, по критичности.
  • Модульная архитектура решения, которая позволяет пользоваться графическим интерфейсом с помощью web-браузера, при этом основные вычислительные ресурсы системы можно динамически подключать с любой машины.
  • Кроссплатформенность большинства модулей решения.
  • Возможность гибкой настройки системы, в том числе создание собственных правил поиска уязвимостей.
  • Гибкая настройка ролей пользователей и групп пользователей.

Реестр сертифицированных продуктов »

Записаться на демонстрацию

Нажимая "Запросить", вы соглашаетесь с Политикой конфиденциальности и обработки персональных данных нашей компании

Запросить пробную версию

Нажимая "Получить", вы соглашаетесь с Политикой конфиденциальности и обработки персональных данных нашей компании

Запросить цены

Нажимая "Отправить", вы соглашаетесь с Политикой конфиденциальности и обработки персональных данных нашей компании

Задать вопрос

Нажимая "Задать", вы соглашаетесь с Политикой конфиденциальности и обработки персональных данных нашей компании

Выбор редакции: 
AM LiveПодписывайтесь на канал "AM Live" в Telegram, чтобы первыми узнавать о главных событиях и предстоящих мероприятиях по информационной безопасности.
Лаборатория AM Test Lab готова провести независимую экспертизу и добровольную сертификацию любого продукта или сервиса по информационной безопасности и подготовить его профессиональный обзор. Для получения дополнительной информации необходимо оформить запрос.