一旦发现某个进程名不在白名单中,就会利用函数WriteProcessMemory将代码注入到该进程的内存空间。Shellcode所做的第一件事就是寻找kernel32的基地址,利用其开始创建导入模块。寻找kernel32的方法在很多博客中都已经总结的很详细了。
一旦发现了基地址,shellcode将开始通过自己的哈希技术重建入口。一些哈希和对应值的列表如下所示。
建立入口之后,恶意软件会以文件名.mailslotLogCC为参数调用函数CreateFileA来获取一个用于写操作的文件句柄。
当扫描内存时,恶意软件将使用一个自定义搜索算法来查找跟踪信息的常见的标志。
然后,将找到的信息传递给实现的Luhn算法来进行验证。一旦此信息有效,则它们将会被发送到邮件槽中,以供后面主程序的读取。当按顺序增加一个数字后,恶意软件将创建一个格式化字符串,并将该信息发送到远程站点上。
然后,数据被发送到远程站点上(通过HTTP的GET方法)。
站点接收到的内容会被存放在一个表单中(在写本文时,表单内容并未加密)。表单中大部分的号码都在rdpclip和notepad的进程空间中,所以我们猜想可能该恶意软件作者正在测试他们的代码。相应内容和相关IP信息的截图如下图所示。
因为LogPOS并不是通过扫描文件来获取未加密的信用卡信息,而是利用邮件槽的方法,所以它能够避开传统的检测机制。然而,如果使用类似yara这样的工具的话,将能够很容易地检测到该恶意软件的各种变体。下面的规则将能够帮助你在网络中找到这个恶意工具。
rule LogPOS { meta: author = "Morphick Security" description = "Detects Versions of LogPOS" md5 = "af13e7583ed1b27c4ae219e344a37e2b" strings: $mailslot = "\.mailslotLogCC" $get = "GET /%s?encoding=%c&t=%c&cc=%I64d&process=" //64A130000000 mov eax, dword ptr fs:[0x30] //8B400C mov eax, dword ptr [eax + 0xc] //8B401C mov eax, dword ptr [eax + 0x1c] //8B4008 mov eax, dword ptr [eax + 8] $sc = {64 A1 30 00 00 00 8B 40 0C 8B 40 1C 8B 40 08 } condition: $sc and 1 of ($mailslot,$get) }
湘ICP备2022002427号-10 湘公网安备:43070202000427号
© 2013~2024 haote.com 好特网