我們最近調查了一起針對某主機公司管理基礎設施的入侵事件。整個過程毫無特別之處:沒有零日漏洞,也沒有國家級攻擊工具。它只是一連串普通習慣的疊加,每一個單獨看都無害,合在一起卻讓攻擊者悄無聲息地潛伏了一個多星期。下面介紹事件經過、最終如何被發現,以及幾乎可以在每一步阻止入侵的八個習慣。
who 中。它一直保持了九天。/tmp 中留下了一個隱藏的 PHP 檔案。關閉 SSH 密碼登入,為每個人分配各自的金鑰。這樣即使密碼洩露也毫無用處,一個被盜的憑據也絕不會開啟所有機器。請參閱 設定 SSH 金鑰登入。
跳板機或管理伺服器可以訪問其他所有機器,因此是最有價值的攻擊目標。為它設定獨立的憑據、最嚴格的防火牆和最密切的監控。一旦被入侵,應當重建,而不是清理。
那條隧道能執行九天,是因為沒有人收到登入通知。每次 SSH 和麵板登入都傳送一條 Telegram 訊息,陌生 IP 就會立刻暴露。設定大約只需十分鐘:審計登入並設定 Telegram 提醒。
除了 who,還要用 ss -tnp 檢查來自陌生 IP 的長時間 SSH 連線。隧道和 SFTP 會話在常用命令中是看不到的。
主機面板、計費系統和伺服器管理面板掌握著一切的鑰匙。請開啟兩步驗證,並儘可能將管理頁面限製為已知 IP 訪問。寶塔面板請參閱 寶塔面板安全加固指南。
修改時間很容易偽造。排查植入檔案時,請使用 change time(狀態變更時間)和 birth time(建立時間),普通使用者態程序無法將其回撥:
find /var/www /tmp /dev/shm -newerct "-14 days" -type f 2>/dev/null
stat /path/to/suspicious.php # compare Modify with Change and Birth
資料庫埠、面板埠和管理路徑不應對整個網際網路開放。只放行您自己的 IP,將網站放在可隱藏源站的代理後面,並將防火牆預設策略設為拒絕。請參閱 使用 Cloudflare 隱藏源站 IP。
終止活動會話,但在刪除任何東西之前,先把日誌和可疑檔案複製到安全的地方。然後更換被入侵機器能接觸到的所有密碼、金鑰和 API 令牌,包括資料庫和支付閘道器憑據。完整的清理清單請參閱 檢查 Linux 伺服器是否被入侵。
能否控制住局面,取決於您在出事之前就掌握的控制能力。在 IMIDC 獨立伺服器上,即使您用防火牆封鎖了其他所有訪問,仍然可以通過 VNC 控制臺 訪問伺服器螢幕;可以啟動 救援系統 離線檢查硬碟;也可以 重灌 您不再信任的伺服器。這些都能在客戶中心自助完成(請參閱 獨立伺服器管理面板使用指南)。當您需要有人幫忙把關時,我們的 7×24 小時技術支援團隊可以協助審查日誌和清理。
grep "Accepted password" /var/log/auth.log* | tail # any password logins?
ssh-keygen -lf /root/.ssh/authorized_keys # do you know every key?
ss -tnp | grep sshd # unknown long-lived connections?
crontab -l; ls /etc/cron.d /etc/systemd/system # anything you did not add?
find /tmp /var/tmp /dev/shm -name ".*" -type f # hidden files in temp dirs?
如果發現任何陌生的內容,請先停下來調查,再做進一步修改。提交工單,IMIDC 團隊將協助您逐步排查。