侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

记一起请求外带攻击OOB处理过程

再见理想
2023-05-26 / 0 评论 / 0 点赞 / 2,515 阅读 / 1,358 字

一,安全告警详情

请求带外攻击(OOB)域名告警,常发生的场景是主机上进程向一个特定的域名进行请求,请求的域名经常被用于带外攻击外传数据。攻击者常常会使用在payload中指定漏洞利用成功后请求目标域名,然后通过观察特定的域名是否被请求来判断攻击是否成功。

二,告警排查

2.1 日志分析

查看业务日志,发现了一个Hystrix的异常,正是跳转到了这个异常域名。业务代码中并没有查询到这个异常域名,那它怎么就转发跳转到这域名了?

2.2 漏洞信息

经过查询,发现这是Hystrix的一个漏洞。 Spring Cloud Netflix,2.2.4之前的2.2.x版本,2.1.6之前的2.1.x版本以及较旧的不受支持的版本允许应用程序使用Hystrix Dashboard proxy.stream端点向服务器托管可访问的任何服务器发出请求仪表板。恶意用户或攻击者可以将请求发送到不应公开公开的其他服务器。

2.3 原因分析

使用Hystrix Dashboard proxy.stream端点向服务器托管可访问的任何服务器发出请求仪表板:

Hystrix Dashboard是一个用于监视Hystrix断路器的可视化工具,可以帮助开发人员快速诊断和解决应用程序中的故障。在使用Hystrix Dashboard时,需要使用proxy.stream端点向服务器托管可访问的任何服务器发出请求。

Spring Cloud Netflix Hystrix Dashboard SSRF文章地址

2.4 复现过程

起本地服务,请求以下地址:服务地址(ip+端口)拼上“/proxy.stream?origin=目标网址地址”, 查看日志与告警时日志一致,链接跳转到指定网站。

三,告警处理

漏洞发生时,第一时间在安全组出方向对异常域名ip进行限制,拒绝跳到对应的网站。其次,对现有安全组进行分析,发现安全组配置不合理,通过服务器ip+端口方式访问到服务,公网ip暴露情况下,有较大的风险。

可以对安全组进行优化,尽量开放和暴露最少的端口。开放80/443端口,Nginx作为流量入口,所有服务均通过 Nginx 代理,在Nginx侧对URL进行校验限制。实现对入方向的安全把控。

3.1 安全组设计

安全组规则设计,应遵循最小原则,尽量开放和暴露最少的端口,在通用安全组限制ip访问,只允许相关机器内外网ip访问。具体实现包括通用安全组、防御通用安全组、实例独有安全组。

3.2 Nginx 拒绝含有proxy.stream字符串的请求

在对应域名的规则里面,对含有‘/proxy.stream’字符串的请求进行拒绝。

location /proxy.stream {
    deny all;
}

3.3 Linux 防火墙拒绝含有proxy.stream字符串的请求

出了在Nginx层做拦截,还能在Linux防火墙处理。Linux的防火墙是一个非常重要的组件,可以帮助保护计算机网络免受恶意攻击。iptables是Linux中最常用的防火墙程序之一,它提供了一种基于规则的策略,可以过滤网络流量并控制网络连接。

iptables的规则由若干条规则链(Rule Chain)组成,每个规则链包含若干规则(Rule)。当网络数据包到达Linux主机时,iptables会将其与规则链中的每个规则进行匹配,如果匹配成功,iptables将执行该规则指定的操作。

对于特定字符串的过滤,iptables提供了一种字符串匹配模块(string match module),使用这个模块可以实现对网络数据包中携带的数据进行字符串匹配,并根据匹配结果进行过滤。

添加防火墙规则:

# 查看当前防火墙规则
iptables -L

# 添加新的防火墙规则,拒绝所有包含“proxy.stream”字符串的请求:
iptables -A INPUT -m string --string "proxy.stream" --algo bm -j DROP

# 再次执行以下命令,查看当前防火墙规则
iptables -L

注意,如果您使用的是使用命令添加的规则,则必须使用相同的命令删除规则。如果使用了不同的命令添加规则,删除规则可能会失败或不起作用。所以需要删除刚新增的带有proxy.stream字符串的规则,需要使用相同的命令,不同是将-A替换成-D即可:

iptables -D INPUT -m string --string "proxy.stream" --algo bm -j DROP

通过3.1,限制住了流量只能通过Nginx流入到服务器具体的进程当中;再通过3.2,在Nginx对请求进行校验,即可将恶意请求拦截起来。

0

评论区