Showing posts with label security. Show all posts
Showing posts with label security. Show all posts

20080211

Password: Impossible

Link

Aviram had a post on how he thinks password complexity rules are a bad thing. To a degree, I agree with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more complex you make password requirements, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more likely your users are to try to find some way to subvert that requirement (like Aviram did - change your password a bunch of times so that you can go back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original).

Unfortunately, however, passwords are a core part of application security. Until two-factor systems become convenient for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user and cost-effective for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 provider, password complexity rules are a fact of life. Right now, if a user wants to use two factor aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're left carrying (or hooking up a webcam to) several RSA tokens, carrying a card in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir wallet, and ensuring cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir cellphone is always on. Now, I like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea of using SMS as a two factor verification as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 odds of me losing my phone and my wallet (which has all my passwords) at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time is pretty slim.

So, how I really feel about password requirements is that I do like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time being, if all sites used really low-threshold password requirements, it allows users to reuse passwords. So what if an attacker can't brute force cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir way into your bank account? Do you use that password on some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r system? If that site doesn't enforce a lockout or a change policy, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n how likely is it that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker is going to be able to find out that you use that ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r system? Do you use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same identity on multiple systems?

So what is a user to do? For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 typical user, I honestly don't know. I use a password safe with about a hundred entries in it. That password safe is on an SD/USB device I keep in my wallet. It's encrypted using AES, and a really long passphrase. I'm down to a very small number of passwords that I actually remember and know anymore. But it's a major inconvenience for anybody who's using passwords all day every day on different systems. To really protect your passwords, your safe needs to have a long passphrase and a short lock timeout. And that doesn't mean that attackers can't get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 passwords from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 clipboard or submitted forms. For an ordinary user, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first response is probably "why bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r?"

Keychain is getting close to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 level of system integration that makes it easy for users to use. However, not everything on Mac uses Keychain. 1Password adds quite a bit of functionality to extend cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ease of use. But that's still mac only. On Windows, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's KeePass, which has some nice system integration and some additional features (like TAN's) that make it really nice. And since it's open source, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are alternatives for Mac, Linux, and mobile devices.

But I still don't think that gets cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reach to all users cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way it needs. Remembering to back up my password safe is a pain - I need to back it up at a few locations in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 event that I lose my device, and I won't put it on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 web where it becomes available for anybody else to download and bang on forever until cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y unlock it. I would have to protect cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 download with a really strong password, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n where am I going to keep that password?

And regarding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 90 day change policy - that is a good thing. Once an account is compromised, it could be months before it's actually used because, particularly with financial accounts (credit cards, online bank accounts, etc.), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y tend to be sold in lots on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 open market. The person who compromised cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 account is highly unlikely to be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one to ultimately gain from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 account compromise - it's just an asset to be sold to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 highest bidder.

20071109

Teaching Without a Net

A post I still haven't put on here is an amazing offer and opportunity that I've gotten locally to help in a classroom, and a few more really good professional connections. Tonight was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first opportunity I've had meeting with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 class to actually demonstrate anything.

For a group of students who are learning cyber-defense, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're learning attacking. While most application hacking you can only learn by doing, I was asked to at least demonstrate first. In my professional career, I've enumerated a lot of databases by injection attack, but oddly have never had an opportunity to use SQL injection to enumerate an entire MySQL server. I deliberately didn't try much attacking on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application before cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 class, I just verified that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re were holes to work with - I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 thought process is every bit as important as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specific techniques.

I know, it was nothing shocking, but I thought it was a nice touch to try to do something in a classroom that I had never specifically done. I've enumerated db's with injection attacks, but not mysql.

And completely off-topic, kudos to pdp for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 find on jar url attacks. very slick stuff. Any site that receives uploads of anything in a ZIP format (meaning, almost any kind of archive, including OpenOffice document, JAR, ZIP, blah, blah) becomes a cross-site scripting host - and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script runs in context of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server hosting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 jar.

20071016

No-Tech Getting Hacked

Link

While Johnny Long's talk about No-Tech Hacking at BlackHat and Defcon 15 was very informative (don't make things too hard on yourself), sometimes carrying around a camera, building trojan horses, or paying cash to a local thrift store for a 2.99 USD cable box is a little more work than you really want to go through. I'd like to introduce you to no-tech getting hacked.

Colleague is very particular about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 computing environment at home. The "family computer", nobody runs as root, is frequently re-imaged, has quite a few best practices for keeping it safe, and it does not have any sensitive information. The family knows not to click links from emails, be careful where you visit, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole nine.

Well, Student (a family member of Colleague) is beginning to apply for colleges. College applications are expensive to fill out (I think it was about 50-75USD at a lot of places last time I looked), and depending on scores or interests, you might get little favorable response from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r night, Colleague got a phone call from University, asking to speak with Student. Student goes on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 call, and Colleague goes about some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r work. 20 minutes later, Student emerges, full of pride that Student had just completed a college application. Without having to pay for it. For free. Over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone. Not only that, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 caller ID said local directory assistance. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 college was in a different state. Student didn't ask for a callback number or any way of verifying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recruiter was indeed from University. Whatever information cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 caller didn't have about Student before, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y certainly have now. (I believe Colleague is now in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process of filling out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paperwork for having Student's name changed to Undercover).

Sometimes you have to look for it. Sometimes, it looks for you.

20070918

Evil Mashup

Now, neicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se services by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves are evil, but I was thinking about setting up a new kind of mashup for collecting sensitive information - more like trade secret kind of stuff.

scanR and qipit are service where you use your phone to take a picture of something you need to pass through OCR. You use your phone to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bits to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 provider, who cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n does OCR on it, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y email you a PDF of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results. They recommend doing this for things like meeting notes on a whiteboard. Doing something like this is every bit as dangerous as putting sensitive business documents on Google Docs - why would you want to do it? Well, services like that depend on people who just assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're trustworthy. Now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se services may or may not be completely trustworthy and secure from outside attack - but that's not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point.

Combine that with something like reCAPTCHA, and now you've got something really powerful. Use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reCAPTCHA model of displaying two images, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user solves both 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ý bet365y solved OCR for your sensitive data mining operation. Human handwriting is pretty hard for a computer to work out, but a humans can generally work out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meaning of sloppy writers by using context.

20070911

Some Things are Easier to Fix than Find

Okay, I've not gone off my rocker. It's almost true.

When performing an application test, you might not find every single instance of a particular vulnerability. Due to time, tool, or ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r resource constraints, some things simply slip through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cracks. A common response to this is to enumerate all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m that were found with a great big note to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 developers that this is a pervasive issue, and that a global policy needs to be adopted to fix cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m all. And of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's always cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pushback - "we'll fix exactly cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 instances you find."

This is where I think "old school" static analysis far outshines cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new fangled static analysis engines. With a really good developer, grep, and a hammer, fixing semantic flaws really comes down to a few short steps:

  1. Identify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 common idioms used that result in "bad things". These will differ from environment to environment, which is why you have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sharp developer. Some examples:
    1. <%= %> tags
    2. Connection.createStatement()
    3. .exec()
  2. Grep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 entire source tree for those idioms.
  3. Replace. The examples above become:
    1. tags (in Java. And I realize 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 things you need to do to make that work)
    2. Connection.prepareStatement() and PreparedStatement.set...()
    3. Get rid of it
Again, that's a really, really broad strokes example. But although a lot of shops use bad API's, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in a way that's consistent. So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 replacement is consistent. And it's quicker to grep for those cases than it is for an assessment team to perform a complete deep dive on every single form element and known values that go into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application. It's next to impossible to cover every edge case in a running application. Tcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are tools that can help you do that, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're not free, and you still have to perform all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 assessment work to determine that it was covered. Why not just understand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 set of API's generally used, fix those, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n do a good code review on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remainder, possible uncovering some additional API's that can be grep'ped.

20070812

Content Restrictions - A Call for Input

Link

RSnake has had several conversations with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Mozilla team on some security features he would like to see, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y've latched onto is Content Restrictions. The idea is that a site can tell your browser "I only serve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se types of content, don't accept anything else from me" RSnake has asked folks to provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir input on what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y'd like to see.

Here's how I'd like to see that pan out:

  • The content-type restrictions probably should not go into an XML file, or cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 browser should have serious restrictions on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XML, such as not expanding entities, etc. If I can't trust cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site for some reason, how am I to trust that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 XML won't DoS my browser?
  • The content-type restrictions should probably come in headers (a la Etag's), not on a file on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site (a-la robots.txt), because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 restrictions may be different in different paths of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site - consider a single host that hosts several applications, each of those may return different types of content. This would also give applications cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to dynamically change those restrictions (unfortunately, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's header injection or response-splitting, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attack can certainly mangle cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se responses as well).
  • If I can tell a browser only to trust me so far, it would be wonderful to be able to extend this even furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. For example: don't trust 302's from me that take you out of my domain (WOW!), don't send back any requests to me that wouldn't also send Cookie n. Only POST to me if post parameter n is included, don't ever GET, HEAD, TRACE, to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se paths - only POST.
And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n this is off cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 topic, but one feature I'd love to see is for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Yes or OK button to default to doing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right thing. For example, if a site has an expired certificate, if you click Yes, Yes means to do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very bad thing we just told you not to. Anti-phishing says Click Yes to visit this naughty site we've already determined is naughty. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y know it's naughty, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y know what it's trying to spoof, so make Yes take you to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 real site, not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fake one.

Be sure to send your input to RSnake.

20070808

Thoughts on QA Security Testing

In several different contexts, I've been involved in conversations concerning testing for security defects in QA. Here's my take on it.

Remember that I'm a fundamentalist. I love cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 American League (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Senior Circuit), but hate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DH. I believe engineers should be trained in securing, but not hacking, and I believe that coders should be trained in coding correctly, but not security. I know those sound shocking to people who are experts in security, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's nothing different about eliminating an injection attack than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is in ensuring that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new presentation layer doesn't barf.

That being said, I don't think QA testing needs to do security testing. They do need to perform "out of bounds" testing, however. QA groups generally take cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 functional requirements of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application, and test to ensure that all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 functional requirements are met, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y don't test to ensure that things outside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 requirements are properly handled. For example, if a field is supposed to be non-blank, alpha-numeric characters, with a maximum length of 20, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y will make sure that when non-blank, alpha-numeric characters numbering fewer than or equal to 20 are entered, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do not cause cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application to barf. They generally don't test to ensure that more than 20 characters cause a proper warning, or that non-alpha, non-numeric characters don't cause an application failure.

Even with a stored cross-site scripting vulnerability, a proper functional test will actually reveal that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 later-rendered pages don't render properly - this is assuming you have proper functional tests. But it will also reveal when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 input validation and output filtering techniques being employed aren't working - which are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 real core to stopping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 various types of injection attacks.

I am not advocating that later security testing be eliminated. Nor am I advocating that your developers not perform static analysis. I'm just advocating that QA groups begin testing for things that are outside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 functional requirements to determine that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application fails gracefully, and that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y report anything suspicious back to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 development team. In order for this to work, it's critical that your functional requirements be very specific about what is allowed, and that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 QA testing not only ensures that what is allowed works, but that things outside cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 allowed range don't work. We still need security experts to engineer cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application properly and to do real security testing for logical flaws (and yes, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 few semantic flaws that will fall through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous steps) after a proper code/QA/rinse-repeat cycle.

20070804

Finally, somebody sees it my way

Link

Okay, Pravir had cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea all on his own. But this is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 soapbox I almost constantly stand on when it comes to security.

If you don't want to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 article, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 gist is that if you're depending on input validation to fix your semantic flaws, you're missing a great deal of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 application where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data bounces around and could potentially get re-broke. And that you potentially end up denying characters that are really legitimate in some context, just not one.

Now, I know Pravir is running cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 CTF competition at DEFCON, which makes me wonder why he had this post yesterday. Eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r he has a bunch of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m queued and set to go, or he's listened to so many speakers say that something is a problem and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way to fix it is to do better input validation.

20070802

Adding a Request Token for RemoteField

Link

I've been writing a 15 minute expense tracker in Grails, and it was done in 8 minutes, but I've been spending little snippets of time improving it since that initial 8 minutes. After some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 discussions at BlackHat, I decided I'd try to start making some posts on how to do some things more safely in Grails.
The RemoteField Tag in Grails is uber-easy to use, you give it something like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:


value="${expense?.description}"
action="updateDescription"
id="${expense?.id}"
update="resultdiv">


The problem is that with all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 default documentation, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are two problems with this - key exposure, so you have to check this user's permission to edit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specified object, and XSRF. This isn't a problem with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tag, it's a problem with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 easy way of doing things in Grails - and this is identical to Rails. An ordinary CRUD call in [Gr|R]ails makes a URL like http://host////, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ID is available as params.id. And that ID is (under normal scaffolding), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 primary key of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 domain object in question. So an attacker just needs to put on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir site an iframe that makes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user do something like http://victim/app/epxense/delete/382, and if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no permission checking, it goes bye-bye.

Adding a level of indirection to keep cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PK in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 session and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n meaningless ID's on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 URL won't solve this because an attacker can just make a user delete all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own entries, etc. So you have to use a token that proves cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user visited cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page first, and making cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user solve a new CAPTCHA for every keyup is silly, right?
So generally, what you see is a hidden form element with a long random token that is also stored on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 session. When cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form goes back, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two tokens are compared to (somewhat) guarantee that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user was on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 correct "setup" page before coming to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 submission form.

I started down a handful of paths, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following were less than elegant:

  • Altering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remoteField itself was less than ideal because you would actually have to add several attributes to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tag to determine how you wanted to deal with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 token - do you want to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same token for all elements on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page? Do you want to use a different token for each element? What do you want to name it? Those decisions have to be carried across to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 action that gets called by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remoteField as well.
  • Actually replacing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 id attribute with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 session token actually worked, but only for one field on one form. If you wanted to do this in several places, because you've abstracted cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 id out, you'd have to make changes to a lot of existing scaffolding to get it right.
  • One thing I didn't try was keeping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 id's from a list() closure in session, keyed by new tokens generated for each one. This would take quite a bit of work, but would also remove some key exposure at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same time - as long as you don't use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tokens in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 session to order by. This would also allow you to add token checking as part of a beforeInterceptor because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keys are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 token ID's.
So I ended up with two methods that ultimately worked pretty well.

The first method is to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paramName attribute of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remoteField tag. If you don't specify cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paramName, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value that gets passed back will be with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 request attribute "value". So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 post parameter looks like "value=The+new+value". When I first put cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tag togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, I had no compelling reason to use anything ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than "value" as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name, so I used this to hold cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 token:


value="${expense?.description}"
id="${expense?.id}"
update="statusdiv"
paramName=${token}">


Then in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 controller:

if (! params[session.token]) {
render('Bad token')
} else {
...


The second method I tried was to append cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 token as anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r request parameter in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 id attribute, like so:
id="${expense?.id + '?token=' + token}"

This also works, although it muttles up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tag a bit, but it makes more sense in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 controller - just compare session.token to params.token.

Unfortunately, it was still up to me to generate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 token, remember to put it in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 form fields, and to remember to check it on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way back in. Not perfect, but security always comes at somebody's cost. In this case, it was mine.

20070728

Black Hat/Defcon next week

I'll be at Black Hat and Defcon next week, and I hope to see you cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. I've already got a pretty full plate of meetups before, during, and after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 con. But if you haven't signed up for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OWASP/WASC Cocktail Party, you might go ahead and try. I'm sure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 registration is closed by now, but I have a couple of colleagues who tried to sign up pretty recently and still managed to get in - so who knows.

Also, since my paranoia meter goes to 11, I will not be carrying any computing devices with me, save for my mobile phone, so don't expect to see too many posts during that time. I might post some mobile stuff if I see anything photo worthy, but I'm sure many of 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 people attending will have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 latest scoop for you.

20070722

Book Review - Secure Programming with Static Analysis

Link


I mentioned a couple of weeks ago Brian Chess and Jacob West's (of Fortify Software) new book Secure Programming with Static Analysis (Addison-Wesley Software Security Series). When I got home cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 day I mentioned it, I was giddy with excitement because I had just received my copy. I'm kinda' new to book reviews, so please bear with me.

The best and worst thing about this book is its scope. It's great because it covers static analysis from soup to nuts, including why an environment should adopt a static analysis program, how static analysis works, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 types of flaws that static analysis finds, how to correct flaws found by static analysis, and how to implement static analysis in your environment. However, that's also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 major shortcoming with it. Because it's so broad, it gets very technical in some points, and if you hand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 book to an executive type hoping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y read chapters 1, 2 and 3, you'd better hope cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y don't thumb to chapter 4 by accident or else cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y'll quickly dismiss cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 book. Note to publisher - make chapters 1, 2, and 3 a removable pamphlet.

Jacob and Brian were fortunate enough to have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 foreward written by Gary McGraw, whom I have a great deal of respect for. However, his very first illustration is correct only up to a point:

By contrast, on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first day of software engineering class, budding developers are taught that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can build anything that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y can dream of. They usually start with "hello world."
The point of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 paragraph (that engineering classes start with keeping people alive in mind, while development begins with features in mind) is spot-on and well taken. However, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's a very large segment of people writing code today who did not study software engineering, but started as hobbyists who learned HTML, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n decided to pick up a PHP book - chock-full of really bad examples.

Part One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 book is an overview of static analysis - why you should do it, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 different types of static analysis, and some really in-depth coverage of how static analyzers work - obviously cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're experts on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 matter, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 coverage is very good, but will be mind-numbing to those who don't actually study software. They make very compelling arguments for not only including static analysis as part of your development lifecycle, but also including it early in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lifecycle, and making sure that developers are performing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analysis as well.

Part Two covers some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problems commonly uncovered by static analyzers. They have many examples of bad code, but thankfully, almost as many examples of specifically how to correct it (after all, I'm about solutions, not problems). They discuss input validation, buffer/integer overflow, and errors and exceptions. Brian and Jacob have some very good examples from open source software, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fixes that were put into place, as well as some really good recommendations for additional libraries to use that will help alleviate some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 common mistakes that lead to buffer overflows.

Part Three covers environments or types of applications that are currently being written and some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 specific types of flaws that come up in those applications. They cover web applications, XML/web services, privacy, and privileged programs. The book does a really good job of covering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Struts Validator, but I see this section as needing a bit of work - while Struts is still probably cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most widely used MVC architecture, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Commons Validator can be used in webapps that are not Struts, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no mention that you can actually use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 validator outside of a Struts application, although using it within Struts makes it much simpler.

Part Four is Static Analysis in action. There are exercises to walk you through installing Fortify SCA (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's a demo edition included), performing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analysis scan, analyzing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 results, and even writing your own rules. I've not walked through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 examples, but anybody wishing to see what is involved will actually want to step through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se processes.

I know that Brian and Jacob spent a great deal of time on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 book. They bring a wealth of knowledge to something that just doesn't get covered much in books, yet it's a critical part of any mature security or development program. Static analysis does not cover every vulnerability possible, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ones it does catch it catches earlier, and with greater depth, than ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r methods.

I certainly don't agree with Brian and Jacob on every one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir philosophies. I've had cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pleasure of debating with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m on some of those philosophies, and I'm convinced I'm still right. Fortunately, those issues don't come through in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 book, and as a general reference for executives who need to be convinced of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 need of static analysis in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lifecycle, to security practitioners who need to know how to write rules for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir system (of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's a bent to Fortify SCA), to developers down in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trenches who need to understand what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir tool is telling cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, this book excels.

Additionally, of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 technical books that I've read in first edition, this one is probably one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best. I've seen very few grammatical flaws or even awkward sentences, and only a handful of code flaws. The writing, you can thank cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 editors for. The code example excellence, you can thank Brian and Jacob for - and yes, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y still write code.

20070720

httpOnly filter in Groovy

Link

I was able to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 httpOnly filter work in Groovy - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea was really appealing to me. However, it turns out that it doesn't syntactically save just a whole lot of effort. While groovy has duck-typing, it doesn't get pushed down to Java, so you still have to type everything within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Filter. Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, because it has to be recognized when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 app loads, not dynamically, you still have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same compile/reload cycle as you do with a filter written in Java. The only syntactical advantage (that I've seen so far) is being able to short-circuit some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tests because of "cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Groovy truth" and when rendering, you get to use GStrings instead of .append over and over.

So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re you have it - it's not that much cleaner to implement cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 filter in Groovy. I'll have to check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Grails API to see if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y pass you a true HTTPServletResponse, or if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's any possibility of wrapping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response that gets injected into controllers to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookie re-writing simpler.

20070719

Servlet Filter for httpOnly

Link

Well, zot! It turns out that you can still get at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies by XHR's getAllResponseHeaders().

But since it's still not really that harmful to add it, I've thrown togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r a servlet filter for adding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attribute when addCookie() is called. Except for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 httpOnly attribute, this is no safer than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing addCookie - meaning if you had header injection flaws before, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're still cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. Also, I didn't read RFC 2109 really carefully, so this may break version 1 cookies (however, RFC 2109 cookies are still considered experimental, and you wouldn't be using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m by accident).

Now, your container probably has control over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 session cookies, and those get added after all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 filters run, so you'll still need to consult your app server's documentation to see how to get it to set httpOnly on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 session cookie (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one cookie that needs it most).

Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, this does not check for cookies being added by addHeader() or setHeader(). Whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r you want to add similar checking to those or not is purely up to you.


public class HttpOnlyResponseWrapper extends HttpServletResponseWrapper {
private static SimpleDateFormat cookieFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss zzz");

public HttpOnlyResponseWrapper(HttpServletResponse res) {
super(res);
}

public void addCookie(Cookie cookie) {
System.out.println("Adding cookie");
StringBuffer header = new StringBuffer();
if ((cookie.getName() != null) && (!cookie.getName().equals(""))) {
header.append(cookie.getName());
}
if (cookie.getValue() != null) {
// Empty values allowed for deleting cookie
header.append("=" + cookie.getValue());
}

if (cookie.getVersion() == 1) {
header.append(";Version=1");
if (cookie.getComment() != null) {
header.append(";Comment=\"" + cookie.getComment() + "\"");
}
if (cookie.getMaxAge() > -1) {
header.append(";Max-Age=" + cookie.getMaxAge());
}
} else {
if (cookie.getMaxAge() > -1) {
Date now = new Date();
now.setTime(now.getTime() + (1000L * cookie.getMaxAge()));
header.append(";Expires=" + HttpOnlyResponseWrapper.cookieFormat.format(now));
}
}

if (cookie.getDomain() != null) {
header.append(";Domain=" + cookie.getDomain());
}
if (cookie.getPath() != null) {
header.append(";Path=" + cookie.getPath());
}
if (cookie.getSecure()) {
header.append(";Secure");
}
header.append(";httpOnly");
addHeader("Set-Cookie", header.toString());
}
}

public class HttpOnlyFilter implements Filter {
private FilterConfig config;

@Override
public void destroy() {
this.config = null;
}

@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
System.out.println("Got here");

HttpOnlyResponseWrapper hres = new HttpOnlyResponseWrapper((HttpServletResponse)res);
chain.doFilter(req, hres);
}

public FilterConfig getFilterConfig() {
return this.config;
}

@Override
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
}

Firefox adds httpOnly attribute support!

Link

Thanks to Alex for discovering this for you. This is a feature that security people have been waiting for for a long, long time. Only I thought it was going to be much longer before it was available. I'll go over what httpOnly is, why it took so long, and what you should do about it.
Ordinarily, Javascript has access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies that a user sends to a particular website. So you can access those cookies on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 page itself from javascript via document.cookie. This is actually rarely necessary, but a handful of sites still use it, so it needs to stay available.
The problem with this is that if a site has a cross-site scripting vulnerability, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n an attacker can gacá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cookies by cross-site scripting. For example, injecting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following script will send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies for a site (including session tokens) to evil.com:


document.write("");

Internet Explorer added support for a cookie attribute in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir cookies called httpOnly. By setting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 httpOnly flag on cookies, javascript is not allowed direct access to those cookies with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attribute set. This is also why all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 TRACE XHR vulnerabilities in IE were such a big deal - TRACE will send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response from TRACE is just text - so javascript has access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookies, only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're not cookies in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 response - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're just text.
Firefox has been very slow in adding support for this. There was a large discussion about it, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reason cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were slow to add it is because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cookie store would have to be updated to store that information. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are so many third-party applications that use access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Firefox cookie store that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y couldn't update cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 format cleanly. Now, that didn't prevent you from being able to use it before - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attribute was just ignored in Firefox.
Now that it's finally available, use it. If you're constructing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Set-cookie headers by hand, you can just add ;httpOnly yourself. If you're not, .NET allows you to set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attribute by configuration, and in some containers can add cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attribute to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 auto-generated session tokens cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves, or you can use a filter to add it. This will prevent direct access to session cookies in IE and newer versions of Firefox from accessing cookies directly by javascript, which is one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more serious attacks available by cross-site scripting (clearly not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only one.)

20070712

Google Evades Google

I received a spam on a gmail account today that didn't end up in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 spam bucket automatically. Ordinarily, gmail does a really good job of filtering SPAM, but this account, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n used Picasa's built-in invitation features to send an invite to me to lone used a different vector.

The spammer used an Italian free webmail account as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source address. (Maybe something like Nduja is making it in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wild already?) But racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r than use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 freemail account directly to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 spam, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y created a Picasa ook at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Picasa gallery. The invitation mechanism allows you to put whatever text you want in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 body of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 invitation, which is where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y put cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 invitation for me to send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m my personal information.

There were no links in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 body of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 email itself, except back to Picasa. But what was really interesting about it is that it evaded cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Spam filters by using a Google service. It even had cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DKIM headers intact. So since Google verified cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticity of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sender using DKIM, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 email must be trusted, right?

Now, I don't know that Google is using DKIM or SPF to actually reject email yet - cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might just be measuring at this point. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's one way that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y won't necessarily be 100% effective.

Jeremiah Grossman: HTTP Response Splitting Revelations

Link

Jeremiah Grossman has released some additional information on pervasiveness and severity of HTTP Response Splitting (HRS1, not to be confused with HRS2 which is HTTP Request Smuggling).
While cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 recommendations are spot-on (input validation, output filtering), I'd say cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're a bit incomplete:
1) Input validation should always be whitelist. The recommendation cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re was to remove carriage returns or linefeeds. My recommendation is don't allow it if it doesn't fit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 model you're looking for.
2) (This is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more important). In my experience, it's almost never necessary to return a user's direct input as a header. The most common cases where I see Response Splitting/Header Injection are when a user preference cookie is set (what's your favorite background color?) or in redirects. If it's a user preference, that needs to be kept in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's session, not as a cookie in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user's browser. And if it's a redirect, if you can exploit an HRS by a redirect, you've almost certainly got an open redirect issue as well.

So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's my amendment:
1) Business rule - whitelist input validation
2) Proper output filtering (some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Java API's for writing cookies and headers will even throw exceptions if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 output isn't properly encoded, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 behavior is inconsistent - some throw exceptions, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs don't throw exceptions but encode for you, some do none of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above).
3) Look at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 engineering - is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information you're putting in a cookie really necessary to put in a cookie? Does it make more sense to put in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 session?

20070709

This is Why Our Job is Hard

Link

A colleague sent me this.

From Business Week's July 9 Issue in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Annual Retirement Guide:

HOW CLOSELY WILL THE ADVISER monitor your plan? Through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet, 401(k) investors can keep an eye on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir account daily if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y so choose. Your adviser should be watching regularly, too, and sending you alerts if you need to rebalance or make ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r changes. The adviser can best stay informed if you hand over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password to your account or, at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very least, forward your monthly statements. In most cases, advisers do not actually make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trades, but racá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r notify you, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n follow up to be sure you've pulled cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 trigger.
Nice. I've got a better recommendation. If your financial adviser needs your passwords to advise, advise cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to take a hike. Because somehow I doubt that anybody has advised cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to use something safer than a sticky note to store your credentials. In fact, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y probably keep that stuff on a spreadsheet. And if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y're a really good adviser, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y put it on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir mobile phone, too.

It doesn't matter how much you trust your financial adviser not to steal your money. It matters how much you trust everybody who your financial adviser comes into contact with.

No wonder it feels like an uphill battle.

20070707

Evading Fingerprint Technology

Link

I'm not a forensic scientist, so if I make some forensic assumptions, don't necessarily believe cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m.

A colleague of mine once said of biometric security devices "it's only bits". That one statement has completely changed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way I look at biometric devices.

The Mythbusters in one episode were able to fool fingerprint security devices using a few of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more obvious and less dramatic (no need to review Season 1 of "24" here) means of fooling cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m - including using a photocopy of a thumbprint against a system that also checks for heat and pulse. And those are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more obvious methods of fooling cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader (to fool cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader, fool cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader itself).

But I've always been concerned about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 systems even if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader itself is foolproof:

  • The way your fingerprint is registered in a database is by using a combination of attributes of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way your fingerprint is constructed. Yes, your fingerprint (assuming you have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m - some people don't even have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m) is unique, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number of attributes that are measured is finite. And to reduce false-negative rates, I would assume that finite number is somewhat small. The more prints that are in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more chance that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a collision between two sets of prints when using pure arithmetic to determine a print. This can result in false-identification. Because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attributes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system measures are common between me and some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r guy, some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r guy sometimes registers as me (even if he's not in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 system).
  • Even if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader itself is secure, is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 channel between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database secure? Can I get in between and eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r alter my bits to resemble somebody else's, or can I just send a new transaction with somebody else's bits? Of course, that depends on me understanding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 algorithm in order to determine what somebody else's bits are, but:
  • We all know that secrets don't last. The algorithm that biometric security devices use to generate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 bits is proprietary. Why do open security algorithms work? Because millions of eyes have looked at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 algorithms - and some of those eyes are really smart. A basic premise of keeping secrets is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 algorithm should be open, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 keys should be secure.
  • And lastly, I have personally seen many instances where biometric devices are assumed to be sufficient. Consider a really big data center without man traps that uses biometric devices. Since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data center is sufficiently large, nobody knows all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 people who work cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, so if you refuse to let somebody in, you're being perfectly rude. An attacker just has to wait for somebody on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 inside to approach cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 door to go get coffee, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker approaches cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader just as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 door opens. Of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 guy on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 inside holds cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 door open for him - he's legitimate just by virtue of trying to use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 biometric device.
  • And of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rubber hose method. Hold a gun to my back, and I'll probably use my fingerprint to let you in. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mantrap is small enough, it's a good measure against rubber hose, even, but still not effective against:
  • More extreme measures. Now it's time to review Season 1 of "24" or a Dan Brown book.
Now, I didn't say all this to scare you out of using biometric devices. But biometric devices are only suitable as one means of aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication. You still have to make identification, and you should require more than one means of aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication (depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sensitivity of whatever it is you're trying to protect). And lastly, you need sufficient ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r controls that you can't just walk around cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 security device (a la cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tollgate in Blazing Saddles).

20070705

News and Notes - 2007-07-05

I've not posted in awhile because I've not spent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time (my own fault) to put togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r a good post about any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se items. All links are worth a look-see, and probably worth a post in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir own right.

  • Brian Chess and Jacob West's new book Secure Programming with Static Analysis has been released. Pick up your copy today. I don't agree with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m 100% on some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir philosophies, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 book is going to be worth cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 read, and will hopefully lend some weight to those who are trying to make static analysis a regular and vital part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir SDLC.
  • Christian Matthies has put togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r a really excellent explanation of DNS pinning, anti-DNS pinning, anti-anti-DNS pinning, and anti-anti-anti-DNS pinning. For those who have been curious, but never read a whole post on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two (anti- and anti-anti-anti-), this one's prolly worth keeping bookmarked for anybody you're bringing up to speed.
  • SANS has finalized round one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir GIAC Secure Software Programmer certification. I was very happy to hear about an exam cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y were developing with a couple of universities last autumn, and it's now coming to fruition. It's still operated like any ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r GIAC offering, so cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's not yet a corporate installment of it where you get all your coders certified at once. But it's certainly worth cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 look - and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y do have sample questions. For you C people, it is specific on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 different types of overruns. You need to learn all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 different ways a buffer overrun happens (off-by-one, fencepost, etc., etc.).
  • sla.ckers.org has had a couple of interesting threads of late. First, Internet Exploder globs for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 language of choice in scripting. Short story cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, whitelist input validation and proper output filtering. The real vulnerability cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is because people actually filter for "javascript" or somesuch. Second, Firefox hasn't corrected (completely) cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 non-alpha-non-digit issue. Again, same rules apply. If you're making sure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 input is good, as opposed to not-bad, and if you're properly output filtering, you should be fine.
That should be enough to keep you reading for a bit.

20070626

The Future of Ethical Hacking

I often come across as uber-idealistic, sounding like problems can magically solve cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves in earlier phases of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lifecycle, touting training as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first step to getting problems fixed. I've also probably come across sounding like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no need for anybody in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 development team to think about security per se, because what ends up being exploitable started out as eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r a semantic flaw (read: typo), or a logical flaw (read: forgetful engineering). I emphasize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se (sometimes to a fault) because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 earlier things are fixed, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 less expensive cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are to fix.

One might think that a by-product of better coding, source code reviews and scanning early and often, and security engineers being involved during product engineering would somehow lead to a lack of importance of ethical hackers. Indeed, I've often stated that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Secret Service, when being trained to identify counterfeit money, look at zero counterfeit bills (I've not found anything to substantiate this, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Secret Service site that tells US Citizens how to identify counterfeit currency has much more information on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 real artifact than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fake). However, even in a perfect world, white-room development lifecycle with security testing, real engineering processes, and well-trained coders, I think ethical hacking would still be a critical component, albeit in a somewhat different role.

I've talked about semantic flaws, and logical flaws, but never really addressed something that looks more like design exposures. These are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problems that are inherent to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 design, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y actually look like design features. For example, a car that is designed to go 300km/h and from 0 to 100km/h in 4 seconds, when put in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hands of an inexperienced driver, causes a degree of exposure to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 driver and those around him. While I have much more confidence in PayPal than with a mom-and-pop location keeping my financial information (or many of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m), a site retains your financial information for extended periods of time is some sort of exposure.

So what do design exposures have to do with ethical hacking? I think really good ethical hackers, to be employable long-term, need to be able to engineer ways to exploit those design exposures, or better yet, combinations of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. An ethical hacker, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 future, will be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 person who can say that even if your site has zero of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OWASP Top 10 (probably meaning cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 site is non-functional by today's standards), that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are features cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re that when used in concert with ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r sites, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r features in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same site, or certain timing of circumstances, can lead to really serious problems.

Fortunately, right now, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re's no need for all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ethical hackers to forget everything cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y know about injection attacks. There are plenty of those yet to fix. And because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are still plenty of those to fix (and because users still click links in emails), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attackers haven't been forced to become more sophisticated in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir attacks.