天天看點

linux 審計--audit

一.audit介紹

audit是linux系統中用于記錄使用者底層調用情況的系統,如記錄使用者執行的open,exit等系統調用.

并會将記錄寫到日志檔案中.

audit可以通過使用auditctl指令來添加或删除audit規則.設定針對某個使用者進行記錄,或針對某個

程序的進行記錄. audit主要包含2個指令:

auditd       audit服務程序

auditctl     audit規則設定工具

二.audit的安裝

1.rpm包安裝

GTES10,10.5,11版本預設都已安裝audit包,可以直接使用.

2.源碼安裝

audit可以從源碼安裝.

源碼下載下傳位址:

http://people.redhat.com/sgrubb/audit/

安裝方法:

# tar zxf audit-1.6.2.tgz

# cd audit-1.6.2

# aclocal && autoconf && autoheader && automake

# ./configure --sbindir=/sbin --mandir=/usr/share/man --libdir=/lib

# make

# make install

三.audit相關工具介紹

1.auditd介紹

auditd是audit系統的使用者空間程式.主要作用是将audit記錄資訊寫到磁盤上.

audit在啟動時會讀取2個配置檔案:

/etc/audit/auditd.conf   audit配置檔案

/etc/audit/audit.rules   audit規則檔案

audit安裝後,會生成這2個檔案.

auditd使用方法:

auditd [ -f ]

 -f auditd在前台運作,調試時使用.

2.auditctl介紹

auditctl用于對kernel中的audit進行控制,可以用來擷取audit狀态和增删audit規則.

指令使用方法:

auditctl [options]

       -b <backlog>

 設定audit緩沖大小(預設為64).若緩沖占滿了,則kernel會發出一個失敗标記.

       -e [0|1]

 啟用/禁用audit稽核.

       -f [0..2]

 設定失敗标記的等級,有0,1,2三個值,0是不輸出日志,1為輸出printk日志,2為最進階,會大量輸出

 日志資訊.這個選項用于設定audit獲得錯誤的等級. 錯誤标記的觸發條件有:傳送錯誤到使用者空間

 audit 程序,未處理事務超出範圍,超出核心記憶體範圍,超出速率範圍.預設值為1.在安全環境下可以

 設定為2.

       -h

 幫助

       -i

 從檔案讀取audit規則時,忽略錯誤.

       -l

 顯示所有規則.

       -k <key>

 為一條audit規則設定一個關鍵字.關鍵字可以是31個位元組長的字元串.用于過濾audit記錄.

       -m text

 向audit系統發送一個資訊.隻限root使用者使用.

       -r <rate>

 設定每秒的資訊速率.如果實際資訊數量超過這個速率,則将産生一個失敗标記.

       -R <file>

 從一個檔案讀取規則.每行隻有一條規則.規則檔案的所屬使用者必須是root,并且其他使用者沒有

 讀取權限.檔案裡可以使用以#開頭的注釋行.

       -s

 輸出狀态資訊.

       -a <l,a>

 将規則添加到一個清單的結尾.l表示清單,a表示這個規則的動作.

 下面是可用的清單名稱:

  task 添加一條規則到每一個任務清單.這個規則清單隻在一個任務建立的時候使用

   (當父程序調用fork(),clone()時).  

  entry 添加一條規則到系統調用entry清單.

  exit 添加一條規則到系統調用exit表.

  user 添加一條到使用者資訊過濾表.在資訊被傳送到audit程序前,kernel使用這個清單在

   使用者空間過濾事件資訊,可以使用的字段有: uid,auid,gid,pid.

  exclude 添加一條規則到事件類型排除表.這個表用于過濾掉不希望顯示的資訊.

   如:不希望顯示任何avc的資訊,則在此清單中添加上它.

  下面介紹在規則中可以使用的動作(a):

  never 不産生audit記錄.

  always 配置設定一個audit上下文,将它添加到系統調用開始時,并在系統調用退出時,寫出

   一條記錄資訊.

       -A <l,a>

 添加一條規則到清單的開頭.

       -d <l,a>

 從清單中删除一條規則.

       -D

 删除所有規則.

       -S [Syscall name or number|all]

 可以使用系統調用名稱或數字.也可以使用all.也可以在一條規則中指定多個系統調用,以提升效率.

       -F [n=v | n!=v | n<v | n>v | n<=v | n>=v]

 建立規則字段: 名稱,操作,參數.一個指令行可以有64個字段,每個字段必須以-F開頭.每個字段将會

 觸發一個audit記錄.有=,!=,<,>,<=,>=運算符可以使用.

 可以使用的字段有:

              a0, a1, a2, a3

   4個數字參數用于表示系統調用.不可以使用字元串.

              arch

   系統調用的cpu架構.可以使用'uname -m'獲得這個值.若不清楚機器的架構,

   但需要使用32位系統調用表,而機器也支援32位,則仍可使用32位的系統調用表.

              auid

   使用者登入的id.

              b32

   cpu架構.64位系統可以使用b64.

              devmajor

   裝置的主号碼

              devminor

   裝置的從号碼

              egid

   組id

              euid

   使用者id

              exit

   系統調用的傳回值

              fsgid

   檔案系統組id

              fsuid

   檔案系統使用者id

              gid

   組id

              inode

   Indoe号

              key

   設定過濾關鍵字

              msgtype

   用于比對資訊類型碼.僅用于排除過濾表中.

              obj_user

   資源的SElinux的使用者

              obj_role

   資源的SElinux的角色

              obj_type

   資源的SElinux的類型

              obj_lev_low

   資源的SElinux的低層

              obj_lev_high

   資源的SElinux的高層

              path

   被監視的檔案的全路徑.僅用于exit表.

              pers

   作業系統的編碼

              pid

   程序id

              ppid

   程序的父id

              subj_user

   程式的SElinux的使用者

              subj_role

   程式的SElinux的角色

              subj_type

   程式的SElinux的類型

              subj_sen

   程式的SElinux的敏感度

              subj_clr

   程式的SElinux的清除率

              sgid

   sgid位

              success

   如果傳回值>=0,則為true或yes,否則為false/no.

   編寫規則時,使用1代表true/yes,使用0代表false/no.

              suid

   suid位

              uid

   使用者id

       -w <path>

   在指定路徑插入一個記錄器,不可以是最上層目錄,這是kernel所禁止的.并且不可以使用

   通配符.記錄器會記錄inode内部的操作過程.如果在一個目錄中放置一個記錄器,會記錄到

   各種檔案事件.但是,那隻是修改了中繼資料.這可能會丢失一小部分事件.如果需要監視目錄

   中的所有檔案,建議為每個檔案放置一個記錄器.記錄器不同于audit規則,對性能沒有影響.

       -W <path>

   從指定路徑中移出一個記錄器.

四.audit示例

# ps -ef | grep audit

若系統尚未啟動audit,手動啟動audit.

# auditd

現在添加audit規則:

先檢視audit運作狀态

# auditctl -s

AUDIT_STATUS: enabled=1 flag=1 pid=1585 rate_limit=0 backlog_limit=256 lost=0 backlog=0

檢視已有的audit規則

# auditctl -l

No rules

添加一條audit規則,記錄maj使用者的所用open系統調用

# auditctl -a entry,always -S open -F uid=500

在另一個終端以maj使用者登入,登入後執行一個ls指令即可.

删除這條audit規則

# auditctl -d entry,always -S open -F uid=500

檢視audit日志,裡面有下面類似内容:

type=SYSCALL msg=audit(1192418517.442:12): arch=40000003 syscall=5 success=yes exit=3 a0=3fc3b7 a1=0 a2=ffffffff a3=0 items=1

pid=31832 auid=4294967295 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 comm="ls" exe="/bin/ls"

type=CWD msg=audit(1192418517.442:12):  cwd="/home/maj"

type=PATH msg=audit(1192418517.442:12): name="/etc/ld.so.cache" flags=101  inode=4674033 dev=03:05 mode=0100644 ouid=0 ogid=500

rdev=00:00