RotaJakiro后門與Buni后門關聯性分析
本文將根據360Netlab報告中提到的RotaJakiro后門特點以及微步報告中描述的Buni后門特點對二者關聯分析。經分析,兩種后門的相似之處如下:
1、單一實例
RotaJakiro通過文件鎖來實現單一實例,具體實現如下圖左所示。圖右為Buni單一實例實現方式。

2、發包與收包
RotaJakiro后門將構造上線信息加密發送至C2,其中send函數如下:

同樣的,recv函數也十分相似。

然而,RotaJakiro與Buni的不同之處似乎更多。
1、C2解密算法
OceanLotus RotaJakiro樣本中調用AES+Rotate Left解密C2,對抗技巧之一:使用stack strings obfuscation技術存儲加密的敏感資源信息。其與解密相關的各種參數如下圖所示,密文長度為32字節,明文長度為26字節。

AES解密,其中aes_dec的采用的是AES-256, CBC模式,key&iv都是硬編碼。
Rotate為循環移位,此處使用的循環左移,其中移位的次數由plain_len(明文長度)&7的值決定。

AES解密后得到以下“次級密文”:

從次級密文中取出有效密文,其中有效密文從第8字節開始,長度為明文長度減8,此處即為26-8=18字節。
最后通過明文長度26可以計算26&7=2,得到移位的次數,將上述有效密文逐字節左移2位之后得到C2明文。

而Buni后門中使用的C2加密算法為XOR。

與0xB1異或結果為 zabbixasaservice.com:443。
2、結構化流量/網絡通信包
RotaJakiro的網絡通信包由Head,Key,Payload三部分組成。其中header是必須的,長度為82字節,而body&payload部分是可選的。head&key采用的XOR&Rotate加密,payload采用AES&ZLIB加密壓縮。

head通過逐字節左移3位,然后和0x1b異或進行解密。
解密后可得
offset 0x09, 4 bytes -> payload length
offset 0x0d, 2 bytes -> key length
offset ox0f, 4 bytes -> cmdi
key的長度為0x8字節,payload 的長度為0x20字節,要執行的指令碼為0x18320e0,即上報設備信息。
key使用和head一樣的解密方法,解密后作為AES的密鑰來解密payload。
payload 使用解密后的key做為AES-256的密鑰,以CBC模式解密,第8字節起即為ZLIB壓縮數據,進行解壓。
解壓后做為新的AES密鑰,配合參數解密樣本中硬編碼的加密指令。
最后發送至C2的數據包仍以上述結構組成,其中payload 經解密為上述指令執行的結果。
Buni則是通過逐字節recv接收的方式解析流量結構。

解析結果如下,要執行的指令碼為0xdafe。

Buni的通信流量特征與RotaJakiro相似度較低。
進程偽裝
RotaJakiro進程偽裝對root/non-root做了區分。
針對root用于偽裝的文件名:/bin/systemd/systemd-daemon 或 /usr/lib/systemd/systemd-daemon
針對non-root:$HOME/.dbus/sessions/session-dbus 和$HOME/.gvfsd/.profile/gvfsd-helper
Buni 通過隨機函數產生6-12的隨機長度字符串,調用 prctl 函數設置隨機進程名稱,偽裝成系統進程。
再來看RotaJakiro與2017年Palo Alto披露的海蓮花macOS后門的相同之處。
1、C2會話建立函數
RotaJakiro與海蓮花macOS后門均使用了相對小眾的getaddrinfo()函數,Buni后門中則使用Linux常見的域名解析函數gethostbyname()。
2、上線包構造手法
RotaJakiro和海蓮花的網絡數據包都是由Head,Key,Payload三部分組成,其中Head是必須的,長度為82字節,而Key和Payload則是可選的。Head中的關鍵字段包括:
偏移1,DWORD類型,存放一個magic;
偏移9,DWORD類型,存放Payload長度;
偏移13,WORD類型,存放Key長度;
偏移15,DWORD類型,存放消息碼。
RotaJakiro通過一個單獨的函數初始化上線包的Head,海蓮花樣本中也存在一個專門初始化上線包Head的函數。

最終上線包如下,RotaJakiro與海蓮花上線包明文結構一樣,關鍵字段值基本相同。

Buni上線包如下:

3、均存在rotate函數
RotaJakiro和海蓮花都存在一個“rotate()”的函數,用于加/解密,Buni后門不包含該特征。
4、相同的指令碼
RotaJakiro和海蓮花都用DWORD類型的指令碼來指定消息的功能,并且共享了多個語義相同的指令碼。
Buni指令碼為WORD類型,未發現指令碼共享。
研究人員將Buni后門歸因為海蓮花的主要原因是其與RotaJakiro后門存在相似之處。
經分析,Buni后門與RotaJakiro后門的關聯性較低,只有創建文件鎖、發包與收包函數相似,在其他方面例如加解密算法:RotaJakiro樣本中幾乎沒有明文存在,C2地址以及執行指令均經過加密,涉及到的算法包括動態AES、Rotate Letf、ZLIB,而Buni中的指令以明文硬編碼存在,C2地址僅以異或加密,上線包特征,指令特征,持久化實現、進程偽裝等方向均無重合之處,因此筆者認為Buni后門或不足以歸因為海蓮花。