吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23119|回复: 34
收起左侧

[PC样本分析] TrojanDownloader:JS/Nemucod分析【原创+翻译】

  [复制链接]
FoodieOnTheWay 发表于 2016-7-9 23:45
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 FoodieOnTheWay 于 2016-7-14 21:57 编辑

背景
本来,这应该是一个分析贴的,但是没想到ESET老早就有分析过,看来是撞了样本了,一脸懵逼.jpg。
看到黑哥(知道创宇的hi_heige)前段时间还撞了洞,而且我也晚了ESET一个月,再加上ESET分析的比我有条理啊,我也就觉得这不算什么了。所以它现在被我改写成了翻译贴,求大神们别一言不合就拍砖。

我先贴上自己的一些分析技巧,把JS本身还原。下边就由ESET的Donny装逼了,哦不,咳咳,由Donny展示了。

JS还原
其实之前已经遇到过这个Nemucod,以前的版本没有太多套路,就不好意思发论坛上,而是丢知乎上当作科普文了,现在也已经也加了ESET相关文章的翻译了。具体链接:
警惕钓鱼邮件——近期勒索软件高发 https://zhuanlan.zhihu.com/p/20927057
我这次收集到的那个样本跟ESET文章中说到的第一个非常相似。这里为了跟ESET的分析保持一致,我就直接拿ESET的样本开刀了。
首先用UltraEdit或者NotePad++打开,一看这一坨代码,立马就处女癌发作,拿到xx工具站去进行格式化处理。
然后这才发现,原来开头那个变量是一条执行语句啊。
那就run一下,show出这个语句来吧。run一下有很多种方法,有用IE Developer Tool的,有用Chrome的,更多人用火狐的firebug。但是,这怎么能显示出我的非主流杀马特风格?
妈咪妈咪哄,console.log("")大法!!!

// 输入console.log(变量);
// 即如下样子:
var a8MTtfS4in = "…..." // 代码太长,此处省略22448字
console.log(a8MTtfS4in);

点击运行,即可解出代码。以下是前后对比:
Nemucod-BeforeFormat.png

Nemucod-Over.png

接下来就简单了,从解出来的code,我们可以看到从第333行才是真正函数开始的地方。
我们要做的是保留之前的变量值,然后在之后的代码中加入无数Console.log(""),分段用/**/注释代码,然后可以就可以得到真正的代码了。比如下图,我先注释了下边的代码,去获取ahtc的结果。得到ahtc的结果后,我把这些花指令直接改成真正的结果,然后接着运行下一段。
Nemucod-JSOnlineDBG.png

然后发现,它在bcollisionend这句报错了,这是因为这个在线的解释器不支持WScript对象(也不可能支持)。这时我们可以把它分为两句,分别输出结果,然后组成:varbcollisionend = WScript[CreateObject](WScript.Shell);。当然循环体和其他包含api的语句等,也是这么干的,可不用真的去让它跑。
Nemucod-JSOnlineError.png

最终,可还原出所有JS代码。

当然,有一部分Web大牛可能还是更喜欢用浏览器的调试功能来弄,我是web菜鸟,这里就说下我菜鸟的方法了!
先是找个目录创建个html文件,把如下内容拷进去,然后把我们刚才解出来的代码放进去,用IE打开。
[JavaScript] 纯文本查看 复制代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>DebugJS</title>
    <script type="text/javascript">
        function btn_click(){

/*Here is the code need to debug*/

        }
    </script>
</head>
<body>
    <input type="button"value="ClickMe"/>
</body>
</html>

这时你会发现,这个页面上有个ClickMe。先别点,按F12打开开发人员工具,下好断点,然后点“ClickMe”就可以动态调试了。
为了防止误操作,请尽量在虚拟机里执行
IEDevTool.png

功夫活儿就不再赘述,很快,你就能得到结果。

这里请注意,ESET分析的时候,把函数名也改成有意义的了,这个我之前倒没改过,对照着翻译就完了,这里也就不改了。
各位想动手试试看官可以也改一改,可以改的跟ESET一样,方便理解。


翻译内容
原始地址: http://www.welivesecurity.com/2016/06/16/nemucod-ups-its-game/ (ESET的官方博客)

前段时间,我们详细描述了勒索软件的工作原理. 从那之后,“Nemucod”(这是一个JS下载脚本,主要用来下载和执行恶意软件,比如Locky. 译者注:一款主要通过Nemucod传播的勒索软件)的创造者就开始努力去改进他们的代码(译者注:通俗点,就是做免杀了)。

最新的版本相比之前的版本有了一些显著的变化。在过去,流程很简单:“用户打开恶意文件→ 文件下载payload→ payload执行”。但是在最近的几个版本中,情况有点不简单了。

让我们仔细看看这些代码干啥了。原始的代码已经被严重混淆了,为了让代码更具备可读性,我们已经对这些代码解混淆了。

套路1 – 多种可供使用的连接方式译者注:step的翻译是步骤,但好基友觉得套路更接地气
早先的一些版本只用了一种方式去连接网络,然而因为不同的基础网络配置,这有可能会失败。
为了提供更好的兼容性,作者写了一个试着用多种方式联网的函数。
Nemucod-–-1.png
图1    图中所示的第一种方式就是它常用的方式

套路2 –多个下载地址
直到最近,Nemucod都是只附带一个地址(通常是一个被攻陷的服务器,译者注:这里原意不是特别明确,结合之前的文章这样写的)用来下载payload。这也是一个单点故障:一旦payload被移除,攻击(下载)就会失败。
或许是希望能够增加成功几率吧,最近的几个版本已经包含了好几个下载地址,如下图所示。
Nemucod-–-2.png
Nemucod-–-3.png
代码遍历上述地址,直到有一个下载成功。
Nemucod-–-4.png

套路3 – 第一轮解密
在过去,Nemucod都是下载".exe"文件格式的payload,然后直接执行。但是,下载exe文件会被一些安全设备比如:有状态防火墙,IDS,UTM等设备拦截,或者直接拒绝下载。
为了避免这种情况,最新的版本下载了一个加密的文件。首先,JS会把这个文件下载到受害者的“%temp%”文件夹中:
Nemucod-–-5.png
Nemucod-–-6.png

等Payload文件保存好,下边这个函数会把文件内容交给“deobRound1”来执行第一轮解密:
Nemucod-–-7.png
正如下图展示的这样,第一轮解密是一个简单的树枝代换。文件中的所有字符被转化为16进制数值。如果数值大于127,这个字符会被替换成一个预定义的数组中的相应值;如果小于127,那么字符不会产生变化:
Nemucod-–-8.png

套路4 – 第二轮解密
第一轮解密之后,文件内容会传给另外一个函数做第二轮解密。这一轮解密有三个步骤:

  • 去除文件内容中的最后四个字符;

  • 对所有的字符用 's' 执行一个异或操作
  • 反转整个文件内容
Nemucod-–-9.png

套路5 – Payload有效性检查
这一步会对Payload进行一个基本的检查。

  • 检查文件大小是不是在174080189440之间;

  • 检查MZ头;
Nemucod-–-10.png


  • 检查PE头。
Nemucod-–-11.png
如果任何一项没通过,它就返回第二步去下载下一个下载地址中的payload。

套路6 – 最后一次解密
如果所有的检查都已经通过,文件就会被写到"%temp%"路径下。
Nemucod-–-12.png
Nemucod-–-13.png

这个名叫deobRound3(译者注: 第三轮解密)的函数又把文件内容做了一次类似于套路3的解密。这些字符替换像是为了消除第二轮中解密中的“宽字符“问题。
最终,所有字符都被转化为十进制,并且文件内容也成了一个有效的Windows可执行文件。
Nemucod--14.png

套路7 – 执行
现在payload已经就绪,但是它并不会被直接执行。换了一个新把戏,写了一个bat文件,然后用这个bat来启动payload
Nemucod--15.png

如果“不出意外”,用户就被感染了。

总结
大家可以看得出来,Nemucod的作者一直忙于改进这个下载脚本来增强免杀能力。通过这些新特性,大家可以推测出,作者(们)在努力提高它在企业环境中的成功率(企业环境中代{过}{滤}理服务器和UTM网关可能在过去阻止了他们的payload)。

相关文件信息
MD5: 4DEDF4085E6D2F74CB879AD2E9680AFB
SHA1: EF2A9C6A61E98091A952328592D45214F6E44178
MD5: 42D054143A67DE14EE10F7B8C91D8A1A
SHA1: D3DC6E3D066BFA8E1F4408DE471BC95B001D0D25
Yhnpl47OMCLJm.exe [a variant of Win32/Kryptik.EYIB trojan](译者注:这也是一个升级版的勒索软件,加壳/混淆过的,会通过注入系统进程调用vssadmin悄悄清除还原点
MD5: C1F95ADBCAF520BF182F9014970D33E5
SHA1: 80B96F0207B9C5D1DAA3A6E6CF646F5AFA7BBA2C
Donny Maasland
Head of CybersecurityServices and Research(网络安全服务和研究的头儿)
ESET Netherlands(荷兰ESET)

---------------------------------------------------------------------------------------------------------

分割线下是样本,密码52Pojie:  // 这个中文的冒号代表下边是样本,冏

Nemucod.zip

10.57 KB, 下载次数: 68, 下载积分: 吾爱币 -1 CB

JS下载器样本

免费评分

参与人数 6热心值 +6 收起 理由
Insert + 1 用心讨论,共获提升!
tong_wen2504 + 1 热心回复!
LOVE_TT + 1 已答复!
ccboy25 + 1 谢谢@Thanks!
wnagzihxain + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
dingk + 1 大神带我飞!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

word 发表于 2016-7-26 00:34
FoodieOnTheWay 发表于 2016-7-24 14:58
JS也只能这么玩儿,这个手法已经算非常猥琐了吧

非常低端,垃圾一些注释文本,然后倒序,然后在eval,就3个步骤,我觉得很简单,很容易被破解
 楼主| FoodieOnTheWay 发表于 2016-7-10 00:09
dingk 发表于 2016-7-10 00:07
你也没睡啊,明天不是去国家会议中心么,到时候喊我一下。

这就洗洗睡了。明天7点半出发,你也早点睡吧
dingk 发表于 2016-7-10 00:07

回帖奖励 +1 CB吾爱币

你也没睡啊,明天不是去国家会议中心么,到时候喊我一下。
我来看看看 发表于 2016-7-10 00:09
感谢分享
a2523188267 发表于 2016-7-10 01:22
感谢神分享,虽然看不懂,也要支持一下
上帝的心 发表于 2016-7-10 01:33
技术贴,支持大神~~

点评

哇,见到一个膜法师,好高兴  发表于 2016-7-10 21:54
ccboy25 发表于 2016-7-10 18:19
楼主写的非常详细,谢谢!收藏先,慢慢消化
康小泡 发表于 2016-7-11 15:14
{:1_917:}楼主密码怎么是错误的,解压不开。
KaQqi 发表于 2016-7-11 20:19
感谢发布原创,说实话就看懂了套路一和套路2的一半...
dongwenqi 发表于 2016-7-11 20:34
密码不对
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表