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

打印 上一主题 下一主题

主题 791|帖子 791|积分 2373

免责声明 本教程仅为正当的讲授目标而准备,严禁用于任何形式的违法犯罪活动及其他商业举动,在使用本教程前,您应确保该举动符合本地的法律法规,继承阅读即表现您需自行承担所有操纵的后果,如有贰言,请立即制止本文章阅读。
背景 作为一个小型网站的站长,往往面临资源有限(没有RMB)、人手不敷的环境(没人就自己),根本都是1个人负责运营一个或多个网站。
为了提拔运维服从及网站的安全性,我们必要解决以下问题:
制止频仍的切换安全体系查看日志 制止人工封禁IP的傻瓜式操纵 将供给详情及告警处置及时通知给网站管理者 减少因网络安全产生的运维问题 本文主要介绍雷池WAF、钉钉联动的场景,但是实际环境下,可能会产生更多的联动效果,比如:雷池自动化拦截通知告警、蜜罐捕捉告警通知等。
媒介 在上一期雷池WAF自动化安全运营实操案例中,我们通过日志文本的方式记录WAF告警,并结合inotify-tools监控日志文件的变革来触发钉钉告警通知。然而,这种方法可能会引发一些问题,比方日志提取非常、日志内容截断等。此外,我更渴望直接获取完备的攻击payload,以便复现攻击并验证其是否成功。
雷池WAF还提供了频率限定的黑名单功能,比方通过限定频仍访问或攻击来封禁IP。为了进步运营服从,我渴望可以或许通过钉钉、飞书等工具及时获取封禁IP的通知,而不是手动登录WEB页面查看。
上篇实操案例中,我们使用了多个shell脚本,流程略显繁琐。因此,我开发了一套自动化步伐,直接从雷池WAF数据库提取数据,不再依赖日志存储。同时,该步伐可以或许自动推送攻击告警和频仍限定的黑名单告警,简化了整个安全运营过程。
软件介绍
雷池社区版 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的WAF,核心检测能力由智能语义分析算法驱动,目前分为社区版、专业版和企业版。
SafeLine_Push 雷池WAF推送小助手,可以自动化实现WAF告警日志推送、频仍限定告警IP推送(相称于解开了付费版的部门封印)
预计实现效果 原本的效果

想要实现的效果

要想可以或许实现将完备的哀求包截取到的环境,那么就必要对WAF数据库的另外一个表下手,这个表为PUBLIC.MGT_DETECT_LOG_DETAIL
原本我只是对PUBLIC.MGT_DETECT_LOG_BASIC这个表举行查询操纵,上篇中已经提到了,此时有2个方法,一种为在原有数据库中举行查询,大概是将数据库的这两个表举行迁移,迁移到新的数据库中来举行操纵。
雷池WAF中频仍限定的告警效果预计如下:

前置工作 映射雷池WAF数据库端口
  1. #!/bin/bash
  2. # 运行安装/更新脚本
  3. bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/upgrade.sh)"
  4. # 进入 /data/safeline 目录
  5. cd /data/safeline || { echo "/data/safeline not found!"; exit 1; }
  6. # 检查 compose.yaml 是否存在并备份
  7. if [ -f compose.yaml ]; then
  8.     echo "Backing up the current compose.yaml"
  9.     cp compose.yaml compose.yaml.bak
  10. else
  11.     echo "compose.yaml not found in /data/safeline!"
  12.     exit 1
  13. fi
  14. # 检查是否已经存在端口映射
  15. if grep -q "5433:5432" compose.yaml; then
  16.     echo "PostgreSQL port mapping already exists."
  17. else
  18.     # 使用 sed 插入 ports 字段到 postgres 服务中
  19.     sed -i '/container_name: safeline-pg/a\    ports:\n      - 5433:5432' compose.yaml
  20.     echo "PostgreSQL port mapping added to 5433:5432."
  21. fi
  22. # 重新启动容器,应用更改
  23. docker compose down --remove-orphans && docker compose up -d
  24. echo "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开发环境哟!
目前已实现效果 攻击告警推送

频仍限定处理推送

设置开机自启动 在/etc/rc.local中追加nohup /var/scripts/SafeLine_Push_linux_amd64 > /dev/null 2>&1 &
后记 在测试中发现,频仍的告警有些烦人,比如:我为了产生短时间内同一IP大量攻击,进入频仍限定的封禁告警推送,开始频仍攻击后,收到了大量的攻击告警推送以及其他一些问题待修复!
互相探讨及待修复 短时间大量的攻击,告警推送怎样处理? IP归属地的优化 频仍告警推送中触发规则及拦截效果优化 自动化保留频仍攻击的IP并上传威胁情报

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表