当企业被攻击者入侵, 系统被挂暗链, 内容遭到恶意篡改, 服务器出现异常链接, 卡顿等情况时, 需要进行紧急处理, 使系统在最短时间内恢复正常. 由于应急处理往往时间紧, 所以尝试将应急中常见处理方法整合到脚本中, 可自动化实现部分应急工作. 应急脚本采用 python2.0 完成, 由于所有需要执行的命令都是依靠 SSH 进行远程链接, 所以在运行脚本之前, 需要输入正确的主机 ip 地址, SSH 远程连接端口, SSH 远程登录账户, SSH 远程登录密码.
一, 脚本实现的主要功能
1, 获取主机信息
获取的主机信息包括: 主机 ip 地址, 主机名, 当前系统内核版本, 当前系统版本, 系统当前时间;
2, 获取异常进程
获取异常进程主要是采用两种方式, 第一种, 通过执行 netstat -antp 获取当前主机存在哪些链接, 并通过判断外部链接地址归属地, 如果归属地不是中国, 则会提取相关 pid, 并根据 pid 定位出文件所在位置. 第二种, 通过 CPU 占有率, 一旦发现 CPU 占用率高于 %15 时, 会提取对应程序的 pid, 根据 pid 定位异常文件位置.
3, 判断常见命令是否被篡改
在之前的应急响应中出现过常见命令被非法篡改情况, 如 ps,netstat 命令被恶意替换, 利用 stat 查看文件详细信息, 通过比对时间的方式判断命令是否被篡改.
4, 查看系统启动项
很多恶意程序会修改系统启动项, 这样即使系统进行重启时, 恶意程序也能自动启动, 查看 init.d 目录下的启动文件, 根据修改时间提取最近被修改的启动文件, 并根据时间排序列出前 5 个.
5, 查看历史命令
查看. bash_history 历史命令, 通过匹配关键字, 如 wget,cur 等, 来查看系统在被入侵后是否被执行了恶意操作.
6, 判断非系统默认账户
恶意程序可能会在系统中新建账户, 通过查看 login.defs 文件获取最小 uid, 从而根据 uid 查看 passwd 文件, 获取之后新建的系统用户.
7, 获取当前登录用户
通过调用 who, 查看当前登录用户 (tty 为本地登录, pts 为远程登录), 判断是否存在异常用户登录情况.
8, 查看系统当前用户
通过查看 etc/passwd, 查看相关用户信息, 确定是否存在异常用户.
9, 查看 crontab 定时任务
查看 / etc/crontab 定时任务, 并将输出结果保存到 log 中
10, 查看, 保存最近三天系统文件修改情况
通过 find 命令, 查找最近三天修改过的文件, 由于修改的系统文件较多, 所以修改文件被单独保存在本地 file_edit 文件中
11, 查找特权用户.
查看 passwd 文件, 查找用户 id 为 0 的特权用户
12,secure 日志分析
日志分析是应急的重头工作, 尤其是在应急后期的溯源阶段, 日志分析更显得尤为重要, 由于日志种类包括服务器日志, 应用日志, 此处只是分析了 secure 服务器日志, 提取日志的 ip 地址进行判断, 并对 ip 归属地进行判断, 查看的 secure 日志单独保存在本地 secure 中.
脚本运行后输出如下信息:
最终在当前目录下生成如下文件
脚本运行完毕后, 在当前目录下生成 log.txt, 记录脚本检查结果:
同时在当前目录下生成的 netstat.txt, 保存系统链接情况
当前目录下 secure.txt, 记录当前 secure 日志
当前目录下 file_edit.txt. 记录最近三天文件修改情况
脚本整体的思路比较简单, 就是远程登录到 Linux 执行常见的应急命令, 脚本中的命令在 CentOS 下都是可正常运行的, 可以在根据实际环境自行在对命令做调整. 上面的部分功能如果有好的实现方法也可灵活调整, 如判断常见命令是否被篡改, 脚本中是根据时间进行判断, 在实际应用中也可根据文件大小进行判断.
最后, 代码整体写的比较渣, 有意见欢迎大家多多指出, 希望通过改进能让功能更加完善.
链接地址: https://github.com/tide-emergency/yingji
二, 参考资料
在编写此脚本中的很多命令都是借鉴了大牛的的一些经验, 多谢大牛的分享, 具体参考链接如下:
- https://github.com/grayddq
- https://github.com/T0xst/linux
来源: http://www.tuicool.com/articles/QRZ7raR