Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【木马分析】XShell后门DNS Tunnel编码分析

0
0
【木马分析】XShell后门DNS Tunnel编码分析

2017-08-15 19:35:27

阅读:377次
点赞(0)
收藏
来源: 安全客





【木马分析】XShell后门DNS Tunnel编码分析

作者:360天眼实验室





【木马分析】XShell后门DNS Tunnel编码分析

XShellGhost通过DNS Tunnel把打点的数据传上去,分析了下编码算法,对数据进行了解密。


编码分析

DNS Tunnel的编码算法是先经过下图的算法1编码;如图:


【木马分析】XShell后门DNS Tunnel编码分析

待编码的数据单字节和一个每4次运算一次的DWORD常量的1,2,3,4字节进行单字节运算来编码,如下:


【木马分析】XShell后门DNS Tunnel编码分析

算法1编码后的数据如下:


【木马分析】XShell后门DNS Tunnel编码分析

然后把结果转换成可见的字符转换方法是通过每个字节的高位加‘j’低位加‘a’,把1个字节拆分成2个字节的可见字符,这样就浪费了一个字节:


【木马分析】XShell后门DNS Tunnel编码分析

解密算法是加密算法的逆运算,解密算法流程如下图:


【木马分析】XShell后门DNS Tunnel编码分析

解密的单条数据的HEX如下:


【木马分析】XShell后门DNS Tunnel编码分析

根据网上的一些公开的流量数据,


【木马分析】XShell后门DNS Tunnel编码分析

解密出的一些上传的数据:


【木马分析】XShell后门DNS Tunnel编码分析

解密代码如下:

intDecodeSecond(inta1,unsignedchar*a2,inta3,inta4,unsignedchar*szOut) { charv4;//cl@1 intv5;//esi@1 unsignedchar*v6;//edi@2 bytev7[1024]={0};//eax@11 charv8;//dl@11 intv10;//[sp+4h][bp-10h]@1 intv11;//[sp+8h][bp-Ch]@1 intv12;//[sp+Ch][bp-8h]@1 intv13;//[sp+10h][bp-4h]@1 v4=0; v5=0; v10=a1; v11=a1; v12=a1; v13=a1; inti=0; if(a3>0) { v6=a2-a4; do { if(v5&3) { switch(v5&3) { case1: v11=0xBFD7681A-0x7DB1F70F*v11; v4=(*((byte*)&v11+2)^(*((byte*)&v11+1) +(*((byte*)&v11)^v4))) -*((byte*)&v11+3); v8=v4^*(byte*)(v6+v5+++a4); v7[i]=v8; i++; break; case2: v12=0xE03A30FA-0x3035D0D6*v12; v4=(*((byte*)&v12+2)^(*((byte*)&v12+1) +(*((byte*)&v12)^v4))) -*((byte*)&v12+3); v8=v4^*(byte*)(v6+v5+++a4); v7[i]=v8; i++; break; case3: v13=0xB1BF5581-0x11C208F*v13; v4=(*((byte*)&v13+2)^(*((byte*)&v13+1) +(*((byte*)&v13)^v4))) -*((byte*)&v13+3); v8=v4^*(byte*)(v6+v5+++a4); v7[i]=v8; i++; break; } } else { v10=0x9F248E8A-0x2F8FCE7E*v10; v4=(*((byte*)&v10+2)^(*((byte*)&v10+1) +(*((byte*)&v10)^v4))) -*((byte*)&v10+3); v8=v4^*(byte*)(v6+v5+++a4); v7[i]=v8; i++; } } while(v5<a3); memcpy(szOut,v7,a3); } return0; } voidDecodeFirst(unsignedchar*szText) { intiLength=strlen((char*)szText); intiSubLength=iLength/2; unsignedchar*szXXX=newunsignedchar[iSubLength+1]; memset(szXXX,0,iSubLength+1); for(inti=0;i<iSubLength;i++) { unsignedcharOne=szText[2*i]-'a'; unsignedcharTwo=szText[2*i+1]-'j'; unsignedcharTotal=One+Two*16; szXXX[i]=Total; } unsignedchar*szOutData=newunsignedchar[iSubLength+1]; memset(szOutData,0,iSubLength+1); DecodeSecond(0,szXXX,iSubLength,0,szOutData); printf("--------------------DecodeData--------------------------------\r\n"); hexdump(szOutData,iSubLength); delete[]szOutData; return; } voidhexdump(void*pAddressIn,longlSize) { charszBuf[100]; longlIndent=1; longlOutLen,lIndex,lIndex2,lOutLen2; longlRelPos; struct{char*pData;unsignedlonglSize;}buf; unsignedchar*pTmp,ucTmp; unsignedchar*pAddress=(unsignedchar*)pAddressIn; buf.pData=(char*)pAddress; buf.lSize=lSize; while(buf.lSize>0) { pTmp=(unsignedchar*)buf.pData; lOutLen=(int)buf.lSize; if(lOutLen>16) lOutLen=16; sprintf(szBuf,"|" "" "%08lX",pTmp-pAddress); lOutLen2=lOutLen; for(lIndex=1+lIndent,lIndex2=53-15+lIndent,lRelPos=0; lOutLen2; lOutLen2--,lIndex+=2,lIndex2++ ) { ucTmp=*pTmp++; sprintf(szBuf+lIndex,"%02X",(unsignedshort)ucTmp); if(!isprint(ucTmp))ucTmp='.';//nonprintablechar szBuf[lIndex2]=ucTmp; if(!(++lRelPos&3))//extrablankafter4bytes {lIndex++;szBuf[lIndex+2]='';} } if(!(lRelPos&3))lIndex--; szBuf[lIndex]='|'; szBuf[lIndex+1]=''; printf("%s\n",szBuf); buf.pData+=lOutLen; buf.lSize-=lOutLen; } }

解密工具

链接:http://pan.baidu.com/s/1gfy4ImZ

密码:vugv


参考链接

http://bobao.360.cn/news/detail/4263.html



【木马分析】XShell后门DNS Tunnel编码分析
【木马分析】XShell后门DNS Tunnel编码分析
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4258.html

Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images