落實責任,開啓linux審計功能

落實責任,開啓linux審計功能
2.6 Linux內核有用日誌記錄事件的能力,比如記錄系統調用和文件訪問。然後,管理員可以評審這些日誌,確定可能存在的安全裂口,比如失敗的登錄嘗試,或者用戶對系統文件不成功的訪問。這種功能稱爲Linux審計系統,在Red Hat Enterprise Linux 5中已經可用。

  要使用Linux Auditing System,可採用下面的步驟:

  (1) 配置審計守護進程。

  (2) 添加審計規則和觀察器來收集所需的數據。

  (3) 啓動守護進程,它啓用了內核中的Linux Auditing System並開始進行日誌記錄。

  (4) 通過生成審計報表和搜索日誌來週期性地分析數據。

  本章將詳細討論各個部分。

25.1  配置審計守護進程

  Red Hat Enterprise Linux 5內核中的Linux Auditing System默認是關閉的。當啓動審計守護進程時,啓用這個內核特性。要在啓動時不通過守護進程auditd來啓用Linux Auditing System,只需用audit= 1參數來引導。如果這個參數設置爲1,而且auditd沒有運行,則審計日誌會被寫到/var/log/messages中。

  要使用auditd和實用程序來生成日誌文件報表,必須安裝audit RPM程序包。如果沒有安裝,則參見第3章“操作系統更新”瞭解關於程序包安裝的指令。

  用了auditd,管理員就可以定製產生的審計日誌。下面只是一部分可用的自定義配置:

● 設置審計消息的專用日誌文件

● 確定是否循環使用日誌文件

● 如果日誌文件的啓動用掉了太多磁盤空間則發出警告

● 配置審計規則記錄更詳細的信息

● 激活文件和目錄觀察器

  這些設置值及更多設置值位於/etc/audit/auditd.conf文件中,它包含修改審計守護進程的行爲的選項。每個選項均應在獨立的一行上,後面跟着等於號(=)和這個選項的值。程序清單25-1顯示了默認配置文件。

  程序清單25-1  默認審計守護進程參數

     #

     # This file controls the configuration of the audit daemon

     #

 

     log_file = /var/log/audit/audit.log

     log_format = RAW

     priority_boost = 3

     flush = INCREMENTAL

     freq = 20

     num_logs = 4

     dispatcher = /sbin/audispd

     disp_qos = lossy

     max_log_file = 5

     max_log_file_action = ROTATE

     space_left = 75

     space_left_action = SYSLOG

     action_mail_acct = root

     admin_space_left = 50

     admin_space_left_action = SUSPEND

     disk_full_action = SUSPEND

     disk_error_action = SUSPEND

  可以配置下面這些選項(參見程序清單25-1瞭解默認值):

     log_file

審計日誌文件的完整路徑。如果您配置守護進程向除默認/var/log/audit/外的目錄中寫日誌文件時,一定要修改它上面的文件權限,使得只有根用戶有讀、寫和執行權限。所有其他用戶都不能訪問這個目錄或這個目錄中的日誌文件。

     log_format

寫日誌時要使用的格式。當設置爲RAW時,數據會以從內核中檢索到的格式寫到日誌文件中。當設置爲NOLOG時,數據不會寫到日誌文件中,但是如果用dispatcher選項指定了一個,則數據仍然會發送到審計事件調度程序中。

     priority_boost

    審計應採用多少優先級推進守護進程。必須是非負數。0表示沒有變化。

     flush

多長時間向日志文件中寫一次數據。值可以是NONE、INCREMENTAL、DATA和SYNC之一。如果設置爲NONE,則不需要做特殊努力來將數據刷新到日誌文件中。如果設置爲INCREMENTAL,則用freq選項的值確定多長時間發生一次向磁盤的刷新。如果設置爲DATA,則審計數據和日誌文件一直是同步的。如果設置爲SYNC,則每次寫到日誌文件時,數據和元數據是同步的。

     freq

如果flush設置爲INCREMETNAL,審計守護進程在寫到日誌文件中前從內核中接收的記錄數。

     num_logs

max_log_file_action設置爲ROTATE時要保存的日誌文件數目。必須是0~99之間的數。如果設置爲小於2,則不會循環日誌。如果遞增了日誌文件的數目,就可能有必要遞增/etc/audit/audit.rules中的內核backlog設置值,以便留出日誌循環的時間。如果沒有設置num_logs值,它就默認爲0,意味着從來不循環日誌文件。

     dispatcher

當啓動這個守護進程時,由審計守護進程自動啓動程序。所有守護進程都傳遞給這個程序。可以用它來進一步定製報表或者以與您的自定義分析程序兼容的不同格式產生它們。自定義程序的示例代碼可以在/usr/share/doc/audit- <version>/skeleton.c中找到。由於調度程序用根用戶特權運行,因此使用這個選項時要極其小心。這個選項不是必需的。

     disp_qos

控制調度程序與審計守護進程之間的通信類型。有效值爲lossy和lossless。如果設置爲lossy,若審計守護進程與調度程序之間的緩衝區已滿 (緩衝區爲128千字節),則發送給調度程序的引入事件會被丟棄。然而,只要log_format沒有設置爲nolog,事件就仍然會寫到磁盤中。如果設置爲lossless,則在向調度程序發送事件之前和將日誌寫到磁盤之前,調度程序會等待緩衝區有足夠的空間。

     max_log_file

以兆字節表示的最大日誌文件容量。當達到這個容量時,會執行max_log_file _action指定的動作。

     max_log_file_action

當達到max_log_file的日誌文件大小時採取的動作。值必須是IGNORE、SYSLOG、SUSPEND、ROTATE和KEEP_LOGS之一。如果設置爲IGNORE,則在日誌文件達到max_log_file後不採取動作。如果設置爲SYSLOG,則當達到文件容量時會向系統日誌/var /log/messages中寫入一條警告。如果設置爲SUSPEND,則當達到文件容量後不會向日志文件寫入審計消息。如果設置爲ROTATE,則當達到指定文件容量後會循環日誌文件,但是隻會保存一定數目的老文件,這個數目由num_logs參數指定。老文件的文件名將爲audit.log.N,其中 N是一個數字。這個數字越大,則文件越老。如果設置爲KEEP_LOGS,則會循環日誌文件,但是會忽略num_logs參數,因此不會刪除日誌文件。

     space_left

以兆字節表示的磁盤空間數量。當達到這個水平時,會採取space_left_action參數中的動作。

     space_left_action

當磁盤空間量達到space_left中的值時,採取這個動作。有效值爲IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和 HALT。如果設置爲IGNORE,則不採取動作。如果設置爲SYSLOG,則向系統日誌/var/log/messages寫一條警告消息。如果設置爲 EMAIL,則從action_mail_acct向這個地址發送一封電子郵件,並向/var/log/messages中寫一條警告消息。如果設置爲 SUSPEND,則不再向審計日誌文件中寫警告消息。如果設置爲SINGLE,則系統將在單用戶模式下。如果設置爲SALT,則系統會關閉。

     action_mail_acct

負責維護審計守護進程和日誌的管理員的電子郵件地址。如果地址沒有主機名,則假定主機名爲本地地址,比如root。必須安裝sendmail並配置爲向指定電子郵件地址發送電子郵件。

     admin_space_left

以兆字節表示的磁盤空間數量。用這個選項設置比space_left_action更多的主動性動作,以防萬一space_left_action沒有讓管理員釋放任何磁盤空間。這個值應小於space_left_action。如果達到這個水平,則會採取admin_space_left_ action所指定的動作。

     admin_space_left_action

當自由磁盤空間量達到admin_space_left指定的值時,則採取動作。有效值爲IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和HALT。與這些值關聯的動作與space_left_action中的相同。

     disk_full_action

如果含有這個審計文件的分區已滿,則採取這個動作。可能值爲IGNORE、SYSLOG、SUSPEND、SINGLE和HALT。與這些值關聯的動作與space_left _action中的相同。

  提示:

  如果不循環審計日誌文件,則含有/var/log/audit/的分區可能變滿並引起系統錯誤。因此,建議讓/var/log/audit/位於一個單獨的專用分區。

     disk_error_action

如果在寫審計日誌或循環日誌文件時檢測到錯誤時採取的動作。值必須是IGNORE、SYSLOG、SUSPEND、SINGLE和HALT之一。與這些值關的動作與space_left_action中的相同。

  /etc/sysconfig/auditd文件可以用來設置帶EXTRAOPTIONS參數的auditd的命令行選項。唯一的命令行選項-f以調試模式安排守護進程。如果啓用了調試模式,則會出現標準錯誤消息而不是日誌文件。AUDITD_LANG設置值可以用來修改守護進程的位置。如果設置爲 none,則所有位置信息會從審計環境中刪除。如果AUDITD_CLEAN _STOP選項設置爲yes,則當用service auditd stop命令停止守護進程時,會刪除審計規則與觀察器。要了解關於審計規則的更多信息,請參見下一節。

25.2  編寫審計規則與觀察器

  Linux Auditing System可以用來爲事件寫規則,比如系統調用,比如用auditctl命令行實用程序觀察文件或目錄上的操作。如果用初始化腳本啓動auditd(用 service auditd start命令),則規則和觀察器可以添加到/etc/audit/audit.rules中,以便在啓動守護進程時執行它們。只有根用戶可以讀或修改這個文件。

  /etc/audit.audit.rules中的每個規則和觀察器必須單獨在一行中,以#開頭的行會被忽略。規則和觀察器是auditctl命令行選項,前面沒有auditctl命令。它們從上到下閱讀文件。如果一個或多個規則或觀察器互相沖突,則使用找到的第一個。

25.2.1  編寫審計規則

  要添加審計規則,可在/etc/audit/audit.rules文件中用下面的語法:

     -a <list>,<action> <options>

  警告:

  如果在運行守護進程時添加規則/etc/audit/audit.rules,則一定要以根用戶身份用service auditd restart命令啓用修改。也可以使用service auditd reload命令,但是這種方法不會提供配置文件錯誤的消息。

  列表名必須是下列名稱之一。

     task

每個任務的列表。只有當創建任務時才使用。只有在創建時就已知的字段(比如UID)纔可以用在這個列表中。

     entry

    系統調用條目列表。當進入系統調用確定是否應創建審計時使用。

     exit

    系統調用退出列表。當退出系統調用以確定是否應創建審計時使用。

     user

用戶消息過濾器列表。內核在將用戶空間事件傳遞給審計守護進程之前使用這個列表過濾用戶空間事件。有效的字段只有uid、auid、gid和pid。

     exclude

事件類型排除過濾器列表。用於過濾管理員不想看到的事件。用msgtype字段指定您不想記錄到日誌中的消息。

  這個動作必須下面的動作之一:

     never

    不生成審計記錄。

     always

分配審計上下文,總是把它填充在系統調用條目中,總是在系統調用退出時寫一個審計記錄。

  <options>可以包括下面幾個選項中的一個或多個。

     -s <syscall>

根據名稱或數字指定一個系統。要指定所有系統調用,可使用all作爲系統調用名稱。如果程序使用了這個系統調用,則開始一個審計記錄。可以爲相同的規則指定多個系統調用,每個系統調用必須用-S啓動。在相同的規則中指定多個系統,而不是列出單獨的規則,這樣可以導致更好的性能,因爲只需要評價一個規則。

     - F <name[=,!=,<,>,<=]value>

指定一個規則字段。如果爲一個規則指定了多個字段,則只有所有字段都爲真才能啓動一個審計記錄。每個規則都必須用-F啓動,最多可以指定64個規則。如果用用戶名和組名作爲字段,而不是用UID和GID,則會將它們解析爲UID和GID以進行匹配。下面是有效的字段名:

         pid

      進程ID。

         ppid

      父進程的進程ID。

         uid

      用戶ID。

         euid

      有效用戶ID。

         suid

      設置用戶ID。

         fsuid

      文件系統用戶ID。

         gid

      組ID。

         egid

      有效組ID。

         sgid

      設置組ID。

         fsgid

      文件系統組ID。

         auid

      審計ID,或者用戶登錄時使用的原始ID。

         msgtype

      消息類型號。只應用在排除過濾器列表上。

         pers

      OS Personality Number。

         arch

系統調用的處理器體系結構。指定精確的體系結構,比如i686(可以通過uname -m命令檢索)或者指定b32來使用32位系統調用表,或指定b64來使用64位系統調用表。

         devmajor

      Device Major Number。

         devminor

      Device Minor Number。

 

         inode

      Inode Number。

         exit

      從系統調用中退出值。

         success

      系統調用的成功值。1表是真/是,0表示假/否。

         a0,a1,a2,a3

      分別表示系統調用的前4個參數。只能用數字值。

         key

設置用來標記事件的審計日誌事件消息的過濾鍵。參見程序清單25-2和程序清單25-3中的示例。當添加觀察器時,類似於使用-k選項。參見“編寫審計規則與觀察器”瞭解關於-k選項的詳細信息。

         obj_user

      資源的SELinux用戶。

         obj_role

      資源的SELinux角色。

         obj_type

      資源的SELinux類型。

         obj_lev_low

      資源的SELinux低級別。

         obj_lev_high

      資源的SELinux高級別。

         subj_role

      程序的SELinux角色。

         subj_type

      程序的SELinux類型。

         subj_sen

      程序的SELinux敏感性。

         subj_clr

      程序的SELinux安全級別(clearance)。

  -a選項向列表末尾添加規則。要向列表開頭添加規則,可用-A替換-a。刪除語法相同的規則,用-d替換-a。要刪除所有規則,可指定-D選項。程序清單25-2含有一些示例審計規則,比如/etc/audit/audit.rules。

  程序清單25-2  示例審計規則

     #Record all file opens from user 501

     #Use with caution since this can quickly

     #produce a large quantity of records

     -a exit,always -S open -F uid=501 -F key=501open

     #Record file permission changes

     -a entry,always -S chmod

  提示:

  如果安裝了audit程序包,則其他示例在/usr/share/doc/audit-<version>/目錄的*.rules文件中。

  當發生了定義的規則中的動作時,如果有一個規則在/etc/audit/auditd.conf中定義則它會通過調度程序發送,然後會有一條日誌消息寫到/var/log/audit/audit.log中。例如,程序清單25-3中含有程序清單25-2中的第一個規則的日誌項,日誌文件從用戶501 打開。這個規則包括一個過濾鍵,它出現在程序清單25-3中日誌項的末尾。

  程序清單25-3  示例審計規則日誌消息

     type=SYSCALL msg=audit(1168206647.422:5227): arch=c000003e syscall=2

     success=no exit=-2 a0=7fff37fc5a40 a1=0 a2=2aaaaaaab000 a3=0 items=1

     ppid=26640 pid=2716 auid=501 uid=501 gid=501 euid=501 suid=501 fsuid=501

     egid=501 sgid=501 fsgid=501 tty=pts5 comm="vim" exe="/usr/bin/vim"

     key="501open"

25.2.2  編寫審計觀察器

  Linux Auditing System也允許管理員觀察文件和目錄。如果一個觀察器放在一個文件或目錄上,則會記錄成功或失敗的動作,比如打開和執行文件或目錄。要添加觀察器,可使用-w選項,後面跟着一個要觀察的文件或目錄。

  警告:

  如果在守護進程運行時您添加了觀察器/etc/audit/audit.rules,則一定要以根用戶身份用service auditd restart命令啓用修改。也可以用service auditd reload命令,但是它不會通知您關於配置文件錯誤的消息。

  程序清單25-4中含有包括在/etc/audit/audit.rules文件中的示例規則。如果與-w結合起來使用-k <key>選項,則由觀察器產生的所有記錄會含有一個警報詞(限制爲31個字節),因此可以將該觀察器的記錄輕鬆地從日誌文件中過濾出來。要限制文件或目錄觀察器爲某些動作,可使用-p選項,後面跟着下面的選項中的一個或多個:r表示觀察讀動作,w表示觀察寫動作,x表示觀察執行動作,a表示在末尾添加動作。要刪除一個觀察器,可使用由後面跟着文件或目錄的-W選項。

  程序清單25-4  示例審計觀察器

     #Watch for changes to sysconfig files

     -w /etc/sysconfig -k SYSCONFIG

     #Watch for changes to audit config files

     -w /etc/audit/audit.rules -k AUDIT_RULES

     -w /etc/audit/auditd.conf -k AUDIT_CONF

     -w /var/log/audit/ -k LOG_AUDIT

     #Watch to see who tries to start the *** client

     -w /usr/bin/***c -k ***C -p x

     #Watch password files

     -w /etc/group -k PASSWD

     -w /etc/passwd -k PASSWD

     -w /etc/shadow -k PASSWD

  例如,程序清單25-4包括了關鍵過濾器PASSWD的口令文件上的一個觀察器。程序清單25-5含有刪除一個用戶後/var/log/audit /audit.log中的日誌項,它會修改正在觀察的這些口令文件。正如程序清單25-3中帶過濾鍵的規則的示例,這個鍵被添加到日誌項的末尾,因此可以輕鬆地將它從日誌項的其餘部分過濾出來。

  程序清單25-5  審計觀察器的示例日誌項

     type=SYSCALL msg=audit(1168227741.656:17915): arch=c000003e syscall=82

     success=yes exit=0 a0=7fff00975dd0 a1=60a700 a2=0 a3=22 items=5 ppid=26575

     pid=4147 auid=501 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0

     tty=pts4 comm="userdel" exe="/usr/sbin/userdel" key="PASSWD"

25.2.3  定製auditctl

  配置審計系統參數的命令行選項也能包括在/etc/audit/audit.rules中。表25-1列出了這些選項。

表25-1  配置審計系統參數的auditctl選項

選    項

說    明

-b <backlog>

允許的未完成審計緩衝區的最大數目。內核中的默認值爲64。如果緩衝區已滿,則內核引用通過-f選項設置的失敗標誌,以確定採取哪個動作

-e [0,1]

設置爲0禁用審計,或者設置爲1啓用審計。對於爲了故障檢修或其他目的而臨時禁用審計會很有用

-f [0,1,2]

設置用於通知內核如何處理關鍵錯誤(比如審計緩衝區已滿或者內核內存用完)的失敗標誌。有效值是0(沒有動作),1(用printk將消息記錄到/var/log/messages)和2(混亂)。默認值爲1,但是2更安全。

-r <rate>

以每秒鐘的消息條數爲單位的速率限制。如果設置爲0,則沒有限制。如果超出了速率限制,則內核會諮詢-f選項中的失敗標誌來確定採取哪個動作

-i

當從一個文件中讀取規則時忽略錯誤

  

  要驗證設置了這些選項,可用auditctl -s命令查看狀態。輸出類似下面這樣:

     AUDIT_STATUS: enabled=1 flag=1 pid=1954 rate_limit=0 backlog_limit=256

     lost=0 backlog=0

25.3  啓動和停止守護進程

  當配置守護進程和添加規則與觀察器時,可以以根用戶身份執行service auditd start命令啓動守護進程。要停止它,可使用service auditd stop命令。要使它自動在運行時啓動,則應作爲根用戶執行chkconfig auditd on命令。

  如果當您修改守護進程的配置時守護進程已經在運行,則應以根用戶身份執行service auditd restart命令啓用修改。要驗證規則與觀察器已經修改,應以根用戶身份執行auditctl -1命令列出所有活動的規則和觀察器。例如,程序清單25-6顯示了程序清單25-2和25-4中的規則和觀察器的auditctl -1輸出。

  25.4  分析記錄

  如果使用了auditd,則除非用/etc/audit/audtid.conf中的log_file參數修改了文件名,否則審計消息會寫到/var /log/audit.log中。日誌文件是文本文件,可以通過less實用程序或文本編輯器(比如Emacs或Vi)閱讀。消息的格式爲從內核中接收的格式,順序也是接收時的順序。aureport實用程序可以用來從日誌文件中生成彙總報表。ausearch實用程序可以用來基於一些條件搜索報表。這些條件可以是:審計事件ID、文件名、UID或GID、消息類型和系統調用名等。

  除非將守護進程配置爲循環日誌文件和像前面“配置審計守護進程”一節中介紹的那樣刪除老文件,否則/var/log/audit/中的日誌文件永遠不會被刪除。管理員應經常檢查日誌,刪除老日誌或者移到備份存儲器中。如果不週期性地刪除日誌,它們會填滿整個磁盤的。因爲這個原因,所以建議把/var /log/audit/放在一個單獨的專用分區上,這樣就不會影響寫其他日誌文件或者引起其他系統錯誤。

  提示:

  要強制立即循環日誌文件,可以以根用戶身份執行service auditd rotate命令。老日誌文件的文件名將爲audit.log.N,其中N是一個數字。這個數字越大,日誌文件越老。

25.4.1  生成報表

  要生成審計消息的報表,可使用aureport。爲了安全起見,/var/log/audit/目錄和其中的所有審計日誌文件只對根用戶可讀。因此,您必須作爲根用戶執行aureport命令。如果執行aureport時沒有使用任何選項,則會顯示程序清單25-7中所示的彙總報表。

  表25-2  生成特定報表的aureport選項

選    項

說    明

-a

報告關於訪問向量緩衝(access vector cache,AVC)的消息

-c

報告關於配置修改的消息

-cr

報告關於crypto事件的消息

-e

報告關於事件的消息

-f

報告關於文件的消息

-h

報告關於主機的消息

-l

報告關於登錄的消息

-m

報告關於賬戶修改的消息

-ma

報告關於Mandatory Access Control(MAC)事件的消息

-p

報告關於進程的消息

-s

報告關於系統調用的消息

-tm

報告關於終端的消息

  要以更可讀的格式產生結果,比如用它們映射到的用戶名替換UID,則也要使用-i選項:

     aureport -<flag> -i

  要顯示每個日誌的啓動和停止時間,可以添加-t選項:

     aureport -<flag> -i -t

  要顯示等於或早於特定時間的事件,可以添加-te選項,並在後面跟着結束日期和結束時間。用數字格式表示您所在地點的日期和時間,並以24小時制格式表示時間。例如,對於en_us.UTF-8這個地方,可使用日期格式MM/DD/YY:

     aureport -<flag> -i -te <end date> <end time>

  要顯示等於或者晚於特定時間的事件,添加-ts選項,後面跟着開始日期和時間。採用與-te選項相同的日期和時間格式化規則。

     aureport -<flag> -i -ts <start date> <start time>

  要僅顯示失敗事件,則使用- -failure,注意這個選項前面有兩條虛線而不是一條:

     aureport -<flag> -i --failed

  要僅顯示成功事件,則使用- -success,注意這個選項前面有兩條虛線而不是一條:

     aureport -<flag> -i --success

  有些報表也可以用- -summary選項以彙總格式生成;注意這個選項前面有兩條虛線作前綴:

     aureport -<flag> -i --summary

  要產生彙總報表而不是關於一個地區的報表,可使用-r選項:

     aureport -r -i

  要產生來自一個日誌文件的報表而不是默認報表,則可用-if選項指定它:

     aureport -<flag> -i -if /var/log/audit/audit.log.1

25.4.1  搜索記錄

  除了生成事件報表並用aureport彙總外,管理員也可以用ausearch搜索審計記錄。以根用戶身份執行ausearch命令,後面跟着表 25-3中的一個或多個選項。如果指定了多個選項,則顯示的結果會對兩個請求都匹配。要檢索匹配一個選項或另一個選項的條件,則執行兩次不同的搜索並親自組合結果。

25.5  用審計跟蹤進程

  autrace實用程序可以用來生成特定進程中的審計記錄。當autrace在運行時,沒有其他規則或觀察器可以啓用。對於其他審計實用程序,autrace必須以根用戶身份運行。要審計跟蹤一個進程,需採用下列步驟:

  (1) 暫時關閉所有規則與觀察器:

     auditctl -D

  (2) (可選)要把審計記錄從進程中隔離開,需強制一個日誌文件循環:

     service auditd rotate

  autrace的日誌將放在/var/log/audit/audit.log中。

  (3) 在命令行執行autrace:

     autrace <command to trace>

  (4) 等待直到進程完成。將顯示一條類似於下面這個消息:

     Trace complete. You can locate the records with 'ausearch -i -p 10773'

  (5) 重啓審計守護進程來重新啓用規則和觀察器:

     service auditd restart

  (6) 用ausearch顯示關於跟蹤的詳細信息。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章