Рубрики
Без рубрики

CVE Binary Tool: GSOC окончательный отчет

Google лето кода 2020 наконец подходит к концу, а какой увлекательный опыт был! … Помечено GSOC, Python, Security, Opensource.

GSOC 20 (12 Часть серии)

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

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

О проекте

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

Мой проект был на Улучшить функциональность параллелизма и ввода CVE двоичный инструмент . CVE Binary Tool Сканирует несколько распространенных уязвимых компонентов с открытым исходным кодом, таким как openssl, libpng, libxml2 и т. Д. Для того, чтобы знать, если данный каталог или двоичный файл включает в себя общие библиотеки с известными уязвимостями, известными как CVES ( общие уязвимости и экспозиции ) Отказ Это написано на моем любимом языке Python Отказ Это доступно как пакет Python, и вы можете получить его от Пейпина . Вы можете просмотреть исходный код из Репозиторий GitHub И это поддерживается Терри Ода и Джон Андерсен . Они также мои наставники для этого проекта.

Когда я начал работать над проектом, CVE Binary Tool есть Некоторые ошибки под платформой Windows И поскольку я использую окна в первую очередь, я исправил все ошибки Windows в периоде связи сообщества. Я также написал Более быстрый родной раствор Python Чтобы заменить модуль расширения C-Strings и Рефакторованные целые шашки модуль использовать Объектно-ориентированный дизайн Чтобы уменьшить повторение кода в периоде связи сообщества. Поскольку мы удалили поддержку Python2 в последнем выпуске, я также оптимизировал Legacy Code Python2 для Python3.

Первая веха: улучшить тестовый люкс

Я хотел улучшить тесты в CVE Binary Tool, потому что CI Runtime был слишком длинным, и была отсутствует инициализация, которая не пропустила тест, когда мы проводим тесты локально.

У меня есть Удаленные зависимости компилятора из тестового набора в пользу родного решения Python. Я также исправил сложно Ошибка инициализации Pytest Исследуя и понимаю происхождение ошибки. Я также постепенно улучшил тестовый набор каждого модуля, мигрируя его на Pteest из стандартных межкомнатных и использование pteest-xdist оптимизировать время выполнения. (Ex: параллелизация test_json .

Вторая веха: улучшить параллелизм

Ранее CVE двоичный инструмент использовал многопроцессор для загрузки NVD Data-feeds . Поскольку загрузка является задача IO-связанной, я предложил асинсио будет лучший выбор для этого использования.

Я поклонировал почти все модули, связанные с io, чтобы использовать asyncio . Я также разрабатывал много async-ommities для различных модулей. Ниже приведены все поступления в отношении моей работы по улучшению параллелизма инструмента.

Основной усиление производительности было снижение времени загрузки по 50% После перехода на asyncio .

Третий этап: улучшить входную функциональность

CVE Двоичный инструмент имел команду с именем CSV2CVE Чтобы получить CEND из CSV отформатированного ввода. Моя цель состояла в том, чтобы заменить его с помощью универсального Inputendine Модуль, который может поддерживать различные типы ввода. В настоящее время он поддерживает CSV и JSON в качестве действительного входного типа данных. Я также добавил поддержку указания данных собора для CVes, таких как замечания (например, Смягченный, игнорируется и т. Д.), Комментарии, пользовательские серьезности и т. Д.

Поскольку двоичный инструмент CVE имеет несколько аргументов командной строки, я решил добавить поддержку файлов конфигурации, чтобы пользователи не должны постоянно указывать эти аргументы каждый раз Он/он хочет сканировать каталог. Он также может быть полезен в автоматической среде, такими как CI/CD-трубопроводы. Ниже приведен список моих вытяжных запросов, связанных с этим вехой.

Окончательная веха: Улучшить пользовательский опыт

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

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

Вот список всех моих вытяжных запросов, связанных с этой целью.

Будущая работа

Мое оригинальное предложение было огромным и из-за ограниченного времени, я должен расставить приоритеты своих целей в соответствии с требованиями пользователя. Я полностью завершил свою основную цель улучшить входную функциональность и пользовательский опыт, но у меня все еще есть много оптимизаций в отношении аспекта параллелизма проекта. Итак, я собираюсь продолжать свою работу на Улучшение производительности CVE Binary Tool . Я также хочу оптимизировать время выполнения длинных тестов, поскольку он занимает 30 минут, чтобы запустить все тесты, и я полагаю, что мы можем значительно оптимизировать его, кэшируя и/или уменьшить тестовые данные, которые необходимо загрузить для тестирования. Я также хочу создать готовность использовать действие GitHub для инструмента, чтобы разработчик мог легко интегрировать его как часть их конвейера CI/CD.

Что я получил от GSOC

Сумма опыта, который я получил от работы на CVE Binary Tool С Terri Oda и Джон Андерсеном неизмерим. И мои наставники добрые, полезны и чрезвычайно талантливы. Они дали мне много советов и предложений от низкого уровня работы языка в лучшие практики о написании хорошего кода.

Terri Oda помог мне улучшить качество моего PR (Pull-request), предлагая статьи о лучших практиках. Она также помогла мне понять, какие задачи должны быть приоритеты. Пока Джон Андерсен помог мне много вещей о Python в целом, как метаклассы, асинсио, контекстно-менеджер и т. Д.

Перед GSOC я только знал базовые команды Git Но теперь я могу уверенно сказать, что я освоил Гит. У меня также есть гораздо лучшее понимание того, как работает языки программирования, когда и как выбрать сторонние библиотеки, как эффективно ссылаться на документацию, как писать чистый, читаемый и ремонтопригодный код, как эффективно документировать и тестировать код, как эффективно, как Правильно структурируйте потянутые запросы и самое главное, как практично Программирование работ, которые я бы не знал иначе.

OpenSource теперь стал моим хобби, потому что являясь частью сообщества OpenSource, я узнал, что в качестве вкладчика Opensource, помимо предоставления взносов в кодексе, я также добираюсь до сортировки и разрешаю проблем пользователей и проанализировать другие запросы на проезд. Я также могу направлять и мотивировать новых участников. Я не получу этот опыт, если я просто сделаю свои личные проекты.

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

GSOC 20 (12 Часть серии)

Оригинал: “https://dev.to/nirajkamdar/cve-binary-tool-gsoc-final-report-4nlk”