zoukankan      html  css  js  c++  java
  • Python源代码安全审计工具之Bandit

    Bandit是一种旨在查找Python代码中常见安全问题的工具。

    它处理每个文件 从中构建AST 然后针对AST节点运行适当的插件。

    当它扫描完成所有文件之后将生成报告。

    以下安装部署过程基于Windows操作系统,假设已经安装并设置好了以下软件。

    "Python 3.7.8 AMD64"

    "64-bit Git for Windows"

    最便捷的安装方式是通过pip直接安装.whl文件,但是截止到写作本文时,最新的1.6.2版本是在2019年07月02日发布的,其后的代码更新并没有反应到.whl当中。

    因此接下来,先通过pip安装,再更新源代码文件。

    先从以下地址下载Bandit源代码,当前最新版本是2020年05月18日的Commit为b78c938的版本。

    https://github.com/PyCQA/bandit

    下载完成后将"bandit-master.zip"文件置于D盘根目录下。

    执行以下命令。

    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
    
    位置参数:
      targets                                                                                               要测试的源文件或目录
    
    可选参数:
      -h, --help                                                                                            显示此帮助消息并退出
      -r, --recursive                                                                                       在子目录中查找和处理文件
      -a {file,vuln}, --aggregate {file,vuln}                                                               按漏洞(默认)或文件名汇总输出
      -n CONTEXT_LINES, --number CONTEXT_LINES                                                              每个问题输出的最大代码行数
      -c CONFIG_FILE, --configfile CONFIG_FILE                                                              可选的用于选择插件和覆盖默认值的配置文件
      -p PROFILE, --profile PROFILE                                                                         要使用的配置文件 默认执行所有测试
      -t TESTS, --tests TESTS                                                                               以逗号分隔的要运行的测试ID列表
      -s SKIPS, --skip SKIPS                                                                                以逗号分隔的要跳过的测试ID列表
      -l, --level                                                                                           仅报告给定严重级别或更高级别的问题 (-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                                                                                           打开调试模式
      -q, --quiet, --silent                                                                                 仅在出现错误的情况下显示输出
      --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                                                                                        提供命令行参数的".bandit"文件的路径
      --exit-zero                                                                                           即使找到结果也以状态码0退出
      --version                                                                                             显示程序的版本号并退出
    
    自定义格式
    ----------
    
    可用标签:
    
        {abspath}, {relpath}, {line}, {test_id}, {severity}, {msg}, {confidence}, {range}
    
    用法示例:
    
        默认模板:
        bandit -r examples/ --format custom --msg-template "{abspath}:{line}: {test_id}[bandit]: {severity}: {msg}"
    
        提供与以下相同的输出:
        bandit -r examples/ --format custom
    
        标签也可以采用 python string.format() 样式的格式:
        bandit -r examples/ --format custom --msg-template "{relpath:20.20s}: {line:03}: {test_id:^8}: DEFECT: {msg:>20}"
    
    发现并加载了以下测试:
    ---------------------
        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
    
    位置参数:
      targets               要测试的源文件或目录
    
    可选参数:
      -h, --help            显示此帮助消息并退出
      -f {txt,html,json}    指定输出格式
    
    可以添加其他Bandit参数 例如严重性过滤 (-ll) 并将其传递给Bandit程序

    bandit-config-generator

    Usage: bandit-config-generator [-h] [--show-defaults] [-o OUTPUT_FILE] [-t TESTS] [-s SKIPS]
    
    Bandit Config Generator
    
        此工具用于生成可选的配置文件。
        该配置文件可用于包含或跳过测试并覆盖插件的值。
    
        当用于存储输出配置文件时此工具将输出包含所有插件及其默认设置的模板。
        任何未覆盖的设置都可以从配置文件中安全的删除并将使用默认值。
        Bandit程序将首选配置文件中的设置而不是内置值。
    
    可选参数:
      -h, --help                           显示此帮助消息并退出
      --show-defaults                      显示每个插件的默认设置值但不输出配置文件
      -o OUTPUT_FILE, --out OUTPUT_FILE    输出文件以保存配置文件
      -t TESTS, --tests TESTS              要运行的测试名称列表
      -s SKIPS, --skip SKIPS               要跳过的测试名称列表

    Bandit使用Python标准库中的ast模块来分析你的Python代码。

    ast模块仅能解析在其导入源的解释器版本中有效的Python代码。

    这也就是说,如果你的目标Python代码计划在Python 2.7环境下运行,那么就应该使用基于Python 2.7环境部署的Bandit程序对其进行分析,其他版本同理。

  • 相关阅读:
    54.Spiral Matrix
    53.Maximum Subarray
    基础数据类型包装类
    sqlacodegen逆向数据库
    第四章、常用模块
    第三章、函数编程
    第一章
    第一章 Python基础
    Centos7.0升级python 2.x到3.x
    time
  • 原文地址:https://www.cnblogs.com/f0rsaken/p/13398282.html
Copyright © 2011-2022 走看看