Linux应急响应实战:从日志分析到Redis未授权访问漏洞溯源 📅 2026/8/12 23:17:58 1. 项目概述一次完整的Linux应急响应实战演练最近在知攻善防实验室的应急响应训练靶场里我花了一个下午的时间完整地走了一遍Linux服务器被入侵后的应急响应流程。这个靶场模拟了一个非常经典的场景一台开发服务器dev被不明身份的攻击者攻破作为应急响应工程师你的任务就是从这台“失陷”的Linux靶机里像侦探一样抽丝剥茧找出攻击者的IP地址、邮箱和ID。整个过程没有复杂的工具链全靠对Linux系统的理解和一些基础命令非常适合刚接触安全或者想了解应急响应流程的新手朋友上手实践。我自己走完一遍后感觉对Linux日志分析、入侵痕迹排查的思路清晰了很多所以把整个实战过程、关键命令和踩过的坑都记录下来希望能帮你建立起一套属于自己的应急响应检查清单。这个靶机的核心价值在于它把一次真实的攻击事件Redis未授权访问导致SSH密钥写入拆解成了几个明确的目标让你不是漫无目的地乱翻而是带着问题去学习。你会学到如何从海量的系统日志里定位异常登录如何分析进程和网络连接发现后门以及如何从被篡改的系统文件中找到攻击者留下的“签名”。整个过程就像在玩一个技术解谜游戏但学到的都是实打实的、在真实护网行动或日常运维中能用上的技能。无论你是运维工程师、安全爱好者还是正在学习渗透测试的同学这套方法都能帮你更好地理解攻击与防御的对抗逻辑。2. 应急响应的核心思路与检查清单构建应急响应不是遇到问题就慌慌张张地乱试命令而是一场有预谋、有步骤的“现场勘查”。在真正动手操作之前我们必须先建立起清晰的排查思路。面对一台可能被黑的Linux服务器一个合格的应急响应工程师脑子里应该立刻浮现出一张检查路线图。这套思路的核心是“由外而内由近及远”优先排查最直接、最可能留下痕迹的入口点和近期活动。2.1 建立系统性的排查框架我的习惯是接到应急响应任务后首先问自己三个问题攻击可能从哪里进来攻击成功后通常会做什么攻击者可能留下了什么基于这三个问题可以梳理出以下排查优先级入口点分析这是追踪攻击源头的起点。需要检查所有对外的网络服务SSH、Web、数据库、缓存等的认证日志。用户与权限审计攻击者为了持久化控制常会创建隐藏用户或提升现有用户权限。这是必须检查的重灾区。进程与网络连接快照查看当前系统中所有正在运行的进程和网络连接寻找异常、未知或绑定在奇怪端口的程序。历史命令与文件变动检查用户尤其是root的命令历史以及近期被修改过的系统关键文件。计划任务与启动项攻击者维持权限的常见手段包括cron任务、systemd服务、rc.local等。可疑文件与痕迹筛查在全盘范围内寻找隐藏文件、最近创建或修改的可执行文件、以及Webshell等。这个框架的好处是即使你对某个具体漏洞不熟悉也能按图索骥一步步缩小范围最终定位到问题根源。在本次靶机演练中我们就是严格遵循这个逻辑来推进的。2.2 靶机环境与初始状态确认在开始分析之前我们需要先明确自己的操作环境。根据参考的实战记录分析者是从另一台IP为192.168.1.104的主机通过SSH连接到靶机IP推测为192.168.1.105进行操作的。当前登录的用户是defend然后通过su命令切换到了root权限。这是一个非常标准的应急响应操作姿势使用一个可信的、非root的账户登录在需要时再提权避免直接使用root账户操作可能带来的风险比如误操作或触发攻击者留下的root陷阱。注意在实际应急响应中如果条件允许第一件事应该是给受害服务器做完整的内存镜像和磁盘快照以便进行后续的离线深度分析避免在排查过程中破坏现场证据。本次靶场训练侧重于在线分析和思路学习因此我们直接在线上进行操作。确认自己拥有root权限后我们首先需要建立一个对系统当前状态的“基线”认知。你可以快速执行whoami、hostname、ip addr、uname -a等命令了解系统的基本信息。这有助于你在后续分析中判断哪些是正常项哪些是异常项。3. 第一步追踪攻击源头——定位黑客IP地址应急响应的首要任务往往是“找到谁干的”。在互联网上IP地址是定位攻击者最直接的线索之一。Linux系统详细记录了各种服务的登录尝试和成功记录我们的第一站就是检查这些日志。3.1 分析SSH安全日志 /var/log/secure对于通过SSH入侵的场景/var/log/secure日志文件在某些发行版中可能是/var/log/auth.log是黄金宝库。它记录了所有与身份验证相关的活动包括成功和失败的登录。直接使用cat或tail查看这个文件可能会信息过载。更高效的方法是使用grep过滤出关键信息。在靶机实战中使用了以下命令来提取成功的SSH登录记录grep Accepted /var/log/secure* | awk {print $1,$2,$3,$9,$11}我们来拆解一下这个命令grep Accepted /var/log/secure*在所有以secure开头的日志文件如securesecure-20240315等归档文件中搜索包含“Accepted ”注意后面有个空格的行这表示一次成功的SSH认证。awk {print $1,$2,$3,$9,$11}awk是一个强大的文本处理工具。这里它把每一行按空格分割成多个字段然后打印出第1、2、3、9、11个字段通常对应着日期、时间、主机名、登录用户名、来源IP地址。执行命令后我们看到了类似这样的输出Mar 18 20:23:07 root 192.168.75.129 Mar 20 14:28:21 defend 192.168.1.104关键分析点出现了第一条记录3月18日用户root从IP192.168.75.129成功登录。这是一个非常可疑的信号在规范的运维中极少会直接允许root通过SSH远程登录更常见的是用普通用户登录再su或sudo。因此这条来自非预期内网IP192.168.75.129的root直接登录记录极大概率就是攻击者的入口。第二条记录3月20日用户defend从IP192.168.1.104登录。这是我自己的分析机属于正常的管理员登录。至此我们找到了第一个关键答案黑客的IP地址疑似为192.168.75.129。在靶场环境中提交这个IP通常就能通过第一道关卡。实操心得在实际环境中攻击者可能使用代理、跳板机或Tor网络IP地址可能是伪造的或无法追溯的。但记录下这个IP仍然至关重要它可以用于在防火墙封禁、威胁情报查询如Virustotal、微步在线以及关联分析其他可能遭受攻击的资产。3.2 扩展思路其他入口点日志检查SSH只是最常见的入口之一。一个全面的排查还应该检查其他服务日志Web入侵检查Web服务器日志如Nginx的/var/log/nginx/access.log Apache的/var/log/apache2/access.log寻找异常的URL请求、SQL注入、文件上传等攻击模式。数据库入侵如果运行MySQL/PostgreSQL检查其通用日志或慢查询日志寻找异常的连接和查询语句。其他服务像FTP、Telnet极不推荐使用、Redis、Memcached等服务的日志也不应忽略。在本次靶机中我们通过后续分析发现攻击与Redis有关但第一步从SSH日志找到IP是最快捷的路径。4. 第二步权限维持排查——寻找后门账户与异常进程攻击者进入系统后为了长期控制一定会想办法留下“后门”。常见的后门形式包括创建隐藏用户、植入恶意进程、设置计划任务等。我们的第二步就是清理这些“潜伏者”。4.1 检查系统用户 /etc/passwd/etc/passwd文件存储了所有用户的基本信息。攻击者可能会创建一个UID为0root权限的隐藏用户或者将一个普通用户的shell从/sbin/nologin改为/bin/bash。使用cat /etc/passwd命令查看所有用户。在靶机中我们看到了从root到redis等一系列用户。需要逐行审视重点关注UID为0的用户除了root是否还有其他用户UID是0异常的shell是否有用户的登录shell被改成了/bin/bash或/bin/sh而它本不该有如redis、nginx等服务账户陌生的用户名是否有像hacker、backdoor、test这类明显可疑或不在你认知范围内的用户名在本次检查中用户列表看起来是正常的没有发现明显的可疑用户。但这并不意味着安全因为攻击者可能使用了更隐蔽的手法比如在用户名中间插入不可见字符或者直接修改了/etc/shadow文件给现有用户如redis添加了密码。排查技巧可以使用awk -F: $30{print $1} /etc/passwd快速列出所有UID为0的用户。对于更隐蔽的隐藏用户可以检查/etc/passwd和/etc/shadow的权限应为644和400/600并用ls -la /etc/passwd查看文件大小和修改时间是否异常。4.2 检查当前进程与网络连接如果后门是一个持续运行的进程如挖矿木马、反弹shell那么通过ps和netstat命令就能发现端倪。查看进程使用ps -aux或ps -ef查看所有进程。需要关注高CPU/内存占用的未知进程挖矿木马的典型特征。奇怪的进程名或路径进程名是随机字符串或者路径在/tmp、/dev/shm等临时目录。伪装成系统进程比如进程名是kthreadd/1、ksoftirqd/0的变体但PID或参数不对。查看网络连接使用netstat -anltup或更现代的ss -tulnp命令。关注对外建立的未知连接特别是连接到陌生IP和端口的ESTABLISHED连接。监听在非标准端口的服务除了22SSH、80HTTP、443HTTPS等是否有其他端口在监听可能是攻击者开启的后门端口。隐藏端口的进程使用-p参数可以显示占用端口的进程名和PID帮助关联。在靶机中执行ps -aux和netstat -anltup后没有发现明显的异常进程或网络连接。这说明攻击者可能没有留下常驻内存的后门或者后门非常隐蔽例如通过内核模块rootkit隐藏。另一种可能是攻击者只是进行了“一次性”的入侵操作比如写入SSH密钥然后就退出了这更符合“留后门”而非“常驻控制”的模式。5. 第三步行为回溯与痕迹分析——历史命令与文件篡改当实时进程和网络连接中没有发现异常时我们就需要转向“考古学”查看攻击者登录后执行了哪些命令以及修改了哪些系统文件。5.1 检查命令历史记录在Linux中用户执行的命令通常会被记录在~/.bash_history文件中对于root用户是/root/.bash_history。这是了解攻击者行为的绝佳窗口。直接使用history命令或cat ~/.bash_history查看。在靶机中我们看到了如下记录1 ls 2 chmod x /etc/rc.d/rc.local 3 cat /etc/rc.d/rc.local 4 vim /etc/rc.d/rc.local 5 echo flag{thisismybaby} 6 exit ...这是一个关键发现攻击者执行了chmod x /etc/rc.d/rc.local这赋予了该文件可执行权限。rc.local是系统启动时会自动执行的一个脚本文件修改它通常是为了实现权限维持开机自启后门。攻击者用vim编辑了这个文件。攻击者执行了echo flag{thisismybaby}。这看起来像是靶机作者故意留下的第一个flag但在真实攻击中这可能是攻击者测试命令执行成功与否或是留下自己的“签名”。注意事项狡猾的攻击者会清空历史记录history -c或echo ~/.bash_history。如果发现历史记录异常简短或者刚好在可疑时间点被截断这本身就是一个强烈的入侵信号。此外有些攻击者会通过设置HISTCONTROLignorespace并在命令前加空格的方式让命令不记录到历史中。5.2 分析被篡改的系统文件从历史记录中我们锁定了/etc/rc.d/rc.local这个文件。让我们查看其内容cat /etc/rc.d/rc.local输出如下#!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES ... # flag{kfcvme50} touch /var/lock/subsys/local第二个flag出现了flag{kfcvme50}。攻击者将flag写入了rc.local文件。在真实攻击中这里写入的很可能是一段下载并执行恶意脚本的命令或者是一个反向连接的后门命令。这证实了攻击者确实试图通过开机自启进行权限维持。既然攻击者修改了启动项我们自然要检查其他常见的权限维持位置Cron计划任务检查/etc/crontab、/etc/cron.d/、/etc/cron.hourly/daily/weekly/monthly/以及各个用户的crontab -l特别是root用户。Systemd服务检查/etc/systemd/system/下是否有新增的、可疑的.service文件。Profile文件检查/etc/profile、/etc/profile.d/*.sh、~/.bashrc、~/.bash_profile等攻击者可能在其中添加了恶意命令。在靶机中我们暂时没有在其他地方发现异常但rc.local的修改已经是一条非常清晰的线索。6. 第四步入侵路径还原——Redis未授权访问漏洞利用分析现在我们已经知道攻击者做了什么修改启动项也找到了他留下的“签名”flag。但他是怎么进来的这是我们需要还原的入侵路径。回顾之前的线索SSH日志显示root从陌生IP登录但系统里没有新增可疑用户。那么攻击者是如何获得root密码或者免密登录权限的呢一个常见的思路是攻击者利用了某个服务的漏洞直接或间接地获取了root权限。回顾之前查看/etc/passwd时我们注意到最后一个用户是redis。这提示我们这台服务器上可能运行着Redis服务。6.1 检查Redis服务状态首先用netstat -anltup | grep 6379检查Redis默认端口6379是否开放。在靶机中当时并未发现6379端口在监听。这可能是因为Redis服务没有启动或者被配置为监听在其他端口。我们尝试手动启动Redis服务redis-server。服务成功启动并显示监听在6379端口。这说明Redis组件是存在的只是没有设为开机自启。6.2 利用Redis未授权访问漏洞Redis如果配置不当例如默认安装后未设置密码且绑定在0.0.0.0就会产生“未授权访问漏洞”。攻击者可以直接连接到Redis服务器并执行任意命令。更危险的是攻击者可以利用Redis的数据持久化功能将SSH公钥写入到目标服务器的/root/.ssh/authorized_keys文件中从而实现无需密码的SSH登录。我们来验证这个可能性。使用redis-cli -h 127.0.0.1连接本地Redis。如果连接成功且无需认证就证实了存在未授权访问漏洞。在靶机中我们成功连接这意味着攻击者完全可以从外部通过这个漏洞入侵。6.3 检查SSH密钥文件如果攻击者通过Redis写入了SSH密钥那么/root/.ssh/authorized_keys这个文件一定会被修改。我们查看这个文件cat /root/.ssh/authorized_keys在文件末尾我们果然发现了一段异常的SSH公钥格式与正常的密钥不同并且附带了一行注释chinarankali。这是第三个关键证据我们不仅确认了入侵路径Redis未授权→写入SSH密钥还找到了攻击者可能使用的ID或邮箱线索chinaran和kali很可能指Kali Linux攻击机。在靶场环境中这很可能就是我们要找的“黑客ID”。深度解析攻击者利用Redis未授权访问漏洞写入SSH密钥的具体命令序列通常如下redis-cli -h [靶机IP]连接。设置Redis的持久化路径和文件名使其指向/root/.ssh/authorized_keys。将自己的公钥作为值保存。执行保存操作Redis就会将包含公钥的特定格式数据写入目标文件。 由于authorized_keys文件对格式有一定容忍度这种写入虽然会夹杂一些Redis的二进制文件头但SSH仍然能识别出其中有效的公钥部分从而实现登录。7. 第五步深度取证与第三个Flag的发现我们已经找到了攻击者IP、两个flag以及入侵手法。但根据题目还有第三个flag。它可能藏在更隐蔽的地方。回顾整个入侵链条攻击者通过Redis漏洞进入那么他很可能也接触或修改了Redis的配置文件。7.1 使用RPM验证文件完整性Linux的RPM包管理器有一个强大的验证功能rpm -V。它可以检查已安装软件包中的文件是否被修改过如文件大小、MD5校验和、权限等是否发生变化。我们使用rpm -Vf /usr/bin/*来检查/usr/bin/目录下文件所属的包。在输出中除了大量关于rc.local的修改提示我们已经知道有几行格外显眼S.5....T. c /etc/redis.conf S.5....T. c /etc/redis.conf ...输出显示/etc/redis.conf文件的状态被标记为S.5....T.。这里的字母含义是S文件大小改变5MD5校验和改变T文件修改时间改变c表示这是一个配置文件这明确告诉我们Redis的配置文件被修改过7.2 检查被篡改的Redis配置文件查看/etc/redis.conf文件cat /etc/redis.conf在文件的最开头我们看到了# flag{PssW0rd_redis} # Redis configuration file example. ...第三个flag到手flag{PssW0rd_redis}。攻击者或靶场作者将flag以注释的形式写在了配置文件里。在真实攻击中这里可能是攻击者修改的Redis密码、绑定的IP地址从127.0.0.1改为0.0.0.0导致未授权访问或者其他配置项。至此我们完成了所有目标的追溯黑客IP地址192.168.75.129从/var/log/secure中分析得出。黑客邮箱/IDchinarankali从/root/.ssh/authorized_keys中发现的SSH公钥注释得出。三个Flagflag{thisismybaby}从root用户的命令历史中发现。flag{kfcvme50}从被篡改的/etc/rc.d/rc.local启动脚本中发现。flag{PssW0rd_redis}从被篡改的/etc/redis.conf配置文件中发现。8. 应急响应后的加固建议与总结反思完成入侵痕迹分析后应急响应只完成了一半。更重要的是“止血”和“加固”防止攻击者卷土重来。针对本次靶机暴露出的问题我们可以立即采取以下措施8.1 立即补救措施隔离与阻断立即在防火墙如iptables或firewalld上封锁攻击源IP192.168.75.129的所有入站连接。清除后门删除/root/.ssh/authorized_keys文件中攻击者添加的非法公钥。恢复/etc/rc.d/rc.local文件的原始内容移除恶意添加的flag行真实攻击中可能是恶意命令。检查并清理其他可能的启动项cron、systemd等。修复漏洞Redis加固这是根源。必须为Redis设置强密码在redis.conf中配置requirepass项修改默认端口非6379绑定监听IPbind 127.0.0.1禁止外网访问以低权限用户运行Redis。SSH加固禁止root用户直接SSH登录修改/etc/ssh/sshd_config中的PermitRootLogin为no使用密钥对认证并禁用密码认证限制可登录的用户和IP。恢复文件从备份中恢复被篡改的/etc/redis.conf文件或者根据安全配置手册重新配置。8.2 构建持续监控与防御一次应急响应不能一劳永逸需要建立常态化的安全监控日志集中与分析使用ELKElasticsearch, Logstash, Kibana或类似方案集中收集和分析系统日志、应用日志设置告警规则如异地登录、root成功登录等。文件完整性监控使用AIDE、Tripwire等工具对/etc/passwd、/etc/shadow、/etc/rc.local、关键二进制文件等建立基准一旦被修改立即告警。入侵检测系统部署HIDS主机入侵检测系统如OSSEC、Wazuh监控进程、网络连接和文件系统的异常行为。最小权限原则所有服务如Redis都应使用专属的、无登录权限的低权限用户运行并严格控制其文件和目录权限。8.3 本次实战的核心经验复盘回顾整个排查过程我最大的体会是应急响应需要清晰的思路和扎实的基础命令功底。工具如自动化扫描脚本能提高效率但理解原理和手动分析的能力是不可替代的。本次实战巩固了几个关键点日志是起点/var/log/secure是排查入侵的灯塔首先要学会高效地从中提取信息。用户和进程是重点攻击者要立足必然涉及用户、进程和网络连接的变化这是排查的核心圈。历史与文件是线索当实时状态无异常时命令历史和文件修改记录rpm -V,find -mtime能带你回到“案发当时”。理解攻击链不要孤立地看问题。从发现异常IP到找到后门文件再到溯源到Redis漏洞这是一个完整的攻击链还原。理解了攻击者的每一步踩点、漏洞利用、权限提升、权限维持你的防御思路才会更全面。最后对于新手朋友我的建议是多搭建这样的靶机环境进行练习。从“被黑”的结果反推原因是学习安全技术和培养“狩猎”思维最快的方式。每一次成功的溯源都是对你技术自信的一次巨大提升。