社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 6686阅读
  • 3回复

[分享]病毒分析之WannaCry勒索病毒

楼层直达
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8

一、基本分析,并提取病毒样本,手工清理机器
摘自百度百科:WannaCry(又叫Wanna Decryptor),一种“蠕虫式”的勒索病毒软件,大小3.3MB,由不法分子利用NSA(National Security Agency,美国国家安全局)泄露的危险漏洞“EternalBlue”(永恒之蓝)进行传播。勒索病毒肆虐,俨然是一场全球性互联网灾难,给广大电脑用户造成了巨大损失。最新统计数据显示,100多个国家和地区超过10万台电脑遭到了勒索病毒攻击、感染。勒索病毒是自熊猫烧香以来影响力最大的病毒之一。WannaCry勒索病毒全球大爆发,至少150个国家、30万名用户中招,造成损失达80亿美元,已经影响到金融,能源,医疗等众多行业,造成严重的危机管理问题。中国部分Windows操作系统用户遭受感染,校园网用户首当其冲,受害严重,大量实验室数据和毕业设计被锁定加密。部分大型企业的应用系统和数据库文件被加密后,无法正常工作,影响巨大。攻击特点:WannaCry利用Windows操作系统445端口存在的漏洞进行传播,并具有自我复制、主动传播的特性。被该勒索软件入侵后,用户主机系统内的照片、图片、文档、音频、视频等几乎所有类型的文件都将被加密,加密文件的后缀名被统一修改为.WNCRY,并会在桌面弹出勒索对话框,要求受害者支付价值数百美元的比特币到攻击者的比特币钱包,且赎金金额还会随着时间的推移而增加。
1.模拟真实场景,在虚拟机中运行样本2.待病毒执行之后,观察可疑情况使用PCHunter工具查看进程,定位到进程文件,再结束病毒进程可疑进程判断依据:图标、文件名、文件路径找到病毒所在位置,将其样本保存,再删除目录下的病毒程序注:在病毒运行后,需观察病毒情况首先查看可疑进程,进程部分上文已经写出再查看启动项(注册表,计划任务等)注册表启动项有可疑进程查看驱动,服务等可疑项未发现异常查看其他杂项,网络连接有可疑进程的网络连接,此处为未联网状态连接网络后观察新的网络情况3.提取样本将路径下文件提取到本地,并修改名称为WannaCryC:ProgramDataznemvazsnwpqy217@WanaDecryptor@.exe 改为 WannaCry4.样本概况文件: D:Desktop永恒之蓝WannaCry样本WannaCry大小: 3723264 bytes文件版本:6.1.7601.17514 (win7sp1_rtm.101119-1850)修改时间: 2017年5月13日, 13:55:05MD5: DB349B97C37D22F5EA1D1841E3C89EB4SHA1: E889544AFF85FFAF8B0D0DA705105DEE7C97FE26CRC32: 9FBB1227①获取WannaCry程序信息使用PEID工具获取病毒信息,可以发现病毒程序未加壳,版本信息为VC++6.0查看其目录信息,因为是exe程序所以没有导出表,所以重点观察一下导入表和资源表先大致观察主要的DLL信息其中KERNEL32.DLL中可以观察到对资源的相关操作,这也是病毒程序中比较关键的信息使用ResourceHacker工具观察病毒资源信息,在资源中发现了PE文件,将其资源R保存一份,命名为WannaCry_R.exe使用PEID工具的插件Krypto ANALyzer,检测病毒程序使用了哪些算法点击每一行的数据即可查看相关的信息算法信息:AES,微软加密API,ZLIB库②获取WannaCry_R程序信息简单观察一下刚才从资源信息中导出的WannaCry_R程序可以看到这个程序中仍然有一些资源相关的操作,以及创建进程,服务、注册表相关的操作同样使用ResourceHacker工具观察WannaCry_R资源信息,在资源中发现了PK文件,即压缩包,将其资源XIA保存一份,命名为WannaCry_XIA.zip解压WannaCry_XIA.zip,发现文件都被加密了,需要密码5.手工清理机器①结束可疑进程②删除可疑进程启动项③删除病毒程序在C:ProgramData目录下创建的文件夹④删除病毒程序生成的@Please_Read_Me@.txt、@WanaDecryptor@.exe以及.WNCRY文件二、行为分析,获取病毒行为1.由于之前对病毒样本进行了一系列操作,所以将虚拟机还原快照,重新在虚拟机中运行病毒程序,使用火绒剑工具监控病毒样本的运行,待病毒执行一段时间后,分开查看病毒的行为。分析监控到的日志,主要观察的点:①文件操作,主要看文件创建、修改、删除等操作②注册表操作,主要看注册表设置、创建等操作③进程操作,主要看创建进程、写入内存等操作④网络操作,主要看网络连接地址、IP等信息⑤其他行为,以及观察病毒样本运行后的反应分析样本的行为,尽可能发现恶意行为。开启火绒剑监控样本运行①观察文件操作,主要观察文件的写入操作,这个病毒程序由于对文件的操作较多,所以都观察一下,避免遗漏②观察注册表操作,主要观察设置注册表的操作,这里勾选设置注册表项值病毒程序自己创建了一些注册表项,并设置了一些信息基本都是一些网络相关的设置操作③观察进程操作因为进程现在还不太好判断,所以进程相关的所有操作都先看一下④观察网络操作,这里能监控的数据不多,有可能会有遗漏可以发现网络连接的操作相当的多,且全都在连接445端口⑤观察其他行为行为监控属于火绒剑这个工具特色的一种功能,这里将常见的一些恶意代码行为进行了总结执行监控可以观察病毒程序执行了哪些进程,加载了哪些模块的操作分析情况总结:分析监控的日志以及自行观察操作之后,可以分析出样本的恶意行为:1.自我复制样本到C盘:C:ProgramData目录下,启动C:ProgramData@WanaDecryptor@.exe(即病毒程序)2.在程序目录下创建@Please_Read_Me@.txt、@WanaDecryptor@.exe以及.WNCRY文件3.在C:ProgramData目录下创建xxx文件夹(文件名随机)4.设置注册表启动项为"C:ProgramDataznemvazsnwpqy217tasksche.exe"5.自己创建了一些注册表的项,在其中写入了很多信息HKEY_LOCAL_MACHINESOFTWAREMicrosoftTracingWannaCry_RASAPI32HKEY_LOCAL_MACHINESOFTWAREMicrosoftTracingWannaCry_RASMANCSHKEY_USERS.DEFAULTSoftwareMicrosoftWindows NTCurrentVersionNetworkLocation Awareness6.不断向445端口发起网络连接三、详细分析病毒代码,获取行为的恶意代码通过行为分析之后,可以知道恶意代码的一些恶意行为,想要获取更加详细的行为需要使用IDA或是OD分析样本。使用IDA打开病毒主体程序进行分析使用F5将其转换为伪代码,简单分析OEP处代码OEP处代码OEP代码分析过程:判断参数是否大于1,若大于1则进入sub_407FA0函数,不大于1则进入sub_407F20函数所以OEP处函数可以分为两部分:首先分析不大于1(<2)的情况,则进入sub_407F20函数sub_407F20函数分析进入sub_407F20函数后内部拥有sub_407C40、sub_407CE0两个函数,自上而下进行分析sub_407C40函数分析函数功能为以服务的方式启动自身,且函数内部将参数变为3个,使得判断信息改变sub_407CE0函数分析其函数功能为在系统目录C:WINDOWS下创建tasksche.exe程序并启动,且将其移动到C:WINDOWSqeriuwjhrf,但第一次移动时由于程序还未创建,会导致移动失败接下来分析大于1(>=2)的情况,遵循自上而下的原则,先进入sub_407FA0函数,此函数功能比较简单,就是更改服务的可选配置参数。再分析服务的回调函数sub_408000,此函数是该病毒程序的关键函数sub_408000函数分析函数功能为实现病毒网络传播,其中主要利用445端口,获取局域网网IP地址,攻击局域网;构造随机的外网地址,测试是否能连接外网445端口,如果连接成功,则进行攻击。sub_407BD0函数分析此函数内拥有三个函数,sub_407B90函数功能为获取一个密钥容器 CSP,将PE文件加载到内存中;sub_407720函数为开启局域网漏洞攻击;sub_407840函数为随即攻击外网服务IP地址sub_407B90函数分析sub_407B90函数在初始化网络环境后会判断返回值,如果成功则返回0,关键的执行函数为sub_407620函数与sub_407A20函数分别进入sub_407620函数与sub_407A20函数进行分析sub_407620函数,其功能为获取一个密钥容器sub_407A20函数其功能主要为将PE文件加载到内存中,此处将40B020、40F080两个位置的内容拷贝出来并保存使用PEID观察刚我们导出的40B020.exe与40F080.exe两个程序40B020程序分析:可以发现40B020这个程序其实是一个DLL大致观察一下导入导出表的信息即可40F080程序无法打开,暂搁置之后是一些获取文件大小、打开文件的操作sub_407B90函数汇总sub_407720函数分析其功能为开启局域网漏洞攻击,主要的两个函数为sub_409160函数,通过网卡设备获取IP地址列表,以及sub_4076B0函数开启一个线程,连接测试这个IP的445端口。进入sub_409160函数大致分析后可以判断该函数的功能是获取网卡上的IP地址使用OD动态调试,在IDA中创建map文件,使用插件LoadMapEx加载到OD中,Ctrl+A分析代码,找到Main函数并进入 来到连接服务的位置,因为我这里连接了网络,所以需要修改跳转让其继续运行进入sub_408090函数后,运行步过GetModuleFileNameA函数,使其获取一下文件之后直接跳转到sub_407720函数的位置,并设置其为新的EIP,单步运行,进入sub_409160函数EDX中保存了我们的IP地址EAX保存的是子网掩码Win+R运行,打开cmd,输入ipconfig命令,查看本地连接状态故由此可知inet_addr(v5 + 4)为IP,inet_addr(v5 + 20)为子网掩码sub_407480函数功能为连接局域网IP 445端口sub_407540函数,功能汇总为传播病毒,利用漏洞进行攻击其中sub_401980函数为进行局域网的传播sub_407720函数汇总sub_407840函数分析其函数功能为随机攻击外网服务IP地址其中sub_407660函数的功能就是获取一个随机数将随机数组合为IP后尝试连接,直至连接成功跳出循环,否则会一直尝试连接,直至成功。之后会不断尝试修改IP子网段第四段的值,尝试连接,若连接失败后会跳转到LABLE_20 跳转到LABLE_20后又会跳转到LABLE_21,运行后又跳转回LABLE_23继续执行sub_407840函数汇总病毒程序主体汇总:WannaCry_R.exe程序分析(tasksche.exe)设置注册表,释放资源,将目录隐藏,从exe中找到密钥,对t.wnry文件进行解密,解密完成后返回一个PE文件, 这个PE文件是一个DLL文件,加载DLL文件,并申请空间,记录PE信息,遍历DLL的导出表,找到TaskStart这个函数,并调用sub_401225函数 — Rand_Name,随机生成服务名sub_401B5F函数 — Create_server_dir,创建服务目录sub_401AF6函数 — create_dir主要就是为了创建目录sub_401F5D函数,函数功能创建服务,启动程序;以服务的方式启动自身,直接运行程序两种方法,以达到启动程序的目的 sub_401CE8函数 — create_server,功能为创建服务sub_401EFF函数 — create_mutex,功能为创建一个互斥体sub_401064函数 — exec_shell,就是为执行命令sub_4010FD函数 — reg_setOrget,根据a1传进来的值判断是获取注册表还是设置注册表sub_401DAB函数 — unzip_srcsub_4075AD函数 — unzip,经分析后发现传进去的参数为WannaCry_XIA.zip的解压密码sub_401E9E函数 —  write_c_wnry,在c.wnry文件中写入比特币钱包地址sub_401000函数 — c_wnry_readOrwrite,读取或者写入c.wnry文件使用OD动态调试,同样在IDA中创建map文件,使用插件LoadMapEx加载到OD中,Ctrl+A分析代码,找到Main函数并进入sub_40170A函数 — get_api,获取一些APIsub_4012FD函数为构造函数,进行初始化操作构造函数和析构函数都是成对出现的,找到sub_40137A函数为析构函数sub_401437函数 — gCryptImportKey,函数功能导入密钥,申请空间sub_401861函数 — g_CryptImportKey,导入密钥sub_4014A6函数,解密t.wnry文件内容,返回PE文件将PE文件整个拷贝出来后粘贴到以010Editor打开的新文件中sub_4021BD函数sub_4021E9函数
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
z3960 
级别: 茶馆馆主
发帖
770867
飞翔币
207694
威望
215657
飞扬币
2511641
信誉值
8

只看该作者 1 发表于: 2022-01-12
返回值是v22,使用OD动态调式观察一下返回情况PE头部信息,PE完整信息(0x10001000是代码段),导出表,个数对照创建mystruct结构体sub_402924函数,功能为遍历DLL的导出表TaskStart使用OD动态调试进行验证WannaCry_R.exe程序汇总(tasksche.exe)Decode.dll文件分析(TaskStart)进入TaskStart函数进行分析sub_10004690函数 — single_process,创建互斥体,防多开sub_10001000函数 — read_Or_WriteCwnry,读取c.wnry文件sub_100012D0函数 — check_systemuser,检测是否是系统用户sub_10003410函数 — get_api与内部函数sub_10004440功能都是动态获取APIsub_10004600函数 — createmutex内部含有sub_100013E0函数,其功能为创建互斥体,设置访问控制属性sub_10004500函数 — check_crypt_filesub_10003D10 — test_crypt函数sub_10004990函数 — startskecandwanasub_10004890函数 — start_decryptyexesub_100047F0函数 — createreg_runsub_10003AC0函数 — createkey_filecreate_eky函数,创建私钥00000000.eky文件,被加密encrypt_RSA函数,加密RSA私钥sub_100046D0函数 — open_res,第一次打开时文件不存在,所以打开会失败创建了五个线程,分别进行分析sub_10004790函数 — res_createsub_100045C0函数 — checkdkysub_10005730函数 — encryptfilesub_10005680函数sub_10001830函数 — movtotemp又创建了个线程,进入简单看一下sub_10005540函数 — encryptsub_10005060函数 — gettmpsub_10001910函数 — getpathsub_100027F0函数 — encrypt_dir,主要函数为sub_10002300 — enum_dir,其功能为加密该目录下的文件sub_10002F70函数 — test_iscreatefile, 测试这个目录是否可以创建文件sub_100032C0函数 — filter_dir,过滤特殊目录sub_10002D60函数 — check_file_type,获取文件类型encrypt_file函数sub_10002200函数 — encryptfsub_10001960函数 — encrypt_data这里可以使用OD动态调试,观察加密过程sub_10005300函数 — starttaskdlsub_100057C0函数 — batoperator,病毒从此处开始发作sub_10004CD0函数 — runbat,运行批处理文件,u.wnry 变为解密文件 @WanaDecryptor@.exe单独运行u.wnry->程序,仅会解密(勒索弹窗、修改桌面等),并不会感染病毒sub_10001140函数 — delete_self_batsub_10004DF0函数 — create_rwnry,从r.wnry创建勒索文档sub_10005480函数 — encrypt_file_,加密文件filldisk函数,填充C盘,直到无法写入文件sub_10005120函数 — delete_hibsys_WNCRYT,删除hibsys.WNCRYT这个文件Decode.dll文件汇总(TaskStart)四、提取病毒特征,完成查杀,编写文档报告及专杀工具1.病毒特征MD5特征: DB349B97C37D22F5EA1D1841E3C89EB4SHA1值: E889544AFF85FFAF8B0D0DA705105DEE7C97FE26CRC32: 9FBB1227病毒特征:WANACRY!2.病毒程序流程图3.解决方案①病毒程序自身创建了互斥体,用于防止多开,利用这个互斥体可以防止病毒运行②病毒利用445端口进行局域网、广域网传播,如果没有使用445端口,那么就可以关闭③及时给系统打补丁
在本地创建00000000.pky和00000000.eky(加密)密钥文件,病毒作者使用自己的公钥对本地的私钥00000000.eky进行RSA加密。加密文件前生成一个16位的随机key,使用本地公钥00000000.pky对随机生成的key进行RSA加密,然后再保存到加密文件的头部,且每一个文件的加密key都是随机生成的,每一次加密都会重新生成key,所以就算是同一个文件,加密后的密文也不相同。之后再使用随机生成的key对文件内容进行AES对称加密。如果想要解密则需要获取这个随机生产的key,key保存在加密的文件头部的位置,可以直接获取,但获取的这个key是通过加密后保存在头部的,如果能对加密的key进行解密就能完成加密文件的解密工作。我们分析的时候已经看到使用的是本地公钥00000000.pky对随机生成的key进行RSA加密,而公钥是无法对密文进行解密的,所以我们需要获得解密的私钥,但是这个私钥00000000.eky也被加密了,需要获得作者自己的公钥才能解密,而作者的公钥显然只能通过打钱获得,所以如果电脑中的文件不重要就重装系统,不然就打钱。
④无法解密,建议重装WannaCry病毒样本:https://wwz.lanzouo.com/iR6E8yl1yuf
我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。
级别: 超级版主
发帖
833819
飞翔币
226630
威望
224648
飞扬币
2443961
信誉值
0

只看该作者 2 发表于: 2022-01-13
来看一下
级别: 超级版主
发帖
833819
飞翔币
226630
威望
224648
飞扬币
2443961
信誉值
0

只看该作者 3 发表于: 2022-01-13
不错,了解了