Ars Militaria: Research Institute of Systematic Misanthropy

July 22, 2008

Matasano’s “blunder”

Filed under: Misanthropy — Sophia @ 6:47 am

complete with silly analogies.

Reliable DNS Forgery in 2008: Kaminsky’s Discovery
from Matasano Security by ecopeland

0. The cat is out of the bag. Yes, Halvar Flake figured out the flaw Dan Kaminsky will announce at Black Hat.

1. Pretend for the moment that you know only the basic function of DNS — that it translates WWW.VICTIM.COM into 1.2.3.4. The code that does this is called a resolver. Each time the resolver contacts the DNS to translate names to addresses, it creates a packet called a query. The exchange of packets is called a transaction. Since the number of packets flying about on the internet requires scientific notation to express, you can imagine there has to be some way of not mixing them up.

Bob goes to to a deli, to get a sandwich. Bob walks up to the counter, takes a pointy ticket from a round red dispenser. The ticket has a number on it. This will be Bob’s unique identifier for his sandwich acquisition transaction. Note that the number will probably be used twice — once when he is called to the counter to place his order and again when he’s called back to get his sandwich. If you’re wondering, Bob likes ham on rye with no onions.

If you’ve got this, you have the concept of transaction IDs, which are numbers assigned to keep different transactions in order. Conveniently, the first sixteen bits of a DNS packet is just such a unique identifier. It’s called a query id (QID). And with the efficiency of the deli, the QID is used for multiple transactions.

2. Until very recently, there were two basic classes of DNS vulnerabilities. One of them involves mucking about with the QID in DNS packets and the other requires you to know the Deep Magic.First, QIDs.

Bob’s a resolver and Alice is a content DNS server. Bob asks Alice for the address of WWW.VICTIM.COM. The answer is 1.2.3.4. Mallory would like the answer to be 6.6.6.0.

It is a (now not) secret shame of mine that for a great deal of my career, creating and sending packets was, to me, Deep Magic. Then it became part of my job, and I learned that it is surprisingly trivial. So put aside the idea that forging IP packets is the hard part of poisoning DNS. If I’m Mallory and I’m attacking Bob, how can he distinguish my packets from Alice’s? Because I can’t see the QID in his request, and the QID in my response won’t match. The QID is the only thing protecting the DNS from Mallory (me).

QID attacks began in the olden days, when BIND simply incremented the QID with every query response. If you can remember 1995, here’s a workable DNS attack. Think fast: 9372 + 1. Did you get 9372, or even miss and get 9373? You win, Alice loses. Mallory sends a constant stream of DNS responses for WWW.VICTIM.COM. All are quietly discarded —- until Mallory gets Bob to query for WWW.VICTIM.COM. If Mallory’s response gets to your computer before the legitimate response arrives from your ISP’s name server, you will be redirected where Mallory tells you you’re going.

Obvious fix: you want the QID be randomly generated. Now Alice and Mallory are in a race. Alice sees Bob’s request and knows the QID. Mallory has to guess it. The first one to land a packet with the correct QID wins. Randomized QIDs give Alice a big advantage in this race.

But there’s a bunch more problems here:

* If you convince Bob to ask Alice the same question 1000 times all at once, and Bob uses a different QID for each packet, you made the race 1000 times easier for Mallory to win.

* If Bob uses a crappy random number generator, Mallory can get Bob to ask for names she controls, like WWW.EVIL.COM, and watch how the QIDs bounce around; eventually, she’ll break the RNG and be able to predict its outputs.

* 16 bits just isn’t big enough to provide real security at the traffic rates we deal with in 2008.

Your computer’s resolver is probably a stub. Which means it won’t really save the response. You don’t want it to. The stub asks a real DNS server, probably run by your ISP. That server doesn’t know everything. It can’t, and shouldn’t, because the whole idea of DNS is to compensate for the organic and shifting nature of internet naming and addressing. Frequently, that server has to go ask another, and so on. The cool kids call this “recursion”.

Responses carry another value, too, called a time to live (TTL). This number tells your name server how long to cache the answer. Why? Because they deal with zillions of queries. Whoever wins the race between Alice and Mallory, their answer gets cached. All subsequent responses will be dropped. All future requests for that same data, within the TTL, come from that answer. This is good for whoever wins the race. If Alice wins, it means Mallory can’t poison the cache for that name. If Mallory wins, the next 10,000 or so people that ask that cache where WWW.VICTIM.COM is go to 6.6.6.0.

3. Then there’s that other set of DNS vulnerabilities. These require you to pay attention in class. They haven’t really been talked about since 1997. And they’re hard to find, because you have to understand how DNS works. In other words, you have to be completely crazy. Lazlo Hollyfeld crazy. I’m speaking of course of RRset poisoning.

DNS has a complicated architecture. Not only that, but not all name servers run the same code. So not all of them implement DNS in exactly the same way. And not only that, but not all name servers are configured properly.

I just described a QID attack that poisons the name server’s cache. This attack requires speed, agility and luck, because if the “real” answer happens to arrive before your spoofed one, you’re locked out. Fortunately for those of you that have a time machine, some versions of DNS provide you with another way to poison the name server’s cache anyway. To explain it, I will have to explain more about the format of a DNS packet.

DNS packets are variable in length and consist of a header, some flags and resource records (RRs). RRs are where the goods ride around. There are up to three sets of RRs in a DNS packet, along with the original query. These are:

* Answer RR’s, which contain the answer to whatever question you asked (such as the A record that says WWW.VICTIM.COM is 1.2.3.4)

* Authority RR’s, which tell resolvers which name servers to refer to to get the complete answer for a question

* Additional RR’s, sometimes called “glue”, which contain any additional information needed to make the response effective.

A word about the Additional RR’s. Think about an NS record, like the one that COM’s name server uses to tell us that, to find out where WWW.VICTIM.COM is, you have to ask NS1.VICTIM.COM. That’s good to know, but it’s not going to help you unless you know where to find NS1.VICTIM.COM. Names are not addresses. This is a chicken and egg problem. The answer is, you provide both the NS record pointing VICTIM.COM to NS1.VICTIM.COM, and the A record pointing NS1.VICTIM.COM to 1.2.3.1.

Now, let’s party like it’s 1995.

Download the source code for a DNS implementation and hack it up such that every time it sends out a response, it also sends out a little bit of evil — an extra Additional RR with bad information. Then let’s set up an evil server with it, and register it as EVIL.COM. Now get a bunch of web pages up with IMG tags pointing to names hosted at that server.

Bob innocently loads up a page with the malicious tags which coerces his browser resolve that name. Bob asks Alice to resolve that name. Here comes recursion: eventually the query arrives at our evil server. Which sends back a response with an unexpected (evil) Additional RR.

If Alice’s cache honors the unexpected record, it’s 1995 —- buy CSCO! —- and you just poisoned their cache. Worse, it will replace the “real” data already in the cache with the fake data. You asked where WWW.EVIL.COM was (or rather, the image tags did). But Alice also “found out” where WWW.VICTIM.COM was: 6.6.6.0. Every resolver that points to that name server will now gladly forward you to the website of the beast.

4. It’s not 1995. It’s 2008. There are fixes for the attacks I have described.

Fix 1: The QID race is fixed with random IDs, and by using a strong random number generator and being careful with the state you keep for queries. 16 bit query IDs are still too short, which fills us with dread. There are hacks to get around this. For instance, DJBDNS randomizes the source port on requests as well, and thus won’t honor responses unless they come from someone who guesses the ~16 bit source port. This brings us close to 32 bits, which is much harder to guess.

Fix 2: The RR set poisoning attack is fixed by bailiwick checking, which is a quirky way of saying that resolvers simply remember that if they’re asking where WWW.VICTIM.COM is, they’re not interested in caching a new address for WWW.GOOGLE.COM in the same transaction.

Remember how these fixes work. They’re very important.

And so we arrive at the present day.

5. Let’s try again to convince Bob that WWW.VICTIM.COM is 6.6.6.0.

This time though, instead of getting Bob to look up WWW.VICTIM.COM and then beating Alice in the race, or getting Bob to look up WWW.EVIL.COM and slipping strychnine into his ham sandwich, we’re going to be clever (sneaky).

Get Bob to look up AAAAA.VICTIM.COM. Race Alice. Alice’s answer is NXDOMAIN, because there’s no such name as AAAAA.VICTIM.COM. Mallory has an answer. We’ll come back to it. Alice has an advantage in the race, and so she likely beats Mallory. NXDOMAIN for AAAAA.VICTIM.COM.

Alice’s advantage is not insurmountable. Mallory repeats with AAAAB.VICTIM.COM. Then AAAAC.VICTIM.COM. And so on. Sometime, perhaps around CXOPQ.VICTIM.COM, Mallory wins! Bob believes CXOPQ.VICTIM.COM is 6.6.6.0!

Poisoning CXOPQ.VICTIM.COM is not super valuable to Mallory. But Mallory has another trick up her sleeve. Because her response didn’t just say CXOPQ.VICTIM.COM was 6.6.6.0. It also contained Additional RRs pointing WWW.VICTIM.COM to 6.6.6.0. Those records are in-bailiwick: Bob is in fact interested in VICTIM.COM for this query. Mallory has combined attack #1 with attack #2, defeating fix #1 and fix #2. Mallory can conduct this attack in less than 10 seconds on a fast Internet link.

It is obvious that Mr Kaminsky has been “played.” I am going to refer to this from now on as the “Matasano debacle.”

I don’t give a fuck how you are going to refer to it.

July 19, 2008

In the words of n3td3v the magnificent

Filed under: Misanthropy — Sophia @ 9:42 pm

… im older now and looking to the future… maybe
a job in the government as a toilet attendant…

It’s funny, no that’s not the right word, what I really mean is, it’s hilarious how the life ambitions of a 30-year-old Scottish man are exactly the same as those of 98% of the neo-Greek population.

But even funnier is that n3td3v was being sarcastic.  The idiot neo-Greeks are not. It really is their insignificant life’s dream to work an as much as humanly possible unchallenging government job, get fat and die without ever doing anything worthy of the slightest mention.

Thank god that people like Henry Kissinger are bent on destroying everything neo-Greek, including the fat neo-Greeks fortunately.

June 23, 2008

You are a fucking idiot

Filed under: Misanthropy — Sophia @ 12:44 pm

and you shouldn’t exist, you shouldn’t even have the right to exist.

Yes, you all know the one I am referring to; the fucking idiot that publicly denounces everyone and everything related to Facebook, yet secretly maintains an account and spends considerable amounts of time “networking” on that cesspool.

February 10, 2008

XSS vulnerability “researchers” are gay

Filed under: Misanthropy — Sophia @ 10:17 pm

I have never tried to hide the color of my hat. This is the first in a series of posts that will remove any doubts regarding where my loyalties lie.

Back to the topic under discussion; XSS vulnerability “researchers” are gay. Notice the quotation marks. If you spend your time looking for XSS vulnerabilities you are not a vulnerability researcher, you are simply gay. Take a deep breath, see the truth in my words, understand your situation. Now, either accept it and smile while you are taking it deep in the ass, or take steps to not be gay any more. I doubt that you can make it in the real world of real men, but you can at least try.

“But Sophia,” I hear you say, “why are we gay if we look for XSS vulnerabilities?” The answer is simple, gay padawan. First of all you must understand that you are blind to it because your puerile mind has become so accustomed to thinking about XSS and the same-origin policy that you are unable to follow even the simplest logically developed thought. Now that I have opened your fat, oleaginous eyes to your primary inability, let us move to your gayness.

Your days are full of materialistic thoughts, you want fame and you want money. And you want them quickly. The sooner, the better. You lack any significant technical ability, in fact you are completely untalented. But what is even worse is that you lack any desire to become something more than the waste of flesh that you are. Are you following me? Are you able to see the incompatibility of these two major driving forces of your miserable existence? I know you have difficulties in that department, but try to make an effort this time.

This brings us to your predicament. You spend your time, sometimes even all of your waking hours, trying to find an easy, non-technical, non-challenging way to satisfy your primary need. It consumes you. You convince yourself that you are doing “research,” when in reality all you do is an exercise that even a monkey would find as boring, mindlessly repetitive and unfulfilling. But you don’t care about that. What you care about is fame. And money. So you continue to look for XSS vulnerabilities. Slowly but surely you stop caring about women and heterogeneous sexual intercourse. You see it as a waste of time; time that you could spend pursuing your materialistic dream.

You become gay.

I won’t even start describing the mind frame and sexual preferences of the “people” that deface websites using XSS vulnerabilities. I already feel infected from using the acronym “XSS” eight times in this post.

January 10, 2008

A counteractive to the spread of democratic vulgarity

Filed under: Credo — Sophia @ 7:11 pm

The mere multitude is everywhere with its empty photographic eyes.

Everywhere the mediocre are coming in order to make themselves master.

A declaration of war on the masses by higher men is called for.

July 11, 2007

Idiocy

Filed under: Misanthropy — Sophia @ 5:41 pm

You are an idiot if you write in uppercase the first letter of each and every fucking word.

You are an idiot if you constantly interrupt your co-workers just to tell them your idiotic and completely irrelevant opinions.

You are an idiot if you say things just to impress people without supporting them with properly developed arguments.

You are an idiot if your mobile phone’s ring volume is set to the maximum possible setting.

You are an idiot if your mobile phone’s ringtone is Bon Jovi’s song “It’s my life.”

You are an idiot if your code lacks any indentation style.

You are an idiot if you don’t use white space and new lines in your code.

You are an idiot if your functions’ comments are exactly the same as your functions’ names.

You are an idiot if you copy the functions you want to re-use in every file you want to use them in, and because, obviously, the compiler gives you an error, you append an ‘1′ to their name.

You are an idiot if your code has buffer overflows in every other fucking line. Thankfully, your idiocy in this case makes other people happy. However, don’t think that this means you are not an idiot. You are. You are a fucking idiot.

You are an idiot if you bring your disgusting food in an office shared by other people who, in contrast to you, try to actually work.

You are an idiot if you ask questions first and google later. Yes, it is true that there are no stupid questions. You are simply an idiot.

You are an idiot if you think that people don’t want to work with you because of your race. No, it’s not your race. You are simply a fucking idiot.

You are an idiot if you lie constantly and you don’t keep track of what lies you have said.

You are an idiot if you are in your thirties and 90% of your sentences end with “make me a happy man.”

You are an idiot if you think people are kidding when they call you an idiot right in your idiotic face.

You are an idiot if you employ an idiot.

June 9, 2007

No happiness without order

Filed under: Credo — Sophia @ 6:53 pm

“No happiness without order. No order without authority. No authority without unity.”

February 22, 2007

Dear Boss,

Filed under: Misanthropy — Sophia @ 9:03 pm

I keep on hearing the police have caught me but they wont fix me just yet. I have laughed when they look so clever and talk about being on the right track. That joke about Leather Apron gave me real fits. I am down on whores and I shant quit ripping them till I do get buckled. Grand work the last job was. I gave the lady no time to squeal. How can they catch me now. I love my work and want to start again. You will soon hear of me with my funny little games. I saved some of the proper red stuff in a ginger beer bottle over the last job to write with but it went thick like glue and I cant use it. Red ink is fit enough I hope. The next job I do I shall clip the lady’s ears off and send to the police officers just for jolly wouldn’t you. Keep this letter back till I do a bit more work, then give it out straight. My knife’s so nice and sharp I want to get to work right away if I get a chance.

Good Luck.

Yours truly,

January 28, 2007

A torrent of excrement

Filed under: Misanthropy — Sophia @ 1:05 pm

Democracies electing their sewage
till there is no clear thought about holiness
a dung flow from 1913
and, in this, their kikery functions, Marx, Freud
and the american beaneries
Filth under filth, Maritain, Hutchins,
or as Benda remarked: “La trahison”

 Democracies electing their sewage

December 3, 2006

The path of mankind

Filed under: Credo — Sophia @ 12:52 pm

The path of mankind

“Together we have lit a flame that the ages shall not extinguish.

Guard that sacred flame, until it illumines and lights again the path of mankind.”

Blog at WordPress.com.