當一個入侵者進入了你的系統而且種植了木馬,一般會想辦法來隱蔽這 個木馬(除了木馬自身的一些隱蔽特性外,他會盡可能給你檢查系統的過 程設置障礙),一般入侵者會修改一些文件,好比管理員一般用ps -aux 來查看系統進程,那麼入侵者極可能用本身通過修改的ps程序來替換掉 你係統上的ps程序,以使用ps命令查不到正在運行的木馬程序。若是入 侵者發現管理員正在運行crontab做業,也有可能替換掉crontab程序等 等。因此由此能夠看出對於系統文件或是關鍵文件的檢查是很必要的。 接下來咱們就來認識一下系統完整性檢查的兩種工具之aide和tripwrie。算法
1、AIDE(Adevanced Intrusion Detection Environment) 數據庫
AIDE是一個入侵檢測工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被修改過了,也能夠構造一個指定文件的數據庫。aide數據庫可以保存文件的各類屬性,包括權限、索引節點序號、所屬用戶、所屬用戶組、文件大小、以及最後修改時間、建立時間、增長的文件大小等。並且aide還能夠經過使用shal、md5等算法,以密文件的形式創建每一個文件的校驗碼或散列號,正是因爲aide的這些特性,因此aide數據庫不該該保存那些常常變更的信息,如日誌文件、郵件、/proc文件系統和臨時目錄等。vim
因爲系統默認沒有安裝aide,因此使用時就須要安裝aide包,避免依賴關係致使的包沒法安裝,用yum來進行包的安裝。接下來一塊兒來實踐操做一下aide相關命令。安全
[root@localhost ~]#yum -y install aide
aide相關配置文件在 /etc/aide.conf,修改aide.conf文件,指定對那些文件進行檢測。bash
/etc R=p+i+n+u+g+s+m+c+md5 權限+索引節點+連接數+用戶+組+大小+最後一 次修改時間+建立時間+md5校驗值 服務器
!/etc/mtab #「!」表示忽略這個文件的檢查
網絡
NORMAL = R+rmd60+sha256app
總的來講,想檢測的值能夠本身進行編輯寫入aide.conf文件便可。ssh
[root@localhost ~]#aide -i
AIDE, version 0.15.1
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
[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!
2、TCP_Wrappers
tcp
TCP_Wrappers是工做在傳輸層的TCP協議,對有狀態鏈接的特定服務進行安全檢測並實現訪問控制。
* 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來實現控制
– 以逗號或空格分隔的客戶端列表
– 基於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
例一、只容許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
例二、只容許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
例三、啓動一個外部程序完成操做好比建立一個文件
[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
例四、使用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
3、練習
一、僅開放本機兩個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
二、編寫腳本/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