Linux 主机入侵排查和应急响应 2024-06-22 10:34:13 Steven Xeldax > 在甲方的时候经常会遇到各种安全事件,其中不管是EDR、HIDS对主机安全告警,还是网络层发现了内部出现了恶意域名的访问或者是dnslog的安全事件,这种是情况下往往需要我们对主机进行安全排查。关于主机排查和应急响应的文章有很多,这里主要对常见的体系进行一下梳理,以备日后按照SOP已经排查。 ![](/download/e8443286-eaf2-4880-bd80-9a771c9696b4.png) [TOC] ## 一、Linux 主机入侵排查 ### 基本信息收集 这一部分的环节主要是收集一些linux主机的常用信息,为全面了解主机情况进行收集。 Linux系统版本 查看linux系统的版本 ``` cat /etc/os-release cat /etc/lsb-release cat /etc/issus ``` ![](/download/f0179827-564d-43f9-a9af-914b2ab5361c.png) 内核版本号 ``` uname -a ``` ![](/download/e1f6ee63-7764-4f41-b698-f717f65c3a85.png) CPU信息 ``` lscpu cat /proc/cpuinfo ``` ![](/download/4d5bd048-4e72-4883-9888-ca0fae03cf3a.png) 硬盘信息 ``` df -h ``` ![](/download/7611b535-489f-4cee-8c20-1aa070d42ad5.png) 文件IO信息 ``` iostat lsof ``` 内核模块信息 ``` lsmod ``` 监听端口 ``` netstat -lntp nestat -tuln ``` 运行进程 ``` ps -ef ps aux ``` 连接中的网络信息netstat ``` netstat -antup ``` 当前各个运维指标状态(cpu,内存,网络,io) ``` top htop ``` 用户 /etc/passwd ``` cat /etc/passwd ``` 组 /etc/group ``` cat /etc/group ``` sudo 文件 ``` cat /etc/sudoers ``` 计划任务crontab ``` crontab -l find /etc/cron* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {} \; find /var/spool/cron/* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {}\ ; ``` 服务services/systemd ``` systemctl list-units --type=service systemctl list-units --type=service | grep running sudo systemctl status find /usr/lib/systemd* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {} \; ``` 开机自启动项目 ``` find /etc/rc* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {} \; ``` 无文件相关 ``` ls -al /dev/shm* ``` SSH信息:当前连接的ssh session ``` w who ``` SSH 信息:/home 目录下用户数量 ``` ls /home ``` SSH信息:每个用户下的bash_history ``` cat /home/*/.bash_history ``` SSH信息:SSH历史登录记录 ``` lastlog last cat /var/log/auth.log | grep sshd ``` ### 业务层面分析 在收集基本信息之后我们需要定位这台主机的一些业务属性,从业务的层面去分析。 该主机运行了哪些的业务,这些业务具体是做什么的,这个其实需要业务方和运维去做回答,安全同学就负责根据来摸清这台主机业务上做的所有事情就行,这一部分是至关重要的因为有一些安全告警可能是业务的运行中所带来触发的误报,运行业务的情况务必需要了解清楚。 业务服务的进程,去定位这些业务具体是哪些进程在跑,如果进程有网络通信和端口监听,关于网络的链路也需要进行排摸。比如该业务是一台非常后台的大数据处理业务,那么上面的处理的数据流转和网络流转是否是从前台来的,曾经遇到过前台一个log4j payload 经过兜兜转转最后在一台安全waf处理的elasticsearch被执行,单纯从这台主机去看去分析可能很难定位到源头,所以还需要摸清整个业务流转和网络链路。 定位业务日志的位置。业务日志中可能存在一些报错、可疑痕迹可以辅助应急响应人员进行判断。 ### 日志层面分析 除了业务日志,linux主机上的其他应用日志和系统本身日志也需要查看。常见的日志有: ``` /var/log/cron 记录了系统定时任务的日志 /var/log/cups 记录了打印信息的日志 /var/log/messages 内核以及公共消息日志 /var/log/dmesg 系统内核驱动日志,引导日志 /var/log/maillog 邮件日志 /var/log/lastlog 用户登录日志 /var/log/syslog syslog日志 /var/log/boot.log 记录系统在引导过程中发生的时间 /var/log/secure 用户验证相关的安全性事件 /var/log/wtmp 当前登录用户详细信息 /var/log/btmp 记录失败的的记录 /var/run/utmp 用户登录、注销及系统开、关等事件 ``` ### 进程层面分析 进程层面主要看运行中的进程文件是否可信,有没有存在后门或者木马程序。可用的方法有: 实时用AV/EDR 对进程文件进行扫描 存在可疑外联的非业务进程 和其他业务主机diff ps -ef的结果 提取进程文件hash 提交威胁情报比对 ``` #!/bin/bash # 获取当前运行进程的PID列表 pids=$(ls /proc | grep "^[0-9]*") # 遍历每个PID,获取对应进程的可执行文件路径并计算MD5 for pid in $pids; do exe_path=$(readlink /proc/$pid/exe 2>/dev/null) if [ -n "$exe_path" ]; then md5sum "$exe_path" fi done ``` ![](/download/f43fe96e-e89a-4d2e-be42-1c7cd11999cd.png) ![](/download/984af230-ed39-4047-9705-2147ff95572f.png) ### 文件层面分析 文件层面的分析主要:寻找可疑文件 + 利用EDR、AV等工具扫描是否存在恶意文件 查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性 针对可疑文件可以使用stat查看创建修改时间 如何找出同一时间范围内创建的文件? ``` find ./ -iname "*" -atime 1 -type f #找出 ./ 下一天前访问过的文件 ``` 思路上可疑找到是否存在最近1周内落地的ELF 文件,如果存在则计算MD5丢给威胁情报比对下,或者进行人工二进制分析。 ``` #!/bin/bash # 指定要搜索的目录 search_dir="/path/to/search/directory" # 找到最近一周内修改过的文件,并逐一处理 find "$search_dir" -type f -mtime -7 | while read file; do # 检查文件是否为ELF格式 if file "$file" | grep -q "ELF"; then # 如果是ELF文件,计算MD5值 md5sum "$file" fi done ``` ### 网络层面分析 网络层上可以从下面角度: 外联IP提交威胁情报比对 EDR HIDS 网络日志 是否存在非预期连接中的IP,并非业务使用 NIDS,NTA日志上是否有异常,如果啥都没可以用tshark,tcpdump进行抓包,或者用ecapure进行抓包,当然这些工具需要进行安装或者上传 ## Linux主机应急响应 有了对于主机的排查的方法,那么在遇到实际的应急响应情况就需要按照场景进行细分。 1.事件来源 一般而已需要引起linux主机排查的来源有: EDR,HIDS,AV主机安全软件告警 NIDS,NTA 网络安全软件告警 dnssec 设备告警 员工异常行为 SRC 报告 攻击通报或者收到了威胁情报 2.事件分类 挖矿事件 勒索病毒 远控后门 暴力破解 可疑流量,非持续性事件 供应链攻击 3.事件处置SOP 参考NOP Team 的应急响应手册Linux版本 ## 题外话:如何判断一个服务器是否有风险 除了遇到应急响应的需求的时候需要对主机排查,最近也有遇到业务方提需求需要对他们的主机进行排查是否存在风险。那么如何判断一个服务器是否有风险,除了一些安全强制要求的EDR、HIDS 主机安全软件安装在主机进行扫描和监控以外。我们也可以参考应急响应的流程反向的寻找是否存在恶意、可疑的地方,当然如果软件都不允许安装去判断一个服务器是否具有风险,那么在这种情况下判断的结果其实也就是做个样子真的能检查全面了。 ## 应急响应自动化脚本 https://github.com/al0ne/LinuxCheck/tree/master ``` #!/bin/bash echo "======Linux 主机入侵排查/应急响应脚本======" echo "查看linux系统的版本" cat /etc/os-release cat /etc/lsb-release cat /etc/issus echo "内核版本号" uname -a echo "CPU信息" lscpu cat /proc/cpuinfo echo "内存信息" free -h echo "硬盘信息" df -h echo "文件IO信息" iostat lsof echo "内核模块信息" lsmod echo "环境变量信息" env echo "监听端口" netstat -lntp nestat -tuln echo "运行进程" ps -ef ps aux echo "连接中的网络信息netstat" netstat -antup echo "当前各个运维指标状态(cpu,内存,网络,io)" uptime echo "cat /etc/passwd" cat /etc/passwd echo "cat /etc/group" cat /etc/group echo "cat /etc/sudoers" cat /etc/sudoers echo "计划任务crontab" crontab -l find /etc/cron* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {} \; find /var/spool/cron/* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {}\ ; echo "服务services/systemd" systemctl list-units --type=service | grep running sudo systemctl status find /usr/lib/systemd* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {} \; echo "开机自启动项目" find /etc/rc* -type f -exec sh -c 'echo CATFILE: $1;cat $1' _ {} \; echo "无文件相关" ls -al /dev/shm* echo "SSH信息:当前连接的ssh session" w who echo "SSH 信息:/home 目录下用户数量" ls /home echo "SSH信息:每个用户下的bash_history" cat /home/*/.bash_history echo "SSH信息:SSH历史登录记录" lastlog last cat /var/log/auth.log | grep sshd echo "遍历每个PID,获取对应进程的可执行文件路径并计算MD5" pids=$(ls /proc | grep "^[0-9]*") # 遍历每个PID,获取对应进程的可执行文件路径并计算MD5 for pid in $pids; do exe_path=$(readlink /proc/$pid/exe 2>/dev/null) if [ -n "$exe_path" ]; then md5sum "$exe_path" fi done echo "思路上可疑找到是否存在最近1周内落地的ELF 文件,如果存在则计算MD5丢给威胁情报比对下,或者进行人工二进制分析。" search_dir="/" # 找到最近一周内修改过的文件,并逐一处理 find "$search_dir" ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/boot/*" ! -path "/var/*" -type f -mtime -7 | while read file; do # 检查文件是否为ELF格式 if file "$file" | grep -q "ELF"; then # 如果是ELF文件,计算MD5值 md5sum "$file" fi done echo "查看隐藏文件" find / ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/boot/*" -name ".*." ``` ## 参考资料: http://www.mianhuage.com/1591.html https://blog.csdn.net/CHENSMALLYUN/article/details/132854821 https://mp.weixin.qq.com/s/m37xSBGUJqpZ43W-B3msvA https://github.com/Lorna-Dane/Blue-Team/blob/main/%E5%BA%94%E6%80%A5/linux%E5%BA%94%E6%80%A5%E5%93%8D%E5%BA%94%E6%89%8B%E5%86%8C.md https://wiki.wgpsec.org/knowledge/hw/linux-emergency-response.html