雲伺服器反黑客入侵攻防實錄(一)

来源:https://www.cnblogs.com/solomonxu/archive/2019/05/19/10889928.html
-Advertisement-
Play Games

本文講述今天發生的一起黑客入侵事件,網路紅客與黑客攻防對戰。作者帶您一步步揭開黑客攻擊計算系統的內幕,也講述網路紅客如何絕地反擊。 ...


1、引言

        網路安全是互聯網永不過時的主題,尤其是在雲計算時代,大量的電腦應用遷移到雲端,龐大的IT資產集結在雲數據中心,一旦雲數據中心爆發安全險情,輕則大量服務停擺,重則敏感數據丟失、系統遭到破壞,損失不可估量。國內幾大頭部雲服務提供商,近一年都發生過網路運行或安全事故,拋開經濟損失不提,作為頂級IT巨頭出現安全問題難免尷尬,授人以柄、影響聲譽。

        本文講述今天發生的一起黑客入侵事件,網路紅客與黑客攻防對戰。作者帶您一步步揭開黑客攻擊計算系統的內幕,也講述網路紅客如何絕地反擊。

        黑客身手不俗,深夜凌晨悄然侵入雲伺服器,步步為營,沿路設置重重障礙,就像冷兵器時代的鐵蒺藜、鐵拒馬灑滿一路,設下重重機關,牽一發而動全身,維繫木馬程式存在。

        然並卵非也,魔高一尺,道高一丈。我們想象中,網路紅客高舉網安利劍,直入特洛伊城,層層深入,抽絲剝繭,把黑客設下鐵蒺藜一根根拔出,輕鬆拆解隱秘機關,最後堵上城防漏洞,恢復城市的健康和生機。這裡的特洛伊城就是中招的雲伺服器。還可能留下一具木馬僵屍標本,以供將來拆解、把玩。哈哈!

        事實果真如此嗎?

        閑話少敘,我們直奔主題,欣賞一場紅客、黑客攻防戰的來龍去脈和驚險場景。

        從這個例子也感悟到,我們以為的真相其實只是表象,看到的表象是更淺顯的表象。就像俄羅斯套娃,一層套一層,不到最後一刻永遠不知道是否抵達真相。

 

2、雲機見疑雲

2.1 遭遇半癱機

        最近一個月,同事們抱怨公司JIRA伺服器變慢了,而且越來越慢,點擊頁面幾秒才有響應,幾個人同時點頁面,圓圈能不能轉出來看運氣。最近我忙著做K3s系統遷移,對JIRA沒有太在意,也沒有關註PR和缺陷報告。

        直到昨天,發現軟體產品的有個頁面不符合我帶有潔癖的審美,小伙伴們慫恿我提交一條PR,我才去打開久違了的JIRA首頁。沒想到JIRA不給力,點登錄後圓圈轉啊轉啊,就是不出來工作台。還不給面子,報告賬號密碼錯。換Chrome瀏        覽器登錄,還是賬號、密碼錯。我的賬號、密碼是記在電子本本上的,排除人為因素,僅僅拷貝是不可能出錯的。

        那個無限旋轉的圓圈,一點點消磨我的耐心。圓圈能不能求得圓滿,以至於懷疑人生。哈哈。

        此路不通,能否擇歧路而行?用安全郵箱修改JIRA密碼後,再登錄圓圈消失了,正常登錄進去。然後,一波未平一波又起,新建PR頁面,出現白屏幾分鐘無響應。

        此間不明一定有暗鬼。

        小伙伴們的無助和我的切膚之痛,激發了我的好奇心和正義感。

        明知山有虎,偏向虎山行。我不入地獄誰入地獄。

        人不可雀語,語雀願助人。語雀耳語於我,告知JIRA的賬號密碼和訪問路徑。JIRA伺服器架設在阿裡雲數據中心,雲端SSH直連通道關閉,只能用堡壘主機作跳板二次登錄才能訪問JIRA伺服器。架設JIRA的人士用心於安全可謂良苦。

前奏有點慢節奏,不過某國大片不經常是這樣的開頭的嗎,平靜的生活危機四伏。

 

2.初探噬心獸

        系統響應慢,習慣性地先看系統資源利用情況。輸入top命令,一看嚇一跳,有一個sd-pam進程占用CPU接近400%。

 

圖 JIRA伺服器系統資源利用情況

          輸入htop命令進一步查看詳情。

 

圖 JIRA伺服器系統資源利用詳情 

        從詳情頁可見,這台雲伺服器一共有4個CPU核心,4個核心利用率全是100%。可憐的JIRA(Java)進程擠到不知道哪個犄角旮旯里去了,分配的CPU連1%都不到,難怪JIRA會慢得像蝸牛。

CPU利用率排在前5位(1+4)的進程無一例外是sd-pam,第1個進程CPU利用率是396%,緊接著4個進程CPU利用率在99%左右。

        大家可能會問,4個核心的主機,5個進程CPU利用率加起來將近800%,怎麼像8個核心呢?

        Linux是多進程多線程的操作系統,以進程模擬線程,5個進程ID(PID),其實只有一個主進程,其餘4個是進程模擬出來的線程,從屬於主進程,4個線程的CPU利用率合計等於第1個線程的CPU利用率396%,不要重覆計算。

        sd-pam進程像瘋狂的野獸吞噬著CPU。去研發大群里詢問,沒有人能說清楚sd-pam進程是什麼來頭。疑雲驟起,關註點向sd-pam進程聚焦。

2.3 舉手解內困

        提交PR還得仰仗JIRA服務,JIRA服務是運行在Docker容器內的。登錄到JIRA容器,查看Java虛擬機參數,堆空間最大可用預設值是768MB,對於JIRA服務來說顯然偏低。而雲伺服器16GB記憶體還有10GB以上的空閑,閑著也是閑著,堆空間最大可用值擬修改為2GB。因為運行環境和文件許可權問題,在容器內不好修改文件,所以用docker cp命令把環境設置文件setenv.sh拷貝到宿主機,修改後拷貝回JIRA容器。

        在大群里喊一嗓子,要重啟JIRA服務了,沒人理,過幾分鐘就reboot雲伺服器了。

        重啟後,JIRA服務的配置會生效,JVM堆空間會擴大,對改善JIRA服務會有幫助。我也想看看雲伺服器重啟後,sd-pam進程會不會還在。

        修改JIRA配置與黑客對戰沒啥關係,不過是舉手解JIRA之困境。

 

3、循跡清木馬

3.1 初識兩點疑

        重啟雲伺服器後,sd-pam進程依然頑固地存在,撒著歡一樣把CPU利用率拱到滿格400%。

        “你來或不來我都在這裡,不多不少,4個CPU全是我的菜。” 清哥哥感覺被挑釁了,看來得好好伺候這位爺了。

        思緒開始往木馬、蠕蟲方向去想了。但凡木馬都不是孤立的,要與外界聯繫,雲伺服器聯繫外界唯一的通道是網路通信。我想看看sd-pam都聯繫了哪些網路地址。實用工具lsof能查看進程打開的所有文件描述符。文件描述符有點抽象,但是說建立的TCP連接、打開的文件/目錄、建立的管道都是文件描述符,就不難理解了。而進程打開的文件和建立的TCP連接正是我想知道的,以後有妙用。

        在CentOS上,預設地沒有安裝實用命令lsof,通過yum自動下載安裝。

1 yum install -y lsof

        安裝好以後迫不及待想看看sd-pam都幹了啥。輸入lsof命令,帶參數-p PID,PID是進程ID。

1 # lsof -p 11320

 

圖 sd-pam進程打開的文件描述符

        分析命令輸出,發現兩個疑點:

        第一個疑點是被刪除的文件:/var/tmp/dbus/.sd-pam/sd-pam(deleted)。

        第二個疑點是從本機連接到未知遠端IP的TCP連接: jira-wiki-nexus:55916->128.199.136.211:http。

3.2 淺析外連接

        連接外網的TCP連接很常見,先從第二個未知TCP連接下手。這個TCP連接指向HTTP埠,用瀏覽器打開網址,頁面顯示Mining Proxy Online。Mining,不是Mine,不就是挖礦嗎?它自我暴露了。

 

         換一個Google Chrome訪問網址看看,輸出還是Mining Proxy Online。

 

        再試一試curl命令,都說在挖礦,很誠實的樣子。

        上午懟黑客時,並沒有註意到Mining這個詞,只是猜測可能是挖礦,要不然找個“肉雞”幹嘛呢?

        百度一下,看看IP來自何方。百度雖然有很多槽點,但是引入的IP查詢工具還是實用的。查詢結果顯示遠端IP來自新加坡,是部署在海外的主機。而重啟主機前的一次lsof顯示,遠端IP來自美國。之後,殺死過sd-pam不下十次,它又頑固地出現,穩定地連接這個新加坡IP地址。

 

        接著,我想知道進程sd-pam的可執行程式藏身在什麼地方。用了find命令去找它,執行時間太長,一時沒耐住性子,ctrl+c掐斷了。

        好吧,先放過它。

 

3.3 調試失蹤客

        進程sd-pam是可執行的,那麼就可以用gdb來跟蹤調試,深入內部是不是可以窺探內幕。

        CentOS預設也沒有安裝程開源調試工具gdb,運行yum命令自動下載、安裝gdb。

1 # yum install -y gdb

        安裝好以後,啟動gdb,然後輸入attach PID(PID需要替換為實際進程號),觸碰sd-pam進程並掛載到gdb調試環境。輸出顯示/var/tmp/dbus/.sd-pam/sd-pam(deleted),該進程的可執行文件不存在。

 

        消失的可執行程式,難道是揮刀刪掉自己了嗎?很詭異的現象。正常情況下,從可執行文件啟動進程後,可執行文件依然存在原處。因為操作系統創建進程時,未必完全載入可執行文件,可能分步載入,運行時仍可能從可執行文件讀數據段。進程能否刪除啟動的可執行文件?此處存疑。

        後續分析會揭露可執行文件消失的真相。

        因為想要儘快定位故障、解決問題,gdb調試暫告一段落。

        消失的可執行文件意味著sd-pam進程的主人不希望可執行文件被髮現,那麼可執行文件可能隱藏著不為人知的秘密。sd-pam是黑客進程的疑慮進一步加重。

3.4 解密怪腳本

        通過百度或谷歌搜索關鍵字sd-pam,所得搜索結果很少,看起來有關聯的搜索結果不過區區兩三條,點進去看詳情也毫不相干。如果黑客攻擊一說成立的話,那麼程式文件名是個性化量身定製的,同樣的攻擊程式在別的受攻擊伺服器,可        能會使用別的程式文件名。或者,也許這個攻擊程式剛出現,沒有形成規模和氣候,所以網上報告的信息較少。

        可執行程式位於目錄/var/tmp/dbus/.sd-pam/,這個目錄有兩個疑點:可執行目錄包含tmp,在Windows安裝程式時很常見,Linux 系統很少見;子目錄.sd-pam是隱藏目錄,命令ls -a才能顯示出來,ls是看不出來的。目錄的兩個疑點都指向,sd-pam程式的主人試圖掩蓋什麼,不想讓所寄居的雲伺服器的管理人員發現。

        嘗試進入目錄/var/tmp/dbus,有了新的發現:

1 # cd /var/tmp/dbus
2 
3 # ls -ltra
4 
5 # more sd-pam

        居然看到了sd-pam,不過sd-pam是一小段Shell腳本,用more命令查看文件內容:

 

        這個腳本做了4件事:

        S1、創建隱藏子目錄.sd-pam。子目錄與前面發現的可疑路徑吻合。

        S2、複製文件x86_64到隱藏子目錄.sd-pam,並改名為sd-pam。與前面發現消失的可執行文件完全一致。

        S3、啟動新複製的sd-pam程式,帶有參數-h sd-pam -c。懷疑是以父子進程監控的方式啟動:萬一子進程死亡,父進程依然能fork出新的子進程。這樣大大增加sd-pam程式存活的幾率。

        S4、刪除S1創建的子目錄.sd-pam,連同子目錄下可執行文件sd-pam也一併刪除。這就解釋了前面的謎團:sd-pam進程存在,而進程的可執行程式文件卻神秘地消失了。因為腳本sd-pam是以root用戶身份運行的,刪除jira用戶運行進程的可執行文件毫無壓力,無需提權。雖無根,仍運行。

        註意:這裡的sd-pam有兩個同名版本:一個是Shell腳本sd-pam;另一個是可執行文件sd-pam,由可執行文件x86_64複製、改名而來,不能混淆。

x86_64適用於64位的X86架構晶元,可以想象該程式可能還有x86(32位X86架構晶元)、ARM32、ARM64和SPARC64等多種版本。

3.5 斬斷無形手

        前面提到,JIRA雲伺服器重新啟動後,sd-pam進程像幽靈一樣存在,揮之不去,牢牢占據CPU排行榜的首位。應該是有某一種機制能夠自動啟動sd-pam。

        已知的第一種機制是Linux後臺服務管理,在系統重新引導後會自動運行,這是Linux內部機制,潛伏的進程只要不被髮現,完全可以長期潛伏、定期送出有價值的信息。

        第二種機制就要複雜得多,來自互聯網的漏洞掃描程式,定時掃描雲伺服器的漏洞,發現漏洞後重新植入木馬。第二種機制容易受到網路安全屏障的阻隔,頻繁的掃描也容易被網路安全嗅探器發現,主要的雲計算中心都提供免費或收費的服務,嗅探、發現漏洞和外部攻擊。所以第二種機制/方法,不適合監控已植入木馬雲伺服器,更適合於初次尋找漏洞,或者地毯式搜索雲伺服器漏洞。

        在不重啟雲伺服器時,直接殺死sd-pam進程能快速的停止木馬進程。Linux命令kill傳遞信號參數SIGKILL或者9能立即殺死進程。

1  # kill -9 11320

        殺死進程後,CPU利用率立即下降到個位數。遺憾的是一兩分鐘後,sd-pam幽靈又出現在top命令輸出榜首。

        一兩分鐘內重啟進程,Linux Service服務監控管理能做到,但又不符合其行為方式。因為殺死sd-pam進程後,服務監控進程立即能感知到,不會等待,而會立即重啟新的sd-pam進程。

        有另一種Linux定時任務機制,能做到精準到時分,重啟後臺任務。Linux後臺服務crond,定時被喚醒,按照crontab表定義的時間表啟動後臺任務。

        先看看crontab的時間表:

1 # crontab -l
2 
3 4 
5  * * * * * /var/tmp/dbus/./x86_64

圖 Crontab定時啟動、檢查進程sd-pam

        又發現了x86_64的蹤跡。前面說到,x86_64就是sd-pam的化身和前身,sd-pam是x86_64的拷貝。自動忽略crontab表的第一條時間任務。

        定時任務crontab的任務項由五個時間列和一個命令列組成。五個時間列分別是分鐘、小時、星期、日、月,如果是數字表示具體時點,如果是*表示所有的時間點。

        五個時間列都是*,表示每月每日每星期每時每分,都會運行命令列的程式。翻譯過來就是:7*24小時的每一分每一秒都在運行,榨乾雲伺服器的每一分計算力。夠狠的吧,比996厲害吧,669也不過如此。

        x86_64能幹什麼,我有點好奇,忍不住手欠,運行了一把。反正CPU已經4個100了,也不會更壞了。

1 # x86_64

        提示程式已經在運行。x86_64有自我監控的功能,只運行一份sd-pam進程副本。Crontab里的x86_64應該就是監控sd-pam存活狀態的幕後推手。

        先在最前面添加#號,註釋掉crontab定時任務。斬斷一雙幕後黑手,那麼木馬程式sd-pam就會像孤兒一樣。再殺了孤兒sd-pam,預期木馬就會清除了。

1 # crontab -e

        編輯並保存crontab,立即生效。

        然後,執行kill -9 PID,果然sd-pam幽靈消失了好一會兒。好一會兒是多久,沒讀秒,沒數數,我也不知道是多久。哈哈。

        在徹底擊敗敵人之前,歡樂的日子總是短暫的。過了好一會兒,sd-pam幽靈又出現了。有些氣餒了,怎麼辦?不過,還沒有動絕殺之前,怎麼能輕言失敗呢?!

 

3.拔除木馬根

        回顧一下,不管是Linux服務管理還是Linux Crontab,都要調用/var/tmp/dbus/目錄下的程式,那麼讓它們找不到這個目錄,是不是它們就抓瞎了呢?說乾就乾,斬草要除根,dbus就是sd-pam的根。

1 # cd /var/tmp
2 
3 # mv dbus dbus_bak
4 
5 # kill -9 PID   ## PID替換為sd-pam進程的進程號

        這裡沒有直接刪除dbus目錄,而是給目錄改名,使之找不到dbus目錄,與刪除目錄效果是一樣的。黑客攻擊現場留下活證據,可作為呈堂證供。哈哈。

        如此操作之後,幽靈進程再也沒有出現過。又重啟了雲伺服器,幽靈進程也沒有出現了,空閑時CPU利用率穩定在個位數。

 

圖 清除木馬後雲伺服器進程列表

        從瀏覽器點擊JIRA控制台,在後臺監控雲伺服器,看著JIRA(Java)進程歡快地吞噬CPU,我也長舒了一口,心裡的石頭落地了。

        木馬程式是被根除了,但是黑客是怎麼攻進來的,雲伺服器漏洞在哪裡,黑客會不會輕車熟路開始下一波攻擊,我們一無所知。如果您對此感興趣,請看下一節。

 

        下文預告:
        4、探秘黑客蹤
        4.1 寓言公寓樓
        4.2 查詢訪客志
        4.3 孜孜找不同
        4.4 驚現無秘碼
        4.5 緊鎖失密門
        4.6 探尋黑客蹤
        4.7 解讀黑客術
        4.8 還原入侵圖
        5、修複雲主機
        6、安全警示鐘
        7、詳解木馬源
        8、小結

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • day23 03 組合的例子 一、用到組合的方式,編寫一個圓環,並能夠計算出它的周長和麵積 運行結果: 二、創建一個老師類,老師有生日,生日也是一個類,涉及組合的方法 運行結果: 三、複習 1、面向對象編程 思想:角色的抽象,創建類,創建角色(實例化),操作這些實例 關鍵字:class 基本框架: ...
  • 本人是一位學生,正在學習當中,可能BUG眾多,請見諒並指正,謝謝!!! 學生列表實現 HTML: PHP: 添加學生實現 HTML: PHP: ...
  • 在eclipse裡面運行代碼即可,如果您是其他應用,請選擇對您有幫助的代碼即可,如果有寫錯或不懂的地方請聯繫QQ:1633420056,謝謝,祝學習進步 <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here ...
  • 文章大綱 一、許可權框架介紹二、Shiro基礎介紹三、Spring Boot整合Shiro代碼實戰四、項目源碼與資料下載五、參考文章 一、許可權框架介紹 1. 什麼是許可權管理 許可權管理屬於系統安全的範疇,許可權管理實現對用戶訪問系統的控制,按照安全規則或者安全策略控制用戶可以訪問而且只能訪問自己被授權的資 ...
  • /*設計模式:對問題行之有效的解決方式。其實它是一種思想。1,單例設計模式。 解決的問題:就是可以保證一個類在記憶體中的對象唯一性。必須對於多個程式使用同一個配置信息對象時,就需要保證該對象的唯一性。如何保證對象唯一性呢?1,不允許其他程式用new創建該類對象。2,在該類創建一個本類實例。3,對外提供 ...
  • 此方法為:進入單用戶模式,直接修改新密碼覆蓋掉以前的root密碼。 操作步驟: 1、進入單用戶模式 2、修改root密碼 1、進入單用戶方法: 1)啟動Linux時,通過按上下鍵(其他鍵也可以)讓Linux引導啟動停留內核選擇階段,在出現如下界面: 2)輸入“e”編輯,如下界面: 3)選擇如下,再次 ...
  • 1.基礎知識點 (1)Rewirte規則也稱為 規則重寫,主要功能是實現瀏覽器訪問HTTP URL的跳轉,其正則表達式是基於Perl語言。 (2)對收縮引擎優化(SEO),利於收索引擎抓取網站頁面。 (3)隱藏網站URL真實地址。 (4)網站變更升級,可以基於Rewrite臨時重定向到其他頁面。 ( ...
  • 回到目錄 除了上面的伏安特性曲線以外,對於二極體,你還需要知道兩個特性:二極體電容和反向恢復時間。這兩個特性掌握了之後,那對於通常的二極體來說,你該知道的基本上就算都知道了。 1. 二極體電容 如果你一輩子只做低頻領域,那可以不管二極體電容。但那幾乎是不可能的,隨著現在電子電路和MCU晶元的主頻越來 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...