這可能是一篇落落長的故事,但我還是要盡力記錄下來 ~ 因為是一個很寶貴的資安事件與經驗

話說我們有一台主機,它的功能是一台委外廠商對外營運的 Web 主機,非常單純 ~ 防火牆就是只有開放 80 Port 可存取

前陣子有一天業管單位說怎麼外面 Internet 的使用者都連不太進來,網路感覺很頓,第一時間我把問題反應給管理 VM 環境的同仁,請他協助查看是否在 VM 環境有異常

而管理 VM 主機的同仁說可能是網路的問題,於是再把問題轉給管理網路的人查看

初步察看的情況,管理網路的同仁說入偵防禦系統有很大量的來自於那台 Web 主機 IP 的異常 log,當下的直覺就是主機可能出問題了

後來管理網路的同仁傳了一張 IDP 的圖給我看,Src. Addr. 就是外部 Internet 連進來的 IP,而 Dst. Addr. 就是我們這裡的主機 IP,而 Dst. Port 是 80

從 Name 裡面的描述來看,就知道 Web 主機裡面被塞了惡意程式 ~ C99shell PHP Backdoor Communication?!這是什麼東東?沒看過耶

不過有了這張圖也就有了一點點的頭緒,接下來就開始了扮演柯南的角色,想辦法找出這惡意程式在什麼地方?它要做什麼事?

從 IDP 的 log 來看,既然是存取 Web 的話,就從 Log 開始查看起就對了 ~ 而 Apache 預設的 log 就是存放在 access_log 裡面

隨便抓了一個 IDP log 所提供的 Src. IP 來查,馬上就看到有趣的東西了

在 /files/userfiles/image 目錄裡面放了一個 cc.php!怎麼看都很不對勁吧?!接下來我就切換到那目錄裡看一下,哇鳴,真的有東西耶!

有二個檔案,cc.php 和 Cody

cc.php 就不公布是什麼了,是個可讓人呼叫使用的惡意程式 ~ 那 Cody 是什麼呢?來「開箱」檢視一下

原來是被人家插旗宣示已經被駭進來了 ... 冏

找到了被人塞入惡意程式的地方,那該怎麼解決呢?

1. 刪掉它,結案

2. 刪掉它,並且找出為什麼被植入,修補漏洞,結案

當然是選2比較好啦 ~ 那該怎麼找出漏洞呢?我們還是要回頭繼續看 log,阿亮說過:反走過必留下痕跡

於是發揮我的普通寫輪眼萬花筒寫輪眼永恆萬花筒寫輪眼輪迴眼,不斷的掃瞄 log 及用一些關鍵字試著搜尋,果然抓到了一個很重要的動作

看來有個 php 程式可以上傳檔案,正把 c99.php 上傳進主機,不過仔細解觸這段訊息很有趣

Command = FileUpload - 這很好理解,動作就是在上傳檔案

Type = Image - 這也很好理解,檔案的類型是圖片

CurrentFolder = c99.php%00.gif - 這也很好理解,上傳了一個 php 程式 ~ ㄟ,看起來有點怪怪的,怎麼後面多了 %00.gif?那倒底是上傳的檔案類型 php 還是 gif?

原來,這是一個叫做 Null Byte Injection 的攻擊手法,它能夠用於欺騙web應用程式,並且要求存取不同類型的檔

所以雖然上傳的檔案選了 Image,在程式又沒有控制好的情況之上,反而可以將非預期的檔案植入主機

OK,既然上傳的方法找到了,那一開始偵測到的 C99shell PHP Backdoor 也就是 c99.php 這個程式可以用來做什麼呢?

讓我們來欣賞一下這段影片

看完影片就知道 c99.php 一旦事先植入成功, 後續就可以透過它任意的上傳或管理其它檔案,很危險的程式

這樣大致就了解了,原來駭客是透過 Null Byte Injection 的攻擊手法先將 c99.php 植入後,再透過 c99.php 另外去上傳其它攻擊程式 ( 也就是一開始找到的 cc.php )

最後還是要提供一個可以防止 Null Byte Injection 的手法,請參考此篇文章 Poison Null Byte,這裡面有提供 PHP、Perl、ASP 和 .NET 的解決方法,值得一看

另外也有找到一個,不過算是間接防堵惡意程式的手法,看看就好吧 ~ Prevent php NULL byte or upload file security hole

arrow
arrow
    全站熱搜

    Bojack 發表在 痞客邦 留言(1) 人氣()