On Thu, 2009-09-03 at 05:23 -0400, Matt Kettler wrote:
> Clunk Werclick wrote:
> > Howdie;
> >
> > I'm starting to see plenty of these and they are new to us:
> >
> > zgrep "address not listed" /var/log/mail.info
> > Sep  3 05:26:59 ....: warning: 222.252.239.56: address not listed for
> > hostname localhost
> > dig -x 222.252.239.56
> >
> > ...
> > ;; QUESTION SECTION:
> > ;56.239.252.222.in-addr.arpa. IN PTR
> >
> > ;; ANSWER SECTION:
> > 56.239.252.222.in-addr.arpa. 83651 IN PTR localhost.
> > ...
> >
> > Taking to one side the various RBL's which are catching these, and not
> > going the whole 'PTR must match' route - would it be practical to craft
> > a 10 point rule based on PTR = localhost? Is it even possible to build a
> > rule based upon DNS returns?
> >
> > Forgive the stupidity of the question, but I'm not sure how to, or even
> > if it can be implemented?
> Not without writing a plugin. Although if your MTA inserts a "may be
> forged" note into the Received: headers, SA will pick up on this.
> 
> Generally speaking, SA does not perform A record lookups of anything
> that could be spammer-provided, neither hosts in URLs nor Received:
> hosts. Doing so posses a potential security risk. (NS record queries are
> performed, but not A).
> 
> Attack vectors include:
> 
> 1) malicious insertion of hosts that are slow-to-resolve, forcing a DNS
> timeout, thus slowing down mail processing. A small flood of such
> messages (each with different hostnames) could readily occupy all your
> spamd children. Spamd does not have sufficient cross child co-ordination
> to implement countermeasures, and anyone using the API or "spamassassin"
> script would have to roll their own.
> 
> 2) there is the potential to abuse chosen queries to facilitate DNS
> cache poisoning attacks, on servers that are vulnerable.

Thank you Matt. That is a fine quality of answer and makes total sense.
I had never thought to consider this attack vector. On an SA install
running hundreds of thousands of messages I could see a significant
issue if DNS returns ran much past 300ms or so. I am guessing (and I
have not at all examined the code, nor shall I pretend that I would
understand it) that there is some kind of sanity check for DNS timeout
there someplace? Again, potentially a stupid question - but I'm curious
as to how we would say 'that query has taken too long, I'm out of
here'. 



Reply via email to