一 样本简介

Ursnif是一款著名的银行木马,也叫Gozi银行木马,最早出现于2007年,并一直活跃于金融行业,Ursnif功能强大,2010年其代码泄漏后,该木马开发了多种不同的功能,最近发现Ursnif非常活跃,从网上下载到了Ursnif银行木马的最新的一个变种样本,进行了详细分析。

二 详细分析

  1. 查壳分析,样本采用UPX加壳,如下所示:
  2. 脱壳之后,如下所示:
  3. 获取精确的文件时间信息,如下所示:
  4. 然后一堆跳转,进行内存解密操作,如下所示:
  5. 加载kernel32.dll和ntdll.dll动态链接库文件,如下所示:
  6. 通过GetModuleFileNameA获取文件路径,如下所示:
  7. 打开文件,读取文件内容到内存地址,读取的文件大小为0x5FA00,如下所示:

    读取的数据块,如下所示:

    再次读取文件后面的内容到内存块,如下所示:

    读取到的文件内容,如下所示:
  8. 然后通过GetProcessAddress获取如下函数的地址,如下所示:

    相应的函数如下:
    ZwUnmapViewOfSection、VirtualAllocEx、GetCurrentProcess等函数
  9. 通过GetCurrentProcess和VirtualAllocEx分配相应的内存地址空间,如下所示:
  10. 加载数据到刚才分配的内存地址,如下所示:

    然后再读取程序的数据到相应的内存地址,数据大小为0xF4240,如下所示:

    读取的数据,如下所示:
  11. 通过CreateProcessA创建新的进程,挂起进程,如下所示:

    如下所示:

    然后通过GetThreadContext获取进程信息,如下所示:
  12. 将之前加载的内存数据写入到进程,如下所示:

    通过SetThreadContext设置进程,如下所示:
  13. 通过ResumeThread执行进程,如下所示:

    进程执行,如下所示:
  14. 将注入到进程中的数据Dump下来,如下所示:
  15. 分析Dump下来的Payload代码,如下所示:
  16. 打开进程,获取相应的进程句柄,如下所示:
  17. 循环判断,解密程序.bss段的数据,如下所示:

    相应的反汇编代码如下:

    解密的密钥为:Aug 16 2018
  18. 解密出相应的数据拷贝到指定的内存空间,如下所示:
  19. 判断操作系统是不是64位,如下所示:
  20. 在内存解密出文件头被修改的PE程序Payload2,如下所示:

    通过Process Hollowing在内存中加载解密出来的Payload2,如下所示:
  21. 执行解密出来的Payload2里面的代码,如下所示:

    然后跳转到相应的代码,如下所示:

    进入Payload2代码段处执行,如下所示:

    动态跟踪之后,就进入到了此款银行木马最核心的功能模块代码处,如下所示:

    Payload2反汇编代码如下所示:
  22. 打开进程,如下所示:

    解密出.bss段的相应的字符串数据,如下所示:

    判断操作系统版本,如下所示:

    相应的反汇编代码如下:
  23. 获取进程相关信息,如下所示:

    相应的反汇编代码如下:
  24. 获取操作系统用户名,如下所示:

    获取操作系统主机名,如下所示:
  25. 设置键盘钩子,获取键盘记录,如下所示:

    卸载键盘钩子,如下所示:
  26. 获取剪切板的数据信息,如下所示:
  27. 进行截屏操作,如下所示:

  28. 创建命名通道,收集进程数据,如下所示:
  29. 解密出相应的C2地址http://195.123.237.123, 如下所示:
  30. 将获取到的相关信息,发送到远程恶意服务器,如下所示:
  31. 进程退出,卸载模块,如下所示:

三 总结

根据笔者近期的观察,银行木马家族最近一段时间都非常活跃,包括:Emotet、TrickBot、Ursnif、Osiris、Zeus等家族,可以预测在未来一段时间里,可能会有新一轮专门针对金融行业的恶意攻击,请金融行业的各大企业做好相应的防范准备工作。

四 相关IOC

MD5
D236F9AAD941974C2B44BF7DEBD2A19B

IP
195.123.237.123

附件样本解压密码:infected(包含母体样本,加载核心模块的Payload1,解密之后的银行木马核心模块Payload2)

Sample.zip (0.677 MB) 下载附件
源链接

Hacking more

...