简介
与其他代码一样,恶意软件也会存在漏洞。事实上,大多数恶意软件并不会进行质量控制,所以存在漏洞的概率更大。本文介绍Mirai代码中的一个小bug,该漏洞存在于多个变种中。其他攻击者可以利用该漏洞来破坏C2服务器。
漏洞利用
当用户名是1025+ "a"字符序列时Mirai服务器会崩溃
当有用户连接到Mirai C2服务器时,会要求输入用户名和密码来进行认证。如果用户在用户名处输入1025+字符串时,C2服务器可能会崩溃,如上图所示。
下面分析崩溃的原因,首先解释一个简单程序,然后分析Mirai。
编程风格很差的程序
下图是用GO语言编写的程序,功能是输入name并打印出来。该程序首先将name保存为字符串,然后复制到字节缓存中,然后将缓存打印出来。虽然看似没有什么问题,但是该程序有一个漏洞。因为缓存的大小声明为10。
缓存大小为10,可能会导致溢出
如果输入比较小的话,程序运行是正常的,比如Ankit这样的输入。但是如果输入值大于10,如Ankitxxxxxxxxxxxxxxxxxxxx,程序的运行就会出现错误。
Mirai代码分析
下面看一下Mirai的源码:
Github上的部分Mirai代码
可以看出username传递给了Readline函数。从函数名可以看出该函数应该是个库函数,实际上这是一个定制的函数,声明其固定缓存大小为1024。这也是为什么当username的长度大于1025时该模块会崩溃的原因。
总结
今年以来发现的大多数IoT僵尸网络都是基于Mirai的,该漏洞也存在于多个变种中。
还没有评论,来说两句吧...