译者:WisFree
预估稿费:120RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
写在前面的话
除了分析新出现的安全漏洞以及漏洞利用技术之外,SafeBreach Labs还会对现有的攻击技术进行分析。当我们在分析一款恶意软件的时候,我们感兴趣的不仅是恶意软件所使用的Payload,我们还会对初始攻击向量、传播方法以及恶意软件在与C2服务器交互时所使用的各种技术进行深入研究和分析。
研究意义
近期,我们对一个使用了bitsadmin.exe工具(微软的一款已过时的内置工具,用于处理BITS任务)的下载器进行了分析,而这个下载器会通过BITS服务来下载恶意Payload。
微软在Windows XP/2000平台中正式引入了BITS(后台智能传输服务)协议,并且一直沿用至今。需要注意的是,很多应用程序都将该协议作为一种更新机制来使用。(关于BITS协议的更多内容请参考维基百科)
对于恶意软件的开发人员来说,BITS(后台智能传输服务)是一种非常具有吸引力的工具,因为BITS(后台智能传输服务)不仅可以给恶意Payload的下载提供更多的缓冲区空间,而且还可以帮助恶意软件与攻击者控制的服务器进行C2通信。除此之外,还有以下几点原因:
1. BITS主要应用于合法软件,例如Windows update和Chrome update等等,这也使得恶意BITS流量更加难以被安全防护产品检测到。
2. BITS传输主要由操作系统负责处理,恶意软件只会发送初始请求,而不会处理BITS数据传输。
3. BITS使用的是80端口,并且建立在HTTP协议之上。
4. BITS支持使用代理。
5. BITS提供了非常优秀的下载管理功能。
一般来说,攻击者会使用bitsadmin.exe和PowerShell作为BITS客户端来下载类似恶意宏或.LNK文件这样的恶意Payload。不过在有的情况下,某些恶意软件(并非恶意软件Dropper)还会使用BITS下载额外的依赖组件,例如动态链接库文件(DLL)以及需要在主机运行的脚本等等。
但我们想了解的远远不止这些。我们专门选取了一个我们目前正在分析的恶意软件样本,这款恶意软件样本极度依赖于bitsadmin来下载依赖组件。下图显示的是恶意软件的处理创建流程:
首先,我们使用了WinDBG注入了恶意软件尝试下载的那些额外文件,这个过程中需要修改内存数据,虽然这种方法能够奏效,但如果每一次都要这样做的话就未免有些过于繁琐了。因此,我们可以使用一台BITS服务器来注入某些依赖文件,以此来实现与之前相同的效果,而且操作的过程还更加简单了。
使用Python构建BITS服务器
但令我们感到惊讶的是,在搜索了半天之后,我们竟然没有发现任何与Python BITS服务器有关的东西。虽然网上有很多采用C#实现的BITS服务器,但这些实现想要移植到Linux平台的话会非常的不方便。当然了,既然我们都已经走到这一步了,这点困难肯定是拦不住我们的。于是我们便开始自己创建一个Python模块来实现构建一台BITS服务器(基于SimpleHTTPRequestHandler),最终搭建完整的服务器将支持下载和上传操作。
SimpleBITSServer
广大用户可以访问SimpleBITSServer的【GitHub主页】来获取更多信息,我们也欢迎有能力的开发人员贡献自己的代码。
SimpleBITSServer是我们使用Python简单实现的BITS服务器。由于BITS协议是用来在服务器端和客户端之间异步传输文件的一种协议,而SimpleBITSServer是基于Python内置的SimpleHTTPRequestHandler实现的。
工具使用
服务器端:
python SimpleBITSServer.py [port]
客户端:
可使用PowerShell进行简单控制
> Import-Module BitsTransfer
> Start-BitsTransfer -TransferType Upload -Source C:tempto_upload.txt -Destination http://127.0.0.1/to_upload.txt -DisplayName TEST
环境要求
服务器:
Python 2.7
客户端:
1.必须是启用了微软Windows BITS后台智能传输服务的Windows操作系统。
2.一个BITS客户端,可以是Windows内置工具-bitsadmin.exe(已过时),也可以是任何实现了BITS接口的应用程序。
许可证
SimpleBITSServer遵循BSD 3-Clause许可证协议。