原文链接 https://mp.weixin.qq.com/s/rrGSoNBCUzuU6GT-XwQ2Gw 近期,玄武安全卫士威胁检测平台发现一可疑程序,安全工程师第一时间进行分析,发现此程序为盗号木马,具有隐蔽性强,操作灵活等特点;木马通过将任务管理器作为傀儡进程,从网站拉取功能dll并加载,执行读取qq程序数据。 使用获取到的数据可以在用户无感的情况下对QQ发广告,拉好友,建群引流等操作;如果对数据做进一步加工,甚至可以用来对WeGame等进行授权登录,进而危害到用户游戏账号安全。安装玄武安全卫士可有效防御此类盗号。 一、数据获取前准备工作 1.样本执行流程图 程序使用UPX压缩壳。遍历进程快照。通过路径创建ctfmon.exe和taskmgr.exe进程,并且携带参数; 因为木马程序为32位程序,拉起系统32位任务管理器作为傀儡进程。第一个参数为样本程序的进程ID。第二个参数为程序的文件路径。用此进程ID在傀儡进程中关闭样本程序的加载器。并且删除样本程序磁盘文件。 因为是木马程序自己创建的进程,直接使用句柄打开傀儡进程并在傀儡进程里面申请内存空间。在申请的空间内写入恶意代码。 从第一次写入到内存中的数据可以看到写入的是一个程序头。大小只有0x1000。可以推断到程序会提前把要写入的傀儡进程的恶意代码进行文件不落地的操作,自己完成程序加载的一套流程,比如修复导入表,重定位表等信息。之后再把修复过的内存写入傀儡进程中去; 在把所有修复过的内存都修复过并写入傀儡进程之后,需要修改傀儡进程的EIP,让傀儡进程执行修复过的恶意代码。 2.傀儡进程创建 傀儡进程获得启动执行参数,读取参数进行操作,此行为属于病毒木马的常规操作。关闭掉加载器程序进程,删除加载器在磁盘中的文件,抹去病毒程序痕迹。 傀儡进程会访问腾讯的一个接口,通过这个接口获得QQ号昵称和头像等信息。既然可以获得昵称,就可以联想到把QQ昵称设置为端口号,IP等信息来进行动态获取服务器地址的操作。所以猜测无端访问QQ也是这样的操作。 HTTP请求下载first.dll并加载,使用导出函数hello。DLL在执行的时候多线程同时开工。下面分别讲述线程不同的操作。 二、数据获取过程 1.第一线程执行流程图 检测到QQ进程后,会在QQ进程内存中写入多个字符串,分别是“?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z”, “KernelUtil.dll”,“buf32ByteValueAddedSignature”。 之后写入SHELLCODE。 运行完shellcode,直接释放这段内存。上面的shellcode是为了获取到 ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z 这个导出函数的函数地址。之后远程读取QQ内存,查看 ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z的函数地址。 之后再次编写shellcode调用刚获得的函数地址调用这个函数。 函数的第一个参数为传入传出参数,是获得ClientKey的字符串地址,这个地址也是提前申请过的内存。第二个参数为字符串“buf32ByteValueAddedSignature” 调用结束后,在内存读函数第一个参数的内存地址就可以获得到ClientKey。 2.第二线程的执行流程 第二个线程的流程相对第一个线程,技术手段就少了很多。通过各种特征搜索字符串,定位不同的数据信息。搜索bufSigSession特征使用了下面的特征码搜索内存 搜索到的内存如下 内存搜索的特征字符串是一个关键点,但后面0X38字节更为关键。这个是SigSession对应的数据长度。 下面是线程二搜索内存使用到的特征。 内存展示的方式为struct string { int flag; int len; char[] buf;}。 bufsessionkey搜索到的内存如下 bufTGT搜索到的内存如下 bufTGT_GTKey搜索到的内存如下 AFCB的内存如下 AFCB是获得当前扫描内存的QQ号。特征码跟随的0x04标识之后的DWORD代表一个QQ 如下图 例如QQ 号123456789对应的就是 0x75bcd15。 三、获取数据并发包 获得全部数据并进行组包。将QQ,token,以及QQ版本号组装字符串,把获得到的数据加密发送给服务器 分析到此结束! 四、附件 文件 MD5 first.dll 0af41c94936643fd95de4d53768c0fc7 second.dll b9ae54452f9f863a7ae2d87708d349b3