20081121

CAPTCHA-Jacking

RSnake and Jeremiah Grossman did a really good and thorough job of going over clickjacking and many different ways that it can take place. And until I sat up one night and made my own example, I didn't consider how easy and how serious it was.

Before reading on, please note two things: 1) I'm not claiming to have discovered something new, and 2) I'm not recommending a new name or anything. Rsnake and Jeremiah did all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 work and listed a whole series of things that could happen that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y admitted were not exhaustive.

However, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most common way to work clickjacking is by completely hiding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target site in a transparent (0.0 opacity) iframe over "cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 red candy-like button". A teammate and I worked through a proof of concept, though where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea was to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 target site visible and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n use div's above cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iframe to hide all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parts you don't want. The most common example would be to have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user solve a CAPTCHA. There are plenty of sites that explain that using a CAPTCHA is a great way to eliminate XSRF and clickjacking all at once.

RSnake and Jeremiah were right - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best way to avoid clickjacking is by using framebusting code. That solves a couple of ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r problems (although because with IE you can specify a security zone for an iframe it's not bulleproof, but at least you could have noscript that warns cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might be getting clickjacked) such as dealing with DNS binding attacks. And if users were better about using different passwords for different sites, you can always ask for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir password for sensitive actions.

20080829

Favorites Scmavorites

Okay, a hundred sites have posted information on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone exploit where you can bypass cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security code required to unlock cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone. I don't think as I was playing with it last night that I discovered anything that nobody else has discovered. But I'll give a run-down of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 nifty things I was able to do with it once I got to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 favorites screen:

  • If a single favorite has a URL, you can tap that and get Safari - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 full shebang, so go to a jailbreak site. Game over. I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security code is stored on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SIM, however, so this wouldn't necessarily bypass that - but since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone is jailbroken, you should be able to run a telnet or ssh service in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 background (good luck following that IP address for long, though).
  • If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 favorite has a physical address, tap that to get to maps. More on that later
  • From Maps, put in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name of a company you know has a website. When cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pin comes up for it, follow cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 link - back in Safari. Game over - as above.
  • From Maps, you can also see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 home address of every contact on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone. Or overwrite cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contact information for every contact on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone.
  • If a Favorite has an email address, you can tap cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 email addy to get to a Mail compose window. Cancel cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message, and you have *full* mail access. Also, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are links...
  • Hit Text Message and you go to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS composer window. Cancel that SMS message, and you can read all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir previous SMS messages.
  • If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 victim's Home button is configured to go to iPod, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n you get full iPod controls.

Now, before you think I've gone all gloom and doom on you, I haven't. That's a very targeted attack against a single person. The most common way this would happen would be as a social engineering attack. I often get asked if somebody can use my phone because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir ride hasn't shown up at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bus stop yet. The Emergency Call feature is what that's for - press Emergency Call and tap cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 numbers you need, but you don't get access to all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r junk. So this is a one person at a time sort of attack. This isn't some freaky remote exploit (not that it couldn't be).

There are a couple of things I haven't experimented with on this. First, I've only got one iPhone and not a budget for doing research on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 iPhone, so jailbreaking it while it was locked could brick my phone at my own personal expense. If somebody else wants to hit a jailbreak site with a "locked" phone, be my guest. Second, some websites are able to open Maps from Safari - this works just like opening Youtube. Can you also open Stocks? Notes? Arbitrary ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r app on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone?

And of course, Apple will probably have this fixed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next rev of firmware (putting off copy/paste yet again). And until that time, you can eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r make new favorites with just phone numbers, or you can remove all your favorites, or you can change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 home button behavior to go to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 home screen instead of favorites. Or you can avoid getting your iPhone into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hands of strangers.

20080723

On Source Code Review

Link

First of all, Jeremiah Grossman's periodic Web Application Professional's Survey is online - so go take it.

That being said, I've kept quite silent on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of static source code analysis for awhile now because I'm pretty sure what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reaction will be, but one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 questions on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 survey was regarding which measures to application security go first.

There have been several places where static analysis has gotten a dissed, where it might not be necessary. Most notably of which, I think Fortify Software did cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own software a disservice at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Iron Chef Blackhat edition at Black Hat last year. The competition was between some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir source code analyzers and some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir dynamic analyzers. The application testers won hands down.

Before I begin, know that I believe that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no silver bullet to application security.  Nor do I think static source code analysis is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 "best" method of finding vulnerabilities.  Here are some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 valid or most important reasons that static analysis should not stand alone:

  • Static analysis is really best at finding semantic flaws - bad API use or failure to use certain API's, etc.
  • Static analysis doesn't give compelling pretty pictures and videos of your application giving up information.  The results of a static analysis are only meaningful to developers, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, only meaningful to developers who understand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 real risk of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 types of findings.
  • Static analysis almost always requires really expensive tools to do a really, really good job.  There are grep types of analyzers, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y don't follow taint through an application.
  • Static analysis may analyze components of your code that don't get used.  There are still prioritization decisions to be made.
  • Static analysis tools can't find logical flaws such as privilege escalation or XSRF.
  • Static analysis has different requirements than black box testing:
    • Developers who understand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code and can fix it
    • The source code
    • For many tools, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code needs to at least build (doesn't have to run)
However, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some really, really good reasons static analysis should be a part of your security toolbelt:
  • Static analysis can find vulnerabilities that dynamic analysis can't - corner cases.  "This cross-site scripting flaw only exists on Tuesdays" - if your application was tested in a running state on Monday, you won't know that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 flaw exists.  Thread safety issues are very bad for an application, but a black box test of an application might never cause one to come up, and if it does, it's nearly impossible to reproduce, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results don't say to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 oracle that it was that type of vulnerability.  (For example, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application gave you access even though you used cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wrong password.)
  • The results of static analysis are meaningful to developers.  They get lines of code back where untrusted data enters cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application, where it flows through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application, and when it exits cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application.  These are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exact lines that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 developers need to fix, which a black box test alone can't give you.
  • Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results of a static analysis are geared toward cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 developers, it provides "instant training" for developers.  "What does it take to make this shut up?"  (While I prefer developers understand why you want it to shut up, finding all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 places is pretty good, too.)
  • Static analysis can happen much earlier in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 development process, long before cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application is functional.  This gives black box testers more time to test cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 really cool stuff that static analysis can't find.
  • Static analysis can take place as part of a build process, automatically generating problem tickets and/or preventing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 promotion of code with high-probability, high-risk findings.  This can be done with automated black-box tools, but it requires a running environment - many more moving parts.
So I'm convinced that as long as Iron Chef Blackhat is run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same way as it was last year, static analysis will always lose simply because to a spectator, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results are just boring.  However, that doesn't mean that it shouldn't be a very, very vital part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 development process.

20080702

Coding is a Science, not an Art

This has more to do with coding than engineering - two different phases of development.

When I've done code reviews, when I very clearly see a flaw and point it out, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first response is denial. (See The Five Stages of Web Application Security Grief - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 devs have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same initial phase.) Developers are so quick to point out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 really old defenses (it's a hidden form field; we validate that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 drop down list only contains cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 values we expect when we render it). When you clearly explain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 failures of those defenses, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y move on to pure denial ("you have to show me"). Then you show cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

It doesn't have to be this hard.

Coders, know that writing code is not an art. It is a science. If it's a science, a found failure is not a comment on your value as a human being. It's a comment on your tendency to make typos, not press cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right key, or simply to not have adequate information to execute cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem at hand. If I were to say that your cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ory has a flaw - that hurts. You've really invested something of yourself into that. But if I simply point out that you failed to carry a 1 or to consider cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 null hypocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365sis, or to turn cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 knob before pressing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 button, it hurts much less.

Engineering is different. But if coders (myself included) were far less defensive about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir code and actually valued it enough to take recommendations on how to make it better, we could get to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 making it better part much, much sooner. Value your skill enough to allow ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs to help you make that skill better. Even cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most elite of ninjas need training.

20080629

Drive By Password Changing

Just glancing at some sites that I use day to day, I've found yet anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r that not only doesn't require cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old password to change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password, but also has no ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r evident controls to prevent XSRF. And this one is a pretty big one, too. I notified cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, but I'm sure I'll get a canned help desk response "to change your password, click on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Change Password link and enter your new password twice".

While I don't totally disagree with Billy Hoffman's paranoia of all things Web 2.0, you would think that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more Web 2.0 sites would actually be more concerned about security. Password issues aren't specific to Web 2.0, nor is XSRF. But you would think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 people working on implementing new methods would have already figured out how to do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old methods right.

20080612

Data Destruction


And I thought I was doing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right thing with tools like DBAN (when I only have a little time) or shred so I can set my own paranoia level high. I suspect at temperatures this high, that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's little magnetic remnant of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data. But you have to do this in a secure place (or shred first, melt later).

20080528

XPFA in Hollywood

Well, it turns out that Cross-Personality Framing Attacks (XPFA) aren't just fact, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y make good fiction, too. While Bruce Schneier asks his readers to come up with movie plot threats, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 writers for CBS (at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very least) are up to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same. I saw an episode of Without a Trace tonight (Season 4, Episode 5 - or 75 "Honor Bound") where an XPFA ends up being a very pivotal plot point in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 show. Certainly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r fictional shows where similar things happen.

It's unfortunate, however, that it doesn't just make for good fiction. These types of image-destroying attacks take place all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time, and real peoples' lives are being impacted because of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's simply no real defense against it. Sadly, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only real victims are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 people being attacked, and it's rare that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 people who "fall for it" are inconvenienced. So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's little incentive for people who read fake profiles and ads to disbelieve what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y read. This one really depends on people to be responsible, and just don't believe everything you read.