试用清华Chatglm智能体

清华AI平台,感觉在见过的国内AI平台中做的是比较优秀的,目前该平台提供的智能体功能感觉更智能或者说更傻瓜式一些。定义可以定义专属智能体,这些智能体是自己想要的网络上的汇集处理后的信息,或者是绘画或者是编写某个方面的代码等等,简单理解是上述这样。那现在软件安全威胁情报收集有很多公司在做,还有一些公司提供威胁情报服务,那借助AI平台是否可以实现该功能呢?

要创建专属智能体,你需要做的就是提供智能体的描述,越详细针对性越强。例如:我想了解一下最近的软件安全漏洞情报信息,你能帮我收集汇总一下吗?输入后,AI平台会分析我们想要得到信息,则AI平台会根据我们的输入,给出所创建智能体的描述:

试用清华Chatglm智能体_第1张图片

这些描述看起来还是比较专业,当然我们也可以修改这些描述,让AI生成的智能体更符合我们的需要。平台会给出推荐问题,我们也可以在后面添加常见的推荐问题。同时可以上传自己的知识库,可以让AI平台从自己的知识库中提炼数据。

试用清华Chatglm智能体_第2张图片

我们先看平台自动生成的智能体,不提供自己的数据文件。我输入问题:最近除了微软暴漏出的安全漏洞之外,还有那些比较重要的安全漏洞呢?

试用清华Chatglm智能体_第3张图片

这个描述还不错,但是似乎并不是我想要的问题,我把问题改成:最近软件安全漏洞有哪些呢,我要一份安全漏洞情报。则输出如下:

试用清华Chatglm智能体_第4张图片

接着问:除了微软的安全漏洞情报之外,还有没有其它软件的漏洞情报。

试用清华Chatglm智能体_第5张图片

还是以微软的安全漏洞比较多,回答并不是太准确。那我使用创建智能体时,给出的推荐问题呢? 看看是否更准确和全面一些。

试用清华Chatglm智能体_第6张图片

还是以微软的问题为主。我换个角度再问:2024年初,给我一份完整的全球软件安全漏洞情报吗?

试用清华Chatglm智能体_第7张图片

感觉这次回答还是比较好。接着一步问:针对7-card Fakabao漏洞,有对应的POC吗?

试用清华Chatglm智能体_第8张图片

我百度了一下,该安全漏洞检索信息非常少,因为智能体是从网络获取的搜索结果的聚合,应该是没有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) == 0return 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

#include

#include

// 假设这些是之前定义的宏或结构体

#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试用就到这里,下次我上传一个文件,看看是否回答问题更全面。

(结束)

你可能感兴趣的:(人工智能,供应链安全,代码审计,代码安全,安全)