Информационная безопасность (ИБ)
January 1

Поговорим про DevSecOps. Bandit

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

Т.к. эта статья первая, было бы неправильно не рассказать о главной теме наших разговоров. Что такое DevSecOps? При запросе в поисковиках вы получите скучный, но верный ответ «DevSecOps — методология безопасной разработки». Предлагаю перевести это в более читабельный вид. Для этого немного истории. Раньше разработка приложений шла примерно так:

Команда разработки получает заказ на определенную тему. Далее они планируют, как всё это реализовать. В конце концов, через определённый промежуток времени реализовывают, а потом приходит отдел безопасности и говорит, что у них найдена критическая уязвимость (вставить шутку про дыру в безопасности). И цикл разработки уходит на очередной круг.

Та самая шутка про дыру в безопасности

DevSecOps старается внедрить отдел безопасности как можно раньше в процесс разработки.

Есть несколько типов инструментов DevSecOps:

  • SAST (Static Application Security Testing): такие как SonarQube, Checkmarx и Fortify, анализируют исходный код на наличие уязвимостей до его выполнения.
  • DAST (DynamicApplicationSecurityTesting): OWASP ZAP, Burp Suite и подобные инструменты тестируют приложение в работающем состоянии, выявляя уязвимости.
  • Сканеры уязвимостей: например, Nessus, Qualys и OpenVAS, которые помогают находить уязвимости в инфраструктуре и приложениях.

Наш сегодняшний гость — Bandit. Не в прямом смысле этого слова конечно же. Bandit относится к первой группе инструментов. Давайте поближе его рассмотрим.

Этот инструмент специализируется на Python, что весьма актуально. Вот краткое описание из официальной документации:

Bandit — это инструмент, предназначенный для поиска распространенных проблем безопасности в коде Python. Для этого Bandit обрабатывает каждый файл, строит из него AST и запускает соответствующие плагины к узлам AST. Как только Bandit завершит сканирование всех файлов, он создаст отчет.

Что же, давайте посмотрим на него в деле.


Далее будет использоваться открытый репозиторий с GitHub, поэтому стоит сделать небольшое отступление. Данная статье не несет цели в каком-либо виде оскорбить авторов данного репозитория или ущемить их права. Данная статья — исследование, производимое в учебных целях. Спасибо, за понимание.


Итак, начнем. Предварительно я установил Bandit, прописав следующую команду:

pip install bandit

Теперь, распаковав скачанный репозиторий начнем сканирование. Для этого стоит перейти в нужный нам каталок, у меня это «F:\Education\Examples\app-master» и ввести команду

bandit -r .
  • bandit — наименование нашего инструмента
  • -r — флаг, обозначающий сканирование директории
  • . — путь к директории. В данном случае к той, в которой находимся
Первый вывод после запуска

Запустив программу нам выведет информацию о текущей конфигурации, но это не совсем то, что мы ищем.

Подождав, мы видим следующее:

Итоговый отчет

Bandit выдал нам отчет, давайте разберем его.

Мы видим три основных раздела:

  • Code scanned
  • Run metrics
  • Files skipped

В первом разделе нам сообщается об общем количестве сканированных строчек кода.
Во втором разделе мы видим самое главное — общее количество уязвимостей, разделенных на угрозы по уровню серьезности (severity) и по уровню доверия (confidence). Помимо этого все угрозы подразделяются по уровням риска: неопределенный (Undifined), низкий (Low), средний (Medium), высокий (High).

Общее количество посмотрели, хорошо. Но что насчет конкретных угроз? И эту потребность Bandit закрывает. Между первым и вторым скриншотами у нас выводятся конкретные проблемы с номерами строчек кода и файлами, где эта проблема находится:

Вывод конкретной уязвимости

Но есть одна проблема. У нас уязвимостей около 2х тысяч. и на каждую приходится около 10 строк в командной строке. И она просто будет удалять историю. Предлагаю вывести все отчеты в один отдельный файл. Сделаем это командой

bandit -r . -o result.json

Где флаг -o означает путь к файлу, в который будет выведен отчет.

И нам выведет ошибку. Bandit’у нужно сказать, чтобы он переформатировал выходные данные в txt. Финальная команда выглядит так:

bandit -r . -o result.json -f txt

Ну или

bandit -r . -o result.txt -f txt

Давайте посмотрим что получилось.

Отчет в формате текстового файла, открытый в Notepad++

И все работает! У нас есть отчет на 21507 строк. Передаем его программистам и пусть трудятся😁


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

Всем добра!