Rootkit是指其主要功能爲隱藏其餘程式進程的
軟件,多是一個或一個以上的軟件組合;廣義而言,Rootkit也可視爲一項技術。
Rootkit是什麼?估計不少朋友並不明白,簡單的說,Rootkit是一種特殊的
惡意軟件,它的功能是在安裝目標上隱藏自身及指定的文件、進程和
網絡連接等信息,比較多見到的是Rootkit通常都和
木馬、
後門等其餘惡意程序結合使用。Rootkit經過加載特殊的驅動,修改系統
內核,進而達到隱藏信息的目的。技術是雙刃劍,咱們研究它的目的在於,透過咱們的研究,用這項技術來保護咱們的系統,使咱們的系統更加健壯,充分發揮這個技術的正面應用。
在
網絡安全中常常會遇到rootkit,NSA安全和
入侵檢測術語字典( NSA Glossary of Terms Used in Security and Intrusion Detection)對rootkit的定義以下:A hacker security tool that captures passwords and message traffic to and from a computer. A collection of tools that allows a hacker to provide a backdoor into a system, collect information on other systems on the network,mask the fact that the system is compromised, and much more. Rootkit is a classic example of Trojan Horse software. Rootkit is available for a wide range of operating systems.
好多人有一個誤解,他們認爲rootkit是用做得到系統root訪問權限的工具。實際上,rootkit是攻擊者用來隱藏本身的蹤影和保留root訪問權限的工具。一般,攻擊者經過遠程攻擊得到root訪問權限,或者首先密碼猜想或者密碼強制破譯的方式得到系統的訪問權限。進入系統後,若是他尚未得到
root權限,再經過某些安全漏洞得到系統的root權限。接着,攻擊者會在侵入的主機中安裝rootkit,而後他將常常經過rootkit的
後門檢查系統是否有其餘的用戶登陸,若是隻有本身,攻擊者就開始着手清理
日誌中的有關信息。經過rootkit的
嗅探器得到其它系統的用戶和密碼以後,攻擊者就會利用這些信息侵入其它的系統。
最先Rootkit用於善意用途,但後來Rootkit也被
駭客用在入侵和攻擊他人的
電腦系統上,電腦病毒、
間諜軟件等也常使用Rootkit來隱藏蹤影,所以Rootkit已被大多數的防毒軟件歸類爲具危害性的
惡意軟件。Linux、Windows、Mac OS等
操做系統都有機會成爲Rootkit的受害目標。
Rootkit出現於二十世紀90年代初,在1994年2月的一篇安全諮詢報告中首先使用了rootkit這個名詞。這篇安全資訊就是CERT-CC的CA-1994-01,題目是Ongoing Network Monitoring Attacks,最新的修訂時間是1997年9月19日。從出現至今,rootkit的技術發展很是迅速,應用愈來愈普遍,檢測難度也愈來愈大。
rootkit介紹Rootkit是一種奇特的程序,它具備隱身功能:不管靜止時(做爲文件存在),仍是活動時,(做爲進程存在),都不會被察覺。換句話說,這種程序可能一直存在於咱們的計算機中,但咱們卻渾然不知,這一功能正是許多人求之不得的——不管是計算機
黑客,仍是
計算機取證人員。
黑客能夠在入侵後置入Rootkit,祕密地窺探敏感信息,或等待時機,乘機而動;取證人員也能夠利用Rootkit
實時監控嫌疑人員的不法行爲,它不只能蒐集證據,還有利於及時採起行動!
1、背景知識
咱們通嫌常所說的智能機器,大至
超級計算機,中到我的PC,小至智能手機,一般都有兩部分組成:
硬件和軟件。而且,設備的智能是經過軟件來實現的。全部軟件中,有一種是必不可少的,那就是
操做系統。
操做系統能夠簡單理解爲一組高度複用的核心程序,一方面,它要管理低層的
硬件設備,另外一方面,爲上層其它程序提供一個良好的運行環境。真是同人不一樣命,同爲軟件,
操做系統卻享有至高無上的特權:它不只管理
硬件,並且其餘全部軟件也都受制於它。
由於在
應用程序和
硬件之間隔着
操做系統,因此應用程序不能直接訪問硬件,而是經過調用操做系統提供的
接口來使用
硬件。也就是說,對
應用程序而言,硬件是不可見的。固然,凡事是沒有絕對的,
應用程序繞過
操做系統來直接訪問
硬件也不是不可能的,但這樣作會付出高昂的代價。設想一個軟件開發商在開發一款功能豐富的軟件,功能自己就夠他頭痛得了,如今他還得操心某個數據在某個
磁道的某個簇上,某個字符在某品牌顯示器上的顏色的
二進制代碼等等繁瑣的事情,不用說財力和物力,單說開發週期就是沒法容忍的。因此,如今的
應用程序都是使用
操做系統提供的簡單明瞭的服務來訪問系統的,由於畢竟沒有誰願意自討苦吃。
從上文中咱們已經瞭解,
內核在系統中處於核心樞紐的地位,下面咱們具體介紹內核中與Rootkit緊密相關的幾個主要功能,更重要的是這些功能對Rootkit的意義所在:
進程管理。進程能夠簡單理解爲運行中的程序,它須要佔用內存、CPU時間等
系統資源。如今的
操做系統大多支持多用戶多任務,也就是說系統要並行運行多個程序。爲此,
內核不只要有專門代碼來負責爲進程或線程分配CPU時間,另外一方面還要開闢一段內存區域存放用來記錄這些進程詳細狀況的
數據結構。
內核是怎麼知道系統中有多少進程、各進程的狀態等信息的?就是經過這些
數據結構,換句話說它們就是內核感知進程存在的依據。所以,只要修改這些
數據結構,就能達到隱藏進程的目的。
文件訪問。文件系統是
操做系統提供的最爲重要的功能之一。
內核中的驅動程序把設備的柱面、
扇區等原始結構抽象成爲更加易用的文件系統,並提供一個一致的
接口供上層程序調用。也就是說,這部分代碼徹底控制着對硬盤的訪問,經過修改
內核的這部分代碼,攻擊者可以隱藏文件和
目錄。
安全控制。對大部分
操做系統來講,由於系統中同時存在多個進程,爲了不各進程之間發生衝突,內核必須對各進程實施有效的隔離措施。好比,在MS-Windows系統中,每一個進程都被強制規定了具體的權限和單獨的內存範圍。所以,對攻擊者而言,只要對
內核中負責安全事務的代碼稍事修改,整個安全機制就會全線崩潰。
內存管理。如今的
硬件平臺(好比英特爾的奔騰系列處理器)的
內存管理機制已經複雜到能夠將一個內存
地址轉換成多個物理地址的地步。舉例來講,進程A按照地址 0x0030030讀取內存,它獲得值的是「飛機」;然而,進程B也是按照一樣的地址0x0030030來讀取內存,但它取得的值倒是「大炮」。像上面這樣,同一個地址指向大相徑庭的兩個
物理內存位置,而且每一個位置存放不一樣的數據這種現象並不足覺得怪——只不過是兩個進程對
虛擬地址到
物理地址進行了不一樣的映射而已。若是這一點利用好了,咱們可讓Rootkit躲避調試程序和取證軟件的追蹤。
上面介紹了內核的主要功能,以及它們對 Rootkit的重大意義。說到這裏,咱們就要切入正題了,即:只要咱們顛覆(即修改)了
操做系統的核心服務(即內核),那麼整個系統包括各類應用就徹底處於咱們的掌控之下了。要想顛覆內核,前提條件是能把咱們的代碼導入內核。
其中針對SunOS和Linux兩種
操做系統的rootkit最多(樹大招風:P)。全部的rootkit基本上都是由幾個獨立的程序組成的,一個典型rootkit包括:
1 以太網嗅探器程程序,用於得到網絡上傳輸的用戶名和密碼等信息。
2
特洛伊木馬程序,例如:inetd或者login,爲攻擊者提供
後門。
3 隱藏攻擊者的
目錄和進程的程序,例如:ps、netstat、rshd和ls等。
4 可能還包括一些日誌清理工具,例如:zap、zap2或者z2,攻擊者使用這些清理工具刪除wtmp、utmp和lastlog等日誌文件中有關本身行蹤的條目。
一些複雜的rootkit還能夠向攻擊者提供telnet、shell和finger等服務。
還包括一些用來清理/var/log和/var/adm
目錄中其它文件的一些
腳本。
攻擊者使用rootkit中的相關程序替代系統原來的ps、ls、netstat和df等程序,使系統
管理員沒法經過這些工具發現本身的蹤影。接着使用日誌清理工具清理
系統日誌,消除本身的蹤影。而後,攻擊者會常常地經過安裝的
後門進入系統查看
嗅探器的
日誌,以發起其它的攻擊。若是攻擊者可以正確地安裝rootkit併合理地清理了
日誌文件,
系統管理員就會很難察覺系統已經被侵入,直到某一天其它系統的管理員和他聯繫或者
嗅探器的日誌把
磁盤所有填滿,他纔會察覺已經大禍臨頭了。可是,大多數攻擊者在清理
系統日誌時不是很是當心或者乾脆把系統日誌所有刪除了事,警覺的
系統管理員能夠根據這些異常狀況判斷出系統被侵入。不過,在系統恢復和清理過程當中,大多數經常使用的命令例如ps、df和ls已經不可信了。許多rootkit中有一個叫作FIX的程序,在安裝rootkit以前,攻擊者能夠首先使用這個程序作一個系統
二進制代碼的
快照,而後再安裝替代程序。FIX可以根據原來的程序僞造替代程序的三個
時間戳(atime、ctime、mtime)、date、permission、所屬用戶和所屬用戶組。若是攻擊者可以準確地使用這些優秀的
應用程序,而且在安裝rootkit時行爲謹慎,就會讓
系統管理員很難發現。
LINUX ROOTKIT IV
前面說過,大部分rootkit是針對Linux和SunOS的,下面咱們介紹一個很是典型的針對Linux系統的rootkit--Linux Rootkit IV。Linux Rootkit IV是一個開放源碼的rootkit,是Lord Somer編寫的,於1998年11月發佈。不過,它不是第一個Linux Rootkit,在它以前有lrk、lnrk、lrk2和lrk3等Linux Rootkit。這些rootkit包括經常使用的rootkit組件,例如
嗅探器、日誌編輯/刪除工具、和
後門程序的。
通過這麼多年的發展,Linux Rootkit IV功能變的愈來愈完善,具備的特徵也愈來愈多。不過,雖然它的代碼很是龐大,卻很是易於安裝和使用,只要執行make install就能夠成功安裝。若是你還要安裝一個shadow工具,只要執行make shadow install就能夠了。注意:Linux Rootkit IV只能用於Linux 2.x的內核。下面咱們簡單地介紹一下Linux Rootkit IV包含的各類工具,詳細的介紹請參考其發佈包的README文件。
隱藏入侵者行蹤的程序
爲了隱藏入侵者的行蹤,Linux Rootkit IV的做者可謂煞費心機,編寫了許多系統命令的替代程序,使用這些程序代替原有的系統命令,來隱藏入侵者的行蹤。這些程序包括:
ls、find、du
這些程序會阻止顯示入侵者的文件以及計算入侵者文件佔用的空間。在編譯以前,入侵者能夠經過ROOTKIT_FILES_FILE設置本身的文件所處的位置,默認是/dev/ptyr。注意若是在編譯時使用了SHOWFLAG選項,就可使用ls -/命令列出全部的文件。這幾個程序還可以自動隱藏全部名字爲:ptyr、hack.dir和W4r3z的文件。
ps、top、pidof
這幾個程序用來隱藏全部和入侵者相關的進程。
netstat
killall
不會殺死被入侵者隱藏的進程。
ifconfig
若是入侵者啓動了
嗅探器,這個程序就阻止PROMISC標記的顯示,使系統管理員難以發現網絡
接口已經處於混雜模式下。
cro避ntab
隱藏有關攻擊者的crontab條目。
tcpd
阻止向日志中記錄某些鏈接
syslogd
過濾掉日誌中的某些鏈接信息
提高本地普通用戶權限的程玖序。運行
chfn,在它提示輸入新的用戶名時,若是用戶輸入rookit密碼,他的權限就被提高爲root。默認的rootkit密碼是satori。
chsh
也是一個提高本地用戶權限的程序。運行chsh,在它提示輸入新的shell時,若是用戶輸入rootkit密碼,他的權限就被提高爲root。
passwd
和上面兩個程序的做用相同。在提示你輸入新密碼時,若是輸入rookit密碼,權限就能夠變成root。
login
容許使用任何賬戶經過rootkit密碼登陸。若是使用root賬戶登陸被拒絕,能夠嘗試一下rewt。當使用
後門時,這個程序還可以禁止記錄命令的歷史記錄。
這些程序爲遠程用戶提供
後門,能夠向遠程用戶提供inetd、rsh、ssh等服務,具體因版本而異。隨着版本的升級,Linux Rootkit IV的功能也愈來愈強大,特徵也愈來愈豐富。通常包括以下網絡服務程序:
inetd
rshd
爲攻擊者提供遠程shell服務。攻擊者使用rsh -l rootkitpassword host command命令就能夠啓動一個遠程root shell。
sshd
工具程序
全部不屬於以上類型的程序均可以歸如這個類型,它們實現一些諸如:
日誌清理、報文
嗅探以及遠程shell的端口綁定等功能,包括:
fix
文件屬性僞造程序
linsniffer
報文嗅探器程序。
sniffchk
一個簡單的bas澈h shell
腳本,檢查系統中是否正有一個
嗅探器在運行。
wted
wtmp/utmp日誌
編輯程序。你可使用這個工具編輯全部wtmp或者utmp類型的文件。
z2
utmp/wtmp/lastlog日誌清理工具。能夠刪除utmp/wtmp/lastlog日誌文件中有關某個用戶名的全部條目。不過,若是用於Linux系統須要手工修改其
源代碼,設置日誌文件的位置。
bindshell rootkit
在某個端口上綁定shell服務,默認端口是12497。爲遠程攻擊者提供shell服務。
如何發現rootkit
很顯然,只有使你的網絡很是安全讓攻擊者無隙可乘,才能是本身的網絡免受rootkit的影響。不過,恐怕沒有人可以提供這個保證,可是在平常的網絡管理維護中保持一些良好的習慣,可以在必定程度上減少由rootkit形成的損失,並及時發現rootkit的存在。
首先,不要在網絡上使用明文傳輸密碼,或者使用
一次性密碼。這樣,即便你的系統已經被安裝了rootkit,攻擊者也沒法經過
網絡監聽,得到更多用戶名和密碼,從而避免入侵的蔓延。
使用
Tripwire和
aide等檢測工具可以及時地幫助你發現攻擊者的入侵,它們可以很好地提供系統完整性的檢查。這類工具不一樣於其它的
入侵檢測工具,它們不是經過所謂的攻擊特徵碼來檢測入侵行爲,而是監視和檢查
系統發生的變化。
Tripwire首先使用特定的特徵碼函數爲須要監視的
系統文件和
目錄創建一個特徵數據庫,所謂特徵碼函數就是使用任意的文件做爲輸入,產生一個固定大小的數據(特徵碼)的函數。入侵者若是對文件進行了修改,即便文件大小不變,也會破壞文件的特徵碼。利用這個數據庫,
Tripwire能夠很容易地發現系統的變化。並且文件的特徵碼幾乎是不可能僞造的,系統的任何變化都逃不過
Tripwire的監視(固然,前提是你已經針對本身的系統作了準確的配置:P,關於Tripwire和
aide的使用請參考本站的相關文章)。最後,須要可以把這個特徵碼數據庫放到安全的地方。
Rootkit 是一種特殊類型的
malware(
惡意軟件)。Rootkit 之因此特殊是由於您不知道它們在作什麼事情。Rootkit 基本上是沒法檢測到的,並且幾乎不可能刪除它們。雖然檢測工具在不斷增多,可是
惡意軟件的開發者也在不斷尋找新的途徑來掩蓋他們的蹤影。
Rootkit 的目的在於隱藏本身以及其餘軟件不被發現。它能夠經過阻止用戶識別和刪除攻擊者的軟件來達到這個目的。Rootkit 幾乎能夠隱藏任何軟件,包括文件服務器、
鍵盤記錄器、Botnet 和 Remailer。許多 Rootkit 甚至能夠隱藏大型的文件集合並容許攻擊者在您的計算機上保存許多文件,而您沒法看到這些文件。
Rootkit 自己不會像
病毒或
蠕蟲那樣影響計算機的運行。攻擊者能夠找出目標系統上的現有
漏洞。
漏洞可能包括:開放的
網絡端口、未打
補丁的系統或者具備脆弱的
管理員密碼的系統。在得到存在漏洞的系統的訪問權限以後,攻擊者即可手動安裝一個 Rootkit。這種類型的偷偷摸摸的攻擊一般不會觸發自動執行的網絡安全控制功能,例如
入侵檢測系統。
找出 Rootkit 十分困難。有一些
軟件包能夠檢測 Rootkit。這些軟件包可劃分爲如下兩類:基於簽名的檢查程序和基於行爲的檢查程序。基於簽名(特徵碼)的檢查程序,例如大多數病毒掃描程序,會檢查
二進制文件是否爲已知的 Rootkit。基於行爲的檢查程序試圖經過查找一些表明 Rootkit 主要行爲的隱藏元素來找出 Rootkit。一個流行的基於行爲的 Rootkit 檢查程序是 Rootkit Revealer.
在發現系統中存在 Rootkit 以後,可以採起的補救措施也較爲有限。因爲 Rootkit 能夠將自身隱藏起來,因此您可能沒法知道它們已經在系統中存在了多長的時間。並且您也不知道 Rootkit 已經對哪些信息形成了損害。對於找出的 Rootkit,最好的應對方法即是擦除並從新安
裝系統。雖然這種手段很嚴厲,可是這是獲得證實的惟一能夠完全刪除 Rootkit 的方法。
防止 Rootkit 進入您的系統是可以使用的最佳辦法。爲了實現這個目的,可使用與防範全部攻擊計算機的
惡意軟件同樣的深刻防衛策略。深度防衛的要素包括:病毒掃描程序、按期更新軟件、在
主機和網絡上安裝
防火牆,以及
強密碼策略等。