20070428

False Positives vs. Non-Exploitables


Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r professional and I sat down to coffee a few weeks ago, and we got around to a conversation we seem to have often. I feel almost ashamed to publish a post on it when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no "ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r side of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 argument" here to defend itself. So please bear with me as I try to do both arguments justice (and tell you why my side is right).

Consumers of security tools have long asked that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool reduce cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of false positives. And this is certainly understandable - it's very difficult to know what to fix when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list of things that are broken includes so many things that aren't broken. All areas of security try to sell you on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir perfect false positive to false negative ratio. Theoretically, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two are on separate paths that at some point intersect - as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sensitivity of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool is increased, false positives go up, false negatives go down. As cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sensitivity is relaxes, false positives go down, false negatives go up. The cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365oretical ideal of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two is where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two are equal - this would be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lowest sum total of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two.

Tool vendors have to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir customers happy. And false positive to false negative ratio is one metric that all vendors use to prove cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir tool. None of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tools out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same taxonomy, result format, reporting, etc., so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only apples-to-apples comparison we have is false positive to false negative ratio.

Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool vendors work very hard to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 false positives to decrease, and depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 type of tool, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do it varying ways. Application firewalls may use anomaly detection racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than flagging everything with known-bad data. Static analysis tools build a call tree to see if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data is sanitized anywhere in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process, and if so, it's not reported. Dynamic analysis tools don't report "evidence of", cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y report real exploits.

This is both good and bad. The good side is that because false positives are low, when something is reported, you can be pretty sure it needs to be fixed. When a static analyzer finds an injection flaw, you know that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data goes soup to nuts without being properly checked or encoded. When a pen testing tool finds something you know it didn't find those pesky points where you got back an angle bracket, but just couldn't get a real injection attack.

However, I think that false positives have been confused with non-exploitables. When pen-testing, those pesky points where you get back a real angle bracket, but can't get a real injection to work, although cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no injection, you have sufficient proof that encoding is not taking place. And in static analysis, if you see a place where data goes to a "presentation layert" (database call, screen, wire, LDAP server, command shell, etc.) without being properly encoded, you have a real flaw, even though it's not exploitable.

There are two primary reasons that not reporting non-exploitables is dangerous:

  1. Although cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point is not exploitable today, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's a false safety net keeping it from being exploitable - a string length restriction that could change tomorrow, or an input policy that happens to be checked today, but when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same input is accepted from anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r source tomorrow, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same checks don't take place.
  2. When asked to fix problems, developers must take cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 test to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir decisions on what to fix. If output is not encoded in two places, and only one is reported, how will cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 developer learn what to fix by output encoding? They'll learn to fix cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ones cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool reports. So how so developers learn to code correctly? They don't - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y learn to code cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y always do, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n count on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool to correct cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m later. Even if it's not exploitable, non output-filtered code should be flagged (possibly rated differently in severity).
So for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security practitioners, do your developers a favor and document those "uncomfortable places" where you couldn't get a really good exploit to work, but you know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's something not behaving properly. When you're doing a manual code review, flag all of those places where data goes to a presentation layer without actual encoding.

And developers, do yourselves a huge favor and when a report comes back with flaws, demand that whoever made cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 report (your tool, your security team, your peer reviewer), explain to you why it's a problem. Don't simply fix that issue. Discover how you fixed it, and how you can apply cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same fix to ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r locations that weren't reported to you. And more importantly, make that fix a part of your programming habits, so that you just write it that way in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future.

1 comment:

  1. On this point - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365e security program I'm building looks to fix all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se situations without an eye towards whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r strictly speaking cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are exploitable.

    You might prioritize those that are easily exploitable vs. those that aren't, but if I for example have an input filtering problem, whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r it can truly be exploited might just depend on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cleverness of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker and an injection mechanism I haven't considered yet.

    So, its "we have a standard input validation library. If you're not using it, whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r you have an issue or not, you must implement with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 standard library/tool." Yes it leads to a bit of a monoculture, but I can at least fix flaws in one place racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than hundreds...

    ReplyDelete