
1. 从一道靶场题说起Linux日志分析到底在查什么第一次接触应急响应这个词的人往往会把它想象成某种高深的安全攻防对抗。但真到了实操层面尤其是Linux服务器上的应急响应你会发现大量时间其实花在一件很朴素的事情上——翻日志。玄机靶场第一章这道Linux日志分析题本质上就是在模拟一个非常典型的场景服务器被人搞了你要通过日志把攻击者的行为链条还原出来。这道题的核心关键词是Linux、日志分析、应急响应、ssh、爆破。把这几个词串起来画面感就出来了一台暴露在公网的Linux服务器SSH端口对外开放攻击者用字典对SSH服务进行暴力破解最终猜到了某个弱口令账号的密码成功登录并执行了一系列操作。你要做的就是从/var/log/目录下那一堆文件里把这条线索找出来。为什么是SSH爆破因为这是Linux服务器面临的最常见、最低成本的攻击方式之一。一台有公网IP的机器只要22端口开着快的话上线几小时内就能在日志里看到来自世界各地的扫描和尝试登录记录。攻击者不需要什么0day漏洞只需要一个弱密码加上一份像样的字典就能拿下大量疏于管理的服务器。所以应急响应里SSH日志分析几乎是必修课。这篇文章适合谁看如果你正在准备CTF比赛里的应急响应方向或者刚入行做安全运维、SOC分析又或者你只是单纯想搞清楚自己服务器上那些密密麻麻的日志到底在说什么那这篇内容应该能帮到你。我会从日志文件本身讲起把每个关键字段的含义、怎么用命令快速定位异常、怎么判断一次爆破是否成功、以及实际排查中容易踩的坑都掰开揉碎讲一遍。需要提前说明的是下面涉及的命令和思路都是基于Linux系统日志的通用机制不针对任何特定平台。你在一台真实的CentOS或者Ubuntu服务器上同样可以照着操作。2. 先搞清楚战场Linux日志体系里哪些文件跟SSH有关很多人一上来就急着敲命令结果在/var/log/里翻半天找不到重点。其实Linux的日志体系是有明确分工的搞清楚哪个文件记什么比盲目grep效率高得多。2.1 认证日志SSH登录行为的核心记录地跟SSH登录直接相关的日志主要看两个文件/var/log/secure和/var/log/auth.log。这两个文件记录的是同一类东西——系统的认证和授权事件区别只在于发行版不同。Red Hat系CentOS、RHEL、Fedora用secureDebian系Ubuntu、Debian用auth.log。你在靶场里如果找不到secure先别慌试试auth.log反过来也一样。这两个文件里记录的内容包括用户登录成功、登录失败、sudo提权、su切换用户、SSH连接建立和断开等等。一次SSH爆破的全过程基本都能在这里找到痕迹。比如失败尝试会留下Failed password for这样的字样成功登录则是Accepted password for或者Accepted publickey for。2.2 其他可能相关的日志文件除了认证日志还有几个文件在应急响应时值得顺手看一眼/var/log/lastlog记录每个用户最后一次登录的时间用lastlog命令读能快速看出哪个账号最近有异常登录。/var/log/wtmp记录所有登录、注销、系统重启事件用last命令读。/var/log/btmp专门记录失败的登录尝试用lastb命令读。这个文件在爆破场景下特别有用因为它直接就是失败记录的集合。/var/log/syslog或/var/log/messages系统综合日志SSH服务本身的一些信息比如服务启动、配置重载会记在这里。提示btmp和wtmp是二进制文件不能直接用cat看必须用lastb和last命令解析。新手经常在这里卡住以为文件是空的或者损坏了。2.3 日志的轮转机制为什么你看到的可能不是全部这里有个很容易被忽略的点日志是会轮转的。系统通过logrotate定期把旧日志压缩归档比如secure会变成secure-20240101、secure-20240101.gz这样的形式。如果你只看了当前的secure文件可能会漏掉攻击发生那几天的记录。所以在实际排查时正确的做法是先列出所有相关日志文件按时间排序确定攻击时间窗口再针对性地去看对应的文件。命令很简单ls -lht /var/log/secure* /var/log/auth.log* 2/dev/null-lht的意思是长格式、人类可读的大小、按修改时间排序。这样一眼就能看出哪个文件最新、哪个是归档。3. 用命令把爆破痕迹从日志里捞出来知道了看哪个文件接下来就是怎么高效地从成百上千行日志里定位异常。这一步是整道题的核心也是最能体现分析功底的地方。3.1 定位失败登录爆破的第一手证据SSH爆破最直接的特征就是短时间内出现大量失败登录。用一条命令就能把它们全部捞出来grep Failed password /var/log/secure如果日志文件比较大输出会非常多。这时候可以配合wc -l先看数量grep -c Failed password /var/log/secure数量本身就是重要线索。正常服务器一天可能就几条失败记录自己输错密码但如果出现几百上千条那基本可以确定是被爆破了。接下来要做的是从这些失败记录里提取出攻击源IP。日志行的格式大致是这样的Jan 15 03:22:41 server sshd[12345]: Failed password for invalid user admin from 192.168.1.100 port 54321 ssh2关键字段是from后面的IP和for后面的用户名。用awk可以快速统计grep Failed password /var/log/secure | awk {print $(NF-3)} | sort | uniq -c | sort -nr这条命令的逻辑是先过滤失败记录然后取倒数第4个字段也就是IP排序去重后按出现次数倒序排列。出现次数最多的那个IP大概率就是攻击源。同样的思路可以统计被尝试的用户名grep Failed password /var/log/secure | awk {print $(NF-5)} | sort | uniq -c | sort -nr注意awk取字段的位置取决于日志格式不同发行版、不同sshd版本可能略有差异。如果取出来的结果不对先用head -1看一行完整日志数清楚IP和用户名分别是第几个字段再调整$(NF-n)里的n值。这是实操中最容易出错的地方别死记命令要学会看日志结构。3.2 判断爆破是否成功从Failed到Accepted的转折点找到大量失败记录只是第一步真正要命的问题是攻击者到底有没有爆破成功判断依据就是看有没有在爆破之后出现成功登录的记录。grep Accepted /var/log/secure如果某条Accepted记录的源IP正好和前面统计出的高频失败IP一致那基本可以坐实这个IP先疯狂试密码然后成功了。这就是一次成功的爆破入侵。更精细一点可以把失败和成功记录按时间排在一起看grep -E Failed password|Accepted password /var/log/secure | sort这样能清楚看到攻击节奏——什么时候开始试、试了多久、什么时候成功。如果成功登录发生在大量失败之后且来自同一IP那结论就很明确了。3.3 追踪登录后的行为攻击者进来干了什么确认爆破成功后下一步是还原攻击者在系统里的操作。这一步光看认证日志不够还要结合其他线索看该用户登录后执行了哪些命令。如果系统开了history记录且没被清除可以查对应用户的~/.bash_history。看有没有新建用户、修改密码的操作这些会记录在认证日志里比如useradd、passwd相关条目。看有没有异常的网络连接或进程这需要结合netstat、ps等命令但日志分析阶段可以先从secure里的sudo记录入手。grep sudo /var/log/secure如果攻击者拿到普通用户后尝试提权sudo的失败或成功记录会留在这里。4. 一道题背后的完整排查链路我是怎么一步步锁定答案的光讲命令还是太散我把这道题的排查过程按真实顺序复盘一遍你能更直观地理解应急响应的思路。4.1 第一步确认日志文件和时间范围拿到一台机器先别急着grep。第一步是搞清楚有哪些日志、覆盖什么时间段。ls -lh /var/log/看看secure或auth.log在不在大小是否正常。如果文件很小可能是刚轮转过要去找归档文件。然后看一眼当前日志的时间跨度head -1 /var/log/secure tail -1 /var/log/secure确认日志覆盖了攻击可能发生的时间段。这一步看似多余但实际排查中很多人就是因为看错了日志文件比如该看auth.log却盯着secure白白浪费大量时间。4.2 第二步统计失败登录锁定攻击源确认文件后直接上统计命令grep Failed password /var/log/secure | awk {print $(NF-3)} | sort | uniq -c | sort -nr | head看排名第一的IP。如果它的失败次数远超其他那它就是主要嫌疑对象。同时统计一下被尝试的用户名看看攻击者是广撒网试很多用户名还是精准打击只试root或某个特定账号。这两种模式反映的攻击者意图不同广撒网通常是自动化脚本精准打击可能是有针对性的。4.3 第三步交叉验证是否成功锁定嫌疑IP后立刻查这个IP有没有成功登录grep Accepted /var/log/secure | grep 嫌疑IP如果有输出记下成功登录的时间点和用户名。如果没有说明这次爆破没成功但也不能掉以轻心可能攻击者换了IP或者用了其他方式。4.4 第四步还原时间线把该IP的所有相关记录按时间拉出来grep 嫌疑IP /var/log/secure从第一条失败开始到最后一条记录结束中间发生了什么一目了然。成功登录的时间点就是攻击者拿到权限的时刻之后的任何操作都值得警惕。4.5 第五步检查持久化痕迹攻击者进来后通常会留后门常见的有添加SSH公钥到~/.ssh/authorized_keys、新建隐藏用户、添加定时任务等。日志分析阶段能查到的包括grep -i new user\|useradd\|usermod /var/log/secure以及查看/etc/passwd的修改时间看有没有异常账号。这套流程走下来一道标准的SSH爆破应急响应题基本就解完了。你会发现核心不是什么高深技术而是对日志结构的熟悉加上清晰的排查逻辑。5. 那些文档里不会写的坑实操中容易翻车的地方讲完了标准流程说几个我自己踩过或者见别人踩过的坑。这些细节在官方文档里基本不会提但实际排查时经常遇到。5.1 日志字段位置不是固定的前面反复强调过awk取字段的位置会变。不同版本的OpenSSH日志格式有细微差别。比如有的版本Failed password for invalid user admin from 1.2.3.4有的版本可能多了或少了一些字段。如果你死记$(NF-3)换个环境就取错了。正确的做法是先head一行看结构数清楚字段再写命令。这个习惯能帮你省下大量debug时间。5.2 日志可能被攻击者清理过高级一点的攻击者进来后会删日志常见操作是清空secure、删除bash_history、甚至替换last命令。如果你发现日志有明显断层比如某段时间完全没有记录或者文件大小异常小就要警惕日志被篡改的可能。这种情况下可以看日志文件的修改时间stat /var/log/secure如果修改时间和内容对不上说明被动过手脚。这时候要转向其他证据源比如系统审计日志auditd如果开了的话或者网络设备、其他服务器的日志。5.3 别忽略成功登录里的正常记录查Accepted记录时会看到大量正常的运维登录。如果不加区分地把所有成功登录都当成可疑会把自己淹没在噪音里。判断标准是结合源IP、登录时间、登录用户三个维度。来自内网、工作时间、常用账号的登录大概率正常来自陌生外网IP、凌晨、非常用账号的才需要重点看。5.4 时间戳的时区问题日志里的时间戳用的是服务器本地时间。如果你在分析时用的是自己的电脑时区可能不一致导致时间线对不上。排查前先确认服务器时区timedatectl或者看日志里的时间和你的预期是否吻合。这个坑在多服务器联合排查时特别明显。5.5 爆破字典的规模会影响日志特征小规模爆破几十次和大规模爆破几万次在日志里的表现完全不同。小规模的可能混在正常失败记录里不容易发现需要拉长时间窗口看趋势大规模的直接就是刷屏。分析时要根据实际情况调整策略不能一套命令走天下。6. 把日志分析能力变成真正的应急响应本事做完这道题如果你只是记住了几条命令那价值有限。真正有用的是把这套方法内化成一种排查直觉。下面聊聊怎么从会做一道题进阶到能处理真实事件。6.1 建立自己的日志分析命令库应急响应讲究速度事发时现查命令太慢。建议平时就整理一份自己的命令清单按场景分类查失败登录、查成功登录、查提权、查用户变更、查定时任务。用的时候直接调用效率翻倍。比如我会把常用命令写成小脚本放在~/tools/下需要时直接跑。这不是炫技是实战中真的能省时间。6.2 理解攻击者的行为模式比记住命令更重要命令是死的攻击行为是活的。SSH爆破只是入口攻击者进来后的行为才是重点。常见的后续动作包括信息收集whoami、uname -a、cat /etc/passwd、权限提升找SUID文件、查内核版本、持久化加公钥、加定时任务、横向移动扫描内网、尝试连接其他机器。你在日志里看到的每一条记录都要放到这个行为链条里去理解。比如看到Accepted之后紧接着有sudo记录那说明攻击者在尝试提权看到useradd那是在建后门账号。有了这个框架你分析日志时就不是在找异常而是在还原故事。6.3 日志分析只是应急响应的一环必须清楚日志分析解决的是发生了什么的问题但完整的应急响应还包括怎么阻断和怎么恢复。找到攻击源IP后要封禁确认被入侵的账号要禁用或改密发现的后门要清除受影响的系统要评估是否需要重装。日志分析的价值在于它为后续所有动作提供了依据。你只有先搞清楚攻击者从哪进来、进来干了什么才能有针对性地处置。所以别把日志分析当成孤立的技能它是整个应急响应流程的起点。6.4 平时多做日志巡检事发时才不慌最好的应急响应是提前发现。如果平时就有巡检日志的习惯比如每天看一眼失败登录数量、每周检查一次异常账号很多攻击在早期就能被发现和阻断。等到事发后再去翻日志往往已经晚了。巡检不需要多复杂几条命令加一个定时任务就能搞定。关键是养成习惯让看日志成为日常运维的一部分而不是出事才想起来的救火手段。我在实际处理这类问题时最大的体会是日志分析的门槛不在技术而在耐心和逻辑。命令谁都能学但从一堆看似杂乱的行里理出清晰的攻击链条靠的是对系统机制的熟悉和一步步验证的严谨。玄机这道题是个很好的练手场景把它的思路吃透换成真实的服务器环境你也能从容应对。