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