Linux系统下可经过history命令查看用户全部的历史操做记录,在安全应急响应中起着很是重要的做用,但在未进行附加配置状况下,history命令只能查看用户历史操做记录,并不能区分用户以及操做时间,不便于审计分析。java
固然,一些很差的操做习惯也可能经过命令历史泄露敏感信息。面试
下面咱们来介绍如何让history日志记录更细化,更便于咱们审计分析。spring
默认状况下以下图所示,没有命令执行时间,不利于审计分析。shell
经过设置export HISTTIMEFORMAT='%F %T ',让历史记录中带上命令执行时间。windows
注意”%T”和后面的”’”之间有空格,否则查看历史记录的时候,时间和命令之间没有分割。安全
要一劳永逸,这个配置能够写在/etc/profile中,固然若是要对指定用户作配置,这个配置能够写在/home/$USER/.bash_profile中。bash
本文将以/etc/profile为例进行演示。intellij-idea
要使配置当即生效请执行source /etc/profile,咱们再查看history记录,能够看到记录中带上了命令执行时间。ide
若是想要实现更细化的记录,好比登录过系统的用户、IP地址、操做命令以及操做时间一一对应,能够经过在/etc/profile里面加入如下代码实现工具
export HISTTIMEFORMAT="%F %Twho -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'``whoami
",注意空格都是必须的。
修改/etc/profile并加载后,history记录以下,时间、IP、用户及执行的命令都一一对应。
经过以上配置,咱们基本上能够知足平常的审计工做了,但了解系统的朋友应该很容易看出来,这种方法只是设置了环境变量,攻击者unset掉这个环境变量,或者直接删除命令历史,对于安全应急来讲,这无疑是一个灾难。
针对这样的问题,咱们应该如何应对,下面才是咱们今天的重点,经过修改bash源码,让history记录经过syslog发送到远程logserver中,大大增长了攻击者对history记录完整性破坏的难度。
首先下载bash源码,能够从gnu.org下载,这里不作详细说明了,系统须要安装gcc等编译环境。咱们用bash4.4版本作演示。
修改源码:bashhist.c
修改源码config-top.h,取消/#define SYSLOG_HISTORY/这行的注释
编译安装,编译过程不作详细说明,本文中使用的编译参数为: ./configure --prefix=/usr/local/bash,安装成功后对应目录以下:
此时能够修改/etc/passwd中用户shell环境,也能够用编译好的文件直接替换原有的bash二进制文件,但最好对原文件作好备份。另外,关注公众号Java技术栈,在后台回复:面试,能够获取我整理的 Java/ Linux 系列面试题和答案,很是齐全。
替换时要注意两点:
一、必定要给可执行权限,默认是有的,不过有时候下载到windows系统后,再上传就没有可执行权限了,这里必定要肯定,否则你会后悔的;
二、替换时原bash被占用,能够修改原用户的bash环境后再进行替换。
查看效果,咱们发现history记录已经写到了/var/log/message中。
若是要写到远程logserver,须要配置syslog服务,具体配置这里不作详细讲解,你们本身研究,发送到远端logserver效果以下图所示。
经过以上手段,能够有效保证history记录的完整性,避免攻击者登陆系统后,经过取消环境变量、删除history记录等方式抹掉操做行为,为安全审计、应急响应等提供了完整的原始数据。
来源:悬镜安全实验室
地址:http://lab.xmirror.cn/2017/05/26/sdlwdzj/
近期热文推荐:
1.600+ 道 Java面试题及答案整理(2021最新版)
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.阿里 Mock 工具正式开源,干掉市面上全部 Mock 工具!
4.Spring Cloud 2020.0.0 正式发布,全新颠覆性版本!
以为不错,别忘了随手点赞+转发哦!