7种python常见漏洞与大模型检测思路
1. 引入
vulnhuntr是参考1中的一个开源项目,能借助大模型来静态分析python代码,并挖掘其中的漏洞。
从源码中能看到,目前它支持7种python代码中漏洞的挖掘:
- Local File Inclusion (LFI)
- Remote Code Execution (RCE)
- Server-Side Request Forgery (SSRF)
- Arbitrary File Overwrite (AFO)
- SQL Injection (SQLI)
- Cross-Site Scripting (XSS)
- Insecure Direct Object References (IDOR)
vulnhuntr主要是通过提示词和静态代码阅读来检测漏洞,输入的对象是python源码,要求是server端的python代码。
下面介绍这些漏洞的基本原理与检测思路(大模型提示词)。
2. 支持漏洞的类型
从源码(参考3)中,可以看到对这7种漏洞的分析、挖掘原理(提示词)。
2.1 Local File Inclusion (LFI)
- 漏洞原理
LFI(Local File Inclusion)是本地文件包含漏洞,它允许攻击者读取同一台服务器上的任何文件。一个经典的POC就是能读取密码文件,如下所示(参考4)
http://vulnerable_host/preview.php?file=../../../../etc/passwd
- 检测手段(提示词)
(1)检测一些危险函数:open(), file(), io.open()
(2)用户控制的路径遍历逻辑
2.2 Remote Code Execution
- 漏洞原理
Remote Code Execution,远程代码执行漏洞,允许攻击者在目标系统上远程执行恶意代码或命令。
- 检测手段(提示词)
(1)危险函数:eval(), exec(), subprocess modules,os.system(), os.popen()
(2)动态import,服务器端的模版注入
(3)反序列化漏洞
2.3 Server-Side Request Forgery
-
漏洞原理
服务器端请求伪造。是一个由攻击者构造请求,在目标服务端执行的一个安全漏洞。攻击者可以利用该漏洞使服务器端向攻击者构造的任意域发出请求,目标通常是从外网无法访问的内部系统。 -
检测手段(提示词)
(1)危险函数:requests.get(), urllib.request.urlopen()
(2)含有URL解析
2.4 Arbitrary File Overwrite
-
漏洞原理
攻击者可以通过利用软件或系统中的漏洞,将恶意文件覆盖到目标系统中的任意位置,从而导致系统受到攻击。 -
检测手段(提示词)
(1)危险函数:open(),os.rename(), shutil.move()
(2)用户控制的文件路径操作
2.5 SQL Injection
-
漏洞原理
SQL注入漏洞产生的原因是网站应用程序在编写时未对用户提交至服务器的数据进行合法性校验(类型、长度、业务参数合法性等),同时没有对用户输入数据进行有效地特殊字符过滤,使得用户的输入直接带入数据库执行,超出了SQL语句原来设计的预期结果。其能导致 窃取数据、获取DBA权限等危害。 -
检测手段(提示词)
(1)确定所有远程用户输入的接收点(例如,API 参数、表单提交)
(2)定位并追踪SQL操作
(3)评估这些控制措施对SQL注入攻击的有效性
2.6 Cross-Site Scripting
-
漏洞原理
跨站脚本攻击(Cross-site Scripting,通常称为XSS),是一种典型的Web程序漏洞利用攻击。 攻击者利用Web程序对用户输入检查不足的漏洞将可执行恶意脚本注入网站或Web应用,当用户访问网页时触发恶意脚本的执行,从而达到窃取用户个人数据、弹出广告,甚至篡改网页内容等攻击目的。 -
检测手段(提示词)
(1)危险函数:render(), render_to_string()
(2)属性值插入 :在HTML属性中直接插入用户输入,如。
2.7 Insecure Direct Object References
- 漏洞原理
越权漏洞IDOR。场景为基于用户提供的输入对象进行访问时,未进行权限验证,是一类访问控制漏洞
考虑一个网站,它通过从后端数据库检索信息,使用以下 URL 访问客户帐户页面:
https://insecure-website.com/customer_account?customer_number=132355
在这里,客户编号直接用作在后端数据库上执行的查询中的记录索引。如果没有其他控制措施,攻击者可以简单地修改该customer_number值,绕过访问控制来查看其他客户的记录。这是导致横向权限提升的 IDOR 漏洞示例。
- 检测手段(提示词)
(1)寻找涉及用户ID、文件ID、订单ID等唯一标识符的代码段,这些标识符可能用于访问资源。例如,user_id, file_id, order_id等。
(2)检查URL参数中是否直接传递ID
(3)验证代码在允许访问资源之前是否进行了授权检查
3. 总结
以vulnhuntr能检测的7个python源码漏洞为例,讲解基于LLM检测核心提示词思路。
4. 参考
- https://github.com/protectai/vulnhuntr
- https://github.com/protectai/vulnhuntr/blob/main/vulnhuntr/prompts.py
- https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/11.1-Testing_for_Local_File_Inclusion