Magniber剖析:一款只以韩国为攻击目标的勒索软件

来源:互联网 发布:北京市工商局网络登记 编辑:程序博客网 时间:2024/04/30 02:08


Magnitude攻击工具包在过去几个月里并没有出什么新的幺蛾子,除了以几个亚洲国家为攻击目标的Cerber勒索软件。奇怪的是,Magnitude EK(攻击工具包)在今年9月下旬突然消失,人们猜测这只是在这个急剧收缩的工具包市场中的又一个阵亡者而已,不足为奇。

但是,就在本月中旬,Magnitude EK带着一个新的payload重现江湖。新的恶意程序又是一个全新的勒索软件,被称为Magniber。

外部IP、软件所用语言等信息都显示着这个新型的勒索软件攻击目标的准确性——韩国。以单个国家为攻击目标已经不同寻常,通过多种检查方式保证攻击的准确性更是勒索软件史上的首创。

已分析样本

9bb96afdce48fcf9ba9d6dda2e23c936c661212e8a74114e7813082841667508 -来自Magnitude EK

8968c1b7a7aa95931fcd9b72cdde8416063da27565d5308c818fdaafddfa3b51 -解压的payload

旧样本

ef70f414106ab23358c6734c434cb7dd -主样本(已压缩)

aa8f077a5feeb9fa9dcffd3c69724c942d5ce173519c1c9df838804c9444bd30 -解压的payload

传播方式

到目前为止,我们只发现了Magnitude EK这一种传播途径:

行为分析

如果该恶意程序在非韩国的系统上执行,它会进行自我删除,运行ping命令时会带来一定的延迟:

在沙箱中运行该程序可看到如下界面;

恶意软件以%TEMP%的身份复制,并通过任务调度程序(task scheduler)完成部署:

在同一个文件夹中,我们还可以看到赎金说明和另一个文件。其名称与特定用户生成的域名中的部分内容相同,扩展名与加密文件的扩展名相同:

每个加密文件都被添加了一个包含拉丁文字符的扩展名,每个Magniber样本的扩展名均相同。

相同的纯文本采用的都是相同的加密文本。也就是说,每个文件加密使用的都是同一个密钥。

下图是样本BMP文件被Magniber加密前后的对比图(上边为加密前,下边为加密后)。

在加密文件中看不到任何规律性图像,这表明其中已经使用了一些强大的算法,例如CBC模式的AES。

在每个加密文件的开头,我们发现了一个16位的标识符,每个Magniber的样本也都是相同的:

在完成所有能找到文件的加密以后,勒索软件会自动打开记事本,显示赎金勒索的界面:

文档结构非常简单,其中给出了多个支付赎金的页面。

赎金支付

赎金支付页面是全英文的,格式与Cerber类似(这是这些勒索软件唯一的相似之处,内部机制完全不同):

网络通信

我们发现Magniber连接的是由内部算法生成的域。用于CnC的域随后也被用在受害者的个人网站中(只是调用了不同的参数)。调用URL举例:


http://xat91h3evntk5zb66dr.bankme.date/new1http://xat91h3evntk5zb66dr.bankme.date/end1

将赎金界面的URL与相应运行进行比较:


http://xat91h3evntk5zb66dr.bankme.date/EP866p5M93wDS513http://xat91h3evntk5zb66dr.jobsnot.services/EP866p5M93wDS513http://xat91h3evntk5zb66dr.carefit.agency/EP866p5M93wDS513http://xat91h3evntk5zb66dr.hotdisk.world/EP866p5M93wDS513


程序执行开始时,ransomware向以new1(或new0)结尾的URL发送一个请求。执行结束时,请求end1(或end0)。这些URL的含义将在本文的下一部分中详细解释。

比较有意思的是,如果该受害者的公共IP属于韩国,则服务器响应。否则,响应文本为空。初始请求与响应的例子如下图(请求是从某个韩国IP发起的):

从上图可以看到,我们得到了一个16个字符长的随机字符串:ce2KPIak3cl6JKm6。新的随机URL只能被请求一次。如果我们尝试重复请求,则响应文本为空。

另一个请求(结尾)也给出了一个16个字符长的随机字符串。但与第一个不同的是,它会对每个请求都作出响应(每次都有一个不同的随机字符串)。示例如下:

代码研究

很多时候要想了解恶意攻击事件的本质,我们都要对程序代码进行深入的研究。

Magniber的代码被多个加密器进行了压缩,解压需要通过加密器的功能展开。下面这个视频中可以看到当前样本的解压过程。

youtube视频地址:https://www.youtube.com/watch?v=VGOgZ1BXTRE&feature=youtu.be

解开第一层后可以得到一个PE文件:恶意程序的核心。编程人员仅通过按照单个字符的方式把它们加载到内存中,稍微增加了字符串被找到的难度:

程序执行流程

仔细观察解压的payload,我们可以清楚地看到为什么它不能在大多数系统上运行。开始时,程序员就编写了一个语言检测的命令(使用API函数GetSystemDefaultUILanguage):

它唯一接受的UI语言就是韩语(代码1042)。如果检测到其它语言,样本就会执行删除动作,不对系统产生危害。这个语言检测功能只在最近的Magniber样本中出现,早期版本中均没有,例如:aa8f077a5feeb9fa9dcffd3c69724c942d5ce173519c1c9df838804c9444bd30。

通过语言检测后,Magniber就开始执行一般勒索软件惯用的步骤。过程如下:

1. 创建互斥量对象(Creates mutex)

2. 如果标记文件已被删除,检查temp(临时)文件夹

3. 将自己%TEMP%形式的副本删除并添加任务

4. 查询生成的子域名来检索AES密钥(如果检索到密钥失败,加载硬编码的密钥)

5. 使用所选的扩展名对文件机型枚举和加密

6. 将任务完成的消息传递至CnC

7. 显示勒索页面

8. 自行删除

什么文件或数据会遭到攻击?

Magniber的攻击文件类型非常多,包括文档、源代码文件等等。完整列表如下:


docx xls xlsx ppt pptx pst ost msg em vsd vsdx csv rtf 123 wks wk1 pdf dwg onetoc2 snt docb docm dot dotm dotx xlsm xlsb xlw xlt xlm xlc xltx xltm pptm pot pps ppsm ppsx ppam potx potm edb hwp 602 sxi sti sldx sldm vdi vmx gpg aes raw cgm nef psd ai svg djvu sh class jar java rb asp php jsp brd sch dch dip vb vbs ps1 js asm pas cpp cs suo sln ldf mdf ibd myi myd frm odb dbf db mdb accdb sq sqlitedb sqlite3 asc lay6 lay mm sxm otg odg uop std sxd otp odp wb2 slk dif stc sxc ots ods 3dm max 3ds uot stw sxw ott odt pem p12 csr crt key pfx der 1cd cd arw jpe eq adp odm dbc frx db2 dbs pds pdt dt cf cfu mx epf kdbx erf vrp grs geo st pff mft efd rib ma lwo lws m3d mb obj x3d c4d fbx dgn 4db 4d 4mp abs adn a3d aft ahd alf ask awdb azz bdb bib bnd bok btr cdb ckp clkw cma crd dad daf db3 dbk dbt dbv dbx dcb dct dcx dd df1 dmo dnc dp1 dqy dsk dsn dta dtsx dx eco ecx emd fcd fic fid fi fm5 fo fp3 fp4 fp5 fp7 fpt fzb fzv gdb gwi hdb his ib idc ihx itdb itw jtx kdb lgc maq mdn mdt mrg mud mwb s3m ndf ns2 ns3 ns4 nsf nv2 nyf oce oqy ora orx owc owg oyx p96 p97 pan pdb pdm phm pnz pth pwa qpx qry qvd rctd rdb rpd rsd sbf sdb sdf spq sqb stp str tcx tdt te tmd trm udb usr v12 vdb vpd wdb wmdb xdb xld xlgc zdb zdc cdr cdr3 abw act aim ans apt ase aty awp awt aww bad bbs bdp bdr bean bna boc btd cnm crw cyi dca dgs diz dne docz dsv dvi dx eio eit emlx epp err etf etx euc faq fb2 fb fcf fdf fdr fds fdt fdx fdxt fes fft flr fodt gtp frt fwdn fxc gdoc gio gpn gsd gthr gv hbk hht hs htc hz idx ii ipf jis joe jp1 jrtfkes klg knt kon kwd lbt lis lit lnt lp2 lrc lst ltr ltx lue luf lwp lyt lyx man map mbox me mel min mnt mwp nfo njx now nzb ocr odo of oft ort p7s pfs pjt prt psw pu pvj pvm pwi pwr qd rad rft ris rng rpt rst rt rtd rtx run rzk rzn saf sam scc scm sct scw sdm sdoc sdw sgm sig sla sls smf sms ssa sty sub sxg tab tdf tex text thp tlb tm tmv tmx tpc tvj u3d u3i unx uof upd utf8 utxt vct vnt vw wbk wcf wgz wn wp wp4 wp5 wp6 wp7 wpa wpd wp wps wpt wpw wri wsc wsd wsh wtxxd xlf xps xwp xy3 xyp xyw ybk ym zabw zw abm afx agif agp aic albm apd apm apng aps apx art asw bay bm2 bmx brk brn brt bss bti c4 ca cals can cd5 cdc cdg cimg cin cit colz cpc cpd cpg cps cpx cr2 ct dc2 dcr dds dgt dib djv dm3 dmi vue dpx wire drz dt2 dtw dv ecw eip exr fa fax fpos fpx g3 gcdp gfb gfie ggr gih gim spr scad gpd gro grob hdp hdr hpi i3d icn icon icpr iiq info ipx itc2 iwi j2c j2k jas jb2 jbig jbmp jbr jfif jia jng jp2 jpg2 jps jpx jtf jw jxr kdc kdi kdk kic kpg lbm ljp mac mbm mef mnr mos mpf mpo mrxs my ncr nct nlm nrw oc3 oc4 oc5 oci omf oplc af2 af3 asy cdmm cdmt cdmz cdt cmx cnv csy cv5 cvg cvi cvs cvx cwt cxf dcs ded dhs dpp drw dxb dxf egc emf ep eps epsf fh10 fh11 fh3 fh4 fh5 fh6 fh7 fh8 fif fig fmv ft10 ft11 ft7 ft8 ft9 ftn fxg gem glox hpg hpg hp idea igt igx imd ink lmk mgcb mgmf mgmt mt9 mgmx mgtx mmat mat ovp ovr pcs pfv plt vrm pobj psid rd scv sk1 sk2 ssk stn svf svgz tlc tne ufr vbr vec vm vsdm vstm stm vstx wpg vsm xar ya orf ota oti ozb ozj ozt pa pano pap pbm pc1 pc2 pc3 pcd pdd pe4 pef pfi pgf pgm pi1 pi2 pi3 pic pict pix pjpg pm pmg pni pnm pntg pop pp4 pp5 ppm prw psdx pse psp ptg ptx pvr px pxr pz3 pza pzp pzs z3d qmg ras rcu rgb rgf ric riff rix rle rli rpf rri rs rsb rsr rw2 rw s2mv sci sep sfc sfw skm sld sob spa spe sph spj spp sr2 srw wallet jpeg jpg vmdk arc paq bz2 tbk bak tar tgz gz 7z rar zip backup iso vcd bmp png gif tif tiff m4u m3u mid wma flv 3g2 mkv 3gp mp4 movavi asf mpeg vob mpg wmv fla swf wav mp3 

该列表在文件加密功能启动前就加载完成了:

当然,还是会有一些被排除在外的目录:


:\documents and settings\all users\ :\documents and settings\default user\ :\documents and settings\localservice\ :\documents and settings\networkservice\ \appdata\local\ \appdata\locallow\ \appdata\roaming\ \local settings\ \public\music\sample music\ \public\pictures\sample pictures\ \public\videos\sample videos\ \tor browser\ \$recycle.bin \$windows.~bt \$windows.~ws \boot \intel \msocache \perflogs \program files (x86) \program files \programdata \recovery \recycled \recycler \system volume information \windows.old \windows10upgrade \windows \winnt

Magniber如何实现文件加密?

Magniber利用CBC模式下的AES 128位进行文件加密,需借助Windows Crypto API的帮助。

DGA与受害者ID

通常情况下,恶意软件会尝试通过查询伪随机子域从CnC中检索AES密钥:

伪随机部分只用于识别受害者,由以下简单算法生成:

每个字符都按照Tick Count计数,被转换为给定的字符集:

数字0或1是否添加到URL中取决于样本是否在调试器下运行(根据时间检测)。

下面对四个域进行了密钥查询:

如果其中任何一个域给出长16个字节的响应内容,那么就表明有效的密钥被复制到缓冲区并进一步使用。否则,它将返回至硬编码密钥。

默认的AES密钥和IV

有意思的是每个样本都带有硬编码的AES密钥。但是这个只作备份用,例如,如果由于某些原因突然无法从CnC下载密钥(如果公共IP不来自韩国也会发生这样的情况)。每个样本密钥都是唯一的。当前分析样本的密钥是:S25943n9Gt099y4K:

如果其中任何一个域给出长16个字节的响应内容,那么就表明有效的密钥被复制到缓冲区并进一步使用。否则,它将返回至硬编码密钥。

类似地,初始化向量(IV)在样本中始终为硬编码(但未下载)。文件开头也保存了同样16个字符的长字符串。在当前分析的样本中是EP866p5M93wDS513:

算法

首先,密码初始化。恶意软件利用函数CryptImportKey和CryptSetKeyParam导入密钥和初始化向量:

文件加密:

第一个写入完成文件开头16字节长字符串的存储。然后,按区块读取文件,并使用Windows Crypto API完成加密。

总结

Magniber正在取代Cerber,通过同一个工具包发布,具有相同的攻击对象。但从内部机制来看又与Cerber相去甚远,更为简化。它最大的特点就是对攻击对象的挑剔程度,不是韩文系统不攻击。这也算勒索软件历史上的一个奇葩了。

从这个事件也能看出,勒索软件开发者并没有停下脚步,还是在勤勤恳恳地开发着这些邪恶的东西。Freebuf也会持续关注,及时报道。

文章出处:FreeBuf

你会喜欢


深度|勒索软件黑产研究:制马人,传播者,受害者 ,环环相扣,年锁百万终端,勒索上亿元

NotPetya勒索软件幕后黑客索要25万美元解锁设备

勒索恶意软件正走向底层,乌克兰副总理都中招了!


阅读全文
0 0
原创粉丝点击