伺服器被入侵?運維必知的應急響應流程與取證方法

伺服器被入侵?運維必知的應急響應流程與取證方法

警告:當你發現異常程序、可疑網路連線或未知檔案時,你的伺服器可能已經被入侵了!
作為運維工程師,最令人恐懼的不是伺服器宕機,而是發現伺服器被駭客入侵。一旦處理不當,不僅會造成資料洩露,還可能面臨法律責任。本文將分享一套完整的應急響應流程和實用的取證方法,幫助你在關鍵時刻保護企業資產。

🚨 入侵訊號識別:早發現,早處理

常見入侵跡象

系統層面異常:
  • • CPU、記憶體使用率異常飆升且無法解釋
  • • 磁碟空間突然大量消耗
  • • 系統日誌出現異常登入記錄
  • • 新增未知使用者賬戶或許可權變更
網路層面異常:
# 檢查異常網路連線netstat -antp | grep ESTABLISHEDss -tulpn | grep :22  # 檢查SSH連線# 監控網路流量異常iftop -i eth0nethogs eth0
程序層面異常:
# 檢視可疑程序ps aux --sort=-%cpu | head -20top -c | grep -E "(bitcoin|mining|crypto)"# 檢查程序啟動時間ps -eo pid,ppid,cmd,etime | sort -k4

快速檢測指令碼

#!/bin/bash# 入侵檢測快速指令碼echo"=== 系統入侵檢測報告 ==="echo"檢測時間: $(date)"# 檢查最近登入echo -e "\n[最近登入記錄]"last | head -10# 檢查異常程序echo -e "\n[CPU佔用TOP10程序]"ps aux --sort=-%cpu | head -11# 檢查網路連線echo -e "\n[外部連線統計]"netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr# 檢查檔案完整性echo -e "\n[系統檔案檢查]"find /bin /usr/bin /sbin /usr/sbin -type f -newer /boot/grub/grub.conf 2>/dev/null | head -10

⚡ 黃金24小時:應急響應流程

第1階段:立即隔離(0-30分鐘)

斷網但不關機:
# 保留記憶體資料,斷網隔離iptables -A INPUT -j DROPiptables -A OUTPUT -j DROP# 或者物理斷網ifconfig eth0 down
保護現場:
# 建立應急目錄mkdir -p /tmp/incident_$(date +%Y%m%d_%H%M%S)cd /tmp/incident_$(date +%Y%m%d_%H%M%S)# 記錄當前狀態date > timeline.txtwho >> timeline.txtw >> timeline.txt

第2階段:資訊收集(30分鐘-2小時)

記憶體取證:
# 記憶體映象(如果有足夠空間)ddif=/dev/mem of=memory_dump.img bs=1M# 或使用專業工具# yum install volatility -y# volatility -f memory_dump.img imageinfo
程序取證:
# 詳細程序資訊ps auxwww > processes.txtpstree -p > process_tree.txtlsof > open_files.txt# 網路連線詳情netstat -antp > network_connections.txtss -tuln > socket_stats.txt
系統狀態快照:
# 系統資訊收集指令碼#!/bin/bashINCIDENT_DIR="/tmp/incident_$(date +%Y%m%d_%H%M%S)"collect_system_info() {echo"收集系統資訊..."# 基本系統資訊uname -a > $INCIDENT_DIR/system_info.txtcat /proc/version >> $INCIDENT_DIR/system_info.txtuptime >> $INCIDENT_DIR/system_info.txt# 使用者和許可權cat /etc/passwd > $INCIDENT_DIR/users.txtcat /etc/group > $INCIDENT_DIR/groups.txt    lastlog > $INCIDENT_DIR/lastlog.txt# 啟動項和服務    systemctl list-units --type=service > $INCIDENT_DIR/services.txt    crontab -l > $INCIDENT_DIR/crontab.txt 2>/dev/nullcat /etc/crontab >> $INCIDENT_DIR/crontab.txt 2>/dev/null# 網路配置    ifconfig > $INCIDENT_DIR/network_config.txt    route -n >> $INCIDENT_DIR/network_config.txtcat /etc/hosts >> $INCIDENT_DIR/network_config.txt}

第3階段:日誌分析(2-6小時)

關鍵日誌收集:
# 系統日誌cp /var/log/messages logs/cp /var/log/secure logs/cp /var/log/auth.log logs/ 2>/dev/null# Web伺服器日誌cp /var/log/nginx/access.log logs/ 2>/dev/nullcp /var/log/apache2/access.log logs/ 2>/dev/null# 應用日誌find /var/log -name "*.log" -mtime -7 -execcp {} logs/ \;
日誌分析技巧:
# 分析可疑登入grep -i "failed\|failure\|invalid" /var/log/secure | tail -50grep "Accepted password" /var/log/secure | awk '{print $1,$2,$3,$9,$11}' | sort | uniq -c# 分析Web攻擊grep -E "(union|select|drop|insert|update|delete)" /var/log/nginx/access.loggrep -E "(\.\./|etc/passwd|/bin/sh)" /var/log/nginx/access.log# 分析異常檔案訪問find / -name "*.php" -mtime -1 2>/dev/null | xargs grep -l "eval\|base64_decode\|shell_exec"

🔍 數字取證:找出攻擊軌跡

檔案系統取證

時間線分析:
# 按修改時間查詢可疑檔案find / -type f -mtime -7 -ls 2>/dev/null | sort -k8,9# 查詢最近建立的檔案find / -type f -ctime -1 2>/dev/null | grep -v "/proc\|/sys\|/dev"# SUID/SGID檔案檢查find / -perm -4000 -type f -execls -la {} \; 2>/dev/nullfind / -perm -2000 -type f -execls -la {} \; 2>/dev/null
Webshell檢測:
# PHP Webshell特徵檢測find /var/www -name "*.php" -exec grep -l "eval.*base64_decode\|system.*\$_\|passthru.*\$_" {} \;# 一句話木馬檢測grep -r "eval(\$_POST" /var/www/grep -r "assert(\$_POST" /var/www/grep -r "preg_replace.*\/e" /var/www/# 檔案許可權異常find /var/www -type f -perm -o+w -execls -la {} \;

網路取證

流量分析工具:
# 使用tcpdump抓包分析tcpdump -i any -w traffic_$(date +%H%M%S).pcap &# 分析DNS查詢tcpdump -i any port 53 -w dns_traffic.pcap# HTTP流量分析tcpdump -i any port 80 -A -s 0 | grep -E "(GET|POST|User-Agent)"
歷史連線分析:
# 分析bash歷史for user in $(cat /etc/passwd | cut -d: -f1); doecho"=== $user 的命令歷史 ==="cat /home/$user/.bash_history 2>/dev/null | tail -50done# 檢查SSH金鑰find /home -name "authorized_keys" -exececho"=== {} ===" \; -execcat {} \;find /home -name "id_rsa*" -execls -la {} \;

🛡️ 清理與加固:徹底根除威脅

威脅清除

程序清理:
# 終止可疑程序kill -9 $(ps aux | grep -E "(bitcoin|mining|crypto)" | awk '{print $2}')# 清理計劃任務crontab -recho"" > /etc/crontabrm -rf /var/spool/cron/*
檔案清理:
# 刪除Webshellfind /var/www -name "*.php" -exec grep -l "eval.*base64_decode" {} \; | xargs rm -f# 清理臨時檔案find /tmp -type f -mtime -7 -execrm -f {} \;find /var/tmp -type f -mtime -7 -execrm -f {} \;# 重置檔案許可權find /var/www -type f -execchmod 644 {} \;find /var/www -type d -execchmod 755 {} \;

系統加固

賬戶安全:
# 修改所有密碼passwd rootpasswd $(whoami)# 停用不必要使用者usermod -s /sbin/nologin apacheusermod -s /sbin/nologin nginx# SSH安全配置sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_configsed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_configsystemctl restart ssh
防火牆配置:
# iptables規則iptables -Fiptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPTiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables -A INPUT -p tcp --dport 443 -j ACCEPTservice iptables save

📊 預防為主:構建監控體系

即時監控指令碼

#!/bin/bash# 伺服器安全監控指令碼ALERT_EMAIL="[email protected]"LOG_FILE="/var/log/security_monitor.log"check_suspicious_processes() {# 檢查挖礦程序    MINING_PROCS=$(ps aux | grep -E "(bitcoin|mining|crypto|xmrig)" | grep -v grep)if [ ! -z "$MINING_PROCS" ]; thenecho"$(date): 發現挖礦程序: $MINING_PROCS" >> $LOG_FILEecho"檢測到挖礦程序" | mail -s "安全警報"$ALERT_EMAILfi# 檢查高CPU佔用程序    HIGH_CPU=$(ps aux --sort=-%cpu | awk 'NR>1 && $3>80 {print $0}')if [ ! -z "$HIGH_CPU" ]; thenecho"$(date): 高CPU佔用程序: $HIGH_CPU" >> $LOG_FILEfi}check_failed_logins() {    FAILED_COUNT=$(grep "Failed password" /var/log/secure | grep "$(date +%b\ %d)" | wc -l)if [ $FAILED_COUNT -gt 10 ]; thenecho"$(date): 今日失敗登入次數: $FAILED_COUNT" >> $LOG_FILEecho"檢測到暴力破解攻擊" | mail -s "登入安全警報"$ALERT_EMAILfi}# 每5分鐘執行一次whiletruedo    check_suspicious_processes    check_failed_loginssleep 300done

檔案完整性監控

# 使用AIDE進行檔案完整性檢查yum install aide -y# 初始化資料庫aide --initmv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz# 定期檢查cat > /etc/cron.daily/aide-check << 'EOF'#!/bin/bashaide --check > /tmp/aide-report.txt 2>&1if [ $? -ne 0 ]; then    mail -s "檔案完整性檢查異常" [email protected] < /tmp/aide-report.txtfiEOFchmod +x /etc/cron.daily/aide-check

🎯 總結:運維安全的核心原則

快速響應三要素:
  1. 1. 發現要快 – 部署監控告警,第一時間發現異常
  2. 2. 隔離要準 – 立即斷網隔離,防止橫向擴散
  3. 3. 取證要全 – 完整儲存證據,為後續分析提供支撐
日常防護重點:
  • • 定期更新系統補丁和軟體版本
  • • 實施最小許可權原則和網路分段
  • • 建立完善的日誌收集和分析機制
  • • 制定並演練應急響應預案
經驗教訓:入侵事件往往不是技術問題,而是管理問題。90%的入侵都可以透過基礎安全措施預防:及時打補丁、強密碼策略、許可權控制、日誌監控。
記住,安全不是一蹴而就的,而是需要持續改進的過程。每一次安全事件都是學習和提升的機會,關鍵在於建立完善的響應機制和持續的安全意識。
文末福利
就目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。
為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套高階運維工程師必備技能資料包,內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
備註:最新運維資料
100%免費領取
(後臺不再回復,掃碼一鍵領取)


相關文章