在一台 CentOS 測試環境中,MySQL 不斷拋出 PacketTooBigException: Packet for query is too large (1354 > 1024) 錯誤。雖然透過 SET GLOBAL max_allowed_packet 或修改 my.cnf 可暫時解決,但過幾小時到幾天,數值就會神秘地自動重置回 1024。經過一番排查,真相令人驚心:這竟是駭客入侵的跡象。
SET max_allowed_packet = 20M; 僅影響當前連線,重連失效。SET GLOBAL max_allowed_packet = 20M; 重啟後恢復預設。my.cnf 的 [mysqld] 區段設定 max_allowed_packet = 20M 並重啟,本以為大功告成,卻發現參數依然會自動變回 1024。懷疑遭攻擊後,開啟 General Log 記錄所有 SQL 執行紀錄:
mysql> SET GLOBAL general_log = ON;
過濾關鍵字 max_allowed_packet:
tail -f /var/run/mysqld/mysqld.log | grep max_allowed_packet > 1.txt
日誌清晰記錄了惡意操作:
160804 8:59:41 172 Query SET GLOBAL max_allowed_packet=1024
172 Query SET GLOBAL max_allowed_packet=1024
173 Query SET GLOBAL max_allowed_packet=1024
General Log 中的 172、173 為連線 ID。過濾該 ID 的完整操作發現:
connect root@someipaddress on ...
Query select 0x4D5A900..........(verylong)
Query select sys_exe('cmd /c c:/windows/nbvqc4.vbs') .........
set global max_allowed_packet 1024 ........
駭客從美國 IP 登入,利用 root/123456 弱密碼成功暴力破解,隨後下載並執行惡意腳本,修改安全參數。資料庫已確定被攻陷。
早期為合作夥伴測試,網管將公網 IP 映射至該機器,導致 3306、22 等埠直接對外開放。
測試機使用極簡單密碼 root/123456,極易被字典撞庫破解。
service iptables status 顯示 Firewall is not running,因測試不便曾關閉防火牆。
掃描開放埠 → 暴力破解 → 利用 MySQL 執行系統命令(下載腳本、提權執行) → 修改 max_allowed_packet=1024 導致業務報錯暴露蹤跡(推測為故意炫耀或測試控制權)。
登入失敗紀錄顯示大量嘗試:oracle, svn, apache, root 等常見帳號,來源 IP 為 217.76.78.35。
此次事件再次證實:Google 技術社區比百度更靠譜;日誌分析是溯源核心;資安意識不可鬆懈——駭客就在身邊,若非對方故意暴露,後果不堪設想。