- PVSM.RU - https://www.pvsm.ru -

Positive Technologies на GitHub

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

Positive Technologies  GitHub [1]

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

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

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

Содержание

Организации

Positive Technologies

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

Open DevOps Community

Open DevOps Community

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

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

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

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

Каждый инструмент имеет автоматическую сборку в 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 [26], в котором содержатся общая структура и подробная инструкция по созданию собственного проекта в сообществе. Фактически достаточно его скопировать и сделать свой проект по аналогии. Если у вас есть идеи или инструменты для автоматизации чего-либо, давайте делиться ими с сообществом под MIT-лицензией! Это модно, почётно, престижно :)

Positive Research

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

Positive JS

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

Проекты

PT.PM [32]

PT.PM Logo

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

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

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

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

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

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

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

Грамматики ANTLR [39]

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

PL/SQL [40]

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

T-SQL [41]

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

MySQL [44]

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

PHP [45]

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

Java8 [46]

Эта грамматика была разработана совсем недавно. За основу была взята грамматика предыдущей версии Java 7. Доработка была относительно быстрой, так как отличий между версиями немного.

C# [47]

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

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

ANTLR Logo

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

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

PT.SourceStats [49]

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

AspxParser [50]

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

FP Community Rules [51]

Approof Logo

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

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

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

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

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

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

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

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

Лицензия

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

Заключение

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

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

При конвертации Markdown из формата GitHub в формат Habrahabr использовался HabraMark [60].

Автор: KvanTTT

Источник [61]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/263767

Ссылки в тексте:

[1] Image: https://habrahabr.ru/company/pt/blog/327957/

[2] Positive Technologies: https://github.com/PositiveTechnologies

[3] Open DevOps Community: https://github.com/devopshq

[4] Positive Research: https://github.com/ptresearch

[5] Positive JS: https://github.com/positive-js

[6] Организации: #organizacii

[7] Positive Technologies: #positive-technologies

[8] Open DevOps Community: #open-devops-community

[9] Positive Research: #positive-research

[10] Positive JS: #positive-js

[11] Проекты: #proekty

[12] PT.PM: #ptpm

[13] Грамматики ANTLR: #grammatiki-antlr

[14] PT.SourceStats: #ptsourcestats

[15] AspxParser: #aspxparser

[16] FP Community Rules: #fp-community-rules

[17] Учебно-демонстрационные проекты: #uchebno-demonstracionnye-proekty

[18] Заключение: #zaklyuchenie

[19] crosspm: https://github.com/devopshq/crosspm

[20] vspheretools: https://github.com/devopshq/vspheretools

[21] YouTrack Python 3 Client Library: https://github.com/devopshq/youtrack

[22] TFS API Python client: https://github.com/devopshq/tfs

[23] A Python client for Artifactory: https://github.com/devopshq/artifactory

[24] FuzzyClassificator: https://github.com/devopshq/FuzzyClassificator

[25] нейронечёткий классификатор: http://math-n-algo.blogspot.ru/2014/08/FuzzyClassificator.html

[26] ExampleProject: https://github.com/devopshq/ExampleProject

[27] AttackDetection: https://github.com/ptresearch/AttackDetection

[28] Snort: https://www.snort.org/

[29] Suricata IDS: https://suricata-ids.org/

[30] oinkmaster: http://oinkmaster.sourceforge.net/

[31] Twitter: https://twitter.com/attackdetection

[32] PT.PM: https://github.com/PositiveTechnologies/PT.PM

[33] Approof: https://approof.ptsecurity.ru/

[34] PT Application Inspector: https://www.ptsecurity.com/ru-ru/products/ai/

[35] документация: https://github.com/PositiveTechnologies/PT.PM/wiki

[36] NuGet: https://www.nuget.org/packages/PT.PM/

[37] артефактов: https://ci.appveyor.com/project/KvanTTT/pt-pm/build/artifacts

[38] Max Patrol SIEM: https://www.ptsecurity.com/ru-ru/products/mpsiem/

[39] Грамматики ANTLR: https://github.com/antlr/grammars-v4

[40] PL/SQL: https://github.com/antlr/grammars-v4/tree/master/plsql

[41] T-SQL: https://github.com/antlr/grammars-v4/tree/master/tsql

[42] PT Application Firewall: https://www.ptsecurity.com/ww-en/products/af/

[43] «Как разработать DBFW с нуля»: https://youtu.be/TzvB21GZgEY

[44] MySQL: https://github.com/antlr/grammars-v4/tree/master/mysql

[45] PHP: https://github.com/antlr/grammars-v4/tree/master/php

[46] Java8: https://github.com/antlr/grammars-v4/tree/master/java8-pt

[47] C#: https://github.com/antlr/grammars-v4/tree/master/csharp

[48] «Теория и практика парсинга исходников с помощью ANTLR и Roslyn»: https://habrahabr.ru/company/pt/blog/210772/

[49] PT.SourceStats: https://github.com/PositiveTechnologies/PT.SourceStats

[50] AspxParser: https://github.com/PositiveTechnologies/AspxParser

[51] FP Community Rules: https://github.com/PositiveTechnologies/FP-community-rules

[52] YARA: http://yara.readthedocs.io/en/v3.4.0/writingrules.html

[53] доклад: https://youtu.be/LSEAQfVCuWY

[54] «Разработка правил для Approof»: https://blog.llkl.org/rules-for-positive-technologies-Approof/

[55] доклад: https://www.youtube.com/watch?v=fN6I5E1UEtI

[56] Mantaray: https://github.com/PositiveTechnologies/mantaray

[57] Schockfish: https://github.com/PositiveTechnologies/shockfish

[58] DOMSanitizer: https://github.com/PositiveTechnologies/DOMSanitizer/

[59] DOMParanoid: https://github.com/PositiveTechnologies/DOMParanoid/

[60] HabraMark: https://github.com/KvanTTT/HabraMark

[61] Источник: https://habrahabr.ru/post/327957/