MAYHEM – automatically finding bugs and shell-spawning exploits in binaries [pdf]
users.ece.cmu.edu
users.ece.cmu.edu
Reddit's reverse engineering discussion: http://www.reddit.com/r/ReverseEngineering/
http://www.reddit.com/r/ReverseEngineering/comments/1h4vs4/r...
Nobody can reproduce the results or place their work on top of that. Research was not supposed to work that way (at least in my little universe :-), yet it gets published by the IEEE (but what does that mean nowadays?).
Further, publishing a program like this has the potential of finally having software that is not easily exploitable (eg. by requiring every Debian software to pass that program).
Now that it is closed source, only a selected set of people will be able to benefit from it.
Compare this to physics: if you drop this ball from that height under these circumstances, it will take that long. Everybody (with the right equipment) can reproduce this result quite easily. Not so in this case, which ironically could be even more reproducible than any physics experiment if it wasn't closed source.
When you reproduce that physics result, you're using a different ball in a different location and dropping it from a different structure.
If you simply took their program and re-ran it, it's like taking the exact same ball they originally used, climbing the exact same structure they used, and dropping it in the exact same spot. When you then get the same result, it doesn't tell you much, because you don't know if the result is coming from the ball, the structure, the location, or just a general universal phenomenon.
What good does it do to run identical software ten times? These computer-thingies are pretty deterministic. You're basically guaranteed to get the same result each time, but you have no idea if the result is because of the technique being presented, a quirk of the implementation, or just a bug.
(In this particular case, I admit that posting 1.2k bugs hints to its existence.)
Resist the temptation to marginalize security bugs. They don't exist in isolation.
While 1.2k bugs sounds like a lot, we can't make an inference about the severity of the bugs based solely on the number of them. Also keep in mind that the Debian repository contains thousands of packages. From the Debian 7.0 Wheezy release page:
"* more than 36,000 other ready-to-use software packages, built from nearly 17,500 source packages"
http://www.debian.org/News/2013/20130504
The best we can infer that given 1.2k bugs, there is some statistical probability that any number of them may be severe. Without studying the data, we can't say what that probability might be though.
Where does that 1.2K number come from, though? The abstract mentions only 29 (still a lot) and the results list 'only' 29, too, two of which where 0days. I admit I haven't read the whole article thoroughly.
I hope a free version of this can be built, it would be a nice additional QA step to run before release.
http://forallsecure.com/programs/1
...
http://forallsecure.com/programs/22630
But that seems like a waste of everyone's resources. What was the bug?For people unfamiliar with joeyh's contribution to Debian it is important to note that he is a legendary DD:
As a matter of fact, most programs are not linked to packages, and most packages are not present, including moreutils. You won't find it even by crawling.
However, we got 1 report for the Debian Installer, which I hope means only 1 problem was found.. which is nice, as the d-i code is mostly not written with this kind of robustness in mind.
All Mayhem developers are using Debian, and our cluster is running Debian as well. We've been using it happily for years. That's why we chose to analyze it first. I believe we will also have an impact on other distributions since bugs are getting fixed upstream.
Do you plan to release the tool one day? It will be a great asset to other operating systems developers as well.
Every bug reported by MAYHEM is accompanied by a working
shell-spawning exploit. The working exploits ensure soundness
and that each bug report is security critical and actionable.