Talk is cheap, Show me the code !

WannaCryptor防御

windows    WannaCryptor  smb 

最近爆发了一种”WannaCryptor”蠕虫病毒,该病毒通过利用NSA开发的ETERNALBLUE(永恒之蓝)攻击工具 – 对应远程命令执行漏洞MS17-010,攻击window的smbv1协议,然后加密本地所有文件来感染电脑。其实我对windows并不熟悉,这篇文章只是总结下别人的防御方案,来帮需要的人来避免被病毒攻击感染。

  • 被感染后支付BitCoins是无效的,有人尝试过支付但并没有感染,反而是鼓励犯罪。
  • 被感染后的加密文件基本无解,因为该病毒使用AES和RAS加密算法,公钥和私钥是唯一配对,只能通过使用唯一的私钥才能解密文件。
  • 该病毒的加密强度较大,暴力破解需要很大运算量,即使使用超级计算机也需要很长时间,暴力破解基本没戏。
  • 市面上有人宣称能破解加密,基本是扯淡,其实对应工具是恢复磁盘数据,在原数据没有被覆盖前还能有点效果,并且恢复的成功率很小。

根据上面的信息,被感染的机器基本无解,除非能找到对应的唯一私钥。所以没有感染的机器,只能做好防御措施。

据安全人士逆向分析,病毒会随机选择一部分文件使用内置的RAS公钥来进行加密,目的是解密程序提供的免费解密部分文件功能。能解密的文件路径在f.wnry文件中,使用的私钥也在本地机器。

1.打系统补丁

去年NAS攻击工具泄露之后,今年三月份微软已经发布了MS17-010的补丁,我们首先需要做的就是安装系统补丁。补丁详情见Microsoft 安全公告 MS17-010 - 严重

具体操作: 开始菜单 => 控制面板 => windows update => 更改设置(开启检查更新) => 检查更新 => 在更新列表中找到对应补丁或者勾选全部补丁 => 安装完补丁之后重启电脑

安装完补丁之后,重启电脑发现桌面右下角有白字 “此 Windows 副本不是正版” 。哈哈,哭笑不得,可以考虑买微软股票了。

2.修改host

据安全人士分析,病毒启动时会主动访问一个网址http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com。如果连接成功,则退出程序,不执行加密文件操作。

该url本来是不存在的,可能是病毒作者想通过该方式来控制病毒传播的一种手段吧。后来,一位英国安全研究员注册了这个域名,并搭建了服务使该地址可以被访问,拯救了很多机器。但是我国GFW的存在,访问该地址会出现严重丢包,造成连接失败。但就是我们可以通过修改C:\Windows\System32\drivers\etc\hosts文件,将该地址指向一个可以访问的ip(比如百度之类网站,或者自己搭建一个80端口的服务):

iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com 180.97.33.108

不过新病毒变种2.0已经出来了,传播逻辑并不会去验证该地址。

3.关闭相应端口或服务

在大陆的大部分电信运营商(中国电信之类),在几年前就屏蔽了80、135、139、445、8080等端口,在网络中对于目的端口为此类端口的请求,基本都被运营商过滤了。所以这次大陆教育网的病毒感染情况比较严重,其他网络相对安全。不过,对于内网的端口防范我们还是需要警惕,假如有台电脑感染了病毒,然后该电脑接入了某个没有对应端口防御的内网,那么整个内网的机器都将可能被病毒感染。

windows上会默认开启NetBIOS服务,一个网络基本的输入/输出系统,用于数据源和目的地的数据交换。NetBIOS基于TCP/IP协议,开启服务之后会默认监听135、137、138、139和445端口,这些端口很容易被人利用,如果没什么特殊需求可以都关闭。

  • 135端口,主要用于为RPC通讯提供服务端口的映射,提供DCOM(分布式组件对象模型)服务。
  • 137端口,主要用于局域网中提供计算机名字和IP地址查询服务。
  • 138端口,提供NetBIOS环境下的计算机名浏览功能。
  • 139端口,基于SMB协议,用于获得NetBIOS/SMB服务(共享文件、打印机或UNIX中的samba服务)。
  • 445端口,基于CIFS协议,提供局域网中文件或打印机共享服务(和139端口作用一样)。

查看监听端口

通过netstat命令可以查看机器上是否开启对应端口:

netstat -ano | findstr [port]

关闭135端口

关闭135端口最有效的办法是禁用RPC服务:

控制面板 => 管理工具 => 服务 => Remote Procedure Call => 右键属性 => 修改启动类型设置"禁用"

# 重启RPC
运行 => regedit.exe => HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RpcSs => Start项的键值设置为"0x02" => 重启系统

但是很多服务器功能依赖RPC,比如数据库查询、远程拨号、outlook等,我们只需要禁用DOM,同样会达到禁用RPC的效果,实现间接关闭135端口的目的。

运行 => 组件服务\计算机\我的电脑 => 右键属性 => 默认属性 => 去掉勾选"在此计算机上启用分布式DOM" => 重启系统

关闭137、138、139端口

禁用基于TCP/IP协议下的NetBIOS服务:

控制面板 => 网络和共享中心 => 更改适配器设置 => 正在使用的网络 => 右键属性 => 去掉勾选"" => Internet协议版本4(TCP/IPv4) => 属性 => 高级 => WINS => 勾选"禁用TCP/IP上的NetBIOS" => 重启系统

关闭445端口

说实话,我对windows关闭开启服务并不熟悉,开启关闭端口也不熟悉,注册表机制实在是过于复杂。下面这部分内容转载自四哥 – 沈沉舟的博客内容。

1.禁用共享服务lanmanserver

sc config lanmanserver start= disabled
net stop srv

禁用Server服务之后,SMB会话就无法建立了。但是已连接的连接和监听端口还是会出现在netstat输出中,我们可以通过下面的操作:

运行 => regedit.exe => HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters => "TransportBindName"项的键值"Device"删除,置空 => 重启系统

重启之后通过netstat -ano看不到445端口,但是客户端SMB机制也被取消了。

2.禁用NetBT驱动

彻底禁用了系统的SMB机制,客户端和服务端支持都被取消了。

# 停止NetBT驱动,需要先关掉相应服务
# rdr对应lanmanworkstation服务,srv对应lanmanserver服务
net stop rdr
net stop srv
net stop netbt

“NetBios over Tcpip”驱动可以手工停止,但不能手工启动,只能重启才可恢复。为了阻止NetBT驱动在重启OS时自动加载,必须将启动类型由缺省的1改成4:

运行 => regedit.exe => HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT => 修改"Start"项的键值为"00000004"(dword类型,即十六进制)

sc config netbt start= disabled

3.修改注册表

第一种禁用了服务端和客户端的SMB支持,但是客户端SMB机制的支持有时候还是需要的。通过修 改注册表可以实现禁用由TCP层直接承载的SMB协议,但继续启用NetBT。

运行 => regedit.exe => HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters => 新建DWORD类型的"SmbDeviceEnabled",值为00000000 => 重启系统

4.禁用设备

这将彻底禁用系统中的SMB机制,客户端、服务端支持均被取消。

运行 => devmgmt.msc => 查看 => 显示隐藏设备=> 非即插即用驱动程序 => NETBT => 右键属性 => 启动类型修改为"已禁用" => 重启系统

5.修改监听的端口

逆向分析netbt.sys之后,发现可以通过注册表改变445/TCP、445/UDP:

运行 => regedit.exe => HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Smb => 将"SessionPort"项键值修改为dword类型的"00000000",将"DatagramPort"项键值修改为dword类型的"00000000" => 重启系统

重启系统之后,系统自动处理成1/TCP、1/UDP。如将SessionPort指定成135/TCP,在争夺中原EPM功能将丧失,SMB功能争夺成功。

如果开启了ipv6之后需要额外修改注册表,达到相同效果。

运行 => regedit.exe
    => HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters => 修改"UseNewSmb"项的键值为dword类型的"00000000"
    => HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Smb => 将"SessionPort"项键值修改为dword类型的"000001bd",将"DatagramPort"项键值修改为dword类型的"000001bd"
    => 重启系统

系统启动IPv6之后,增加了一个驱动smb.sys,处理IPv6下的SMB协议。UseNewSmb非0时将使用smb.sys,该驱动中固化了445/TCP。

4.开启防火墙

控制面板 => Windows防火墙 => 打开或关闭Windows 防火墙 => 启用防火墙 => 确认
                         => 高级设置 => 入站规则 => 新建规则 => 端口 => TCP 特定本地端口 445 => 阻止连接 => "域"、"专用"、"计算机"全部勾选 => 输入名称,确认

引用:

如何关闭445/TCP口


Posted on By legolas

本站点legolasng.github.io的评论插件已经替换为Disqus,需要FQ才能使用。