🐍 Как использовать Bandit для проверки кода Python на наличие уязвимостей |

🐍 Как использовать Bandit для проверки кода Python на наличие уязвимостей

Мануал

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

Однако написание безопасного кода может быть сложной задачей, особенно если вы не знакомы с последними передовыми методами обеспечения безопасности.

Именно в этом случае сканеры уязвимостей в коде Python, такие как Bandit, могут оказаться невероятно полезными.

Bandit – это сканер безопасности для Python-кода, который можно использовать для обнаружения распространенных проблем безопасности.

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

В этом руководстве мы рассмотрим, как использовать Bandit для сканирования вашего Python-кода на предмет проблем с безопасностью, начиная с установки и запуска инструмента.

Установка Bandit

Чтобы установить Bandit, вы можете воспользоваться pip, менеджером пакетов Python.

Просто выполните следующую команду в терминале:

pip install bandit

После установки Bandit вы можете начать использовать его для сканирования вашего Python-кода.

Запуск Bandit

Чтобы запустить Bandit на вашем Python-коде, перейдите в каталог, содержащий ваш Python-код, и просто выполните следующую команду:

используя нотацию dot(.), он просканирует все файлы python, которые находятся в этом каталоге
bandit -r .
если мы хотим просканировать какой-то конкретный файл, мы можем ввести путь к этому python-файлу
bandit -r /path/to/your/code

Инструмент рекурсивно просканирует все файлы и каталоги по указанному пути на предмет проблем с безопасностью.

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

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

Если вы хотите включить в отчет проблемы с низким уровнем серьезности, вы можете использовать опцию -ll:

bandit -r . -ll

Это позволит включить в отчет проблемы низкой степени серьезности.

Вы также можете указать дополнительные параметры для настройки поведения Bandit.

Например, можно указать пороговое значение уровня серьезности, чтобы отфильтровать проблемы с низким уровнем серьезности:

bandit -r /path/to/your/code -s MEDIUM

Эта команда будет сообщать только о проблемах с уровнем серьезности MEDIUM или выше.

Вы также можете исключить определенные файлы или каталоги из проверки, используя параметр -x, за которым следует путь для исключения:

bandit -r . -x some_directory/

Это исключит каталог some_directory из сканирования.

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

Пример сканирования кода на Python, в котором нет уязвимостей:

bandit -r yum_install.py
[main]  INFO    profile include tests: None
[main]  INFO    profile exclude tests: None
[main]  INFO    cli include tests: None
[main]  INFO    cli exclude tests: None
[main]  INFO    running on Python 3.9.6
[node_visitor]  WARNING Unable to find qualified name for module: yum_install.py
Run started:2023-03-07 11:04:17.198120
Test results:
No issues identified.
Code scanned:
Total lines of code: 16
Total lines skipped (#nosec): 0
Run metrics:
Total issues (by severity):
Undefined: 0
Low: 0
Medium: 0
High: 0
Total issues (by confidence):
Undefined: 0
Low: 0
Medium: 0
High: 0
Files skipped (0):

В приведенном ниже примере мы просто запустили команду bandit, чтобы увидеть низкоуровневые уязвимости:

bandit -r linuxcmd.py  -ll
[main]  INFO    profile include tests: None
[main]  INFO    profile exclude tests: None
[main]  INFO    cli include tests: None
[main]  INFO    cli exclude tests: None
[main]  INFO    running on Python 3.9.6
Run started:2023-03-07 11:05:51.854262
Test results:
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High   Confidence: High
CWE: CWE-78 (https://cwe.mitre.org/data/definitions/78.html)
Location: linuxcmd.py:38:17
More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b605_start_process_with_a_shell.html
37
38                              os.system("mkdir "+fold_name)
39
--------------------------------------------------
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High   Confidence: High
CWE: CWE-78 (https://cwe.mitre.org/data/definitions/78.html)
Location: linuxcmd.py:44:2
More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b605_start_process_with_a_shell.html
43
44                      os.system("touch "+file_name)
45
--------------------------------------------------
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High   Confidence: High
CWE: CWE-78 (https://cwe.mitre.org/data/definitions/78.html)
Location: linuxcmd.py:57:2
More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b605_start_process_with_a_shell.html
56                      user_name = input("Enter name you want to add in the OS:")
57                      os.system("useradd "+user_name)
58
--------------------------------------------------
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High   Confidence: High
CWE: CWE-78 (https://cwe.mitre.org/data/definitions/78.html)
Location: linuxcmd.py:62:2
More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b605_start_process_with_a_shell.html
61                      font_col = input("Enter any number:")
62                      os.system("tput setaf "+str(font_col))
63
--------------------------------------------------
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High   Confidence: High
CWE: CWE-78 (https://cwe.mitre.org/data/definitions/78.html)
Location: linuxcmd.py:68:2
More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b605_start_process_with_a_shell.html
67
68                      os.system("echo "+mes_sage)
69
--------------------------------------------------
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High   Confidence: High
CWE: CWE-78 (https://cwe.mitre.org/data/definitions/78.html)
Location: linuxcmd.py:73:17
More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b605_start_process_with_a_shell.html
72                              remove_dir = input("enter folder name you want to delete:")
73                              os.system("rm -rf " + remove_dir)
74
--------------------------------------------------
>> Issue: [B605:start_process_with_a_shell] Starting a process with a shell, possible injection detected, security issue.
Severity: High   Confidence: High
CWE: CWE-78 (https://cwe.mitre.org/data/definitions/78.html)
Location: linuxcmd.py:81:2
More Info: https://bandit.readthedocs.io/en/1.7.4/plugins/b605_start_process_with_a_shell.html
80
81                      os.system("date > "+f_name)
82
--------------------------------------------------
Code scanned:
Total lines of code: 48
Total lines skipped (#nosec): 0
Run metrics:
Total issues (by severity):
Undefined: 0
Low: 8
Medium: 0
High: 7
Total issues (by confidence):
Undefined: 0
Low: 0
Medium: 0
High: 15
Files skipped (0):

Интерпретация отчета Bandit

После того как Bandit закончит сканирование вашего кода, он создаст отчет, в котором будут перечислены все найденные потенциальные проблемы безопасности.

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

Важно внимательно изучить отчет Bandit и устранить все выявленные в нем потенциальные проблемы безопасности.

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

Основные проблемы безопасности, выявляемые Bandit

Среди наиболее распространенных проблем безопасности, выявляемых Bandit, можно назвать следующие:

  • Использование слабых или легко угадываемых паролей
  • Использование слабых или устаревших алгоритмов шифрования
  • Уязвимости SQL-инъекций
  • Уязвимости межсайтового скриптинга (XSS)
  • Использование небезопасных генераторов случайных чисел
  • Использование небезопасных функций ввода/вывода файлов

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

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

Заключение

В целом, Bandit – это мощный инструмент для выявления потенциальных уязвимостей безопасности в вашем коде на Python.

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

Важно помнить, что Bandit – это лишь один из инструментов в вашем наборе средств безопасности, и его следует использовать в сочетании с другими методами, такими как тестирование на проникновение и анализ кода, чтобы обеспечить максимальную безопасность вашего кода.

см. также:

 

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий