源码学习:Mirai源码

2020/04/20 -
(文章写的比较乱,主要就是记录一下自己的学习过程)

今天看了两个论文,一个是发表在顶会的对论文的分析,主要是从病毒的传播上来进行分析,简单分析了一些流量的特征;另一个是硕士的毕业论文,对源码进行了稍微全面的分析。
文章[1]是对这个病毒的源码分析,但是他图中就写的不对,他是说loader对服务器进行爆破,实际上应该是病毒进行爆破,而loader承担的是收到已经爆破达到的用户名和密码,然后进行感染的过程。
文章[2]是对简单分析,可以参考,但是感觉并不是完整分析。


这里出现一个问题,就是它收取这个用户名密码的过程,但是源码经验是从stdin中输入的?啊?
我知道了,他这个loader并不是说持续运行,只是需要进行弄得时候,从stdin来进行输入。从他发的贴子中可以看到,命令是cat ip.txt|./loader,可能意思是说,这部分内容已经是从别的地方收过来了。
但是那篇硕士论文得分析是说,他是发送到loader上,这一点不是很清楚。哦,我看了一下具体得说明,
If, however, the credentials were correct, the results are sent to a server which forwards them to the loader.反正就是最后转发过去了,到底怎么弄不清楚暂时。
找到了,他自己在那篇帖子里都说清楚了,有一个go文件是可以接收这个结果得。不过,我感觉是有些迷惑,因为这个tools得文件夹里面还有一些其他得东西。有一个single_load.c得东西。 那么本质上,这里就说清楚了,不管怎么样,他可以是直接传递过去,也可以是从别的角度。

理解了一下病毒的攻击源码。

  • 先通过rawsocket来进行端口扫描,这样应该是比较快,不用使用原生的协议栈,发现这个地址可以通信后再使用系统的
  • 攻击IP地址是随机生成的,只是对某些地址进行了过滤
  • 对于进行爆破的过程,使用select模型进行编程。
  • 爆破过程只是进行密码的探测,并进行sh、shell这种简单命令的测试之后,如果已经入侵,就发送数据到loader,虽然他是说发送倒loader,但其实是另外一个go编写的服务器,专门接受这部分信息。

那么现在基本上就比较明确了(只分析进行扫描、爆破的部分)

  1. 开启另外一个进程来专门完成扫描的工作,主进程估计是接受命令把
  2. 初始化连接表(用于后续的TCP连接),初始化raw_socket。
  3. 初始化一个随机端口,这个是源端口
  4. 自己设置一个IP原始包,包括TCP部分
  5. 解密密码部分,并初始化到一个表中,到此出,初始化工作完全结束,然后进入死循环。
  6. 先发送原始数据包到随机生成的服务器,目的端口是23,每10次为2323
  7. 然后等待这个raw_socket部分返回消息,这也是一个死循环,在接收不到消息之后,进入跳出循环,进入下一阶段,如果接收到消息的话,在已经创建的连接表中,寻找可用的连接。然后使用TCP协议栈建立连接。
  8. 上面这个死循环,如果是没有可用的TCP连接了,也会跳出。那么就是两个条件跳出,1)没有更多的数据(TCP, SYN+ACK)来传递回来 2)连接表中没有可用的连接了。
  9. 这样一个阶段,就完成了扫描的过程,那么后续就是对已经建立的连接进行爆破过程。
  10. 先对这所有的连接进行检测,同时加入到select的监控过程中。
  11. 然后通过select对这些连接进行选择,然后分别对这些连接进行爆破。
  12. 在得到有结果的内容的时候,发送回一个服务器。

自此大致上的流程就很清楚了。
中间还加入了一些混淆的东西,利用简单的异或加密,把这部分内容解密出来,然后再加密回去。

那么现在我分析过的两个内容:

  1. 病毒,进行相关的扫描,并爆破存在弱密码的服务器,将爆破结果返回服务器。这个病毒应该是启动两个进程,一个是主进程,因为没有分析,不知道是不是还生成了其他的,另一个就是扫描进程,扫描进程通过select完成爆破。
  2. loader自身并不进行结果的监听,只是从stdin拿结果,然后进行再一次实质的入侵。
    CNC还有其他的暂时没有分析。

这里面需要学习的知识包括:原生SOCKET的编程,select的TCP编程模型,telnet爆破过程的协议自动机。基本上就是这些。

文章[3]从大体轮廓上分析了这个病毒的源码,可以看看,比其他两个网站更清晰。


看了看他这个状态机部分的源码,让我感觉,就像是我当年写的那个ftp源码一样,自己能力还是不行啊。


2020/04/21 -
https://github.com/lejolly/docker-mirai
https://zhuanlan.zhihu.com/p/61442534
https://www.cdxy.me/?p=746
https://www.jianshu.com/p/d16ee2cbe1e7?from=timeline&isappinstalled=0
http://chenjingjiu.cn/index.php/2019/04/08/mirai-1/
http://chenjingjiu.cn/index.php/2019/04/08/mirai-2/


编译过程,他这里是把IP当成了域名编译进去,这样可以吗?因为我看源码里面是向8.8.8.8请求具体域名信息,并没有检测这个到底是不是已经是IP了。实际测试,他并不会智能的去测试这个东西是不是IP,我随便放了一个域名,他还是会去请求这部分IP。所以这个文章的说法存疑,他并不能在实验环境下实现。
虽然他的第二篇文章看着好像复现了,就是说把IPV4地址解析了,理解不了,不知道是什么地方设置了。
我个人偏向于他并没有实现。

2020/05/02 -
一个新增的病毒,qbot,不过这个和之前的bashlite非常像,就不单独说明了
https://github.com/tanc7/PyMirai
这个据说是mirai的python版本。
https://github.com/eurialo/lightaidra

参考文献

[1]物联网病毒原理-Mirai源码分析
[2]Mirai源码分析报告
[3]Mirai物联网僵尸攻击深度解析

 
僵尸网络

MIRAI分析
Inside the infamous Mirai IoT Botnet: A Retrospective Analysis
https://blog.cloudflare.com/inside-mirai-the-infamous-iot-botnet-a-retrospective-analysis/

这篇文章从时间线的角度上分析了这个病毒,同时对一些变种进行了聚类,不过没有具体的分析,同时他对对这个分析结果发表了一个顶会的论文。

Breaking Down Mirai: An IoT DDoS Botnet Analysis
https://www.imperva.com/blog/malware-analysis-mirai-ddos-botnet/
这篇文章,分析了源码,但是没有具体的分析,我估计应该没有人具体分析并把这个东西给报告出来。所以只能是自己分析了。

同时他提到了指纹这个东西,不知道这个指纹是指他攻击时候的指纹,还是说他跟C&C服务器进行交互时候的指纹。
同时我也看到了他使用HTTP攻击时候的头部。


2020/05/04 -
P2P 僵尸网络介绍 -
https://www.malwaretech.com/2013/12/peer-to-peer-botnets-for-beginners.html
MIRAI源码分析,分解的比较清洗
https://medium.com/@cjbarker/mirai-ddos-source-code-review-57269c4a68f
僵尸网络科普文,(文字还有图片非常不错)
https://medium.com/@umeshae/botnet-attacks-detection-and-mitigation-289ffa5aa3fb

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值