BLD家族的另一个视角
<ul><li>IDA-Helper + Malook + Aplysia 组合使用样例。</li></ul><!--kg-card-begin: markdown--><h1 id="bld">关于BLD 家族</h1>
<p>在 360netlab 内部我们一般以通讯协议为切入点，将恶意样本进行分类，而 bld 正是我们分类后的一个家族。其投递目标主要为Linux+IOT，作为一个公开源码的恶意软件家族，在不同的项目中具有完全不同的名字，不同的厂商在遇到变种后，也会用一些特有的名字标记它，比如 Qbot/Gafgyt 等。由于其源代码公开的特性，该家族变种繁多复杂，这也导致对这个家族的梳理变得很困难。</p>
<p>本文将以其核心函数 processCmd 为切入点（在一些变种分支中该函数被命名为cncinput），对这个家族进行一个简单的梳理。相信在这个全新的视角下，可以让读者从另一个角度理解到这个家族的特点。</p>
<h1 id="processcmd">关于processCmd</h1>
<p><strong>函数声明</strong>：void processCmd(int argc, unsigned char *argv[])；</p>
<p><strong>函数输入</strong>：从 CC 读取到的字符串列表。</p>
<p><strong>函数功能</strong>：解析报文的指令，并调用相应的处理函数。</p>
<p>通过以上事实，不难看出， processCmd 这个函数其实就是 BLD 家族的核心函数，通过对这个函数的剖析，我们可以比较全面的了解这个家族的一些共性。</p>
<p>以下是该函数的部分截图，帮助读者快速理解该函数的状态：</p>
<p><img src="__GHOST_URL__/content/images/2020/09/processCmd_Code.png" alt="processCmd_Code" loading="lazy"></p>
<p><img src="__GHOST_URL__/content/images/2020/09/processCmd_Graph.png" alt="processCmd_Graph" loading="lazy"></p>
<h1 id="processcmd">分析 processCmd</h1>
<p>这里我们找到了 72558 个 bld 样本，包含各种经常遇到的CPU架构（x86/arm/mips/powerpc 等）</p>
<p>拿到这些样本后，我们再对每一个样本支持的指令情况进行统计，从而得到了如下三个问题的答案:</p>
<ol>
<li>该家族最受欢迎的攻击向量有哪些？</li>
<li>该家族的各变种中，大概有多少种不同的攻击向量组合？</li>
<li>在各种攻击向量组合中，哪些组合又是最受欢迎的？</li>
</ol>
<h2 id="">最受欢迎的攻击向量</h2>
<p>通过分析每个样本的 processCmd ，一共获得了 1307 条不同的指令。</p>
<p>各指令中，样本数占比超过 10% 的指令如下图所示：</p>
<p><img src="__GHOST_URL__/content/images/2020/09/Commands.png" alt="Commands" loading="lazy"></p>
<p>为方便大家理解各指令的具体含义，这里简单列一下图中出现的指令含义：</p>
<p><strong>UDP</strong>: 基于UDP协议的洪水攻击，报文内容随机（makeRandomStr函数填充），可伪造源IP。<br>
<strong>TCP</strong>：基于TCP协议的洪水攻击，报文内容为空，可伪造源IP，tcp.flag 值可调节。<br>
<strong>STD</strong>：基于TCP协议的洪水攻击，报文内容为固定列表内随机，可完成一个完整的TCP会话。<br>
<strong>HTTP</strong>：基于HTTP协议的洪水攻击，User-Agent 为固定列表随机。<br>
<strong>STOP</strong>：停止指令，通过杀子进程的方式，停止正在执行的攻击任务。<br>
<strong>CNC</strong>：CNC设置。<br>
<strong>VSE</strong>：基于UDP协议的洪水攻击，报文内容固定（&quot;TSource Engine Query&quot;），可伪造源IP。<br>
<strong>XMAS</strong>：基于TCP协议的洪水攻击，报文大小可调，可伪造源IP，tcp.flag 内容固定。<br>
<strong>ACK</strong>： 基于TCP协议的洪水攻击，tcp.flag 为 ACK。<br>
<strong>SYN</strong>: 基于TCP协议的洪水攻击，tcp.flag 为 SYN。<br>
<strong>CUDP</strong>:基于 UDP 协议的洪水攻击，全参数可调（报文长度，是否伪造源IP，攻击时长等）。<br>
<strong>CTCP</strong>：基于TCP协议的洪水攻击，全参数可调。<br>
<strong>CVSE</strong>：基于UDP协议的洪水攻击，参考VSE，全参数可调。<br>
<strong>NIGGA</strong>：停止指令，同 STOP 指令，出现在不同的样本分支中。<br>
<strong>CXMAS</strong>：基于TCP协议的洪水攻击，报文大小可调，可伪造源IP，全参数可调。<br>
<strong>stop</strong>：停止指令，同 STOP 指令，出现在不同的样本分支中，有时和 Stop 指令一同出现。<br>
<strong>Stop</strong>：停止指令，同 STOP 指令，出现在不同的样本分支中，有时和 stop 指令一同出现。<br>
<strong>PING</strong>：存活测试，CC发送该指令后，一般Bot会配合性回复 PONG 或 PONG!<br>
<strong>HEX</strong>： 基于TCP协议的洪水攻击，内容为一段指定的无意义字符。<br>
<strong>TELNET</strong>：基于 telnet 协议的传播指令，利用telnet弱口令进行传播。<br>
<strong>STOMP</strong>： 综合 STD 和 UDP 的攻击<br>
<strong>STDHEX</strong>： 参考STD攻击，报文内容为指定的HEX<br>
<strong>PONG!</strong>：  心跳回复报文，和 PING 指令配对出现。</p>
<h2 id="">攻击向量组合统计</h2>
<p>通过分析每个样本的 processCmd ，一共获得了 1412 种不同的向量分组。</p>
<p>我们可以近似理解为，BLD家族分出了 1412 种变化。下图为 TOP30 的结果。</p>
<p><img src="__GHOST_URL__/content/images/2020/09/VectorsList.png" alt="VectorsList" loading="lazy"></p>
<p>从图中内容，可以大致看出，其实每个分支对BLD的目标要求是不同的。</p>
<p>比如图中第 14 个分组，它的目标似乎是从 Bot 侧发起 AMP 反射放大攻击。</p>
<p>而另一些分组，则会对自更新有要求，所以指令中出现了 UPDATE 指令的字样。比如第 9/11/14 等组。</p>
<p>从数量占比情况看，第一组的占比在20%，远超第二组的6%。这意味着，该组合也是最受欢迎的向量组合。于此同时，似乎也意味着，第一组内各样本就是 BLD 家族的主分支。</p>
<!--kg-card-end: markdown-->
 * IDA-Helper + Malook + Aplysia 组合使用样例。


关于BLD 家族


在 360netlab 内部我们一般以通讯协议为切入点，将恶意样本进行分类，而 bld 正是我们分类后的一个家族。其投递目标主要为Linux+IOT，作为一个公开源码的恶意软件家族，在不同的项目中具有完全不同的名字，不同的厂商在遇到变种后，也会用一些特有的名字标记它，比如 Qbot/Gafgyt 等。由于其源代码公开的特性，该家族变种繁多复杂，这也导致对这个家族的梳理变得很困难。


本文将以其核心函数 processCmd 为切入点（在一些变种分支中该函数被命名为cncinput），对这个家族进行一个简单的梳理。相信在这个全新的视角下，可以让读者从另一个角度理解到这个家族的特点。



关于processCmd


函数声明：void processCmd(int argc, unsigned char *argv[])；


函数输入：从 CC 读取到的字符串列表。


函数功能：解析报文的指令，并调用相应的处理函数。


通过以上事实，不难看出， processCmd 这个函数其实就是 BLD 家族的核心函数，通过对这个函数的剖析，我们可以比较全面的了解这个家族的一些共性。


以下是该函数的部分截图，帮助读者快速理解该函数的状态：









分析 processCmd


这里我们找到了 72558 个 bld 样本，包含各种经常遇到的CPU架构（x86/arm/mips/powerpc 等）


拿到这些样本后，我们再对每一个样本支持的指令情况进行统计，从而得到了如下三个问题的答案:


 1. 该家族最受欢迎的攻击向量有哪些？
 2. 该家族的各变种中，大概有多少种不同的攻击向量组合？
 3. 在各种攻击向量组合中，哪些组合又是最受欢迎的？



最受欢迎的攻击向量


通过分析每个样本的 processCmd ，一共获得了 1307 条不同的指令。


各指令中，样本数占比超过 10% 的指令如下图所示：





为方便大家理解各指令的具体含义，这里简单列一下图中出现的指令含义：


UDP: 基于UDP协议的洪水攻击，报文内容随机（makeRandomStr函数填充），可伪造源IP。

TCP：基于TCP协议的洪水攻击，报文内容为空，可伪造源IP，tcp.flag 值可调节。

STD：基于TCP协议的洪水攻击，报文内容为固定列表内随机，可完成一个完整的TCP会话。

HTTP：基于HTTP协议的洪水攻击，User-Agent 为固定列表随机。

STOP：停止指令，通过杀子进程的方式，停止正在执行的攻击任务。

CNC：CNC设置。

VSE：基于UDP协议的洪水攻击，报文内容固定（"TSource Engine Query"），可伪造源IP。

XMAS：基于TCP协议的洪水攻击，报文大小可调，可伪造源IP，tcp.flag 内容固定。

ACK： 基于TCP协议的洪水攻击，tcp.flag 为 ACK。

SYN: 基于TCP协议的洪水攻击，tcp.flag 为 SYN。

CUDP:基于 UDP 协议的洪水攻击，全参数可调（报文长度，是否伪造源IP，攻击时长等）。

CTCP：基于TCP协议的洪水攻击，全参数可调。

CVSE：基于UDP协议的洪水攻击，参考VSE，全参数可调。

NIGGA：停止指令，同 STOP 指令，出现在不同的样本分支中。

CXMAS：基于TCP协议的洪水攻击，报文大小可调，可伪造源IP，全参数可调。

stop：停止指令，同 STOP 指令，出现在不同的样本分支中，有时和 Stop 指令一同出现。

Stop：停止指令，同 STOP 指令，出现在不同的样本分支中，有时和 stop 指令一同出现。

PING：存活测试，CC发送该指令后，一般Bot会配合性回复 PONG 或 PONG!

HEX： 基于TCP协议的洪水攻击，内容为一段指定的无意义字符。

TELNET：基于 telnet 协议的传播指令，利用telnet弱口令进行传播。

STOMP： 综合 STD 和 UDP 的攻击

STDHEX： 参考STD攻击，报文内容为指定的HEX

PONG!： 心跳回复报文，和 PING 指令配对出现。



攻击向量组合统计


通过分析每个样本的 processCmd ，一共获得了 1412 种不同的向量分组。


我们可以近似理解为，BLD家族分出了 1412 种变化。下图为 TOP30 的结果。





从图中内容，可以大致看出，其实每个分支对BLD的目标要求是不同的。


比如图中第 14 个分组，它的目标似乎是从 Bot 侧发起 AMP 反射放大攻击。


而另一些分组，则会对自更新有要求，所以指令中出现了 UPDATE 指令的字样。比如第 9/11/14 等组。


从数量占比情况看，第一组的占比在20%，远超第二组的6%。这意味着，该组合也是最受欢迎的向量组合。于此同时，似乎也意味着，第一组内各样本就是 BLD 家族的主分支。

{"version":"0.3.1","atoms":[],"cards":[["markdown",{"markdown":"# 关于BLD 家族\n\n在 360netlab 内部我们一般以通讯协议为切入点，将恶意样本进行分类，而 bld 正是我们分类后的一个家族。其投递目标主要为Linux+IOT，作为一个公开源码的恶意软件家族，在不同的项目中具有完全不同的名字，不同的厂商在遇到变种后，也会用一些特有的名字标记它，比如 Qbot/Gafgyt 等。由于其源代码公开的特性，该家族变种繁多复杂，这也导致对这个家族的梳理变得很困难。\n\n本文将以其核心函数 processCmd 为切入点（在一些变种分支中该函数被命名为cncinput），对这个家族进行一个简单的梳理。相信在这个全新的视角下，可以让读者从另一个角度理解到这个家族的特点。\n\n# 关于processCmd\n\n**函数声明**：void processCmd(int argc, unsigned char \\*argv\\[\\])；\n\n**函数输入**：从 CC 读取到的字符串列表。\n\n**函数功能**：解析报文的指令，并调用相应的处理函数。\n\n通过以上事实，不难看出， processCmd 这个函数其实就是 BLD 家族的核心函数，通过对这个函数的剖析，我们可以比较全面的了解这个家族的一些共性。\n\n以下是该函数的部分截图，帮助读者快速理解该函数的状态：\n\n![processCmd_Code](__GHOST_URL__/content/images/2020/09/processCmd_Code.png)\n\n![processCmd_Graph](__GHOST_URL__/content/images/2020/09/processCmd_Graph.png)\n\n# 分析 processCmd\n\n这里我们找到了 72558 个 bld 样本，包含各种经常遇到的CPU架构（x86/arm/mips/powerpc 等）\n\n拿到这些样本后，我们再对每一个样本支持的指令情况进行统计，从而得到了如下三个问题的答案:\n\n1. 该家族最受欢迎的攻击向量有哪些？\n2. 该家族的各变种中，大概有多少种不同的攻击向量组合？\n3. 在各种攻击向量组合中，哪些组合又是最受欢迎的？\n\n## 最受欢迎的攻击向量\n\n通过分析每个样本的 processCmd ，一共获得了 1307 条不同的指令。\n\n各指令中，样本数占比超过 10% 的指令如下图所示：\n\n![Commands](__GHOST_URL__/content/images/2020/09/Commands.png)\n\n为方便大家理解各指令的具体含义，这里简单列一下图中出现的指令含义：\n\n**UDP**: 基于UDP协议的洪水攻击，报文内容随机（makeRandomStr函数填充），可伪造源IP。\n**TCP**：基于TCP协议的洪水攻击，报文内容为空，可伪造源IP，tcp.flag 值可调节。\n**STD**：基于TCP协议的洪水攻击，报文内容为固定列表内随机，可完成一个完整的TCP会话。\n**HTTP**：基于HTTP协议的洪水攻击，User-Agent 为固定列表随机。\n**STOP**：停止指令，通过杀子进程的方式，停止正在执行的攻击任务。\n**CNC**：CNC设置。\n**VSE**：基于UDP协议的洪水攻击，报文内容固定（\"TSource Engine Query\"），可伪造源IP。\n**XMAS**：基于TCP协议的洪水攻击，报文大小可调，可伪造源IP，tcp.flag 内容固定。\n**ACK**： 基于TCP协议的洪水攻击，tcp.flag 为 ACK。\n**SYN**: 基于TCP协议的洪水攻击，tcp.flag 为 SYN。\n**CUDP**:基于 UDP 协议的洪水攻击，全参数可调（报文长度，是否伪造源IP，攻击时长等）。\n**CTCP**：基于TCP协议的洪水攻击，全参数可调。\n**CVSE**：基于UDP协议的洪水攻击，参考VSE，全参数可调。\n**NIGGA**：停止指令，同 STOP 指令，出现在不同的样本分支中。\n**CXMAS**：基于TCP协议的洪水攻击，报文大小可调，可伪造源IP，全参数可调。\n**stop**：停止指令，同 STOP 指令，出现在不同的样本分支中，有时和 Stop 指令一同出现。\n**Stop**：停止指令，同 STOP 指令，出现在不同的样本分支中，有时和 stop 指令一同出现。\n**PING**：存活测试，CC发送该指令后，一般Bot会配合性回复 PONG 或 PONG!\n**HEX**： 基于TCP协议的洪水攻击，内容为一段指定的无意义字符。\n**TELNET**：基于 telnet 协议的传播指令，利用telnet弱口令进行传播。\n**STOMP**： 综合 STD 和 UDP 的攻击\n**STDHEX**： 参考STD攻击，报文内容为指定的HEX\n**PONG!**：  心跳回复报文，和 PING 指令配对出现。\n\n\n## 攻击向量组合统计\n\n通过分析每个样本的 processCmd ，一共获得了 1412 种不同的向量分组。\n\n我们可以近似理解为，BLD家族分出了 1412 种变化。下图为 TOP30 的结果。\n\n![VectorsList](__GHOST_URL__/content/images/2020/09/VectorsList.png)\n\n从图中内容，可以大致看出，其实每个分支对BLD的目标要求是不同的。\n\n比如图中第 14 个分组，它的目标似乎是从 Bot 侧发起 AMP 反射放大攻击。\n\n而另一些分组，则会对自更新有要求，所以指令中出现了 UPDATE 指令的字样。比如第 9/11/14 等组。\n\n从数量占比情况看，第一组的占比在20%，远超第二组的6%。这意味着，该组合也是最受欢迎的向量组合。于此同时，似乎也意味着，第一组内各样本就是 BLD 家族的主分支。\n"}]],"markups":[],"sections":[[3,"ul",[[[0,[],0,"IDA-Helper + Malook + Aplysia 组合使用样例。"]]]],[10,0],[1,"p",[]]],"ghostVersion":"3.0"}