应急响应系统之 Linux 主机安全检查
我们在做主机安全检查或安全事件处置时,避免不了要去检查系统的安全情况。在进行 Linux 安全检查时,需要使用相关的脚本对系统的安全情况进行全面分析,一方面需要尽可能的收集系统的相关信息,另一方面在数量较多的时候尽可能的提高效率。由于在多次的安全检查中遇到检查时都是几十台服务器要做一个全面检查的情况,如果人工手写脚本的话,一方面效率较低另一方面需要安全检查者熟悉所需要检查的项。在这种情况下,本人写了一个 Linux 安全检查的脚本,该脚本主要在以下场景使用:
1、Linux 主机安全检查时
2、 Linux 主机发生安全事件需要全面分析时
该脚本完成有一段时间,最近在应急响应群里讨论,发现这块的安全检查是大家的一个强需求,因此把该检查脚本共享给大家,共享的目的主要以两个:一是提高大家在 Linux 安全检查时的效率,释放大家的精力;另一方面希望大家在使用的过程中可以不断地发现问题,不断的总结缺少的安全检查项,协助完善该检查脚本。所以大家在使用过程中有任何问题或建议欢迎及时同步给我。
检查内容
整体框架
关于 Linux 安全检查,这里面我总结主要需要检查以下内容:
1、系统安全检查(进程、开放端口、连接、日志等)
这一块是目前个人该脚本所实现的功能
2、 Rootkit
建议使用 rootkit 专杀工具来检查,如 rkhunter
3、 Webshell
这一块查杀技术难度相对较高,不是本脚本所需要实现的功能,针对这一块的检查可以使用 D 盾来检查 (Linux 下可以将 web 目录挂载到 Windows 下进行检查)
4、Web 日志
5、流量
这一块主要侧重主机的长期的流量分析,目前个人使用 tshark 实现了基础的流量分析,后期会进行相应的完善。流量这一块可以提取流量五元组、DNS 流量、HTTP 流量再结合威胁情报的数据进行深度分析。这个后期个人会进行相关的尝试,可能的话会进行相应内容的分享。
系统安全检查框架
功能实现
功能设计:
V1.0 主要功能用来采集信息
V1.1 主要功能将原始数据进行分析,并找出存在可疑或危险项
V1.2 增加基线检查的功能
V1.3 可以进行相关危险项或可疑项的自动处理
目前到 V1.2 版本,后期完善 V1.3 相关的功能。
另外,操作上可以实现一键进行安全检查,并将检查后的结果保存到本机。只需要在hosts文本中输入相应的IP、账号、密码。操作上人工参与最小化。
各脚本功能说明
下载后相关整个脚本的目录结构如下所示:
checkrulues
: 部分判断逻辑,这里面目前仅有端口的判断逻辑,后期可以将进程、应用程序是否有漏洞等逻辑放在这里面进行安全检查,比较简单的判断逻辑直接在 buying_linuxcheck.sh 中可以实现
buying_linuxcheck.sh
: 核心检查逻辑
del.exp
: 删除远程服务器上的脚本与检查结果
get.exp
: 获取远程服务器上安全检查的结果
hosts.txt
:需要被检查的服务器列表
login.sh
:一键进行登录检查,安全检查时只需要运行该脚本即可
put.exp
:将安全检查脚本上传到远程服务器上
readme.txt
:使用相关说明文档
sh.exp
:在远程服务器上执行安全检查脚本
下面针对其中部分脚本进行介绍
Ø Checkrules
判断逻辑主要放在两个文件中:一个是 checkrules 中,格式为 dat,这里面建议将比较复杂的判断逻辑放在这里,如下面的 TCP 危险端口这块,因为比较多,如果放在 buying_linuxcheck.sh 中则代码有些冗长,下面是 TCP 高危端口的判断逻辑,主要还是根据木马默认使用的端口号,这里面判断的逻辑相对简单,可能会存在误报的情况,所以后续需要人工介入分析。
Ø buying_linuxcheck.sh
核心的功能收集与判断逻辑,比较简单的判断逻辑可以放在这里面进行判断。
使用
使用比较简单,将本脚本拷贝到自己一台 Linux 主机上,可以使用虚拟机,将需要被检查的服务器的 IP、账号、密码放到 hosts.txt 目录中,直接运行即可实现一键安全检查。
相关操作如下:
1、将需要被检查的服务器 IP、账号、密码写入到 hosts.txt 文件中,格式为
IP:port:user:userpassword:rootpassword
其中 user 为普通用户的账号,port 为 ssh 登录端口, uesrpassword 为普通账号的密码, rootpassword 为 root 的密码, 只所以加个普通用户是因为有的系统做了安全策略,不允许 root 直接登录,如果被检查的服务器允许 root 直接登录,可以直接把 user 和 userpassword 写成 root 以及 root 密码
这里面被检查的服务器允许 root 直接登录,因此直接写 root 账号和密码
2、 运行安全检查脚本, sh login.sh
安全检查脚本就在后台运行了,稍等…….
3、 看到删除远程服务器上的检查脚本与检查结果,就说明检查结束了
4、检查结束后,会将远程服务器上的结果保存到本地主机上
检查结果说明
检查结束后,将相应的结果解压后目录结构如下所示:
Ø Check_file
保存的是检查的最终结果,长这个样子……
Ø Log
目录中保存的是 Linux 系统日志,web 日志这块目前脚本没有实现自动打包的功能,原因就是 web 日志经常太大,并且保存的日志可能从运行到现在的所有日志,很多日志并不需要进行检查与分析,因此在检查时相关人员可以根据具体情况进行打包相应的日志
Ø danger_file.txt
保存的是在安全检查过程中发现的问题
Ø sysfile_md5.txt
保存的是系统关键文件或系统文件的 MD5 值,之所以将这些关键文件的 MD5 记录下来主要有两个功能:一是周期性的检查时,可以与第一次的结果进行对比,若有变动会提示;另一个是可以将这些关键文件的 MD5 值跑一下威胁情报库或 virustotal 以发现可能存在的系统文件被替换的情况。
代码下载
相关代码已上传到 github,有需要可自行下载,有问题也可以直接联系
https://github.com/T0xst/linux
- 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)
- Docker管理工具-Swarm部署记录
- 聊一聊大数据的问题和缺陷
- Flash/Flex学习笔记(13):对象拖动(startDrag/stopDrag)
- 原来Silverlight 4中是可以玩UDP的!
- Flash/Flex学习笔记(12):FMS 3.5之如何做视频实时直播
- Flash/Flex学习笔记(11):如何检测摄像头是否被占用
- Flash/Flex学习笔记(10):FMS 3.5之Hello World!
- Swarm基于多主机容器网络-overlay networks 梳理
- 未来AI可能会淘汰180万个工作岗位,你感到恐惧了吗
- css基础:把所有背景图都集成在一张图片上,减少图片服务器请求次数
- Docker可视化界面(Consul+Shipyard+Swarm+Service Discover)部署记录
- windows 2008上启用防火墙后sqlserver 2005经常出现连接超时的解决办法
- 重温delphi之控制台程序:Hello World!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Excel合并
- 自定义异常为什么性能差,我来告诉你
- GitHub比较火的springBoot实战项目
- LAMP架构应用实战—Apache服务介绍与安装02
- AWS lambda and dynamodb with Java
- 用设计模式搞定女朋友,吃什么火锅,设计模式不香吗
- LAMP架构应用实战—Apache服务基于IP的虚拟主机配置
- MySQL集群搭建—GTID方式
- MySQL主从复制集群搭建
- LAMP架构应用实战—Apache服务基于端口虚拟主机配置
- MySQL主从复制架构介绍
- MySQL行锁、表锁、间隙锁,你都了解吗
- LAMP架构应用实战—Apache服务mod_expires模块介绍
- SQL语句资源消耗分析-show profiles
- 如何找到垃圾SQL语句,你知道这个方式吗?