Bandit Python代码审计漏洞检测工具实战
系统概述
Bandit是一个用于分析Python代码审计安全漏洞的工具,旨在识别常见的安全问题,如硬编码密码、不安全的函数调用、SQL注入等。它通过构建抽象语法树(AST)并对节点运行适当的插件来检测潜在的安全问题。Bandit最初由OpenStack安全项目开发,后来迁移到PyCQA(Python代码质量权威)维护。
系统架构
Bandit的核心架构包括以下几个主要组件:
- AST解析器:Bandit通过解析Python代码生成AST,并在AST节点上运行插件来检测安全问题。
- 插件系统:Bandit通过插件系统扩展其检测能力,每个插件负责检测特定的安全问题。插件可以通过配置文件进行管理,支持黑名单和白名单机制。
- 配置文件:Bandit使用YAML格式的配置文件来定义检测规则、插件设置和输出格式。
- 报告生成器:Bandit支持多种输出格式,包括CSV、JSON、HTML、XML等,用户可以根据需求选择合适的格式生成安全报告。
核心技术点
- AST解析与节点遍历:Bandit通过Python的
ast模块解析代码并生成AST,然后遍历AST节点,调用相应的插件进行检测。 - 插件机制:Bandit的插件机制是其核心功能之一,每个插件负责检测特定的安全问题。插件通过
@test_properties装饰器注册,并定义检测逻辑。 - 黑名单与白名单:Bandit支持通过黑名单和白名单机制来过滤检测结果。黑名单用于标记已知的不安全函数调用或模块导入,白名单则用于排除误报。
- 配置文件管理:Bandit使用YAML配置文件来管理检测规则和插件设置,用户可以通过配置文件自定义检测行为。
- 多种输出格式:Bandit支持多种输出格式,用户可以根据需求生成不同格式的安全报告,便于集成到CI/CD流程中。
核心代码分析
AST解析与插件调用:
from bandit.core import manager
b_mgr = manager.BanditManager(config, agg_type)
b_mgr.run_tests()
这段代码展示了Bandit如何通过
BanditManager类管理AST解析和插件调用。
插件定义:
@test_properties.checks('Call')
@test_properties.test_id('B102')
def exec_used(context):
if context.call_function_name_qual == 'exec':
return bandit.Issue(
severity=bandit.MEDIUM,
confidence=bandit.HIGH,
cwe=issue.Cwe.OS_COMMAND_INJECTION,
text='Use of exec detected.',
)
这段代码定义了一个检测
exec函数使用的插件,当检测到
exec函数调用时,会返回一个安全问题。
配置文件示例:
include:
- '*.py'
profiles:
test:
include:
- start_process_with_a_shell
shell_injection:
subprocess: []
shell:
- os.system
这个配置文件定义了检测规则,指定了需要检测的文件类型和插件。
应用场景
Bandit适用于以下场景:
- 代码审查:在代码提交前,使用Bandit进行静态分析,识别潜在的安全漏洞。
- CI/CD集成:将Bandit集成到CI/CD流水线中,自动检测代码中的安全问题。
- 安全审计:定期对代码库进行安全审计,确保代码符合安全最佳实践。
- 开发环境:在开发过程中,实时检测代码中的安全问题,帮助开发者及时修复漏洞。
应用测试
- 安装bandit
测试环境 ubuntu 22.04
打开terminal
git clone https://github.com/PyCQA/bandit.git //下载bandit项目
cd bandit
sudo python setup.py install //安装bandit
如果安装过程有缺失其他模块,则先安装缺失的模块即可
下载一个带有python安全漏洞分险的项目 这里我用的Vulnerable-Flask-App项目
执行 bandit /home/chendong/bandit/Vulnerable-Flask-App/app/app.py 审计指定的.py源代码文件


总结
Bandit是一个功能强大的Python代码安全分析工具,通过AST解析和插件机制,能够有效识别代码中的常见安全问题。其灵活的配置和多种输出格式使其易于集成到现有的开发流程中,帮助开发者和安全团队提高代码的安全性。
github链接地址:https://github.com/PyCQA/bandit.git
需要漏洞测试项目的朋友可以在公众号回复"Vulnerable-Flask-App"获取带有安全漏洞的python项目进行测试。

Bandit Python代码审计漏洞检测工具实战的更多相关文章
- Metasploit是一款开源的安全漏洞检测工具,
Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,适合于需要核实漏洞的安全专家,同时也适合于强大进攻能力的 ...
- 基于Python3的漏洞检测工具 ( Python3 插件式框架 )
目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents Any advice or sugggestions P ...
- Retina CS强大漏洞检测工具
RetinaCS强大漏洞检测工具 Eeye数字安全公司成立于上世纪九十年代末期,它是世界领先的安全公司,它采用最新研究成果和创新技术来保证您的网络兄系统安全,并向您提供最强大的如下服务:全面的.漏洞评 ...
- 文件包含漏洞检测工具fimap
文件包含漏洞检测工具fimap 在Web应用中,文件包含漏洞(FI)是常见的漏洞.根据包含的文件不同,它分为本地文件包含漏洞(LFI)和远程文件包含漏洞(RFL).利用该漏洞,安全人员可以获取服务 ...
- python S2-45 漏洞利用工具
初学python脚本,写个工具练练手.第一次写勿喷.呃...忘了截图了,补上了. 程序对于处理 JSON post 有些问题,其他地方还没发现有啥问题. #coding:utf-8 import ch ...
- CMS漏洞检测工具 – CMSmap
CMSmap是一个Python编写的针对开源CMS(内容管理系统)的安全扫描器,它可以自动检测当前国外最流行的CMS的安全漏洞. CMSmap主要是在一个单一的工具集合了不同类型的CMS的常见的漏洞. ...
- 基于Python的邮件检测工具
邮件快速检测工具 概要介绍 mmpi,是一款使用python实现的开源邮件快速检测工具库,基于community框架设计开发.mmpi支持对邮件头.邮件正文.邮件附件的解析检测,并输出json检测报告 ...
- python打造文件包含漏洞检测工具
0x00前言: 做Hack the box的题.感觉那个平台得开个VIp 不然得凉.一天只能重置一次...mmp 做的那题毒药是文件包含漏洞的题,涉及到了某个工具 看的不错就开发了一个. 0x01代码 ...
- Python-编写一个mysql注入漏洞检测工具
判断mysql网站是否存在注入漏洞的几个方法: 注入点后加上一个单引号会报错 and 1=1返回正常页面,and 1=2返回的页面不同于正常页面 and sleep(3) 网页会等待3秒左右 根据返回 ...
- Redis未授权漏洞检测工具
Redis未授权检测小工具 #!/usr/bin/python3 # -*- coding: utf-8 -*- """ @Author: r0cky @Time: 20 ...
随机推荐
- JAVA8 函数式编程(1)- Lambda表达式
1 简介 简洁的代码就能处理大型数据集合,让复杂的集合处理算法高效的运行在多核CPU上. 面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象,能编写出更易读的代码--这种代码更多地表达了业务逻 ...
- 原生js元素拖动效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- delphi编写sql脚本文件批量执行程序
程序使用DelphiXE11.1开发,用到控件UniDac9.1.1,QDAC里面的Qlog组件. 程序实现了SQL脚本文件批处理执行应用,运行效果图. 文件.pas代码 unit main; int ...
- 六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)
七. Redis 当中 Jedis 的详细刨析与使用 @ 目录 七. Redis 当中 Jedis 的详细刨析与使用 1. Jedis 概述 2. Java程序中使用Jedis 操作 Redis 数据 ...
- 天翼云CDR基本概念
本文分享自天翼云开发者社区<天翼云CDR基本概念>,作者:f****n 产品定义 云容灾CT-CDR(Cloud Disaster Recovery)为云主机提供跨可用区的容灾保护能力,R ...
- 效率起飞!天翼云并行文件服务HPFS高效应对AI时代大模型训练存储挑战!
国内外AI大模型层出不穷,训练数据复杂程度更是呈指数级增加.如今,在万亿级参数时代,单个资源池已无法满足大模型训练场景中动辄PB级的数据存储量,对于企业来说,启用多个资源池构成的分布式存储势在必行. ...
- Doris插入数据底层存储测试
建表语句 CREATE TABLE IF NOT EXISTS base_site_test( site_id INT DEFAULT '10', city_code INT, user_name V ...
- 告别 DeepSeek 系统繁忙,七个 DeepSeek 曲线救国平替入口,官网崩溃也能用!
前言 DeepSeek作为一款备受瞩目的国产大模型,以其强大的功能和卓越的性能赢得了众多用户的青睐.然而,随着用户量的激增,DeepSeek官网近期频繁遭遇服务器繁忙甚至崩溃的问题,给广大用户带来了不 ...
- QT5笔记:24. 自定义对话框以及模态 调用
创建窗口时 窗口对象为QDialog 调用方法为exec(); int res = setSizeDialog->exec();//模态窗口 (不必要)exec可以获取到调用的是对话框的 QDi ...
- 【攻防世界】warmup
warmup (反序列化与sql注入) 题目来源 攻防世界 NO.GFSJ0999 题目描述 题目提示:平平无奇的输入框 打开网址页面如下,没有有用信息. 题目给了附件,直接下载,得到源码如下: in ...