作者lance70176 (十三夜)
看板Soft_Job
標題[心得] 番外:外面忙堵洞,駭客早拿鑰匙走正門
時間Fri Oct 23 21:16:43 2026
上一篇聊 PHP2Shell 的補法,這篇算後續。
去補漏洞的那天,我在主機上撞見了別的東西。跟 PHP 沒關係,而且對方已經在裡面
待了一百天。
細節不方便講太多,這篇只講手法,還有大家可以怎麼自己檢查。
先說怎麼發現的
先講一下背景。我們平常是權責分離的:主機歸運維管,寫程式的人不拿主機權限,程
式交給部署流程上線就好。
這是對的做法,開發的人本來就不該隨手能 root 進正式機。
這次會進去,是因為那幾台跑的是舊版 PHP,官方不出修補,要自己把修補編進去、重
新打包,再到主機上調整設定、確認服務正常。
這種事運維一個人不好處理,才臨時開權限讓我上去一起弄。
換句話說,要不是這次 PHP 剛好要自己編,我根本不會進到那幾台,也就不會發現。
升級之前我習慣先看一下主機現況:跑了哪些程式、連去哪裡、最近多了什麼檔案。
ps 列出來,有一行看起來像 Linux 核心自己的工作執行緒(kworker)。
這種東西每台主機都有一大堆,平常沒人會多看一眼。
但它有兩個地方怪怪的:
1. 名字少一截,格式跟真的 kworker 對不上。
2. 它的「父程序」是 1。真正的核心執行緒,父程序一定是 2。
打個比方,就是有個人穿著公司制服在辦公室走來走去,但他掛的員工證是別家公司發
的。
順著程序往回追,本體是一個藏在 systemd 系統目錄裡的隱藏檔。
檔名前面有個點,ls 預設看不到;名字還取得很像雲端服務自己的東西,放在雲端主
機上一點都不突兀。
它能做什麼
把檔案裡的字串撈出來看,功能大概有:遠端開 shell、上傳下載檔案、看螢幕、鍵盤
側錄、port 轉發、自我更新。
就是一支完整的遠端控制木馬,Go 寫的。
CPU 幾乎不吃,沒在挖礦,監控圖上什麼都看不出來。它就只是安靜地待著,等人來用。
啟動時間是 7/15 下午 3:38,到我發現那天剛好一百天。
兩天後,對方還用它開了兩個 root 的互動視窗,開到現在都沒關。
它怎麼跟外面聯絡
一般木馬會去連某個 IP 的某個 port,防火牆有機會擋下來。這隻走 DNS。
DNS 就是電腦在問「這個網址的 IP 是多少」的那個查詢。
幾乎每台主機都允許對外查 DNS,不然連網址都解析不了。
它把要傳出去的資料編進查詢的網址裡,一路問到攻擊者自己架的 DNS 伺服器,對方
再把指令夾在回答裡傳回來。
防火牆看到的,就只是主機在查網址而已。
不只一台
拿同樣的特徵去掃其他主機,不只一台中。
有的還多做了一步:註冊成 systemd 服務,名字取得像系統更新程式,掛掉會自己重
啟。
把檔案時間拼起來:
7/11 下午 最早被放東西的一台
7/1x 15:34 另一台
7/1x 15:38 再一台
7/2x、7/3x 又各放了一支不同的程式
15:34 跟 15:38,兩台只差四分鐘。
自動化病毒不會這樣打,這是有人坐在電腦前,一台一台登進去放的。
從哪裡進來的?
這是我最在意的:是不是 PHP 漏洞?
查完的答案是:這次跟 PHP 無關。
- PHP2Shell 是 10/21 才公開的,入侵發生在 7 月
- 網站目錄沒找到 webshell
- 最關鍵的證據在木馬程序身上留下的環境變數:看得出來是有人用一般帳號登入,su
do 切成 root,再手動把它跑起來
所以對方是拿著某組合法的登入憑證,從正門走進來的。
防火牆、WAF、PHP 修補,對一個拿著鑰匙走正門的人,都沒有用。
遇到這種事該怎麼處理
上一篇提到「最高權限只用一瞬間」。這次對方一進來就拿到 root,那招幫不上忙,
只能事後收拾。大方向是:
1. 先留證據再動手。程序資訊、網路連線、木馬副本、檔案指紋都存下來,不然之後
什麼都查不了
2. 清除。先把程序暫停再砍,刪檔,連它註冊的 systemd 服務一起拿掉
3. 換鑰匙。這步最重要。對方開過鍵盤側錄,主機上的密碼、金鑰、.env 都只能當作
已經外流,全部換掉
4. 其他升級先緩一緩。主機都被人拿走了,先換 PHP 意義不大,還會破壞現場
手法本身都是老招:偽裝核心執行緒、Go 寫的木馬、DNS 隧道、systemd 常駐,在幾
份公開的 APT 報告裡都看得到。
老招還能用,代表大部分主機根本沒人在看。
你也可以花 5 分鐘檢查一下
給有在管 Linux 主機的朋友,幾個簡單的檢查:
# 1. 找冒牌核心執行緒(名字有中括號,父程序卻不是 2)
ps -eo pid,ppid,args | awk '$3 ~ /^\[/ && $2 != 2 && $1 != 2'
# 2. systemd 跟暫存目錄裡有沒有隱藏的執行檔
find /usr/lib/systemd /lib/systemd /tmp /var/tmp /dev/shm -xdev -name '.*'
-type f
# 3. 最近新增、又不屬於任何套件的執行檔(CentOS/RHEL;Ubuntu 改用 dpkg -S)
find / -xdev -path /proc -prune -o -type f -size +500k -perm -u+x -newermt
2026-06-01 -print 2>/dev/null | xargs -r rpm -qf 2>&1 | grep 'not owned'
# 4. 有沒有程序在對外部 IP 查 DNS
ss -tunap | grep ':53 '
第 1 條有輸出,就值得好好看一下。
最後
原本只是想升個 PHP,因為要自己編譯才臨時拿到權限,升級前又多看了一眼。
權責分離本身沒有錯,但它也代表一件事:開發的人看不到主機,運維忙著維持服務正
常,那個「有沒有多一個人住在裡面」的問題,很容易變成沒有人負責。
要不是這次剛好進去,它現在應該還在那邊安靜地待著。
補漏洞之前,先看看家裡有沒有多住一個人。
--
Key君:「哈哈哈哈哈哈,我就是後宮之王——杉崎鍵!
我是為了野心不惜傷害重要的人,
但同時為了讓她幸福也不怕萬苦的男人!」
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.54.124 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1792761416.A.C96.html
1F:推 cancelpc: 台灣不重視技職,很久就偏向文憑。一堆人在ERP風潮後。 10/24 00:38
2F:→ cancelpc: 為工作臨時轉軟體。想辦法乙方轉甲方。就...之前台灣就 10/24 00:38
3F:→ cancelpc: 是全世界跳板前幾名。 10/24 00:38
4F:推 viper9709: 推分享~看起來好恐怖 10/24 00:57
5F:推 Wishmaster: 這要有點程度吧,一般維運也不一定有這個程度,有也 10/24 04:00
6F:→ Wishmaster: 不一定會看那麼細,台灣維運的水準怎樣大家也都知道 10/24 04:00
7F:推 timofEE: 內容很棒的同時AI味好濃 10/24 04:39
8F:推 wizozd84070: 謝分享 10/24 06:00
9F:→ wizozd84070: 雖然不知是否是真實故事但.若遇到這種事情真的蠻難防 10/24 06:02
10F:推 ILoveAMD: 一般會把 ps 換成隱藏自己名稱的版本 10/24 06:08
11F:推 nicetw20xx: 推,想問改換k8s k3s會不會比較快xD? 10/24 10:21
容器化確實比較好砍掉重練 但這次是帳號外洩 換k8s帳號一樣掉還是一樣
12F:→ lance70176: 真實案例 還有其他手法處理中不方便寫 遇過很多事故 10/24 10:30
13F:→ lance70176: 比網路上的還扯 小說都不敢這樣寫的等級 不方便分享 10/24 10:30
14F:→ lance70176: 而已 10/24 10:30
15F:推 workhardplz: 推推 感謝分享 10/24 10:33
16F:→ okita3088: 不導資安被入侵也是剛好 台灣繼續cost down 10/24 10:34
17F:推 jack0204: IT運維通常不懂這方面,還有RD自己管的也是各種全開 10/24 12:29
18F:推 Romulus: 鬼故事 連怎麼被入侵造成過什麼傷害都不知道是吧 10/24 16:18
19F:→ Romulus: 難怪僵屍永遠比電影還多 10/24 16:19
20F:→ labbat: 靜靜地在那邊上傳資料的真可怕 10/24 16:36
21F:推 wsad50232: 看不懂 10/24 18:55
22F:→ superpandal: 這只不過是亡羊補牢 而且通常處理不會這麼傻 別人直 10/24 19:37
23F:→ superpandal: 接替換你的執行檔或偽裝執行檔你又該如何? 10/24 19:39
24F:→ superpandal: 用systemd的系統也是很傻 10/24 19:41
25F:→ superpandal: 拿到shell後也不一定得本地儲存惡意程式 除非有持續 10/24 19:46
26F:→ superpandal: 入侵的需要 先不管運維 很多開發出來的程式 整體運作 10/24 19:49
27F:→ superpandal: 機制也很糟糕 更不要說極致了 10/24 19:51
28F:→ superpandal: 其它一堆太多我就不吐嘲了 10/24 19:58
29F:→ kd992102: 其實駭客的招數大部分還是相同的路數,因為太好用了 10/24 20:18
30F:推 mathrew: DNS玩法,好幾年前就有了,資安觀念好的公司,都會監控 10/24 21:39
31F:→ mathrew: 這段,有沒有怪的DNS查詢 10/24 21:40
32F:→ asdfghjklasd: 用 windows linux 的又不會補洞的就是肉機 10/24 22:46
33F:→ asdfghjklasd: 我主機跑 freebsd 8.4 跑10多年都沒事也沒修補 10/24 22:46
34F:→ asdfghjklasd: 昨天早上我還把 fortigate 全都升級了 10/24 22:47
35F:→ asdfghjklasd: 基本上是設備有沒有人在看,有沒有能力 10/24 22:47
36F:推 oToToT: AI味好重 10/24 23:59
37F:推 asdkmm5050: 這叫 C2 beaconing,EDR 通常都抓得到的 10/25 02:39
有EDR或DNS監控的話這隻早就被抓了 問題就是很多公司兩個都沒有
38F:→ lance70176: 亡羊補牢 下一句可以想一下 後面自然是要重建 10/25 03:25
39F:→ lance70176: 替換跟偽裝自然查過了 這次案例沒有所以沒說 10/25 03:26
※ 編輯: lance70176 (122.116.54.124 臺灣), 10/25/2026 03:45:03
40F:→ sinclaireche: 想省錢的是人不請服務不買 活該被打穿 10/25 16:01
41F:推 freemantw: 推分享! 10/25 17:12
42F:推 guanting886: 如果外部防火牆跟主機防火牆有設定好,有人拿著有效 10/25 17:33
43F:→ guanting886: 的帳號跟Key就能進去,不就代表內鬼 or 那個地方的環 10/25 17:33
44F:→ guanting886: 境有問題嗎? 10/25 17:33
45F:→ labbat: 一般會有堡壘機唄,透過帳密登入的可以追朔 10/25 18:44
46F:推 dennis2030: AI 味濃到快被熏哭 10/25 20:48
47F:→ aria0520: 不要請AI寫完直接複製貼上好嗎 10/25 23:07
48F:→ bill0205: ai文能不能自己看過修飾一下再發 很懷疑只是洗文章 你開 10/26 12:50
49F:→ bill0205: 發只是ai寫沒自己review 出bug死的會很慘 10/26 12:50
50F:推 Psytoolkid: 謝謝分享 10/26 23:42
51F:推 justptt978: 有技術量 但AI味太明顯 有心得還是給推 10/27 22:55