自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用命令行對(duì)無文件惡意軟件進(jìn)行取證

安全 應(yīng)用安全
在最近的幾年,Linux面臨的一個(gè)日益嚴(yán)重的威脅—-基于無文件落地型的惡意軟件。無文件惡意軟件是指將自身注入到正在運(yùn)行的Linux系統(tǒng)中,并且不會(huì)在磁盤上留下任何痕跡?,F(xiàn)在已經(jīng)有多種手法可以實(shí)現(xiàn)無文件攻擊:

 前言

[[334699]]

在最近的幾年,Linux面臨的一個(gè)日益嚴(yán)重的威脅—-基于無文件落地型的惡意軟件。無文件惡意軟件是指將自身注入到正在運(yùn)行的Linux系統(tǒng)中,并且不會(huì)在磁盤上留下任何痕跡?,F(xiàn)在已經(jīng)有多種手法可以實(shí)現(xiàn)無文件攻擊:

1.執(zhí)行二進(jìn)制文件后從磁盤刪除自身。

2.在不寫入磁盤的情況下直接將代碼注入正在運(yùn)行的服務(wù)器(例如,在PHP服務(wù)器通過易受攻擊的輸入來運(yùn)行PHP代碼)。

3.使用諸如ptrace()之類的系統(tǒng)調(diào)用附加到正在運(yùn)行的進(jìn)程,并將代碼插入內(nèi)存空間執(zhí)行。

4.使用諸如memfd_create()之類的方法在RAM中創(chuàng)建一個(gè)可以運(yùn)行的匿名文件。

在本篇文章中,我們將討論如何檢測最后一個(gè)攻擊向量。

memfd_create()無文件攻擊

首先,向大家介紹一個(gè)linux系統(tǒng)的底層調(diào)用函數(shù)memfd_create()。該函數(shù)允許您在RAM中創(chuàng)建駐留文件,將文件保存到RAM而不是文件系統(tǒng)本身。調(diào)用成功后,您就可以引用這個(gè)內(nèi)存駐留文件,就像您操作磁盤目錄中的文件一樣。 在man中的描述:

memfd_create()創(chuàng)建一個(gè)匿名文件并返回引一個(gè)文件描述符。該文件的行為類似于常規(guī)文件,并可以進(jìn)行修改,截?cái)?,?nèi)存映射等。但是,與常規(guī)文件不同,它位于RAM中并且具有易失性。

您可以將其理解為并不是在Linux主機(jī)上直接調(diào)用/bin/ls,而是將ls加載到RAM中,可以將其稱為/ls。就如許多系統(tǒng)調(diào)用一樣,出于性能等原因,它可以被合法使用,但這也給攻擊者帶來了可乘之機(jī)。更重要的是,如果系統(tǒng)重新啟動(dòng)或被關(guān)閉,惡意軟件會(huì)立即被清除,這對(duì)于隱藏入侵者行為來說是很有價(jià)值的。

發(fā)動(dòng)進(jìn)攻

關(guān)于memfd_create()的利用方式有很多種,它們都有相似的檢測模式,所以使用哪種并不重要,在本文我們使用的是:In Only Memory ELF Execution。

我們可以直接通過SSH傳輸二進(jìn)制文件,這樣就沒有任何內(nèi)容寫入磁盤,也沒有產(chǎn)生任何交互式shell,這樣做可以大大降低攻擊被檢測的可能。

 

攻擊通過SSH將bindshell后門發(fā)送到目標(biāo)靶機(jī)并進(jìn)行執(zhí)行。運(yùn)行后代碼將在靶機(jī)上駐留并打開一個(gè)偵聽端口等待連接,入侵者可以在遠(yuǎn)程主機(jī)上執(zhí)行的任意命令。

快速檢測無文件Linux攻擊

針對(duì)文章中演示的示例可以通過一個(gè)簡單的ls和grep命令進(jìn)行檢測:ls -alR /proc/*/exe 2> /dev/null | grep memfd:.*(deleted)

此命令將遍歷/proc目錄中所有正在運(yùn)行的進(jìn)程,并檢查它們是否具有格式為memfd:(deleted)的可執(zhí)行路徑。這個(gè)條目非??梢?,并且在無文件攻擊中很常見。

運(yùn)行此命令后,正常情況下不應(yīng)有任何回響。如果您看到有任何結(jié)果返回,則應(yīng)立即調(diào)查該過程。當(dāng)然有時(shí)會(huì)有誤報(bào)的風(fēng)險(xiǎn),但是對(duì)于這種類型的攻擊,很少見到(如果有示例,請(qǐng)與我們聯(lián)系)。

 

執(zhí)行命令后顯示了以下目錄條目:lrwxrwxrwx 1 root root 0 Jul 8 23:37 /proc/14667/exe -> /memfd: (deleted)在路徑中,進(jìn)程的ID(PID)為14667,這是我們需要重點(diǎn)關(guān)注的對(duì)象。

如果攻擊者已經(jīng)使用了完備的方案實(shí)現(xiàn)了對(duì)二進(jìn)制文件的隱藏,那么以下的策略可能會(huì)失效。但是對(duì)于常見的攻擊,使用這種方法是快速有效的。

使用命令行進(jìn)行攻擊取證

在本例中,bindshell啟動(dòng)后會(huì)立即綁定到TCP 31337端口,執(zhí)行反彈shell操作,開始發(fā)送盜取的敏感數(shù)據(jù)等。我們可以先使用netstat和ps命令收集攻擊信息。

通過netstat命令,我們注意到了一個(gè)反常的tcp端口,該端口的進(jìn)程名也很奇怪:netstat -nalp

 

如上圖所示,該進(jìn)程的PID為14667。下一步通過PS命令查看該進(jìn)程一些具體信息:ps -auxw

 

我們?cè)谶M(jìn)程列表中,看到它的進(jìn)程名為[kwerker/0:sandfly],這將幫助它隱藏在具有相似名稱的合法進(jìn)程中。您可以在上面的列表中看到,如果不使用sandfly標(biāo)識(shí)符進(jìn)行命名,我們真的很難發(fā)現(xiàn)它。

現(xiàn)在我們已經(jīng)找到了可疑進(jìn)程,下一步就要想辦法獲取該進(jìn)程的具體信息。由于接下來大多數(shù)操作將在/proc目錄中進(jìn)行,讓我們先轉(zhuǎn)到/proc/ 目錄,其中PID是我們的可疑進(jìn)程ID。您可以使用以下命令進(jìn)入該目錄:cd / proc / 14667

進(jìn)程目錄列表

在進(jìn)程目錄中,我們可以使用ls命令列出文件夾中的內(nèi)容。Linux內(nèi)核將實(shí)時(shí)構(gòu)建目錄,并向我們顯示許多有價(jià)值的信息。ls -al

 

通過簡單的ls命令我們可以獲知:1.進(jìn)程啟動(dòng)時(shí)的日期戳。2.當(dāng)前的工作目錄(用戶最有可能在/root下啟動(dòng)進(jìn)程)。3.EXE鏈接指向一個(gè)已刪除的二進(jìn)制文件的位置。

最重要的一點(diǎn)是,在Linux上,除了少數(shù)用例外,具有deleted標(biāo)記的二進(jìn)制文件的進(jìn)程通常是惡意的。而且,該進(jìn)程不僅被刪除,還指向一個(gè)非常不尋常的位置了/memfd:這是攻擊所使用的內(nèi)存文件描述符。

使用Comm和Cmdline參數(shù)查找隱藏的Linux進(jìn)程

在/ proc目錄下的comm和cmdline文件會(huì)記錄進(jìn)程的命令名和進(jìn)程的完整命令行信息,這是一個(gè)很好的切入點(diǎn)。

當(dāng)啟動(dòng)進(jìn)程時(shí)含有參數(shù)時(shí),會(huì)在各個(gè)參數(shù)中使用字符’’進(jìn)行分割。所以當(dāng)我們使用cat命令查看cmdline文件內(nèi)容時(shí),只能打印出第一個(gè)參數(shù),即進(jìn)程名。所以我們可以使用cat命令查看comm文件,使用strings命令來查看cmdline文件。cat commstrings cmdline

comm和cmdline文件顯示以下內(nèi)容:

 

在在Linux中,大多數(shù)情況下,文件應(yīng)當(dāng)顯示一個(gè)基本上相互匹配的二進(jìn)制名稱。例如,如果您在nginx這樣的web服務(wù)器上運(yùn)行此程序,您將在這兩個(gè)文件中的某個(gè)位置看到nginx名稱。但是在這個(gè)示例中,comm文件中只是一個(gè)數(shù)字“3”,這是進(jìn)程偽裝的一種手段。同樣,cmdline文件夾中的內(nèi)容也很奇怪。這兩個(gè)文件并未正確記錄進(jìn)程名稱。

通過進(jìn)程映射來驗(yàn)證二進(jìn)制名稱

/proc/[pid]/maps文件可以顯示進(jìn)程的內(nèi)存區(qū)域映射信息。在這里也可以找到二進(jìn)制名稱,以及運(yùn)行時(shí)正在使用的其他庫文件。通常,該文件的第一部分包含對(duì)正在運(yùn)行的二進(jìn)制文件的引用(例如/usr/bin/vi)。但是在文件中,我們?cè)僖淮慰吹搅藢?duì)/memfd: (deleted)的奇怪引用。

cat maps

 

調(diào)查Linux進(jìn)程環(huán)境

很多人可能會(huì)忽略在Linux上,當(dāng)你啟動(dòng)一個(gè)進(jìn)程時(shí),它通常會(huì)附加一系列環(huán)境變量。在大多數(shù)情況下,由用戶啟動(dòng)的任何進(jìn)程都會(huì)出現(xiàn)在這里。我們?cè)噲D通過查看/proc/ /environ文件夾獲取進(jìn)程信息。

同樣,出于格式化的原因,我們將使用strings命令,這樣更易于閱讀。strings environ

 

既然我們的惡意軟件是通過SSH傳入的,縱使攻擊者設(shè)法清理的有關(guān)IP地址的日志,但是啟動(dòng)進(jìn)程時(shí)還是會(huì)留下蛛絲馬跡。

抓取二進(jìn)制文件

即便二進(jìn)制文件沒有在磁盤上存在,但是我們?nèi)钥梢苑浅1憬莸幕謴?fù)注入的二進(jìn)制文件。具體的操作細(xì)節(jié)我已經(jīng)在關(guān)于恢復(fù)已刪除的二進(jìn)制文件的文章中進(jìn)行了全面介紹,在這里只進(jìn)行簡述。

cp /proc/ /exe /destination_dir/filename在本示例中,命令如下:cp exe /tmp/malware.recovered

該文件被恢復(fù)到/tmp/malware.recovered下。您可以像往常一樣對(duì)惡意樣本進(jìn)行分析,還可以為二進(jìn)制文件生成hash值:sha1sum exesha1sum /tmp/malware.recovered

 

收集到的信息

到目前為止,我們收集到了如下信息:

1.可疑的可執(zhí)行文件的路徑。

2.進(jìn)程使用的端口號(hào)。

3.進(jìn)程名。

4.comm和cmdline文件中沒有引用相同的命令名。

5.comm文件內(nèi)容只有一個(gè)字符長。

6.進(jìn)程當(dāng)前的工作目錄位于/ root下。

7.進(jìn)程試圖鏈接已被刪除的/memfd位置,而不是合法的二進(jìn)制路徑。

8.進(jìn)程映射文件顯示相同的已刪除位置。

9.惡意軟件是通過SSH傳入的

 

事實(shí)上,Linux并不會(huì)刻意隱藏任何信息。它們就像屋檐上的觀察者一樣,或者就像我們?cè)赟andfly上所說的那樣:試圖隱藏正是一種入侵的特征。

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2022-08-14 19:19:14

Linux

2013-12-03 09:23:06

命令行網(wǎng)速

2014-12-05 10:10:48

Java

2012-03-08 10:03:11

JavaClass

2012-11-20 16:16:05

Windows

2021-12-06 11:38:17

命令Glances工具

2010-08-25 21:03:38

命令行DHCP

2014-06-09 10:23:20

2019-03-26 09:11:32

無文件惡意軟件

2016-01-04 15:17:50

Linux命令行硬件

2010-06-23 14:28:23

LINUX Bash

2019-06-17 09:30:50

命令行Windows 10管理密碼

2024-11-18 15:05:34

MySQL數(shù)據(jù)庫

2011-09-06 16:17:50

Ubuntu

2018-09-10 09:30:25

Linux命令應(yīng)用

2010-05-18 15:06:46

Subversion命

2010-05-18 16:05:24

2010-05-18 15:48:03

2010-05-31 11:42:32

MySQL基本命令

2010-08-23 09:45:46

防火墻命令行
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)