linux的審計功能(audit)


為了滿足這樣的需求:記錄文件變化、記錄用戶對文件的讀寫,甚至記錄系統調用,文件變化通知。
什么是audit
The Linux Audit Subsystem is a system to Collect information regarding events occurring on the system(s)
Kernel events (syscall events)
User events (audit-enabled programs)
syslog會記錄系統狀態(硬件警告、軟件的log), 但syslog屬於應用層, log歸咎與軟件, 並不會記錄所有動作. 於是audit來記錄更多信息。

audit命令
auditctl audit系統管理工具,用來獲取狀態,增加刪除監控規則。
ausearch 查詢audit log工具
aureport 輸出audit系統報告


auditctl示例
auditctl -w /etc/passwd -p war -k password_file
auditctl -w /tmp -p e -k webserver_watch_tmp
-w 監控文件路徑 /etc/passwd,
-p 監控文件篩選 r(讀) w(寫) x(執行) a(屬性改變)
-k 篩選字符串,用於查詢監控日志
auditctl -a exit,never -S mount
auditctl -a entry,always -S all -F pid=1005
-S 監控系統調用
-F 給出更多監控條件(pid/path/egid/euid等)


日志查詢
設置了監控后,會在/var/log/audit/audit.log里出現日志。
可以用此命令查看日志:
ausearch -f /etc/passwd -x rm
-k 利用auditctl指定的key查詢
-x 執行程序
# ausearch -ts today -k password-file
# ausearch -ts 3/12/07 -k password-file
-ts 指定時間后的log (start time)
-te 指定時間前的log (end time)


audit庫
libaudit和libaudit-python
不過完全找不到文檔。我也覺得這個東西用得上的時候不多。除非.....


PART TWO

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 VPN client
-w /usr/bin/vpnc -k VPNC -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顯示關於跟蹤的詳細信息。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

很久沒寫kidlinux了,今天的高度高點吧,呵呵。
最近公司在做基於我們自己RBA框架的審計,為了對這個東西做測試,寫圖形界面吃盡了苦頭,這個東西剛搞完又得過國家認證,最近很是緊張了一把。
網上關於審計的資料太少了,有也是高深的不適合我們低級程序員閱讀的。本着我為人人人人為我的精神,特擬此文。

審計(audit)是linux安全體系的重要組成部分,他是一種“被動”的防御體系。在內核里有內核審計模塊,核外有核外的審計后台進程auditd。
應用程序給內核發送審計消息,內核的審計模塊再把消息轉發給用戶空間的后台進程auditd處理。大概就是這么回事,我不是太深入,如果需要更多的內容,自己去查閱相關資料。如果沒有好的資料,我推薦一本,《linux安全體系分析與編程》作者倪繼利 。這里是CSDN上該書的電子版

審計說穿了就是把和系統安全有關的事件記錄下來:誰誰誰在什么時候做了什么事,結果是啥。

審計的消息來源主要有兩方面:1.內核(我不太確定)、應用程序(audit-libs-devel包里面有編程接口)產生的。2.系統管理員添加的審計規則,匹配規則的事件都將被記錄下來。

規則添加:
1 添加文件監視:
該規則能監視文件被讀、寫、執行、修改文件屬性的操作,並記錄
auditctl -w /etc/passwd -p rwax
上述命令記錄/etc/passwd 被讀、寫、執行修改屬性的操作
2 系統調用入口監視(entry鏈表)
該規則在進入系統調用的時候觸發,記錄此時的執行上下文
auditctl -a entry,always -F UID=root -S mkdir
上述命令記錄uid為root的用戶調用mkdir系統調用的情況
3 系統調用出口(exit鏈表)
同系統調用入口規則,不同的是在退出系統調用的時候被觸發
4 任務規則(task表)
該規則在調用fork() 或者clone()產生新進程的時候觸發,因此,該規則適用的“域”僅僅是此時可見的,例如uid gid pid 等等。(參見man auditctl和這里
auditctl -a task,always -F uid=root

5 可信應用程序規則(user表)
按照各種資料上的說法,這里的user表是用來過濾消息的,內核傳遞給審計后台進程之前先查詢這個表。
但是,不管怎么設置規則都達不到這個效果。如下:
auditctl -a user,always -F uid=root
添加上述規則,發現root的行為被記錄。這樣添加規則還是被記錄:
auditctl -a user,never -F uid=root
后來發現我的CentOS里面system-config-audit上面,該鏈表被命名為“可信應用程序”。受此啟發寫了個小程序,向審計內核里寫消息,發現這樣的消息被過濾了。
這點需要進一步驗證。

6 過濾規則(exclude表)
這個表是用來過濾消息的,也就是不想看到的消息可以在這里寫規則進行過濾。
例如:不想看到用戶登陸類型的消息,可以如下添加規則:
auditctl -a exclude,always -F msgtype=USER_LOGIN
這里過濾是以“消息類型”為對象的。

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面的圖片說明了Linux Audit的各個組成之間是如何

相互作用的:



圖片上實線代表數據流,虛線代表組件關之間的控制系

auditd

Audit 守護進程負負責把內核產生的信息寫入到硬盤上,這些信息是由應用程序和系統活動所觸發產生的。Audit守護進程如何啟動取決於它的配置文件,/etc /sysconfig/auditd。Audit系統函數的啟動受文件/etc/audit/auditd.conf的控制。有關auditd更多的信息參照第三節:配置Audit守護進程。

auditctl

auditctl功能用來控制Audit系統,它控制着生成日志的各種變量,以及內核審計的各種接口,還有決定跟蹤哪些事件的規則。關於auditctl的更多信息參照第四節:用auditctl控制Audit系統。

audit rules

在/etc/audit/audit.rules中包含了一連串auditctl命令,這些命令在audit系統被啟用的時候被立即加載。更所關於審計規則的信息請參看第五節:給audit系統傳遞變量

aureport

aureport的功能是能夠從審計日志里面提取並產生一個個性化的報告,這些日志報告很容易被腳本化,並能應用於各種應用程序之中,如去描述結果,更多信息參看第六節:理解審計日志和生成審計報告

ausearch

這個功能能讓我們從審計日志之中通過關鍵詞或者是格式化錄入日志中的其它特征變量查詢我們想要看到的信息。詳細信息請參看第七節:用ausearch查詢audit守護進程的的日志。

audispd

這是一個審計調度進程,它可以為將審計的信息轉發給其它應用程序,而不是只能將審計日志寫入硬盤上的審計日志文件之中。

autrace

這個功能更總類似於strace,跟蹤某一個進程,並將跟蹤的結果寫入日志文件之中。更多詳細信息請參看第八節:用autrace分析進程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM