Cramming Software With Thousands of Fake Bugs Could Make It More Secure, Researchers Say (vice.com)
It sounds like a joke, but the idea actually makes sense: More bugs, not less, could theoretically make a system safer. From a report: Carefully scatter non-exploitable decoy bugs in software, and attackers will waste time and resources on trying to exploit them. The hope is that attackers will get bored, overwhelmed, or run out of time and patience before finding an actual vulnerability. Computer science researchers at NYU suggested this strategy in a study published August 2, and call these fake-vulnerabilities "chaff bugs." Brendan Dolan-Gavitt, assistant professor at NYU Tandon and one of the researcher on this study, told me in an email that they've been working on techniques to automatically put bugs into programs for the past few years as a way to test and evaluate different bug-finding systems. Once they had a way to fill a program with bugs, they started to wonder what else they could do with it. "I also have a lot of friends who write exploits for a living, so I know how much work there is in between finding a bug and coming up with a reliable exploit -- and it occurred to me that this was something we might be able to take advantage of," he said. "People who can write exploits are rare, and their time is expensive, so if you can figure out how to waste it you can potentially have a great deterrent effect." Brendan has previously suggested that adding bugs to experimental software code could help with ultimately winding up with programs that have fewer vulnerabilities.
We can't manage to build the smallest bit of software without bugs, and now we're supposed to introduce large numbers of fake bugs that are, in fact, provably not exploitable.
Sure...that'll work.
Right up until the 'fake' bugs turn out to actually be exploitable (because, you know, we were wrong about them), and the bad guys win again.
A thousand pounds of wood moving at 300 feet per minute. Don't get in the way.
Before you know it, those fake bugs can easily turn into actual bugs. During porting, during updating, during review, etc.
Instead of laying a minefield of false positives to hide sloppy mistakes, why not just fix the exploitable mistakes in the first place and learn from the experience about what NOT to do?
Once a critical nuber if bugs is introduced the software becomes unusable hence making it unattractive for hacz0rz to exploit.
sudo rm -r -f --no-preserve-root /
... literally.
The bugs _are_ still there. They're just harder to find.
What could POSSIBLY go wrong?
E Proelio Veritas.
This guy is an idiot. An increase in complexity - which this most certainly would entail - will always lead to an increase in genuine bugs. And, as was said by someone further up... when programmers already can’t write bug-free code, how the heck are they going to make up 100% guaranteed non-exploitable false bugs which - at the same time - are indistinguishable from the real thing to a skilled hacker?
#DeleteChrome
We have enough issues with trying to make bug free code. So let's add bugs that we "think" aren't exploitable. So we now have the following categories of bugs.
1. Organic, non-exploitable (we already have these)
2. Organic, exploitable (we already have these)
3. Deliberate, non-exploitable (we "want" to introduce these)
3. Deliberate, exploitable (we hope to not introduce any of these... Just like we already hope to not introduce any of type 1 and 2 bugs above... Yea, right.)
Wow. If this isn't the stupidest idea to come out of an idiot in a long time. Let's review this carefully. The suggestion is to spend time to come up with 'bugs' that are proven not to be a problem to the software. Hmm, In addition, these 'bugs' cannot be used to exploit any known and even unknown coding issue.
For those who don't have an education in writing safe software which is 90% of Android and Apple developers this alone would take up more time than it does to program an application in the first place. In fact, this is a GREAT idea for how to put exploitable bugs into programs. No one would have a clue as to why the code is present and when asked by the IT staff the answer given would be, "we don't know so it must be necessary"?
Or, better yet, Garbage in, garbage out. Let's add more garbage.
But might be tough since it might only be a matter of time before someone makes a mechanism by which to filter out auto-generated "bugs."
the real advantage is: when your boss comes up to you and asks about a bug...."No, no" That's a chaff bug...honest.
Oil and tobacco companies did the same thing. Panic that the public is going to find out what terrible products they have, sponsor a bunch of fake research to waste everyone's time by claiming that all worries are unfounded, and take in the dough. Now security researchers want us to do the same thing? I'm all for wasting the enemy's time but the collateral damage here is again... the public. Because now everyone who would be legitimately interested in finding and fixing bugs will also be wasting their time. And if there's a "key" for finding the automatically inserted bugs and ignoring them, how would we keep this away from blackhats if the project is open source? And how will we keep users away from these fake bugs?
This is an application of an age old conflict strategy. Tricking your enemy into thinking they have found a weakness is a well proven tactic if effort is put in to correctly prepare for the situation.
I guess Agile isn't getting the job done, but this is just another in a long list of make work methodologies programmers are deeply entrenched in doing in order to make their jobs perpetual. Also, it's a great hedge for the CPU industry which doesn't have any killer apps to further justify increased computational capacity for the average user. In smartphone land, the approach to forced obsolescence is security / OS updates being withheld from consumers quite maliciously. For desktops and laptops, the update genie is long out of the bottle, so you have to come up with some other way to make people's computers slow. Honeypot code is definitely a new way to do exactly that.
The downfall of Waterfall is that eventually, you can have a complete and working product. But nobody wants to make a Windows XP or Office 2003 that works forever and gets the job done.
1) if you have 500 fake bugs then how are the white hat hackers going to tell you about the real bugs that lurk in your system?
2) how do you prevent the fake bugs from being miscoded to accidentally becoming real bugs? Developers think it's a dummy fake bug and ignore all bug reports about it but it's truly a real bug.
This might work. Right up until day 2 when someone leaks the list of "chaff bugs"
More bugs, not less, could theoretically make a system safer.
Just like how adding actual bugs to food makes it tastier.
It must have been something you assimilated. . . .
Microsoft already tried it with Windows. It didn't work.
PS - Feel free to include sendmail, openssl, or tons of other projects with tons of bugs. But seriously, as others have pointed out, if we can't deal with fixing bugs, adding "safe" bugs is just a recipe for making more exploits.
My code is full of FEATURES, boss!
I can't see how to do this without spending a lot of time ensuring that the bugs you are adding are non-exploitable.
So, during product definition phase, you're going to have to convince the Product Manager that you want to take more time on the application development by adding exploit bugs and then testing said bugs to ensure that they can't be exploited?
Great non-intuitive idea that clearly came out of academia. Clearly Dolan-Gavitt has never worked for a living.
Mimetics Inc. Twitter
Add enough kool-aid to dilute it.
If cramming code with bugs increases security, the code I write is incredibly secure.
When did Slashdot become a "focus test my dumb idea" site? Can you make reasonably secure code that looks insecure at first glance? Sure - you just spend a relative large amount of time securing that particular code. The problem is once you've created those patterns that you know works, hackers can just exclude those same patterns from their searches. In order to be secure, they have to be predictable in terms of how they interact with the rest of the code, which makes them obvious to someone knowing what they're looking for. And even if it's less likely that these pieces of code are exploitable because of the amount of work that went into making them, you now have 100 fold more attention from the hacker community looking to break them because once you break one, you break every software they're in.
Babes with big tits, speedboats and mountains of cocaine.
Otherwise, what's the point?
Mimetics Inc. Twitter
I don't like to call anybody an idiot, but I don't know any other way to end this sentence.
Mimetics Inc. Twitter
That's all I really needed to read. I'd love to write any lengthy rant here to entertain any /.'ers, but I think that says it all. Far cry from cooking up some experimental code that isn't production worthy at all, or SaaS where it's built to drive, function, and fund a business model, no way is your experiment anything more than that.
I'm sure some one has a rank of OSS software against vulnerabilities and/or exploits in their code-base, introduced their "bug" idea into a fork of the application and saw how it went over a period of time. Skipping their academic paper, I saw nothing of that and more of a tip to promote their LAVA system, plus a but of academic accommodating and citing of peers papers.
Sounds cool in academia world as a proof-of-concept to put a paper out and get more grant money, but that's all I'll promote. Anyone who's written a bit of code, maintained anything software related at all knows this is absolutely not realistic.
"Brendan has previously suggested that adding bugs to experimental software code could help with ultimately winding up with programs that have fewer vulnerabilities."
This is not correct. His theory seems to be that you will get fewer exploits. The number of vulnerabilities will remain constant.
From someone that doesnâ(TM)t have to maintain the code
What if you bug insertion tool has a bug and 1% of fake bugs you insert are actually exploitable bugs?
Remember
1) Every program contains at least 1 bug
2) Every program can be reduced by at least 1 line of code
3) By induction from 1,2 every program can be reduced to a single line of code which is incorrect.
Fake bugs will bring you DIRTY source code.
Oh, yes, i did remember the god of spaghetti monster.
This idea comes under the heading of "Well, I don't have any useful research, so why don't I publish a paper taking a contrary tack and get noticed."
Clearly the author has, never written a line of code in his life that somebody has to maintain, dealt with product managers that want more for less, worked with QA and security or documented anything that he has written (how do you document that you've put deliberate bugs in the code that should be ignored down the road?).
So, write up a paper extolling the virtues that would be picked apart by any competent professional knowing that others in academia will never think about the practical implications of what's being suggested.
Mimetics Inc. Twitter
"... techniques to automatically put bugs into programs..."
and
"...once they had a way to fill a program with bugs..."
I think I've found my natural calling
Yay, I can finally get a job as a programmer!
Hire me! Hire me!
I can honestly say that this idea is so dumb that it hasn't been parodied in the comics (yet).
Mimetics Inc. Twitter
putting bugs into software.... pffft.... been doing it for years now, as have most others in the biz
determining that they're benign.... now that's the hard part; who signs off on that?
Let's suppose (big if) that we can cram a program with bugs that are either highly unlikely to be exploitable, or provably not exploitable. How long would it take an attacker to learn to recognize a real bug from a manufactured bug, and filter out the probably-manufactured ones?
How long would it take to build a classifier to recognize and flag probably-manufactured bugs?
This might make more sense if we combined this technique with better means for closing exploitable, or probably exploitable, bugs. But man, color me skeptical.
Finding God in a Dog
The software would know to avoid them and hackers would simply look at the code to figure it out. Got to love these security through obscurity ideas.
Not a problem for coder or documentation, the compiler would insert these non-bugs
The real vulnerabilities will still be there. This is an age-old concept called "security through obscurity" and is only minimally effective.
This would only make it even more difficult if researchers have to navigate their way through decoy code designed
against finding real bugs in the first place.
Not to mention, bloated code becomes even MORE bloated code. :|
So the entire idea is " If you can't fix the bugs in the code, hide it amidst a bunch of fake bugs in code ? "
In the history of anything, has security through obscurity EVER worked in the long term ?
Most attackers use fuzzing for finding bugs to analyse further. Hence these need to be bugs that can be found by fuzzing. Fuzzing needs either a crash or crass bad behavior to detect a bug. So all these "non exploitable" bugs can actually be exploited for DoS or will break your application for the right input data. That is the first reason this is unworkable. The second one is that this makes software hard to maintain and hard to test. It is already hard to maintain and test software, and tthis will make it much worse.
If you want to demotivate attackers, use careful input validation, input normalization and privilege separation and you are pretty much done. But these elementary measures are apparently already beyond most people writing software. And that is the real problem here. There is no magic technology that will make insecure software secure. There is only getting people that are experienced, know what they are doing and understand security write it. Nothing else will help.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
I do that one better. My programs are full of REAL bugs.
Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
I was right all along - they are not bugs, they are features!
Some settling may occur during posting.
Pretty damn secure if it doesn't actually work.
1. Get your coders all drunk and stoned.
2. Pressure them to write lots of code.
3. Have testers find all the bugs.
4. Have the (now sober) coders plug their bugs with end-point logic, but not outright remove them.
5. Profit!
Table-ized A.I.
This is exactly why I believe that Microsoft has the most secure OS on the market today.
This one needs the foot icon. The first rule of application security is that obscurity is not security. Also assuming a hacker who's compulsively raiding your software will ever run out of energy is also an incredibly stupid idea. I like the way this one plays out. It's hilarious, but it won't work.
This signature has Super Cow Powers
"fake" bugs? No, these are real bugs, just non exploitable ones.
I don't want software to crash or do funny things if it can be avoided. Security is nice but it comes after functionality. If it is not functional, there is no point using the software at all. It is almost like the security guys want to make everything unusable, just because things that are unusable can't be exploited.
then you look dumb (or possibly have legal liability) for intentionally creating vulnerabilities in your code.
How about stopping using programming languages that enable any bug to be exploited (like C/C++), and starting using programming languages (which created in the internet age!) which naturally strong against anyone/anything exploiting any bugs???
People who cannot write secure software are incapable of judging whether these inserted "bugs" are actually non-exploitable. Most likely, the much smarter attackers will just find a veritable cornucopia of exploits.
because none of this can be automated, making this claim irrelevant.
This starts to sound like inserting a complex set of data to obscure the real code. Rather like encryption, only those who had the roadmap to the bogus bugs would be able to tinker safely...
but poor engineering
Good news is we can claim that our bugs were on purpose.
Bad news is these 'safe' bugs are sort of like additional requirements on the s/w.
This adds complexity, which adds to the likely hood of more unsafe bugs.
Kelly Johnson once said never wound a bad idea, kill it dead, dead, dead.
If there ever was an idea that needed this rule, this is it.
Any odds on who with reliability issues embraces it?
so it never in anyone's execution path, so it matters not.
why look for exploits in the source when you have binaries to step through!?
Make it impossible for security researchers to find the NSA sanctioned holes. Good idea (if you're down with the deep state)!
News for baristas, shit that's hip!
and clean up your code.
Code thats full of bugs is not a feature. Secure your code and have real experts help with that.
Domestic spying is now "Benign Information Gathering"
I was taught the bebugging technique during my CS degree over 20 years ago.
https://en.wikipedia.org/wiki/...
Finding bugs can be done automatically. Research is being done to use AI to locate bugs and exploit them. I can see such software with a feature to identify fake bugs aka non-exploitable bugs.
And they generally get though our vigorous internal security scans just fine (i.e. the code generally compiles). And none of this fake bugs, my decoy bugs are real ones. Genuine bugs. Lots of then.
So many that even the most determined hacker is unlikely to figure out how to make the software work correctly, let alone hack it.
First is this is going to contribute to code bloat and make it harder to maintain the code. I've seen a few programmers here on slashdot admit that they've had serious "WTF?" moments when reviewing their own code years or even just months later. Having deliberately non-functional code is going to make support programmers brains hurt, I just know it.
Second is: Your going to have to do a lot more testing to make sure those do-nothing bugs really are inert on your customers systems. What do you do when your code on a customers system conflicts with some obscure factor in their run-time environment? This will add another level to the "It works on our systems" problem.
Third: Software licensing terms aside, I think deliberately adding to flaws to code has the potential to open a can of worms in terms of liability.
I need a wheelchair van for my son. Help me get the word out. https://www.gofundme.com/wheelchair-van-for-jj
No. The idea is so stupid, it's not worth even discussing. It's like we haven't had 50 years of KISS concept.
I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
The Tesla model?
One must ask the question: What is the opportunity cost of adding "thousands of fake bugs"?
Also, how do you prevent your programmers from accidentally fixing those fake bugs, thus not only wasting their time, but undermining your deception effort? This means you must track every fake bug and document them as features.
Yeah, this isn't going to happen in the real world. I can just imagine the software manager agreeing to create a "fake bug features database" and attempting to lasso all his programmers into referencing it every single time they make a code change. You know, so they don't accidentally-on-purpose remove that brilliant diversionary defense of a phalanx of pseudo bugs.
This has "Stupid and Impractical, Not to mention Significantly Alarming To Customers and with Detrimental Reputational Effects", written all over it.
I did a double-take and went, "like, what? did I see what I thought I saw? " And then I go and look more closely and lo, the absurdity is sincere.
File under 'M' for 'Manic ranting'
This would be pretty stupid. Bugs are bad, mmm-kay? It would be better to just make the code convoluted and redundant but without bugs if you want to wear out attackers.
On the plus side, you'll know when to stop testing! Since you know all the bugs you planted, if QA finds all of them, you've got a great QA team doing their job, and it's likely they found the ones you did not plant as well.
Obviously, this researchers knows nothing about how coding works. More complexity means more bugs and even intentional "harmless" bugs (if such a thing even exists) can have unintentional side-effects that could be leveraged by an attacker. And now the team of coders working on a project should all agree that "oh these bugs are there on purpose so don't fix them, just test them properly to make sure they can't be exploited".... All because of the idea that we want to waste the time of attackers who, by definition, have unlimited time. Unlike devs.
Time flies when you don't know what you're doing
pointy haired boss had two choices;
let's hire more programmers to add fake bugs to our programs
or
let's hire more security people to help audit and remove security issues from our programs.
his advisor tried to make it simple and steer him in the right direction, it worked so many times before.
except for this time.
On a long enough timeline, the survival rate for everyone drops to zero.
How long would it take to build a classifier to recognize and flag probably-manufactured bugs?
In an arms race, "how long does it take to (reach the next level playing field)" is a relevant factor. A temporary measure is temporary, but it protects for as long as it lasts.
Singularity: a belief in the "God" idea with the "demiurge" relation inverted.
This is about the most half-baked idea I have seen in the programming world for ages....
It sounds good until you realize that your non-exploitable bug has a serious problem. And that, because you were lazy, that same âoefakeâ bug is used all over the place. Oops!
No
I know this is Slashdot and nowadays people don't even read the summary, let alone the article, much less the actual paper to which the article links, but there's an awful lot of straw littering the floor here.
The chaff bugs are inserted by an automated tool, they will not have to be written or worked around by people writing the actual code.
The authors are aware that the chaff bugs must not be exploitable.
The authors are aware that they will face automated tools for finding bugs and determining their exploitability.
The authors are aware that this is just a proof-of-concept and would require refinement to be useful in the real world.