hi,
they has tried again with success despite setting connection_timeout and
limiting number of clients by mod_bw
the tomcat has frozen again.

netstat does not showed any connections on port 80 but plenty of
connections from apache to localhost:8009
so it was not an attack that you has described (no slowlaris)

im looking into debug files of mod_jk and forensic for some hints. If you
want i can share them (they have 4mb compressed)

best wishes
artur

2016-11-29 11:01 GMT+01:00 André Warnier (tomcat) <a...@ice-sa.com>:

> On 28.11.2016 22:04, Jaaz Portal wrote:
>
>> hi Andre,
>> you are wrong. This vulnerability is not only causing memory leaks, it
>> makes also apache workers to hang
>>
>
> Maybe for the last time here :
>
> - what do you call "apache workers" ?
>
> , making it easy to exhaust the pool.
>
> - what do you call "the pool" ?
>
> what i have in my log files. But it is true also that such exhaustion can
>> be made by other forms of dos attacks described in this thread.
>>
>> regarding you suggestion on our application, it does not dos bind server
>> nether does not scan for various vulnerabilities in apache, what i have
>> also in the logs
>>
>
> For your information : I run about 25 Internet-facing Apache webservers
> (some with a back-end tomcat, some not).
> On every single one of those webservers, there are *hundreds* of such
> "scans" every day, as shown by the Apache access logs.  That is just a fact
> of life on the Internet.
> They are annoying, but most of them are harmless (from an "attack" point
> of view), because they are scanning for things that we do not run
> (phpmyadmin, xmlrpc, vti_bin, etc., etc., the list is almost endless), and
> thus are responded to by Apache as "404 Not found".
> What is annoying with those scans, is
> a) that they fill the logfile, and thus make it more difficult to find
> really significant things
> b) that each of those requires some bandwidth and system resource, if only
> to return a "404 Not found" (or a "401 Unauthorised"), and that we pay for
> that bandwidth and resources.
>
> If I could find a way to charge 0.1 cent per access to my servers, from
> the people who wrote or run the programs who are doing this, I could retire
> in luxury.
>
> But they are not a real problem, because they are caught as "invalid" by
> Apache, and rejected quickly, so they cannot do anything really nasty
> (except if they were sending several thousand such requests per second to
> one of my servers for a long time).
>
> The ones that are worrying, are the ones
> - a) which do /not/ end up as a "404 Not found", because they have found
> an application which responds, and they are not coming from our legitimate
> customers
> - b) /the ones which we do not see/, because they either do not send a
> valid HTTP request, or they have found a way to trigger one of our
> applications, in such a way that the application misbehaves and, perhaps,
> even if they do not crash our servers, they may provide the attacker with
> some entry point to do other things which we do not know and do not control
>
> What I am trying to say here, is /do not jump to premature conclusions/.
> Such "scans" as you mention, happen to everyone, all the time, from
> ever-changing IP addresses located all over the world. Some of those
> "scans" may come from the infected PC of your grandmother, and she does not
> even know about it.
>
> There is no guarantee, and no indication or proof so far, that /these/
> scans are even related to "the other thing" which happens on your
> webserver, which looked much more focused.
>
> So do not just bundle them together as being the same thing, until you
> have some real data that shows for example that these different things all
> come from the same IP addresses.
>
> And one more thing, also finally until you come back with some real data :
> I am not saying that your application "scans your server".  What I am
> saying is that, maybe, by chance or by design, the attackers have found a
> URL which goes to your application, and which causes your application to
> keep tomcat and/or Apache busy for a long time.
> And that maybe /that/ is the problem you should be looking for, and not
> some hypothetical bug in Apache httpd or tomcat.
>
>
>
>> kindly regards,
>> artur
>>
>> 2016-11-28 21:33 GMT+01:00 André Warnier (tomcat) <a...@ice-sa.com>:
>>
>> On 28.11.2016 20:34, Jaaz Portal wrote:
>>>
>>> hi mark,
>>>> yes, i understand now what slowloris attack is.
>>>> maybe it was this maybe *this one based on * * mod_proxy denial of
>>>> service *
>>>> CVE-2014-0117 <http://cve.mitre.org/cgi-bin/
>>>> cvename.cgi?name=CVE-2014-0117>
>>>>
>>>>
>>> You keep on saying this, but the description of that vulnerability of
>>> *Apache httpd*, and the symptoms which you described, *do not match*.
>>> You described the problem as ocurring in Apache tomcat, which in your
>>> case
>>> is sitting as a back-end, *behind* Apache httpd. And restarting tomcat
>>> cured the problem.
>>>
>>> The CVE above applies to Apache httpd, and describes how an attacker
>>> could
>>> attack Apache httpd and cause *its children* processes to crash (the
>>> children processes of Apache httpd), by leading them to consume a lot of
>>> memory and crash with an out-of-memory error.
>>> Granted, the problem occurred in the mod_proxy module of Apache httpd;
>>> but
>>> it was httpd which crashed, not tomcat.
>>> And tomcat processes are not "Apache httpd children processes" in any
>>> understanding of the term.
>>>
>>> As far as I remember, you never mentioned Apache httpd crashing. You
>>> mentioned "the pool" getting full or satured or something like that,
>>> without ever describing properly what you meant by "the pool".
>>>
>>> As far as I am concerned, according to all the relatively unspecific
>>> information which you have previously provided :
>>> 1) the attack - if that is what it is/was - is definitely NOT related to
>>> the CVE which you have repeatedly mentioned
>>> 2) it is apparently not a "classical" DoS or "slowloris DoS" directed at
>>> your front-end Apache. Instead, it seems that the requests are properly
>>> received by Apache, properly decoded by Apache, and then whatever Apache
>>> proxy module you are using (mod_proxy_http, mod_proxy_ajp or mod_jk) is
>>> properly forwarding these requests to a back-end tomcat; and it is at the
>>> level of that back-end tomcat that the requests never seem to end, and in
>>> the end paralyse your tomcat server (and later on maybe your Apache httpd
>>> server too, because it is also waiting for tomcat to respond).
>>>
>>> So your very way of describing the problem, in terms of "first we used
>>> this proxy module, and then they exploited the vulnerability so and so;
>>> then we changed the proxy module, and they exploited that too; etc.."
>>> seems to not have anything to do with the problem per se, and (I believe)
>>> confuses everyone, including yourself.
>>>
>>> It is not that "they" exploited different vulnerabilities of various
>>> httpd
>>> proxy modules, one after the other. Each of these proxy modules was doing
>>> its job properly, and forwarding valid HTTP requests properly to tomcat.
>>> When you changed from one proxy module to another, you did not really
>>> change anything in that respect, because any proxy module would do the
>>> same.
>>>
>>> But in all cases, what did not change, was the tomcat behind the
>>> front-end, and the application running on that tomcat.  So the presumed
>>> attackers did not have to change anything, they just kept on sending the
>>> same requests, because they were really targeting your back-end tomcat or
>>> the tomcat application in it, no matter /how/ you were forwarding
>>> requests
>>> from Apache httpd to tomcat.
>>>
>>> So either it is tomcat itself, which has a problem with some request URLs
>>> which do not bother Apache httpd (possible, but statistically unlikely),
>>> or
>>> it is the application which runs in tomcat that has such a problem
>>> (statistically, much more likely).
>>>
>>> we do not know yet
>>>
>>>>
>>>> we have setup more logging and are waiting for them to attack once again
>>>>
>>>>
>>> Yes, that is the right thing to do.  Before deciding what the problem may
>>> be, and what you can do about it, the first thing you need is *data*.
>>> You
>>> need to know
>>> - which request URL(s?) cause that problem
>>> - which IPs these requests come from (always the same ? multiple IPs that
>>> change all the time ? how many ? can these IPs be valid/expected clients
>>> or
>>> not ? do these IPs look like some "coordinated group" ?)
>>> - how many such requests there may be during some period of time (10,
>>> 100,
>>> 1000, more ?)
>>> - if these URLs result in passing the request to tomcat
>>> - what tomcat application (if any) they are directed to
>>> - if so, when that application receives such a request, what is it
>>> supposed to do ? does it do it properly ? how long does it need, to
>>> respond
>>> to such a request ?
>>>
>>> You also need to ask yourself a question : is the application which you
>>> run inside tomcat something that you designed yourself (and which hackers
>>> are unlikely to know well-enough to find such a URL which paralyses your
>>> server) ? or is it some well-known third-party java application which you
>>> are running (and for which would-be attackers would be much more likely
>>> to
>>> know exactly such a bug) ?
>>>
>>>
>>> anyway, thank you for all informations, it was very useful and
>>>> educational
>>>> reading for all of us
>>>>
>>>> best wishes,
>>>> artur
>>>>
>>>> 2016-11-28 19:46 GMT+01:00 Mark Eggers <its_toas...@yahoo.com.invalid>:
>>>>
>>>> Jaaz,
>>>>
>>>>>
>>>>> On 11/27/2016 2:46 PM, André Warnier (tomcat) wrote:
>>>>>
>>>>> On 27.11.2016 19:03, Jaaz Portal wrote:
>>>>>>
>>>>>> 2016-11-27 18:30 GMT+01:00 André Warnier (tomcat) <a...@ice-sa.com>:
>>>>>>>
>>>>>>> On 27.11.2016 14:26, Jaaz Portal wrote:
>>>>>>>
>>>>>>>>
>>>>>>>> hi,
>>>>>>>>
>>>>>>>>> everything i know so far is just this single log line that appeared
>>>>>>>>> in
>>>>>>>>> apache error.log
>>>>>>>>>
>>>>>>>>> [Fri Nov 25 13:08:00.647835 2016] [mpm_event:error] [pid 13385:tid
>>>>>>>>> 1397934896385
>>>>>>>>> 92] AH00484: server reached MaxRequestWorkers setting, consider
>>>>>>>>>
>>>>>>>>> raising
>>>>>>>>
>>>>>>>
>>>>> the
>>>>>>
>>>>>>> MaxR
>>>>>>>>> equestWorkers setting
>>>>>>>>>
>>>>>>>>> there was nothing else, just this strange line
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> This is not a "strange" line. It is telling you something.
>>>>>>>> One problem is that you seem convinced in advance, without serious
>>>>>>>> proof,
>>>>>>>> that there is a "bug" or a vulnerability in httpd or tomcat.
>>>>>>>> Read the explanation of the httpd parameter, here :
>>>>>>>> http://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequ
>>>>>>>> estworkers
>>>>>>>> and try to understand it.
>>>>>>>>
>>>>>>>>
>>>>>>>> I understand it very well. We are serving no more that 500 clients
>>>>>>> per
>>>>>>> day
>>>>>>> so there was no other option that some kind of attack.
>>>>>>>
>>>>>>>
>>>>>>> About the "bug" or "vulnerability" : a webserver is supposed to serve
>>>>>>> HTTP
>>>>>>>
>>>>>>> requests from clients.  That is what you expect of it. It has no
>>>>>>>> choice but
>>>>>>>> to accept any client connection and request, up to the maximum it
>>>>>>>> can
>>>>>>>> handle considering its configuration and the capacity of the system
>>>>>>>> on
>>>>>>>> which it runs. That is not a bug, it is a feature.
>>>>>>>>
>>>>>>>>
>>>>>>>> We have some weeks ago come under attack from some Polish group. It
>>>>>>>>
>>>>>>> was
>>>>>>> first bind that was DoS'ed, we was running on stable Debian so i
>>>>>>> updated
>>>>>>> bind to latest version. It did not helped. They has dos'ed it so we
>>>>>>> switched to other dns provider. That has helped.
>>>>>>>
>>>>>>> Then they exploited some well know vulnerability in mod_proxy. We
>>>>>>> have
>>>>>>> updated apache to the latest but again they has exploited it, so we
>>>>>>> have
>>>>>>> switched to mod_jk. And then guess what. They exploited it too so i
>>>>>>> decided
>>>>>>> to write to this list looking for help before trying jetty.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> The normal Apache httpd access log, will log a request only when it
>>>>>>>> is
>>>>>>>> finished.  If the request never finishes, it will not get logged.
>>>>>>>> That may be why you do not see these requests in the log.
>>>>>>>> But have a look at this Apache httpd module :
>>>>>>>> http://httpd.apache.org/docs/2.4/mod/mod_log_forensic.html
>>>>>>>>
>>>>>>>>
>>>>>>>> ok, thanks, will take care
>>>>>>>
>>>>>>> Note : that is also why I was telling you to enable the mod_jk log,
>>>>>>> and to
>>>>>>>
>>>>>>> examine it.
>>>>>>>> Because mod_jk will also log information before the request
>>>>>>>> produces a
>>>>>>>> response.
>>>>>>>>
>>>>>>>>
>>>>>>>> and server hanged.
>>>>>>>>
>>>>>>>> Again, /what/ is "hanged" ? Apache httpd, or tomcat ?
>>>>>>>>
>>>>>>>>
>>>>>>>> Apache was accepting connection but not processed it. After restart
>>>>>>> of
>>>>>>> tomcat server it worked again.
>>>>>>>
>>>>>>>
>>>>>>> Also in
>>>>>>>
>>>>>>>>
>>>>>>>> access logs there are no clues that it was under any heavy load.
>>>>>>>>
>>>>>>>>>
>>>>>>>>> after around hour after discovering that our server hanged-out we
>>>>>>>>> have
>>>>>>>>> restarted tomcat server
>>>>>>>>> and it worked again
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Yes, because that will close all connections between Apache httpd
>>>>>>>> and
>>>>>>>> tomcat, and abort all requests that are in the process of being
>>>>>>>> processed
>>>>>>>> by tomcat. So mod_jk will get an error from tomcat, and will report
>>>>>>>> an
>>>>>>>> error to httpd, and httpd will communicate that error to the
>>>>>>>> clients,
>>>>>>>> and
>>>>>>>> close their connection.
>>>>>>>> It still does not tell you what the problem was.
>>>>>>>> The only thing that it suggests, is that the "bad" requests actually
>>>>>>>> make
>>>>>>>> it all the way to tomcat.
>>>>>>>>
>>>>>>>>
>>>>>>>> correct
>>>>>>>
>>>>>>> i will enable logs that you has pointed out and we will look what i
>>>>>>> will
>>>>>>> catch
>>>>>>> however i think we have only one chance, as if the solution we has
>>>>>>> found
>>>>>>> out (connection_timeout + mod_bn)
>>>>>>> will work they will stop exploiting it
>>>>>>>
>>>>>>> thank you very much for all the help and explanations
>>>>>>> i will report to the list new facts once they will attack us again
>>>>>>>
>>>>>>> best regards,
>>>>>>> artur
>>>>>>>
>>>>>>>
>>>>>>> Ok, but also read this e.g. :
>>>>>> https://www.corero.com/blog/695-going-after-the-people-
>>>>>>
>>>>>> behind-ddos-attacks.html
>>>>>
>>>>>
>>>>>> Attempts to bring down a site by DoS attacks is a crime, in most
>>>>>> places..
>>>>>>
>>>>>> You can report it, while at the same time trying to defend yourself
>>>>>> against it.
>>>>>>
>>>>>> It is also relatively easy, and quite inexpensive in terms of system
>>>>>> resources, to run a small shell script which takes a list every few
>>>>>> seconds of the connections to the port of your webserver, and which
>>>>>> IPs
>>>>>> they are coming *from*.
>>>>>> E.g.
>>>>>> First try the netstat command, to see what it lists, like :
>>>>>> # netstat -n --tcp | more
>>>>>>
>>>>>> Then you will want to filter this a bit, to only consider established
>>>>>> connections to your webserver, for example :
>>>>>> # netstat -n --tcp | grep ":80" | grep "ESTABLISHED"
>>>>>>
>>>>>> Then you will want to send this to a logfile, regularly, like this :
>>>>>>
>>>>>> # date >> some_file.log
>>>>>> # netstat -n --tcp | grep ":80" | grep "ESTABLISHED" >> some_file.log
>>>>>> (repeat every 3 seconds)
>>>>>>
>>>>>> This will not generate GB of logfiles, and it will tell you, when the
>>>>>> problem happens, how many connections there are exactly to your
>>>>>> webserver, and where they are coming from.
>>>>>> Then later you can further analyse this information..
>>>>>>
>>>>>>
>>>>>>
>>>>>>> i think that setting connection-timeout and limiting the number of
>>>>>>>
>>>>>>>> clients
>>>>>>>>> by mod_bd i will
>>>>>>>>> have effect that next time somebody will try this exploit it will
>>>>>>>>>
>>>>>>>>> block
>>>>>>>>
>>>>>>>
>>>>> his
>>>>>>
>>>>>>> access to the site
>>>>>>>>> for minute or two, pretty good holistic solution i would say
>>>>>>>>>
>>>>>>>>> still, it seems that there is serious vulnerability somewhere in
>>>>>>>>> apache,
>>>>>>>>> mod_jk or tomcat
>>>>>>>>> i would like to help find it out but need some hints which debug
>>>>>>>>> options
>>>>>>>>> enable to catch the bad guys
>>>>>>>>> when they will try next time
>>>>>>>>>
>>>>>>>>> best regards,
>>>>>>>>> artur
>>>>>>>>>
>>>>>>>>> 2016-11-27 13:58 GMT+01:00 André Warnier (tomcat) <a...@ice-sa.com>:
>>>>>>>>>
>>>>>>>>> On 27.11.2016 13:23, Jaaz Portal wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> hi Andre,
>>>>>>>>>>
>>>>>>>>>> thank you very much this was very educative but in my case it is
>>>>>>>>>>> little
>>>>>>>>>>> bit
>>>>>>>>>>> different.
>>>>>>>>>>> The server is no flooded, there is maybe dozen of very
>>>>>>>>>>> sophisticated
>>>>>>>>>>> connections that somehow hangs apache workers threads
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Can you be a bit more specific ?
>>>>>>>>>>>
>>>>>>>>>> When you say "apache workers threads", do you mean threads in
>>>>>>>>>> Apache
>>>>>>>>>> httpd, or threads in Apache Tomcat ? (both are Apache webservers,
>>>>>>>>>> so it
>>>>>>>>>> is
>>>>>>>>>> difficult to tell what you are talking about, unless you are very
>>>>>>>>>> precise).
>>>>>>>>>>
>>>>>>>>>> Let me give you some additional explanations, and maybe you can
>>>>>>>>>>
>>>>>>>>>> figure
>>>>>>>>>
>>>>>>>>
>>>>> out
>>>>>>
>>>>>>> exactly where it "hangs".
>>>>>>>>>>
>>>>>>>>>>     From the Apache httpd front-end point of view, mod_jk (the
>>>>>>>>>> connector to
>>>>>>>>>> Apache Tomcat) is basically one among other "response generators".
>>>>>>>>>> Apache
>>>>>>>>>> httpd does not "know" that behind mod_jk, there is one or more
>>>>>>>>>> Tomcat
>>>>>>>>>> servers.  Apache httpd receives the original client request, and
>>>>>>>>>> depending
>>>>>>>>>> on the URL of the request, it will pass it to mod_jk or to another
>>>>>>>>>> response
>>>>>>>>>> generator, to generate the response to the request.
>>>>>>>>>> That mod_jk in the background is using a Tomcat server to actually
>>>>>>>>>> generate the response, is none of the business of Apache httpd,
>>>>>>>>>> and
>>>>>>>>>>
>>>>>>>>>> it
>>>>>>>>>
>>>>>>>>
>>>>> does
>>>>>>
>>>>>>> not care. All it cares about, is to actually receive the response
>>>>>>>>>>
>>>>>>>>>> from
>>>>>>>>>
>>>>>>>>
>>>>> mod_jk, and pass it back to the client.
>>>>>>
>>>>>>>
>>>>>>>>>> If httpd passes a request to mod_jk, it is because you have
>>>>>>>>>> specified in
>>>>>>>>>> the Apache configuration, the type of URL that it should pass to
>>>>>>>>>> mod_jk..
>>>>>>>>>> That happens via your "JkMount (URL pattern)" directives in Apache
>>>>>>>>>> httpd.
>>>>>>>>>>
>>>>>>>>>> Of course Apache httpd will not pass a request to mod_jk, before
>>>>>>>>>> it
>>>>>>>>>> has
>>>>>>>>>> received at least the URL of the request, and analysed it to
>>>>>>>>>>
>>>>>>>>>> determine
>>>>>>>>>
>>>>>>>>
>>>>> *if*
>>>>>>
>>>>>>> it should pass it to mod_jk (*).
>>>>>>>>>>
>>>>>>>>>> If the mod_jk logging is enabled, you can see in it, exactly
>>>>>>>>>> *which*
>>>>>>>>>> requests are passed to mod_jk and to Tomcat.
>>>>>>>>>> Do you know *which* requests, from which clients, cause this
>>>>>>>>>> "thread
>>>>>>>>>> hanging" symptom ?
>>>>>>>>>> Once you would know this, maybe you can design a strategy to block
>>>>>>>>>> specifically these requests.
>>>>>>>>>>
>>>>>>>>>> and the effect is permanent. Quickly the pool is exhausted
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> which pool exactly ?
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> and the only
>>>>>>>>>>
>>>>>>>>>> solution that works is to restart tomcat.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> I think it is a bug similar to this one from mod_proxy:
>>>>>>>>>>> https://tools.cisco.com/security/center/viewAlert.x?alertId=
>>>>>>>>>>> 34971
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Maybe, maybe not. As long as we do not know what the requests
>>>>>>>>>>> are,
>>>>>>>>>>> that
>>>>>>>>>>>
>>>>>>>>>>> block things, we do not know this.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I think also that your solution with setting connectionTimeout
>>>>>>>>>> will
>>>>>>>>>> solve
>>>>>>>>>>
>>>>>>>>>> the problem, at least partially. THANK YOU.
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Same thing, we do not know this yet.  It was only giving this
>>>>>>>>>>>
>>>>>>>>>> explanation,
>>>>>>>>>> to help you think about where the problem may be.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I would like to help you further investigate this issue, as our
>>>>>>>>>>
>>>>>>>>>> server
>>>>>>>>>
>>>>>>>>
>>>>> comes under such attack once or twice in a week.
>>>>>>
>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Other than giving you hints, there is not much I or anyone else
>>>>>>>>>>> can do
>>>>>>>>>>>
>>>>>>>>>>> to
>>>>>>>>>> help. You are the one with control of your servers and logfiles,
>>>>>>>>>> so
>>>>>>>>>> you
>>>>>>>>>> have to investigate and provide more precise information.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> (*) actually, to be precise, Apache httpd passes *all* requests to
>>>>>>>>>> mod_jk,
>>>>>>>>>> to ask it "if it wants that request". mod_jk then accepts or
>>>>>>>>>>
>>>>>>>>>> declines,
>>>>>>>>>
>>>>>>>>
>>>>> depending on the JkMount instructions. If mod_jk declines, then
>>>>>>
>>>>>>>
>>>>>>>>>> Apache
>>>>>>>>>
>>>>>>>>
>>>>> httpd will ask the next response generator if it wants this request,
>>>>>>
>>>>>>> etc...
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> best regards,
>>>>>>>>>>
>>>>>>>>>> artur
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> 2016-11-27 12:46 GMT+01:00 André Warnier (tomcat) <a...@ice-sa.com
>>>>>>>>>>> >:
>>>>>>>>>>>
>>>>>>>>>>> Hi.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Have a look that the indicated parameters in the two pages
>>>>>>>>>>>> below..
>>>>>>>>>>>>
>>>>>>>>>>>> You may be the target of such a variant of DDoS attack : many
>>>>>>>>>>>> clients
>>>>>>>>>>>> open
>>>>>>>>>>>> a TCP connection to your server (front-end), but then never
>>>>>>>>>>>> sends
>>>>>>>>>>>> a
>>>>>>>>>>>> HTTP
>>>>>>>>>>>> request on that connection.  In the meantime, the server accepts
>>>>>>>>>>>>
>>>>>>>>>>>> the
>>>>>>>>>>>
>>>>>>>>>>
>>>>> TCP
>>>>>>
>>>>>>> connection, and passes it on to a "child" process or thread for
>>>>>>>>>>>> processing.  The child then waits for the HTTP request line to
>>>>>>>>>>>> arrive
>>>>>>>>>>>> on
>>>>>>>>>>>> the connection (during a certain time), but it never arrives.
>>>>>>>>>>>> After a
>>>>>>>>>>>> while, this triggers a timeout (see below), but the standard
>>>>>>>>>>>> value of
>>>>>>>>>>>> that
>>>>>>>>>>>> timeout may be such that in the meantime, a lot of other
>>>>>>>>>>>>
>>>>>>>>>>>> connections
>>>>>>>>>>>
>>>>>>>>>>
>>>>> have
>>>>>>
>>>>>>> been established by other such nefarious clients, so a lot of
>>>>>>>>>>>> resources
>>>>>>>>>>>> of
>>>>>>>>>>>> the webserver are tied up, waiting for something that will never
>>>>>>>>>>>> come..
>>>>>>>>>>>> Since there is never any real request sent on the connection,
>>>>>>>>>>>> you
>>>>>>>>>>>> would
>>>>>>>>>>>> (probably) not see this in the logs either.
>>>>>>>>>>>>
>>>>>>>>>>>> The above is the basic mechanism of such an attack.  There may
>>>>>>>>>>>> be
>>>>>>>>>>>> variations, such as the client not "not sending" a request line,
>>>>>>>>>>>>
>>>>>>>>>>>> but
>>>>>>>>>>>
>>>>>>>>>>
>>>>> sending it extremely slowly, thus achieving perhaps similar kinds
>>>>>>
>>>>>>>
>>>>>>>>>>>> of
>>>>>>>>>>>
>>>>>>>>>>
>>>>> effects.
>>>>>>
>>>>>>>
>>>>>>>>>>>> As someone pointed out, it is quite difficult to do something
>>>>>>>>>>>> about
>>>>>>>>>>>> this
>>>>>>>>>>>> at the level of the webserver itself, because by the time you
>>>>>>>>>>>> would do
>>>>>>>>>>>> something about it, the resources have already been consumed and
>>>>>>>>>>>> your
>>>>>>>>>>>> server is probably already overloaded.
>>>>>>>>>>>> There are specialised front-end devices and software available,
>>>>>>>>>>>> to
>>>>>>>>>>>> detect
>>>>>>>>>>>> and protect against this kind of attack.
>>>>>>>>>>>>
>>>>>>>>>>>> You may want to have a look at the following parameters, but
>>>>>>>>>>>> make
>>>>>>>>>>>> sure
>>>>>>>>>>>> to
>>>>>>>>>>>> read the caveats (side-effects, interlocking timeouts etc.),
>>>>>>>>>>>> otherwise
>>>>>>>>>>>> you
>>>>>>>>>>>> may do more harm than good.
>>>>>>>>>>>>
>>>>>>>>>>>> Another thing : the settings below are for Apache Tomcat, which
>>>>>>>>>>>> in your
>>>>>>>>>>>> case is the back-end. It would of course be much better to
>>>>>>>>>>>> detect
>>>>>>>>>>>> and
>>>>>>>>>>>> eliminate this at the front-end, or even before.  I had a look
>>>>>>>>>>>> at
>>>>>>>>>>>> the
>>>>>>>>>>>> Apache httpd documentation, and could not find a corresponding
>>>>>>>>>>>> parameter.
>>>>>>>>>>>> But I am sure that it must exist. You may want to post this same
>>>>>>>>>>>> question
>>>>>>>>>>>> on the Apache httpd user's list for a better response.
>>>>>>>>>>>>
>>>>>>>>>>>> Tomcat configuration settings :
>>>>>>>>>>>>
>>>>>>>>>>>> AJP Connector : (http://tomcat.apache.org/tomc
>>>>>>>>>>>> at-8.5-doc/config/ajp.html#
>>>>>>>>>>>> Standard_Implementations)
>>>>>>>>>>>>
>>>>>>>>>>>> connectionTimeout
>>>>>>>>>>>>
>>>>>>>>>>>> The number of milliseconds this Connector will wait, after
>>>>>>>>>>>> accepting a
>>>>>>>>>>>> connection, for the request URI line to be presented. The
>>>>>>>>>>>> default
>>>>>>>>>>>> value
>>>>>>>>>>>> for
>>>>>>>>>>>> AJP protocol connectors is -1 (i.e. infinite).
>>>>>>>>>>>>
>>>>>>>>>>>> (You could for example try to set this to 3000 (milliseconds) or
>>>>>>>>>>>> even
>>>>>>>>>>>> lower. That should be more than enough for any legitimate client
>>>>>>>>>>>> so
>>>>>>>>>>>> send
>>>>>>>>>>>> the HTTP request line.  Note however that by doing this at the
>>>>>>>>>>>> Tomcat
>>>>>>>>>>>> level, you will probably move the problem to the Apache
>>>>>>>>>>>>
>>>>>>>>>>>> httpd/mod_jk
>>>>>>>>>>>
>>>>>>>>>>
>>>>> level.  But at least it might confirm that this is the problem
>>>>>>
>>>>>>> that you
>>>>>>>>>>>> are
>>>>>>>>>>>> seeing.  The mod_jk logfile at the httpd level may give you some
>>>>>>>>>>>> hints
>>>>>>>>>>>> there.)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> HTTP Connector : (http://tomcat.apache.org/tomc
>>>>>>>>>>>> at-8.5-doc/config/http.html#Standard_Implementation)
>>>>>>>>>>>>
>>>>>>>>>>>> connectionTimeout
>>>>>>>>>>>>
>>>>>>>>>>>> The number of milliseconds this Connector will wait, after
>>>>>>>>>>>> accepting a
>>>>>>>>>>>> connection, for the request URI line to be presented. Use a
>>>>>>>>>>>> value
>>>>>>>>>>>> of -1
>>>>>>>>>>>> to
>>>>>>>>>>>> indicate no (i.e. infinite) timeout. The default value is 60000
>>>>>>>>>>>> (i.e.
>>>>>>>>>>>> 60
>>>>>>>>>>>> seconds) but note that the standard server.xml that ships with
>>>>>>>>>>>> Tomcat
>>>>>>>>>>>> sets
>>>>>>>>>>>> this to 20000 (i.e. 20 seconds). Unless disableUploadTimeout is
>>>>>>>>>>>> set to
>>>>>>>>>>>> false, this timeout will also be used when reading the request
>>>>>>>>>>>> body (if
>>>>>>>>>>>> any).
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 26.11.2016 09:57, Jaaz Portal wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> hi,
>>>>>>>>>>>>
>>>>>>>>>>>> sorry, its mod_jk no jk2, my typo. All at latest versions. We
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> tried
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>> with
>>>>>>
>>>>>>> mod proxy too.
>>>>>>>>>>>>>
>>>>>>>>>>>>> There is no flood of the server. Nobody is flooding us, they
>>>>>>>>>>>>> use
>>>>>>>>>>>>> some
>>>>>>>>>>>>> specific connections after which pool of apache workers is
>>>>>>>>>>>>> exhausted
>>>>>>>>>>>>> and
>>>>>>>>>>>>> blocked
>>>>>>>>>>>>> and we need to restart tomcat server.
>>>>>>>>>>>>> It is some kind of exploit but do not know how to log it to
>>>>>>>>>>>>> obtain
>>>>>>>>>>>>> details.
>>>>>>>>>>>>>
>>>>>>>>>>>>> i had put a limit on connections per client with hope that this
>>>>>>>>>>>>> will
>>>>>>>>>>>>> help
>>>>>>>>>>>>> but once again, it is not a flood.
>>>>>>>>>>>>> They open several connections that are not dropped by apache
>>>>>>>>>>>>> when they
>>>>>>>>>>>>> disconnect. This way whole pool is quickly exhausted and the
>>>>>>>>>>>>>
>>>>>>>>>>>>> server
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>> broken.
>>>>>>
>>>>>>>
>>>>>>>>>>>>> i would like to help you to figure details of this attack but
>>>>>>>>>>>>> this is
>>>>>>>>>>>>> production server so it is impossible to much debugging options
>>>>>>>>>>>>>
>>>>>>>>>>>>> best,
>>>>>>>>>>>>> artur
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2016-11-25 23:44 GMT+01:00 Niranjan Babu Bommu <
>>>>>>>>>>>>> niranjan.bo...@gmail.com
>>>>>>>>>>>>>
>>>>>>>>>>>>> :
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> you can find who is flooding site in apache access.log and
>>>>>>>>>>>>>> block
>>>>>>>>>>>>>>
>>>>>>>>>>>>> them
>>>>>>>>>>>>> in
>>>>>>>>>>>>>
>>>>>>>>>>>>> firewall.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> ex to find the IP:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> cat /var/log/apache2/access.log |cut -d' ' -f1 |sort |uniq
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -c|sort
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>> -gr
>>>>>>
>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Fri, Nov 25, 2016 at 8:42 AM, Jaaz Portal
>>>>>>>>>>>>>> <jaazpor...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> we are from some weeks struggling with some Polish hackers
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> bringing our server down. After updating apache to latest
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> version
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>
>>>>>> (2.4.23)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> and tomcat (8.0.38) available for debian systems we still
>>>>>>>>>>>>>> cannot
>>>>>>>>>>>>>> secure
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> our
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> server.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Today it has stopped to respond again and we needed to restart
>>>>>>>>>>>>>>> tomcat
>>>>>>>>>>>>>>> process to get it back alive.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> There is no too much clues in the logs. The apache error.log
>>>>>>>>>>>>>>> gives
>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>> this line:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> [Fri Nov 25 13:08:00.647835 2016] [mpm_event:error] [pid
>>>>>>>>>>>>>>> 13385:tid
>>>>>>>>>>>>>>> 1397934896385
>>>>>>>>>>>>>>> 92] AH00484: server reached MaxRequestWorkers setting,
>>>>>>>>>>>>>>> consider
>>>>>>>>>>>>>>> raising
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> MaxR
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> equestWorkers setting
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> seems that somehow tomcat, mod-jk2 or even apache is
>>>>>>>>>>>>>>> vulnerable to
>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> new
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> exploit, as we certainly does not have such traffic that
>>>>>>>>>>>>>> would
>>>>>>>>>>>>>> block
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> our
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> server otherwise
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> for now we have increased MaxRequestWorkers and we have
>>>>>>>>>>>>>>> limited
>>>>>>>>>>>>>>> number
>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>> connections from one client to 5 by mod_bw and limited number
>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>> simultaneous connections from one ip by iptables but does not
>>>>>>>>>>>>>>> know
>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> will help
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> best regards,
>>>>>>>>>>>>>>> artur
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Thanks*
>>>>>>>>>>>>>> *Niranjan*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This sounds like a variant of the slowloris attack.
>>>>>
>>>>> This type of attack doesn't take a large number of clients or consume a
>>>>> large amount of bandwidth.
>>>>>
>>>>> Basically, the maximum number of connections are made to the server,
>>>>> and
>>>>> just enough data is sent to each connection in order to not trigger the
>>>>> timeout. André has explained this in more detail earlier in the thread.
>>>>> Search for "slowloris attack" for more information.
>>>>>
>>>>> There are several ways of mitigating this type of attack.
>>>>>
>>>>> As André has mentioned, placing a dedicated device in front of your
>>>>> systems is often the best way. Lots of benefits (platform neutral, no
>>>>> stress on your current servers), and some issues (cost, placement /
>>>>> access may be an issue with hosted solutions).
>>>>>
>>>>> However, there are Apache HTTPD modules that can help mitigate these
>>>>> types of attacks. Some of them are:
>>>>>
>>>>> mod_reqtimeout (should be included by default in your Apache HTRPD 2.4)
>>>>> mod_qos (quality of service module)
>>>>> mod_security (application firewall with lots of security rules)
>>>>>
>>>>> Do a quick search on "slowloris attack apache httpd 2.4" to get some
>>>>> ideas.
>>>>>
>>>>> All of them will probably place additional load on your Apache HTTPD
>>>>> server, so make sure that the platform is robust enough to manage the
>>>>> additional load.
>>>>>
>>>>> There is also a beta version of the mod_security module written as a
>>>>> servlet filter. It should be possible to build this and configure the
>>>>> filter in Tomcat's default web.xml ($CATALINA_BASE/conf/web.xml). I've
>>>>> not tried this. Also, the code base hasn't seen any activity for 3
>>>>> years.
>>>>>
>>>>> Do a quick search on "modsecurity servlet filter" to find out more
>>>>> about
>>>>> the servlet filter version of mod_security.
>>>>>
>>>>> In short, there appear to be some ways to mitigate the attack.
>>>>>
>>>>> . . . just my two cents
>>>>> /mde/
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to