Поговорим про 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 выдал нам отчет, давайте разберем его.
Мы видим три основных раздела:
В первом разделе нам сообщается об общем количестве сканированных строчек кода.
Во втором разделе мы видим самое главное — общее количество уязвимостей, разделенных на угрозы по уровню серьезности (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
Давайте посмотрим что получилось.
И все работает! У нас есть отчет на 21507 строк. Передаем его программистам и пусть трудятся😁
В целом, Bandit — прекрасный, бесплатный инструмент и определенно заслуживает внимания.
В следующих статьях рассмотрим и другие инструменты DevSecOps.
Всем добра!