在Linux系统下,可以使用history命令查看用户的所有历史操作记录,在安全应急响应中起到非常重要的作用,但是无需额外配置,history命令只能查看用户历史操作记录,但无法区分用户和操作时间,不便于审计分析。当然,一些不良的操作习惯也可能通过命令历史泄露敏感信息。下面介绍一下如何让历史日志记录的更详细,更便于我们审计和分析。1.默认情况下,命令历史记录中添加了时间,如下图所示。没有命令执行时间,不利于审计分析。通过设置exportHISTTIMEFORMAT='%F%T',命令执行时间包含在历史中。注意“%T”和后面的“'”之间有一个空格,否则查看历史时,时间和命令之间没有分隔。一劳永逸,这个配置可以写在/etc/profile中。当然,如果你想配置指定用户,这个配置可以写在/home/$USER/.bash_profile中。本文将以/etc/profile为例进行演示。要使配置立即生效,请执行source/etc/profile,然后查看历史记录,可以看到记录中包含命令执行时间。如果想实现更详细的记录,比如登录过系统的用户、IP地址、操作命令、操作时间一一对应,可以通过exportHISTTIMEFORMAT="\%F\%T实现在/etc/profile`who\-uami2>/dev/null|awk'{print$NF}'|sed\-e's/[()]//g'``whoami`中加入如下代码注意空格需要修改/etc/profile,加载后,历史记录如下,时间,IP,用户,执行的命令都是一一对应的,通过上面的配置,基本可以满足日常的审计工作,但是了解系统的朋友应该很容易看出,这种方法只是设置环境变量,攻击者取消设置环境变量,或者直接删除命令历史记录,这对于安全应急来说无疑是一场灾难。我们应该如何应对这样的问题,下面是我们今天的重点,通过修改bash源码,将历史记录发送到远程elogserver通过syslog,大大增加了攻击者破坏历史记录完整性的难度。2、修改bash源码,支持syslog记录首先下载bash源码,可以从gnu.org下载。我不会在这里详细介绍。系统需要安装gcc等编译环境。我们使用bash4.4版本进行演示。修改源码:bashhist.c修改源码config-top.h,取消/#defineSYSLOG_HISTORY/这一行的注释进行编译安装,编译过程不再赘述,这里用到的编译参数文章是:./configure--prefix=/usr/local/bash,安装成功后对应的目录如下:这时候可以修改/etc/passwd中的用户shell环境,或者直接替换原来的bash二进制文件跟编译后的文件一样,但是最好做好与原文件的备份。替换的时候要注意两点:1、一定要给可执行权限,默认是有的,但是有时候下载到windows系统后,上传后会没有可执行权限,所以这里一定要确定,不然你会后悔;2.替换时原bash被占用,可以修改原用户的bash环境再替换。查看效果,发现历史记录已经写入到/var/log/message。如果要写入远程logserver,需要配置syslog服务。具体配置这里不做详细说明。大家可以自己研究下,发送到远程logserver的效果如下图所示。通过上述手段,可以有效保证历史记录的完整性,防止攻击者在登录系统后通过取消环境变量、删除历史记录等方式抹杀操作行为,为安全审计、应急响应等提供完整的原始数据。
