简易的自动化代码审计平台的搭建

让搭建个自动化代码审计的东西,短期时间,怎么写?而能想到最快捷有效的只能是找一个现有最好开源的可调用工具进行二次开发了。前同事mm卡带试用了市面上所有的代码审计工具并总结分享。于是从里面选择了可以命令行下执行、Owasp开源的Swaat。而公司已有服务器对所有域名的代码进行SVN收集,正好可以利用这个每两小时对变更的代码做自动的代码审计,再发邮件。

一、通用?

看情况,个人认为一般情况下70%无用。静态匹配的代码审计其实能报多少东西?而且现主要的漏洞都在逻辑上。如果不坚持更新规则,静态匹配误报多、到后面就基本无视。

二、适用性?

2.1、政治:KPI

2.2、环境:如果公司的业务错综复杂,web结构繁多,很难制定适用的规则库。(公司基本都是asp.net,而且各个项目组都是统一的Web框架,因此定制统一的匹配规则不是大问题)

2.3、管理:所有机房的或者域名的代码都能自动收齐(不用开发再做操作)、对新的web结构能否及时更新规则库?

三、结构

3.1、环境

收集代码的Linux服务器一台(通过svn方式)——默认已有

代码审计工具一件(这里选择了OWASP的开源工具Swaat,开源、命令行可直接调用、报告输出友好的html界面)+ Windows(C#写的)

3.2、工作方式

Linux SVN收集代码–>把文件发给windows–>Swaat审计、出报告–>发回Linux、mutt发邮件

四、实现

4.1、同步代码、收集代码、传到windows上(我在Win上架FTP,这样FTP日志做审计也有迹可循)

#/bin/bash export LANG=en_US.UTF-8 #把svn update的web源码文件筛选出来 cd /webaudit/ && svn update > /root/svnlog.txt

grep -E "(.asp|.jsp|.php|.cs)" /root/svnlog.txt > /root/svn1.txt #把对应的web文件拉出来,并且处理掉中文字符 python /root/copyline.py #FTP到windows审计机上 /root/ftpput.shftpput.sh

#!/bin/bash ftp -n<<! open 审计机IP FTP端口 user FTP账号 密码 binary

hash

lcd /root/source

prompt

mput * close

bye !4.2、Windows上任务计划配置好时间执行Swaat,如bat

sw.bat

swaat D:\source\* ::swaat会把生成的报告按"swaat+时间戳.html"命名,存在swaat.exe同目录下 ren D:\swaat\*.html swaat.html ::把swaat.html报告传回ftp的目录 move D:\swaat\swaat.html D:\source\swaat.html

del D:\swaat\*.html4.3、Linux上再配置crontab把报告取回,发邮件

#/bin/bash export LANG=en_US.UTF-8 ftp -n<<! open 审计机IP FTP端口 user FTP账号 密码 binary lcd /root prompt mget swaat.html mdelete * close bye ! echo -e "预览附件swaat.html查阅过去2h内变更代码的审计报告结果。\n详细路径及所属项目请查阅svnlog.txt。\n" | mutt -e "my_hdr from:webauditor<[email protected]>" -s "Web代码审计报告" [email protected] -a swaat.html -a svnlog.txt #清场 rm -rf /root/svn1.txt rm -rf /root/svn2.txt rm -rf /root/source/*

五、问题&临时解决办法

Swaat老外写的,代码有中文就报错!

按理说Linux下sed一下很好解决,Google了解决办法是替换掉中文的字符串

LANG=C sed -r "s/[\x81-\xFE][\x40-\xFE]//g" file问题出现了:

中文是删掉了,但是留下了某些不识别的字符串。。而由于这些字符串的存在,文件编码不再是UTF-8,变成了Latin……swaat再报错。

改代码来不及。寻找比修改代码更简便的方法。

尝试把中文在python下变成可视化代码(如’\xb2\xe2\xca\xd4′),再删去反斜杠、制表符,把源码模式整回来。

于是就把代码审计中不必要的中文换成了不必要的英文了:

copyline.py

#coding=utf-8 import os import re lines = open("/root/svn.txt", 'r').readlines() for line in lines: pstr = '/boot/webaudit/MainSites/' path = os.path.join(pstr, line.strip()) name = os.path.split(path)[ - 1] cmd = 'cp %s /root/source/%s' % (path, name) os.system(cmd) target = "/root/source/%s" % name lines = file(target, 'r').readlines() fp = file(target, 'wb') for line in lines: line = line.strip().replace('\t', '') line = `line`[1:- 1].replace('\\', '') fp.write("%s\r\n" % line) fp.close()

六、后话

6.1、还能做什么?

把后台管理的地址都grep出来、把Flash文件都grep出来(爬swf XSS)、grep备份文件(svn、~、bak等等)、或者地址整出来让自动去黑盒再扫遍。。

剩下最主要的就是根据公司业务的web开发习惯,去匹配规则库了。

简易的自动化代码审计平台的搭建

Swaat报告

PS:路过的牛如果有更好更简单的经验或方法,求指教。

分类:默认分类 时间:2012-01-13 人气:3
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.082 (s). 9 q(s)