Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flare-On 2018 writeup(下)

Flare-On 2018 writeup(下)

作者头像
ChaMd5安全团队
发布于 2018-10-23 02:42:31
发布于 2018-10-23 02:42:31
61400
代码可运行
举报
文章被收录于专栏:ChaMd5安全团队ChaMd5安全团队
运行总次数:0
代码可运行

malware skillz

全能型后门,从LaunchAccelerator.exe开始分析

程序先修改注册表,复制自身自运行

然后释放下载后门的代码,载入内存运行

后门下载器加载库函数从ldr链表中遍历模块和模块函数,使用Hash来获取API定位,此后的API都用这种方法遍历,由于是病毒经典使用方法,可以搜到hash表,没有搜索到的可以动态修改hash参数来取结果

https://www.scriptjunkie.us/files/kernel32.dll.txt

后门下载器搜索了必要的库函数,通过DNSQuery_A中查询到的DNS附加数据,夹带了加密的PE文件

然后解密,并运行到指定的函数

直接运行起来,可以发现通过DNS查询到的数据解密后会有弹窗

并在桌面上放了一个crackme.exe

从pcap.pcap中dump出网包中的DNS数据,将DNS查询数据用网包数据覆盖得到真正的后门文件,后门下载器会运行到他的导出函数Shiny

该函数查询当前eip的位置,搜索到自身的PE头,获取所有Sector相关的信息,重新加载到申请的内存页中,并从Dll入口点开始运行

对必要资源初始化和库函数定位后,后门开始连接主控机,并等待交互

后门主要的流程从ShakeAndInitAes开始,连接主控机后,主控机和肉鸡各生成一个随机数以商定之后的AES通讯密码

此后由主控机发出请求,肉鸡执行对应命令,如果检测到数据异常则断开socket重新握手商定

所有收发包都由统一规则进行封装,封装大致格式

对原始数据进行了AES加密和Zlib压缩操作,并加入一些信息以及校验头,标明了长度、包类型、当前包AES_IV、hash等其他校验冗余信息

通过对网包的复原和回放、解码可以发现,肉鸡A被感染后通过TCP 9443与主控机通信,主要经历了握手、上报了Malware各类版本、获取计算机名、磁盘、列目录、文件信息、ping主机、http请求、SMB广播控制

肉鸡A在感染受控过程中通过SMB2协议对病毒文件进行广播,感染肉鸡B,并通过肉鸡A接管肉鸡B,通过SMB2协议建立命名管道进行交互,交互数据的打包解包方式和TCP方式一致

肉鸡B受控经历了一些磁盘、文件信息上报,并通过肉鸡A写入了Cryptor.exe,并执行Cryptor.exe level9.crypt level9.zip,然后执行删除相关文件,最后通过FTP上传level9.crypt

将level9.crypt从网包中dump,可以看出已经被Cryptor.exe加密了,取得Cryptor.exe,为.Net编写的文件加密程序,de4dot反混淆后整理

程序对原始文件进行Hash计算、将文件名长度、文件名、文件Hash作为文件头进行AES加密,最后在加密数据头部加上cryptar及github版本

AES加密会从github一项目获取信息作为文件加密AES的Key和IV,可以发现github项目最新版本已经不是level9.crypt的版本从网吧或者git中拿当时版本的信息

获取20180810的信息对level9.crypt进行AES解密,得到level9.zip文件

该zip包被加密了,密码需要在肉鸡A和主控机的通信中寻找

搜索zip敏感字,找到密码really_long_password_to_prevent_cracking

解压zip包,取得一张空白图片和一个并没有任何作用的exe

上色,取得flag

recover_these_messages_lost_in_the_colorful_bits@flare-on.com

Suspicious Floppy Disk

拿到floppy.img,得到一系列文件

可以发现大概为dos系统盘,和原版img进行比较,多了infohelp.exe、key.dat等文件

使用dosbox+ida5.5对infohelp.exe进行调试,由于是16位程序,无法使用F5插件,掏出王爽老师的汇编书籍温习一下16位x86汇编,然后在调试时,地址前加上对应的段名。

可以发现大致行为是输入password,将输入的password写入password.dat然后打开message.dat显示失败信息

ida对该文件进行逆向,可以发现

程序由16位Watcoom编译,使用对应的watcom编译带调试符号的库,并制作FLIRT signature的签名文件,ida识别出大部分函数

程序由sub_10000作为入口主要流程如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
printf("input pw")
scanf("%s", &pw)
fopen("key.dat")
fwrite(pw)
fclose()
fopen("message.dat")
fread()
fclose()
printf(msg)

所以这个程序并没有直接藏有密码信息

使用WinHex发现了镜像中还有一些碎片文件可以通过特征恢复,但并没有什么发现,进一步观察发现镜像的mbr和原版dos相比被篡改了其中一段

使用vm+ida对更改的mbr进行调试,起始流程如下

0:0x7c00:

memcpy &mbr_cpy_600h, &mbr_7c00h, 0x200

-> 0x662

0:0x662h

memcpy 0:0x800, &tmp.dat, 0x6000

call tmp.dat sub_0

-> 0:0x800

0:0x800 (tmp.dat sub_0:)

0:0x413 -= 0x0020 (0:0x413 = 0x025d)

0:0x6ff3 = 0x9740

memcpy 9740:0, 0:0x843(&tmp.dat+0x43, NICK RULES ~ NICK RULES), 0x5eb0

0x9740:0x5e5a = dw 0xca000117 (real int 13h)

0x9740:0x5e6f = db 0

0:0x200 = dw 0xca000117 (real int 13h)

0:0x4c = dw 0x97400012 (int 13h hook to 0x9740: 0x12)

-> ret 0:0x671

篡改的mbr加载了tmp.dat中的函数,对0:0x4c地址的数据进行改写了,然后解码恢复原版mbr继续运行

0:0x4c这个地址正是int 13h中断服务函数地址,篡改后的地址为0x97400012

查阅资料,这种在mbr将系统服务进行hook的技术在bootkit很常用,由于预先于操作系统、应用程序加载所以很难被查杀

继续跟进,可以发现进入伪造的int 13h函数会先记录int 13h所有的参数并执行真正的系统服务,然后对参数进行比对进入相应的handler,主要是读扇区时,hook解码原版mbr以及在打开message.dat文件时会call tmp.dat中的函数,写扇区时也会有对应的handler

由img中的参数得知LBA=0x200 * 【柱面 * 36 + 磁头*18 + 扇区 - 1 】,经过计算可以发现cx = 0x2111, dh = 1, al = 1时正好对应message.dat,读取该文件时执行事先加载tmp.dat中的函数

界面如下

也就是通过Infohelp.exe作为触发器,当输入密码打开message.dat显示不正确的信息时,实际被hook到另一个解密程序,通过跟踪恢复出这个handler

通过infohelp输入完密码后对key.dat写扇区的hook handler,先取得密码,然后在读取message.dat时执行真正的密码检查函数,并返回结果

由于这个bootkit对vm的bios兼容性不好,并不能进入dos系统执行infohelp(bochs据说可以正常运行和调试),我在int 13h进行其他服务时,修改了参数以触发解密程序

解密程序如下

查阅wiki资料,这是one-instruction set computer (oisc),subleq的软件仿真,本来旨在于只支持一种指令的低成本芯片,也同时给逆向带来麻烦

在python中重构subleq的仿真环境

参考网上关于Flare-on 2017,11题类似的subleq题解,进行侧信道攻击,通过不同密码输入的cpu titk、pc graph等手段,除了发现密码中输入了@会大大增加计算量以外并没有明显发现

然后进行数据流分析,追踪密码的流向,对读写密码的敏感位置进行标记,得到巨量的操作一时没有总结出规律

最后这段程序也是由出题者编写的编译器编译的,本着编译本身有一些规律,参考去年11题官解,对subleq进行命令组合

去年官解并没有把所有的指令定义列出,不断尝试和摸索中定义了以下指令

其中最难的是subleq通过指令修改了自身指令,这种情况通过指令操作的target address写入了已经识别为指令的地址区域列出,进一步可以发现这些自身修改的指令主要用于指针操作*(%a) = %b, %b = *(%a), jmp *(%a)等操作,可以理解通过修改自身指令替换简单mov中的操作地址,来实现指针访问

反编译器的设计思路是先区分指令区、数据区(通过运行的实际情况可以覆盖大多数),标记subleq基础指令(如 subleq s,d,t / subleq z,d / subleq z,z等),基础指令由3个操作数构成,通过区分源、目标、跳转地址是否为零是否相等区分出不同的基础指令,包括数据也认为是一种特殊指令,保存

然后将简单指令组合成复合指令,复合指令一般会以基础指令的固定组合重复多次,并且意义明显,如mov或者跳转操作

然后将指令解析成对应的LikeC,并分别生成具有完全标签和自动简化标签的两个文件

防止因为一些指针跳转,无法找到对应指令位置的情况,然后对LikeC进行静态分析

这段subleq程序大致如下

查阅资料,这又是一个vm,oisc的另一种rssb

同样的进行侧信道和数据流分析,一时没有掌握到规律,在编写一个反汇编器

rssb比subleq还要抽象,基础指令只有一条rssb x,但是x有几个特殊值

x为-2时代表返回,-1只填补位置,0为当前程序指针,1为rssb累加器,2为常0寄存器,6为输出寄存器

当然这个是由本题的编译器定义的,并不一定通用,类似subleq反汇编器一样,合并基础指令为复合指令如下

生成对应的rssb解析文件和LikeC(带完整标签/自动简化标签)

进行静态分析,还原,关键函数如下

可以发现@作为检查密码的结尾字符,而最后的密码校验方式是自定义hash算法与预定的hash表比对

hash计算公式如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in range(15):
    hash[i] = (((key[i+1]-32) << 7 + (k[i]-32)) ^ (i * 33) + magicsum) & 0xffff

其中magicsum是所有密码的ascii和加3072乘密码长度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
magicsum = 3072 * len(key) + sum(key)

由于magicsum不得知,key也不知到,只有期望的hash表,magicsum只能为0~0xffff

进行枚举倒推key[],然后检查magicsum是否符合约定并打印

找到明文数据Av0cad0_Love_2018@flare-on.com,至此Flare-on5完成

Easter Egg

彩蛋关,malware skillz关卡中通过DNS协议下载的crackme

程序带壳,上来pushad,esp定律,下esp写入断点F9

停在OEP 0x401000,dump源程序

拖入IDA

程序混淆了字符串和控制流结构

大致流程是分别putc:Password:

然后getc,一位一位校验

然后输出校验结果,一般password一位字符的校验程序如下,由于所有的字符处理都是线性处理,先设置输入password为’\x00’ * 40然后在关键的比较位置下bp取出jz的比较值

如比较值为0xc8,正确输入时应为0x00,则意味着该位password实际应该为(char) (0x00-0xc8),即’8’

解出所有的password位:83cbeb65375d4a1263c2e28bc9cf4f8a8c8f834e

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ChaMd5安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flare-On 2018 writeup(上)
签到关,jar程序,直接拖入jd,很直接的flag: GoldenTicket2018@flare-on.com
ChaMd5安全团队
2018/10/23
8790
Flare-On 2018 writeup(上)
Flare-On逆向挑战赛(二)
从2013年开始举办的Flare-On逆向挑战赛今年已经是第6届。今年的比赛共有12道题目,涉及Windows,.NET,Linux和Android上x86的各种架构。此外,这也是Flare-On历史上的第一次比赛中出现NES ROM的题目。该比赛是仅有的以Windows为中心的CTF竞赛之一。完成Flare-On逆向挑战也是笔者一直以来的目标之一,今年终于有时间去实现这个目标了。
FB客服
2019/10/24
6680
Flare-On逆向挑战赛(二)
Flare-On逆向挑战赛(一)
从2013年开始举办的Flare-On逆向挑战赛今年已经是第6届。今年的比赛共有12道题目,涉及Windows,.NET,Linux和Android上x86的各种架构。此外,这也是Flare-On历史上的第一次比赛中出现NES ROM的题目。该比赛是仅有的以Windows为中心的CTF竞赛之一。完成Flare-On逆向挑战也是笔者一直以来的目标之一,今年终于有时间去实现这个目标了。
FB客服
2019/10/22
9830
暗云III v3.0等多个病毒家族结伴来袭实战分析
根据C:/Windows/System32/b.txt产生的老的连接状态日志发现有大量外发扫描1433端口判断可能是通过SQL Server弱密码进来的。
FB客服
2019/03/08
2.5K0
暗云III v3.0等多个病毒家族结伴来袭实战分析
HackTheBox chaos writeup
大家好,我是大白,鉴于在强网杯中受到了打击,决定努力提升一下自己姿势水平,先去hackthebox刷一波退役靶机
黑伞安全
2019/10/16
9380
HackTheBox chaos writeup
MBR勒索木马再度来袭:GoldenEye分析
早在今年上半年,破坏力极强的修改MBR并加密MFT (Master File Table)的勒索木马Petya就引起了杀毒厂商的高度关注,然而在今年下半年360白名单分析组又捕获了该作者最新的勒索木马
FB客服
2018/02/09
1.5K0
MBR勒索木马再度来袭:GoldenEye分析
ISCC 2018 Writeup
ISCC 2018 CTF中,一些题目还是很不错的。但是需要吐槽的就是这个积分机制,私以为一次性放出所有题目而且反作弊机制完善的情况下动态积分这个方法很好。但是,战线太长还是不要用动态积分。不过话说回来,战线长也是ISCC的传统吧。最后祝ISCC越办越好!也希望我们的Writeup能对大家有所帮助吧! 赛事的运维人员还是很nice的
xfkxfk
2018/07/24
2.5K0
ISCC 2018 Writeup
Petya勒索蠕虫完全分析报告
目录 第一章 前言 第二章 Petya老样本简介 第三章 Petya新样本详细介绍 第四章 Petya勒索蠕虫感染传播趋势分析 第五章 Petya横向移动及传播技术分析 1. 提升权限,设置执行标记 2. MBR修改 3. 设置重启计划任务 4. 遍历IP 5. 释放并运行资源 6. 枚举网络资源 7. 使用永恒之蓝漏洞攻击 8. 文件加密 9. 清除日志并重启 第六章 Petya勒索加密技术分析 1. 篡改MBR 2. 加密文件 第七章 Petya勒索杀毒软件攻防分析 第八章 总结 第一章 前言 2017
FB客服
2018/02/28
1.2K0
Petya勒索蠕虫完全分析报告
Petya 勒索软件新变种详细分析报告
摘要总结:本文主要分析了Petya勒索病毒的详细传播途径、感染后的处理措施以及防范方法。本文从Petya勒索病毒的感染机制、传播途径、感染后的处理措施以及防范方法四个方面进行介绍,旨在帮助读者全面了解Petya勒索病毒的相关信息,提高网络安全意识。
腾讯电脑管家
2017/06/30
1.3K0
Petya 勒索软件新变种详细分析报告
DASCTF|June GKCTF X DASCTF应急挑战杯WriteUP-PWN&REVERSE篇
本次竞赛涵盖WEB、CRYPTO、MISC、PWN、REVERSE常规CTF五大类赛题。
安恒网络空间安全讲武堂
2021/07/09
1.6K0
DASCTF|June GKCTF X DASCTF应急挑战杯WriteUP-PWN&REVERSE篇
加密固件之依据老固件进行解密
IoT漏洞分析最为重要的环节之一就是获取固件以及固件中的文件系统。固件获取的方式也五花八门,硬核派有直接将flash拆下来到编程器读取,通过硬件调试器UART/SPI、JTAG/SWD获取到控制台访问;网络派有中间人攻击拦截OTA升级,从制造商的网页进行下载;社工派有假装研究者(学生)直接向客服索要,上某鱼进行PY。有时候千辛万苦获取到固件了,开开心心地使用binwalk -Me一把梭哈,却发现,固件被加密了,惊不惊喜,刺不刺激。
Seebug漏洞平台
2021/08/10
1.6K0
httprunner学习23-加解密
比如当我们访问下面这个登陆的接口时,请求参数账号和密码都是需要加密,通过parms参数传过去,服务器才能识别到
上海-悠悠
2019/11/15
8950
DASCTF|2022DASCTF7月赋能赛官方Write Up
7月25日,DASCTF2022.07赋能赛于BUU平台顺利开赛。响应各位小伙伴的号召,今天官方WP正式发布!
安恒网络空间安全讲武堂
2023/03/23
2.8K0
DASCTF|2022DASCTF7月赋能赛官方Write Up
记一次详细的勒索病毒分析
第一次写病毒分析的文章,之前表哥丢给我一个样本断断续续分析了好几天才搞明白,如有任何错误,还请各位多加指点
信安之路
2018/08/08
1.9K2
记一次详细的勒索病毒分析
Golang 实现与 crypto-js 一致的 AES 简单加解密
最近一直在折腾 Golang 的 AES 加密解密,最初的一个小需求只是寻求一个简单直接的加密工具而已,但是找着找着发现里面的坑太深了…
LinkinStar
2023/05/02
3.7K0
Golang 实现与 crypto-js 一致的 AES 简单加解密
Petya勒索软件新变种详细分析报告
目录 Petya勒索软件新变种详细分析报告 Petya新变种简介 传播渠道分析 可能传播渠道-邮箱传播 可能传播渠道-MeDoc 详细功能分析 感染过程分析 磁盘加密和勒索细节 安全建议 参考资料 Petya新变种简介 据twitter爆料,乌克兰政府机构遭大规模攻击,其中乌克兰副总理的电脑均遭受攻击,目前腾讯电脑管家已经确认该病毒为Petya勒索病毒变种。Petya勒索病毒变种中毒后会扫描内网的机器,通过永恒之蓝漏洞自传播到内网的机器,达到快速传播的目的。 有国外安全研究人员认为,Petya勒索病毒变种会
FB客服
2018/02/28
7060
Petya勒索软件新变种详细分析报告
赛前福利②最新2018HITB国际赛writeup
FIRST 距离“西湖论剑杯”全国大学生网络空间安全技能大赛只有9天啦! 要拿大奖、赢offer,那必须得来点赛前练习定定心啊~这不,讲武堂就拿到了2018HITB国际赛的一手write up!web、misc、pwn、crypto、mobile都有!快来尝鲜! ——特别感谢本文作者:BXS—— 本文作者曾多次参与“安恒杯”月赛,成绩亮眼~ 在本次HIBT国际赛中,他所在的队伍也取得了rank16、大陆前5的好成绩~Congratulations! ATTENTION:web题目请查看昨天的推文~ PAR
安恒网络空间安全讲武堂
2018/04/18
1.1K0
赛前福利②最新2018HITB国际赛writeup
Unity IL2CPP 游戏分析入门
很多时候App加密本身并不难,难得是他用了一套新玩意,天生自带加密光环。例如PC时代的VB,直接ida的话,汇编代码能把你看懵。
奋飞安全
2022/11/15
3.3K0
常驻型计算机病毒工作原理,复习计算机病毒分析与防范
在BIOS后,操作系统前,通过中断服务程序(向量表 INT 13H),占据物理位置(常驻内存高端),替换、截获系统中断从而伺机传染发作。
全栈程序员站长
2022/07/05
5540
“暗云”BootKit木马详细技术分析
“暗云”木马简介: “暗云”是一个迄今为止最复杂的木马之一,感染了数以百万的计算机,暗云木马使用了很多复杂的、新颖的技术来实现长期地潜伏在用户的计算机系统中。其使用了BootKit技术,直接感染磁盘的引导区,感染后即使重装格式化硬盘也无法清除。 该木马使用了很多创新的技术,有以下特点: 第一、隐蔽性非常高,通过Hook磁盘驱动实现对已感染的MBR进行保护,防止被安全软件检测和清除,并且使用对象劫持技术躲避安全人员的手工检测。隐蔽性极高,截至目前为止,几乎所有的安全软件都无法检测和查杀该木马。 第二、云思想在
FB客服
2018/02/05
2.2K0
“暗云”BootKit木马详细技术分析
相关推荐
Flare-On 2018 writeup(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验