1. 程式人生 > >ShellShock(破殼漏洞)的簡單分析

ShellShock(破殼漏洞)的簡單分析

(如果有幫助,請點個贊;如果有錯誤,請指出;如果轉載,請註明出處)

背景:

剛好,這幾天網上曝出BashShell的ShellShock漏洞。我們就湊一下熱鬧。有興趣的話,可以先看一下下面這幾篇文章:

正文:

下面將從以下幾個問題談一下ShellShock:

(1)什麼是Bash?什麼事ShellShock?

(2)ShellShock漏洞的原理。

(3)ShellShock漏洞的危害。

(4)如何修復ShellShock漏洞。

一、什麼是Bash?什麼是ShellShock?

(1)什麼是Bash?

     如果不知道什麼是shell,這篇部落格建議不要看下去了。實在想了解的話,貼個百科連結吧:

百度百科:shell BashShell全稱是Bourne Again Shell ,是GNU計劃的一部分,用來替代Bourne shell。它用於基於GNU的系統如Linux.大多數的Linux(Red Hat,Slackware,Caldera)都以bash作為預設的shell,並且執行sh時,其實呼叫的是bash。估計用過Linux系統的童鞋都不會陌生,Mac使用者估計也會接觸到。

(2)什麼是ShellShock?

    1)ShellShock是剛剛曝光的一個BashShell漏洞(據說不僅僅是Bash,其他shell也可能有這個漏洞)。

    2)按照一般情況來說,系統裡面的Shell是有嚴格的許可權控制的,如果沒有相應的許可權,是根本看不到某些命令的存在,更不要說執行這些命令。

    3)但是,Bash在執行的過程中會呼叫作業系統的環境變數,並且會執行一些設定命令。通過ShellShock漏洞,入侵者可以把某些”本來沒有許可權執行的語句或者命令“,注入到環境變數裡。當bash設定環境變數的時候,就會執行這些”被注入“命令。這樣子便繞過使用者許可權的限制,把一些”沒有許可權執行的命令“,變成”具有執行許可權的命令“了。從而可以在系統內任意執行Bash命令語句,胡作非為(相當於獲得root超級使用者許可權)。

二、ShellShock漏洞的原理。

上面其實已經簡單的描述了ShellShock的原理,下面詳細說一下ShellShock漏洞的一些細節。

(1)如何測試自己的系統有沒有ShellShock漏洞。

假設是Linux 系統的管理員,在 shell 中輸入下面這條測試命令:

env x=’() { :;}; echo XXXXXX’ bash -c “echo This is a test code"

可能會出現兩種情況:

   1)「XXXXXX」就是表示系統有漏洞,需要馬上更新。
   2)「bash: warning: x: ignoring function definition attempt」表示不存在漏洞。

(2)為什麼說出現XXXXXX就是有漏洞呢?

   1)Linux WEB Server一般可以提供CGI介面,允許遠端執行Bash命令;

   2)對於HTTP頭部,CGI指令碼解析器會將其當作環境變數,呼叫bash的env相關函式設定到臨時環境變數中;

   3)HTTP協議允許傳送任意客戶端自定義的HTTP頭部;

   4)這樣就產生了一個完整的可供Bash命令注入的場景,客戶端故意傳送構造好的帶攻擊命令的HTTP頭部到服務端,服務端呼叫設定環境變數的函式,直接執行了客戶端指定的頭部裡面的命令。並且還會將結果一併返回給客戶端。

再回到剛才那個漏洞測試語句看一下:

    1)env x=’() { :;}; echo XXXXXX’          

     這一整句是一條設定環境系統的語句,按理來說,它的功能只是執行系統環境變數的功能。

    2)”echo XXXXXX“        

     這是一條shell列印語句,理論上不應該出現在環境變數設定裡面,就算出現了也不應該執行的。表示列印“XXXXXX”這個字串的意思。理論上,這句命令是不應該被執行的,如果被執行了,就意味著有漏洞。入侵者可以把”echo XXXXXX“ 這句命令,換成其他的shell命令,從而做一些不被允許的事情。

    3)補充一句吧,我在上面那裡提到的,通過這個漏洞就獲取到超級使用者root許可權的說法不太準確。

    知乎上@吳昊給出了更準確的表述:“有了bash不等於有一切,要看是什麼許可權執行的bash。cgi伺服器程序一般不會是root許可權。如果是的話,那個網站的網(yun)管(wei)就可以開了又開了。所以拿到的很大機率是一個像"www_data"這樣的使用者許可權拿到www_data可以做什麼呢?可以看網站的配置檔案,裡面可能有資料庫密碼,然後就可以進資料庫了。”

好了,下面我來點個人乾貨,做一個形象一點的比喻:

1)Bash-->手機的主人

2)web訪客-->藉手機打電話的人

3)設定環境變數-->藉手機打電話

4)許可權管理-->手機主人監督藉手機的人(只允許打電話,不允許他幹其他事情包括髮短息或者上QQ之類的)

5)shellshock漏洞-->手機主人沒有好好的監督藉手機的人(手機被他偷偷拿去看蒼老師的教學視訊了)

串起來講就是,有一個人A問另外一個人B藉手機來打一個電話,作為手機的主人B很爽快的答應 了。但是,手機除了打電話之外呢,還可以做好多的事情,包括偷看手機主人B和其它姑娘勾搭的資訊。因此,手機主人B必須在A使用電話的時候監督好他,保證他只能拿手機來打電話。但是,突然間手機主人B看到一個美女所以分神了,沒有好好的盯住A,然後A就趁機拿B的手機去看蒼老師教學視訊(免費流量啊,不看白不看)。

        不知道這樣子理解起來是否會簡單一點呢?

三、ShellShock漏洞的危害。

關鍵詞:蠕蟲、DDOS

     對攻擊者而言,奪取了shell一般來說就已經很成功了,因為控制了它,就相當於控制了目標環境。你可以訪問內部資料,重新配置環境,將他們的惡意程式碼釋出上去,等等。它無所不能,而且是自動化的(自動傳播自身拷貝的病毒一般稱之為“蠕蟲”)。(以上引自《ShellShock漏洞那些事兒》)

    “蠕蟲”大規模傳播帶來危害主要有:

(1)由於擁有了特殊的許可權,大量的網際網路伺服器上面的保密資料被竊取。

(2)由於蠕蟲的自身複製以及存在這個漏洞的主機數量龐大,病毒可以控制大量的主機,發起DDOS攻擊,造成網路癱瘓等。(具體什麼叫DDOS請上維基)

四、如何修復ShellShock漏洞。

    這個問題好像很弱智,誰都知道更新軟體就可以修復漏洞,畢竟開源社群的響應速度還是很快的。至於Bash的開發人員具體是怎麼修復,那是他們的事情了。但是,作為一個程式猿,我覺得還是思考一下如何避免這種漏洞的。

    回到剛才的比喻,如果由於手機主人B的監督不嚴,導致手機被A拿去胡作非為了。要解決這個問題,辦法就只有兩個:

(1)禁止A再借用他的手機

(2)提高手機的許可權管理,譬如說藉手機之前先在手機上加一個軟體鎖,保證A只能打電話,而無法使用其他手機的功能。

    這兩個辦法對應到我們的web服務和Bash上面,就是:

(1)禁用CGI(但是可能會導致web服務功能出問題)

(2)完善許可權管理機制,在設定環境變數的之前先做好檢測,確保環境變數設定語句裡面不會有一些越權的行為。

     當然了,這裡只是總結了一下。個人精力有限,具體的程式碼和實現我就不細說了。

############################################################################################

    20140929更新:最新的說法是,Bash升級其實不能從根本上完全避免這個漏洞。這個漏洞的修復工作有點像“補了東牆輪到西牆漏水”(有人比喻成打地鼠,打了這個,另外那些接著出來,怎麼都打不完)。具體的分析可以參考一下如下這兩篇文章:

IT從業人員需要及時關注技術動態,但是網際網路的內容卻過於離散,好東西往往隱藏得很深。現在可以在微信公眾號裡面 搜尋關注“小魚兒的IT技術分享”,訂閱我為大家每天彙總的IT技術資訊。歡迎大家關注!


相關推薦

ShellShock破殼漏洞簡單分析

(如果有幫助,請點個贊;如果有錯誤,請指出;如果轉載,請註明出處) 背景: 剛好,這幾天網上曝出BashShell的ShellShock漏洞。我們就湊一下熱鬧。有興趣的話,可以先看一下下面這幾篇

pwnable.kr --- shellshock題解bash破殼漏洞

程式程式碼如下 #include <stdio.h> int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid

SQL ServerMySql中的聯合主鍵聯合索引 索引分析

判斷 reat 系統 lap creat insert 結果 問題 select 最近有人問到這個問題,之前也一直沒有深究聯合索引具體使用邏輯,查閱多篇文章,並經過測試,得出一些結論 測試環境:SQL Server 2008 R2 測試結果與MySql聯合索引查詢機制類似,

Hive學習之路 十五Hive分析窗口函數(三) CUME_DIST和PERCENT_RANK

select rank com ble class mina src format () 這兩個序列分析函數不是很常用,這裏也練習一下。 數據準備 數據格式 cookie3.txt d1,user1,1000 d1,user2,2000 d1,user3,

salesforce lightning零基礎學習(四) 事件component events簡單介紹

exec 說明 包含 span 目錄 action 當前 一個 events lightning component基於事件驅動模型來處理用戶界面的交互。這種事件驅動模型和js的事件驅動模型也很相似,可以簡單的理解成四部分: 1.事件源:產生事件的地方,可以是頁面中的輸入框

【轉載】C++ 智慧指標shared_ptr/weak_ptr原始碼分析

發現一篇對C++11智慧指標分析很透徹的文章,特轉載備忘! 以下轉載自:https://blog.csdn.net/ithiker/article/details/51532484?utm_source=blogxgwz1   C++11目前已經引入了unique_ptr, shared_pt

7-25 反轉數 10 分簡單+複雜 方法

首先,思路很重要,這題可以10行內搞定,也可以打30行,效率肯定是不同的 放題先: 7-25 反轉數 (10 分) 輸入一個有符號整數,輸出該整數的反轉值。 輸入格式: 有符號整數 輸出格式: 有符號整數的反轉數 輸入樣例: 在這裡給出一組輸入。例如: 100 -12

PHP測試與優化-- Apache自帶的壓力測試工具abapache bench - 簡單使用

一、測試工具: Apache 壓力測試工具ab ab是針對apache的效能測試工具,可以只安裝ab工具。 ubuntu安裝ab apt-get install apache2-utils centos安裝ab yum install httpd-tools 命令:

caffe之網路權重視覺化C++實現分析網路功能 caffe之網路權重視覺化C++實現

原 caffe之網路權重視覺化(C++實現) 2017年05月05日 11:28:12 真小假 閱讀數:3083 &

mysql--主從雙主簡單配置

1.主伺服器 172.16.20.228備份 mysqldump -uroot -p123 --all-databases > /bak/all.sql將全備拷貝到從機,並且從機恢復資料 scp [email protected]:/bak/all.mysql /bak/mysql //在從伺

機器學習 十五 關聯分析之Apriori演算法

前言        目前隨著資料量迅速增多,從海量資料中尋找有價值的資訊帶來的成本也在不斷增加,傳統的搜尋資料方式已經不能滿足我們的需要,我們先來通過一個演算法看一下演算法時間複雜度快慢帶來的影響,通過計算耗時我們會有個感性

jpaspringdate-jpa簡單應用 JPA 基礎(一)

原創部落格地址:https://blog.csdn.net/cheidou123/article/details/84428092 JPA 基礎(一) JPA全稱Java Persistence API,是一組

作業系統實驗簡單模擬檔案系統的基本操作

程式碼 //思路:使用者登入檔案系統,然後建立、開啟、讀、寫、關閉、刪除檔案 import java.io.*; import java.util.*; public class Main{ public static void main(String[] args){

jsp四簡單功能的實現:顯示

a.list.jsp頁面程式碼 <body>     <table border="1px" width="60%">         <tr> &

jsp三簡單功能的實現:登入

簡單架構介紹: C/S:客戶端/服務端 B(Browser)/S(Server):瀏覽器/伺服器(例:Tomcat)   Jsp檔案介紹: jsp(Java Server Pages)—java服務端頁面,執行在伺服器端,是一個以.jsp為字尾的文字檔案 html、

jsp二簡單功能的實現:註冊

第一步: 建立學生表Student,結構如圖: 第二步:建立新Dynameic Web Project工程 File→new→Next→Dynameic Web Project→勾選Generate web.xml deployment descriptor,意為新增web.xml

jsp五簡單功能的實現:刪除、修改及註冊完善

a. update.jsp程式碼 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>學員資訊修改</title> &l

Web安全系列:XSS 攻擊進階挖掘漏洞

前言 目前來說,XSS 的漏洞型別主要分為三類:反射型、儲存型、DOM型,在本篇文章當中會以permeate生態測試系統為例,分析網站功能,引導攻擊思路,幫助讀者能夠快速找出網站可能存在的漏洞。 反射型 XSS 挖掘 現在筆者需要進行手工XSS漏洞挖掘,在手工挖掘之前筆者需要先逛逛網站有哪些功能點,如下圖是

高德地圖API流程法整理分析

【高德地圖API(流程法)分析】: 前言:公司現在的網約車專案,使用的是高德地圖,因為地圖導航這一塊的功能佔比量比較大,為了方便大家對高得地圖API的瞭解和學習使用,使用流程圖把高德API分析整理了下。 ——————————————————【一】流程:開始當前位置定位————————————————————

String.Utils.join陣列—字串簡單用法

目錄 將陣列轉換為字串: 需要引入包:import org.apache.commons.lang3.StringUtils; //將陣列轉換為字串 StringUtils.join(s