当一个入侵者进入了你的系统而且种植了木马,一般会想办法来隐蔽这 个木马(除了木马自身的一些隐蔽特性外,他会尽可能给你检查系统的过 程设置障碍),一般入侵者会修改一些文件,好比管理员一般用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