審計工具lynis介紹
1.介紹
lynis 是一款開源的unix-based平臺的審計工具。可以幫助審計員掃描unix系統以及可用的軟件。程序主要探測,系統上安裝的程序包,配置上的錯誤,以及安全問題和系統信息。
</blockquote>官方地址http://www.rootkit.nl/projects/lynis.html
程序完全用shell 腳本編寫,下載之后就可直接運行,需要root權限,并讀寫目錄/var/log/ and /tmp。 執行./lynis –c 可開始掃描任務。程序會運行多個子腳本來進行不同類型的審計檢測,最后把結果輸出到report文件中。
</blockquote>2.使用說明
通過 –profile 可以指定掃描使用的配置,默認使用的是程序目錄下的default.prf文件,用戶可以復制此文件后自己編輯自己的任務配置文件。
其中可以配置任務相關的參數例如:ssl證書的搜尋目錄 ssl:certificates:/etc/ssl /var/www: 。 略過某個檢查項,
config:test_skip_always:AAAA-1234 BBBB-5678 CCCC-9012: 。
lynis通過循環運行include目錄下的各個腳本來執行不同類型的掃描任務,把初步結果輸出到屏幕上,每運行一個腳本都需要人工干預是否繼續。
</blockquote>程序會把每一項的檢查結果實時輸出到屏幕,給出ok或warning的提示。更加詳細的信息可以參照日志文件。
</blockquote>3.代碼學習
1.主函數初始化工作
</blockquote>主程序運行后,會初始化一些 常用的變量
![]()
![]()
然后 會判斷掃描腳本目錄include和用戶自定義插件目錄plugin是否存在.
![]()
調用include下的consts,和functions腳本進行常用變量的設置和函數聲明。
![]()
調用trap 命令 攔截INT信號,maid函數做程序結束的清除工作。
![]()
使用umask 保證生成的文件的權限的安全。
![]()
. ${INCLUDEDIR}/parameters
調用include 下面的parameters腳本進行命令行參數的讀取。
![]()
shift命令: 移動參數位置,丟棄第一個參數。
同時還用到了:
case $變量 in
比配字符)
語句;
;;
*)
;;
</blockquote>調用function腳本里的checkupdate函數進行版本檢測
![]()
使用了dig命令查詢dns服務,將最新的版本號放在dns服務的描述里面。
</blockquote>調用 id –u 保證程序以userid為0的超級用戶權限運行。
</blockquote>
![]()
在/var/run 目錄下面創建pid文件, 并且之前判斷文件是否存在保證程序實例的唯一。
</blockquote>
2.檢測系統的功能腳本
1. 系統類型檢測
調用uname 獲取系統類型名。如果是linux 則調用uname –r 獲取內核版本。如果是ubuntu 使用命令
grep "^DISTRIB_ID=" /etc/lsb-release | cut -d '=' –f2 獲取系統名字。 f2 代表=分割后的第二個參數。
2.檢測系統的二進制可執行文件
在/bin /sbin /usr/bin 等路勁下查找常見的程序。
</blockquote>
確定常見程序是否存在和其安裝的目錄
3.最后循環執行include目錄下的以test開頭的檢測腳本
![]()
為了去除if語句 分支過多帶來的代碼雜亂,在每個程序邏輯前調用Register 函數檢查隨后的程序邏輯是否需要執行。
例如程序邏輯的檢查編號是否在屏蔽列表中,系統類型是否滿足,等。
![]()
腳本tests_accounting 檢測不同系統下auditd審計工具的開啟狀態。
腳本tests_authentication 檢測用戶信息和認證。檢測超級用戶的個數,調用chkgrp進行檢查
</blockquote>從passwd中檢索出系統的所有用戶和用戶id : awk -F: '($3 > 500) && ($3 != 65534) || ($3 == 0) { print $1","$3 }' /etc/passwd
從/etc/group中檢測是否存在重復的用戶組 cat /etc/group | grep -v '^#' | grep -v '^$' | awk -F: '{ print $3 }' | sort | uniq –d
調用pwck檢測密碼文件的數據完整性: /usr/sbin/pwck -q –r
腳本tests_banner 檢測含有系統banner的文件是否存在,如/etc/issue 中保存了系統的版本信息。
腳本tests_boot_services 檢測系統啟動時運行的腳本,首先是grub boot loader文件/boot/grub/grub.conf 和grub.cfg, ubuntu 的話可以檢測 /etc/rc2.d文件,檢測文件/etc/init.d,/etc/rc /etc/rc.local /etc/rc.d/rc.sysinit
腳本tests_crypto 檢測過期的ssl證書
腳本tests_database : 首先檢測是否有mysql進程存在,檢測mysql 數據庫是否設置密碼${MYSQLCLIENTBINARY} -u root --password= --silent --batch --execute=""
腳本test_file_integrity 檢測是否安裝文件完整性檢測工具,例如tripwire
腳本tests_file_permission 檢測root/.ssh 文件的權限設置
腳本tests_filesystem :檢測/tmp 目錄和/home 目錄是否掛載在一個掛載點, 檢測文件系統類型(ext2,3,4),
腳本tests_firewall : 檢測iptable的開啟狀態和規則設置</span>