凌晨三点四十。

枕边的手机持续不断地震动着,我由此意识到出问题了。监控触发报警,流量图如同心电图停止那般,径直降至零。网站处于瘫痪状态。

别慌,先去把日志翻出来

迷迷糊糊地爬起身来,赤着双脚,那地砖透着阵阵冰凉。脑海之中仅仅存有一个想法:日志究竟在何处呢?日志到底于哪里?

Linux服务器,是Nginx的那种,其路径,我就算闭着眼睛都能够敲出来,就是那个/var/log/nginx/access.log。然而,有时候,你越是熟悉就越容易出错,万一跑到错误的地方去了?至于Apache的路径,是在 /var/log/apache2/。而Windows的,得去到事件查看器里面去翻找IIS那一堆相关的东西。

先看的肯定是错误日志。果不其然,一堆 500。

时间,先把时间卡死

黑客几点来的?

我不知道他几点来的,但我知道网站几点死的。

往回倒退10分钟,运用grep将那个时间段的请求全部筛选出来,犹如一个筛子一般。

针对在access.log文件里,通过grep工具查找包含“2026 - 02 - 13T03:”内容的操作而言,针对在这段时刻现身的任何事物,无论其是何种诡异奇特之物,皆存在着被怀疑的可能性。

有的时候,你没办法确定确切的时间点,那就去看一下量。日志文件的大小不太对,今天这个文件增长的速度比昨天快了一倍,肯定是有情况的!

那些 IP,真特么碍眼

awk 统计一下 IP 访问次数,永远是第一步。

对于这行命令,即awk '{print $1}' access.log | sort | uniq -c | sort -nr,居然敲得比输自己名字还顺。

查出结果,处于最上方的那个 IP,仅一秒功夫就刷发出八百多次请求,这般行径绝非人类所为而像是机器的操作迹象,这不是人,这是机器。

有那么些IP,其行径颇为狡黠,它并非频繁地作刷动之举,而是以一种极为缓慢悠闲的态势去扫描目录。你留意瞧瞧日志,其中诸如/wp-admin.git/backup.zip这般的内容,它会逐个进行尝试。所引发的那种感觉呀,仿若在夜半时分,有某个人正拿着钥匙,在你家的门口逐个挨次地尝试开锁,发出的声响并不大,然而你心里却十分清楚他就在那儿。

请求里的“脏词”

SQL 注入,一眼假

攻击者的 payload 有时候笨得可笑。

你瞧,URL 参数当中,那明晃晃呈现着的 ' or 1=1-- ,还有 union select 。就这类情况,在日志里随便一搜,那可是一找一个准的。然而,现今这个阶段攻击者变得机灵起来了,他们会进行编码操作。URL 编码,十六进制编码,如此这般转来转去的。你得在自己脑子里去给它做解码工作,或者借助工具进行自动解码才行。

攻击模式识别_服务器日志分析_服务器存储排查

XSS同样如此,标签被塞进参数里。我曾见到过一个愚蠢的,alert里弹出的字竟然是“hacked by xxx”,就好像生怕你不清楚是他所为一样。

User-Agent 露馅了

存在着这样一些情况,其中有的UA正经到过火的程度,而代表浏览器的Mozilla/5.0出现的数量众多,一眼看上去就能察觉到是模仿的。然而,还有一些情况是连安装的意愿都没有,就直接付诸于使用curlpython-requestssqlmap

那一回碰到了一个,呈现 UA 里写有着 Go - http - client/1.1 的那种情况。嘿,朋友,你凭借 Go 编写的爬虫去试着扫描我的接口,好歹要进行一下伪装,怎么能这样,这也太不把人当回事儿了,真让人生气,是不尊重人的一种行为。

等等,这个 IP 不对劲

一一翻看着,察觉到有一个IP有些怪异,它既没有去扫描敏感的目录,也未曾疯狂地刷新页面。

它处于那个位置,每隔五分钟,以极为规律的状态,去访问一个根本不存在的PHP文件,一次又一次的提示404。

这是在测我呢?还是某个僵尸网络的“心跳”?

有些时候,最为可怕的并非是那些张牙舞爪展开的攻击,而是这般呈现沉默样式的、带着试探意味的脚步,你并不清楚他意之所图,也不晓得他会在何时实施行动。

赶紧的,先封了再说

先止血

不拘你是借助iptables手动予以封禁,抑或是于CDN后台径直实施拉黑,那个展现出高频刷新页面行为的IP,直接予以封禁24小时。

然而不要觉得这般便结束。实际的攻击者会运用肉鸡,几百乃至数千个 IP 轮流去实施。你封禁一个,他就更换一个。此时需要查看规律,是否全都源自同一个 C 段?是否全都经由某个特定的代理出口?

天亮之后的复盘

困得眼睛睁不开,但还得写报告。

将那些特征提取出来,这些特征包括攻击时间窗口,源IP段,请求的URL特征,UA特征。下次撰写防火墙规则时,就直接针对这些特征进行拦截。

有一款名为 SSlogs 的开源工具,近来相当热门,它能够自动运行规则,并且还能够衔接 AI 进行分析,声称可以迅速找出 Log4j 或者诸如供应链攻击之类的痕迹。下次可以尝试一下,毕竟总不能每次都依靠人工去硬撑,那样太耗费头发啦。

日志文件还在那儿不停地写。

每一行,都是服务器挨的每一刀。

天亮再看吧,至少现在,网站又活了。