當一個入侵者進入了你的系統並且種植了木馬,通常會想辦法來隱蔽這 個木馬(除了木馬自身的一些隱蔽特性外,他會盡量給你檢查系統的過 程設置障礙),通常入侵者會修改一些文件,比如管理員通常用ps -aux 來查看系統進程,那么入侵者很可能用自己經過修改的ps程序來替換掉 你系統上的ps程序,以使用ps命令查不到正在運行的木馬程序。如果入 侵者發現管理員正在運行crontab作業,也有可能替換掉crontab程序等 等。所以由此可以看出對於系統文件或是關鍵文件的檢查是很必要的。 接下來我們就來認識一下系統完整性檢查的兩種工具之aide和tripwrie。
一、AIDE(Adevanced Intrusion Detection Environment)
AIDE是一個入侵檢測工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被修改過了,也可以構造一個指定文件的數據庫。aide數據庫能夠保存文件的各種屬性,包括權限、索引節點序號、所屬用戶、所屬用戶組、文件大小、以及最后修改時間、創建時間、增加的文件大小等。而且aide還可以通過使用shal、md5等算法,以密文件的形式建立每個文件的校驗碼或散列號,正是由於aide的這些特性,所以aide數據庫不應該保存那些經常變動的信息,如日志文件、郵件、/proc文件系統和臨時目錄等。
由於系統默認沒有安裝aide,所以使用時就需要安裝aide包,避免依賴關系導致的包無法安裝,用yum來進行包的安裝。接下來一起來實踐操作一下aide相關命令。
- aide的安裝
[root@localhost ~]#yum -y install aide
- aide的配置文件
aide相關配置文件在 /etc/aide.conf,修改aide.conf文件,指定對那些文件進行檢測。
/etc R=p+i+n+u+g+s+m+c+md5 權限+索引節點+鏈接數+用戶+組+大小+最后一 次修改時間+創建時間+md5校驗值
!/etc/mtab #“!”表示忽略這個文件的檢查
NORMAL = R+rmd60+sha256
總的來說,想檢測的值可以自己進行編輯寫入aide.conf文件即可。
- 生成數據庫
[root@localhost ~]#aide -i
AIDE, version 0.15.1
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
- 將生成的數據庫文件名改名去掉new
[root@localhost aide]#mv aide.db.new.gz aide.db.gz
- 修改數據查看是否會檢測
[root@localhost app]#aide -C
Changed files: 1
--------------------------------------------------- Changed files: --------------------------------------------------- changed: /app/f1 --------------------------------------------------- Detailed information about changes: --------------------------------------------------- File: /app/f1 Mtime : 2018-09-07 19:41:40 , 2018-09-07 19:43:26 Ctime : 2018-09-07 19:41:40 , 2018-09-07 19:43:26 SHA512 : kdWQ1fcm+hTQd0jDrdUIRZhJv8cijY5Z , 84tl4Ep3IIBo4wOXZ+49+JXXrgeLcdej
- 更新數據庫
[root@localhost app]#aide –u 更新數據庫 [root@localhost app]#mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz 將生成的新的數據庫去new
mv: overwrite ‘/var/lib/aide/aide.db.gz’? y [root@localhost app]#aide –C 查看是否有修改的
AIDE, version 0.15.1
### All files match AIDE database. Looks okay!
二、TCP_Wrappers
TCP_Wrappers是工作在傳輸層的TCP協議,對有狀態連接的特定服務進行安全檢測並實現訪問控制。
- 查看服務是否支持TCP_Wrappers
* strings PATH/TO/PROGRAM |grep libwrap.so * ldd /PATH/TO/PROGRAM |grep libwrap.so [root@localhost ~]# ldd /usr/sbin/vsftpd |grep libwrap.so
libwrap.so.0 => /lib/libwrap.so.0 (0x00236000)
- 配置文件
配置文件有別與其他的服務,有兩個配置文件分別為/etc/hosts.allow,/etc/hosts.deny
這兩個文件都有效,先匹配allow文件在匹配deny文件,一旦前面規則匹配,直接生效,將不再繼續。
- 基本語法:
– daemon_list@host: client_list [ :options :option… ]
– 單個應用程序的二進制文件名,而非服務名,例如vsftpd
[root@localhost ~]# rpm -ql vsftpd|grep bin 查看二進制服務的文件名
/usr/sbin/vsftpd [root@localhost ~]# rpm -ql telnet-server|grep bin
/usr/sbin/in.telnetd
– 以逗號或空格分隔的應用程序文件名列表,如:sshd,vsftpd
– ALL表示所有接受tcp_wrapper控制的服務程序
– 主機有多個IP,可用@hostIP來實現控制
- 客戶端Client_list格式
– 以逗號或空格分隔的客戶端列表
– 基於IP地址:192.168.10.1 192.168.1.
– 基於主機名:www.magedu.com .magedu.com 較少用
– 基於網絡/掩碼:192.168.0.0/255.255.255.0
– 基於net/prefixlen: 192.168.1.0/24(CentOS7)
– 基於網絡組(NIS 域):@mynetwork
– 內置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
例1、只允許172.18.250.243/24的主機訪問sshd
[root@localhost ~]# vim /etc/hosts.allow
sshd:172.18.250.243 [root@localhost ~]# vim /etc/hosts.deny
sshd:ALL
例2、只允許172.18.250.243/24的主機訪問telnet和vsftpd服務
[root@localhost ~]# vim /etc/hosts.allow
vsftpd,in.telnetd:172.18.250.243 [root@localhost ~]# vim /etc/hosts.deny
vsftpd,in.telnetd:ALL
[:options]選項:
deny 主要用在/etc/hosts.allow定義“拒絕”規則 如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定義“允許”規則 如:vsftpd:172.16. :allow
spawn 啟動一個外部程序完成執行的操作
twist 實際動作是拒絕訪問,使用指定的操作替換當前服務,標准I/O和 ERROR發送到客戶端,默認至/dev/null
例3、啟動一個外部程序完成操作比如創建一個文件
[root@localhost app]#vim /etc/hosts.allow
vsftpd:172.18.251.25:spawn echo "$(date +%%F) login from client\:%c to %s %p" >> /app/ftp.log
[root@localhost app]#cat ftp.log
2018-09-08 login from client:172.18.251.25 to vsftpd@172.18.250.243 25044
例4、使用twist拒絕一個服務
[root@localhost app]#vim /etc/hosts.allow
vsftpd:ALL:twist echo "connection prohibited" [root@localhost ~]# ftp 172.18.250.243
Connected to 172.18.250.243 (172.18.250.243). connection prohibited
說明:
– 在/etc/hosts.allow中添加,允許登錄,並記錄日志
– 在/etc/hosts.deny中添加,拒絕登錄,並記錄日志
– %c 客戶端信息
– %s 服務器端信息
– %d 服務名 – %p 守護進程的PID
三、練習
1、僅開放本機兩個IP地址中的一個地址172.16.0.X上綁定的sshd和vsftpd服務給172.16.0.0/16網絡 中除了172.16.0.0/24網絡中的主機之外的所有主機,但允許172.16.0.200訪問,每次的用戶訪問都 要記錄於日志文件中注:其中X為學號
[root@localhost app]#vim /etc/hosts.allow
sshd@172.18.0.23,vsftpd@172.18.0.23:172.18. EXPECT 172.18.0. EXPECT 172.18.0.200:spawn echo "$(date +%%F) login attempt from %c to %s,%d" >> /var/log/sshd.log sshd,vsftpd:ALL
2、編寫腳本/root/bin/checkip.sh,每5分鍾檢查一次,如果發現通過ssh登錄失敗次數超過10次,自 動將此遠程IP放入Tcp Wrapper的黑名單中予以禁止防問
#!/bin/bash
while :;do iplist=`cat /var/log/secure |awk '/Failed/{print}'|awk '{line[$(NF-3)]++}END{for(i in line){print i,line[i]}}'|awk '{if($2 >=10){print ""$1}}'` for i in iplist do echo "sshd:$i" >> /etc/hosts.deny done sleep 300 done