理解Linux Audit Service.

1、概述

    Linux audit經過分析系統上正在發生的細節信息,可以有效幫助您提升系統的安全。可是,它自己不提供額外的安全性保障----它不會保護你的系統免受代碼故障或者任何類型的漏洞攻擊。Audit服務對跟蹤這些安全問題很是有用,而且有效幫助咱們採起何種針對性的安全措施。html

    Audit由幾個組件組成,每一個組件都爲整個框架提供重要功能。Linux audit(kauditd) 內核模塊攔截系統調用並記錄相關事件。 auditd守護進程將審計報告寫入磁盤。各類命令行實用程序負責顯示,查詢和存檔審計跟蹤。node

1. 將用戶與進程關聯linux

    Audit將進程映射到啓動它們的用戶標識。這使得管理員或安全人員可以精確地跟蹤哪一個用戶擁有哪一個進程而且可能在系統上進行惡意操做。git

2. 審查審計線索github

    Linux Audit 提供了將審計報告寫入磁盤並將其轉​​換爲可讀格式的工具。緩存

3. 審查特定的審計事件安全

    Audit提供了一個實用程序,容許您篩選特定感興趣事件的審計報告。你能夠根據下面的內容過濾:session

  • User架構

  • Group併發

  • Audit ID

  • Remote Host Name

  • Remote Host Address

  • System Call

  • System Call Arguments

  • File

  • File Operations

  • Success or Failure 

4. 應用選擇性審計

    Audit提供了篩選感興趣事件的審計報告並調整審計以僅記錄所選事件的手段。您能夠建立本身的一組規則,並讓審計守護進程僅記錄您感興趣的規則。

5. 保證報告數據的可用性

    審計報告由root擁有,所以只能由root用戶移除。未經受權的用戶不能刪除審計日誌。

6. 防止審計數據丟失

    若是內核內存不足,審計守護進程的積壓被超過,或者超過了速率限制,審計能夠觸發系統關閉,以防止事件逃離審計的控制。此關閉將當即中止由審覈內核組件觸發的系統,而不會將最新日誌同步到磁盤。默認配置是將警告記錄到系統日誌中,而不是掛起系統。

    若是系統在記錄時磁盤空間不足,則能夠將審計系統配置爲執行乾淨關閉。缺省配置指示審計守護程序在磁盤空間不足時中止記錄。

2、Linux Audit Service 架構

                                                                                                                    (Linux Audit framwork)

(1)組件

1.auditd
審計守護進程負責將經過審計內核接口生成並由應用程序和系統活動觸發的審計消息寫入磁盤。審計守護進程啓動的方式由systemd控制。審計系統功能(啓動時)由/etc/audit/auditd.conf控制。

2.auditctl
auditctl實用程序控制審計系統。它控制審計界面的日誌生成參數和內核設置,以及肯定哪些事件被跟蹤的規則集。

3. audit rules
文件/etc/audit/audit.rules包含一系列auditctl命令,它們在啓動審計守護程序後當即在系統引導時加載。

4. aureport
aureport實用程序容許您從審覈事件日誌中建立自定義報告。這種報告生成能夠很容易地編寫腳本,輸出能夠被各類其餘應用程序使用,例如,繪製這些結果。

5. ausearch
ausearch實用程序可使用各類密鑰或記錄格式的其餘特徵在審計日誌文件中搜索某些事件。

6.audispd
審計調度程序守護進程(audispd)可用於將事件通知轉發給其餘應用程序,而不是將它們寫入審計日誌中的磁盤(或除此以外)。

7.autrace
autrace實用程序以與strace相似的方式跟蹤各個進程。 autrace的輸出被記錄到審計日誌中。打印上次登陸用戶的列表,與上次相似。 aulast經過審計日誌(或給定的審計日誌文件)進行搜索,並根據審計日誌中的時間範圍顯示全部用戶登陸和註銷的列表。

8.aulastlog
爲相似於lastlog的機器的全部用戶打印上次登陸。登陸名稱,端口和上次登陸時間將被打印。

(2) Audit 進程的配置 

Audit進程的配置文件是保存在/etc/audit/auditd.conf裏的。

log_file = /var/log/audit/audit.log log_format = RAW log_group = root priority_boost = 4 flush = INCREMENTAL freq = 20 num_logs = 5 disp_qos = lossy dispatcher = /sbin/audispd name_format = NONE ##name = mydomain max_log_file = 6 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 ##tcp_listen_port = tcp_listen_queue = 5 tcp_max_per_addr = 1 ##tcp_client_ports = 1024-65535 tcp_client_max_idle = 0 cp_client_max_idle = 0

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

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

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

4. flush
多長時間向日志文件中寫一次數據。值能夠是NONE、INCREMENTAL、DATA和SYNC之一。若是設置爲NONE,則不須要作特殊努力來將數據刷新到日誌文件中。若是設置爲INCREMENTAL,則用freq選項的值肯定多長時間發生一次向磁盤的刷新。若是設置爲DATA,則審計數據和日誌文件一直是同步的。若是設置爲SYNC,則每次寫到日誌文件時,數據和元數據是同步的。

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

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

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

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

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

10. 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參數,所以不會刪除日誌文件。

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

12. 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,則系統會關閉。

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

14. admin_space_left
以兆字節表示的磁盤空間數量。用這個選項設置比space_left_action更多的主動性動做,以防萬一space_left_action沒有讓管理員釋聽任何磁盤空間。這個值應小於space_left_action。若是達到這個水平,則會採起admin_space_left_action所指定的動做。

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

16. disk_full_action
若是含有這個審計文件的分區已滿,則採起這個動做。可能值爲IGNORE、SYSLOG、SUSPEND、SINGLE和HALT。與這些值關聯的動做與space_left_action中的相同。
提示:
若是不循環審計日誌文件,則含有/var/log/audit/的分區可能變滿並引發系統錯誤。所以,建議讓/var/log/audit/位於一個單獨的專用分區。

17. 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命令中止守護進程時,會刪除審計規則與觀察器。

18. tcp_listen_port
指定Audit進程監聽的端口區間(1~65535)

19. tcp_listen_queue
設置暫時掛起鏈接的最大值,不要設置過小的值,由於在某些狀況下,例如斷電後,掛起鏈接的數量可能會很高。

20. tcp_client_ports
設置容許的客戶端端口號範圍。

21. tcp_client_max_idle
指定客戶端最大掛起次數在必定的時間內。

22. tcp_max_per_addr
表示容許來自一個IP地址的併發鏈接數的數值。

(3)Audit系統的控制命令

1. auditctl
「auditctl -e」 控制Audit功能的開關
「auditctl -f」 設置錯誤級別[0..2] 0=silent, 1=printk, 2=panic
「auditctl -r」 控制Audit消息的速率
「auditctl -b」 設置Audit服務的最大緩存空間,若是緩存空間滿了,指定的錯誤級別動做會被觸發。
「auditctl -s」 查看Audit進程當前的狀態
AUDIT_STATUS: enabled=1 flag=2 pid=3105 rate_limit=0 backlog_limit=8192 lost=0(丟失的Audit消息數) backlog=0(未輸出的Audit緩衝區大小)

2. audit rules
要添加審計規則,可在/etc/audit/audit.rules文件中用下面的語法:
-a <list>,<action> <options>

 

audit rule 規則定義在auditctl(8)中。

如:
添加一條audit規則,記錄maj用戶的所用open系統調用
#auditctl-a entry,always -S open -F uid=500
open表示:要查看某一特定用戶打開的文件
在另外一個終端以maj用戶登陸,登陸後執行一個ls命令便可

刪除這條audit規則
#auditctl-d entry,always -S open -F uid=500

如不想看到用戶登錄類型的消息,能夠以下添加規則:
#auditctl -a exclude,always -F msgtype=USER_LOGIN
這裏過濾是以「消息類型」爲對象的。

監視/etc/passwd文件被讀、寫、執行、修改文件屬性的操做記錄
#auditctl -w /etc/passwd -p rwax

查看程序全部的系統調用
#auditctl -a entry,always-S all -F pid=1005

查看指定用戶打開的文件
#auditctl -a exit,always-S open -F auid=510

查看不成功的open系統調用
auditctl-a exit,always -S open -F success!=0

(4) Audit log

type=SYSCALL msg=audit(1234874638.599:5207): arch=c000003e syscall=2 success=yes exit=4 a0=62fb60 a1=0 a2=31 a3=0 items=1 ppid=25400 pid =25616 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1164 comm="less" exe="/usr/bin/less" key="doc_log" type=CWD msg=audit(1234874638.599:5207):  cwd="/root" type=PATH msg=audit(1234874638.599:5207): item=0 name="/var/log/audit/audit.log" inode=1219041 dev=08:06 mode=0100644 ouid=0 ogid=0 rdev=00:00

type: audit消息類型, 消息類型有100多種,能夠查看https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sec-audit_record_types
msg: 消息的ID, 它有兩個部分組成, 分號以前的是Unix的時間戳,分號以後的是真正的event ID, 同一個應用程序的相同system call擁有相同的event ID, 同一個應用的不一樣system call則不一樣。
arch: 調用system call的CPU構架, 能夠經過ausearch -i來指定搜索相關的log。
syscall: system call的類型, 能夠查看https://github.com/torvalds/linux/blob/master/arch/sh/include/asm/unistd.h。
success: system call是成功或者失敗。
exit: system call的返回值。
a0 to a3: 系統調用的前四個參數的數字化,能夠經過ausearch解碼查看。
items: 傳遞到應用程序的字符串數量。
ppid: 父進程的PID。
pid: 該進程的PID。
auid: audit ID, 針對某一用戶一個進程會被分配一個audit ID, 該audit ID會被傳遞給子進程,儘管在系統中用戶切換,該audit ID將始終保持一致。 這樣咱們能夠針對對某一用戶進行trace。
uid: user ID。
gid: group ID。
euid, suid, fsuid: Effective user ID, set user ID, and file system user ID.
egid, sgid, fsgid: Effective group ID, set group ID, and file system group ID.
tty: 應用程序開啓的終端,這種狀況下pseudo-terminal used in an SSH session.
ses: 用戶登陸的session ID.
comm: 出如今任務列表中,應用程序的名稱。
exe: 二進制程序的解析路徑。
subj: 進程執行時selinux上下文
key: 若是audit了不少的目錄文件,分配一個key string方便後面咱們經過ausearch去過濾這類log。
cwd: 進程的執行目錄.
另外一種audit log格式:
inode: 指出了與文件或目錄相對應的inode number,能夠經過下面的命令查看inode對應的文件或目錄:find/ -inum <inode number> -print.
dev: 指出文件或目錄對應的device ID,在例子中,對應/dev/fd/0這個設備.
mode: 對應文件或目錄的權限,這裏0100600被解析爲-rw-------.
ouid: 對應文件的owner’s user ID.
ogid: 對應文件的owner’s group ID.

限於篇幅,下一篇將列出有用的audit log查看的查看和跟蹤命令---(Linux audit log分析工具---aureport、ausearch、autrace)。

相關文章
相關標籤/搜索