清华AI平台,感觉在见过的国内AI平台中做的是比较优秀的,目前该平台提供的智能体功能感觉更智能或者说更傻瓜式一些。定义可以定义专属智能体,这些智能体是自己想要的网络上的汇集处理后的信息,或者是绘画或者是编写某个方面的代码等等,简单理解是上述这样。那现在软件安全威胁情报收集有很多公司在做,还有一些公司提供威胁情报服务,那借助AI平台是否可以实现该功能呢?
要创建专属智能体,你需要做的就是提供智能体的描述,越详细针对性越强。例如:我想了解一下最近的软件安全漏洞情报信息,你能帮我收集汇总一下吗?输入后,AI平台会分析我们想要得到信息,则AI平台会根据我们的输入,给出所创建智能体的描述:
这些描述看起来还是比较专业,当然我们也可以修改这些描述,让AI生成的智能体更符合我们的需要。平台会给出推荐问题,我们也可以在后面添加常见的推荐问题。同时可以上传自己的知识库,可以让AI平台从自己的知识库中提炼数据。
我们先看平台自动生成的智能体,不提供自己的数据文件。我输入问题:最近除了微软暴漏出的安全漏洞之外,还有那些比较重要的安全漏洞呢?
这个描述还不错,但是似乎并不是我想要的问题,我把问题改成:最近软件安全漏洞有哪些呢,我要一份安全漏洞情报。则输出如下:
接着问:除了微软的安全漏洞情报之外,还有没有其它软件的漏洞情报。
还是以微软的安全漏洞比较多,回答并不是太准确。那我使用创建智能体时,给出的推荐问题呢? 看看是否更准确和全面一些。
还是以微软的问题为主。我换个角度再问:2024年初,给我一份完整的全球软件安全漏洞情报吗?
感觉这次回答还是比较好。接着一步问:针对7-card Fakabao漏洞,有对应的POC吗?
我百度了一下,该安全漏洞检索信息非常少,因为智能体是从网络获取的搜索结果的聚合,应该是没有POC,也就是算零day漏洞。
平台上面有一个发布按钮,但是应该是还没有实现对外发布功能。整个平台功能还是比较全面,使用也没有门槛和过多要求。例如,我试用了一下威胁建模:针对软件登录功能,你能帮我做威胁建模吗?其回答是长文本,非常全面。
当然可以。威胁建模是一种系统的安全分析方法,它可以帮助我们识别和评估针对软件系统的潜在威胁。在进行威胁建模时,我们通常使用一些特定的框架和方法,例如STRIDE、Mitre ATT&CK等。下面我将使用STRIDE威胁建模方法来对软件的登录功能进行威胁建模。
STRIDE威胁建模
STRIDE是一个用于识别软件安全威胁的框架,它代表了以下七个威胁类别:
Spoofing(欺骗):攻击者可能会试图冒充合法用户。
Tampering(篡改):攻击者可能会试图修改数据或组件。
Repudiation(抵赖):攻击者可能会试图否认他们的行为。
Information Disclosure(信息泄露):敏感信息可能会被未授权的访问。
Denial of Service(服务拒绝):攻击者可能会试图阻止合法用户访问服务。
Elevation of Privilege(权限提升):攻击者可能会试图获取超出他们权限的访问权限。
Destruction(破坏):攻击者可能会试图破坏系统或数据。
针对登录功能的威胁分析
Spoofing(欺骗):
攻击者可能会尝试使用被盗或伪造的凭证登录系统。
测试用例:使用错误的用户名和/或密码尝试登录。
Tampering(篡改):
攻击者可能会尝试篡改登录表单或数据库中的用户信息。
测试用例:在登录过程中修改表单数据或直接篡改数据库。
Repudiation(抵赖):
用户可能会否认他们进行了某些登录操作。
测试用例:检查登录日志,验证操作的可追溯性。
Information Disclosure(信息泄露):
敏感信息(如用户名、密码、会话令牌)可能在传输过程中被截获。
测试用例:使用抓包工具监控登录过程中的数据传输。
Denial of Service(服务拒绝):
攻击者可能会尝试通过多次登录尝试或恶意流量来淹没登录服务器。
测试用例:模拟大量的登录请求,检查系统的响应能力和稳定性。
Elevation of Privilege(权限提升):
攻击者可能会尝试利用登录功能来获取更高的权限。
测试用例:尝试使用普通用户的凭证执行管理员操作。
Destruction(破坏):
攻击者可能会尝试通过登录功能破坏系统或数据。
测试用例:尝试进行非法操作或执行恶意代码。
防御措施
针对上述威胁,可以采取以下防御措施:
使用强认证机制,如双因素认证。
对所有登录尝试进行日志记录和监控。
使用HTTPS协议来保护数据传输的安全。
对用户输入进行验证和清理,以防止SQL注入等攻击。
实现速率限制和异常检测机制,以防止暴力破解和拒绝服务攻击。
对敏感数据进行加密存储和传输。
通过上述威胁建模分析,我们可以更好地理解登录功能可能面临的安全风险,并采取相应的防御措施来提高系统的安全性。
这些的回答我感觉到这平台语料非常丰富。那我再问一个深入一点的问题:针对银行某核心业务系统软件的网上支付功能,你能帮我做威胁建模吗?
针对网上支付功能的威胁分析
Spoofing(欺骗):
攻击者可能会尝试冒充合法用户进行支付。
测试用例:使用伪造的用户账户尝试支付。
Tampering(篡改):
攻击者可能会尝试篡改支付请求或修改交易数据。
测试用例:在支付过程中修改表单数据或直接篡改数据库。
Repudiation(抵赖):
用户可能会否认他们进行了某笔支付操作。
测试用例:检查支付日志,验证操作的可追溯性。
Information Disclosure(信息泄露):
敏感支付信息可能在传输过程中被截获。
测试用例:使用抓包工具监控支付过程中的数据传输。
Denial of Service(服务拒绝):
攻击者可能会尝试通过大量支付请求或恶意流量来淹没支付服务器。
测试用例:模拟大量的支付请求,检查系统的响应能力和稳定性。
Elevation of Privilege(权限提升):
攻击者可能会尝试利用支付功能来获取更高的权限。
测试用例:尝试使用普通用户的凭证执行管理员操作。
Destruction(破坏):
攻击者可能会尝试通过支付功能破坏系统或数据。
测试用例:尝试进行非法操作或执行恶意代码。
完全按照STRIDE建模方法论建模的结果,感觉非常强大了。
那代码审计功能呢?上篇文章中的代码审计功能,我看看是否同样强大。
bool?Vars_ActivePatch_AddData(char*?name,?void*?data,?UINT?data_size)
{
????UINT?name_size;
????UINT?i;
????ACTIVE_PATCH_ENTRY*?target?=?NULL;
????if?(StrLen(name)?==?0)?return?false;
????for?(i?=?0;i?<?MAX_ACTIVE_PATCH;i++)
????{
????????ACTIVE_PATCH_ENTRY*?e?=?&ActivePatchList[i];
????????if?(e->Name?!=?NULL?&&?StrCmpi(e->Name,?name)?==?0)
????????{
????????????target?=?e;
????????????break;
????????}
????????if?(e->Name?==?NULL)
????????{
????????????target?=?e;
????????????break;
????????}
????}
????if?(target?==?NULL)
????{
????????return?false;
????}
????name_size?=?StrSize(name)?+?4;
????target->Name?=?malloc(name_size);
????memset(target->Name,?0,?name_size);
????StrCpy(target->Name,?name_size,?name);
????target->Data?=?malloc(data_size?+?4);
????memset(target->Data,?0,?data_size?+?4);
????Copy(target->Data,?data,?data_size);
????
????target->DataSize?=?data_size;
????return?true;
}
这是结果:
在审核您提供的代码段时,我发现了几个潜在的问题,并提出了相应的解决方案:
空指针检查:在分配内存之前,应该检查malloc返回的指针是否为NULL。
内存泄漏:如果malloc失败,没有处理这种情况,可能导致内存泄漏。
数据复制函数:使用了Copy函数,但没有提供该函数的定义。应该使用memcpy或类似的函数来复制内存。
字符串长度计算:使用了StrSize和StrCpy函数,但没有提供这些函数的定义。应该使用标准C函数如strlen和strcpy。
大小计算:在计算name_size时,没有考虑name字符串末尾的 null 终止符。
代码可读性:代码中的一些条件判断可能需要更清晰的注释来提高可读性。
下面是修改后的代码,解决上述问题,并使用标准C函数替换了未定义的函数:
c
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 假设这些是之前定义的宏或结构体
#define MAX_ACTIVE_PATCH 100
typedef struct {
??? char* Name;
??? void* Data;
??? UINT DataSize;
} ACTIVE_PATCH_ENTRY;
// 假设这是一个全局数组
ACTIVE_PATCH_ENTRY ActivePatchList[MAX_ACTIVE_PATCH];
bool Vars_ActivePatch_AddData(char* name, void* data, UINT data_size)
{
??? UINT i;
??? ACTIVE_PATCH_ENTRY* target = NULL;
??? if (name == NULL || data_size == 0) return false;
??? for (i = 0; i < MAX_ACTIVE_PATCH; i++)
??? {
??????? ACTIVE_PATCH_ENTRY* e = &ActivePatchList[i];
??????? if (e->Name == NULL)
??????? {
??????????? target = e;
??????????? break;
??????? }
??????? if (strcmp(e->Name, name) == 0)
??????? {
??????????? target = e;
??????????? break;
??????? }
??? }
??? if (target == NULL)
??? {
??????? return false;
??? }
??? UINT name_size = strlen(name) + 1; // 包括末尾的 null 终止符
??? char* new_name = malloc(name_size);
??? if (new_name == NULL) return false; // 内存分配失败
??? memset(new_name, 0, name_size);
??? strcpy(new_name, name); // 复制字符串
??? void* new_data = malloc(data_size + 4); // 分配足够的空间用于数据和 null 终止符
??? if (new_data == NULL) { free(new_name); return false; } // 内存分配失败
??? memset(new_data, 0, data_size + 4);
??? memcpy(new_data, data, data_size); // 复制数据
??? target->Name = new_name;
??? target->Data = new_data;
??? target->DataSize = data_size;
??? return true;
}
int main()
{
??? // 示例调用
??? if (Vars_ActivePatch_AddData("test", "some data", 10))
??? {
??????? printf("Data added successfully.\n");
??? }
??? else
??? {
??????? printf("Failed to add data.\n");
??? }
??? return 0;
}
在这个修改后的版本中,我使用了strcpy和memcpy来复制字符串和数据,并且在分配内存失败时进行了适当的错误处理。此外,我还添加了对name参数的NULL检查,以及对data_size的零值检查。这些修改旨在提高代码的稳定性和安全性。
虽然给出了代码修复函数,但是对整个代码缺陷的分析没有ChatGpt 3.5分析的更准确。
今天清华Chatglm试用就到这里,下次我上传一个文件,看看是否回答问题更全面。
(结束)