當Linux服務器遭到黑客攻擊后,首先要斷開Internet連接,防止其被黑客作為跳板來攻擊內網其他主機。黑客在系統中的活動會被各種系統日志記錄下來,通過分析可有效確定攻擊來源。
在有些情況下,因為某些原因無法斷開其與外網的連接,那么就需要有針對性地斷開與黑客活動有關的網絡連接。因為黑客使用Telnet、SSH等方式連接服務器,必然要使用特定的賬戶。當使用Root賬戶登錄后,執行“w”命令,列出所有的賬戶登錄歷史信息,包括賬戶名、終端設備、來源IP、登錄行為等。當然也可以執行“last”命令查看所有賬戶登錄信息。當從其中發現可疑賬戶后,就需要立即將其鎖定,例如執行“passwd -l kkuser”命令將賬戶“kkuser”鎖定。
僅僅鎖定是不夠,還需要斷開其連接。根據上述登錄列表信息中與可疑賬戶對應的“TTY”列中的虛擬終端信息,可以定位與其關聯的登錄進程ID。例如當黑客通過SSH方式連接上來,其使用的虛擬終端為“pts/23”,可以執行“ps -ef| grep @pts/23”命令,發現其PID號碼(例如“7901”),執行“kill-9 7901”命令,徹底斷開該黑客賬戶的網絡連接。進入黑客使用的可疑賬戶目錄下,查 看“.bash_history”文件可以了解其運行的命令。實際上,在每個賬戶的Home目錄下都存在“.bash_history”文件。
為便于觀察,執行“vi /etc/bashrc”命令,將其中的“HISFILESIZE=”值設為“3000”,可最大記錄3000行命令。將“HISTSIZE=”值設為“3000”,可 將 history命令的輸出記錄數量設為3000行。 將“HISTTIMEFORMAT=”值設為“'%F %T'”,并在其下輸入“export HISTTIME FORMAT”行,可以合理的顯示命令的執行時間參數,便于管理員了解命令是何時執行的。
例如確定黑客是通過SSH登錄的話,執行“pidof sshd”命令,顯示SSHD進程的所有PID信息。根據對應的 PID(例 如“6971”) 值,執行“ls -al /proc/6971/exe”,“ls -al /proc/6971/fd”等命令,在內存目錄中查看其可執行文件或文件句柄信息。黑客要遠程控制該機,必然會在系統中開啟后門,就需要打開對應的網絡端口。執行“netstat -a”命令,可查看網絡連接信息。當發現某個端口(如TCP 2079)存在異常,可執行“fuser -n tcp 2079”命令查看與之管理的進程 ID(如“6093”)。執行“ps -ef |grep 6093”命令,可定位其所在程序路徑。
當黑客入侵服務器后,必然會對其中的文件做手腳。執行“rpm -Va”命令,可快速對系統文件進行校驗。檢測信息如出現“M”標記,說明其訪問權限及類型發生了變動,很可能黑客對其進行了篡改。
對于Linux服務器來說,一旦黑客植入了Rootkit級別的后門,并對系統常用命令文件進行替換的話,處理起來就比較復雜了。
例如單位機房某臺Linux服務器上安裝了Apache服務,對外提供Web服務。近來有用戶反映,該網站訪問速度很慢甚至無法正常訪問。經過在該機上進行流量分析發現該機大量向外部發送數據包,消耗了大量的帶寬,造成網站無法正常運行。
使用netstat、ps等 常規命令對系統檢測并未發現可疑的網絡連接和進程信息。因為管理員安全性較高,事先對該服務器上重要文件(包括各種命令文件)進行了備份,因此可以將常用的ls、top、more等命令文件進行對比分析,發現有些命令文件被篡改。為保證檢測的正確性,將備份出來的命令文件復制到指定的目錄中,然后使用備份命令文件來對系統進行檢測分析。
執 行“more /var/log/secure |gerp accepted”命令,對系統安全日志進行過濾檢測,在返回信息中發現,在若干天前有一個來歷不明的IP通過SSH訪問了該機,其使用的賬戶名為“news”。經分析,該IP來自于國外的某臺主機。執行“vi /etc/shadow”命令,在密碼文件中顯示該“news”賬戶設置了密碼,說明黑客使用該賬戶通過SSH登錄到了該服務器上。執行“ps aux”命令,查看進程信息,發現有個名為“zpt”的進程很可疑。
綜合以上信息,可以看出該可疑進程占用了很高的CPU和內存的使用率。執行“ls /proc/31776/exe”和“ls-al /proc/31776/fd”命令,對該可疑進程ID進行跟蹤分析,進入“/var/tmp/data/loca”目錄,執行“ls -al”命令,發現了與黑客活動相關的所有文件。據此可知,當黑客控制了該機運行了后門程序后,根據該文件對所有預設的IP進行掃描,進而以該機為跳板,對其他主機進行滲透攻擊并獲取控制權。
當這些主機被非法控制后,就會開啟后門并創建非法賬戶,并將主機名稱、IP地址等信息傳送給黑客,黑客繼而發起攻擊。為防止被管理員發現,在該目錄下的“com”目錄下發現了一些常用的系統命令文件,文件顯然經過惡意篡改,通過覆蓋原始的系統命令文件來蒙騙用戶并隱藏后門程序。并且黑客還使用了經過篡改的“login”文件替換真實的系統登錄程序,這樣所有的登錄在賬戶和密碼就會被其記錄下來并發送給黑客。
那么黑客究竟是如何入侵得手的呢?因為該機上運行了Apache服務,其中的一個腳本文件在設計時存在文件上傳漏洞,被黑客發現并加以利用,將后門程序上傳到系統的臨時目錄中,當該后門程序觸發后,就會利用閑置的系統內置賬戶來進行非法提權,獲取較高的操作權限,因為該機開啟了SSH服務器。所以黑客就可通過SSH登錄到該機上了。了解黑客的伎倆后,可以有針對性的進行處理。例如將系統徹底重裝,之后重新配置運行Apache,并將存在安全問題的腳本文件徹底進行修改,堵住安全漏洞,并恢復了之前備份的網站數據,讓該機恢復到正常工作狀態。
因為該機采用了SSH登錄方式,為了安全起見,必須將登錄方式更改為公鑰認證方式。方法是執行“vi/etc/ssh/sshd_config”命令,在其配置文件中將“protocol”的值設置為“2”,將“PubkeyAuthentication”的值設置為“yes”,將“Autho rizedKeysFile”的值設置為“.ssh/aurhorized_keys”,這里的“.ssh/aurhorized_keys”為服務器密鑰文件存放路徑,例如對于“user1”來說,其路徑為“/home/user1/.ssh/aurhorized_keys”。當然,事先要進行密鑰的準備操作。
將“PasswordAuthen tication”的值設置為“no”,禁止使用口令認證。之后重啟SSHD服務即可。為了進一步提高安全性,防止黑客隨意通過SSH連接本機,可以使用IPTable編寫防火墻控制規則,對SSH連接進行監控。此外,還可以使用TCP_Wrapper安全模塊對SSH訪問進行嚴格限制,執行“rpm -q tcp_wrappers”命令,可以查看該模塊是否安裝。執行“vi /etc/hosts.allow”命令,在其中輸入“sshd xxx.xxx.xxx.xxx”行,表示只允許指定的IP(這里為“xxx.xxx.xxx.xxx”) 訪問本機的SSHD服務。當然,還可以根據需要添加更多的IP或域名,讓這些指定的主機才可以通過SSH訪問本地。為了上述要求,還需要執行“vi /etc/hosts.allow”命令,在其中添加“sshd:ALL”,禁止其他的主機通過SSH方式訪問本機。
在本例中,黑客是借助于系統臨時目錄來上傳和激活后門程序的。對于Linux來說,可以在“/tmp”和“/var/tmp”兩個位置存放臨時文件。因為在默認情況下,所有的用戶都可讀寫和執行其中的文件,所以存在一定的安全隱患。此外,對于“/dev/shm”共享內存設備來說,因為在Linux啟動時會默認加載,其使用的是tmpfs內存文件系統,所以存放在該文件系統中的數據就會駐留在RAM中,這樣黑客就可能通過“/dev/shm”設備直接操縱系統內存,這對于系統的安全造成不小的威脅。
為提高“/dev/shm”設備安全性,執行“vi /etc/fstab”命令,將與該設備對應的行修改為“tmpfs /dev/shm tmpfs defaults,nosuid,noexec, rw 0 0”,對該設備進行限值處理,例如禁止執行權限等。如果臨時目錄“/tmp”是一個獨立的分區,只需執行“vi /etc/fstab”命令,在“LABEL=/tmp”開始的行中的“rw,”后面添加“nosuid,noexec,nodec”內容,就可以禁止在該分區中執行任何腳本程序或不存在的設備。如果臨時目錄“/var/tmp”是目錄,可以將其中的所有數據移動到“/tmp”分區中,之后在“/var”目錄下執行“ln-s /tmp /var/tmp”命令,將一個軟鏈接指向“/tmp”即可。
如果“/tmp”僅僅是一個目錄,可以執行“dd if=/dev/zero of=/dev/tmpfs bs=10M count=10000”,“mke2 fs -j /dev/tmpfs”,“cp -av/tmp /tmp.000”,“mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp ”,“chmod 1777 /tmp”,“mv -f /tmp.000/* /tmp/”等命令,創建一個虛擬的塊設備,并將“/tmp”綁定到該虛擬設備上,為其添加禁止執行腳本文件功能。執行“vi /fstab”命 令,添 加“/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0”行即可。
在對系統進行了重新安裝后,為強化安全性,最好將這些不需要的賬戶進行刪除,或將其設置為非交互方式登錄,就可以防范由此帶來的安全風險。執行“vi /etc/password”命令,可以查看當前存在的所有賬戶信息。執行“vi /etc/shadow”命令,可以查看所有的賬戶信息。執行“grep bash /etc/password” 或“grep sh /etc/password”命令,列出所有允許和系統交互的擁有Shell界面的賬戶信息。
對于不需要的賬戶,可直接在“/etc/password”文件中將其刪除,或對應賬戶信息中的“/bin/bash”修改為“/sbin/nologin”,禁止其以交互狀態登錄。也可以執行“userdel -r xxxxxx”、“groupdel xxxxxx”命令來刪除不需要的賬戶或組,“xxxxxx”表示具體名稱。建議對于adm、lp、sync、halt、news等默認賬戶,可以將其刪除。對于adm、lp、news、uucp、games、dip、pppusers等默認組,可以進行刪除。對于不需要的賬戶,最好將其密碼清除或禁止其以可交互方式登錄。當然也可執行“password-l zhanghu”命令將其鎖定,在這里假設賬戶名為“zhanghu”。
對于系統安全來說,Root賬戶是極為重要的。因此,其也成為了黑客攻擊的目標。為此,可以采用替換法來進行應對,例如執行“useradd tihuan_gly”命令,創建一個名為“tihuan_gly”的賬戶,并為其設置一個盡可能復雜的密碼。之后執行“vi /etc/password”命令,在該文件中將上述“tihuan_gly”賬戶的 UID和 GID的值設置為0,在保存后,該“tihuan_gly”賬戶實際上就擁有了和Root同樣的權限。不管是本地還是SSH遠程登錄,都可以利用該賬戶進行登錄。之后執行“password-l root”命令,來禁用Root賬戶。
這樣,黑客對Root賬戶密碼的破解就變得沒有什么意義了。執行“find /-perm 777 -ls”命令,從根開始查找權限為777的目錄和文件,對于不需要的目錄和文件,可以將其刪除或者更改其權限,防止其被黑客利用。對Linux來說,其內置了很多服務。對于不必要的服務最好將其關閉,防止其泄漏敏感信息或者被黑客非法利用。
例如執行“chkconfig--list”命令,可以顯示所有的服務。執行“runlevel”命令,可以查看當前的運行級別。如果顯示為“N 5”的話,可以執行“vi /etc/inittab”命令,將“id:5:initdefault:”改為“id:3:initdefault:”。 執 行“chk config -list | grep 3:on”命令,只顯示運行級別為3的服務。
對于不需要的服務可選擇將其關閉。例如執行“chk config abrtd off”、“chkconfig atd off”、“chkconfig avahi-daemon off”、“chkconfig --leve 345 lbluetooth off”“chkconfig cpuspeed off”、“chkconfig
當黑客侵入系統并非法獲得了Root權限后,為防止其對系統進行更大的破壞,就需要對文件系統進行保護。例如使用“chattr”命令,對一些重要的文件和目錄進行鎖定,就可以有效提高系統的安全性。例如執行“chattr -R +i /bin /lib /sbin”、“chattr -R +i /usr/netfs off”命令,可將自動提交BUG服務、定時計劃服務、配置WIFI服務、藍牙服務、CPU速度調整及遠程共享服務關閉。
從安全的角度來說,開啟的服務越少,存在的漏洞就會減少。當關閉了不需
bin /usr/include /usr/lib /usr/sbin”、“chattr +i /etc/passwd”、“chattr +i /etc/shadow”、“chattr +i /etc/fstab”等命令,鎖定指定的文件和目錄,其中的“R”參數表示遞歸操作所有的子目錄,“+i”參數表示設置目標文件禁止被修改、刪除、更名等操作,不能向其中寫入數要的服務后,執行“init 6”命令重啟系統。之后執行“netstat -antup”命令,來查看打開的端口信息。根據這些信息,可以了解打開的端口和服務之間的對應關系。對于不需要的端口,可以將其關閉。據或新增內容。對于系統日志來說,可以執行“chattr+a /var/log/message”,“chattr +a /var/log/secure”命令,鎖定指定的日志文件,其中的“+a”參數表示只能向其中寫入數據而無法將其刪除。當然,該命令并非萬能,例如無法鎖定“/var”的目錄。