曾今向前辈请教过,如何学习代码审计;
曾今向大牛问起过,如何学好代码审计……
得到的答案总是出乎的一致:多读,多审,多写;php,python,java;变量,函数,框架;赋值,传递,覆盖;……只要用心,就能学好。其实很多看起来很专的技术,只要把心静下来,用心去学习--总结--沉淀,就一定不会差。
1、前言
作为【一起玩蛇】系列的文章,突发奇想到python代码审计。纵观目前主流的代码审计,关于审计PHP的文章很多,java代码的也逐渐增加,至于python相关的却相对较少。本文作为开篇,首先介绍一些python代码审计工具及使用相关感受,包括bandit、pyvulhunter、cobra等。Python代码审计资源包括但不仅限于:
bandit是一个OpenStack Security下的python代码审计项目,最牛的是通过AST模块将源代码转换为Python语法树并对语法树节点进行测试的思路。其项目地址为:https://github.com/openstack/bandit
操作系统 Kali2.0 Rolling
语言环境 python 2.7.13 (该工具适用于Py2.x或Py3.x)
(1) 创建虚拟环境
virtualenv bandit-env
(2) 安装bandit
pip install bandit
安装成功后,直接执行bandit -r code’s path
bandit -r /home/Yxiu/Desktop/xxyy
可以添加
-f 参数指明文件格式 {csv,custom,html,json,screen,txt,xml,yaml}
-o 将扫描结果保存本地 {OUTPUT_FILE}
bandit -r /home/Yxiu/Desktop/xxyy -f html -o xxyy.html
如果没有指定格式输出报告,则可以在运行界面查看静态扫描结果,包括漏洞级别、代码路径、修复意见等。
如果不清楚漏洞,可以访问More Info继续查看并在搜索框中搜索B101:
http://docs.openstack.org/developer/bandit/plugins/assert_used.html
pyvulhunter是一款python注入 inject 工具,但作者已经2年没更新。主要是通过递归查找出所有可控参数,判断是否为危险函数,若是则报漏洞,其项目地址为:
https://github.com/shengqi158/pyvulhunter
直接下载到本地,运行judge_injection.py即可
运行脚本judge_injection.py,使用帮助参数-h
pythonjudge_injection.py -h
根据提示对代码尝试进行SQL注入扫描,
pythonjudge_injection.py -s -d /home/Yxiu/Desktop/xxyy
查看终端界面中返回的内容,主要是一些untrited_func_name、func,record_param等信息,结合源码判断不存在危险函数与参数。
Cobra定位是自动化发现源代码中大部分显著的安全问题,对于一些隐藏较深或特有的问题建议人工审计。据了解,针对python支持基础的匹配规则,但还不支持语法语义的解析。其项目地址为:
https://github.com/WhaleShark-Team/cobra
Kali-rolling中进行最新cobra的部署
apt-get installflex bison
4.2.2 下载安装cobra
git clonehttp://github.com/WhaleShark-Team/cobra.git && cd cobra
pip install -r requirements.txt
最新版cobra安装部署已经很简单,直接执行cobra.py文件查看运行方式
python cobra.py --help
使用server版本运行:python cobra.py -H 127.0.0.1 -P 8888
打开浏览器,本地即可访问http://127.0.0.1:8888/
上传压缩源码包时,报错:Nosection:’cobra’
No section:‘upload’
经过和作者沟通,需要配置config文件。(http://cobra.feei.cn/config)
再次上传成功,且上传页面后跳转至报告页面http://127.0.0.1:8888/?t=&sid=a580fd6rct8h&s_sid=s580fd61s3dd
可在命令行查看到扫描结果:
5、初步分析
上面三款工具仅在一个小程序中试用,不能代表各个业务场景,故不能立马做出好坏的判断,不过可以提供下表仅供参考:
在平常的审计工作中,不防用各个工具都跑一边,综合起来看结果。再加上人工参与审计,想必会事半功倍,毕竟python代码审计相对来说还算是稍微简单。