Python源代码安全审计工具之Bandit
Bandit是一種旨在查找Python代碼中常見安全問題的工具。
它處理每個文件 從中構(gòu)建AST 然后針對AST節(jié)點(diǎn)運(yùn)行適當(dāng)?shù)牟寮?/p>
當(dāng)它掃描完成所有文件之后將生成報告。
以下安裝部署過程基于Windows操作系統(tǒng),假設(shè)已經(jīng)安裝并設(shè)置好了以下軟件。
"Python 3.7.8 AMD64"
"64-bit Git for Windows"
最便捷的安裝方式是通過pip直接安裝.whl文件,但是截止到寫作本文時,最新的1.6.2版本是在2019年07月02日發(fā)布的,其后的代碼更新并沒有反應(yīng)到.whl當(dāng)中。
因此接下來,先通過pip安裝,再更新源代碼文件。
先從以下地址下載Bandit源代碼,當(dāng)前最新版本是2020年05月18日的Commit為b78c938的版本。
https://github.com/PyCQA/bandit
下載完成后將"bandit-master.zip"文件置于D盤根目錄下。
執(zhí)行以下命令。
CD /D D: python -m venv bandit-env bandit-envScriptsactivate pip install bandit RD /S /Q bandit-envLibsite-packagesandit 7z x bandit-master.zip XCOPY /E bandit-masterandit bandit-envLibsite-packagesandit
到這里就安裝好了。
下面是涉及到的幾個程序的幫助信息。
bandit
Usage: bandit [-h] [-r] [-a {file,vuln}] [-n CONTEXT_LINES] [-c CONFIG_FILE] [-p PROFILE] [-t TESTS] [-s SKIPS] [-l] [-i] [-f {csv,custom,html,json,screen,txt,xml,yaml}] [--msg-template MSG_TEMPLATE] [-o [OUTPUT_FILE]] [-v] [-d] [-q] [--ignore-nosec] [-x EXCLUDED_PATHS] [-b BASELINE] [--ini INI_PATH] [--exit-zero] [--version] [targets [targets ...]]
Bandit - a Python source code security analyzer
位置參數(shù):
targets 要測試的源文件或目錄
可選參數(shù):
-h, --help 顯示此幫助消息并退出
-r, --recursive 在子目錄中查找和處理文件
-a {file,vuln}, --aggregate {file,vuln} 按漏洞(默認(rèn))或文件名匯總輸出
-n CONTEXT_LINES, --number CONTEXT_LINES 每個問題輸出的最大代碼行數(shù)
-c CONFIG_FILE, --configfile CONFIG_FILE 可選的用于選擇插件和覆蓋默認(rèn)值的配置文件
-p PROFILE, --profile PROFILE 要使用的配置文件 默認(rèn)執(zhí)行所有測試
-t TESTS, --tests TESTS 以逗號分隔的要運(yùn)行的測試ID列表
-s SKIPS, --skip SKIPS 以逗號分隔的要跳過的測試ID列表
-l, --level 僅報告給定嚴(yán)重級別或更高級別的問題 (-l for LOW, -ll for MEDIUM, -lll for HIGH)
-i, --confidence 僅報告給定置信級別或更高級別的問題 (-i for LOW, -ii for MEDIUM, -iii for HIGH)
-f {csv,custom,html,json,screen,txt,xml,yaml}, --format {csv,custom,html,json,screen,txt,xml,yaml} 指定輸出格式
--msg-template MSG_TEMPLATE 指定輸出消息模板 僅可用于"--format"自定義 請參閱"自定義格式"部分以獲取可用值列表
-o [OUTPUT_FILE], --output [OUTPUT_FILE] 將報告寫入文件
-v, --verbose 輸出額外的信息 例如排除和包含的文件
-d, --debug 打開調(diào)試模式
-q, --quiet, --silent 僅在出現(xiàn)錯誤的情況下顯示輸出
--ignore-nosec 不要跳過帶有"# nosec"注釋的行
-x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS 從掃描中排除的路徑的逗號分隔列表 已支持"glob patterns"匹配模式 請注意這些是除配置文件中提供的排除路徑之外的其他路徑 (default: .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg)
-b BASELINE, --baseline BASELINE 要比較的基線報告的路徑 僅接受JSON格式的文件
--ini INI_PATH 提供命令行參數(shù)的".bandit"文件的路徑
--exit-zero 即使找到結(jié)果也以狀態(tài)碼0退出
--version 顯示程序的版本號并退出
自定義格式
----------
可用標(biāo)簽:
{abspath}, {relpath}, {line}, {test_id}, {severity}, {msg}, {confidence}, {range}
用法示例:
默認(rèn)模板:
bandit -r examples/ --format custom --msg-template "{abspath}:{line}: {test_id}[bandit]: {severity}: {msg}"
提供與以下相同的輸出:
bandit -r examples/ --format custom
標(biāo)簽也可以采用 python string.format() 樣式的格式:
bandit -r examples/ --format custom --msg-template "{relpath:20.20s}: {line:03}: {test_id:^8}: DEFECT: {msg:>20}"
發(fā)現(xiàn)并加載了以下測試:
---------------------
B101 assert_used
B102 exec_used
B103 set_bad_file_permissions
B104 hardcoded_bind_all_interfaces
B105 hardcoded_password_string
B106 hardcoded_password_funcarg
B107 hardcoded_password_default
B108 hardcoded_tmp_directory
B110 try_except_pass
B112 try_except_continue
B201 flask_debug_true
B301 pickle
B302 marshal
B303 md5
B304 ciphers
B305 cipher_modes
B306 mktemp_q
B307 eval
B308 mark_safe
B309 httpsconnection
B310 urllib_urlopen
B311 random
B312 telnetlib
B313 xml_bad_cElementTree
B314 xml_bad_ElementTree
B315 xml_bad_expatreader
B316 xml_bad_expatbuilder
B317 xml_bad_sax
B318 xml_bad_minidom
B319 xml_bad_pulldom
B320 xml_bad_etree
B321 ftplib
B322 input
B323 unverified_context
B324 hashlib_new_insecure_functions
B325 tempnam
B401 import_telnetlib
B402 import_ftplib
B403 import_pickle
B404 import_subprocess
B405 import_xml_etree
B406 import_xml_sax
B407 import_xml_expat
B408 import_xml_minidom
B409 import_xml_pulldom
B410 import_lxml
B411 import_xmlrpclib
B412 import_httpoxy
B413 import_pycrypto
B501 request_with_no_cert_validation
B502 ssl_with_bad_version
B503 ssl_with_bad_defaults
B504 ssl_with_no_version
B505 weak_cryptographic_key
B506 yaml_load
B507 ssh_no_host_key_verification
B601 paramiko_calls
B602 subprocess_popen_with_shell_equals_true
B603 subprocess_without_shell_equals_true
B604 any_other_function_with_shell_equals_true
B605 start_process_with_a_shell
B606 start_process_with_no_shell
B607 start_process_with_partial_path
B608 hardcoded_sql_expressions
B609 linux_commands_wildcard_injection
B610 django_extra_used
B611 django_rawsql_used
B701 jinja2_autoescape_false
B702 use_of_mako_templates
B703 django_mark_safe
bandit-baseline
Usage: bandit-baseline [-h] [-f {txt,html,json}] targets [targets ...]
Bandit Baseline - Generates Bandit results compared to a baseline
位置參數(shù):
targets 要測試的源文件或目錄
可選參數(shù):
-h, --help 顯示此幫助消息并退出
-f {txt,html,json} 指定輸出格式
可以添加其他Bandit參數(shù) 例如嚴(yán)重性過濾 (-ll) 并將其傳遞給Bandit程序
bandit-config-generator
Usage: bandit-config-generator [-h] [--show-defaults] [-o OUTPUT_FILE] [-t TESTS] [-s SKIPS]
Bandit Config Generator
此工具用于生成可選的配置文件。
該配置文件可用于包含或跳過測試并覆蓋插件的值。
當(dāng)用于存儲輸出配置文件時此工具將輸出包含所有插件及其默認(rèn)設(shè)置的模板。
任何未覆蓋的設(shè)置都可以從配置文件中安全的刪除并將使用默認(rèn)值。
Bandit程序?qū)⑹走x配置文件中的設(shè)置而不是內(nèi)置值。
可選參數(shù):
-h, --help 顯示此幫助消息并退出
--show-defaults 顯示每個插件的默認(rèn)設(shè)置值但不輸出配置文件
-o OUTPUT_FILE, --out OUTPUT_FILE 輸出文件以保存配置文件
-t TESTS, --tests TESTS 要運(yùn)行的測試名稱列表
-s SKIPS, --skip SKIPS 要跳過的測試名稱列表
Bandit使用Python標(biāo)準(zhǔn)庫中的ast模塊來分析你的Python代碼。
ast模塊僅能解析在其導(dǎo)入源的解釋器版本中有效的Python代碼。
這也就是說,如果你的目標(biāo)Python代碼計劃在Python 2.7環(huán)境下運(yùn)行,那么就應(yīng)該使用基于Python 2.7環(huán)境部署的Bandit程序?qū)ζ溥M(jìn)行分析,其他版本同理。
總結(jié)
以上是生活随笔為你收集整理的Python源代码安全审计工具之Bandit的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win7密码破解大法如何破译电脑密码
- 下一篇: Neutron 网络基本概念