来自papers: peer-to-peer botnets overview and case study. 2007.
1 协议:overnet (kademlia)
2 目标:windows 95,98,me,2k,xp
3 捕获时间:07年1月
4 PerilEyez分析结果:Trojan.Peacomm二进制首先通过在系统驱动中增加"wincom32.sys"来建立初始bot,驱动被注入到windows进程:services.exe.这个服务随机像P2p客户端一样下载二次注入payload. 除此之外,它同时关闭了系统防火墙。其中"ICF/ICS"服务(intenet connection Firewall/internet connection sharing)被从"人工"改为"关闭",推测起来,这一步被用来保证peer之间进行通信。开启了一下端口:
TCP: 139, 12474
UDP: 123,137,138,1034, 1035, 7871, 8705, 19013, 40519.
5 BootStrap过程:
第一个发出的包是用来实施bootstrap 过程,即变为overnet的一部分。为了bootstrap到overnet,它内置了几个overnet结点(可能在线)。安装过程创建的初始peer列表放置在文件:%windir%/system32/wincom32.ini下。并且这些peer-list是hard-coded到bots的二进制代码中,不知道攻击者为什么要选这些。不过令人信服的是,这些list是可以在每一次成功传播周期后更新的。不过,如果攻击者没有其他方法来改变bootstrap 结点,它们将成为集中式的单点失效点。
Peer-list格式如下:(Wincom32.ini )
[peers]
1: <128 bit md4 hash>=<IP address><port><2 byte flag>
2: <128 bit md4 hash>=<IP address><port><2 byte flag>
3:..
我们的样本中共146行,每一行都有两部分组成: 一个128位16进制的md4 hash和一个node ID包括:IP地址,端口号和一个不知道的标志。并且有一个等号在两者之间。虽然这些结点存在集中式的单点失效可能,但是很难保证146个结点都失效。但是,监控到这些结点的流量可以对peacomm botnet的大小进行测量。
6 通信协议:
P2p botnets比集中式botnet在通信方面有更多的灵活性,peacomm使用Kademlia-based协议(overnet),可以通过给予查询keys快速定位values(资源)。简要介绍如下:
- 使用128位的数字空间(这个似乎应该是160位吧??Grizzard 的论文中写的是128位,而事实上MD5是128位hash值,但SHA1已经是160位了)
- 结点ID在这个数字空间范围之内
- Values(资源)被映射到数字空间的Keys
- Key/values 对被存储在closest结点
- "close"是通过XOR函数来计算的
- 每个K-bucket(k桶)都保存结点的List
通过分析网络流量数据,peacomm bot的通信协议可以分为5个重要部分:
- 连接到overnet:bot发布自己到overnet,并且连接其他peer,初始peers被硬编码到bot中;
- 下载二次注入URL:bot使用硬编码key获取和下载overnet上的value,这个value是一些可执行的加密url,用来指向二次注入可执行文件的位置;
- 解密二次注入URL:bot使用硬编码key解密下载的value,是一个URL
- 下载二次注入可执行文件:从刚才解密的url对应的web server中下载。
- 执行二次注入:执行二次注入,可能用来安排以后的升级和跟踪其他资源。
这里有一些有意思的地方:
- 初始lists是脆弱的,可以阻断其,以防止bots进行bootstrap和下载二次注入代码。这些nodes可以被监控来检测可能的注入主机。
- P2p协议被用来作为name resolution服务来进行升级bot(获取url),而在这之前,bots基本上采用DNS或者动态DNS,如果DNS提供商和政府可做,则可以使这些botnets瘫痪。但这里的p2p DNS,没有确定的政权可以控制p2p内容,特别是当数据还是加密的时候。如果数据是被公私钥加解密,那么想伪造这些URL将会变成一个挑战。
7 二次感染:
Peacomm被设计成通过一系列二次注入来获得改进,包括:
- Rootkit组件下载器
- SMTP Spamming组件
- Spamming 阶段的邮件地址收集器
- 邮件传播组件
-
DDOS工具
这些工具可以通过p2p网络从二次注入过程中获取。当然,如果给定keys变化,二次注入过程也会发生改变。另外,bot可以周期性的升级自己通过p2p 网络。这就是攻击者对此botnet采用的基本命令与控制原理。
Peers传递包含URLs(真实载荷)的文件。为了成功交换二次注入URLs,peacomm只需要获取包含meta tag和结果hash的搜索相应。在获取二次注入URLs之后,二次注入载荷的下载是僵尸主机通过HTTP方式
进行的。URL类似:http://xxx.xxx.xxx.xxx/aff/dir/. (中间是ip), 我们后来的测试表明,载荷是会变化的,表明攻击者升级了二次注入代码。
通过:http://www.secureworks.com/research/threats/view.html?threat=storm-worm (J. stewart)分析,搜索key是通过一个build-in(内置)算法,通过当前日期和【0,31】中随机数作为输入产生的。这就意味着botmaster在一个指定的天中会产生一个新的URL通过32不同的keys。对于此算法一个有趣的问题是,一些机器并没有保持精确地时钟。我们还没有研究出这个算法是如何利用时间作为输入的,但是可以推测:
如果时钟不正确将会组织bots获取二次注入代码。
防御:对于Overnet结构,index poisoning 目录污染是一个有趣的防御策略。(Liang et.al 描述了在Overnet和FastTreack中进行目录污染的方法:(J.liang, N.Naoumov, and K.w.Ross, [ the index poisoning attack in p2p file-sharing systems],infocom 2006).在他们的描述中,目录污染的动机是区别于版权资料共享相关的技术分析的。然后,目录污染可应用到像peacomm的botnet中。可以减慢它的注入速度,也可测量它的感染结点数目。(下一步工作)
8 网络流量分析
见论文4.5.不详细说明,给出一些结论:
- Bot 搜索5个不同的key在其活动中。(第一个key是自己的ID hash,因为Kademlia(overnet)算法指定nodes必须定期搜索自己的key,用来确定它的相邻点,不懂了看Kademlia的算法)。
- 作者的试验中只看到一个到自己机器的搜索请求(基本确定这个ip也被感染了),表现出很难检测其他感染主机,特别但从流量跟踪数据中(流量泯灭在overnet的其他正常流量中)。
作者的主页是:http://juliangrizzard.com/publications.html。大牛啊。