恶心的网站扫描工具

用公网网站的应该都会遇到,从你上线一个公开网站的那天开始,你的 Nginx 错误日志里面每天都会有大量的 404 请求出现,而且很多都是重复的请求,比如各种以 .php 结尾的请求。

这些错误请求就像下面这样:

网站扫描

这些就是某些黑产使用网站扫描工具干的,就是在无差别的进行扫描,看你的网站是否有漏洞可以利用。

而且这里有个特点,就是很多请求都是 wordpress 的,毕竟以前使用 wordpress 建站是大多数人的选择,所以被公开的漏洞相对多一些吧。

这种错误日志太多了,首先会占用 Nginx 的日志空间,虽然不大,但是也是浪费,其次是会影响我们查看真正报错的 404 日志,所以可以想想办法解决这个问题。

Gzip 炸弹💣方案

什么是 Gzip 炸弹

Gzip 炸弹(Gzip Bomb)是一种恶意构造的压缩文件,旨在通过利用压缩算法的特性,使得解压缩这个文件时占用大量的系统资源,甚至导致系统崩溃或拒绝服务。Gzip 炸弹通常通过递归地嵌套压缩来实现,因此在解压缩时会逐渐膨胀成极大的文件。

我们可以使用 dd 命令结合 gzip 命令制造一个 Gzip 炸弹:

dd if=/dev/zero bs=1M count=1024 | gzip > bomb.gzip

这个命令创建了一个压缩文件 bomb.gzip,虽然这个压缩文件只有1M,但是解压之后会有1G这么大。

也就是说服务器只返回一个1M的文件,客户端如果接收并解压开的话,会占用内存1G。

zip炸弹的一个示例是文件42.zip,它是一个只有42 KB大的zip文件,其中包含5层嵌套的zip文件(每组16个),如果全部解压缩出来,每个底层压缩文件的大小是 4.3 GB(4 294 967 295字节,约为3.99GiB),总计4.5 PB(4 503 599 626 321 920字节,约为3.99 PiB),是解压缩前约一百多兆倍大。

使用 Gzip 炸弹

在 Nginx 中配置指定的请求返回这个炸弹,比如上面提到的那些经常被扫描工具关顾的地址。

location ~* \.php$ {
    default_type text/html;
    add_header Content-Encoding gzip;
    alias /etc/nginx/conf.d/bomb/bomb.gzip;
}

这个配置使用正则匹配任何以 .php 结尾的请求都会返回上面那个炸弹文件,如果客户端去解压打开的话,就会占用1G内存。

效果评估

可以看一下浏览器里面的请求效果:

Gzip Bomb

可以看到在浏览器的内存占用里面是超过了1G的,这是因为浏览器会自动解压带有gzip请求头的内容。

虽然这个在浏览器请求里面效果很明显,但是扫描工具并不是浏览器,而是黑产的工具,黑产是什么,他们又不傻,这种低级的 Gzip 炸弹真的可以恶心到他们吗?

我是持否定意见的,具体可以看一些爬虫避开 Gzip 炸弹的例子:

忽略报错日志的方案

我们重新回到我们的问题上来思考,扫描工具真正影响到我们的是什么?其实无非就是会生成一些重复的无效的错误日志,那我们何不直接忽略掉这种错误的请求,不要记录任何日志,直接抛弃就行。

看下面这个配置:

location ~* \.php$ {
    access_log off;
    log_not_found off;
    return 444;
}

这个配置的说明:

  1. location ~* \.php$: 也是匹配以 .php 结尾的请求,因为我的网站没有这种以 .php 结束的路由,所以只要有人请求这个,我都可以直接忽略。
  2. access_log off;:关闭访问日志记录,意味着对于匹配到的请求,Nginx 不会记录访问日志,即使请求被拒绝也不会记录。
  3. log_not_found off;:关闭未找到日志记录,意味着对于未找到的文件或目录的请求,Nginx 不会记录错误日志。
  4. return 444;:返回状态码 444,表示连接被关闭,不返回任何内容。这个状态码通常被用于拒绝访问,表示请求被无条件地拒绝,客户端会收到一个空白的响应。

配置生效,日志干净了很多,当然,还有很多其他的路径的请求,也可以按照这种方式添加到匹配规则里面进行忽略。

总结

Gzip 炸弹干扰网站扫描工具的方案看似很厉害,实际上我认为根本不会起到任何作用,而且返回炸弹本身也是需要消耗网站流量和带宽的,所以并不划算。而使用 Nginx 配置直接忽略非正常请求的方式可以有效的节省服务端的处理,也可以节省日志空间,怎么看都是收益最高的选择。

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://tendcode.com/subject/article/web-scan/

许可协议:署名-非商业性使用 4.0 国际许可协议