任何系統管理員想要在其生產服務器上最先部署的安全措施之一就是檢測文件篡改的機制――不法分子篡改的不僅僅是文件內容,還有文件屬性。
AIDE(全稱“高級入侵檢測環境”)是一種基于主機的開源入侵檢測系統。AIDE通過檢查許多文件屬性的不一致性來檢查系統二進制文件和基本配置文件的完整性,這些文件屬性包括權限、文件類型、索引節點(inode)、鏈接數量、鏈接名稱、用戶、用戶組、文件大小、塊計數、修改時間、訪問時間、創建時間、訪問控制列表(acl)、SELinux安全上下文、xattrs以及md5/sha校驗和。
AIDE通過掃描一臺(未被篡改)的Linux服務器的文件系統來構建文件屬性數據庫。然后,它對照該數據庫,檢查服務器的文件屬性,然后在服務器運行時,一旦索引文件出現任何更改,就發出警告。正是由于這個原因,每當由于正當原因而更新系統或更改配置文件后,AIDE必須重新為受保護的文件編制索引。
對某些客戶而言,他們的安全策略可能要求在服務器上安裝某種入侵檢測系統(IDS)。但無論客戶是不是要求IDS,系統管理員部署IDS都是個好的做法。
在CentOS或RHEL上安裝AIDE
AIDE的初始安裝(以及首次運行)最好是在剛安裝操作系統的系統上進行,沒有任何服務暴露在互聯網、甚至暴露在局域網面前。在這個早期階段,我們可以將來自外部的一切闖入和篡改行為這種風險降到最低限度。事實上,這也是確保系統在AIDE構建其初始數據庫時很干凈的唯一途徑。
由于這個原因,我們在使用# yum install aide這個命令安裝AIDE后,需要將我們的機器從網絡斷開,并執行一些基本的配置任務,如下所述。
配置AIDE
默認配置文件位于/etc/aide.conf。該文件提供了幾個示例保護規則(比如FIPSR、NORMAL、DIR和DATAONLY),每個規則后面跟著一個等號以及要檢查的文件屬性列表,或者任何預定義規則(用+分隔)。你也可以使用這種格式定義任何自定義規則。
FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
NORMAL = FIPSR+sha512
比如說,上述例子意味著,NORMAL規則將檢查下列屬性方面的不一致性:權限(p)、索引節點(i)、鏈接數量(n)、用戶(u)、用戶組(g)、大小(s)、修改時間(m)、創建時間(c)、訪問控制列表(acl)、SELinux(selinux)、xattrs(xattr)以及SHA256/SHA512校驗和(sha256和sha512)。
定義的規則可以靈活地用于不同的目錄和文件(用正則表達式表示)。
條目前面的感嘆號(!)告訴AIDE忽略子目錄(或目錄里面的文件),可針對子目錄定義另一個規則。
在上面這個例子中,PERMS是面向/etc及其子目錄和文件的默認規則。然而,沒有規則會應用于/etc中的備份文件(即/etc/.*~),也不會應用于/etc/mtab文件。對于/etc中一些選擇性的子目錄或文件而言,而是應用NORMAL規則,替代默認規則PERMS。
定義合適的規則,并將其應用到系統中的合適位置,這是使用AIDE過程中最困難的部分,但運用良好的判斷力是個好的開端。一個經驗法則是,別檢查不必要的屬性。比如說,檢查/var/log或/var/spool里面的文件的修改時間肯定會導致大量誤報,因為有許多應用程序和守護進程常常將內容寫入到這些位置。此外,檢查多個校驗和可能會加強安全性,不過代價是AIDE運行時間延長了。
另外,如果你使用MAILTO變量來指定電子郵件地址,可以將檢查結果發送到你的郵箱。將下面這一行放入到/etc/aide.conf中的任何位置。
MAILTO=root@localhost
[page]首次運行AIDE
運行下列命令對AIDE數據庫進行初始化:
# aide --init
根據/etc/aide.conf生成的/var/lib/aide/aide.db.new.gz文件需要重命名為/var/lib/aide/aide.db.gz,以便讓AIDE能讀取它:
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide.db.gz
現在,是時候對照數據庫,執行我們的第一次系統檢查了。為此,只要運行:
# aide
沒有選項調用時,AIDE假設使用--check。
如果數據庫創建后沒有做過任何變更,AIDE在結束檢查后會返回OK信息。
在生產環境中管理AIDE
構建初始AIDE數據庫后,你常常需要由于各種正當的原因更新受保護的服務器,這是日常系統管理活動的一部分。每次服務器經過更新后,你必須重新構建AIDE數據庫,以便將變更內容添加到數據庫。為此,使用這個命令:
# aide --update
為了使用AIDE保護生產系統,可能最好安排一個計劃任務,以便定期使用AIDE檢查任何不一致性。比如說,安排AIDE每天運行一次,并將結果發送到電子郵件地址:
# crontab -e
0 0 * * * /usr/sbin/aide --check | /usr/bin/mail -s "AIDE run for $HOSTNAME" [email protected]
測試AIDE檢查文件篡改的功能
下列測試場景將演示AIDE如何檢查文件的完整性。
測試場景1
我們不妨添加一個新文件(比如/etc/fake)。
# cat /dev/null >/etc/fake
測試場景 2
我們不妨變更文件權限,看看它能否被檢測到。
# chmod 644 /etc/aide.conf
測試場景 3
最后,我們不妨更改文件內容(比如添加一個注釋行到/etc/aide.conf)。
echo "#This is a comment" >>/etc/aide.conf
在上面的屏幕截圖中,第一列顯示了文件屬性,第二列顯示了AIDE數據庫中的值,第三列顯示了那些屬性的更新后值。第三列中的空白部分表示該屬性沒有更改(該例子中的ACL)。
結束語
要是你果真覺得自己處于這種情形:有充分的理由認為系統已遭到了篡改,可是乍一看又無法查明什么有可能遭到了更改,像AIDE這樣的基于主機的入侵檢測系統就大有幫助,因為它可以幫助你盡快查明什么遭到了更改,而不是胡加猜測、浪費寶貴的時間。
原文地址:http://xmodulo.com/host-intrusion-detection-system-centos.html