雷池WAF自动化实现安全运营实操案例终极篇

server/2024/10/22 9:56:47/

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。

背景 作为一个小型网站的站长,往往面临资源有限(没有RMB)、人手不足的情况(没人就自己),基本都是1个人负责运营一个或多个网站。

为了提升运维效率及网站的安全性,我们需要解决以下问题:

避免频繁的切换安全系统查看日志 避免人工封禁IP的傻瓜式操作 将供给详情及告警处置及时通知给网站管理者 减少因网络安全产生的运维问题 本文主要介绍雷池WAF、钉钉联动的场景,但是实际情况下,可能会产生更多的联动效果,比如:雷池自动化拦截通知告警、蜜罐捕获告警通知等。

前言 在上一期雷池WAF自动化安全运营实操案例中,我们通过日志文本的方式记录WAF告警,并结合inotify-tools监控日志文件的变化来触发钉钉告警通知。然而,这种方法可能会引发一些问题,例如日志提取异常、日志内容截断等。此外,我更希望直接获取完整的攻击payload,以便复现攻击并验证其是否成功。

雷池WAF还提供了频率限制的黑名单功能,例如通过限制频繁访问或攻击来封禁IP。为了提高运营效率,我希望能够通过钉钉、飞书等工具实时获取封禁IP的通知,而不是手动登录WEB页面查看。

上篇实操案例中,我们使用了多个shell脚本,流程略显繁琐。因此,我开发了一套自动化程序,直接从雷池WAF数据库提取数据,不再依赖日志存储。同时,该程序能够自动推送攻击告警和频繁限制的黑名单告警,简化了整个安全运营过程。

软件介绍

雷池社区版 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的WAF,核心检测能力由智能语义分析算法驱动,目前分为社区版、专业版和企业版。

SafeLine_Push 雷池WAF推送小助手,可以自动化实现WAF告警日志推送、频繁限制告警IP推送(相当于解开了付费版的部分封印)

预计实现效果 原本的效果 image.png

想要实现的效果 image.png

要想能够实现将完整的请求包截取到的情况,那么就需要对WAF数据库的另外一个表下手,这个表为PUBLIC.MGT_DETECT_LOG_DETAIL

原本我只是对PUBLIC.MGT_DETECT_LOG_BASIC这个表进行查询操作,上篇中已经提到了,此时有2个方法,一种为在原有数据库中进行查询,或者是将数据库的这两个表进行迁移,迁移到新的数据库中来进行操作。

雷池WAF中频繁限制的告警效果预计如下:

image.png

前置工作 映射雷池WAF数据库端口

#!/bin/bash# 运行安装/更新脚本
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"# 进入 /data/safeline 目录
cd /data/safeline || { echo "/data/safeline not found!"; exit 1; }# 检查 compose.yaml 是否存在并备份
if [ -f compose.yaml ]; thenecho "Backing up the current compose.yaml"cp compose.yaml compose.yaml.bak
elseecho "compose.yaml not found in /data/safeline!"exit 1
fi# 检查是否已经存在端口映射
if grep -q "5433:5432" compose.yaml; thenecho "PostgreSQL port mapping already exists."
else# 使用 sed 插入 ports 字段到 postgres 服务中sed -i '/container_name: safeline-pg/a\    ports:\n      - 5433:5432' compose.yamlecho "PostgreSQL port mapping added to 5433:5432."
fi# 重新启动容器,应用更改
docker compose down --remove-orphans && docker compose up -decho "Containers restarted with the updated compose.yaml"

这个脚本适用于每次更新时,重新映射数据库端口,如果已经最新版,可以注释掉更新脚本命令。

配置数据库配置文件 通过cat /data/safeline/.env | grep POSTGRES_PASSWORD | tail -n 1 | awk -F ‘=’ ‘{print $2}‘查看数据库密码

然后在/var/scripts/.pgpass中写入如下代码,然后给这个文件添加600的权限。

localhost:5433:safeline-ce:safeline-ce:abcd #把abcd替换成第2步中获取到的密码

消息推送配置 从GitHub中下载文件

git clone https://github.com/Fiary-Tale/SafeLine_Push

从上述下载的为源代码及已编译的版本(存放于mark文件夹中)。

配置文件 VulConfig.json 该配置文件映射了雷池WAF数据库中部分字段数据,用于告警推送中的触发规则,这个配置文件可按照需求自行填写,目前并未完全覆盖全部触发规则(本人在数据库中没有找到与之相对应的中文触发规则)

注意:这个文件一定要放入到/var/scripts/VulConfig.json

{ “replacements”: { “m_sqli”: “SQL注入”, “m_xss”: “跨站脚本攻击”, “m_csrf”: “跨站请求伪造”, “m_cmd_injection”: “命令执行” } } config.yaml 该配置文件为消息推送时使用的token及推送方法,目前只编写了钉钉和Server酱,其他可自行补充!

注意:这个文件一定要放入到/var/scripts/config.yaml

token: “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx” method: “dingtalk” # 可以是 “dingtalk” 或 “serverchan”

GeoLite2-City.mmdb 该文件非配置文件,为开源的Geo数据库,但为必须文件,这个文件用于查询IP的归属地,某些方面无法与雷池WAF数据库自身的归属地相比,但查询数据库中的归属地有些繁琐,因此采用Geo查询归属地。

注意:归属地GeoLite2-City.mmdb文件一定要与程序在同一目录

注意:在钉钉推送的安全设置中,我设置的是自定义关键词:入侵检测事件

build.bat 我是于Windows的环境中开发的,因此我编写了一个bat文件,如果有需要大家可以自行编译,记得安装golang开发环境哟!

目前已实现效果 攻击告警推送 image.png

频繁限制处理推送

image.png

设置开机自启动 在/etc/rc.local中追加nohup /var/scripts/SafeLine_Push_linux_amd64 > /dev/null 2>&1 &

后记 在测试中发现,频繁的告警有些烦人,比如:我为了产生短时间内同一IP大量攻击,进入频繁限制的封禁告警推送,开始频繁攻击后,收到了大量的攻击告警推送以及其他一些问题待修复!

互相探讨及待修复 短时间大量的攻击,告警推送如何处理? IP归属地的优化 频繁告警推送中触发规则及拦截结果优化 自动化保留频繁攻击的IP并上传威胁情报


http://www.ppmy.cn/server/133865.html

相关文章

Flutter 11 Android原生项目集成Flutter Module

本文主要讲解如何在已有的Android原生老项目中集成Flutter模块。 实现流程: 1、在Android原生项目根目录下,创建Flutter Module; 2、修改Android原生项目settings.gradle,绑定 Flutter Module; 3、修改Android原生…

ChatGPT 现已登陆 Windows 平台

今天,OpenAI 宣布其人工智能聊天机器人平台 ChatGPT 已开始预览专用 Windows 应用程序。OpenAI 表示,该应用目前仅适用于 ChatGPT Plus、Team、Enterprise 和 Edu 用户,是一个早期版本,将在今年晚些时候推出"完整体验"。…

Apache Doris简介

1.Doris 概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ) ,在百度内部, 有超过 200 个产品线在使用, 部署机器超过 1000 台, 单一 业务最大可达到上百…

超越 React Query:探索更高效的数据请求策略

你好,开发者们! 在前端开发的海洋中,我们常常遇到组件间通信的难题。你是否也曾为如何优雅地在组件间传递信息而头疼?今天,我想和大家分享一个让我眼前一亮的解决方案——使用 alova。 跨组件触发请求的挑战 想象一…

JavaScript 第25章:Vue 基础

在学习JavaScript的第25章关于Vue的基础知识时,我们将从以下几个方面来了解Vue框架,并通过一个实战案例来巩固所学的知识。 Vue概述 Vue.js是一个用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。…

Android15之解决scrcpy显示Launcher桌面不全问题(二百三十七)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

深入探讨 HTTP 请求方法:GET、POST、PUT、DELETE 的实用指南

文章目录 引言GET 方法POST 方法PUT 方法DELETE 方法小结适用场景与特点总结最佳实践 在 API 设计中的重要性 引言 HTTP 协议的背景:介绍 HTTP(超文本传输协议)作为互联网的基础协议,自 1991 年发布以来,成为客户端和…

git禁用 SSL 证书验证

命令 git config --global http.sslVerify false注意:禁用 SSL 证书验证是不安全的,可能会使你的 Git 操作面临中间人攻击的风险。因此,只有在你确信网络环境是安全的,且了解禁用 SSL 验证的后果时,才应该使用这个配置…