代码审计复测代码对比技巧

代码审计复测代码对比技巧


简述

在甲方审计现场遇到一个傻叉的需求,要求对审计的源代码做一个全量的复测,提出这个需求的目的主要是对客户目前修复的内容全量做检测,这部分修复的内容包括对我们审计发现问题的修复和渗透测试发现的问题修复的代码及业务迭代的代码。正常源代码复测,只是对代码审计发现的问题进行复测,主要的目的是由于审计的效率和乙方项目成本考虑。针对客户这种需求,也得做,不然会被(没)投(饭)诉(吃)。

方案一

从客户的svn或者git工程上导出截止上次审计到现在改动的文件列表,如果直接导出所有的日志,审计人员一个一个对比,估计会疯掉,这里只导出变更文件即可。

svn

通过 svn 命令行(TortoiseSVN不行, 需要先安装 svn 命令行工具)是可以获得这个列表的.
命令格式如下:

1
svn diff -r REVNO:HEAD --summarize http://svn-url

例如
想检查从 530版本 开始到目前所有改动文件的列表

1
svn diff -r 530:HEAD --summarize https://svnserver/project > changedfiles.txt

可以简写成这样

1
svn diff -r 530 --summarize https://svnserver/project > changedfiles.txt

或者你只知道需要检查版本的日期, 这就相当于检查从 2020-06-06(上次发版日期) 开始到目前(此次发版日期)所有的文件改动

1
svn diff -r {2020-06-06} --summarize https://svnserver/project > changedfiles.txt

或者日期区间

1
svn diff -r {2020-06-04}:{2020-01-20} --summarize https://svnserver/project > changedfiles.txt

git

git和svn略有区别,git通过diff命令来获取版本之间的变动文件列表

1
2
//git diff --stat 版本号1 版本号2
//对比两个版本 两个版本号位置不影响(建议版本号1为当前版本号 方便下次上线直接使用)

版本号可以通过 git log 命令来获取,如果导出一段时间内的文件变动,建议通过查找log中的对应时间关联的版本号使用以上命令来导出。
例如:

1
git diff --stat  4ac2f071cb5c0d1e5a87a7692b5e61fcc2c5aa24 c6e8a140bcae3647807c6af95e13fb3076001f7e > changedfiles.txt

使用代码对比工具

一般客户提供的文件都是不全的,客户不会提供完整的项目文件,这里吐槽一下,这就是对乙方人员的不尊重,东西都不准备好,还一个劲的催项目进度,要求高质量审计,这就是在公开耍流氓,说多了都是泪,还得干活,钱难挣,奥里给难吃。
这里博主尝试了几款代码比较工具,推荐给各位审计的小伙伴。

Winmerge

是一款运行于Windows系统下的免费的文件比较合并工具,非常适用于确定不同版本的文件间的改变以及合并这些改变,尤其是在有多人编辑同一文件的情况下。
20210120-01
20210120-02

特性:

*   对文本文档的可视化编辑以及合并
*   语法高亮功能
*   可以处理DOS、UNIX和MAC中的文本文件
*   支持Unicode
*   在不同的栏中显示当前文件的差异
*   高亮差异
*   在目录比较中使用文件过滤器
*   在文件比较中检测移动过的段落
*   在外壳扩展中集成
*   通过7-Zip支持压缩文件
*   支持插件功能
*   通过DLL支持本地化界面
*   支持手动对齐文本 (Syncronization points])
*   可将比较画面结果产生HTML报告(Create HTML reports from file compare)
*   支持三方比较(3-Way Compare)
*   支持图片比较(Image compare), 文件夹比较(Folder compare) 文件比较(File compare)

下载地址:https://winmerge.org/

Diffuse

在命令行中,Diffuse 的速度很快,支持像 C++、Python、Java、XML 等语言的语法高亮显示。可视化比较,非常直观,支持两相比较和三相比较。小工具还得安装,这点就有点儿恶心。最要命的是只能对比文件,不能对比目录,这点儿对审计人员不友好,不推荐使用。
20210120-03

下载地址:https://sourceforge.net/projects/diffuse/

Beyond Compare

Beyond Compare是一套由Scooter Software推出的内容比较工具软件。除了可以作文件比较以外,还可以比对文件目录、FTP目录及压缩包的内容等。因为这些功能,Beyond Compare被应用于版本控制及资料同步的工作上,该工具支持windows、Linux、Mac,跨平台做的不错,对比功能挺挺强大,需要安装,有些强迫症。

20210120-04

通过颜色区别文件异同:

20210120-05

20210120-06

下载地址:https://www.scootersoftware.com/download.php

Code Compare

Code Compare是一个免费的代码对比工具,旨在比较和合并不同的文件和文件夹。Code Compare与所有流行的源代码托管系统集成:TFS,SVN,Git,Mercurial和Perforce。Code Compare既作为独立文件差异工具提供,又可以为Visual Studio、IDEA等提供扩展组件,同样也需要安装,不说什么了。
20210120-07

特点:
* 先进的差异目录比较实用程序
* 对添加,删除和修改的文件进行颜色编码
* 排除或包括某些文件类型的过滤选项
* 即时打开单个文件比较文件
* 显示选项,以更好地比较结果分析
* 批处理文件从窗格复制到窗格或复制到选定的文件夹
20210120-08

对于展示代码的异同和语义分析,博主还是很喜欢的,推荐给代码审计的小朋友使用
20210120-09

下载地址:https://www.devart.com/codecompare/download.html#anchorDowload

总结

还有不少文件对比工具,这里我就详细介绍以上这几款,总有一款适合你,主要目的还是应付客户奇葩需求,提高审计效率混口饭吃。

参考


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!