
之前看过许多前端和后端的朋友们都分享过他们使用腾讯云AI编码助手进行辅助开发的经验,确实显著提升了代码生成的速度和质量,提供了前所未有的便利,也让我这个搞安全的万分羡慕啊。这周我系统的学习了腾讯云AI编码助手的操作文档,深入了解其功能特性与应用场景,发现它不仅仅是一个提高编码效率的利器,更是在保障软件安全性方面具有巨大潜力的安全助手。
本文将从代码审计安全人员的角度出发,探讨如何利用腾讯云AI编码助手辅助代码审计和漏洞挖掘工作。

基本流程还是先利用静态代码审计工具先过一遍源码,再针对存疑的代码片段结合腾讯云AI编码助手来辅助判定,最终通过灰盒方式进行验证。
Seay源代码审计:基于C#语言开发的一款针对PHP代码安全性审计的系统,主要运行于Windows系统上。这款软件能够发现SQL注入、代码执行、命令执行、文件包含、文件上传、绕过转义防护、拒绝服务、XSS跨站、信息泄露、任意URL跳转等漏洞,基本上覆盖常见PHP漏洞。另外,在功能上,它支持一键审计、代码调试、函数定位、插件扩展、自定义规则配置、代码高亮、编码调试转换、数据库执行监控等数十项强大功能。

此处以VScode为例子,在拓展中搜索“腾讯云”即可找到,点击安装即可下载。

某企业网关源码一套,此处仅做演示使用,请遵守中国国家网络安全法,在进行任何审计活动时,必须确保所有操作符合国家和地方的法律法规。

正常来说代码审计的第一步应该是熟悉框架、通读代码,具体的方式与个人代码能力和编程语言的熟悉程度有关系,有时,为了快速审计,就会采用上述工具进行打点和标注,由于工具内置的正则不同,所以结果也会略有差异。
当然,工具也会存在漏报和误报的情况,所以此处结果仅能做参考,还需要人工进行审核和验证。
点击【自动审计】→【开始】,耐心等待即可。

结束后,点击【生成报告】

看到这么多漏洞,我们从哪里开始下手验证呢?这里还是依据个人经验,先找带config.php这种的,通常这种都是某个功能的配置界面,包含一些关键信息和敏感数据,如果这些文件的安全性得不到保证,攻击者就可能利用它们获取未授权访问权限或敏感信息泄露。
这里我们首先定位到list_base_config.php页面。

由于某些原因,此处不便直接贴源码,请见谅!!!
按照往常,我们应该会结合上述审查工具提示的代码位置去进行分析和判断,但是,现在我们有了腾讯云AI编码助手,一切都变得不一样了。
我们先全选代码,在左侧输入框给出如下Prompt提示词:
分析这段代码的作用和功能。
此时,腾讯云AI编码助手能够自动分析和拆解对应代码段并形成要点式输出:
这段代码是一个PHP脚本,主要用于处理VPN网关设备的配置信息。以下是对代码的分析:
1. require_once('../php_class/sslvpn_class.php');:这行代码引入了一个外部的PHP类文件sslvpn_class.php,这个类包含了处理SSL VPN相关的功能。
2. 页面头部信息包含了HTML的文档类型声明、字符集声明、页面标题以及引入了几个CSS样式表和JavaScript脚本文件,用于页面的样式设计和交互功能。
3. 在<body>标签内部,PHP代码开始处理逻辑:
* 定义了一些变量,如$type, $parts, $pages等,这些变量用于控制页面的行为。
* 使用isset()函数检查URL请求参数,并根据请求参数的值来设置变量的值。
* 创建了一个sslvpn_class的实例$obj_sslvpn。
* 使用switch语句根据$parts和$type的值来决定执行哪个分支的代码。
* 当$parts为base_config时,进一步根据$type的值来执行操作。
* 如果$type为mod,则调用$obj_sslvpn->sslvpn_config_mod(2);方法,这个方法可能是用来修改VPN的配置信息,参数2的具体含义需要查看sslvpn_class.php文件中的定义。
* 执行完相应的操作后,使用header('Location:./base_config.php');进行页面重定向,跳转到base_config.php页面。
4. 代码中没有明显的注释,但是可以根据变量名和函数名来推测代码的功能。
总结:这段代码的主要功能是处理VPN网关设备的配置信息,特别是当用户请求修改基础配置时,会调用相应的方法来执行修改操作,并在操作完成后重定向回基础配置页面。
注意:代码中存在一些潜在的问题,例如变量命名不一致($rult_type和$rule_type),以及使用了不安全的PHP短标签<?,这可能会导致在某些服务器配置下代码无法正常执行。此外,代码中的URL和文件路径硬编码可能会导致在不同的部署环境中出现问题。到这一步,我们基本了解这段代码的作用点,接下来,我们给出如下Prompt:
假设你是一位代码安全审计专家,已知该段代码存在漏洞,请给出你能确定的漏洞,并给出对应的漏洞方法。
这段Prompt还是比较关键的,下面进行详细拆解
按照这段Prompt,腾讯云AI编码助手会给出一个较为精准的回复:
**重点关注**
配置文件:如list_base_config.php,检查是否有不安全的函数调用。
$obj_sslvpn = new sslvpn_class();
switch($parts) {
case 'base_config':
switch($type) {
case 'mod':
$obj_sslvpn->sslvpn_config_mod(2);
break;
default:
break;
}
header('Location:./base_config.php');
break;
default:
break;
}
这段代码看起来没有直接的命令执行风险,但需要确保sslvpn_class类的实现是安全的。
此时我们再人工审计,确实可以看到这里直接New了一个sslvpn_class 类,然后进入到了 sslvpn_config_mod 方法中。
接下来,我们跟进一下,实际在sslvpn_class.php 中,我们找到了父类,换做往常,我们需要自己来分析,但此时,我们可以直接使用腾讯云AI编码助手的 / cr (AI评审模式)

进入到sslvpn_class.php 中的sslvpn_config_mod方法下,全选这部分代码,点击代码评审:

此时腾讯云AI编码助手会进行逐行分析,分段给出评审建议。

这里我们可以看到存在如下危险函数:

存在危险函数确认了,那么这部分函数能否直接被外部参数控制调用呢?这一点我们还没明确,所以,接下来,我们可以回到list_base_config.php文件中,再次执行上述的 / cr (AI评审模式)
经过评审,得到结果如下,果然存在未经校验的外部参数输入

基本都可以确定了,那么接下来,就要考虑如何验证了。
首先,既然可以传入参数,那么传什么参数?一方面开头我让AI编码助手解释的原因就在于这个,如果实在还不太懂,没事,我们这里也可以再次给出针对性提问:
判断如果要执行sslvpn_config_mod方法的话要传入什么外部参数才可以执行?

http://your-domain.com/vpn/list_base_config.php?type=mod&parts=base_config现在参数知道了,如何来实现命令执行呢?
我们再看到sslvpn_class 类中,经过上一次评审,腾讯云AI编码助手已经将存疑的代码片段给标红了

我们选中这部分存疑的代码,打开腾讯云AI编码助手的 / workspace (工作空间)模式
给出Prompt如下:
请你帮忙验证type=mod&parts=base_config&才可以验证安全漏洞存在?
这段的重点是必须强调让其验证安全漏洞存在
给出的回复如下:

最后,我们再补充一段能够远程命令执行漏洞的语句即可:
template=`echo+-e+'<?php phpinfo();>'>/www/tmp/phpinfo.php`所以,整个验证漏洞链接为:
http://your-domain.com/vpn/list_base_config.php?parts=base_config&type=mod&template=`echo+-e+'<?php phpinfo();?>'>/www/tmp/phpinfo.php`验证存在!

接下来,我们就尝试利用腾讯云AI编码助手来辅助修复这个漏洞,先回到list_base_config.php中,找到标红的漏洞处,尝试点击代码修复:

给出的比较合理的答复就是,对于所有外部输入,进行严格的验证和过滤,使用filter_input函数来过滤输入,并使用isset来检查变量是否设置,我们直接引用并插入这段

再回到sslvpn_class类中,找到标红的漏洞处,尝试点击代码修复:

同样,我们也直接引用进去:

有的时候会出现奇怪的bug,导致引用失败,多尝试几次即可:

在修复后,exec函数被替换成了copy函数。
**// 验证输入参数
$template = basename($_REQUEST['template']); // 确保 $template 不包含路径遍历字符
$stylenum = intval($_REQUEST['stylenum']); // 确保 $stylenum 是数字
// 使用 copy 函数代替 exec
$sourceHtml = "/usr/local/sslroot/pages/{$template}/*.html";
$destinationHtml = "/usr/local/sslroot/pages/";
// 注意:PHP 的 copy 函数不支持通配符,需要使用 glob 函数来获取所有文件并逐个复制
foreach (glob($sourceHtml) as $file) {
copy($file, $destinationHtml . basename($file));
}
// 对图片和 CSS 文件同样处理
$sourceImages = "/usr/local/sslroot/pages/{$template}/images{$stylenum}/*";
$destinationImages = "/usr/local/sslroot/pages/images/";
foreach (glob($sourceImages) as $file) {
copy($file, $destinationImages . basename($file));
}
$sourceCss = "/usr/local/sslroot/pages/{$template}/utmcss{$stylenum}.css";
$destinationCss = "/usr/local/sslroot/utmcss.css";
copy($sourceCss, $destinationCss);**与上文同理,我们可以采用与上述一模一样的策略来进行。
全选代码,先让腾讯云AI编码助手解释,帮助我们了解大致的功能。
然后再/ cr 进入代码评审模式,给出Prompt如下:
假设你是一位代码安全专家,请你指出其中存在的安全漏洞?

可以看到,疑似存在的漏洞点还是很多的,但是最值得注意的还是204-211行的,此处直接从$_REQUEST获取数据并进行操作,存在SQL注入和跨站脚本攻击的风险。

而且很好笑的是,此处依然还是调用到sslvpn_config_mod方法,所以,我们只需要对此处的参数进行一个拼接就可以了。
选中这一部分,给出提问Prompt如下:
判断如果要执行sslvpn_config_mod方法的话要传入什么外部参数才可以执行?

得到利用方式如下:
http://your-domain.com/vpn/list_ip_network.php?Nradius_submit=1&template=`echo+-e+'<?php phpinfo();?>'>/www/tmp/info.php`验证存在!

同样,我们修复也可以采用上述策略:

看完了上面几个,其实都是因为调用某个相同的方法导致的命令执行,下面我们换一个,看看腾讯云AI编码助手在识别其他类型漏洞上的能力
这里的污点分析是已经识别到upload_ sfmig.php可能存在漏洞,下面我们进入该界面,继续采用腾讯云AI编码助手的辅助验证
按照之前的思路,我们还是先了解这段代码的基本作用

可以看到这段 PHP 代码的主要作用是处理文件上传。它首先开启输出缓冲并引入一个外部函数库,然后设置上传目录为服务器的 /tmp 文件夹。接着,它获取通过表单上传的文件信息,包括文件名和扩展名,并构建文件在服务器上的保存路径。代码还会将上传的文件信息记录到一个日志文件中。之后,它尝试将上传的文件从临时目录移动到指定的上传目录。此外,代码中还包含了一些被注释掉的安全检查措施,比如检查文件是否已存在以及文件扩展名是否合法。最后,代码检查上传过程中是否有错误发生,并可以执行相应的错误处理操作。
接下来,再次使用腾讯云AI编码助手的评审能力进行审查,给出Prompt如下:
@workspace /cr 判断其中是否存在安全漏洞?

根据评审模式给出的回复,我们可以发现这里确实疑似存在漏洞,根据经验来说一般没有对文件类型验证的话就很容易出现文件上传漏洞,我们定位在这个位置:
upload_sfmig.php:17
move_uploaded_file函数在移动文件前没有进行充分的安全检查,建议添加文件类型和大小验证。懒得分析代码,我们继续给出Prompt如下:
分析此处是如何引发文件上传漏洞的?请给出具体原因及验证方式。
腾讯云AI编码助手给出的具体分析原因也是比较完整的,我摘出的关键部分如下:
在 upload_sfmig.php 文件中,注释掉的文件类型验证代码表明系统原本应该验证上传文件的类型,但当前代码并未执行此操作。在当前的接口中,文件名和扩展名是通过上传的文件自动获取的,并存储在相应的变量中。
具体来说,在 upload_sfmig.php 文件中,文件名和扩展名的处理如下:
$attachment = $_FILES['Filedata'];
$filename = $attachment['name'];
$fileext = substr(strrchr($filename, '.'), 1);这些信息随后用于构建文件的保存路径:
$path = $upload_dir . "/" . $filename;当上传一个文件时,会拼接如下参数:
POST /upload _sfmig.php
***
***
***
upload_dir=/tmp & attachment =php & filename=shell //示例假设攻击者试图通过这个接口上传一个名为 shell.php 的文件到 /tmp 目录下。由于没有对上传文件后缀名进行适当的检查或限制,服务器可能会接受并保存这个文件,从而允许攻击者利用该文件执行恶意操作。
而同样,我们也可以结合腾讯云AI编码助手来给出可能的修复建议:

问题 1: 日志文件写入权限
改进建议:
使用专门的日志库,如 Monolog。
设置合适的文件权限,通常日志文件权限应设置为 640 或 644。
问题 2: 上传目录设置
改进建议:
将上传目录设置为应用特定的目录,例如 uploads。
确保该目录不允许执行脚本,设置合适的权限。
问题 3: 文件类型和大小的验证
改进建议:
在移动上传文件前进行文件类型和大小的验证。
$max_size = 5 * 1024 * 1024; // 5MB
$allowed_types = ['zip','rar']; // 允许的文件类型
if ($attachment['size'] > $max_size) {
die('File size exceeds limit.');
}
if (!in_array($fileext, $allowed_types)) {
die('Invalid file type.');
}
if (move_uploaded_file($attachment['tmp_name'], $path)) {
echo 'File is successfully uploaded.';
} else {
echo 'Failed to move uploaded file.';
}
总结
1. 使用专门的日志库并设置合适的文件权限。
2. 将上传目录设置为应用特定的目录,并确保该目录不允许执行脚本。
3. 在移动上传文件前进行文件类型和大小的验证。此处是一个上传控件升级包的地方,所以我们限制其上传的后缀为zip和rar即可!
通篇下来,我们其实真的可以看到,腾讯云AI编码助手不仅革新了代码开发的方式,也为软件安全领域带来了新的可能性。通过混元大模型强大的底层代码理解和生成能力,以及腾讯云AI编码助手的特色代码审查功能,安全人员甚至不需要完全理解每一行代码的具体逻辑,就能够有效地识别潜在的安全风险和漏洞。
腾讯云AI编码助手能够自动分析代码结构,检测常见的编程错误和安全缺陷,如SQL注入、跨站脚本攻击(XSS)、危险函数等,还可以根据最新的安全标准和最佳实践提供即时反馈,帮助开发者及时修正问题,确保代码符合安全规范。
对于那些复杂的代码库或遗留系统,腾讯云AI编码助手可以作为安全人员的有力辅助工具,快速定位可能存在的安全隐患,这大大减轻了人工审计的工作量,并使得即使是对某些技术细节不熟悉的人员也能够参与到安全检查的过程中来。通过这种方式,不仅可以提高审计效率,还能促进团队内部技术水平的整体提升。
再大胆的展望一下未来,如果人人都用腾讯云AI编码助手来编程了,那么代码的安全性肯定会得到一个质的飞跃,坏了,这下我的饭碗不保了~

本文内容仅供学习和验证使用,请遵守中国国家网络安全法。在利用腾讯云AI编码助手及其他相关工具时,用户应当确保其活动严格符合所在中国及地区的法律法规要求,尊重并保护个人隐私及数据安全。我们提倡合理合法地应用新技术来提升开发效率和安全性,同时坚决反对任何滥用技术的行为。
对于开发者和安全研究人员而言,正确理解和使用这些先进的工具和技术是至关重要的。这不仅有助于构建更加安全可靠的软件系统,也是对社会负责任的表现。鼓励大家积极参与到合法合规的技术交流与实践中,共同促进网络安全环境的改善,为数字经济的健康发展贡献力量。
最后,希望读者能够通过本文了解到腾讯云AI编码助手在革新代码开发方式和增强软件安全性方面的能力,并认识到遵循法律规范的重要性。让我们携手共进,在享受技术创新带来的便利的同时,也确保我们的行为始终处于法律框架之内,为创建一个更美好的网络世界而努力。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。