SSH Taking Stand On Vulnerability
jeffy124 writes "SSH Communications is recognizing the vulnerability claim made by UC Berkeley researchers earlier this week. They say it is not a practical threat to the ssh protocol, people can still remain confident in keeping communications over ssh private. While this is true IMO, they are open to and will be researching techniques that would make the standard stronger, along with hopes of lessening this vulnerability."
How is it with openssh?
It is a sort of exploit, but it goes close along the lines of "well what happens if the hacker calls halt on the machine and dumps memory" like any program can do anything much about that..
If you have people capable of reconstructing passwords from key timings then you have got yourself a problem.
The only solution is to inject fake data..
... although I also like C#..
The best way to keep private is wispering... shh!
It is a well known vulnerability that passwords can be reconstructed out of key timings - but this issue can be avoided easily, i.e. with terminal applications sending the whole password at once.
Unless TCP/IP sends exactly one character in each packet, I wonder how the attacker can guess the password by the keyboard latencies.
¦ ©® ±
Why the silence?
I wonder who is taking the ad banner's bait to "Hire a Superstar" from VA when these guys can't even get a dopey message board up and running, much less a real web application.
-linux... they can't *give* that shit away.
Your password is:
god
Everyone knows it.
The new Slashcode is failing AT ALL TIMES.
How are you gentlemen!!
Because I always cross my hands when I type my password, and I do it following my favorite song rithm.
There already is a solution to this. By using a buffer and a timer you can get multiple characters in a packet. This technique is used in the SNA session environment that utilizes emulators.
Basically, keystroke input is placed in a buffer. The buffer sends its data when the buffer is full or when a buffer timer has expired. If you type very slowly, one character at a time is sent. However, if you type normally several characters are sent in each packet.
The only drawback with this technique is that it can increase latency. If the input is only a single character, as would be the case in selecting a menu option, the user will experience latency as they wait for the timer to expire and send the keystroke. To reduce the latency to a minimum it becomes neccessary to very carefully adjust the buffer size for your particular application. Too small a buffer and the ability to guess password length still exists. Too large a buffer and latency becomes unaceptable.
By padding every packet (or login, or whatever) up to a mandatory size (say, 512 bytes of random data), and not sending the username or password until you hit 'return.'
This, I think, would easily prevent people from findind out how long the password really is...
Just get rid of the notion that it has to be 100% like a shell just with a secure communication channel... if you md5 the password locally there is no problem.
Lest we forget, SSH communications is a commercial vendor, most of which have a notorious reputation for discounting the severity of vunerabilities. Sorry guys, but I'd have a lot more faith in hearing Theo from OpenBSD talk about security implications than a company that sells the "sizzle" of security (albeit with a decent product)
When's the last time you heard a major vendor acknowledge a severe hole was actually severe. They have to worry about the lawsuits, and anything they say could be used in a class action, so while this particular threat isn't outright horrifying, it's likely worse than the spin it's getting from ssh.com.
----------------- "I have a bone to pick, and a few to break." - Refused -------------------
They won't get me, I'm using a Dvorak keyboard.
That will throw them off the track.
Increase computer security - use Dvorak!
I know, I use the SSH.com client to talk to the OpenSSH (on OpenBSD) server. However, I don't use the key-exchange methods, so I can't comment on that facet.
The SFTP function is a really nice feature, too. All I had to do was enable the server in the OpenSSH /etc/sshd_config file, and it just worked. Beautiful.
Finally, they offer a free "educational, charity, and personal recreational/hobby use" license -- just the thing for using my Windows desktop to talk to my home firewall.
I've never had a hiccup... no complaints at all! I think that's as much a credit to OpenSSH as it is to SSH.com -- they have a standard, and they've stuck to it!
"...America's great minds of today, teaching America's great minds of tomorrow. Poor bastards." -- A Beautiful Min
Impractical? Not with a determined group of people bent on breaking in.
People will try anything if they want something bad enough. These people don't factor in the motivation of some groups.
Just MHO...
Do you like German cars?
It appears, using openssh 2.9p2 (that currently in debian/unstable) that it sends the entire password in one TCP packet, so no problem there then.
If you are this paranoid then you would already be using public key authentication.
I knew one manager who wanted to disable SSH and go back to telnet/ftp because of the SSH1 deattack vulnerability! Let us keep these things in perspective.
sounds like what Microsoft said about the hotmail "vulnerability"
Am I the only one who sees a quick solution to this problem, that doesn't even require a patch?
;)
When you're typing in your password, don't type it in fluidly. Just wait a second here or there between random letters when you enter it. It'll confuse the heck out of anyone trying to sniff it from you
----
Bryan Samis
http://www.thesamis.net
Every major issue I've taken to SSH in the last year have been added to the product suite.. There a good product, a good company with good intentions. While everyone was saying long ago that they were just getting rid of sshv1 to make money they were say NO ITS FLAWED...
And btw it Isn't a major vulnerability...take a look at. Oh and the ssh.com client does buffer...
Let's say you enter one char of text, your client recognizes this and begins to send out more bytes of data to provide cover for your char. This cover should last for a random period of time after the initial key press (say, 1-5 seconds) and should consist of a random number of packets sent with timings from 0 to the average timing between key presses. The packets have to be something predetermined by the client and server so that the server knows to ignore these packets. Any other packets the client sends which happen to match this predetermined packet will have to be escaped somehow.
so when i go to type in
passwd
the client sends these packets:
p
(cover packet)
(cover packet)
a
(cover packet)
s
(cover packet)
(cover packet)
(cover packet)
(cover packet)
s
(cover packet)
(cover packet)
w
(cover packet)
(cover packet)
(cover packet)
d
(cover packet)
This should destroy an attacker's ability to determine the timing frequencies between your keypresses. The length of the text you've entered may still be determined, but only within a certain range, provided the cover packets last for long enough after a single keypress. That is, if the cover packets last up to 3 average key presses in length, then the attacker will know the length of the string you entered +-3 characters.
-f
www.blackant.net
And I did a quick check (tcpdump in one window, ssh in in another window) and there's no packet sent for each stroke of my password, one packet is sent when I hit <enter> at the end of my password. I suppose length could probably still be figured out from those packets, though. I'm running OpenSSH 2.5.2p2 (the version that came from RedHat with RH 7.1)
researching techniques that would make the standard stronger, along with hopes of lessening this vulnerability."
Whe you see that lock thingy on your browser just switch your hands on the keyboard. That's right, put your right hand on the left side of the keyboard and vice versa. We were going to write a technical paper on this put I just drew a picture on a napkin this morning.
Sinceretly,
SSH Communications
The timings that were used as a basic model were also taken from experienced touch-typists. The woman who presented the results said that there is a very simple countermeasure (she was joking, I think, but it's a very valid point): if you normally touch-type, just use a single finger to hunt-and-peck your passwords -- then the timings aren't what they "should" have been, and in fact their attack could actually make things worse by sending you down the wrong path to the password.
Anyway, I'm surprised this has gotten so much attention -- it is cool, but it really isn't practical in the least....
I tested in openSSH2.5.1p2 - the login password is sent in one packet, so the inter-key timing attack is crap for this.
The interkey timing applies ONLY AFTER the initial login. The cracker would have to have to somehow know you were exceuting something that involved entering a password, then capture the packets with your keystrokes.
This is getting way more play than it deserves, IMO.
"that's not encryption - it's a new perl script that I'm working on..." - from some Matrix parody
I always SSH as a user and then su root and type the password. SSH should have ghost characters that guarantee, that some packets are send in regular interval with some nonsense and typed characters should be synchronized to that rate.
It should not be much of problem to do that and perhaps it does not require any change in the protocol spec.
Even if the password remains secret, why should anybody be able to read the typed text?
Petrus
It's been mentioned that this could be solved by simply buffering X keystrokes before sending, and then send them all at once. This works, but as the poster mentioned, the latency it would introduce would be very annoying.
A better, modified version of this solution would buffer data ONLY when you're typing in a password of some sort. But who wants to manually tell SSH that they're typing in a password every time they run sudo or su?
The solution: while an SSH session is in progress, LD_PRELOAD a library that intercepts whatever library/system call disables echoing on a terminal (I don't know enough about terminals to know what call this would be). Then, enable buffering whenever the terminal echo is disabled. Problem solved!
If it's not a system or library call that disables echo, then just monitor for the escape sequence that does it instead.
You would of course pad the buffer so that you don't give away the length of the password.
If the client is modified to insert a random delay between keystrokes, the attack becomes MUCH harder to pull off.
The attack is not so much an attack against SSH as it is a general attack on crypto terminal sessions. IIRC, this form of attack was originally suggested as a way to intercept numeric keypad entries based on EM radiation from the keypad itself.
well the problem is with the implementation not the protocol. SSH protocol has a provision to send in null data. so if properly implemented then this defeats the attack.
how about we just ignore it.
it seems to me that far too much processing and logging is needed to get a small amount of information which only narrows down the list of posibilities. Also how many people run su or sudo on a machine? For security it should be only one. And also for security you shouldn't re-ssh off an exposed machine, but if you want to allow this you should use RSA keys.
Then we have the fact that the evesdropper has no clear way of knowing that anyone has input a password, so he has to analyse every keystroke and every response and try to find the input 's u' followed by return and then he has to take it on blind faith that it is 'su' and not 'di', 'sj', 'sn', 'd8', 'ab' or even 'u2' as these are all about the same spacing apart on the keyboard (for us non-touchtypists out there).
But then just suppose thay did get a password for say an ssh connection or even narrow down the posibilities what good would it do. They would have no idea where the connection was going to, but he could try the same thing with the ip/domain name, still on faith, so he now has to try and brute-force his way through different items first find the server, then find the username, then find the right password. Now there is the posibility that the username and password would be the same on both servers but that is why you would use the RSA keys to authenticate.
All in all no real information is gained. All you gain is data that if coupled with sociological, personality and typing profilles could lead to a security breach but would need to be focused on the client end of the connection and so would have much further reaching consequences as this is analisys on the Bletchly Park scale of things