如何使用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创建新项目:

  1. 选择Django项目类型
  2. 输入项目名称
  3. 点击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端口。

六、测试与验证

  1. 配置OpenRASP将报警推送到Django应用:

    • 报警接收URL: http://:8000/alarm/
  2. 运行自动化攻击脚本生成攻击事件

  3. 观察Django控制台输出的报警信息

七、扩展功能建议

  1. 数据存储:将报警信息存入数据库
  2. 可视化:使用Django admin或自定义界面展示报警
  3. 报警通知:集成邮件、短信等通知方式
  4. 统计分析:对攻击类型、频率等进行统计分析

八、参考资料

  1. OpenRASP官网:https://rasp.baidu.com
  2. OpenRASP安装文档:https://rasp.baidu.com/doc/install/software.html
  3. OpenRASP测试用例:https://rasp.baidu.com/doc/install/testcase.html
  4. OpenRASP日志格式:https://rasp.baidu.com/doc/setup/log/main.html#format
  5. OpenRASP内部原理:https://rasp.baidu.com/download/OpenRASP%20Internals.pdf
使用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示例: 3. 核心代码实现 四、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: 2. 创建Django项目 使用PyCharm创建新项目: 选择Django项目类型 输入项目名称 点击CREATE按钮 3. 配置设置 修改 settings.py : 4. 创建视图处理报警 在 views.py 中: 5. 配置URL路由 在 urls.py 中添加: 6. 启动服务器 配置Django运行参数: Host: 0.0.0.0 Port: 8000 确保防火墙开放8000端口。 六、测试与验证 配置OpenRASP将报警推送到Django应用: 报警接收URL: http:// :8000/alarm/ 运行自动化攻击脚本生成攻击事件 观察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