Positive Technologies corporate blog
Information Security
Open source
Programming
GitHub
September 2017 13

Positive Technologies на GitHub

Поздравляю программистов с их профессиональным днем! В связи с этим праздником наша компания Positive Technologies решила рассказать о своей деятельности, напрямую связанной с разработкой, а именно с открытым исходным кодом и GitHub.


Positive Technologies  GitHub


В последнее время все больше и больше компаний, таких как Google, Microsoft, Facebook, JetBrains, выкладывают в открытый доступ исходный код как небольших, так и крупных проектов. Positive Technologies славится не только высококлассными специалистами по информационной безопасности, но и большим количеством профессиональных разработчиков. Это позволяет ей также вносить свой посильный вклад в развитие движения Open Source.


У PT есть следующие GitHub-организации, поддерживающие открытые проекты компании:



Мы подробно описали первую организацию с ее проектами и кратко — все остальные.


Содержание



Организации


Positive Technologies


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


Open DevOps Community


Open DevOps Community

Цель сообщества — сформировать открытые готовые решения для управления полным циклом процесса разработки, тестирования и смежных процессов, а также доставки, развёртывания и лицензирования продуктов.


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


Активные проекты:


  1. crosspm — универсальный пакетный менеджер, который позволяет скачивать пакеты для сборок многокомпонентных продуктов, используя правила, заданные в манифесте.
  2. vspheretools — инструмент, который позволяет управлять виртуальными машинами на vSphere прямо из консоли. Также есть возможность подключать его как API-библиотеку в своих Python-скриптах.
  3. YouTrack Python 3 Client Library — Python-клиент для работы с API YouTrack.
  4. TFS API Python client — Python-клиент для работы с API Team Foundation Server от Microsoft.
  5. A Python client for Artifactory — Python-клиент для работы с API хранилища бинарных данных Artifactory.
  6. FuzzyClassificator — универсальный нейронечёткий классификатор произвольных объектов, свойства которых могут быть оценены на нечёткой измерительной шкале.

Каждый инструмент имеет автоматическую сборку в Travis CI с выкладкой в PyPI-репозиторий, где их можно найти и установить через стандартный pip install.


Готовятся к публикации еще несколько инструментов:


  1. CrossBuilder — система организации кросс-платформенных сборок build as a code, а-ля Travis CI, но независящая от используемой CI-системы (TeamCity, Jenkins, GitLab-CI и т. п.).
  2. ChangelogBuilder — генератор релиз-нотов с описанием изменений по продукту, который получает и агрегирует данные из различных трекеров (TFS, YouTrack, GitLab и т. п.).
  3. polyglot.sketchplugin — плагин для системы Sketch, которым пользуются дизайнеры для упрощения работы с мультиязычной вёрсткой.

В качестве контрибьюторов любого инструмента приглашаются все желающие. У нас есть типовой проект ExampleProject, в котором содержатся общая структура и подробная инструкция по созданию собственного проекта в сообществе. Фактически достаточно его скопировать и сделать свой проект по аналогии. Если у вас есть идеи или инструменты для автоматизации чего-либо, давайте делиться ими с сообществом под MIT-лицензией! Это модно, почётно, престижно :)


Positive Research


Репозиторий, в котором публикуются некоторые исследовательские наработки, презентации, утилиты (например, для определения уязвимостей), сигнатуры и методы определения атак.


  • Pentest-Detections — утилита, позволяющая быстро сканировать сеть (поддерживаеются IPv4 и IPv6) и определять уязвимости, которые эксплуатируют WannaCry, NotPetya.
  • unME11 — инструменты, позволяющие декодировать последние версии Intel ME 11.x.
  • Bad_Tuesday_Cryptor_SIEM — пакет MaxPatrol SIEM для борьбы с NotPetya.
  • me-disablement — методы отключения Intel ME. В репозитории старый метод. Про новый метод с High Assurance Platform (HAP) можно почитать на хабре в статье Выключаем Intel ME 11, используя недокументированный режим.

AttackDetection


В этот репозиторий команда обнаружения атак выкладывает правила для определения эксплуатации уязвимостей с помощью систем обнаружения вторжений Snort и Suricata IDS. Основная цель проекта — создание правил для уязвимостей, имеющих широкое распространение и высокий уровень опасности (high impact). Репозиторий содержит файлы для интеграции с oinkmaster — скриптом для обновления и развертывания правил в указанных IDS. А для теста самих правил прилагаются pcap-файлы с трафиком. Стоит отметить, что репозиторий уже набрал свыше 100 добавлений в избранное, а за год добавилось около 40 новых уязвимостей, среди которых BadTunnel, ETERNALBLUE, ImageTragick, EPICBANANA, SambaCry. Все анонсы о новых угрозах публикуются в Twitter.


Positive JS


Сообщество по разработке инструментария (преимущественно веб), используемого в продуктах PT.


LibProtection


Организация, объединяющая участников сообщества Positive Development User Group,
работающих над реализациями библиотеки LibProtection под различные языки и платформы.
Эта библиотека предоставляет разработчикам безопасные средства работы со строками,
и берёт на себя всю рутину по санитизации входных данных и автоматизированной защите
приложений от атак инъекций. Более подробно принципы работы и функциональные
возможности LibProtection были описаны в докладе Владимира Кочеткова "Побеждая инъекции".


Проекты


PT.PM


PT.PM Logo

PT Pattern Matching Engine — универсальный сигнатурный анализатор кода, который принимает на вход пользовательские шаблоны, описанные на специальном языке. Данный движок испольуется в бесплатном инструменте для проверки веб-приложений на наличие уязвимых компонентов Approof, а также в анализаторе исходного кода PT Application Inspector.



Процесс анализа состоит из нескольких этапов:


  1. Парсинг исходного кода в дерево разбора.
  2. Преобразование дерева в унифицированный формат.
  3. Сопоставление дерева с пользовательскими шаблонами.

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


В PT.PM внедрена непрерывная интеграция, поддерживаются сборка и тестирование модулей проекта как под Windows, так и под Linux (Mono). Процесс разработки организуется с помощью размеченных метками задач (Issues) и пул-реквестов. Наряду с разработкой ведется документация проекта, а результаты всех значимых сборок публикуются в формате как пакетов NuGet, так и «сырых» артефактов. Организацию PT.PM, вероятно, можно считать образцовой, к которой хотелось бы стремиться во всех остальных проектах.


Для первого этапа, а именно парсинга исходного кода, используются парсеры на базе ANTLR. Этот инструмент генерирует их для различных языков (рантаймов) на основе формальных грамматик, для которых существует репозиторий. Наша компания его активно развивает. В настоящее время поддерживается генерация под Java, C#, Python 2 и 3, JavaScript, C++, Go и Swift, причём поддержка последних трех была добавлена совсем недавно.


Стоит отметить, что ANTLR используется не только в проектах PT направления Application Security, но и в Max Patrol SIEM: там он используется для обработки собственного языка DSL (Domain Specific Language), который применяется для описания динамических групп активов. Обмен опытом в этой сфере позволил не тратить время на задачи, которые уже были решены ранее.


Грамматики ANTLR


При участии Positive Technologies были разработаны и улучшены грамматики для языков PL/SQL, T-SQL, MySQL, PHP, Java 8 и C#.


PL/SQL


Грамматики SQL имеют обширный синтаксис с большим количеством ключевых слов. К счастью, грамматика PL/SQL существовала под ANTLR 3 и портировать её под ANTLR 4 было не очень сложно.


T-SQL


Для T-SQL не было найдено достойных парсеров, не говоря уже об открытых, и мы долго и кропотливо восстанавливали грамматику из документации MSDN. Однако результат получился достойным: она уже охватывает много распространённых синтаксических конструкций, опрятно выглядит, независима от рантайма и покрыта тестами (примерами SQL-запросов из той же MSDN). С 2015 в нее внесли свой вклад более 15 сторонних пользователей. Более того, эта грамматика сейчас уже используется и в DBFW, прототипе межсетевого экрана уровня систем управления базами данных, подпроекте PT Application Firewall. Денис Колегов с Арсением Реутовым рассказывали о нем на PHDays VII: «Как разработать DBFW с нуля».


MySQL


Грамматика, разработанная вышеупомянутой командой, в первую очередь Иваном Худяшовым и Денисом Колеговым, на основе T-SQL. Она также используется в DBFW.


PHP


Данная грамматика транслировалась из грамматики Bison в ANTLR. Она интересна тем, что поддерживает парсинг сразу PHP, JavaScript и HTML. Точнее, участки кода JavaScript и HTML парсятся в текст, который позже обрабатывается парсерами конкретно под эти языки.


Java


Грамматика с поддержкой Java 8 была разработана совсем недавно. За основу была взята грамматика предыдущей седьмой версии. Однако в новой значительно расширены и улучшены тестовые примеры с различным синтаксисом (AllInOne7.java, AllInOne8.java), а также добавлены результаты тестов производительности для популярных проектов на Java (jdk8, Spring Framework, Elasticsearch и т.д.).


JavaScript


Создана на основе старой грамматики ECMAScript без точного соответствия стандарту. При разработке грамматик мы прежде всего руководствуемся практическим применением и понятностью, а не формальным соответствием. Еще одним существенным отличием является почти полная поддержка ECMAScript 6, а также устаревших конструкций (комментарии Html, секции CDATA).


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


getter
    : Identifier{p("get")}? propertyName
    ;

Данная грамматика интересна тем, что эти вставки кода являются универсальными по крайней мере для рантаймов C# и Java, благодаря опции
superClass.


Т.е. в C# коде функция p("get") описывается в классе-родителе JavaScriptBaseParser.cs:


protected bool p(string str) =>  _input.Lt(-1).Text.Equals(str);

В Java же эта функция выглядит следующим образом (JavaScriptBaseLexer.java):


protected boolean p(String str) {
    return _input.LT(-1).getText().equals(str);
}

C#


Это по большей части экспериментальная грамматика, созданная для сравнения скоростей парсеров на основе ANTLR и парсера Roslyn.


Разработка и перспективы


ANTLR Logo

О деталях разработки грамматик можно почитать в нашей прошлогодней статье «Теория и практика парсинга исходников с помощью ANTLR и Roslyn».


Как видно по истории изменений и большому количеству принятых Pull Request (tsql, plsql, mysql), эти грамматики дорабатываются не только усилиями Positive Technologies, но и большим количеством сторонних разработчиков. За время этой кооперации репозиторий вырос не только количественно, но и качественно.


PT.SourceStats


Позволяет собирать статистику для проектов на различных языках программирования и используется в бесплатном продукте Approof.


AspxParser


В рамках данного проекта разрабатывается парсер страниц ASPX, который используется не только в открытом движке PT.PM, но и во внутреннем анализаторе .NET-приложений (AI.Net), основанном на абстрактной интерпретации кода.


FP Community Rules


Approof Logo

В репозитории идет разработка наборов правил в формате YARA, которые используются в модуле сигнатурного анализа проектов в Approof. В августе прошлого года в рамках PDUG (юзер-группы по безопасной разработке) Алексей Гончаров делал доклад о модуле FingerPrint, используемом в PT AI и Approof.


Движок FingerPrint запускается на наборе исходных кодов сайта (бэкенда, фронтенда) и в соответствии с описанными правилами YARA ищет известные версии сторонних компонентов (например, библиотеку bla-bla версии 3). Правила составляются так, что содержат сигнатуры уязвимых версии библиотек с текстовым описанием проблемы.


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


Подробнее об этом можно почитать в статье Дениса Ефремова (ИСП РАН) «Разработка правил для Approof». Также см. его доклад «Автоматизация построения правил для Approof» на PDUG секции PHDays.


Учебно-демонстрационные проекты


На PHDays VII в рамках PDUG прошел мастер-класс «Appsec Outback». Для него были разработаны учебно-демонстрационные версии статического анализатора кода Mantaray и межсетевого экрана Schockfish. Данные проекты имеют все основные механизмы, которые используются в реальных средствах защиты. Но, в отличие от последних, их основная цель продемонстрировать алгоритмы и методы защиты, помочь понять процесс анализа и защиты приложений, а также проиллюстрировать фундаментальные теоретические возможности и ограничения технологий.


Также в репозитории имеются примеры реализации механизмов защиты:


  • DOMSanitizer — модуль для обнаружения XSS-атак на стороне веб-браузера.
  • DOMParanoid — модуль (security linter) для проверки безопасности HTML.

Лицензия


В наших проектах используются как разрешительные лицензии (MIT, Apache), так и собственная, которая подразумевает бесплатное использование исключительно в некоммерческих целях.


Заключение


Процесс переезда на GitHub оказался полезным и дал нам опыт в различных областях — в настройке DevOps под Windows и Linux, написании документации, в разработке.


Positive Technologies развивает Open Source проекты и планирует расширять эту активность.


+33
9.5k 52
Comments 3
Top of the day