0x00 前言

最近,NSA渗透工具被曝光,其中包含多个Windows远程漏洞利用工具,影响很大

本文不会具体介绍这些远程漏洞工具的使用方法,而是站在防御者的角度,介绍如何利用这些工具,更好的去保护自己的内网

0x01 简介

本文将要介绍以下内容:

- FuzzBunch使用流程
- Smbtouch功能介绍
- 编写python脚本实现批量检测内网是否存在可被SMB和NBT协议攻击的漏洞
- 根据日志掌握内网主机信息

检测的SMB和NBT远程提权漏漏洞列表如下:

- ETERNALBLUE
- ETERNALCHAMPION
- ETERNALROMANCE
- ETERNALSYNERGY

注:

个人认为,以上四个漏洞危害最大,尤其适用于内网工作组环境

0x02 FuzzBunch

FuzzBunch框架,类似于metasploit,包含探测、攻击、利用等各种功能(仅根据目前泄露的资料)

下载地址:

https://github.com/fuzzbunch/fuzzbunch

注:

fuzzbunch提取自https://github.com/x0rz/EQGRP_Lost_in_Translation

1. 配置环境

安装python2.6,参考下载地址:

http://dl.nexiao.com/file.html?url=http%3A//b9.gpxz.net/201402/python-2_gpxz.6_gpxz.6_gpxz.rar

安装pywin32,参考下载地址:

https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win32-py2.6.exe/download

2. 添加环境变量 c:python26

3. 执行fb.py进入命令行操作模式

报错

原因:

泄露的资料里缺少listeningposts文件夹

解决办法:

在shadowbroker-masterwindows下创建个listeningposts文件夹

或者修改fb.py,修改好的文件可在如下链接下载:

https://raw.githubusercontent.com/3gstudent/test/master/fb.py

再次执行fb.py,成功

如图

2-1.png

注:

执行start_lp.py可进入界面操作模式,如下图,此处不再过多介绍

1492768229130825.png

4. 设置启动参数如下:

[?] Default Target IP Address [] : 
[?] Default Callback IP Address [] : 
[?] Use Redirection [yes] : 
[?] Base Log directory [D:logs] :

进入fb的shell后输入use,可获得支持的插件目录

插件共分为五大类,分别为:

- Touch        信息探测、漏洞测试
- ImplantConfig   植入工具
- Exploit       漏洞利用
- Payload      
- Special       专用

每一个插件在文件夹下对应三个文件:

- .exe
- .fb
- .xml

例如Special下的Eternalblue-2.2.0,对应shadowbroker-masterwindowsspecials下的

- Eternalblue-2.2.0.exe
- Eternalblue-2.2.0.fb
- Eternalblue-2.2.0.0.xml

查看文件内容可发现:

– exe能够单独执行(前提是找到需要的dll文件)

– exe读取xml文件中保存的配置参数(需要二次修改)

也就是说,只需要单独的exe和xml配置文件,加上需要的支持文件,就能够执行对应的插件,不需要完全安装FuzzBunch框架

0x03 Smbtouch

位于Touch类下,文件位于/windows/touches/,用于探测目标主机是否包含SMB和NBT远程提权漏漏洞,主要测试以下四个漏洞:

- ETERNALBLUE
- ETERNALCHAMPION
- ETERNALROMANCE
- ETERNALSYNERGY

1.命令行下测试

执行fb.py,进入命令行操作模式

设置好扫描参数,依次执行:

use Smbtouch
execute

如下图

3-1.png

接着执行插件,回显如下图

3-2.png

探测成功,获得如下信息:

系统:Windows Server 2003 3790 Service Pack 2 x86

可用漏洞:

- ETERNALROMANCE  - FB
- ETERNALCHAMPION - DANE/FB

接着使用具体的漏洞攻击即可

注:

被攻击主机需要开放445端口,测试环境可选择关闭防火墙或是手动打开445端口

命令行开启445端口的代码如下:

netsh advfirewall firewall add rule name="445" protocol=TCP dir=in localport=445 action=allow

2.直接执行exe

进入文件夹shadowbroker-masterwindowstouches,直接执行Smbtouch-1.1.1.exe

提示缺少dll,如图

3-3.png

在文件夹shadowbroker-masterwindowslibx86-Windows下找到缺失的dll,补全

直接执行Smbtouch-1.1.1.exe,回显提示:

TargetIp must have a value assigned.

所以接下来需要编辑Smbtouch-1.1.1.0.xml文件

需要添加如下参数:

- NetworkTimeout:60
- TargetIp:127.0.0.1
- TargetPort:445
- Protocol:SMB
- Credentials:Anonymous

对照xml文件格式,添加代码`<value>data</value>`,并且重命名为Smbtouch-1.1.1.xml

注:

文件名不是原来的Smbtouch-1.1.1.0.xml

修改好的xml文件可参照:

https://github.com/3gstudent/Smbtouch-Scanner/blob/master/Smbtouch-1.1.1.xml

再次执行Smbtouch-1.1.1.exe

回显如图

3-4.png

3-5.png

成功执行,并且回显xml文件内容

0x04 Smbtouch Scanner

基于以上内容,如果想尝试对指定网段进行扫描,那么需要反复修改xml配置文件,接着执行Smbtouch-1.1.1.exe进行探测

采用python自动实现以上操作,需要考虑如下问题:

- 执行Smbtouch-1.1.1.exe并获得回显
- 对回显内容进行解析,去掉多余部分
- 对范围ip地址解析
- 自动读写xml文件
- 生成log文件
- 多线程提高效率

完整代码可参考:

https://github.com/3gstudent/Smbtouch-Scanner

实际测试:

1.设置扫描ip段

如图

4-1.png

2.执行SmbtouchScanner.py

等待扫描完成,回显显示简要信息

如图

4-2.png

3.同级目录生成日志文件,显示详细信息

包含具体存在的漏洞,如图

4-3.png

4.补充

考虑到安全原因,此开源代码尚不支持多线程

0x05 防御建议

针对NSA的SMB和NBT远程提权漏漏洞,建议升级系统补丁,开启防火墙,限制445端口

限制445端口的命令行代码如下:

netsh advfirewall firewall add rule name="445" protocol=TCP dir=in localport=445 action=block

同时,为确保内网安全,可使用SmbtouchScanner.py对内网进行扫描检测

注:

目前Smbtouch-1.1.1.exe已被杀毒软件查杀

0x06 小结

本文介绍了如何使用python实现自动检测内网是否存在可被SMB和NBT协议攻击的漏洞,当然,泄露的漏洞不止以上4个,Touch插件也不只有Smbtouch

后续更新会同步至github:https://github.com/3gstudent/

0x00 前言

要对指定进程进行远程注入,通常使用Windows提供的API CreateRemoteThread创建一个远程线程,进而注入dll或是执行shellcode

Sysmon可用来监控和记录系统活动,可记录CreateRemoteThread操作

注入的方法不只有CreateRemoteThread,能否通过其他注入方式绕过Sysmon的监控呢?

Casey [email protected]在他的文章中给出了答案:

Shellcode Injection via QueueUserAPC – Hiding From Sysmon

地址如下:

http://subt0x10.blogspot.com/2017/01/shellcode-injection-via-queueuserapc.html

0x01 简介

本文将要介绍如下内容:

1. Sysmon配置测试,监控CreateRemoteThread操作

2. c++实现通过APC对Dll注入

3. 绕过Sysmon测试

4. Casey [email protected]分享的C#实现代码和用途

Sysmon:

可用来监控和记录系统活动,并记录到windows事件日志,包含如下事件:

Event ID 1: Process creation
Event ID 2: A process changed a file creation time
Event ID 3: Network connection
Event ID 4: Sysmon service state changed
Event ID 5: Process terminated
Event ID 6: Driver loaded
Event ID 7: Image loaded
Event ID 8: CreateRemoteThread
Event ID 9: RawAccessRead
Event ID 10: ProcessAccess
Event ID 11: FileCreate
Event ID 12: RegistryEvent (Object create and delete)
Event ID 13: RegistryEvent (Value Set)
Event ID 14: RegistryEvent (Key and Value Rename)
Event ID 15: FileCreateStreamHash
Event ID 255: Error

详情见https://technet.microsoft.com/en-us/sysinternals/sysmon

注:CreateRemoteThread为Event ID 8

Dll注入

常见方法:

创建新线程
设置线程上下背景文,修改寄存器
插入Apc队列
修改注册表
挂钩窗口消息
远程手动实现LoadLibrary

引用自http://www.cnblogs.com/uAreKongqi/p/6012353.html

Shellcode Injection via QueueUserAPC - Hiding From Sysmon:

c#实现,通过调用QueueUserAPC执行shellcode,可应用于InstallUtil.exe和Msbuild.exe,能够绕过Sysmon对Event ID 8: CreateRemoteThread的监控

文章地址:

http://subt0x10.blogspot.com/2017/01/shellcode-injection-via-queueuserapc.html

0x02 Sysmon简介

下载地址:

https://technet.microsoft.com/en-us/sysinternals/sysmon

以系统服务和驱动的方式安装在系统上

用来监控和记录系统活动,并记录到windows事件日志中

提供进程创建、网络连接以及文件创建时间更改等操作的详细信息

通过事件日志,可识别异常活动,了解攻击者在网络上的操作

注:

系统安装Sysmon后,新增服务Sysmon

如图

1.png

也就是说,如果攻击者获得了主机权限,通过查看已安装服务可以看到Sysmon的安装

安装

以默认配置安装:

sysmon -accepteula –i -n

以配置文件安装:

sysmon -c config.xml

配置文件config.xml格式示例如下:

注:

xml大小写敏感

<Sysmon schemaversion="3.20">      
<!-- Capture all hashes -->      
<HashAlgorithms>*</HashAlgorithms>      
<EventFiltering>        
<!-- Log all drivers except if the signature -->       
 <!-- contains Microsoft or Windows -->       
 <DriverLoad onmatch="exclude">          
<Signature condition="contains">microsoft</Signature>         
 <Signature condition="contains">windows</Signature>        
</DriverLoad>       
 <!-- Do not log process termination -->        
<ProcessTerminate onmatch="include" />       
 <!-- Log network connection if the destination port equal 443 -->        
<!-- or 80, and process isn't InternetExplorer -->        
<NetworkConnect onmatch="include">          
<DestinationPort>443</DestinationPort>          
<DestinationPort>80</DestinationPort>        
</NetworkConnect>        
<NetworkConnect onmatch="exclude">          
<Image condition="end with">iexplore.exe</Image>       
 </NetworkConnect>     
 </EventFiltering>    
</Sysmon>

注:

该示例引用自http://www.freebuf.com/sectool/122779.html

查看配置

sysmon -c

注:

配置属性保存在注册表如下位置:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesSysmonDrvParameters

如图

1492570728473215.png

查看日志记录

1.通过面板

位置如下:

Control PanelSystem and Security-View event logs
Applications and Services Logs-Microsoft-Windows-Sysmon-Operational

如图

1492570780693258.png

2.通过powershell查看,命令如下:

(管理员权限)

Get-WinEvent -FilterHashtable @{logname="Microsoft-Windows-Sysmon/Operational";}

监控并记录CreateRemoteThread

配置文件如下:

<Sysmon schemaversion="3.20">      
<!-- Capture all hashes -->      
<HashAlgorithms>*</HashAlgorithms>      
 <EventFiltering>        
<!-- Log all drivers except if the signature -->       
 <!-- contains Microsoft or Windows -->       
<CreateRemoteThread onmatch="include">
<TargetImage condition="end with">calc.exe</TargetImage>
</CreateRemoteThread>
 </EventFiltering>    
</Sysmon>

保存为RecordCreateRemoteTh.xml

注:

该配置文件表示对进程calc.exe监控,如果捕获到CreateRemoteThread,将会写入事件日志

安装配置文件:

Sysmon.exe -c RecordCreateRemoteTh.xml

1111.png

查看配置信息

Sysmon.exe -c

如图

2.png

启动calc.exe

执行CreateRemoteTh.exe,calc.exe被注入,弹框,如图

22.png

CreateRemoteTh.exe的源代码可参照:

https://github.com/3gstudent/CreateRemoteThread/blob/master/CreateRemoteThreadTest.cpp

查看日志,发现Event ID 8

如下图,检测到CreateRemoteThread

1492570940380319.png

通过powershell查看Event ID 8

Get-WinEvent -FilterHashtable @{logname="Microsoft-Windows-Sysmon/Operational";ID=8}

如下图,获取日志Event ID 8

1492570996316248.png

0x03 c++实现通过APC对Dll注入

使用APC注入:

代码如下:

https://github.com/3gstudent/Inject-dll-by-APC/blob/master/test.cpp

关于代码的详细说明可参照:

http://blogs.microsoft.co.il/pavely/2017/03/14/injecting-a-dll-without-a-remote-thread/

如图,成功注入到calc.exe

3.png

使用ProcessExplorer查看calc.exe加载的dll,如下图,成功注入testdll

1492571057302885.png

查看日志,并没有产生Event ID 8,成功绕过Sysmon对CreateRemoteThread的监控

0x04 Casey [email protected]分享的C#实现代码和用途

可应用到 InstallUtil.exe和Msbuild.exe的利用上面

InstallUtil.exe:

https://gist.github.com/subTee/7bbd8e995ed8e8b1f8dab1dc926def8a

Msbuild.exe:

https://gist.github.com/subTee/cf3e1b06cf58fcc9e0255190d30c2d38

调用过程中没有产生Event ID 8

0x05 小结

本文对Sysmon的监控功能做了测试,并介绍如何通过APC实现Dll注入,绕过Sysmon对CreateRemoteThread的监控

在特定环境下,如果无法手动关闭Sysmon服务,利用APC能在一定程度上绕过Sysmon对CreateRemoteThread的监控

参考资料:

http://subt0x10.blogspot.com/2017/01/shellcode-injection-via-queueuserapc.html 
https://www.darkoperator.com/blog/2014/8/8/sysinternals-sysmon 
http://www.freebuf.com/sectool/122779.html 
http://www.cnblogs.com/uAreKongqi/p/6012353.html 
http://blogs.microsoft.co.il/pavely/2017/03/14/injecting-a-dll-without-a-remote-thread/

接着介绍DEP绕过的另一种方法——利用VirtualAlloc绕过DEP。通过VirtualAlloc函数可以申请一段具有可执行属性的内存,相比于VirtualProtect,传入VirtualAlloc的四个参数不需要先读取再赋值,可在shellcode中直接指定,结构更简单。