如何使用Django开发OpenRASP报警接收Web应用
字数 1852 2025-08-15 21:32:28
使用Django开发OpenRASP报警接收Web应用教学文档
一、OpenRASP概述
1. RASP技术简介
RASP(Runtime Application Self-Protection)是运行时应用程序自我保护技术,由Gartner在2014年提出。与传统WAF相比具有以下优势:
- 误报率低
- 高性能
- 能防护未知0day攻击
- 提供应用程序内安全防护
2. OpenRASP简介
OpenRASP是百度安全推出的免费开源RASP产品,特点包括:
- 支持Java和PHP服务器
- 官方文档:https://rasp.baidu.com
- 当前实验版本:v1.3.5
二、环境搭建
1. 测试环境准备
- 操作系统:CentOS 8
- Web服务器:Tomcat
- 虚拟机环境:VM虚拟机
2. OpenRASP安装
参考官方安装文档:
https://rasp.baidu.com/doc/install/software.html
3. 测试用例部署
使用Java服务器测试用例:
https://rasp.baidu.com/doc/install/testcase.html
三、自动化攻击脚本开发
1. 脚本功能
- 模拟各种攻击场景
- 验证OpenRASP防护效果
- 为报警接收应用提供测试数据
2. 攻击URL收集
从OpenRASP测试用例中收集攻击URL示例:
AttackUrl = [
'/vulns/001-dir-1.jsp?dirname=var/log/',
'/vulns/002-file-read.jsp?file=etc/passwd',
'/vulns/002-file-read.jsp?file=conf/tomcat-users.xml',
# 更多攻击URL...
]
3. 核心代码实现
class OpenRASPTest:
def __init__(self, host):
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)..."
}
self.host = host
self.AttackUrl = [...] # 攻击URL列表
def start_attack(self):
# 执行各种攻击
print("0x00. 完成File.listFiles 遍历目录攻击...")
self.get_url(self.AttackUrl[0])
# 更多攻击方法...
def get_url(self, url):
req = urllib.request.Request(self.host + url, headers=self.headers)
html = urllib.request.urlopen(req).read().decode('utf-8')
content = etree.HTML(html)
print(self.load_page(content) + ' 攻击已被拦截')
def post_url(self, url):
files = {'file': open('1.jsp', 'rb')}
data = {}
res = requests.post(self.host + url, data=data, files=files)
reg = re.compile(r'400 - Request blocked by OpenRASP')
resstr = reg.search(res.text)
print(resstr)
def load_page(self, con):
xpath = '/html/body/div[2]/div/div[2]/h2'
down = con.xpath(xpath)
try:
result = down[0].text
except IndexError:
result = "ERROR"
print("攻击失败")
return result
四、OpenRASP报警数据分析
1. 报警推送方式
OpenRASP支持多种报警推送方式:
- HTTP
- Syslog
- Kafka
- 邮件
- 钉钉
2. 报警数据格式
报警数据为JSON格式,主要字段包括:
| 字段 | 说明 |
|---|---|
| rasp_id | RASP agent id |
| app_id | 应用ID |
| event_type | 日志类型 |
| event_time | 事件发生时间 |
| request_id | 当前请求ID |
| request_method | 请求方法 |
| intercept_state | 拦截状态 |
| attack_source | 攻击来源IP |
| target | 被攻击目标域名 |
| server_hostname | 服务器主机名 |
| server_ip | 服务器IP |
| server_type | 应用服务器类型 |
| server_version | 应用服务器版本 |
完整字段说明参考:
https://rasp.baidu.com/doc/setup/log/main.html#format
五、Django报警接收应用开发
1. 环境准备
安装Django:
pip install django
2. 创建Django项目
使用PyCharm创建新项目:
- 选择Django项目类型
- 输入项目名称
- 点击CREATE按钮
3. 配置设置
修改settings.py:
ALLOWED_HOSTS = ['*'] # 允许所有主机访问
# 可选:注释掉CSRF中间件以简化测试
# 'django.middleware.csrf.CsrfViewMiddleware',
4. 创建视图处理报警
在views.py中:
import json
def openraspalarm(request):
if request.method == 'POST':
postBody = request.body
json_result = json.loads(postBody)
print('完整的JSON字符串如下:\n {0}'.format(json_result))
print(json_result['app_id'])
data = json_result['data']
print('data长度为{0}'.format(len(data)))
for i in range(len(data)):
print('\033[45m第{0} 个攻击\033[0m'.format(i))
print('攻击源IP地址:{0}'.format(data[i]['attack_source']))
print('攻击类型:{0}'.format(data[i]['attack_type']))
# 打印更多字段...
5. 配置URL路由
在urls.py中添加:
from .views import openraspalarm
urlpatterns = [
path('alarm/', openraspalarm),
# 其他路由...
]
6. 启动服务器
配置Django运行参数:
- Host: 0.0.0.0
- Port: 8000
确保防火墙开放8000端口。
六、测试与验证
-
配置OpenRASP将报警推送到Django应用:
- 报警接收URL: http://
:8000/alarm/
- 报警接收URL: http://
-
运行自动化攻击脚本生成攻击事件
-
观察Django控制台输出的报警信息
七、扩展功能建议
- 数据存储:将报警信息存入数据库
- 可视化:使用Django admin或自定义界面展示报警
- 报警通知:集成邮件、短信等通知方式
- 统计分析:对攻击类型、频率等进行统计分析
八、参考资料
- OpenRASP官网:https://rasp.baidu.com
- OpenRASP安装文档:https://rasp.baidu.com/doc/install/software.html
- OpenRASP测试用例:https://rasp.baidu.com/doc/install/testcase.html
- OpenRASP日志格式:https://rasp.baidu.com/doc/setup/log/main.html#format
- OpenRASP内部原理:https://rasp.baidu.com/download/OpenRASP%20Internals.pdf