当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这 个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过 程设置障碍),通常入侵者会修改一些文件,比如管理员通常用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
来源:oschina
链接:https://my.oschina.net/u/4295895/blog/3833757