# 解读“重定向SMB”攻击

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2015-04-17T09:06:00Z
Canonical: https://wepostx.com/topics/788

> 乌云历史资料归档
>
> **原始作者：** 腾讯电脑管家
> **原始编号：** superkieran-wooyundrops:539
> **原始发布时间：** 2015-04-17 17:06
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

前几天Cylance发布了一个影响Windows系统的漏洞，攻击者可以通过重定向到SMB协议的方式，利用“中间人攻击”来盗取用户认证信息。这个攻击究竟是怎么回事？“重定向SMB”又是什么呢？电脑管家漏洞防御团队对这些问题做了详细的技术分析，现将分析结果分享给大家。

# 0x01 SMB/SMB2(Server Message Block)

先简单介绍一下这次事件的主角SMB。
SMB是对CIFS(Common Internet File System)协议的扩展，主要用于访问网络上的共享文件以及打印服务。SMB和其它协议的关系如下：

![原文图片](/media/2016/06/7ecc30be386c7295563b5ec3b440d8a4)

SMB可以直接使用TCP端口进行传输(端口445)，也可以使用NetBIOS进行传输(TCP端口139)。以直接TCP端口传输为例，每一条SMB消息必须有一个4字节的包头。包头第一个字节为0（network byte order，下同），紧跟着的3字节表示SMB消息的长度；包体是变长的。

![原文图片](/media/2016/06/c56fb5731a0995e7dcdca95f6824ffdd)

在windows vista以后，引入了SMB2协议，在原有的SMB协议基础上扩展了部分字段。
SMB/SMB2认证有多种协议，使用最多的就是NTLM认证协议。
NTLM支持 Challenge/Response方式进行加密通信，安全认证的消息序列如下：

![原文图片](/media/2016/06/ffcd837befcbaca83c5f4a9689f1ef16)

# 0x02 利用HTTP重定向到SMB协议

以Win7x86+IE11为例，看看IE如何处理HTTP返回的重定向请求。

![原文图片](/media/2016/06/030fdd818bde07c188e12d9eff6ba489)

![原文图片](/media/2016/06/33471cc2601a5aaed996efbfd0f61c70)

IE获得HTTP请求返回的状态码后，如果是代表重定向的301、302、303、307，跳转到处理重定向的逻辑，调用CINetHttp::RedirectRequest处理重定向请求。
构造一个重定向到file协议的网页

![原文图片](/media/2016/06/40726e61a8a0321bfc291204e45a818b)

当IE访问这个网页时，可以抓到访问SMB服务器的数据包

![原文图片](/media/2016/06/467ee529956841e5cd060f5d7d77beb1)

可见本机当前用户的登录凭证通过SMB2协议发送服务器进行认证了。如果这个服务器（上图中的10.4.75.32）是被恶意劫持过的“中间人”，那么用户的登录凭证就泄漏了。
可能的攻击方式不局限于网页访问，只要能够劫持正常的HTTP网络请求，就可以重定向到SMB协议将个人信息发送到恶意服务器上。

# 0x03 防范建议

可以看到，重定向到SMB协议是一个很大的隐患，非用户主动发起的SMB请求都应该禁止；通过SMB协议访问外网共享服务器时也需要特别谨慎。
作为防范建议，可以关闭对TCP 139和445端口的访问。如果确实需要访问网络上的共享文件或者是打印服务，在确认服务器可信的前提下，临时打开TCP 139和445的端口访问。

## Replies
