為了滿足這樣的需求:記錄檔案變化、記錄使用者對檔案的讀寫,甚至記錄系統調用,檔案變化通知。
什麼是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的各個組成之間是如何
互相作用的:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuEzX5gDO2AjN5IzLcJjM0EzLcFDMvw1MxAjMvw1ZtlEZh9Gbud3bE9CXt92YuM2bkBjNz4CO1U2Zh1Wavw1LcpDc0RHaiojIsJye.gif)
圖檔上實線代表資料流,虛線代表元件關之間的控制系
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分析程序