
引言本文内容为本人学习应急响应做的笔记操作均在虚拟机中完成若要复现请自行搭建虚拟机完成遵守网络安全法规因为是初学者难免会出现错误若内容有误请诸位博友指出。1. 应急响应介绍应急响应是指当计算机系统、网络或信息资产发生安全事件时安全人员通过一系列规范化流程对事件进行发现、分析、处置、恢复和总结的过程。简单来说就是发现安全问题 → 判断发生了什么 → 控制影响 → 清除威胁 → 恢复业务 → 总结改进应急响应的核心目标是尽可能降低安全事件造成的损失并防止类似事件再次发生。1.1. 什么是安全事件常见的安全事件包括服务器被入侵网站被篡改WebShell、后门程序被植入木马、勒索软件感染数据泄露内网横向移动恶意账号登录DDoS 攻击挖矿程序运行异常网络连接或数据外传1.2. 应急响应的基本流程常见的应急响应流程可以概括为六个阶段1. 准备阶段Preparation在安全事件发生之前进行准备例如建立安全应急响应流程准备日志、监控和告警系统部署安全设备建立备份机制准备应急响应工具明确人员职责2. 事件发现与确认Identification通过日志、告警或异常行为发现安全事件。例如CPU 使用率异常升高服务器出现未知进程网站页面被篡改出现异常登录 IP网络流量突然增加EDR、IDS、IPS 产生安全告警此阶段的重点是判断是否真的发生了安全事件攻击影响范围有多大3. 分析与溯源Analysis确认事件后需要分析攻击行为例如攻击者如何进入系统入侵时间是什么时候利用了什么漏洞是否存在 WebShell 或后门是否创建了恶意账号是否进行了横向移动是否存在数据泄露常见分析对象包括系统日志Web 日志登录日志网络流量进程信息文件系统内存数据4. 遏制与隔离Containment在确认攻击后首先需要控制攻击范围避免事件继续扩大。例如隔离受感染主机禁止异常 IP 访问关闭存在漏洞的服务禁用异常账号切断恶意网络连接需要注意的是应急响应中通常不建议发现异常后立即删除所有文件因为可能破坏攻击证据。5. 清除与恢复Eradication Recovery在控制攻击后需要彻底清除攻击者留下的恶意内容例如删除恶意程序清理 WebShell删除恶意账号修复漏洞修改泄露的密码和密钥清除恶意计划任务恢复被篡改的数据之后通过备份或修复系统恢复正常业务。6. 复盘与总结Lessons Learned安全事件结束后需要进行复盘形成完整的应急响应报告。通常包括事件发生时间事件发现方式攻击过程攻击影响范围攻击原因处置过程损失情况后续安全加固措施最终目标是不仅解决这一次攻击还要提高系统抵御下一次攻击的能力。2. web入侵常见的web入侵有SQL 注入、文件上传、WebShell 入侵、远程代码执行RCE、目录扫描等手段。在web入侵事后处理过程中,如果我们知道攻击者在什么时候并进行了什么操作,我们就能缩小排查的范围,更加精准地锁定攻击者。2.1 文件排查情景:现在客户告知某Web系统在昨天发现被篡改了。当前这种掌握了具体时间点的情况下第一时间可以检查最近修改的文件操作前的准备设置当前时区为后面修改文件的时间做铺垫sudo timedatectl set-timezone Asia/Shanghai创建实验要用的文件指令说明#方式一 # 创建一个指定修改时间的 PHP 文件 touch -d YYYY-MM-DD HH:MM:SS file.php #方式二 # 创建一个指定多少时间前修改的 PHP 文件基于当前时区时间往前推算 touch -d $(date -d N units ago %Y-%m-%d %H:%M:%S) file.php具体用方式一也行:#创建一个小时前修改的文件 touch -d $(date -d 1 hours ago %Y-%m-%d %H:%M:%S) file1.php #创建一天前修改的文件 touch -d $(date -d 1 days ago %Y-%m-%d %H:%M:%S) file2.php #创建两天前修改的文件 touch -d $(date -d 2 days ago %Y-%m-%d %H:%M:%S) file2.php #创建三天前修改的文件 touch -d $(date -d 3 days ago %Y-%m-%d %H:%M:%S) file3.php #创建四天前修改的文件 touch -d $(date -d 4 days ago %Y-%m-%d %H:%M:%S) file4.php现在开始查找有没有可疑的木马文件# 查找当前目录递归 24小时内修改的php文件推荐写法 find ./ -type f -mtime -1 -name *.php # 查找 24~48小时1~2天区间修改的php文件 find ./ -type f -mtime 1 -name *.php # 查找 48小时内最近2天所有修改的php文件 find ./ -type f -mtime -2 -name *.php # 查找修改时间超过48小时2天以上的php文件 find ./ -type f -mtime 1 -name *.php通过find去递归查找可疑的文件进行排查。2.2 中间件日志情景我们了解到目前Web应用采用的中间件是Apache那我们就可以通过分析日志排查可疑的入侵路径同时找到WebShell。查看apache配置文件路径#查看中间件httpd位置 which httpd #查看文件真实地址因为which查询的可能是软链/快捷方式 ls -l [which httpd的地址]查看apache配置文件往下找发现一个访问日志CustomLog指定 Apache 记录访问日志的位置和格式。/www/wwwlogs/access_log访问日志文件的保存路径。common使用 Apache 的Common Log Format通用日志格式CLF。还发现个配置文件IncludeOptional加载指定路径中匹配的配置文件但如果文件不存在不会导致 Apache 启动失败。/www/server/panel/vhost/apache/宝塔面板 Apache 虚拟主机配置目录。*.conf加载该目录下所有以.conf结尾的文件。查看一下这个目录这个就是该网站的配置文件查看一下里面有这个网站的报错日志和访问日志的路径以及文件命令格式直接查看这个访问日志使用grep查找一下跟sql注入有关的记录grep -o sqlmap www.example1.com-*.log |uniq -c #grep 文本搜索命令 #-o 只输出匹配到的内容而不是输出整行 #sqlmap 要搜索的字符串区分大小写 #www.example1.com-*.log 通配符匹配所有以 www.example1.com- 开头、.log 结尾的文件 #uniq 过滤相邻的重复行只保留一份 #-c 在每行前面加上重复次数如果有攻击者进行了目录扫描一定会出现大量404信息那就可以查找跟404有关的日志grep -o 404 www.example1.com-*.log |uniq -c现在开始查看日志的详细信息那么就可以定位到这个攻击者的IP、操作和时间这个为用sqlmap进行sql注入攻击的部分日志这个为进行目录扫描的日志补充其他中间件的日志可以从其配置文件中查看得到3. 工具排查但是这个日志那么多人力太慢而且效率不高所以可以使用一些工具辅助我们。3.1 WebShell查杀工具常用的WebShell查杀工具有河马、D盾、WebShellKille等等以河马SHELLPUB.COM为例#.hm scan 扫描的网站目录 ./hm scan /www/wwwroot/www.example1.com查看这个result.csv文件查找与shell.php的日志3.2日志安全分析工具这里以360为例查看使用说明根据使用说明配置要分析的日志路径这里我是先将Ubuntu中的日志复制到新建的文件夹scan_log中具体步骤如下先在root用户下随便找几个日志将其复制到桌面文件夹cp www.example1.com-access_2023120514.log www.example1.com-access_2023120618.log /home/cms/Desktop/test然后添加给这几个日志添加权限不然权限不够复制不了chmod 777 www.example1.com-access_*.log然后将其复制到我新建的文件夹scan_log中现在配置扫描目录绝对路径ok现在开始扫描点击这个批处理脚本即可根据提示在result文件夹中查看这里分别点击查看一下效果效果也是非常不错的。3.3 溯源在网络安全领域溯源Attribution / Traceback通常指通过日志、流量、主机行为、恶意代码和威胁情报等证据还原攻击路径并逐步追踪攻击来源、攻击基础设施乃至攻击者或攻击组织的过程。溯源有三要素ip端口与时间。根据前文的操作已经可以成功分析得出攻击路径、观察攻击者IP信息、直接利用IP定位其地址。然而目前的现象为其IP地址一直在变化很显然此攻击者使用了代理因此期望成功追踪黑客的IP并不总是可行的基本上找不到攻击者真实IP。这种情况非常复杂一般就放弃了直接封大量IP此时追寻攻击者真实IP可行的思路有对攻击IP利用C段扫描、whois反查域名等方式进行详细信息收集获取更多信息。如利用威胁情报平台https://x.threatbook.com/搜索攻击IP就能看到这个IP的具体信息图中为该平台的热门情报4. 操作系统入侵操作系统入侵通常是指攻击者通过系统漏洞、弱口令、错误配置、恶意程序等方式未经授权获得操作系统访问权限并进一步执行控制、提权、持久化、横向移动或数据窃取等行为。作为蓝队方操作系统的入侵排查则是必修课基本流程可参考下图4.1 Linux系统入侵这里的话就以Linux系统为例。靶机Ubuntu场景1模拟攻击者视角对该系统进行入侵这里采用ssh登录密码弱口令爆破#攻击机kali 工具msfconsole #指令 $msfconsole #启动工具 search ssh_login #模糊查询ssh_login攻击模板 use 0 #使用查询结果中序号为0的模板 show options #显示配置,查看需要配置哪些项 set rhosts ip #配置目标机这里为靶机ip set username root #设置登录名可选 set pass_file passwd.txt #设置爆破的密码本 run连接靶机方式一直接使用得到的会话 sessions #显示攻击成功的所用会话 sessions 1 #使用会话列表中序号为1的会话方式二使用ssh登录密码使用刚刚爆破得到的ssh rootip开始创建后门用户新增用户useradd hack #新增用户名为hack passwd hack #给用户hack设置密码为新增用户添加sudo权限vim /etc/sudoers #使用vim编辑sudoers文件赋予hack用户root权限#使用vim编辑passwd vim /etc/passwd #在最后一行将hack的用户信息修改如下形式 hack:x:0:0::/home/hack:/bin/bash #修改uid和gid跟root账户一样添加登录shell测试以下是否成功ssh hackip #使用hack这个后门用户登录登录成功显示为root账户这个类型于windows的影子用户后续攻击者则可使用该后门账户实现持续性攻击。4.2 排查4.2.1 系统日志排查排查跟爆破有关的记录grep -a Failed password /var/log/auth.log | awk {print $11} | sort | uniq -c | sort -nr #grep 文本搜索工具 #-a 将二进制文件当作文本处理避免特殊字符干扰 #Failed password 搜索SSH认证失败的日志条目 #/var/log/auth.log Ubuntu系统的认证日志文件 #awk 文本处理工具按字段分割 #{print $11} 打印第11个字段默认以空格分隔 #sort 将IP地址按字母顺序排序使相同IP相邻 #uniq -c 统计每个IP出现的次数输出次数 IP格式 #sort -nr 按次数降序排列-n数字排序-r倒序排查登录成功的记录查看登录ipgrep -a Accepted /var/log/auth.log | awk {print $11} | sort | uniq -c | sort -nr | more #grep -a Accepted 搜索包含 Accepted 的日志行SSH成功认证 #/var/log/auth.log Ubuntu/Debian认证日志文件 #awk {print $11} 提取第11个字段IP地址 #sort 排序使相同IP相邻 #uniq -c 统计每个IP出现次数 #sort -nr 按次数降序排列 #more 分页显示防止输出太长查看整条记录grep Accepted /var/log/auth.log查看登录用户名与ipgrep Accepted /var/log/auth.log |awk {print $9,$11}|uniq -c4.2.2 用户信息排查根据之前后门用户创建的过程修改/etc/passwd和/etc/sudoers文件使得hack用户变得跟root用户一样。那么排查则可以查看这两个配置文件来判断。查看uid和gid都是0的用户grep 0:0 /etc/passwd找出使用 MD5$1或 SHA-512$6加密的用户并显示用户名。more /etc/sudoers | grep -v ^#\|^$ | grep ALL(ALL:ALL) #分页查看 /etc/sudoers 文件 #grep -v ^#\|^$ 排除所有注释行和空行 #找出所有包含 ALL(ALL:ALL) 这个字符串的行可采取措施#强制用户下线 pkill -KILL -u hack #禁用用户 usermod -L hack #恢复用户 usermod -U hack #删除用户 userdel hack #删除用户与主目录 userdel -r hack但是因为hack这个后门账户配置成 UID0导致常规按“用户名对应唯一 UID”的账户管理流程无法正常处理所以这些指令删除不了hack这个用户。那么直接强制从配置文件下手,删除这些配置文件中跟hack这个后门用户有关的所有配置信息/etc/passwd/etc/shadow/etc/sudoers/etc/group检查是否删除干净# 检查用户是否存在 getent passwd hack # 检查密码认证记录 sudo getent shadow hack # 检查用户组 getent group hack # 检查 sudo 授权 sudo grep -Rnw hack /etc/sudoers /etc/sudoers.d 2/dev/null # 检查id id hack4.2.3 历史命令留证#查看当前用户历史操作 history #查看hack用户历史操作 cat /home/hack/.bash_history #为了不让后续的命令影响可先将记录导出然后分析history cat /home/hack/.bash_history history.txt注意新用户未执行过任何命令或者执行命令但没退出当前SSH连接会话对应用户bash_history文件不存在。就算存在也可能不会马上更新执行的命令记录。待续....