一、說明
本篇文章主要想說一說我對入侵防范測評項的理解(對于centos系統而言),如果大家有其他的看法或者思路也可以在回復中提出,我也跟著學習學習。
二、測評項
這3個測評項的內容如下:
a) 應遵循最小安裝的原則,僅安裝需要的組件和應用程序;
b) 應關閉不需要的系統服務、默認共享和高危端口;
c) 應通過設定終端接入方式或網絡地址范圍對通過網絡進行管理的管理終端進行限制;
這3個測評項都是跟業務緊密相關的,往往沒有一個固定的標準答案,需要根據實際情況作出判斷。
三、測評項a
a) 應遵循最小安裝的原則,僅安裝需要的組件和應用程序;
如果純粹用這個測評項的要求去檢測,我個人感覺無從下手。
查詢linux中安裝的程序,一般使用yum list installed或者rpm -qa,關鍵是linux中隨隨便便都安裝得有幾百個組件,而且很多組件都是存在著依賴關系。
你很難或者至少很難快速的判斷某組件到底是必需的還是非必需的,而被測評單位方的人也一樣,他也不可能知道。
所以,我一般只能由b測評項的結果來推斷a測評項了。
四、 測評項b
b) 應關閉不需要的系統服務、默認共享和高危端口;
4.1. 關系
對于組件、服務、進程、端口而言,它們之間是存在著關系的:安裝程序–>啟動相關服務–>啟動相關進程–>監聽相關端口
而且,一個程序(組件)可能有數個服務,而一個服務也可能實際啟動了數個進程,當然一個進程應該就對應一個端口。
比如nfs-utils組件,它就包含nfs和nfslock兩個服務,而nfs服務,就可以啟動數個進程:
[root@centos01 ~]# /etc/init.d/nfs status
rpc.svcgssd 已停
rpc.mountd 已停
nfsd 已停
rpc.rquotad 已停
4.2. 查看端口
一般我們使用netstat –ap或者netstat -anp查看系統中監聽的端口以及對應的進程:
netstat -apActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name TCP 0 0 localhost:smux 0.0.0.0:* LISTEN 11884/snmpd tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:SSH 0.0.0.0:* LISTEN 5031/sshd tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 1086/master ……netstat -apnActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:199 0.0.0.0:* LISTEN 11884/snmpd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5031/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1086/master ……
如果命令參數中不使用n,那么結果中有些本地端口就不會顯示出數字值,而是從/etc/services文件中,查找這個端口的數字值所在行,獲取端口的名字:
最左邊的一欄即為端口的名字。
雖然0到1023端口是周知端口,也即大家公認的每個端口都有固定所代表的內容,比如21端口是FTP端口,一般也不會有其他的某個進程也將自己的端口設置為21端口。
所以只要你看到端口值是21端口,那么你幾乎就可以認定這是ftp進程在監聽的端口。
但是這不是百分之一百的,說不準就有一些程序的進程監聽的是動態端口,一不小心就把0到1023的某個端口給占用了。
所以最準確的判斷方法是看端口的數值以及監聽該端口的進程名,比如:
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1086/master
端口值是25,監聽該端口的進程是master。
如果還搞不懂,可以使用ps -ef顯示所運行的所有進程,再查看要這個進程的具體信息。
好,這些方法足夠讓你判斷出開啟的端口都大概都是些什么端口了。
4.3. 判斷端口
一般服務器上監聽的端口很多,你得了解一些常用的端口,比如80端口,以及常見的中間件的端口,比如tomcat默認端口是8080。
以及常見的數據庫的端口,比如Oracle默認是1521,MySQL默認是3306。
以及一些常見服務的端口或經常,比如ftp是21、ssh是22、telnet是23、郵件服務是25、rpcbind是111、rpc.statd是動態端口(所以這里要用進程來判斷)、打印服務(cups)端口是631等。
所以從服務下手的話,比如不使用ftp,那么21就是多余端口。不用郵件服務,25就是多余端口,rpc.statd和nfs有關,不用nfs的話,那么rpc.statd監聽的動態端口也是多余端口,以此類推。
多余端口就應該關閉,可以關閉相對應的服務或者卸載相對應的組件,也可以用Iptables或者Firewall進行攔截。
至于高危端口,實際上某種意義上所有端口都是高危端口,反正只要你監聽了,都有可能被入侵。
所以對于必須要使用的端口,比如22端口,最好的就是限制連接這個端口的ip,其次,就是修改默認端口。
當然,由于業務需要,不一定可以修改端口的數值和限制連接這個端口的ip,這個看自己怎么把握了。
4.4. 最小化安裝
檢查完測評項b,如果發現沒有啥多余端口,那么就可以認定測評項a至少是部分符合,至于具體怎么打分,自己把握吧……
至于為什么這么說,因為在等級保護試行2.0的測評要求里是這么說的:
這里說的是安裝了非必要組件后關閉了也可以,不過等級保護正式版2.0又變回來了:
說實話,我沒搞明白,這是否遵循最小安裝原則和是否未安裝非必要的組件和應用程序,難道說的不是一回事嗎?
所以,我覺得還是等級保護試行2.0說得更有道理一些。
五、測評項c
c) 應通過設定終端接入方式或網絡地址范圍對通過網絡進行管理的管理終端進行限制;
對于centos而言,就是限制ssh端口的連接ip,在主機層面,一般可以用Iptables(centos6)、Firewall(centos7)這兩防火墻實現,也可以用hosts.allow和hosts.deny配置文件實現,還可以用/etc/ssh/sshd_config配置文件實現。
不過在實際測評當中可能會遇到的一種情況:
就是被測評服務器開著ssh端口,也沒有對這個端口的連接ip進行任何限制。但這個服務器所在網絡是內網,且沒有wifi,想要實現遠程管理這個服務器,需要你自己帶著電腦跑去機房插網線才行。
這種我覺得肯定不能算不符合,至少也有個3、4分吧,甚至我覺得打5分估計也沒啥問題,不知大家怎么看。
5.1. 防火墻
centos6只有iptables,而centos7既可以用iptables也可以用Firewall。
對于iptables,強烈建議大家看看這位博主寫的教程:http://www.zsythink.net/archives/1199
我一開始接觸iptables時就被弄暈了,chain、table到底是個啥玩意?后來看了這篇教程才明白的。
至于Firewall,這里就簡單的說一下。
簡單的來說,可以用Firewall設定多個zone(區域),每個zone都有自己的過濾規則,然后每當有請求進來之時,根據zone中設置的source(源ip地址)、zone中綁定的interface(請求的網卡)來判斷由使用哪個zone的規則,如果通過source和interface沒有匹配到任何一個zone,則使用firewalld.conf中配置的默認zone。
從優先級而言是:source、interface、默認zone
所以,一個源(或重疊的源)不能被分配到多個區域。這樣做的結果是產生一個未定義的行為,因為不清楚應該將哪些規則應用于該源。
同樣,一個網卡也只能分配到一個zone中。
我們可以用如下命令,查看所有的zone(如果沒有自己設置zone,那么應該只存在系統預設的zone):
firewall-cmd —list–all-zones
block
target: %%REJECT%%
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
drop
target: DROP
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
external
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh mdns samba-client dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
internal
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh mdns samba-client dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (active)
target: default
icmp-block-inversion: no
interfaces: em1
sources:
services: ssh dhcpv6-client
ports: 39289/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
work
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
注意看,里面只有pulic這個zone的interfaces綁定了網卡,所以也只有這一個區域是活動的(active)。
對于里面各個參數所代表的意義,大家可以在網上搜索搜索就知道了。
5.2. hosts.allow和hosts.deny
5.2.1. 前置條件
通過這兩個配置文件進行限制,需要條件, hosts.allow文件的注釋內容如下:
#hosts.allow This file contains access rules which are used to#allow or deny connections to network services that#either use the tcp_Wrappers library or that have been#started through a tcp_wrappers-enabled xinetd.
也就是說:
此文件包含用于允許或拒絕與以下網絡服務的連接:
1.使用了tcp包裝庫
2.或者通過啟用了TCP_wrappers的xinetd啟動。
不是任何服務程序都能使用TCP_wrappers的,例如使用命令ldd /usr/sbin/sshd,如果輸出中有libwrap,則說明可以使用TCP_wrappers, 即該服務可以使用/etc/hosts.allow和/etc/hosts.deny,如果輸出沒有libwrap則不可使用。
[root@centos01 ~]# ldd /usr/sbin/sshd linux-vdso.so.1 => (0x00007fffa0da0000) libfipscheck.so.1 => /lib64/libfipscheck.so.1 (0x00007f0417aa6000) libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f041789b000) libaudit.so.1 => /lib64/libaudit.so.1 (0x00007f041767e000) libpam.so.0 => /lib64/libpam.so.0 (0x00007f0417470000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f041726c000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f041704c000) libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f0416c6d000) libutil.so.1 => /lib64/libutil.so.1 (0x00007f0416a6a000) libz.so.1 => /lib64/libz.so.1 (0x00007f0416853000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f041663a000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f0416403000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f04161e8000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f0415fa4000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f0415cbe000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f0415a91000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f041588d000) libnss3.so => /usr/lib64/libnss3.so (0x00007f041554f000) libc.so.6 => /lib64/libc.so.6 (0x00007f04151ba000) /lib64/ld-linux-x86-64.so.2 (0x0000003abde00000) libfreebl3.so => /lib64/libfreebl3.so (0x00007f0414f43000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f0414d37000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f0414b34000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0414917000) libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007f04146ea000) libplc4.so => /lib64/libplc4.so (0x00007f04144e5000) libplds4.so => /lib64/libplds4.so (0x00007f04142e1000) libnspr4.so => /lib64/libnspr4.so (0x00007f04140a3000) librt.so.1 => /lib64/librt.so.1 (0x00007f0413e9b000)
經過判斷sshd是可以使用的。
5.2.2. 使用方法
修改/etc/hosts.deny,在其中加入
sshd:ALL
修改:/etc/hosts.allow,在其中進行如下設置:
sshd:192.168.1.2表示只允許 ip為 192.168.1.2 登陸到sshd
修改 /etc/hosts.allow,在其中加入
all:218.24.129.
這樣就會允許來自218.24.129.*域的所有的客戶來訪問。這只是舉個例子,實際上,系統默認狀態 下,都是能用這些網絡服的
修改 /etc/hosts.deny,在其中加入
all:218.24.129.
就限制了來自218.24.129.*域的所有的所有的IP
5.2.3. 優先級
Wrappers 首先在 hosts.allow 文件中查找規則匹配。如果找到匹配,那么 tcpd 會根據規則停下來,批準或拒絕訪問。如果在 hosts.allow 文件中未找到匹配,那么 tcpd 會讀取 hosts.deny 文件直到找到匹配。如果找到匹配,就拒絕訪問,否則批準訪問。
而且這里的規則是匹配到立刻執行,也就是某ip遇到的第一個匹配到的語句是拒絕,那么就會被拒絕,無論之后的規則是啥。同樣,如果遇到允許,那就允許,無論之后的規則是啥,所以關鍵是遇到的第一個匹配的規則。
5.2.4. 默認后綴
在allow文件中如果沒有加上:option,默認會認為是:allow。
所以雖然存在hosts.allow和hosts.deny兩個文件,但根據規則的靈活性,可以只用一個文件,只要在使用時明確指后綴即可。
比如修改 /etc/hosts.allow,在其中加入
all:218.24.129.:deny
就是指明了后綴,代表拒絕218.24.129.*ip端的訪問,如果不指明后綴,在hosts.allow默認為allow后綴,在hosts.deny里默認為deny后綴
5.3. sshd_config配置文件
5.3.1. 白名單模式
AllowUsers aliyun test@192.168.1.1
僅允許 aliyun和從 192.168.1.1 登錄的 test 帳戶通過 SSH 登錄系統,用戶名之間用空格。
AllowUsers *@192.168.1.1
僅允許從192.168.1.1 登錄的帳戶通過 SSH 登錄系統。
5.3.2. 黑名單模式
使用Denyusers關鍵字,其余配置與AllowUsers一樣。
5.3.3. 組模式
對應于用戶,還有AllowGroups、DenyGroups關鍵字,和AllowUsers、Denyusers基本一樣,只是后面需要填寫的是組名,而且是主要組(基本組)的名字。
六、測評項
這2個測評項內容如下:
e)應能發現可能存在的已知浦洞,并在經過充分測試評估后,及時修補漏洞;
f)應能夠檢測到對重要節點進行入侵的行為,并在發生嚴重入侵事件時提供報警。
七、 測評項e
e)應能發現可能存在的已知浦洞,并在經過充分測試評估后,及時修補漏洞;
這種要看被測評方自己是否有定期使用第三方工具進行漏洞掃描(比如安恒漏洞掃描工具等),查看每次掃描的掃描報告。
另外很多殺毒軟件都有漏洞掃描的功能,但是在linux系統上還能掃描漏洞的,不是沒有,但是我沒遇到過……
我遇到過的就一個卡巴斯基的linux版本,有那么一丁點的漏洞掃描功能(因為能掃描到的漏洞的范圍極窄)。
另外對于補丁,可以用rpm -qa | grep patch來查看安裝的一些補丁,但是有些時候人家是直接用更新的組件,這個命令是查不出來的。
比如openssh的低版本存在很多漏洞,這種情況下直接用更高版本的openssh就能解決問題了,而不是去打補丁。
還有是否具備測試環境,在發現漏洞后現在測試環境中進行測試、評估,然后再修補漏洞。
所以這一個測評項,主要還是靠訪談,然后再去取證,自己在主機上查配置基本查不出啥東西。
八、測評項f
f)應能夠檢測到對重要節點進行入侵的行為,并在發生嚴重入侵事件時提供報警。
8.1. 說明
其實對于主機的入侵按照初級教程而言,主要是系統入侵和遠程入侵兩種。
系統入侵主要是指在擁有一個低級賬戶的權限下通過系統漏洞進行提權,得到更高的管理權限,然后進行破壞。
那么,系統入侵一方面主要是看系統本身是否存在有什么高危漏洞。另外一點其實就和訪問控制有關,是否做好了比較細致的訪問控制。
如果系統本身不具備什么高危漏洞,而且訪問控制做得比較細致、有效的話,那么就算入侵者拿著具備低級權限的賬戶,也不會造成什么大的破壞(因為很難提權)。
而遠程入侵則是利用網絡進行端口掃描或者漏洞掃描,所以對于這種入侵,在主機層面上,當然第一點的仍然是系統本身是否存在高危漏洞。第二點就是是否關閉了多余的端口、對端口進行限制等。
下面說一說和入侵防范相關的軟件、方法。
8.2. 軟件類
在linux主機上能實現比較全面防入侵的軟件我沒遇到夠,有一定的防入侵功能的軟件,我遇到的就兩個:
一個是深信服EDR,具體功能如下:
它也具有報警功能:
一個就是卡巴斯基的linux版本,它好像具有比較淺層的防入侵功能。
至于報警功能的話,它也具有:
8.3. 系統防火墻
系統防火墻本身并不具備什么防入侵、檢測入侵的功能,但是如果系統防火墻開啟而且確實關閉了多余的端口,對于需要使用的端口做了源ip限制的話,或多或少還是能起到一定的功能的。
畢竟入侵的常用方法之一就是掃端口,然后看哪有漏洞,再進行入侵。
8.4. 查看日志
如果被測評方經常查看相關日志的話,也能起到少許的入侵檢測的作用。
比如查看/var/log/secure等日志,或者查看系統防火墻日志(如果開啟防火墻并做了策略),又或者設置了audit的審計規則,查看audit的審計日志等。
8.5. 安全設備
比如基于主機的IDS設備,又或者查看網絡拓撲圖,是否部署了IDS、IPS。
8.6. 云
如果是部署在云上,比如阿里云,那么都會有一些安全產品、服務可以購買的,比如云盾、安騎士等。
另外,如果是云上的話,一般都存在一個端口安全策略,比如要遠程登錄某主機的話都需要向客服提交工單申請對ip開放遠程端口:
九、 總結
這個測評項比較麻煩,因為想要實現測評項的要求,其實主要依靠第三方軟件或者設備。如果被測評方沒有使用什么第三方軟件或者設備,那很好辦,寫沒有就行了。
麻煩的地方是如果對方用了第三方軟件或者設備,但是你不清楚這個軟件具體具備什么功能,他也不清楚或者知道的比較模糊的話,就比較抓瞎了。
特別是對于反入侵,很多時候在軟件界面上并不會明確的告訴你具體具備什么反入侵功能,只有一個是否開啟的選項而已……
這方面沒有什么比較好的解決方案,唯有靠慢慢的積累經驗吧。
等保測評2.0之Centos安全審計
一、說明
在進行等級保護測評時,需要檢查主機的安全審計功能,這里就以等級保護2.0來說一說centos6在這方面的檢測,以下是安全計算環境的安全審計控制點中的測評項。
二、測評項a
這里在初級教程中,讓我們去查看系統日志服務和安全審計服務是否正常運行,但是這兩者有什么關系以及具體有什么功能書里沒說清楚。
2.1. audit和syslog的關系
網上的資料:
audit 主要用來記錄安全信息,用于對系統安全事件的追溯;而 syslog 日志系統用來記錄系統中的各種信息,如硬件警報和軟件日志等。但是 syslog 屬于應用層,沒辦法記錄太多信息。audit 來記錄內核信息,包括文件的讀寫,權限的改變等。
舉個例子來說,就是audit會記錄系統情況,syslog也會記錄,但是syslog記錄的信息不如audit更詳細,至于它倆具體能記錄啥,下文會說。
在實際使用中,audit和syslog幾乎就是獨立的,比如audit進程沒運行,syslog不會受到影響,會正常記錄信息。而syslog沒有開,audit也不會受到影響,會正常記錄信息。
2.2. 安全審計內核模塊與安全審計守護進程
這一段我也不是很清楚其原理,所以說錯了請諒解。
大概意思就是auditd內核模塊與auditd守護進程,不是一回事。auditd內核模塊主要用來獲取審計信息,而用戶的auditd守護進程主要是從內核模塊獲取審計信息然后記錄。所以如果auditd內核模塊沒有起動,那么auditd守護進程啟動了也沒有任何用,用戶定義的臨時審計規則或永久審計規則都不會起效果,自然也不會記錄任何信息(但注意,這個不會影響到syslog,syslog還是會正常記錄信息的)。
我們可以通過auditctl -s命令查看auditd內核模塊的狀態:
[root@centos01 ~]# auditctl -s
AUDIT_STATUS: enabled=1 flag=1 pid=3232 rate_limit=0 backlog_limit=320 lost=0 backlog=0
里面的enabled的值即為auditd內核模塊的狀態,enabled為0則代表auditd內核模塊沒有啟動,此時就像上文說的那樣,系統不會記錄任何信息。如果enabled為1,則代表auditd內核模塊正常開啟,此時可以正常收集信息。如果enabled為2,似乎是代表審計規則被鎖定,不能修改升級規則。
而當enabled為1但auditd守護進程沒有開啟時,內核收集到的信息將會記錄到寫到/var/log/messages中。
當然,一般情況下不會出現這種狀態,使用service auditd start或stop命令啟動或停止auditd守護進程時,內核的狀態和auditd守護進程的狀態是一致的。也就是start時,會開啟auditd守護進程,同時auditd內核的enabled也會被設為1,stop時,也一樣。
除非你使用auditctl -e命令特意去這么做:
[root@centos01 ~]# service auditd stop
停止 auditd: [確定]
[root@centos01 ~]# auditctl -e 1
AUDIT_STATUS: enabled=1 flag=1 pid=0 rate_limit=0 backlog_limit=320 lost=0 backlog=0
[root@centos01 ~]# service auditd status
auditd 已停
此時,就出現了auditd內核模塊未啟動,但auditd守護進程啟動的情況了。
2.3. 是否開啟了安全審計功能
所以判斷是否開啟安全審計功能時,要順帶查看一下auditd內核模塊的狀態,至于syslog是否開啟,我個人感覺還是以auditd為主,syslog開啟了很好,沒開啟也無所謂。
2.4. 是否覆蓋到每個用戶和是否對重要行為、事件進行審計
我們可以通過auditctl -l查看現在運行著的審計規則(默認是無規則):
[root@centos01 ~]# auditctl -l
No rules
還可以通過查看/etc/audit/audit.rules文件,得到寫在配置文件中的永久審計規則:
[root@centos01 ~]# cat /etc/audit/audit.rules
#This file contains the auditctl rules that are loaded
#whenever the audit daemon is started via the initscripts.
#The rules are simply the parameters that would be passed
#to auditctl.
#First rule – delete all
-D
#Increase the buffers to survive stress events.
#Make this bigger for busy systems
-b 320
#Feel free to add below this line. See auditctl man page
實際運行的規則和配置文件中寫的規則有什么區別嗎?對于實際運行的規則,你可以臨時的增加、刪除、修改(服務重啟就恢復原樣)。而對于寫在配置文件中的規則,如果你修改了配置文件卻沒有重啟服務,那么你修改的也不會生效。
audit的審計規則大概有兩類:一類是對文件的監控,一類是對系統調用的監控。
對于文件,可以定義審計規則監控對該文件的讀、寫、執行等操作,一旦發生,就會記錄到日志文件中。比如用以下命令對hosts文件的寫和屬性更改進行監控:
auditctl -w /etc/hosts -p wa
對于系統調用,可以定義審計規則對于命令的調用,比如用以下名監控對umask、chown命令的調用:
[root@centos01 ~]# auditctl -a exit,always -S umask -S chownWARNING - 32/64 bit syscall mismatch, you should specify an arch[root@centos01 ~]# auditctl -lLIST_RULES: exit,always syscall=chown,umask
好,對于一個默認的、沒有定義審計規則的系統,其實還是會記錄一些東西的,我們可用aureport -i命令查看總覽:
Summary Report
======================
Range of time in logs: 2019年03月12日 00:54:39.084 – 2019年07月26日 15:38:01.542
Selected time for report: 2019年03月12日 00:54:39 – 2019年07月26日 15:38:01.542
Number of changes in configuration: 67
Number of changes to accounts, groups, or roles: 172
Number of logins: 162
Number of failed logins: 75
Number of authentications: 471
Number of failed authentications: 442
Number of users: 6
Number of terminals: 33
Number of host names: 3
Number of executables: 32
Number of files: 3
Number of AVC's: 28
Number of MAC events: 152
Number of failed syscalls: 26
Number of anomaly events: 26
Number of responses to anomaly events: 36
Number of crypto events: 573
Number of keys: 1
Number of process IDs: 2036
Number of events: 11595
這里可以看到日志的開始和結束日期,以及各類記錄的數量。 aureport命令有著很多參數,如-x、-l、-f、-c、-u等,可以查看各類記錄的具體信息,默認情況下會對以下信息進行記錄:
賬號修改,如使用passwd、usermod等命令;
用戶登陸,包括圖形界面的登陸、遠程登錄,但應該不包括su;
配置修改,但是這個其實比較不清晰,大概用什么方式修改什么服務的配置文件會被記錄下來,不清楚;
……
所以,默認情況下auditd也記錄了一些東西,也勉強算是覆蓋到每個用戶和并對重要行為、事件進行審計了。
至于syslog,它大概記錄的信息如下:
三、 測評項b
3.1. audit
這個,可以直接查看auditd的日志文件的具體內容:
[root@centos01 ~]# cat /var/log/audit/audit.log | head -n 2
type=DAEMON_START msg=audit(1552323279.084:9122): auditd start, ver=2.2 format=raw kernel=2.6.32–431.el6.x86_64 auid=4294967295 pid=1165 subj=system_u:system_r:auditd_t:s0 res=success
type=CONFIG_CHANGE msg=audit(1552323279.203:4): audit_backlog_limit=320 old=64 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditctl_t:s0 res=1
里面的信息還是很詳細的,具體每個字段代表什么意思可看:https://blog.csdn.net/yongyong169/article/details/79035680
反正符合要求應該是沒啥問題的。
3.2. syslog
如果是syslog,有些日志比較詳細,有些不夠詳細,last命令查詢wtmp日志,就還算詳細吧:
[root@centos01 ~]# last | head -n 20
root pts/2 :0.0 Fri Jul 26 15:53 still logged in
root pts/1 :0.0 Fri Jul 26 14:51 still logged in
root pts/0 :0.0 Fri Jul 26 14:48 still logged in
root tty1 :0 Fri Jul 26 14:47 still logged in
reboot system boot 2.6.32-431.el6.x Fri Jul 26 14:47 – 15:56 (01:09)
root tty1 :0 Wed Jul 10 09:12 – 09:14 (00:01)
reboot system boot 2.6.32-431.el6.x Tue Jul 9 15:44 – 09:14 (17:29)
root pts/1 192.168.9.1 Wed Jul 3 13:36 – 11:59 (22:23)
root pts/0 :0.0 Wed Jul 3 13:35 – 22:34 (1 08:58)
root tty1 :0 Wed Jul 3 13:35 – 22:34 (1 08:59)
reboot system boot 2.6.32-431.el6.x Wed Jul 3 13:33 – 22:34 (1 09:00)
root pts/1 192.168.9.1 Wed Jul 3 13:06 – down (00:26)
root pts/0 :0.0 Wed Jul 3 13:06 – 13:33 (00:26)
root tty1 :0 Wed Jul 3 13:04 – down (00:28)
reboot system boot 2.6.32-431.el6.x Wed Jul 3 13:03 – 13:33 (00:29)
oracle pts/1 192.168.236.1 Sun Jun 30 19:46 – down (09:53)
root pts/2 192.168.236.1 Sun Jun 30 19:05 – down (10:34)
oracle pts/1 192.168.236.1 Sun Jun 30 16:52 – 19:46 (02:53)
oracle pts/0 :0.0 Sun Jun 30 16:48 – 05:40 (12:52)
oracle tty1 :0 Sat Jun 29 22:02 – 05:40 (1 07:38)
四、測評項c
這里有兩個要求,一個是對記錄進行保護,另外一個是備份。
4.1. 對記錄進行保護
這個很簡單,一個方面直接查看audit和syslog的日志文件的權限即可:
默認情況下都沒有問題,other都不會具有寫的權限。同時,存有日志的目錄,other也沒有寫權限(即是否有權限刪除該目錄下的文件)。
[root@centos01 ~]# ls -ld /var/log/auditdrwxr-x---. 2 root root 4096 3月 12 00:54 /var/log/audit[root@centos01 ~]# ls -l /var/log/audit;總用量 2588-rw-------. 1 root root 2643067 7月 26 15:50 audit.log[root@centos01 ~]# ls -ld /var/log/drwxr-xr-x. 14 root root 4096 7月 26 15:42 /var/log/[root@centos01 ~]# ls -l /var/log;總用量 3776-rw-------. 1 root root 6550 3月 12 00:53 anaconda.ifcfg.log-rw-------. 1 root root 25077 3月 12 00:53 anaconda.log-rw-------. 1 root root 40223 3月 12 00:53 anaconda.program.log-rw-------. 1 root root 171892 3月 12 00:53 anaconda.storage.log-rw-------. 1 root root 132167 3月 12 00:53 anaconda.syslog-rw-------. 1 root root 35064 3月 12 00:53 anaconda.xlog-rw-------. 1 root root 115594 3月 12 00:53 anaconda.yum.logdrwxr-x---. 2 root root 4096 3月 12 00:54 audit-rw-r--r-- 1 root root 3211 7月 26 14:47 boot.log-rw------- 1 root utmp 0 7月 1 03:38 btmp-rw-------. 1 root utmp 1920 6月 29 19:47 btmp-20190701drwxr-xr-x. 2 root root 4096 3月 12 00:58 ConsoleKit-rw------- 1 root root 1021 7月 26 15:50 cron-rw-------. 1 root root 5298 6月 28 15:19 cron-20190628-rw-------. 1 root root 17806 6月 30 15:06 cron-20190630-rw------- 1 root root 22711 7月 9 16:17 cron-20190709-rw------- 1 root root 3407 7月 26 15:42 cron-20190726drwxr-xr-x. 2 lp sys 4096 8月 17 2013 cups-rw-r--r-- 1 root root 81565 7月 26 14:47 dmesg-rw-r--r-- 1 root root 81600 7月 9 15:44 dmesg.old-rw-r--r--. 1 root root 393885 3月 12 20:46 dracut.logdrwxrwx--T. 2 root gdm 4096 7月 26 14:47 gdmdrwx------. 2 root root 4096 8月 14 2013 httpd-rw-r--r--. 1 root root 147168 7月 3 13:36 lastlogdrwxr-xr-x. 2 root root 4096 3月 31 15:20 mail-rw------- 1 root root 0 7月 26 15:42 maillog-rw-------. 1 root root 2912 6月 28 14:30 maillog-20190628-rw-------. 1 root root 7866 6月 29 21:51 maillog-20190630-rw------- 1 root root 1596 7月 9 15:44 maillog-20190709-rw------- 1 root root 353 7月 26 14:49 maillog-20190726-rw------- 1 root root 923 7月 26 15:55 messages-rw-------. 1 root root 172261 6月 28 15:06 messages-20190628-rw-------. 1 root root 718061 6月 30 15:02 messages-20190630-rw------- 1 root root 405081 7月 9 16:16 messages-20190709-rw------- 1 root root 153160 7月 26 15:41 messages-20190726drwxr-xr-x. 2 ntp ntp 4096 11月 24 2013 ntpstats-rw-r--r--. 1 root root 89 7月 26 14:47 pm-powersave.logdrwx------. 2 root root 4096 8月 23 2010 pppdrwxr-xr-x. 2 root root 4096 3月 12 18:38 prelinkdrwxr-xr-x. 2 root root 4096 7月 26 14:47 sadrwx------. 3 root root 4096 3月 12 00:44 samba-rw------- 1 root root 0 7月 26 15:42 secure-rw-------. 1 root root 2700 6月 28 14:33 secure-20190628-rw-------. 1 root root 20714 6月 29 22:02 secure-20190630-rw------- 1 root root 7327 7月 9 15:44 secure-20190709-rw------- 1 root root 3364 7月 26 14:51 secure-20190726-rw-------. 1 root root 0 3月 12 00:54 spice-vdagent.log-rw------- 1 root root 0 7月 26 15:42 spooler-rw-------. 1 root root 0 6月 19 19:13 spooler-20190628-rw-------. 1 root root 0 6月 28 15:19 spooler-20190630-rw------- 1 root root 0 6月 30 15:06 spooler-20190709-rw------- 1 root root 0 7月 9 16:17 spooler-20190726drwxr-x---. 2 root root 4096 11月 23 2013 sssd-rw-------. 1 root root 32256 7月 3 13:36 tallylog-rw-r--r--. 1 root root 0 3月 12 00:55 wpa_supplicant.log-rw-rw-r--. 1 root utmp 451200 7月 26 15:53 wtmp-rw-r--r-- 1 root root 53692 7月 26 15:53 Xorg.0.log-rw-r--r-- 1 root root 54094 7月 10 09:14 Xorg.0.log.old-rw-r--r--. 1 root root 60193 6月 28 16:02 Xorg.1.log-rw-r--r--. 1 root root 51164 4月 5 03:16 Xorg.1.log.old-rw-r--r--. 1 root root 57801 6月 28 16:09 Xorg.2.log-rw-r--r--. 1 root root 38398 4月 5 03:10 Xorg.2.log.old-rw-r--r--. 1 root root 59160 6月 28 21:34 Xorg.3.log-rw-r--r--. 1 root root 40233 3月 28 19:00 Xorg.3.log.old-rw-r--r--. 1 root root 66966 6月 28 21:34 Xorg.4.log-rw-r--r--. 1 root root 40754 6月 28 21:34 Xorg.5.log-rw-r--r--. 1 root root 33584 3月 12 00:56 Xorg.9.log-rw-------. 1 root root 2887 6月 28 16:00 yum.log
4.2. 定期備份
定期備份一般是指將日志推送至日志服務器等設備進行備份,所以如果對方說有該類設備,就去查看相關配置以及是否存在實際的備份的日志文件即可。
如果對方說是手動定期備份的話,這個嘛,就要看你自己怎么判斷了。
五、測評項d
一方面驗證即可,另一方面可以查看shell腳本里是如何設置對權限進行判斷的:
[root@centos01 ~]#cat /etc/rc.d/init.d/auditd
#!/bin/bash
#
#auditd This starts and stops auditd
#
#chkconfig: 2345 11 88
#description: This starts the Linux Auditing System Daemon,
# which collects security related events in a dedicated
# audit log. If this daemon is turned off, audit events
# will be sent to syslog.
#
#processname: /sbin/auditd
#config: /etc/sysconfig/auditd
#config: /etc/audit/auditd.conf
#pidfile: /var/run/auditd.pid
#
#Return values according to LSB for all commands but status:
#0 – success
#1 – generic or unspecified error
#2 – invalid or excess argument(s)
#3 – unimplemented feature (e.g. "reload")
#4 – insufficient privilege
#5 – program is not installed
#6 – program is not configured
#7 – program is not running
#
PATH=/sbin:/bin:/usr/bin:/usr/sbin
prog="auditd"
#Source function library.
. /etc/init.d/functions
#Allow anyone to run status
if [ "$1" = "status" ] ; then
status $prog
RETVAL=$?
exit $RETVAL
fi
#Check that we are root … so non-root users stop here
test $EUID = 0 || exit 4
#Check config
test -f /etc/sysconfig/auditd && . /etc/sysconfig/auditd
RETVAL=0
start(){
test -x /sbin/auditd || exit 5
test -f /etc/audit/auditd.conf || exit 6
echo -n $"Starting $prog: "
#Localization for auditd is controlled in /etc/synconfig/auditd
if [ -z "$AUDITD_LANG" -o "$AUDITD_LANG" = "none" -o "$AUDITD_LANG" = "NONE" ]; then
unset LANG LC_TIME LC_ALL LC_MESSAGES LC_NUMERIC LC_MONETARY LC_COLLATE
else
LANG="$AUDITD_LANG"
LC_TIME="$AUDITD_LANG"
LC_ALL="$AUDITD_LANG"
LC_MESSAGES="$AUDITD_LANG"
LC_NUMERIC="$AUDITD_LANG"
LC_MONETARY="$AUDITD_LANG"
LC_COLLATE="$AUDITD_LANG"
export LANG LC_TIME LC_ALL LC_MESSAGES LC_NUMERIC LC_MONETARY LC_COLLATE
fi
unset HOME MAIL USER USERNAME
daemon $prog "$EXTRAOPTIONS"
RETVAL=$?
echo
if test $RETVAL = 0 ; then
touch /var/lock/subsys/auditd
#Load the default rules
test -f /etc/audit/audit.rules && /sbin/auditctl -R /etc/audit/audit.rules >/dev/null
fi
return $RETVAL
}
stop(){
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
echo
rm -f /var/lock/subsys/auditd
#Remove watches so shutdown works cleanly
if test x"$AUDITD_CLEAN_STOP" != "x" ; then
if test "`echo $AUDITD_CLEAN_STOP | tr 'NO' 'no'`" != "no"
then
/sbin/auditctl -D >/dev/null
fi
fi
if test x"$AUDITD_STOP_DISABLE" != "x" ; then
if test "`echo $AUDITD_STOP_DISABLE | tr 'NO' 'no'`" != "no"
then
/sbin/auditctl -e 0 >/dev/null
fi
fi
return $RETVAL
}
reload(){
test -f /etc/audit/auditd.conf || exit 6
echo -n $"Reloading configuration: "
killproc $prog -HUP
RETVAL=$?
echo
return $RETVAL
}
rotate(){
echo -n $"Rotating logs: "
killproc $prog -USR1
RETVAL=$?
echo
return $RETVAL
}
resume(){
echo -n $"Resuming logging: "
killproc $prog -USR2
RETVAL=$?
echo
return $RETVAL
}
restart(){
test -f /etc/audit/auditd.conf || exit 6
stop
start
}
condrestart(){
[ -e /var/lock/subsys/auditd ] && restart
return 0
}
#See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload|force-reload)
reload
;;
rotate)
rotate
;;
resume)
resume
;;
condrestart|try-restart)
condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|rotate|resume}"
RETVAL=3
esac
exit $RETVAL
注意開頭的這一段:
#Check that we are root ... so non-root users stop heretest $EUID = 0 || exit 4
也就是說euid只要不是0(不具備root權限),那么就沒辦法繼續執行代碼,也自然做不了什么事情了。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。