欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

深度研究CCleaner后门代码-环境编译传播攻击供应链例子

来源:本站整理 作者:佚名 时间:2017-09-26 TAG: 我要投稿

2017年9月18日,Piriform 民间宣布网安通知布告,通知布告称该公司开辟的CCleaner version 5.33.6162和CCleaner Cloud version 1.07.3191中的32位应用法式被植入了恶意病毒木马代码。被植入后门代码的软件版本被地下下载了一个月阁下,招致百万级其余用户受到影响,泄漏机械相干的敏感信息乃至极少数被运行了更多的恶意病毒木马代码。
CCleaner是自力的软件工作室Piriform开辟的体系优化和隐私保护对象,今朝曾经被防病毒厂商Avast收买,重要用来消除Windows体系再也不应用的渣滓文件,以腾出更多硬盘空间,它的另一大功效是消除应用者的上彀记载。自从2004年2月宣布以来,CCleaner的用户数量迅速增长并且很快成为应用量第一的体系渣滓清算及隐私保护软件。而恰是如许一款隐私保护软件却被爆出在民间宣布的版本中被植入恶意病毒木马代码,且该恶意病毒木马代码具有运行随意率性代码的功效。
这是继Xshell被植入后门代码变乱后,又一路严重的软件供应链入侵攻击运动。360威逼谍报中间经由过程对相干的技巧细节的进一步阐发,推想这是一个少见的基于编译情况净化的软件供应链入侵攻击,值得分享出来给网安社区评论辩论。
后门技巧细节阐发
恶意病毒木马代码功效
被植入了恶意病毒木马代码的CCleaner版本重要具有如下恶意病毒木马功效:
1.    入侵攻击者在CRT初始化函数 __scrt_get_dyn_tls_init_callback() 中拔出了一个函数挪用,并将此函数挪用指向运行另一段恶意病毒木马代码。
2.    网络主机信息(主机名、已装置软件列表、过程列表和网卡信息等)加密编码后经由过程HTTPS协定的POST哀求测验考试发送到长途IP:216.126.225.148:443,且捏造HTTP头的HOST字段为:speccy.piriform.com,并下载运行第二阶段的恶意病毒木马代码。
3.    若IP生效,则依据月份天生DGA域名,并再次测验考试发送异样的信息,假如胜利则下载运行第二阶段的恶意病毒木马代码。
植入办法推想
依据360威逼谍报中间的阐发,这次变乱极有可能是入侵攻击者入侵开辟职员机械后净化开辟情况中的CRT动态库函数形成的,招致的后果为在该开辟情况中开辟的法式都有可能被主动植入恶意病毒木马代码,响应的证据和推论如下:
1.    被植入的代码位于用户代码main函数以前

main函数以前的绿色代码块为编译器引入的CRT代码,这部门代码非用户编写的代码。
2.    植入的恶意病毒木马代码挪用过程


能够看到CRT代码 sub_4010CD 外部被拔出了一个恶意病毒木马call挪用。
3.    被植入恶意病毒木马代码的CRT代码源码挪用过程
经由过程阐发,咱们发明应用VS2015编译的Release版本法式的CRT反汇编代码与本次阐发的代码同等,挪用过程为:
_mainCRTStartup --> __scrt_common_main_seh --> __scrt_get_dyn_tls_dtor_callback --> Malicious call
4.    CCleaner中被改动的 __scrt_get_dyn_tls_init_callback() 和源码比较


基于以上的证据,能够确定的是入侵攻击者是向 __scrt_get_dyn_tls_init_callback() 中植入恶意病毒木马源代码并从新编译成OBJ文件再调换了开辟情况中的动态链接库中对应的OBJ文件,促使每次编译EXE的过程中,都邑被编译器经由过程被净化的恶意病毒木马的LIB/OBJ文件主动链接进恶意病毒木马代码,终极沾染编译天生的可运行文件。
__scrt_get_dyn_tls_init_callback() 函数位于源代码文件dyn_tls_init.c中。
入侵攻击技巧重现验证
编译情况的入侵攻击面
经由过程阐发发明,假如要向法式CRT代码中植入恶意病毒木马代码,最好的办法便是入侵攻击编译过程中引入的CRT动态链接库文件,办法有如下三种:
1.    改动CRT库文件源码,从新编译并调换编译情况中的CRT动态库文件(LIB)
2.    改动CRT库文件中某个OBJ文件对应的C源码,从新编译并调换LIB中对应的OBJ文件。
3.    改动CRT库文件中某个OBJ文件的二进制代码,并调换LIB中对应的OBJ文件。
CRT运行时库
C运行时库函数的重要功效为停止法式初始化,对全局变量停止赋初值,加载用户法式的进口函数等。
定位CRT源代码
咱们以VS2008为例,编写一个功效简略的main函数如下:

在main函数结尾处设置断点,应用/MD编译选项编译调试运行

切换到反汇编代码并运行到main函数前往:

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载