<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Larry Osterman's WebLog : Security</title><link>http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx</link><description>Tags: Security</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Why are they called “giblets” anyway?</title><link>http://blogs.msdn.com/larryosterman/archive/2009/10/26/why-are-they-called-giblets-anyway.aspx</link><pubDate>Mon, 26 Oct 2009 16:05:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9912997</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9912997.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9912997</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9912997</wfw:comment><description>&lt;p&gt;&lt;img style="margin: 0px 15px 0px 0px; display: inline" align="left" src="http://photos-e.ak.fbcdn.net/hphotos-ak-snc1/hs260.snc1/10722_174480945344_708065344_2937574_248190_n.jpg" width="180" height="240" /&gt;&lt;/p&gt;  &lt;p&gt;Five years ago, I attended one of the initial security training courses as a part of the XP SP2 effort.&amp;#160; I wrote this up in one of my very first posts entitled “&lt;a href="http://blogs.msdn.com/larryosterman/archive/2004/05/04/126054.aspx"&gt;Remember the giblets&lt;/a&gt;” and followed it up last year with “&lt;a href="http://blogs.msdn.com/larryosterman/archive/2008/03/07/the-trouble-with-giblets.aspx"&gt;The Trouble with Giblets&lt;/a&gt;”.&amp;#160; I use the term “giblets” a lot but I’d never bothered to go out and figure out where the term came from.&lt;/p&gt;  &lt;p&gt;Well, we were talking about giblets in an email discussion today and one of my co-workers went and asked Michael Howard where the term came from.&amp;#160; Michael forwarded the question to &lt;a href="http://blogs.msdn.com/sdl/pages/about-us.aspx"&gt;Steve Lipner&lt;/a&gt; who was the person who originally coined the term and he came back with the origin of the term.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It turns out that “giblets” is a term that was used at Digital Equipment Corporation back in the 1980s.&amp;#160; DEC used to sell big iron machines (actually I used DEC machines exclusively until I started at Microsoft).&amp;#160; The thing about big machines is that you usually need more than just the machine to build a complete solution – things like Ethernet repeaters and adapters and other fiddly bits.&amp;#160; And of course DEC was more than willing to sell you all these fiddly bits.&amp;#160; It seems that some of the DEC marketing people liked to refer to these bits and pieces as “giblets”.&amp;#160; &lt;/p&gt;  &lt;p&gt;Over time Steve started using the term for the pieces of software that were incidental to the product but which weren’t delivered by the main development team – things like the C runtime library, libJPG, ATL, etc.&amp;#160; &lt;/p&gt;  &lt;p&gt;Later on, someone else (Steve wasn’t sure who, it might have been Eric Bidstrup) pointed out that the giblets that came from a turkey didn’t necessarily come from the actual turkey that you’re eating which makes the analogy even more apt.&lt;/p&gt;  &lt;p&gt;Thanks to Craig Gehre for the picture.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9912997" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/It_2700_s+Funny+_3A002900_/default.aspx">It's Funny :)</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Good News! strlen isn’t a banned API after all.</title><link>http://blogs.msdn.com/larryosterman/archive/2009/06/23/good-news-strlen-isn-t-a-banned-api-after-all.aspx</link><pubDate>Tue, 23 Jun 2009 20:01:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9799860</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9799860.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9799860</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9799860</wfw:comment><description>&lt;p&gt;We were doing some code reviews on the new Win7 SDK samples the other day and one of the code reviewers noticed that the code used wcslen to compute the length of a string.&lt;/p&gt;  &lt;p&gt;He pointed out that the &lt;a href="http://msdn.microsoft.com/en-us/library/bb288454.aspx"&gt;SDL Banned API page&lt;/a&gt; calls out strlen/wcslen as being banned APIs:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;For critical functions, such as those accepting anonymous Internet connections, strlen must also be replaced:&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Table 19. Banned string length functions and replacements&lt;/b&gt;&lt;/p&gt;    &lt;table border="1" cellspacing="0" cellpadding="2" width="1015"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="377"&gt;&lt;strong&gt;Banned APIs&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="326"&gt;&lt;strong&gt;StrSafe Replacement&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="311"&gt;&lt;strong&gt;Safe CRT Replacement&lt;/strong&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="377"&gt;strlen, wcslen, _mbslen, _mbstrlen, StrLen, lstrlen&lt;/td&gt;          &lt;td valign="top" width="326"&gt;String*Length&lt;/td&gt;          &lt;td valign="top" width="311"&gt;strnlen_s&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/blockquote&gt;  &lt;p&gt;I was quite surprised to see this, since I’m not aware of any issues where the use of strlen/wcslen could cause security bugs.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I asked Michael Howard about this and his response was that Table 19 has a typo – the word “server” is missing in the text, it should be “For critical &lt;u&gt;&lt;strong&gt;server&lt;/strong&gt;&lt;em&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;functions, such as those accepting anonymous Internet connections, strlen must also be replaced”.&amp;#160; &lt;/p&gt;  &lt;p&gt;Adding that one word makes all the difference.&amp;#160; And it makes sense – if you’re a server and accepting anonymous data over the internet, an attacker could cause you to crash by issuing a non null terminated string that was long enough – banning the API forces the developer to think about the length of the string.&lt;/p&gt;  &lt;p&gt;Somewhat OT, but I also think that the table is poorly formatted – the “For critical…” text should be AFTER the table title – the way the text is written, it appears to be a part of the previous section instead of being attached as explanatory text on Table 19 (but that’s just the editor in me).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Apparently in SDL v5.0 (which hasn’t yet shipped) the *len functions are removed from the banned API list entirely.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9799860" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Chrome is fixing the file download bug…</title><link>http://blogs.msdn.com/larryosterman/archive/2008/10/20/chrome-is-fixing-the-file-download-bug.aspx</link><pubDate>Tue, 21 Oct 2008 00:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9008170</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/9008170.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=9008170</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=9008170</wfw:comment><description>&lt;P&gt;I just noticed that Ryan Naraine has written that &lt;A href="http://blogs.zdnet.com/security/?p=2032" mce_href="http://blogs.zdnet.com/security/?p=2032"&gt;Google’s fixed the file download bug in Chrome&lt;/A&gt;.&amp;nbsp; This is awesome, but there’s one aspect of the fix that concerns me.&lt;/P&gt;
&lt;P&gt;According to the &lt;A href="http://src.chromium.org/viewvc/chrome?view=rev&amp;amp;revision=3285" mce_href="http://src.chromium.org/viewvc/chrome?view=rev&amp;amp;revision=3285"&gt;changelog&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;This CL adds prompting for dangerous types of files (executable) when they are automatically downloaded.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;When I read this, my first thought was: “I wonder how they determine if a file is ‘dangerous’?”&lt;/P&gt;
&lt;P&gt;One of the things that we’ve learned over time is that there are relatively few files that aren’t “dangerous”.&amp;nbsp; Sure there are the obvious files (.exe, .dll, .com, .bat, etc) but there are &lt;EM&gt;lots &lt;/EM&gt;of other file types that can contain executable content.&amp;nbsp; For instance most word processors and spreadsheets support some form of scripting language, that means that most documents downloaded can contain executable content.&lt;/P&gt;
&lt;P&gt;Even if you ignore the files that contain things that are clearly identifiable as “code”, you’ve still got problems.&amp;nbsp; After all, just about every single file format out there has had readers who have had bugs that would have allowed remote code execution.&lt;/P&gt;
&lt;P&gt;It’s unfortunate, but given the history of the past couple of years, I can’t see how ANY content that was downloaded from the internet could be considered “safe”.&lt;/P&gt;
&lt;P&gt;IMHO Google’s change is a good start, but I’m worried that that it doesn’t go far enough.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9008170" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>What makes a bug a security bug?</title><link>http://blogs.msdn.com/larryosterman/archive/2008/08/18/what-makes-a-bug-a-security-bug.aspx</link><pubDate>Mon, 18 Aug 2008 20:29:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8876876</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>22</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8876876.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8876876</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8876876</wfw:comment><description>&lt;p&gt;In my last post, I mentioned that security bugs were different from other bugs.&amp;#160; Daniel Prochnow &lt;a href="http://blogs.msdn.com/larryosterman/archive/2008/08/15/linus-torvalds-is-fed-up-with-the-security-circus.aspx#8876405"&gt;asked&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;What is the difference between bug and vulnerability?&lt;/p&gt;    &lt;p&gt;In my point of view, in a production enviroment, every bug that may lead to a loss event (CID, image, $) must be considered a security incident.&lt;/p&gt;    &lt;p&gt;What do you think?&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I answered in the comments, but I think the answer deserves a bit more commentary, especially when Evan asked:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“I’m curious to hear an elaboration of this.&amp;#160; System A takes information from System B.&amp;#160; The information read from System A causes a[sic] System B to act in a certain way (which may or may not lead to leakage of data) that is unintended.&amp;#160; Is this a security issue or just a bug?”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Microsoft Technet has a &lt;a href="http://technet.microsoft.com/en-us/library/cc751383.aspx"&gt;definition for a security vulnerability&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“A security vulnerability is a flaw in a product that makes it infeasible – even using the product properly – to prevent an attacker from usurping privileges on the user’s system, regulating it’s operation, compromising data on it or assuming ungranted trust.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;IMHO, that’s a bit too lawyerly, although the article does an excellent job of breaking down the definition and making it understandable.&lt;/p&gt;  &lt;p&gt;Crispin Cowan gave me an alternate definition, which I like much better:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Security is the preservation of:&lt;/p&gt;    &lt;p&gt;· &lt;b&gt;Confidentiality:&lt;/b&gt; your secret stuff stays secret&lt;/p&gt;    &lt;p&gt;· &lt;b&gt;Integrity:&lt;/b&gt; your data stays intact&lt;/p&gt;    &lt;p&gt;· &lt;b&gt;Availability:&lt;/b&gt; your systems and data remain available&lt;/p&gt;    &lt;p&gt;A vulnerability is a bug such that an attacker can compromise one or more of the above properties&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In Evan’s example, I think there is a security bug, but maybe not.&amp;#160; For instance, it’s possible that System A validates (somehow) that System B hasn’t been compromised.&amp;#160; In that case, it might be ok to trust the data read from System B.&amp;#160; That’s part of the reason for the wishy-washy language of the official vulnerability definition.&lt;/p&gt;  &lt;p&gt;To me, the key concept in determining if a bug is a security bug or not is that of an unauthorized actor.&amp;#160; If an authorized user performs operations on a file to which the user has access and the filesystem corrupts their data, it’s a bug (a bad bug that MUST be fixed, but a bug nonetheless).&amp;#160; If an &lt;em&gt;un&lt;/em&gt;authorized user can cause the filesystem to corrupt the data of another user, that’s a security bug.&lt;/p&gt;  &lt;p&gt;When a user downloads a file from the Internet, they’re undoubtedly authorized to do that.&amp;#160; They’re also authorized to save the file to the local system.&amp;#160; However the program that &lt;em&gt;reads&lt;/em&gt; the file downloaded from the Internet cannot trust the contents of the file (unless it has some way of ensuring that the file contents haven’t been tampered with[1]).&amp;#160; So if there’s a file parsing bug in the program that parses the file, and there’s no check to ensure the integrity of the file, it’s a security bug.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Michael Howard likes using this example:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;char foo[3];     &lt;br /&gt;foo[3] = 0;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Is it a bug?&amp;#160; Yup.&amp;#160; Is it a security bug?&amp;#160; Nope, because the attacker can’t control anything.&amp;#160; Contrast that with:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;struct     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int value;      &lt;br /&gt;} buf;      &lt;br /&gt;char foo[3];      &lt;br /&gt;      &lt;br /&gt;_read(fd, &amp;amp;buf, sizeof(buf));      &lt;br /&gt;foo[buf-&amp;gt;value] = 0;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That’s a 100% gen-u-wine security bug.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Hopefully that helps clear this up.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[1] If the file is cryptographically signed with a signature from a known CA and the certificate hasn’t been revoked, the chances of the file’s contents being corrupted are very small, and it might be ok to trust the contents of the file without further validation. That’s why it’s so important to &lt;a href="http://blogs.zdnet.com/security/?p=1576"&gt;ensure that your application updater signs its updates&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8876876" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Linus Torvalds is “Fed up with the ‘security circus’”</title><link>http://blogs.msdn.com/larryosterman/archive/2008/08/15/linus-torvalds-is-fed-up-with-the-security-circus.aspx</link><pubDate>Fri, 15 Aug 2008 23:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8870619</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>23</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8870619.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8870619</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8870619</wfw:comment><description>&lt;P mce_keep="true"&gt;There’s been a lot of discussion on the intertubes about some comments that Linus Torvalds, the creator of Linux has made about security vulnerabilities and disclosure.&lt;/P&gt;
&lt;P&gt;Not surprisingly, there’s been a fair amount of discussion amongst the various MSFT security folks about his comments and about the comments &lt;EM&gt;about&lt;/EM&gt; his comments (are those meta-comments?).&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The whole thing started with a &lt;A href="http://article.gmane.org/gmane.linux.kernel/706950" mce_href="http://article.gmane.org/gmane.linux.kernel/706950"&gt;posting from Linus where he says&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Btw, and you may not like this, since you are so focused on security, one reason I refuse to bother with the whole security circus is that I think it glorifies - and thus encourages - the wrong behavior. &lt;/P&gt;
&lt;P&gt;It makes "heroes" out of security people, as if the people who don't just fix normal bugs aren't as important.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;He also made some (IMHO) unprofessional comments about the OpenBSD community, but I don’t think that’s relevant to my point.&lt;/P&gt;
&lt;P&gt;Linus has followed up his initial post with an &lt;A href="http://www.networkworld.com/news/2008/081408-torvalds-security-circus.html?hpg1=bn" mce_href="http://www.networkworld.com/news/2008/081408-torvalds-security-circus.html?hpg1=bn"&gt;interview with Network World&lt;/A&gt; where he commented:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;“You need to fix things early, and that requires a certain level of disclosure for the developers," Torvalds states, adding, "You also don't need to make a big production out of it."”&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;and&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;"What does the whole security labeling give you? Except for more fodder for either of the PR camps that I obviously think are both idiots pushing for their own agenda?" Torvalds says. "It just perpetrates that whole false mind-set" and is a waste of resources, he says. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;As a part of our internal discussion, Crispin Cowan pointed out that Linus doesn’t issue security updates for Linux, instead the downstream distributions that contain the Linux kernel issue security fixes.&lt;/P&gt;
&lt;P&gt;That comment was the catalyst – after he made the comment, I realized that I think I understand the meaning behind Linus’ comments.&lt;/P&gt;
&lt;P&gt;IMHO, Linus is thinking about security bugs as an engineer.&amp;nbsp; And as an engineer, he’s completely right (cue the /. trolls: “MSFT engineer thinks that Linux inventor is right about something!”).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;As a software engineer, I fully understand where Linus is coming from: From a strict engineering standpoint, security bugs are no different from any other bugs, and treating them as somehow “special” denigrates other bugs.&amp;nbsp; It’s only when you consider the consequences of security bugs that they become more interesting.&lt;/P&gt;
&lt;P&gt;A non security bug can result in an unbootable system or the loss of data on the affected machine.&amp;nbsp; And they can be very, very bad.&amp;nbsp; But security bugs are special because they’re bugs that allow a 3rd party to mess with your system in ways that you didn’t intend.&lt;/P&gt;
&lt;P&gt;Simply put, your customers data is at risk from security bugs in a way that normal defects aren’t.&amp;nbsp; There are lots of bad people out there who would just &lt;EM&gt;love&lt;/EM&gt; to exploit any security defect in your product.&amp;nbsp; Security updates are more than just “PR”, they provide critical information that customers use to help determine the risk associated with taking a fix.&lt;/P&gt;
&lt;P&gt;Every time your customer needs to update the software on their computer, they take the risk that the update will break something (that’s a large part of the reason that that MSFT takes it’s time when producing security fixes – we test the heck out of stuff to reduce the risk to our customers).&amp;nbsp; But because the bad guys can use security vulnerabilities to compromise &lt;EM&gt;their &lt;/EM&gt;customers data, &lt;EM&gt;your&lt;/EM&gt; customers want to roll out security fixes faster than they roll out other fixes.&lt;/P&gt;
&lt;P&gt;That’s why it’s so important to identify security fixes – &lt;EM&gt;your&lt;/EM&gt; customers use this information for risk management.&amp;nbsp; It’s also why Microsoft’s security bulletins carry mitigating factors that would help identify if customers are at risk.&amp;nbsp; For example &lt;A href="http://www.microsoft.com/technet/security/Bulletin/MS08-045.mspx" mce_href="http://www.microsoft.com/technet/security/Bulletin/MS08-045.mspx"&gt;MS08-045&lt;/A&gt; which contains a fix for &lt;A href="http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-2257" mce_href="http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-2257"&gt;CVE-2008-2257&lt;/A&gt; has a mitigating factor that mentions that in Windows Server 2003 and Windows Server 2008 the enhanced security configuration mode mitigates this vulnerability.&amp;nbsp; A customer can use that information to know if they will be affected by MS08-045.&lt;/P&gt;
&lt;P&gt;But Linus’ customers aren’t the &lt;EM&gt;users &lt;/EM&gt;of Linux.&amp;nbsp; They are the people who package up Linux distribution.&amp;nbsp; As Crispin commented, the distributions are the ones that issue the security bulletins and they’re the ones that work with &lt;EM&gt;their &lt;/EM&gt;customers to ensure that the users of the distribution are kept safe.&lt;/P&gt;
&lt;P mce_keep="true"&gt;By not clearly identifying which fixes are security related fixes, IMHO Linus does &lt;EM&gt;his &lt;/EM&gt;customers a disservice – it makes the job of the distribution owner harder because they can’t report security defects to &lt;EM&gt;their&lt;/EM&gt; customers.&amp;nbsp; And &lt;EM&gt;that’s&lt;/EM&gt; why reporting security bug fixes is so important.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Edit: cleared out some crlfs &lt;/P&gt;
&lt;P mce_keep="true"&gt;Edit2: s/Linus/Linux/ :)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8870619" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>More proof that crypto should be left to the experts</title><link>http://blogs.msdn.com/larryosterman/archive/2008/05/13/more-proof-that-crypto-should-be-left-to-the-experts.aspx</link><pubDate>Tue, 13 May 2008 19:46:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8500758</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>41</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8500758.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8500758</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8500758</wfw:comment><description>&lt;p&gt;Apparently two years ago, someone ran a static analysis tool named "&lt;a href="http://valgrind.org/"&gt;Valgrind&lt;/a&gt;" against the source code to OpenSSL in the Debian Linux distribution.&amp;nbsp; The Valgrind tool reported an issue with the OpenSSL package distributed by Debian, so the Debian team decided that they needed to fix this "&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=363516"&gt;security bug&lt;/a&gt;".&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Unfortunately, the solution they chose to implement apparently &lt;a href="http://www.links.org/?p=327"&gt;removed all entropy from the OpenSSL random number generator.&lt;/a&gt;&amp;nbsp; As the OpenSSL team comments "Had Debian [contributed the patches to the package maintainers], we (the OpenSSL Team) would have fallen about laughing, and once we had got our breath back, told them what a terrible idea this was."&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And it IS a terrible idea.&amp;nbsp; It means that for the past two years, all crypto done on Debian Linux distributions (and Debian derivatives like Ubuntu) has been done with a weak random number generator.&amp;nbsp; While this might seem to be geeky and esoteric, it's not.&amp;nbsp; It means that every cryptographic key that has been generated on a Debian or Ubuntu distribution needs to be recycled (after you pick up the fix).&amp;nbsp; If you don't, any data that was encrypted with the weak RNG can be easily decrypted.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Bruce Schneier has long said that cryptography is too important to be left to amateurs (I'm not sure of the exact quote, so I'm using a paraphrase).&amp;nbsp; That applies to all aspects of cryptography (including random number generators) - even tiny changes to algorithms can have profound effects on the security of the algorithm.&amp;nbsp;&amp;nbsp; He's right - it's just too easy to get this stuff wrong.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The good news is that there IS a &lt;a href="http://article.gmane.org/gmane.linux.debian.security.announce/1614"&gt;fix for the problem&lt;/a&gt;, users of Debian or Ubuntu should read the advisory and take whatever actions are necessary to protect their data.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8500758" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Resilience is NOT necessarily a good thing</title><link>http://blogs.msdn.com/larryosterman/archive/2008/05/01/resilience-is-not-necessarily-a-good-thing.aspx</link><pubDate>Thu, 01 May 2008 19:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8447190</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>66</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8447190.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8447190</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8447190</wfw:comment><description>&lt;P&gt;I just ran into &lt;A href="http://blogs.msdn.com/eric_brechner/archive/2008/05/01/crash-dummies-resilience.aspx" mce_href="http://blogs.msdn.com/eric_brechner/archive/2008/05/01/crash-dummies-resilience.aspx"&gt;this&lt;/A&gt; post by Eric Brechner who is the director of Microsoft's Engineering Excellence center.&lt;/P&gt;
&lt;P&gt;What really caught my eye was his opening paragraph:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;I heard a remark the other day that seemed stupid on the surface, but when I really thought about it I realized it was completely idiotic and irresponsible. The remark was that it's better to crash and let Watson report the error than it is to catch the exception and try to correct it.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Wow.&amp;nbsp; I'm not going to mince words: What a profoundly stupid assertion to make.&amp;nbsp; Of course it's better to crash and let the OS handle the exception than to try to continue after an exception.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a HUGE issue with the concept that an application should catch exceptions[1] and attempt to correct them.&amp;nbsp; In my experience handling exceptions and attempting to continue is a recipe for disaster.&amp;nbsp; At best, it takes &lt;A href="http://blogs.msdn.com/larryosterman/archive/2004/09/10/228068.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2004/09/10/228068.aspx"&gt;an easily debuggable problem into one that takes hours of debugging to resolve&lt;/A&gt;.&amp;nbsp; At it's worst, exception handling can either &lt;A href="http://blogs.msdn.com/david_leblanc/archive/2007/05/10/more-on-exception-handlers.aspx" mce_href="http://blogs.msdn.com/david_leblanc/archive/2007/05/10/more-on-exception-handlers.aspx"&gt;introduce security holes&lt;/A&gt; or &lt;A href="http://blogs.msdn.com/sdl/archive/2007/04/26/lessons-learned-from-the-animated-cursor-security-bug.aspx" mce_href="http://blogs.msdn.com/sdl/archive/2007/04/26/lessons-learned-from-the-animated-cursor-security-bug.aspx"&gt;render security mitigations irrelevant&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I have absolutely no problems with &lt;A href="http://c2.com/cgi/wiki?FailFast" mce_href="http://c2.com/cgi/wiki?FailFast"&gt;fail fast&lt;/A&gt; (which is what Eric suggests with his "Restart" option).&amp;nbsp; I think that restarting a process after the process crashes is a great idea (as long as you have a way to prevent crashes from spiraling out of control).&amp;nbsp; In Windows Vista, Microsoft built this functionality directly into the OS with the &lt;A href="http://msdn.microsoft.com/en-us/library/aa373654(vs.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa373654(vs.85).aspx"&gt;Restart Manager&lt;/A&gt;, if your application calls the &lt;A href="http://msdn.microsoft.com/en-us/library/aa373347(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa373347(VS.85).aspx"&gt;RegisterApplicationRestart&lt;/A&gt; API, the OS will offer to restart your application if it crashes or is non responsive.&amp;nbsp; This concept also shows up in the service restart options in the &lt;A href="http://msdn.microsoft.com/en-us/library/ms681988(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ms681988(VS.85).aspx"&gt;ChangeServiceConfig2&lt;/A&gt; API (if a service crashes, the OS will restart it if you've configured the OS to restart it).&lt;/P&gt;
&lt;P&gt;I also agree with Eric's comment that asserts that cause crashes have no business living in production code, and I have no problems with asserts logging a failure and continuing (assuming that there's someone who is going to actually look at the log and can understand the contents of the log, otherwise the&amp;nbsp; logs just consume disk space).&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But I simply can't wrap my head around the idea that it's ok to catch exceptions and continue to run.&amp;nbsp; Back in the days of Windows 3.1 it might have been a good idea, but after the security fiascos of the early 2000s, any thoughts that you could continue to run after an exception has been thrown should have been removed forever.&lt;/P&gt;
&lt;P&gt;The bottom line is that when an exception is thrown, your program is in an unknown state.&amp;nbsp; Attempting to continue in that unknown state is pointless and potentially extremely dangerous - you literally have no idea what's going on in your program.&amp;nbsp; Your best bet is to let the OS exception handler dump core and hopefully your customers will submit those crash dumps to you so you can post-mortem debug the problem.&amp;nbsp; Any other attempt at continuing is a recipe for disaster.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;-------&lt;/P&gt;
&lt;P&gt;[1] To be clear: I'm not necessarily talking about C++ exceptions here, just structured exceptions.&amp;nbsp; For &lt;EM&gt;some&lt;/EM&gt; C++ and C# exceptions, it's ok to catch the exception and continue, assuming that you understand the root cause of the exception.&amp;nbsp; But if you don't know the exact cause of the exception you should never proceed.&amp;nbsp; For instance, if your binary tree class throws a "Tree Corrupt" exception, you really shouldn't continue to run, but if opening a file throws a "file not found" exception, it's likely to be ok.&amp;nbsp; For structured exceptions, I know of NO circumstance under which it is appropriate to continue running.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit: Cleaned up wording in the footnote.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8447190" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>This is the way the world (wide web) ends...</title><link>http://blogs.msdn.com/larryosterman/archive/2008/04/16/this-is-the-way-the-world-wide-web-ends.aspx</link><pubDate>Wed, 16 Apr 2008 23:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8399499</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>27</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8399499.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8399499</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8399499</wfw:comment><description>&lt;P&gt;&lt;A href="http://blogs.technet.com/robert_hensing" mce_href="http://blogs.technet.com/robert_hensing"&gt;Robert Hensing&lt;/A&gt; linked to &lt;A href="http://www.matasano.com/log/1032/this-new-vulnerability-dowds-inhuman-flash-exploit/" mce_href="http://www.matasano.com/log/1032/this-new-vulnerability-dowds-inhuman-flash-exploit/"&gt;a post by Thomas Ptacek over on the Matasano Chargen&lt;/A&gt; blog. Thomas (who is both a good hacker AND a good writer) has a writeup of a “game-over” vulnerability that was just &lt;A href="http://documents.iss.net/whitepapers/IBM_X-Force_WP_final.pdf" mce_href="http://documents.iss.net/whitepapers/IBM_X-Force_WP_final.pdf"&gt;published by Mark Dowd over at IBM's ISS X-Force&lt;/A&gt; that affects Flash. For those that don’t speak hacker-speak, in this case, a “game-over” vulnerability is one that can be easily weaponized (his techniques appear to be reliable and can be combined to run an arbitrary payload). As an added bonus, because it’s a vulnerability in Flash, it allows the attacker to write a cross-browser, cross-platform exploit – this puppy works just fine in both IE and Firefox (and potentially in Safari and Opera). 
&lt;P&gt;This vulnerability doesn’t affect Windows directly, but it DOES show how a determined attacker can take what was previously thought to be an unexploitable failure (a null pointer dereference) and turn it into something that can be used to 0wn the machine. 
&lt;P&gt;Every one of the “except not quite” issues that Thomas writes about in the article represented a stumbling block that the attacker (who had no access to the source to Flash) had to overcome – there are about 4 of them, but the attacker managed to overcome all of them. 
&lt;P&gt;This is seriously scary stuff.&amp;nbsp; People who have flash installed should run, not walk over to Adobe to &lt;A class="" title="to pick up the update" href="http://www.adobe.com/support/security/bulletins/apsb08-11.html" mce_href="http://www.adobe.com/support/security/bulletins/apsb08-11.html"&gt;pick up the update&lt;/A&gt;.&amp;nbsp; Please note that the security update comes with the following warning:&lt;/P&gt;
&lt;P&gt;"Due to the possibility that these security enhancements and changes may impact existing Flash content, customers are advised to review this March 2008 &lt;A href="http://www.adobe.com/devnet/flashplayer/articles/flash_player9_security_update.html"&gt;&lt;FONT color=#004477&gt;Adobe Developer Center article&lt;/FONT&gt;&lt;/A&gt; to determine if the changes will affect their content, and to begin implementing necessary changes immediately to help ensure a seamless transition."&lt;/P&gt;
&lt;P mce_keep="true"&gt;Edit2: It appears that the Adobe update center I linked to hasn't yet been updated with the fix, I followed their update proceedure, and my Flash plugin still had the vulnerable version number.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Edit: Added a link to the relevant Adobe security advisory, thanks JD.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8399499" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>The Trouble with Giblets</title><link>http://blogs.msdn.com/larryosterman/archive/2008/03/07/the-trouble-with-giblets.aspx</link><pubDate>Fri, 07 Mar 2008 19:28:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8101468</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>26</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/8101468.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=8101468</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=8101468</wfw:comment><description>&lt;p&gt;I don't write about the SDL very much, because I figure that the SDL team does a good enough job of it on their &lt;a href="http://blogs.msdn.com/sdl"&gt;blog&lt;/a&gt;, but I was reading the news a while ago and realized that one of the aspects of the SDL would have helped if our competitors were to adopt it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;A long time ago, I wrote a short post about "&lt;a href="http://blogs.msdn.com/larryosterman/archive/2004/05/04/126054.aspx"&gt;giblets&lt;/a&gt;", and they're showing up a lot in the news lately.&amp;nbsp; "Giblets" are a term coined by Steve Lipner , and they've entered the lexicon of "micro-speak".&amp;nbsp; Essentially a giblet is a chunk of code that you've included from a 3rd party.&amp;nbsp; Michael Howard wrote about them on the SDL blog &lt;a href="http://blogs.msdn.com/sdl/archive/2008/01/04/recent-symantec-and-ibm-vulnerabilities-giblets-banned-apis-and-the-sdl.aspx"&gt;a while ago&lt;/a&gt; (early January), and now news comes out that &lt;a href="http://www.eweek.com/c/a/Security/Google-Android-SDK-Hits-Security-Speed-Bump/"&gt;Google's Android SDK contains giblets that contain known exploitable vulnerabilities&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I find this vaguely humorous, and a bit troubling.&amp;nbsp; As I commented in my earlier post (almost 4 years ago), adding a giblet to your product carries with it the responsibility to monitor the security mailing lists to make sure that you're running the most recent (and presumably secure) version of the giblet.&lt;/p&gt; &lt;p&gt;What I found truly surprising was that Android development team had shipped code (even in beta) with those vulnerabilities.&amp;nbsp; Their development team should have known about the problem with giblets and never accepted the vulnerable versions in the first place.&amp;nbsp; That in turn leads me to wonder about the process management associated with the development of Android.&lt;/p&gt; &lt;p&gt;I fully understand that you need to lock down the components that are contained in your product during the development process, that's why fixes take time to propagate into distributions. As I've seen it from watching FOSS bugs, the typical lifecycle of a security bug in FOSS code is: A bug is typically found in the component, and fixed quickly.&amp;nbsp; Then over the next several months, the fix is propagated into the various distributions that contain the fix.&amp;nbsp; So a fix for the bug is made very quickly (but is completely untested), the teams that package up the distribution consumes the fix and proceeds to test the fix in the distribution.&amp;nbsp; As a result, distributions naturally lag behind fixes (btw, the MSFT security vulnerabilities follow roughly the same sequence - the fix is usually known within days of the bug being reported, but it takes time to test the fix to ensure that the fix doesn't break things (especially since Microsoft patches vulnerabilities in multiple platforms, the fix for all of them needs to be released simultaneously)).&lt;/p&gt; &lt;p&gt;But even so, it's surprising that a team would release a beta that contained a version of one of it's giblets that was almost 4 years old (according to the &lt;a href="http://www.coresecurity.com/?action=item&amp;amp;id=2148"&gt;original report&lt;/a&gt;, it contained libPNG version 1.2.7, from September 12, 2004)!&amp;nbsp; This is especially true given the fact that &lt;a href="http://docs.info.apple.com/article.html?artnum=306993"&gt;the iPhone had a similar vulnerability found last year&lt;/a&gt; (ironically, the finder of this vulnerability was Travis Ormandy of Google).&amp;nbsp; I'm also not picking on Google because of spite - other vendors like &lt;a href="http://docs.info.apple.com/article.html?artnum=300667"&gt;Apple&lt;/a&gt; and &lt;a href="http://www.microsoft.com/technet/security/bulletin/ms05-009.mspx"&gt;Microsoft&lt;/a&gt; were each bitten by exactly this vulnerability - 3 years ago.&amp;nbsp; In Apple's case, they did EXACTLY the same thing that the Android team did: They released a phone that contained a 3 year old vulnerability that had previously been fixed in their mainstream operating system.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So how would the SDL have helped the Android team?&amp;nbsp; The SDL requires that you track giblets in your code - it forces you to have a plan to deal with the inevitable vulnerabilities in the giblets.&amp;nbsp; In this case, SDL would have forced the development teams to have a process in place to monitor the vulnerabilities (and of course to track the history of the component), so they hopefully would never have shipped vulnerable components.&amp;nbsp; It also means that when a vulnerability is found after shipping, they would have a plan in place to roll out a fix ASAP.&amp;nbsp; This latter is critically important because history has shown us that when one component is known to have a vulnerability, the vultures immediately swoop in to find similar vulnerabilities in related code bases (on the theory that if you make a mistake once, you're likely to make it a second or third time).&amp;nbsp; In fact, that's another requirement of the SDL: When a vulnerability is found in a component, the SDL requires that you also look for similar vulnerabilities in related code bases.&lt;/p&gt; &lt;p&gt;Yet another example where adopting the SDL would have helped to mitigate a vulnerability[1].&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;[1] Btw, I'm not saying that the SDL is the only way to solve this problem.&amp;nbsp; There absolutely are other methodologies that would allow these problems to be mitigated.&amp;nbsp; But when you're developing software that's going to be deployed connected to a network (any network), you MUST have a solution in place to manage your risk (and giblets are just one form of risk).&amp;nbsp; The SDL is Microsoft's way, and so far it's clearly shown its value.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8101468" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Wow - We hired Crispin Cowan!!!</title><link>http://blogs.msdn.com/larryosterman/archive/2008/01/18/wow-we-hired-crispin-cowan.aspx</link><pubDate>Fri, 18 Jan 2008 21:31:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7151721</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/7151721.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=7151721</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=7151721</wfw:comment><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/michael_howard"&gt;Michael Howard&lt;/a&gt; just announced that &lt;a href="http://blogs.msdn.com/michael_howard/archive/2008/01/17/crispin-cowan-joins-the-windows-security-team.aspx"&gt;we've hired Crispin Cowan&lt;/a&gt;! &lt;/p&gt; &lt;p&gt;This is incredibly awesome, I have a huge amount of respect for &lt;a href="http://crispincowan.com/~crispin/"&gt;Crispin&lt;/a&gt;, he's one of the most respected researchers out there.&lt;/p&gt; &lt;p&gt;Among other things, Crispin's the author and designer of &lt;a href="http://kerneltrap.org/mailarchive/linux-kernel/2007/11/8/397703"&gt;AppArmor&lt;/a&gt;, which adds sandboxing capabilities to Linux.&amp;nbsp; Apparently he's going to be working on the core Windows Security team, which is absolutely cool.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'm totally stoked to hear this - I literally let out a whoot when I read Michael's blog post.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Welcome aboard Crispin :).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7151721" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>How to lose customers without really trying...</title><link>http://blogs.msdn.com/larryosterman/archive/2007/11/15/how-to-lose-customers-without-really-trying.aspx</link><pubDate>Fri, 16 Nov 2007 02:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6279046</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>25</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6279046.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6279046</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6279046</wfw:comment><description>&lt;P&gt;Not surprisingly, Valorie and I both do some of our holiday season shopping at ThinkGeek.&amp;nbsp; But no longer.&amp;nbsp; Valorie recently placed a substantial order with them, but Instead of processing her order, they sent the following email: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;From: ThinkGeek Customer Service [mailto:custserv@thinkgeek.com]&lt;BR&gt;Sent: Thursday, November 15, 2007 4:28 AM&lt;BR&gt;To: &amp;lt;Valorie's Email Address&amp;gt;&lt;BR&gt;Subject: URGENT - Information Needed to Complete Your ThinkGeek Order&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Hi Valorie, 
&lt;P&gt;Thank you for your recent order with ThinkGeek, &amp;lt;order number&amp;gt;. We would like to process your order as soon as possible, but we need some additional information in order to complete your order. 
&lt;P&gt;To complete your order, we must do a manual billing address verification check. 
&lt;P&gt;If you paid for your order via Paypal, please send us a phone bill or other utility bill showing the same billing address that was entered on your order. 
&lt;P&gt;If you paid for your order via credit card, please send us one of the following: 
&lt;P&gt;- A phone bill or other utility bill showing the same billing address that was entered on your order 
&lt;P&gt;- A credit card statement with your billing address and last four digits of your credit card displayed 
&lt;P&gt;- A copy of your credit card with last four digits displayed AND a copy of a government-issued photo ID, such as a driver's license or passport. 
&lt;P&gt;To send these via e-mail (a scan or legible digital photo) please reply to &lt;A href="mailto:custserv@thinkgeek.com" mce_href="mailto:custserv@thinkgeek.com"&gt;custserv@thinkgeek.com&lt;/A&gt; or via fax (703-839-8611) at your earliest convenience. If you send your documentation as digital images via email, please make sure they total less than 500kb in size or we may not receive your email. We ask that you send this verification within the next two weeks, or your order may be canceled. Also, we are unable to accept billing address verification from customers over the phone. We must receive the requested documentation before your order can be processed and shipped out. 
&lt;P&gt;For the security-minded among you, we are able to accept PGP-encrypted emails. It is not mandatory to encrypt your response, so if you have no idea what we're talking about, don't sweat it. Further information, including our public key and fingerprint, can be found at the following 
&lt;P&gt;link: 
&lt;P&gt;&lt;A href="http://www.thinkgeek.com/help/encryption.shtml" mce_href="http://www.thinkgeek.com/help/encryption.shtml"&gt;http://www.thinkgeek.com/help/encryption.shtml&lt;/A&gt; 
&lt;P&gt;At ThinkGeek we take your security and privacy very seriously. We hope you understand that when we have to take extra security measures such as this, we do it to protect you as well as ThinkGeek. 
&lt;P&gt;We apologize for any inconvenience this may cause, and we appreciate your understanding. If you have any questions, please feel free to email or call us at the number below. 
&lt;P&gt;Thanks- 
&lt;P&gt;ThinkGeek Customer Service 
&lt;P&gt;1-888-433-5788 (phone) 
&lt;P&gt;1-703-839-8611 (fax)&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Wow.&amp;nbsp; We've ordered from them in the past (and placed other large orders with them), but we've never seen anything as outrageous as this.&amp;nbsp; They're asking for exactly the kind information that would be necessary to perpetuate an identity theft of Valorie's identity, and they're holding our order hostage if we don't comply.&lt;/P&gt;
&lt;P&gt;What was worse is that their order form didn't even ask for the CVE code on the back of the credit card (the one that's not imprinted).&amp;nbsp; So not only didn't they follow the "standard" practices that most e-commerce sites follow when dealing with credit cards, but they felt it was necessary for us to provide exactly the kind of information that an identity thief would ask for.&lt;/P&gt;
&lt;P&gt;Valorie contacted them to let them know how she felt about it, and their response was:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Thank you for your recent ThinkGeek order. Sometimes, when an order is placed with a discrepancy between the billing and the shipping addresses, or with a billing address outside the US, or the order is above a certain value, our ordering system will flag the transaction. In these circumstances, we request physical documentation of the billing address on the order in question, to make sure that the order has been placed by the account holder. At ThinkGeek we take your security and privacy very seriously. We hope you understand that when we have to take extra security measures such as this, we do it to protect you as well as ThinkGeek.&lt;BR&gt;Unfortunately, without this documentation, we are unable to complete the processing of your order. If we do not receive the requested documentation within two weeks of your initial order date, your order will automatically be cancelled. If you can't provide documentation of the billing address on your order, you will need to cancel your current order and reorder using the proper billing address for your credit card. Once we receive and process your documentation, you should not need to provide it on subsequent orders. Please let us know if you have any further questions.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The good news is that we have absolutely no problems with them canceling the order, and we're never going to do business with them again.&amp;nbsp; There are plenty of other retailers out there that sell the same stuff that ThinkGeek does who are willing to accept our business without being offensive about it.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit to add:&amp;nbsp; Think Geek responded to our issues, their latest response can be found &lt;A class="" href="http://blogs.msdn.com/larryosterman/archive/2007/11/19/think-geek-responds.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/11/19/think-geek-responds.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6279046" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Personal+Stuff/default.aspx">Personal Stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Fascinating+geek+stuff/default.aspx">Fascinating geek stuff</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Things+you+shouldn_2700_t+do_2E00_/default.aspx">Things you shouldn't do.</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>When you're analyzing the strength of a password, make sure you know what's done with it.</title><link>http://blogs.msdn.com/larryosterman/archive/2007/11/12/when-you-re-analyzing-the-strength-of-a-password-make-sure-you-know-what-s-done-with-it.aspx</link><pubDate>Tue, 13 Nov 2007 04:47:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6158666</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>20</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/6158666.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=6158666</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=6158666</wfw:comment><description>&lt;p&gt;Every once in a while, I hear someone making comments about the strength of things like long passwords.&lt;/p&gt; &lt;p&gt;For example, if you have a 255 character password that just uses the 26 roman upper and lower case letters, plus the numeric digits.&amp;nbsp; That means that your password has 62^255 possible values, if you can try a million million passwords per second, the time required would exceed the heat death of the universe.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Wow, that's cool - it means that you can never break my password if I use a long enough password. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Except...&lt;/p&gt; &lt;p&gt;The odds are very good that something in the system's going to take your password and apply a one-way hash to that password - after all, it wouldn't do to keep that password lying around in clear text where an attacker could see it.&amp;nbsp; But the instant you take a hash of a secret, the strength of the secret degrades to the strength of the hash.&lt;/p&gt; &lt;p&gt;It's another example of the &lt;a href="http://en.wikipedia.org/wiki/Pigeonhole_principle"&gt;pigeonhole principle&lt;/a&gt; in practice - if you put N+M items into N slots, you're going to have some slots with more than one entry.&amp;nbsp; The pigeonhole principle applies in this case as well.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In other words, if the password database that holds your password uses a hash algorithm like SHA-1, your 62^255 possible character password just got reduced in strength to a 256^20 possible value hash[1]. That means that any analysis that you've done on your password doesn't matter, because all an attacker needs to do is to find a different password that hashes to the same value as your password and they've broken your password.&amp;nbsp; Since your password strength exceeds the strength of the hash code, you know that there MUST be a collision with a weaker password.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The bottom line is that when you're calculating the strength of a&amp;nbsp; password, it's important that you understand what your password looks like to an attacker.&amp;nbsp; If your password is saved as an SHA-1 or MD5 hash, that's the true maximum strength of your password.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;[1]To be fair, 256^20 is something like 1.4E48, so even if you could still try a million million passwords per second, you're still looking at something like a million million years to brute force that database, but 256^20 is still far less than 62^255.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6158666" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Chris Pirillo's annoyed by the Windows Firewall prompt</title><link>http://blogs.msdn.com/larryosterman/archive/2007/11/02/chris-pirillo-s-annoyed-by-the-windows-firewall-prompt.aspx</link><pubDate>Fri, 02 Nov 2007 19:56:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5839991</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>63</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/5839991.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=5839991</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=5839991</wfw:comment><description>&lt;p&gt;Yesterday, Chris Pirillo made a comment in &lt;a href="http://chris.pirillo.com/2007/11/01/windows-antivirus-security/"&gt;one of his posts&lt;/a&gt;: &lt;blockquote&gt; &lt;p&gt;And if you think you’re already completely protected in Windows with its default tools, think again. This morning, after months of regular Firefox use, I get &lt;a href="http://www.flickr.com/photos/lockergnome/1815816641/"&gt;this security warning&lt;/a&gt; from the Windows Vista Firewall. Again, this was far from the first time I had used Firefox on this installation of Windows. Not only is the dialog ambiguous, it’s here too late.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I replied in a comment on his blog:  &lt;blockquote&gt; &lt;p&gt;The reason that the Windows firewall hasn’t warned you about FF’s accessing the net is that up until this morning, all of it’s attempts have been outbound. But for some reason, this morning, it decided that it wanted to &lt;i&gt;receive&lt;/i&gt; data from the internet. &lt;p&gt;The firewall is doing exactly what it’s supposed to do - it’s stopping FF from listening for an inbound connection (which a web browser probably shouldn’t do) and it’s asking you if it’s ok. &lt;p&gt;Why has your copy of firefox suddenly decided to start receiving data over the net when you didn’t ask it to?&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Chris responded in email: &lt;blockquote&gt; &lt;p&gt;Because I started to play XM Radio?&amp;nbsp; *shrug*&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;My response to him (which I realized could be a post in itself - for some reason, whenever I respond to Chris in email, I end up writing many hundred word essays): &lt;p&gt;Could be - so in this case, the firewall is telling you (correctly) exactly what happened. &lt;p&gt;That's what firewalls do. &lt;p&gt;Firefox HAS the ability to open the ports it needs when it installs (as does whatever plugin you're using to play XM radio (I documented the APIs for doing that on my blog &lt;a href="http://blogs.msdn.com/larryosterman/archive/2004/07/26/197331.aspx"&gt;about 3 years ago&lt;/a&gt;, the &lt;a href="http://msdn2.microsoft.com/en-us/library/Aa366453.aspx"&gt;current versions of the APIs&lt;/a&gt; are easier to use than the ones I used)), but for whatever reason it CHOSE not to do so and instead decided that the correct user experience was to prompt the user when downloading. &lt;p&gt;This was a choice made by the developers of Firefox and/or the developer of XM radio plugin - either by design, ignorance, schedule pressure or just plain laziness, I honestly don't know (btw, if you're using the WMP FF plugin to play from XM, my comment still stands - I don't know if this was a conscious decision or not). &lt;p&gt;Blaming the firewall (or Vista) for this is pointless (with a caveat below).&amp;nbsp;  &lt;p&gt;&amp;nbsp; &lt;p&gt;The point of the firewall is to alert you that an application is using the internet in a way that's unexpected and ask you if it makes sense. You, the user, know that you've started playing audio from XM, so you, the user expect that it's reasonable that Firefox start receiving traffic from the internet. But the firewall can't know what you did (and if it was able to figure it out, the system would be so hideously slow that you'd be ranting on and on about how performance sucks). &lt;p&gt;Every time someone opens an inbound port in the firewall, they add another opportunity for malware to attack their system. The firewall is just letting the user know about it. And maybe, just maybe, the behavior that's being described might get the user to realize that malware has infected their machine and they'll repair it.&lt;/p&gt; &lt;p&gt;In your case, the system was doing you a favor. It was a false positive, yes, but that's because you're a reasonably intelligent person. My wife does ad-hoc tech support for a friend who isn't, and the anti-malware stuff in Windows (particularly Windows Defender) has saved the friends bacon at least three times this year alone. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;On the other hand, you DO have a valid point: The dialog that was displayed by the firewall didn't give you enough information about what was happening.&amp;nbsp; I believe that this is because you were operating under the belief that the Windows firewall was both an inbound and outbound firewall.&amp;nbsp; The Windows Vista firewall&amp;nbsp;&amp;nbsp;IS both, but by default it's set to allow all outbound connections (you need to configure it to block outbound connections).&amp;nbsp; If you were operating under the impression that it was an outbound firewall, you'd expect it to prompt for outbound connections.&lt;/p&gt; &lt;p&gt;People HATE outbound firewalls because of the exact same reason you're complaining - they constantly ask people "Are you sure you want to do that?" (Yes, dagnabbit, I WANT to let Firefox access the internet, are you &lt;em&gt;stupid &lt;/em&gt;or something?). &lt;p&gt;IMHO outbound firewalls are 100% security theater[1][2]. They provide absolutely no value to customers. This has been shown time and time again (remember my comment above about applications being able to punch holes in the firewall? Malware can do the exact same thing). The only thing an outbound firewall does is piss off customers. If the Windows firewall was enabled to block outbound connections by default, I guarantee you that within minutes of that release, the malware authors would simply add code to their tools to disable it.&amp;nbsp; Even if you were to somehow figure out how to block the malware from opening up outbound ports[3], the malware will simply hijack a process running in the context of the user that's allowed to access the web. Say... Firefox. This isn't a windows specific issue, btw - every other OS available has exactly the same issues (malware being able to inject itself into processes running in the same security context as the user running the malware). &lt;p&gt;Inbound firewalls have very real security value, as do external dedicated firewalls. I honestly believe that the main reason you've NOT seen any internet worms since 2002 is simply because XP SP2 enabled the firewall by default. There certainly have been vulnerabilities found in Windows and other products that had the ability to be turned into a worm - the fact that nobody has managed to successfully weaponize them is a testament to the excellent work done in XP SP2. &lt;p&gt;&amp;nbsp; &lt;p&gt;[1] I'm slightly overexaggerating here - there is one way in which outbound firewalls provide some level of value, and that's as a defense-in-depth measure (like ASLR or heap randomization). For instance, in Vista, every built-in service (and 3rd party services if they want to take &lt;a href="http://msdn2.microsoft.com/en-us/library/aa365489.aspx"&gt;the time to opt-in&lt;/a&gt;) defines a set of rules which describes the networking behaviors of the service (I accept inbound connections on UDP from port &amp;lt;foo&amp;gt;, and make outbound connections to port &amp;lt;bar&amp;gt;). The firewall is pre-configured with those rules and will prevent any access to the network from those services. The outbound firewall rules make it much harder for a piece of malware to make outbound connections (especially if the service is running in a restricted account like NetworkService or LocalService). It is important to realize this is JUST Defense-in-Depth measure and CAN be worked around (like all other defense-in-depth measures).&amp;nbsp;  &lt;p&gt;[2] Others disagree with me on this point - for example, Thomas Ptacek over at Matasano &lt;a href="http://www.matasano.com/log/986/what-weve-since-learned-about-leopard-security-features/"&gt;wrote just yesterday&lt;/a&gt;: "Outbound filtering is more valuable than inbound filtering; it catches “phone-home” malware. It’s not that hard to implement, and I’m surprised Leopard doesn’t do it."&amp;nbsp; And he's right, until the "phone-home" malware decides to turn off the firewall. Not surprisingly, I also disagree with him on the value of inbound filtering.&lt;/p&gt; &lt;p&gt;[3] I'm not sure how you do that while still allowing the user to open up ports - functionality being undocumented has never stopped malware authors.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5839991" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Every threat model diagram should tell a story.</title><link>http://blogs.msdn.com/larryosterman/archive/2007/10/22/every-threat-model-diagram-should-tell-a-story.aspx</link><pubDate>Tue, 23 Oct 2007 01:14:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5610151</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/5610151.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=5610151</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=5610151</wfw:comment><description>&lt;p&gt;Adam Shostack has another threat modeling post up on the SDL blog entitled "&lt;a href="http://blogs.msdn.com/sdl/archive/2007/10/22/threat-modeling-self-checks-and-rules-of-thumb.aspx"&gt;Threat Modeling Self Checks and Rules of Thumb&lt;/a&gt;".&amp;nbsp; In it, he talks about threat models and diagrams (and he corrects a mistake in my "&lt;a href="http://blogs.msdn.com/larryosterman/archive/2007/09/21/threat-modeling-again-threat-modeling-rules-of-thumb.aspx"&gt;rules of thumb&lt;/a&gt;" post (thanks Adam)).&lt;/p&gt; &lt;p&gt;There's one thing he mentions that is really important (and has come up a couple of times as I've been doing threat model reviews of various components).&amp;nbsp; That a threat model diagram should tell a story.&lt;/p&gt; &lt;p&gt;Not surprisingly, I love stories.&amp;nbsp; I &lt;em&gt;really&lt;/em&gt; love stories :).&amp;nbsp; I love telling stories, I love listening to people telling stories.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I look for stories in the most unlikely of places, including places that you wouldn't necessarily think of.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So when I'm reviewing a threat model, I want to hear the story of your feature.&amp;nbsp; If you've done a good job of telling your story, I should be able to see&amp;nbsp;what you've drawn and understand&amp;nbsp; what you're building - it might take a paragraph or two of text to provide surrounding context, but it should be clear from your diagram.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;What are the things that help to tell a good story?&amp;nbsp; Well, your story should be coherent.&amp;nbsp; Stories have beginnings, middles and ends.&amp;nbsp; Your diagram should also have a beginning (entrypoint), a middle (where the work is done) and an end (the output of the diagram).&amp;nbsp; For example, in &lt;a href="http://blogs.msdn.com/larryosterman/archive/2007/09/17/threat-modeling-again-presenting-the-playsound-threat-model.aspx"&gt;my PlaySound threat model&lt;/a&gt;, the beginning is the application calling PlaySound, the end is the audio engine.&amp;nbsp; Obviously other diagrams have other inputs and outputs, but your code is always invoked by &lt;em&gt;something&lt;/em&gt;, and it always &lt;em&gt;does something&lt;/em&gt;.&amp;nbsp; Your diagram should reflect this.&lt;/p&gt; &lt;p&gt;In addition, it's always a good idea to look for pieces that are missing.&amp;nbsp; For instance, if you're doing a threat model for a web browser, it's highly likely that the Internet will show up somewhere in the model.&amp;nbsp; If it doesn't, it just seems "wrong".&amp;nbsp; Similarly, if your feature name is something like "Mumblefrotz user experience", then I'd hope to find something that looks like a "user" and something that looks like a "Mumblefrotz".&amp;nbsp; &lt;/p&gt; &lt;p&gt;Adam's post calls out other inconsistencies that interfere with the storytelling, as does my "rules of thumb" post.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I really like the storytelling metaphor for threat model diagrams because if I can understand the story, it really helps me find the omissions - there's almost always something missed in the diagram, and a coherent story really helps to understand that.&amp;nbsp; In many ways, pictures do a far better job of telling stories than words do.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5610151" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item><item><title>Some final thoughts on Threat Modeling...</title><link>http://blogs.msdn.com/larryosterman/archive/2007/10/01/some-final-thoughts-on-threat-modeling.aspx</link><pubDate>Mon, 01 Oct 2007 19:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5225270</guid><dc:creator>LarryOsterman</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/larryosterman/comments/5225270.aspx</comments><wfw:commentRss>http://blogs.msdn.com/larryosterman/commentrss.aspx?PostID=5225270</wfw:commentRss><wfw:comment>http://blogs.msdn.com/larryosterman/rsscomments.aspx?PostID=5225270</wfw:comment><description>&lt;P&gt;I want to wrap up the threat modeling posts with a summary and some comments on the entire process.&amp;nbsp; Yeah, I know I should have done this last week, but I got distracted :).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;First, a summary of the threat modeling posts:&lt;/P&gt;
&lt;P&gt;Part 1: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/08/30/threat-modeling-once-again.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/08/30/threat-modeling-once-again.aspx"&gt;Threat Modeling, Once again.&amp;nbsp; In which our narrator introduces the idea of a threat model diagram&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 2: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/08/31/threat-modeling-again-drawing-the-diagram.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/08/31/threat-modeling-again-drawing-the-diagram.aspx"&gt;Threat Modeling Again. Drawing the Diagram.&amp;nbsp; In which our narrator introduces the diagram for the PlaySound API&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 3: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/04/threat-modeling-again-stride.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/04/threat-modeling-again-stride.aspx"&gt;Threat Modeling Again, Stride.&amp;nbsp; Introducing the various STRIDE categories.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 4: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/05/threat-modeling-again-stride-mitigations.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/05/threat-modeling-again-stride-mitigations.aspx"&gt;Threat Modeling Again, Stride Mitigations.&amp;nbsp; Discussing various mitigations for the STRIDE categories.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 5: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/07/threat-modeling-again-what-does-stride-have-to-do-with-threat-modeling.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/07/threat-modeling-again-what-does-stride-have-to-do-with-threat-modeling.aspx"&gt;Threat Modeling Again, What does STRIDE have to do with threat modeling?&amp;nbsp; The relationship between STRIDE and diagram elements.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 6: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/10/threat-modeling-again-stride-per-element.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/10/threat-modeling-again-stride-per-element.aspx"&gt;Threat Modeling Again, STRIDE per Element.&amp;nbsp; In which the concept of STRIDE/Element is discussed.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 7: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/11/threat-modeling-again-threat-modeling-playsound.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/11/threat-modeling-again-threat-modeling-playsound.aspx"&gt;Threat Modeling Again, Threat Modeling PlaySound.&amp;nbsp; Which enumerates the threats against the PlaySound API.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 8: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/13/threat-modeling-again-analyzing-the-threats-to-playsound.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/13/threat-modeling-again-analyzing-the-threats-to-playsound.aspx"&gt;Threat Modeling Again, Analyzing the threats to PlaySound.&amp;nbsp; In which the threat modeling analysis work against the threats to PlaySound is performed.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 9: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/14/threat-modeling-again-pulling-the-threat-model-together.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/14/threat-modeling-again-pulling-the-threat-model-together.aspx"&gt;Threat Modeling Again, Pulling the threat model together.&amp;nbsp; Which describes the narrative structure of a threat model.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 10: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/17/threat-modeling-again-presenting-the-playsound-threat-model.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/17/threat-modeling-again-presenting-the-playsound-threat-model.aspx"&gt;Threat Modeling Again, Presenting the PlaySound threat model.&amp;nbsp; Which doesn't need a pithy summary, because the title describes what it is.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 11: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/18/threat-modeling-again-threat-modeling-in-practice.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/18/threat-modeling-again-threat-modeling-in-practice.aspx"&gt;Threat Modeling Again, Threat Modeling in Practice.&amp;nbsp; Presenting the threat model diagrams for a real-world security problem .&lt;/A&gt;[1]&lt;/P&gt;
&lt;P&gt;Part 12: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/19/threat-modeling-again-threat-modeling-and-the-firefoxurl-issue.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/19/threat-modeling-again-threat-modeling-and-the-firefoxurl-issue.aspx"&gt;Threat Modeling Again, Threat Modeling and the firefoxurl issue. Analyzing the real-world problem from the standpoint of threat modeling.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part 13: &lt;A href="http://blogs.msdn.com/larryosterman/archive/2007/09/21/threat-modeling-again-threat-modeling-rules-of-thumb.aspx" mce_href="http://blogs.msdn.com/larryosterman/archive/2007/09/21/threat-modeling-again-threat-modeling-rules-of-thumb.aspx"&gt;Threat Modeling Again, Threat Modeling Rules of Thumb.&amp;nbsp; A document with some useful rules of thumb to consider when threat modeling.&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Remember that threat modeling is an analysis&amp;nbsp;tool. You threat model to identify threats to your component, which then lets you know where you need to concentrate your resources.&amp;nbsp; Maybe you need to encrypt a particular data channel to protect it from snooping.&amp;nbsp; Maybe you need to change the ACLs on a data store to ensure that an attacker can't modify the contents of the store.&amp;nbsp; Maybe you just need to carefully validate the contents of the store before you read it.&amp;nbsp; The threat modeling process tells you where to look and gives you suggestions about what to look for, but it doesn't solve the problem.&amp;nbsp; It might be that the only thing that comes out from your threat modeling process is a document that says "We don't care about any of the threats to this component".&amp;nbsp; That's ok, at a minimum, it means that you considered the threats and decided that they were acceptable.&lt;/P&gt;
&lt;P&gt;The threat modeling process is also a living process. I'm 100% certain that 2 years from now, we're going to be doing threat modeling differently from the way that we do it today.&amp;nbsp; Experience has shown that every time we apply threat modeling to a product, we realize new things about the process of performing threat modeling, and find new, more efficient ways of going about the process.&amp;nbsp;&amp;nbsp; Even now, the various teams involved with threat modeling in my division have proposed new changes the process based on the experiences of our current round of threat modeling.&amp;nbsp; Some of them will be adopted as best practices across Microsoft, some of them will be dropped on the floor.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I've described over these posts is the process of threat modeling as it's done today in the Windows division at Microsoft.&amp;nbsp; Other divisions use threat modeling differently - the threat landscape for Windows is different from the threat landscape for SQL Server and Exchange, which is different from the threat landscape for the various Live products, and it's entirely different for our internal IT processes.&amp;nbsp; All of these groups use threat modeling, and they use the core mechanisms in similar ways, but because each group that does threat modeling has different threats and different risks, the process plays out differently for each team.&lt;/P&gt;
&lt;P&gt;If your team decides to adopt threat modeling, you need to consider how it applies to your components and adopt the process accordingly.&amp;nbsp; Threat Modeling is absolutely not a one-size-fits-all process, but it IS an invaluable tool.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;EDIT TO ADD: Adam Shostak on the Threat Modeling Team at Microsoft pointed out that the threat modeling team has a developer position open.&amp;nbsp; You can find more information about the position by going to here:&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="http://members.microsoft.com/careers/search/default.aspx"&gt;&lt;FONT color=#0000ff&gt;http://members.microsoft.com/careers/search/default.aspx&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;and searching for job #&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;207443.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;[1] Someone posting a &lt;A href="http://www.schneier.com/blog/archives/2007/10/threat_modeling.html#c205686" mce_href="http://www.schneier.com/blog/archives/2007/10/threat_modeling.html#c205686"&gt;comment on Bruce Schneier's blog&lt;/A&gt;&amp;nbsp;took me for task for using a browser vulnerability.&amp;nbsp; I chose that particular vulnerability because it was&amp;nbsp;the first that came to mind.&amp;nbsp; I could have just as easily picked the DMG loading logic in OSX or the .ANI file code in Windows for examples (actually the DMG file issues are&amp;nbsp;in several ways far more interesting than the firefoxurl issue&amp;nbsp;- the .ANI file issue is actually relatively boring from a threat modeling standpoint).&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5225270" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/larryosterman/archive/tags/Security/default.aspx">Security</category></item></channel></rss>