运维服务器比较头疼的问题之一就是系统被黑沦为吃鸡或者矿机。除了加强安全基线配置、加强网络和端口加固、系统和应用漏洞修复、IDS/IPS(入侵检测/防御系统),另一个方面是系统监控。及时在主机层面实施完整准确的安全监控。检测入侵活动并发出警报,以便及时处理。虫虫这篇文章就给大家讲讲系统文件变化的监控。概述*nix系统中的一切都是文件,系统文件的变化往往反映了系统的变化,例如系统应用更新、系统操作活动(可通过安全审计确定)或系统被黑客入侵等。根据虫虫多年来的维护经验,系统被黑最明显的特征之一就是系统文件的改动,包括但不限于:/bin(将基础工具替换为恶意木马,如??netstat、ps等)/sbin(替换sshd、lsof、ss等恶意木马基础工具)/usr/bin(替换sshd、lsof、ss等恶意木马基础工具)/usr/sbin(替换带有恶意木马的基本工具,如sshd、lsof、ss等)/etc/init.d(修改启动任务,添加恶意脚本启动)/etc//etc/cront.d(修改定时任务,添加恶意脚本定时执行)/etc/crontab(修改定时任务,添加恶意脚本定时执行)~/.ssh/目录(注入公钥)/etc/sysconfig(修改iptables配置等,开启网络限制)/etc/ssh/(修改ssh配置)web目录(修改网站)等目录文件被替换或添加非法文件。加强对这些目录和文件的监控,可以在一定程度上防止系统被黑客攻击,以及因系统被黑客攻击而无法发现的问题。find-mtime目录文件变化监视系统变化最简单和最常用的方法是使用find命令,其-mtime表示最近更改的文件。比如查看一天内/usr/bin目录下变化的文件,可以使用find/usr/bin-m-1查看这些文件的详细信息,可以使用xargs或者-exec来显示这些changedfiles用ls-al出来,例如:find/var-typef-mtime-1-execls-al{}\;RPM监控系统文件的变化RPM是Linux的一种应用程序包,大家可能很熟悉使用RPM安装应用程序。实际上,RPM仍然是一个系统包数据库,并提供了包验证功能,可以用来发现原始安装包的变化。RPM应用程序包文件验证的基本命令是rpm-V。例如查询和验证nginx包,可以使用rpm-Vnginx:来验证命令结果的前几个属性。.表示属性正常,其他标志表示属性发生变化。如果文件被删除,会提示“丢失...”。具体属性含义如下:结果表明nginx包中default.conf文件的大小、md5哈希值、文件修改时间都发生了变化。注:上图中间还有一个字母c标记,表示文件的属性,c表示该文件是配置文件。其他标志有:d%doc描述文档;g%ghost不应该包含该文件,可能有问题;l%license授权文件;r%readme自述描述文件。在-V选项中加上-a可以列出当前系统安装后所有变化的包文件,可以用来检查文件包的完整性和安全性。我们使用grep进一步检查结果以获取特定文件。例如获取bin目录下系统文件发生变化的文件:Inotify监控文件变化。另一种常见的方法是使用Inotify来监视文件更改。Inotify是Linux内核(2.6.13)自带的系统事件监听机制。Inotify的优点之一是基于内核事件通知机制,无需每隔一定时间主动检测文件状态,简单可靠。还有一个好处是当有文件变化通知时,可以记录下当时的用户和事件过程。基于inotify的工具有inotify-tools、sersync和lsyncd等,这里简单介绍一下inotify-tools的使用。inotify-tools的安装安装比较简单。以centos为例,先添加epel源,然后yuminstallnotify-toolsinotify-tools使用inotify-tools安装后会自带两个工具,分别是inotifywait和inotifywatch。inotifywait工具用于添加文件或目录监控,支持对文件的一些操作事件,如打开、关闭、删除等,运行后系统处于阻塞状态。inotifywait的参数和对应的事件列表如下图所示:出于安全考虑,关注文件变化和创建时间,即修改和创建事件。inotifywatch工具用于查看监控文件中事件的数据统计。下面举个例子来说明我们使用inotifywait来监听/var目录下文件的变化:inotifywait-mremodify/var为了便于阅读,我们添加了一些日志和时间格式参数:inotifywait-mrq--timefmt'%d%m%y%H:%M'--format'%T%w%f'-emodify-ecreate/var统计30秒内系统中的变化数据,可以使用inotifywatch:useofinotifywatch-v-t30-r/procinotifywatch这里就不详细介绍了。自建脚本监控文件md5的另一种方法是在开始时计算特定目录(如web目录)的md5hash,然后定期计算md5,然后进行比较。如果发现md5hash不一致,说明文件被篡改了。对此,虫虫根据这个原理用Perl编写了一个脚本MD5Check(github:/bollwarm/MD5Check),可以直接使用,也可以作为参考。MD5Check的安装非常简单。在Perl环境下(依赖Digest::MD5)直接下载clone文件即可使用,也可以使用cpanm安装cpanmMD5Check。使用方法:使用方法,执行perlbin/init.plweb目录(自定义),初始化MD5值。然后使用perlbin/check.pl查看上一节保存的md5hash文件。详细示例参见bin目录下的init.pl和check.pl。安装cpanm后,可以直接使用perl单行程序检查初始化:perl-MMD5Check-e'init("/web")'>filecheck:perl-MMD5Check-e'printmd5check(file)示例':以一个wordexpree网站为例:perlinit.pl/web>webmd5.20161027Check:perlcheck.plwebmd5.20161027总结本文介绍如何通过监控linux文件的变化来防止系统被黑。介绍了linux系统下几种常用的文件监控方法:find、rpm、Inodify和自写脚本的方法。当然,这些方法需要配合一个监控系统(如zabbix)来实现及时全面的系统,可以作为系统安全监控的一部分(其他部分包括进程监控、防火墙变化监控、流量变化监控等))配置和报警。关于这几个部分,我以后再给大家介绍。
