<?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>HD DVD / Randomness... : Security</title><link>http://blogs.msdn.com/ptorr/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>Updating Firefox as non-admin</title><link>http://blogs.msdn.com/ptorr/archive/2006/04/14/576721.aspx</link><pubDate>Sat, 15 Apr 2006 02:35:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:576721</guid><dc:creator>ptorr</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/576721.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=576721</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=576721</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;a style="text-decoration:none;" href="http://www.getfirefox.com/"&gt;
            &lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;Firefox&lt;/span&gt;
          &lt;/a&gt;, like all web browsers, needs to be regularly updated to keep up with &lt;a style="text-decoration:none;" href="http://www.mozilla.org/security/announce/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;security patches&lt;/span&gt;&lt;/a&gt;. Version 1.5 has an auto-update feature built-in, but unfortunately if you're not running as a local Administrator (at least in Windows), it doesn't work. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;In one way, this is no different than &lt;a style="text-decoration:none;" href="http://windowsupdate.microsoft.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;Windows Update&lt;/span&gt;&lt;/a&gt;; if you go to the WU site as a non-admin, you get a message telling you to try again as an admin. The difference though is that whilst &lt;span style="font-weight:bold;"&gt;Tools -&amp;gt; Windows Update&lt;/span&gt; still works in IE if you are a non-admin (it politely asks you to try again with admin privileges), Firefox will grey out the &lt;span style="font-weight:bold;"&gt;Help -&amp;gt; Check for Updates&lt;/span&gt; menu item in this case. The inability to check for updates may lead a user to believe there are no updates available for their machine, which is clearly a bad thing because they will remain vulnerable to attacks. So, if you are using Firefox and you are not an Administrator, make sure to manually check for updates (or to boot Firefox as admin from time to time) in order to stay protected.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Something else to be wary of is that using the built-in update feature of Firefox will prompt you to re-start the browser so that it can finish updating itself. Unfortunately, if your next boot of the browser is as a non-admin, the browser will &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; be updated, but &lt;span style="font-style:italic;"&gt;you won't be notified that it hasn't been updated, either&lt;/span&gt;. You &lt;span style="font-weight:bold;"&gt;must&lt;/span&gt; boot again as an Administrator for the update to take place.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Of course, personally I recommend people upgrade to &lt;a style="text-decoration:none;" href="http://www.microsoft.com/windows/ie/ie7/ie7betaredirect.mspx"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;Internet Explorer 7 Beta 2&lt;/span&gt;&lt;/a&gt;, but that's just me :-). Also note that at the time of writing, IE 7 is still an unsupported beta -- not production code -- so you should not install on mission-critical machines and &lt;a style="text-decoration:none;" href="http://msdn.microsoft.com/ie/releasenotes/default.aspx"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;read the release notes&lt;/span&gt;&lt;/a&gt; first.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Note 1&lt;/span&gt;: Obviously if you have installed software as an Administrator and placed it in the &lt;span style="font-weight:bold;"&gt;Program Files&lt;/span&gt; directory, a non-admin user will not have permissions to update the files. But that's not a problem; the problem is that non-admin users are given the impression that updates are not available (or perhaps not needed), leaving them with a false sense of security.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Note 2&lt;/span&gt;: Automatic Updates will still keep IE up-to-date for you even if you are not logged in as a local Administrator, so you should be sure to &lt;a style="text-decoration:none;" href="http://www.microsoft.com/protect/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;turn it on&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=576721" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>When facts get in the way of a good argument</title><link>http://blogs.msdn.com/ptorr/archive/2006/04/07/571311.aspx</link><pubDate>Sat, 08 Apr 2006 06:26:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:571311</guid><dc:creator>ptorr</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/571311.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=571311</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=571311</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;I've wanted to write this blog for a long time, but never gotten around to it. It's a very simple observation, but one that too many people fail to make. Maybe something will come of it :-)&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Oftentimes you will see something like the following on a web news site:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-weight:bold;"&gt;Headline&lt;/span&gt;: &lt;span style="font-style:italic;"&gt;New security bug found in Windows&lt;/span&gt;&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Poster A&lt;/span&gt;: Windows sucks!&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Poster B&lt;/span&gt;: Windows is attacked more often because it has the highest market share&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Poster C:&lt;/span&gt; If that were true, Apache would be attacked more often than IIS&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Of course, &lt;span style="font-weight:bold;"&gt;C&lt;/span&gt;'s unstated-but-obvious assumption is that Apache is &lt;span style="font-style:italic;"&gt;not&lt;/span&gt; attacked more often than IIS, even though it has a higher market share.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;If &lt;span style="font-weight:bold;"&gt;C&lt;/span&gt; is right, he has disproved &lt;span style="font-weight:bold;"&gt;B&lt;/span&gt;'s assumed premise about market share based on a valid form of argument known as &lt;a href="http://en.wikipedia.org/wiki/Modus_tollens"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;modus to&lt;/span&gt;&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Modus_tollens"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;l&lt;/span&gt;&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Modus_tollens"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;lens&lt;/span&gt;&lt;/a&gt; -- P implies Q, but Q is false, therefore P must be false. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;The trouble though is that &lt;span style="font-weight:bold;font-style:italic;"&gt;C&lt;/span&gt;&lt;span style="font-style:italic;"&gt; is actually enforcing &lt;/span&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;B&lt;/span&gt;&lt;span style="font-style:italic;"&gt;'s argument&lt;/span&gt;, since &lt;a style="text-decoration:none;" href="http://www.zone-h.org/en/news/read/id=205953/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;Apache is attacked far more often than IIS&lt;/span&gt;&lt;/a&gt;. Of course, &lt;span style="font-weight:bold;"&gt;C&lt;/span&gt; hasn't &lt;span style="font-style:italic;"&gt;proved&lt;/span&gt; &lt;span style="font-weight:bold;"&gt;B&lt;/span&gt;'s argument, he just hasn't disproved it either. (To assume that &lt;span style="font-weight:bold;"&gt;C&lt;/span&gt; had proved &lt;span style="font-weight:bold;"&gt;B&lt;/span&gt;'s argument would be a logical fallacy known as &lt;a style="text-decoration:none;" href="http://en.wikipedia.org/wiki/Affirming_the_consequent"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;affirming the consequent&lt;/span&gt;&lt;/a&gt; -- P implies Q, and Q is true, therefore P is true).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Note&lt;/span&gt;: For the purposes of this entry, I have ignored two things because they are not relevant to the discussion: The first is the debate about what web server market share numbers actually mean, the second is the question of why the sites were attacked (software bugs, 3rd party installs, poor administration, etc.). I merely wanted to show that &lt;span style="font-weight:bold;font-style:italic;"&gt;C&lt;/span&gt;&lt;span style="font-style:italic;"&gt; does not disprove &lt;/span&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;B&lt;/span&gt;, not that &lt;span style="font-weight:bold;"&gt;B&lt;/span&gt; is necessarily correct.&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=571311" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/ptorr/archive/tags/Randomness/default.aspx">Randomness</category></item><item><title>Why not use hashes for the Anti-Phishing Filter?</title><link>http://blogs.msdn.com/ptorr/archive/2005/09/12/604147.aspx</link><pubDate>Tue, 13 Sep 2005 05:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:604147</guid><dc:creator>ptorr</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/604147.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=604147</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=604147</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;Several people have asked &lt;a style="text-decoration:none;" href="http://blogs.msdn.com/ie/archive/2005/09/09/463204.aspx#463667"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;why Internet Explorer 7 will send "real" URLs instead of hashes&lt;/span&gt;&lt;/a&gt; to the AP (Anti-Phishing) server. That's a good question, and I &lt;span style="font-weight:bold;"&gt;know&lt;/span&gt; it's a good question because it's the same thing just about everybody at Microsoft (including me) says the first time they hear about the feature :-). Nevertheless, a fairly quick investigation into the issue shows that it buys very little in terms of privacy but comes at significant cost.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;First we need to figure out &lt;span style="font-style:italic;"&gt;what threats are mitigated by sending hashes instead of URLs&lt;/span&gt;. Next we need to figure out &lt;span style="font-style:italic;"&gt;what additional threats surface if we send hashes instead of URLs&lt;/span&gt;. Finally we determine which is "better" using some subjective measurement. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;There are two main threats that hashes would mitigate:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;1)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; Attacker sniffs data travelling to the AP server over the internet and records a list of all URLs that a particular person is visiting, using the list for further phishing attacks, user profiling, stalking, sale to a marketing company, etc.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;2)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; Attacker gains unauthorised access to client data once it reaches the AP server and uses it for similar actions as #1&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Threat #1 is trivially mitigated by using SSL, and since the AP filter already does this nobody can sniff the traffic in transit. So hashes are not needed to mitigate threat #1.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Threat #2 is more interesting. I will start by &lt;span style="font-weight:bold;"&gt;assuming&lt;/span&gt; that Microsoft itself is not malicious and Microsoft's policies forbid unauthorised use of the AP filter data. You may choose to assume the opposite (ie, you might believe that Microsoft fully intends to use the AP data for profiling or marketing purposes), but in that case you should turn off the feature altogether. Sending hashes won't protect at all against a system intentionally designed to mine the data (we'll talk about why in a second).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Threat #2 boils down to an "insider" at Microsoft deliberately going against corporate policy to mine the data, or a malicious outsider gaining access to the server and doing the same, or some accidental disclosure of the information via recycling hard-drives that haven't been wiped, leaving print-outs in the garbage, etc. These things can (and do) happen, so it's not an unrealistic thing to be concerned about.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;But what do hashes buy us? At first blush, they seem to buy us a lot. Now, instead of a list that says "User 12345 visited sites &lt;a style="text-decoration:none;" href="http://www.microsoft.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.microsoft.com&lt;/span&gt;&lt;/a&gt;, &lt;a style="text-decoration:none;" href="http://www.slashdot.org/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.slashdot.org&lt;/span&gt;&lt;/a&gt;, and &lt;a style="text-decoration:none;" href="http://www.apple.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.apple.com&lt;/span&gt;&lt;/a&gt;" they now get a list that says something like "User 12345 visited sites A538E10D, 83B1E7C9, and 746C2B9A". Great! The bad guys don't know where I've been. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Or do they?&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;First things first: if Microsoft really was trying to track you then the server would simply have a database matching hashes-to-URLs, so it would be trivial to reverse every known hash back into its corresponding URL. That's why I said above that if you really believed we were going to be naughty then you should just turn off the feature. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;The next thing to think about is what the attackers &lt;span style="font-weight:bold;font-style:italic;"&gt;really&lt;/span&gt; want to know. Do they want a laundry-list of the hundred &lt;span style="font-style:italic;"&gt;arbitrary&lt;/span&gt; web sites you visited last week, or do they just want to know if you visited a &lt;span style="font-style:italic;"&gt;specific&lt;/span&gt; site such as &lt;a style="text-decoration:none;" href="http://www.citibank.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.citibank.com&lt;/span&gt;&lt;/a&gt; or &lt;a style="text-decoration:none;" href="http://www.their-competitor.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.their-competitor.com&lt;/span&gt;&lt;/a&gt;? In this case, the attacker can do the trivial reverse-match themselves, since they will have a database of URLs they care about along with the corresponding hashes.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;At this point you may be asking yourself questions such as "I thought hashes were 1-way?" or "Can't you embed some kind of salt in the hash to make it irreversible?" or some other such questions. None of that helps. For the first objection, yes, hashes are 1-way but the same source text always hashes to the same value, so you can do reverse lookups if you know all the possible source texts and can pre-compute their hashes. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;For the second objection, it just won't work. Imagine that each client request was hashed with a unique GUID so nobody could pre-compute the hash. Now how is the server-side filter going to work, since it has nothing to match the hash against (remember the whole point of AP is to match client requests with known-bad URLs and block them)? Even if you pass the GUID along with the hash in the request, the server would have to go and re-hash every known URL with the GUID on each request, which would be prohibitively expensive (and thus still require a database of all known URLs in plain text on the server... resulting in additional threats to the system). And obviously there can't be a "shared secret" hash that Microsoft adds on both the client and the server since the bad guys would simply reverse-engineer the "secret" out of the Internet Explorer binaries.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;So the only thing that hashing really buys us is that it forces the attackers to keep their own database for matching URLs to hashes for reverse-lookup. Not much of a benefit if you ask me, especially since an enterprising businessperson could easily build and maintain such a database and sell it as a "legitimate" web service :-)&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Now let's look at what new threats arise if we only send hashes to the server. Because hashes are 1-way functions (as noted above) there is no way to introspect on the hash to figure out what the original source text was (the only recourse being the known-source-text database lookup as noted above). Attackers can use this to their advantage:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;1)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; Attacker appends random characters to their URL, resulting in unique hashes that are not in the AP database and thus bypassing the feature&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;In this attack, let's say that the AP server knows that &lt;a style="text-decoration:none;" href="http://www.evil.com/evil.htm"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com/evil.htm&lt;/span&gt;&lt;/a&gt; is a known phishing page. It has a specific hash which is stored in the AP database. Now the attacker can simply send out e-mails such as &lt;a style="text-decoration:none;" href="http://www.evil.com/evil.htm.AAA"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com/evil.htm.AAA&lt;/span&gt;&lt;/a&gt; to generate a completely different hash that is not in the database yet still sends the browser to the same page. (Of course they could also just rename &lt;span style="font-weight:bold;"&gt;evil.htm&lt;/span&gt; to &lt;span style="font-weight:bold;"&gt;evil2.htm&lt;/span&gt;, or use server-side 404 processing to respond to any random sequence of characters, etc.). Clearly a single hash for the entire URL is not good enough.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;OK, so what about if we send separate hashes for the domain and the path, and now say "Anything from &lt;a style="text-decoration:none;" href="http://www.evil.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;&lt;/a&gt; [with specific hash] is bad" and ignore the path portion. Well, now we have a different threat:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;2)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; Attacker uses wildcard DNS to generate random host names, resulting in same outcome as above&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;In this attack, the attacker simply generates unique domain names like foo1.evil.com, foo2.evil.com, foo3.evil.com, and so on. They all point to the same server, but will hash to different values so again they will not appear in the AP database. OK, next solution is to hash each portion of the URL individually ("com", "evil", "foo1", etc.) and send all the hashes to the server. Just as with the path problem above, the server could have a rule such as "If you have 'evil' and 'com' as the top-level domain then ignore the subdomains and return it as a bad site." We still have a threat though:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;3)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; Attacker hosts phishing site on a hosting server (such as &lt;a style="text-decoration:none;" href="http://www.geocities.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.geocities.com&lt;/span&gt;&lt;/a&gt;) and uses same URL obfuscation technique as above to avoid AP server&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Using a hosting site means that the detection can't be based off the broken-up domain names, and can't be based on a hash of the entire path either. Instead, we have to perform the same break-up operation that was used for domains and split the entire path into its components (so, for example, in the URL &lt;a style="text-decoration:none;" href="http://www.my-hosting-company.com/path/to/phisher/evil.htm"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.my-hosting-company.com/path/to/phisher/evil.htm&lt;/span&gt;&lt;/a&gt; we would send seven distinct hashes for each of the following: "www", "my-hosting-company", "com", "path", "to", "phisher", and "evil.htm"). Now the server has to have rules that say "If you get the domain hashes for 'www', 'my-hosting-company' and 'com' &lt;span style="font-weight:bold;"&gt;and&lt;/span&gt; you get the path hashes for 'path', 'to', and 'phisher' &lt;span style="font-weight:bold;"&gt;in that order&lt;/span&gt; then return it as a bad site."&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Now, not only are we sending orders of magnitude more data to the server (all those hashes are much bigger than the original source text) and increasing server-side processing dramatically, we still haven't solved the problem:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;4)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; Attacker uses non-path-based resource identification, resulting in same outcome as above&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;An example of such identification can be found on this very web server, which will take a URL such as &lt;a style="text-decoration:none;" href="http://blogs.msdn.com/452453.aspx"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;http://blogs.msdn.com/452453.aspx&lt;/span&gt;&lt;/a&gt; (note there is no path component) yet it still sends you to content that I control living under the &lt;span style="font-weight:bold;"&gt;/ptorr/&lt;/span&gt; directory. (In this specific case, MSDN sends a re-direct which results in a navigation to the full URL including the path, but there is no reason why that has to be the case). Couple this with arbitrary query-string processing, custom server-based path parsers, URL re-writers, etc. and there's really no way to figure out where the content is going when all you have is an opaque hash. Fundamentally, you &lt;span style="font-weight:bold;"&gt;need&lt;/span&gt; to see the original source text of the URL to effectively mitigate these kinds of attacks on the server.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;So is hashing really worth it? On the plus side, you put a trivial extra burden on the attackers who want to invade your privacy (they now need to maintain a URL-to-hash database for reverse lookups), and on the down side you significantly increase both the amount of data sent to the server and the time to process a request, &lt;span style="font-weight:bold;"&gt;and&lt;/span&gt; you introduce by-design loopholes for the attackers who want to phish you to bypass the feature. I'll let you decide which you think is the better approach...&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;It is important to note that I have only talked about the threats involved in both choices here; I have not touched on any potential benefits of sending the raw URLs (that's beyond the scope of this blog entry).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Also, I want to briefly touch on the query-string question -- &lt;a style="text-decoration:none;" href="http://blogs.msdn.com/ie/archive/2005/09/09/463204.aspx#463430"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;why doesn't IE send the query string to the AP server along with the full URL&lt;/span&gt;&lt;/a&gt;? Won't the attackers simply use query strings to decide whether to respond with the real phishing page (for the people who click on the e-mail links including the query-string) or a "legitimate" page for the  people processing request at the AP server (who click on links without the query-string)?&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Just like hashes, this doesn't really help (and in fact makes things worse). If the attackers are going to dynamically return a "good" or "bad" page depending on whether it has a query-string or not, they can also do so depending on whether &lt;span style="font-style:italic;"&gt;that particular query string has been visited before&lt;/span&gt;! The server processing is like this:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;1)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; If no query string, return "legitimate" page&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;2)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; If query string exists but is not in database of valid query strings, return "404" page&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;3)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; If query string is in database of valid query strings, remove it from database and return phishing page&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Now when the victim visits the site by clicking on an e-mail message, they send the query string &lt;span style="font-weight:bold;"&gt;victim=12345&lt;/span&gt; and condition 3 is satisfied so the user gets the phishing page. They report it to the AP server (including the query string) and soon afterwards a URL researcher at Microsoft goes to visit the site to see if it really is a phishing site. But because &lt;span style="font-weight:bold;"&gt;victim=12345&lt;/span&gt; has already been visited they satisfy condition 2 and they get the 404 page fooling them into thinking the site has already been taken down. So query strings don't really work. You could also do some trickery with cookies to ensure that the first victim always saw the phishing page even on subsequent visits, whilst the researcher always saw 404s.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Query strings also make things theoretically worse, because they are the most likely portion of the URL to contain personally-identifiable information (username, tracking GUID, etc.). So &lt;span style="font-weight:bold;font-style:italic;"&gt;if&lt;/span&gt; there was ever a breach of security at the AP server then not only would the attacker know all the websites you visited, they might also know your username and / or password to each of them as well!&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;But do not fear! User feedback is not the only way that the AP researchers will get new entries to put into the database -- they get the very same phishing e-mails that you and I get, so they will still be able to detect the phishing sites even without IE sending the data and even if the phishing server employs the fancy query-string detection logic.&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=604147" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>Blindly trusting detection tools</title><link>http://blogs.msdn.com/ptorr/archive/2005/08/16/452522.aspx</link><pubDate>Wed, 17 Aug 2005 09:02:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:452522</guid><dc:creator>ptorr</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/452522.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=452522</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=452522</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;Imagine I have a house cleaner that comes in once a week to clean the house. After a while I start to notice that my house smells "fishy", but my house cleaner has just the ticket -- the all-new &lt;span style="font-weight:bold;font-style:italic;"&gt;FishBeGone&lt;/span&gt; (TM) cleaner &amp;amp; fragrance that gets rid of fishy smells for up to seven days at a stretch! Sign me up, this fish smell is unbearable!&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;After a while I hear a rumour that &lt;span style="font-weight:bold;font-style:italic;"&gt;FishBeGone&lt;/span&gt; is actually paying house cleaners to store rotten fish in their customer's houses, thus driving demand for the cleaner and ensuring high profits. I also hear that the most common place that the rotten fish is stored is under the central heating unit, thus providing ideal environmental conditions for dispersing the delicious, summery smell of hot rotting fish throughout the house. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Aghast that such a thing could happen, I quickly run out and buy a &lt;a style="text-decoration:none;" href="http://www.imdb.com/title/tt0120609/"&gt;&lt;span class="Hyperlink-H" style="font-weight:bold;font-style:italic;text-decoration:none underline;"&gt;FishBeGoneBeGone&lt;/span&gt;&lt;/a&gt; product that consists of a video camera and fish-smell detection unit. I install it in my laundry (where the central heating unit is) and sure enough, on the next visit from my cleaner I notice that he adds some more rotting fish to the ever-growing pile. I confront him with the evidence, fire him, and get the laundry completely cleaned up. So far, so good!&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Now, I still need a house cleaner so I decide to contract one from a completely different agency -- one that has no known affiliation with &lt;span style="font-weight:bold;font-style:italic;"&gt;FishBeGone&lt;/span&gt; whatsoever. And just to be sure, I keep the &lt;span style="font-weight:bold;font-style:italic;"&gt;FishBeGoneBeGone&lt;/span&gt; system up and running for a few weeks but it never detects my new cleaner putting dead fish in my laundry. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Fantastic!&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;But after a few weeks, I start to detect that oh-so-sweet smell of rotting fish carcasses, and sure enough my new cleaner recommends that I purchase &lt;span style="font-weight:bold;font-style:italic;"&gt;FishBeGone&lt;/span&gt; to get rid of the smell. Worried that maybe this new agency wasn't so up-front as I first thought, I fire up the trusty &lt;span style="font-weight:bold;font-style:italic;"&gt;FishBeGoneBeGone&lt;/span&gt; system for a few weeks and check the records, but they're all totally clean.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Maybe I just have a "fishy smell" problem in my house after all?&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Or maybe the new cleaning lady was just putting the rotting fish under my bed instead.&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=452522" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>What is Microsoft doing for security?</title><link>http://blogs.msdn.com/ptorr/archive/2005/08/16/452453.aspx</link><pubDate>Wed, 17 Aug 2005 08:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:452453</guid><dc:creator>ptorr</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/452453.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=452453</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=452453</wfw:comment><description>&lt;DIV class=Section1&gt;
&lt;P&gt;&lt;SPAN&gt;A &lt;A style="TEXT-DECORATION: none" HREF="/ie/archive/2005/08/03/447515.aspx#448046"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;recent comment on the IE Blog&lt;/SPAN&gt;&lt;/A&gt; made it pretty apparent that not everybody is aware of Microsoft's efforts around security. &lt;A style="TEXT-DECORATION: none" HREF="/michael_howard/"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;Michael Howard&lt;/SPAN&gt;&lt;/A&gt; has mentioned the &lt;A href="http://msdn.microsoft.com/security/default.aspx?pull=/library/en-us/dnsecure/html/sdl.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;Security Developme&lt;/SPAN&gt;&lt;/A&gt;&lt;A href="http://msdn.microsoft.com/security/default.aspx?pull=/library/en-us/dnsecure/html/sdl.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;n&lt;/SPAN&gt;&lt;/A&gt;&lt;A href="http://msdn.microsoft.com/security/default.aspx?pull=/library/en-us/dnsecure/html/sdl.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;t Lifecyle&lt;/SPAN&gt;&lt;/A&gt; before, but in case you don't want to read the entire document on MSDN, here's a quick introduction on the basics of what happens:&lt;/SPAN&gt; &lt;/P&gt;
&lt;P class=Heading2-P style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;&lt;SPAN class=Heading2-H&gt;Training&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;People need to be trained about security issues before they can effectively design, write, test, or document a software product. I am sure that some readers might chuckle to themselves here and make a snide remark about how "Everybody should know about buffer over-runs (BOs) by now!" but there are two things I want to say about that:&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 72pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN&gt;1)&lt;SPAN style="PADDING-LEFT: 9pt"&gt;&lt;/SPAN&gt; It's better to &lt;SPAN style="FONT-WEIGHT: bold"&gt;incorrectly assume your employees &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;do not&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt; know about BOs&lt;/SPAN&gt; and waste a few hours training them on it than it is to &lt;SPAN style="FONT-WEIGHT: bold"&gt;incorrectly assume they &lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;do&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt; know about BOs&lt;/SPAN&gt; and have them write insecure code.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 72pt; TEXT-INDENT: -18pt"&gt;&lt;SPAN&gt;2)&lt;SPAN style="PADDING-LEFT: 9pt"&gt;&lt;/SPAN&gt; If you think BOs are the only kinds of security issues to be concerned about, you have a lot of learning ahead of you, young reader.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;Training covers such things as poor use of cryptographic functions (or use of known-weak cryptographic functions), SQL injection, cross-site scripting (XSS), integer overflows, etc. and that's just the "basics" that everyone attends. Then we have advanced courses on topics such as fuzzing, threat modelling, and mitigation techniques that people can choose to "specialise" in.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P class=Heading2-P style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;&lt;SPAN class=Heading2-H&gt;Designing&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;Once you know about security issues and the kinds of threats that are "out there", you need to build secure architectures and use existing technology in a secure fashion to avoid introducing design-level flaws in your software. We do this by having high-level design reviews with subject matter experts (SMEs) for larger, riskier features; and by performing an in-depth &lt;A style="TEXT-DECORATION: none" HREF="/ptorr/archive/2005/02/22/GuerillaThreatModelling.aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;threat modelling &lt;/SPAN&gt;&lt;SPAN class=Hyperlink-H style="FONT-WEIGHT: bold; FONT-STYLE: italic; TEXT-DECORATION: none underline"&gt;process&lt;/SPAN&gt;&lt;/A&gt; (it's &lt;A style="TEXT-DECORATION: none" HREF="/ptorr/archive/2005/02/08/368881.aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;not just a threat model &lt;/SPAN&gt;&lt;SPAN class=Hyperlink-H style="FONT-WEIGHT: bold; FONT-STYLE: italic; TEXT-DECORATION: none underline"&gt;document&lt;/SPAN&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;!&lt;/SPAN&gt;&lt;/A&gt;) for pretty much every component. (Clearly there is very little value to threat modelling the "Bold" toolbar button in Microsoft Word, so some things get by without a complete TM :-) ). &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;This is where I personally spend most of my time -- being an SME for technologies such as Internet Explorer hosting, ActiveX controls, managed code security, and so forth. I participate in a lot of design reviews for products all over Microsoft (pretty much everyone does &lt;SPAN style="FONT-STYLE: italic"&gt;something&lt;/SPAN&gt; with a web browser these days :-) ) and in particular I spend a significant amount of time with the IE team doing threat analysis on features and making sure we've got all our bases covered with respect to security.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P class=Heading2-P style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;&lt;SPAN class=Heading2-H&gt;Building&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;We have well-trained architects, well-trained program managers, well-trained developers, well-trained testers, and some great &lt;A style="TEXT-DECORATION: none" href="http://www.eweek.com/article2/0,1895,1841426,00.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;analysis tools&lt;/SPAN&gt;&lt;/A&gt; to help us avoid, detect, and remove common code-level security flaws such as BOs or the use of "bad" (hard-to-use-correctly) APIs. We also do code reviews, threat-model-driven testing, and perform other activities to prevent (or remove) security defects from the code before it is released to customers (or in some cases, before it is ever checked in). Run-time analysis tools such as &lt;A style="TEXT-DECORATION: none" href="http://www.microsoft.com/technet/security/secnews/articles/sec_tools_for_appverifier.mspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;AppVerifier&lt;/SPAN&gt;&lt;/A&gt; also help to catch potentially "bad" API usage or point out least-privilege violations (for example, asking for &lt;A style="TEXT-DECORATION: none" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/registry_key_security_and_access_rights.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;KEY_ALL_ACCESS when you only need KEY _READ&lt;/SPAN&gt;&lt;/A&gt;).&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;One little-know fact is that Microsoft has done a lot of work to help deprecate the "bad" APIs commonly found in C and C++ runtimes and to replace them with less "dangerous" versions that can help prevent certain classes of bugs. For example, there is the &lt;A style="TEXT-DECORATION: none" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/strings/stringreference/stringfunctions/stringcchcopy.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;"Safe String" library in Windows&lt;/SPAN&gt;&lt;/A&gt; that is used both internally and externally to replace unbounded string copies (eg, &lt;A style="TEXT-DECORATION: none" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strcpy.2c_.wcscpy.2c_._mbscpy.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;strcpy&lt;/SPAN&gt;&lt;/A&gt;) with bounded copies (&lt;A style="TEXT-DECORATION: none" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/strings/stringreference/stringfunctions/stringcchcopy.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;StringCchCopy&lt;/SPAN&gt;&lt;/A&gt;). What's more, the Visual C++ team has new &lt;A style="TEXT-DECORATION: none" href="http://msdn2.microsoft.com/library/8ef0s5kh(en-us,vs.80).aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;"security enhanced"&lt;/SPAN&gt;&lt;/A&gt; versions of many common CRT functions, and &lt;A style="TEXT-DECORATION: none" HREF="/shawnfa/archive/2004/04/08/110097.aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;Microsoft is working&lt;/SPAN&gt;&lt;/A&gt; to make these new functions a part of the ANSI C standard. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;Microsoft &lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;innovating in security&lt;/SPAN&gt; and &lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;working with standards bodies&lt;/SPAN&gt; and &lt;SPAN style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;sharing technology with the world&lt;/SPAN&gt;? Who would have thunk it? :-)&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;You can read more about the new libraries &lt;A style="TEXT-DECORATION: none" href="http://msdn.microsoft.com/msdnmag/issues/05/05/SafeCandC/default.aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;in MSDN Magazine&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P class=Heading2-P style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;&lt;SPAN class=Heading2-H&gt;Releasing&lt;/SPAN&gt; &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;After we have designed, built, tested, documented, etc. the product, it gets released to customers. We try very hard to strike a balance between usability and security with our products -- the "Secure by Default" mantra -- and it's often a very hard thing to do. How do you make your product usable enough so that most customers can do what they want without getting frustrated or calling Product Support Services, yet still keep the less-used or higher-risk features turned off if they are not needed? &lt;A style="TEXT-DECORATION: none" href="http://www.securityfocus.com/infocus/1765"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;IIS 6 in Windows 2003&lt;/SPAN&gt;&lt;/A&gt; was clearly a big step in one direction, and it's payed off &lt;a href="http://blogs.msdn.com/michael_howard/archive/2004/10/15/242966.aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;big-ti&lt;/SPAN&gt;&lt;/A&gt;&lt;a href="http://blogs.msdn.com/michael_howard/archive/2004/10/15/242966.aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;m&lt;/SPAN&gt;&lt;/A&gt;&lt;a href="http://blogs.msdn.com/michael_howard/archive/2004/10/15/242966.aspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;e&lt;/SPAN&gt;&lt;/A&gt;. But such an approach wouldn't work with, say, &lt;A href="http://messenger.msn.com/"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;MS&lt;/SPAN&gt;&lt;/A&gt;&lt;A href="http://messenger.msn.com/"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;N&lt;/SPAN&gt;&lt;/A&gt;&lt;A href="http://messenger.msn.com/"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt; Messenger&lt;/SPAN&gt;&lt;/A&gt; where it's pretty clear that if you install the product you need it to talk on the network and receive messages from your buddies.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt"&gt;&lt;SPAN&gt;Despite all our hard work, security issues are still found in released products and this is where the &lt;A style="TEXT-DECORATION: none" href="http://blogs.technet.com/msrc/"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;Microsoft Security Response Centre (MSRC)&lt;/SPAN&gt;&lt;/A&gt; comes in. The MSRC team is dedicated to &lt;A style="TEXT-DECORATION: none" href="mailto:secure@microsoft.com"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;receiving&lt;/SPAN&gt;&lt;/A&gt; and investigating reports of security issues in Microsoft products, and then working with product teams to find, fix, and release patches for them on our now-famous &lt;A style="TEXT-DECORATION: none" href="http://www.microsoft.com/presspass/press/2003/oct03/10-09securityinvestmentspr.mspx"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;"Patch Tuesday"&lt;/SPAN&gt;&lt;/A&gt;. Patching on a predictable basis is something that Microsoft did because customers requested it, and whilst initially Microsoft got a lot of heat for "trying to make it &lt;A style="TEXT-DECORATION: none" href="http://news.zdnet.co.uk/internet/security/0,39020375,39117819,00.htm"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;look like we had fewer issues&lt;/SPAN&gt;&lt;/A&gt;", many in the industry have come to realise that it's "the right thing to do" and &lt;A style="TEXT-DECORATION: none" href="http://www.informationweek.com/story/showArticle.jhtml?articleID=166404290"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;at least one analyst expects others to follow suit&lt;/SPAN&gt;&lt;/A&gt; (eventually).&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;So that's it, in a nutshell. We've said for a long time that "Security is an Industry Problem" and I would love it if &lt;SPAN style="FONT-STYLE: italic"&gt;every&lt;/SPAN&gt; vendor took a long, hard look at their development process and adopted something similar to the SDL. There will always be customers who choose not to run Microsoft software, but we still want them to be as secure as possible on their platform of choice.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;I did a brief search on Apache's official site, and they ask that &lt;A style="TEXT-DECORATION: none" href="http://httpd.apache.org/dev/patches.html"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;patches have performance optimisations&lt;/SPAN&gt;&lt;/A&gt; but there is no mention of having a security review or any minimum standards for security. That's not to say people aren't &lt;A style="TEXT-DECORATION: none" href="http://searchenterpriselinux.techtarget.com/originalContent/0,289142,sid39_gci912731,00.html"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;performing security reviews of Apache&lt;/SPAN&gt;&lt;/A&gt;, but the "many eyes" &lt;A style="TEXT-DECORATION: none" href="http://secunia.com/product/73/"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;don't help&lt;/SPAN&gt;&lt;/A&gt; if they're (i) not looking at the important bits or (ii) don't know what to look for.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Microsoft has a &lt;A style="TEXT-DECORATION: none" href="http://msdn.microsoft.com/security/default.aspx?pull=/library/en-us/dnsecure/html/sdl.asp"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;publicly-documented&lt;/SPAN&gt;&lt;/A&gt; process for designing, building, releasing, and supporting software "that needs to withstand malicious attack," and although software will always have bugs we're definitely &lt;A style="TEXT-DECORATION: none" href="http://msdn.microsoft.com/library/en-us/dnsecure/html/sdl_03.gif"&gt;&lt;SPAN class=Hyperlink-H style="TEXT-DECORATION: none underline"&gt;showing improvements&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Does your software vendor of choice have such a process? Or only rhetoric?&lt;/SPAN&gt; &lt;/P&gt;&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=452453" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>HELLO? CAN YOU HEAR ME?!?</title><link>http://blogs.msdn.com/ptorr/archive/2005/08/10/450194.aspx</link><pubDate>Thu, 11 Aug 2005 06:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:450194</guid><dc:creator>ptorr</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/450194.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=450194</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=450194</wfw:comment><description>    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;As most of my friends know, I'm a pretty jumpy person. And, of course, most of those same friends like to exploit that fact for their own amusement from time to time (thanks to &lt;a href="https://blogs.msdn.com:443/jeffdav/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;J&lt;/span&gt;&lt;/a&gt;&lt;a href="https://blogs.msdn.com:443/jeffdav/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;e&lt;/span&gt;&lt;/a&gt;&lt;a href="https://blogs.msdn.com:443/jeffdav/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;f&lt;/span&gt;&lt;/a&gt;&lt;a href="https://blogs.msdn.com:443/jeffdav/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;f&lt;/span&gt;&lt;/a&gt; for almost running me over the other day). The fact that I lose 5 years of my life every time one of my friends wants a cheap laugh probably speaks more to my choice of friends than anything else, but I digress.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Today the fire alarm went off in our building. Now I lived through many fire alarms back in the Visual Studio building , but it was never this bad.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;
          &lt;/span&gt;
          &lt;span style="font-weight:bold;"&gt;OH MY GAWD ARE THOSE THINGS LOUD!!! &lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;I was walking down the hallway when the alarms went off. Additionally, because some people are hearing impaired (if not before the drill, then perhaps after it) there are bright flashing lights to provide a visual cue that something is wrong.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Unfortunately, I happened to be standing &lt;span style="font-style:italic;"&gt;directly underneath one of the speakers and right next to one of the flashing lights&lt;/span&gt; when the alarm went off. Of course, I did what any rational human being would do when unexpectedly assaulted with blindingly bright lights flashing in their eyes and deafeningly loud sirens blasting in their ears.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;I yelled "Ahhhh !@%&amp;" at the top of my voice. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;In hindsight, that probably wasn't the most dignified thing to have done. But at least it provided some amusement for my fellow corridor-dwellers...&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;To make this mildly work-related, here are two thoughts:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;1)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; If you have a disaster recovery plan (DRP) or emergency response plan (ERP) in place then it's a good thing to test it once in a while. Better to inconvenience a few people at a time when you &lt;span style="font-style:italic;"&gt;can&lt;/span&gt; afford it than to realise your plan is busted when you &lt;span style="font-style:italic;"&gt;can't&lt;/span&gt; afford it.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;2)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; If you don't have a DRP or ERP in place, &lt;a style="text-decoration:none;" href="http://www.imdb.com/title/tt0112442/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;whatcha gonna do when they come for you&lt;/span&gt;&lt;/a&gt;?&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=450194" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/ptorr/archive/tags/Randomness/default.aspx">Randomness</category></item><item><title>IE Blog</title><link>http://blogs.msdn.com/ptorr/archive/2005/08/05/448010.aspx</link><pubDate>Fri, 05 Aug 2005 10:21:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:448010</guid><dc:creator>ptorr</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/448010.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=448010</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=448010</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;For those of you who haven't already heard, the &lt;a style="text-decoration:none;" href="http://blogs.msdn.com/ie/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;IE team has a blog&lt;/span&gt;&lt;/a&gt; and recently they've started to talk about some of the cool features to be found in IE 7 Beta 1 (or planned for RTM). &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;I've been working pretty closely with the IE team for some time now, but the nature of this job is such that if all goes well then you'll never hear about any of the work we've been doing together. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Rob &amp;amp; Co. will definitely be talking about some of the new features such as &lt;a style="text-decoration:none;" href="http://blogs.msdn.com/ie/archive/2005/06/09/427410.aspx"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;Protected Mode&lt;/span&gt;&lt;/a&gt; and the Anti-Phishing Filter, but remember that &lt;span style="font-weight:bold;"&gt;Security Features != Secure Features&lt;/span&gt; (or for the VB folks: &lt;span style="font-weight:bold;"&gt;Security Features &amp;lt;&amp;gt; Secure Features&lt;/span&gt; :-) ).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;I hope to one day be able to share some of the work we have done behind-the-scenes, but now is not the time.&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=448010" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>The Evil Problem</title><link>http://blogs.msdn.com/ptorr/archive/2005/08/05/448007.aspx</link><pubDate>Fri, 05 Aug 2005 10:08:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:448007</guid><dc:creator>ptorr</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/448007.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=448007</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=448007</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;Over on the IE Blog, &lt;a style="text-decoration:none;" href="http://blogs.msdn.com/ie/archive/2005/08/03/447207.aspx#447864"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;a commenter&lt;/span&gt;&lt;/a&gt; made a very good point -- why is it that IE flags scripts as “potentially bad”? That’s very confusing to the average user, and they have no way of knowing whether or not the script really is bad or not (and therefore whether they should enable it or not).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Unfortunately, this is much harder to do than it sounds -- even for humans (let alone computers). If I told you about a program that deleted all the data off your hard disk, would you say that it was a “good” or a “bad” program? What if I told you the program was named “format.exe” and its only purpose in life was to wipe disks of all their data?&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;So it’s not easy :-(&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;By default, IE limits the capability of scripts running from internet web pages because it is highly unlikely that anyone trying to format your disk across the internet has good intentions. Nevertheless, if IE is asked to load a page from the local hard-drive, it might be the case that (eg) you have an HTML-based administration console for a locally-installed application, and you really do need to format a hard drive or perform some other potentially-dangerous operation. So in this case, instead of just outright blocking access to that functionality, IE disables it by default and uses the Information Bar (aka the "gold bar") to inform the user that if they want to run the script they can do so.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;The idea here being that if the gold bar was unexpected, the user could simply ignore the notification / close the browser / navigate to another page / etc. and still be protected, but if the user was expecting "potentially bad things" to happen then they could click through the gold bar and still have access to the rich functionality of the administration application.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;I entitled this post "The Evil Problem" because it's similar to "&lt;a style="text-decoration:none;" href="http://en.wikipedia.org/wiki/Halting_problem"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;The Halting Problem&lt;/span&gt;&lt;/a&gt;", which is a famous problem in computer science that says it's not possible to algorithmically determine whether or not a particular program will halt (stop). The reason this is so is because if you assume such an algorithm exists, you write a program thusly:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;&amp;nbsp;&lt;/span&gt;
      &lt;/p&gt;
      &lt;div style="border-top:solid 1pt #99CCFF;padding-top:1pt;border-bottom:solid 1pt #99CCFF;padding-bottom:1pt;border-right:solid 1pt #99CCFF;padding-right:4pt;border-left:solid 1pt #99CCFF;padding-left:4pt"&gt;
        &lt;div style=""&gt;
          &lt;p class="Code-P" style="margin-top:12pt;margin-top:0pt;"&gt;
            &lt;span&gt;
              &lt;span style="color:#0000FF;"&gt;while&lt;/span&gt; (DoesHaltingAlgorithmSayIWillHalt())&lt;/span&gt;
          &lt;/p&gt;
          &lt;p class="Code-P" style="margin-top:12pt;margin-top:0pt;"&gt;
            &lt;span&gt;&amp;nbsp;&amp;nbsp;; &lt;span style="color:#008000;"&gt;// do nothing&lt;/span&gt;&lt;/span&gt;
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;p&gt;
        &lt;span&gt;Now if the algorithm says you will halt, you just loop forever (thus never halting). On the other hand, if the algorithm says you will never halt, you halt immediately. By this we see that such an algorithm can't exist. This mode of argument is called &lt;a style="text-decoration:none;" href="http://en.wikipedia.org/wiki/Null_hypothesis"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;The Null Hypothesis&lt;/span&gt;&lt;/a&gt; and you could apply it to evil scripts thusly:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;&amp;nbsp;&lt;/span&gt;
      &lt;/p&gt;
      &lt;div style="border-top:solid 1pt #99CCFF;padding-top:1pt;border-bottom:solid 1pt #99CCFF;padding-bottom:1pt;border-right:solid 1pt #99CCFF;padding-right:4pt;border-left:solid 1pt #99CCFF;padding-left:4pt"&gt;
        &lt;div style=""&gt;
          &lt;p class="Code-P" style="margin-top:12pt;margin-top:0pt;"&gt;
            &lt;span&gt;
              &lt;span style="color:#0000FF;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000FF;"&gt;true&lt;/span&gt; == DoesEvilAlgorithmSayIAmEvil())&lt;/span&gt;
          &lt;/p&gt;
          &lt;p class="Code-P" style="margin-top:12pt;margin-top:0pt;"&gt;
            &lt;span&gt;
              &lt;span style="color:#008000;"&gt;
              &lt;/span&gt;&amp;nbsp;&amp;nbsp;; &lt;span style="color:#008000;"&gt;// do nothing&lt;/span&gt;&lt;/span&gt;
          &lt;/p&gt;
          &lt;p class="Code-P" style="margin-top:12pt;margin-top:0pt;"&gt;
            &lt;span&gt;
              &lt;span style="color:#0000FF;"&gt;
              &lt;/span&gt;
              &lt;span style="color:#0000FF;"&gt;else&lt;/span&gt;
            &lt;/span&gt;
          &lt;/p&gt;
          &lt;p class="Code-P" style="margin-top:12pt;margin-top:0pt;"&gt;
            &lt;span&gt;&amp;nbsp;&amp;nbsp;DoSomethingEvil();&lt;/span&gt;
          &lt;/p&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=448007" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/ptorr/archive/tags/Script/default.aspx">Script</category></item><item><title>Malicious vs Spoofed Servers</title><link>http://blogs.msdn.com/ptorr/archive/2005/07/24/442726.aspx</link><pubDate>Sun, 24 Jul 2005 22:20:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:442726</guid><dc:creator>ptorr</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/442726.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=442726</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=442726</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Curious Caroline&lt;/span&gt; writes:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-weight:bold;font-style:italic;"&gt;Dear Peter&lt;/span&gt;
          &lt;span style="font-style:italic;"&gt;,&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-style:italic;"&gt;I have a friend who was talking to a security tester the other day, and apparently the tester said that having a "malicious server" is different than having a "spoofed" server. How is that so? My friend would really like to know, so I told her I'd ask you.&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-style:italic;"&gt;Yours,&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-style:italic;"&gt;Caroline&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;
          &lt;/span&gt;
          &lt;span style="font-weight:bold;"&gt;Dear Caroline,&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Your friend has a good question.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;The two terms are actually orthogonal -- you could have a spoofed-but-non-malicious server, a non-spoofed-but-malicious-server, and either of the other two combinations as well. When going through the threat modelling process, we're always on the lookout for both malicious entities and spoofed entities, and the difference between the two is really the kind of threat they possess (and thus the kind of mitigation we use to prevent it).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;Spoofing&lt;/span&gt; threats occur when the server (or other entity) you are talking to is not the one you think you are talking to, and you have no way of verifying that this has occurred. For example, you think you have made a connection to &lt;a style="text-decoration:none;" href="http://www.amazon.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.amazon.com&lt;/span&gt;&lt;/a&gt; and are about to send over all your credit card details, but in reality you have connected to &lt;a style="text-decoration:none;" href="http://www.evil.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;&lt;/a&gt; and it is about to steal all your information. Note that a spoof could be non-malicious and / or non-intentional. For example, imagine your Proxy server gets confused and when you try to visit &lt;a style="text-decoration:none;" href="http://www.microsoft.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.microsoft.com&lt;/span&gt;&lt;/a&gt; in your web browser you actually get the content from &lt;a style="text-decoration:none;" href="http://www.google.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.google.com&lt;/span&gt;&lt;/a&gt; instead. The spoof here was unintentional and the "wrong" server (Google in this case) is not malicious at all. It's just a bit annoying.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Note also that there are spoofs against the software and spoofs against the user. If the DNS records for a particular server are wrong (for example), the software will be confused -- it asked for the IP address of &lt;a style="text-decoration:none;" href="http://www.microsoft.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.microsoft.com&lt;/span&gt;&lt;/a&gt;, it received a IP address back from the DNS server, and it went to exactly that IP address. The software "believes" it is at the right place, even though it may be the real IP address of &lt;a style="text-decoration:none;" href="http://www.google.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.google.com&lt;/span&gt;&lt;/a&gt;. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Spoofs against the user are something we see a lot of these days with phishing attacks and the like. In this case, the browser asks for the IP address of &lt;a style="text-decoration:none;" href="http://www.evil.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;&lt;/a&gt;, it gets the IP address, it goes there, and as far as the software is concerned you really are at &lt;a style="text-decoration:none;" href="http://www.evil.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;&lt;/a&gt;. Trouble is that the content on &lt;a style="text-decoration:none;" href="http://www.evil.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;&lt;/a&gt; is made to look just like &lt;a style="text-decoration:none;" href="http://www.citibank.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.citibank.com&lt;/span&gt;&lt;/a&gt; so the user is fooled into typing in their credentials. Sometimes browser bugs are used in this situation too -- address bar spoofs can be used to make the user think they are really at &lt;a style="text-decoration:none;" href="http://www.citibank.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.citibank.com&lt;/span&gt;&lt;/a&gt; even if they check the address bar, even though the browser still "knows" you are on &lt;a style="text-decoration:none;" href="http://www.evil.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Of course, the best known way to mitigate all of these spoofing threats is to use a secure (SSL) connection. As long as you request a secure connection (and, in the case of the human spoofs, the user confirms that the certificate is issued to the intended company) then you will only be able to connect to the real server. A spoofed server (whether intentional or accidental) will not have the correct certificates needed to establish the secure connection. Of course SSL is more expensive than unsecured HTTP (in terms of network connection setup time, etc) so typically people only use it for high-value traffic, but realistically &lt;span style="font-weight:bold;"&gt;all&lt;/span&gt; traffic is high-value to someone. For example, imagine if someone spoofed &lt;a href="http://blogs.msdn.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;blogs.ms&lt;/span&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;d&lt;/span&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;n.com&lt;/span&gt;&lt;/a&gt; and posted an entry by "Peter Torr" that said "&lt;span style="font-style:italic;"&gt;You should turn your Internet Explorer security settings down to 'Low' for all zones!&lt;/span&gt;" Now anyone who read that sentence by "Peter Torr" would either (i) think I was a complete moron, or (ii) start using the internet in an insecure fashion based on some really bad "expert advice".&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Enough about spoofing. A &lt;span style="font-weight:bold;"&gt;malicious server&lt;/span&gt; is just a server that wants to compromise your software in some fashion. It could be a spoofed server but it could be the "real" server that you intend to talk to; doesn't matter. For example, imagine that instead of spoofing your internal database server, a bad &lt;span style="font-style:italic;"&gt;actually takes over&lt;/span&gt; the machine and installs his own hacked code on it. Or, if your application supports some kind of file-type or shortcut that can be e-mailed around, imagine someone evil convinces you to open a shortcut that points directly to her malicious server. Now SSL won't help you at all, because all your clients really are connecting to the "right" database server, it's just that the server is no longer trustworthy and could be spewing out all sorts of junk.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;You can't get away from malicious servers just by using SSL. No, to protect against malicious servers you actually have to write secure software :-). And although malicious servers can represent all the typical STRIDE threats against your software, I would focus &lt;span style="font-weight:bold;font-style:italic;"&gt;most&lt;/span&gt; on the remote servers trying to DoS or EoP the client machines (eg, go from owning a single database server to owning all the client machines in the network). I say this because you are unlikely to be able to protect against information disclosure or tampering threats when faced with an un-spoofed-but-malicious server. (You &lt;span style="font-style:italic;"&gt;really are&lt;/span&gt; connecting to the database server, and it &lt;span style="font-style:italic;"&gt;really does&lt;/span&gt; go over SSL, but once you've sent your sensitive data to the server you have no control over what it does with it next. Similarly, if you query it for some data and it returns a result that is within reasonable limits of what you expect back, you have no way of knowing whether the data is correct or if it has been spoofed / tampered with by the malicious server).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;So to mitigate against malicious server scenarios, you need to ensure that your client code is rock-solid against malformed inputs sent from the server. Never assume the packets coming in are the right size, or that the internal structures are filled out correctly, or that the buffer lengths in the header match the real size of the payload, etc. In fact, never assume the data will arrive at all -- always have a reasonable timeout to detect misbehaving servers (or just bad network connectivity) so your client doesn't hang indefinitely. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Once you've validated that the packets are well-formed and syntactically correct, it's still not necessarily a good idea to blindly take action based on the information inside them. Is the data in the packet within a reasonable set of limits? Given the current state of the client, is the request a reasonable one to service? Does the data you got back make any sense at all? etc. And remember as you do this that "lists of known-good behaviour" (allow-lists) are much better than "lists of known-bad behaviour" (block-lists) because, well, you don't really know what all the bad behaviours are, so you are likely to miss some of them.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Although there's little else you can do to protect against "0wned" servers, you can do some other small things to help mitigate the attacker-fooled-you-into-connecting-to-the-wrong-server threat. For example, you could publish a list of "known good" servers in Active Directory and before connecting to any machines the client could ensure the server was on that list. Now if a bad guy tries top set up his desktop machine as a malicious server, he isn't going to get very far unless he can also get it listed in AD (which should be &lt;span style="font-weight:bold;"&gt;really hard&lt;/span&gt; to do!). You could also ask the user to confirm each server the first time they connect to it, in an attempt to catch unexpected server names.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;And a bonus point: Remember that you always have the man-in-the-middle (MITM) threat unless your connections are suitably encrypted and digitally signed. Even then, sometimes the mere fact that &lt;span style="font-weight:bold;"&gt;Client A&lt;/span&gt; is talking to &lt;span style="font-weight:bold;"&gt;Server B&lt;/span&gt; is "interesting" to an attacker, but that's usually only for highly sensitive things like military operations. For most situations, you don't need to worry about that :-)&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=442726" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>Adding URLs to an application securely</title><link>http://blogs.msdn.com/ptorr/archive/2005/07/17/439798.aspx</link><pubDate>Mon, 18 Jul 2005 01:10:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:439798</guid><dc:creator>ptorr</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/439798.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=439798</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=439798</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;An &lt;span style="font-weight:bold;"&gt;Anonymous Reader&lt;/span&gt; writes:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-weight:bold;font-style:italic;"&gt;Dear Peter,&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-style:italic;"&gt;I am writing a desktop application that contains links to external websites inside the "Help" menu, as is common with many applications such as Internet Explorer and Microsoft Office. I want to make this list dynamic so that I can update it with cool new content over time. I want to do this by downloading a small XML file from my web server containing the text of the menu item and the URL to go to. How can I make sure that hackers don't insert a menu item to &lt;/span&gt;
          &lt;a style="text-decoration:none;" href="http://www.evil.com"&gt;
            &lt;span class="Hyperlink-H" style="font-style:italic;text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;
          &lt;/a&gt;
          &lt;span style="font-style:italic;"&gt; and exploit my customers?&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-style:italic;"&gt;Yours,&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;"&gt;
        &lt;span&gt;
          &lt;span style="font-style:italic;"&gt;
          &lt;/span&gt;
          &lt;span style="font-style:italic;"&gt;Anonymous Reader&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;&amp;nbsp;&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;
          &lt;span style="font-weight:bold;"&gt;
          &lt;/span&gt;
          &lt;span style="font-weight:bold;"&gt;Dear Anonymous,&lt;/span&gt;
        &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;I'm glad you asked that question. There are three main ways you can help prevent hackers from inserting menu items to &lt;a style="text-decoration:none;" href="http://www.evil.com"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;www.evil.com&lt;/span&gt;&lt;/a&gt; in your situation. They are:&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;1)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; &lt;a style="text-decoration:none;" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;168151"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;Download your XML file over an SSL connection&lt;/span&gt;&lt;/a&gt;. As long as you are connecting to &lt;a style="text-decoration:none;" href="https://www.example.com/"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;https://www.example.com/&lt;/span&gt;&lt;/a&gt; and verifying that the connection is secure, an attacker won't be able to tamper with the XML file in-transit to the user's computer. This doesn't help if an attacker compromises your web server though, as they could still insert malicious content to be "securely downloaded" to the client.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;2)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; &lt;a style="text-decoration:none;" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/5a86684c-579f-424d-a90c-8c403edc42f2.asp"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;Sign the contents of your XML file&lt;/span&gt;&lt;/a&gt; and verify the signature on the user's computer. As long as the signature verifies correctly, you can be sure that no-one has tampered with the file either in transit &lt;span style="font-weight:bold;"&gt;or&lt;/span&gt; by compromising your web server (assuming you keep the private key physically separated from your web server). Note that it isn't sufficient to simply check that the file has a valid signature; you also need to check that it is signed by the correct publisher (ie, you!) and chains to the correct root. Otherwise the bad guys could just sign it with their own key-pair. You should also use an increasing version number in your digital signature's description so that you can detect attempts to "re-play" old, signed files.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p style="margin-top:12pt;margin-left:36pt;text-indent:-18pt;"&gt;
        &lt;span&gt;3)&lt;span style="padding-left:9pt;"&gt;&lt;/span&gt; Change the design to have less attack surface (risk). You don't actually need to send URLs to the client in the first place -- you only need to be able to uniquely identify the menu item that the user clicked on. A "safer" way to do this is to store all the URLs in a database on your server and assign each one a unique ID. This ID is sent to the desktop application along with the menu item text inside the XML file. When the user clicks on the menu item you simply construct a URL such as &lt;a style="text-decoration:none;" href="http://www.example.com/menu-redirector.aspx?id=ID_GOES_HERE"&gt;&lt;span class="Hyperlink-H" style="text-decoration:none underline;"&gt;http://www.example.com/menu-redirector.aspx?id=ID_GOES_HERE&lt;/span&gt;&lt;/a&gt; and the server determines which URL to go to and does a redirect. This means the server is always in control of which URLs the client can be navigated to, and it can easily filter out invalid content. Even if an attacker compromises the XML file on the server (or in transit) the worst they can do is redirect your users to an un-intended (but still "good") site. Note that you should &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; build a redirect page that takes an arbitrary URL, as this can be abused in cross-domain attacks. Always build your redirect pages to take an opaque identifier that then maps back to a URL you control and know to be trustworthy.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;And as a bonus tip, make sure you store the XML file in the &lt;span style="font-weight:bold;"&gt;user's profile&lt;/span&gt;, not inside the application folder under &lt;span style="font-weight:bold;"&gt;Program Files&lt;/span&gt;. This ensures that non-Administrative users can use the download-and-update feature.&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=439798" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>Dear Diary...</title><link>http://blogs.msdn.com/ptorr/archive/2005/07/17/439782.aspx</link><pubDate>Sun, 17 Jul 2005 22:19:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:439782</guid><dc:creator>ptorr</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/439782.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=439782</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=439782</wfw:comment><description>
    &lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;I haven't really blogged in a while, mostly because it's hard to blog about the kind of work I do right now (improving the security of unreleased products). But, I thought to myself, one way to share some of my experience with all you great folks would be to have a series of "Dear Diary" entries where (in the grandest tradition of trashy magazines) I will publish letters from "readers" who have sent me their security questions, and provide my answers or advice.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Some of these questions will come from real engagements I have had at Microsoft, some will come from questions I've had from external customers in the past, and (maybe) some will come from questions that &lt;span style="font-weight:bold;"&gt;you&lt;/span&gt; send in. Then I won't have to fake it any more! :-)&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Anyway, we'll see how it goes... I'd love to hear your feedback.&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=439782" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>So that's what happens...</title><link>http://blogs.msdn.com/ptorr/archive/2005/06/15/429249.aspx</link><pubDate>Wed, 15 Jun 2005 08:42:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:429249</guid><dc:creator>ptorr</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/429249.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=429249</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=429249</wfw:comment><description>&lt;div class="Section1"&gt;
      &lt;p&gt;
        &lt;span&gt;Today I did something I haven't done in a long time: I downloaded and installed some unsigned code while running as a local administrator on my home computer. &lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;I had to stare at the Security Warning dialog from Windows for quite a few moments before I decided that I really wanted to install software from &lt;span&gt;Unknown Publisher&lt;/span&gt;. I almost expected my machine to catch on fire as I clicked the &lt;span&gt;Run&lt;/span&gt; button... but surprisingly enough the application seemed to install without incident (or so I hope!).&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;So why did I do it? Because realistically I had no other choice. It was either that or live without the software, and I wanted to use the software. Just like the other week when I had to install an unsigned driver for some hardware I purchased. The manual helpfully told me how to turn &lt;span&gt;off&lt;/span&gt; driver signing (uh, thanks... I guess) but neglected to say I should turn it back &lt;span&gt;on&lt;/span&gt; again afterwards! And it's not like I'm going to take my hardware back to the store and say "I don't want to use this cool device because the driver isn't signed."&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;Sometimes you just have to take calculated risks. Luckily for me I think I got by alright this time.&lt;/span&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span&gt;In other news, &lt;a href="http://perfectbeat.com/product_info.php?products_id=828766925524"&gt;&lt;span class="Hyperlink-H"&gt;Alcazar's new single Alcastar&lt;/span&gt;&lt;/a&gt; is incredibly good -- especially the Soundfactory Starstruck Anthem. Buy it now! :-)&lt;/span&gt;
      &lt;/p&gt;
    &lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=429249" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/ptorr/archive/tags/Randomness/default.aspx">Randomness</category></item><item><title>Mozilla now signs Firefox downloads</title><link>http://blogs.msdn.com/ptorr/archive/2005/03/26/402585.aspx</link><pubDate>Sun, 27 Mar 2005 04:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:402585</guid><dc:creator>ptorr</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/402585.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=402585</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=402585</wfw:comment><description>&lt;div class="Section1"&gt;&lt;a name="OLE_LINK1"&gt;&lt;/a&gt;&lt;a name="OLE_LINK2"&gt;&lt;/a&gt; &lt;p&gt;&lt;span&gt;A little bird recently told me some good news -- &lt;a style="TEXT-DECORATION: none" href="http://www.getfirefox.com/"&gt;&lt;span class="Hyperlink" style="TEXT-DECORATION: none underline"&gt;Mozilla Firefox&lt;/span&gt;&lt;/a&gt; is now digitally signed by "Mozilla Foundation." This means that Windows customers who want to download the self-installing executable with Internet Explorer can do so and be sure that what they downloaded was indeed Firefox and not some corrupt (or tampered with) download:&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;img alt="signed download image" src="http://torrboy.members.winisp.net/images/signedfirefoxdownload.jpg" /&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;The cert was apparently issued just a couple of days after &lt;span style="FONT-STYLE: italic"&gt;someone&lt;/span&gt; blogged about this issue... but maybe that's just a co-incidence ;-)&lt;?xml:namespace prefix = aml /&gt;&lt;aml:annotation aml:id="0" w:type="Word.Bookmark.End"&gt;&lt;/aml:annotation&gt;&lt;aml:annotation aml:id="1" w:type="Word.Bookmark.End"&gt;&lt;/aml:annotation&gt;&lt;/span&gt; &lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=402585" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>Guerrilla Threat Modelling (or 'Threat Modeling' if you're American)</title><link>http://blogs.msdn.com/ptorr/archive/2005/02/22/GuerillaThreatModelling.aspx</link><pubDate>Wed, 23 Feb 2005 07:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:378510</guid><dc:creator>ptorr</dc:creator><slash:comments>20</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/378510.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=378510</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=378510</wfw:comment><description>A crash-course in developing Data Flow Diagrams in support of software threat models...(&lt;a href="http://blogs.msdn.com/ptorr/archive/2005/02/22/GuerillaThreatModelling.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=378510" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item><item><title>High-Level Threat Modelling Process</title><link>http://blogs.msdn.com/ptorr/archive/2005/02/08/368881.aspx</link><pubDate>Tue, 08 Feb 2005 11:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:368881</guid><dc:creator>ptorr</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/ptorr/comments/368881.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ptorr/commentrss.aspx?PostID=368881</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ptorr/rsscomments.aspx?PostID=368881</wfw:comment><description>&lt;div class="Section1"&gt; &lt;p&gt;&lt;span&gt;The following is a (slightly modified) version of a document I wrote for the VSTO team way back in the day. You might find it useful as you plan threat modelling for your product(s). You should of course read the &lt;a style="TEXT-DECORATION: none" href="http://www.microsoft.com/mspress/books/6892.asp"&gt;&lt;span class="Hyperlink" style="TEXT-DECORATION: none underline"&gt;Threat Modelling book from Microsoft Press&lt;/span&gt;&lt;/a&gt; if you want to go into great details about how to do a good job of threat modelling, but this might be enough to get you started on a plan.&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;span&gt;One important thing that people often miss is that a good threat model is critical for enabling your test teams to attack the product from a hacker's perspective (and to really find those juicy security bugs that might otherwise go unnoticed). Anyone who thinks that threat modelling is purely a developer or PM responsibility needs a smack upside the head. QA must be involved so that they can understand the areas of weakness in the product and so that they can provide constructive input into the process as well (testers aren't just there to clean up your mess once it's coded, you know!). QA can provide critical insight into how a product performs under various unexpected situations, and thus they help to drive the enumeration of threats and gauge the effectiveness of the various mitigations employed, etc.&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;span&gt;I also hope to post something much more useful than this soon; it's just taking a while to write (whereas posting old documents is dead easy ;-) ). Anyway, here it is:&lt;/span&gt; &lt;/p&gt; &lt;p class="Heading2" style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;font size="5"&gt;&lt;font color="#ffa500"&gt;&lt;strong&gt;&lt;span class="Heading2"&gt;Suggested Threat Modelling Process&lt;/span&gt; &lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;This document outlines a suggested threat modelling process for product teams. It is designed to assist teams in building high-quality threat models without turning everyone into a "security expert" and without overly taxing the resources of existing "security experts" in the team. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;The process consists of six (possibly repeated) steps, outlined below in more detail:&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;1.&lt;span style="PADDING-LEFT: 9.75pt"&gt;&lt;/span&gt; Preparation&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;2.&lt;span style="PADDING-LEFT: 9.75pt"&gt;&lt;/span&gt; Brainstorming&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;3.&lt;span style="PADDING-LEFT: 9.75pt"&gt;&lt;/span&gt; Drafting&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;4.&lt;span style="PADDING-LEFT: 9.75pt"&gt;&lt;/span&gt; Review&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;5.&lt;span style="PADDING-LEFT: 9.75pt"&gt;&lt;/span&gt; Verification&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;6.&lt;span style="PADDING-LEFT: 9.75pt"&gt;&lt;/span&gt; Closure&lt;/span&gt; &lt;/p&gt; &lt;p&gt;&lt;span&gt;Note that any significant bug fixes or design changes that affect the component after the threat model has been completed will require this process to be revisited to some degree. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;References to the "SWAT" team below refer to the assigned "security experts" in the product team, as well as any external security consultants that have been recruited for the process.&lt;/span&gt; &lt;/p&gt; &lt;p class="Heading3" style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font color="#ffa500"&gt;&lt;span class="Heading3"&gt;Preparation&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;The PM and development owners identify Entry Points, Trust Levels, and Access Categories for the component, and use these to build one or more Data Flow Diagrams (DFDs). They also identify all known consumers of the component and which entry points / access categories they utilise.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;This task should take around one hour for a reasonably-sized component. Larger components may need to be broken up into smaller components to make them more manageable.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;SWAT team members may be called on to help at this stage, but are not required for this process. The PM and dev should be able to identify the entry points into their component without the assistance of a security expert.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;Actual threats are not enumerated at this stage; only the ways in which external entities can interact with the component.&lt;/span&gt; &lt;/p&gt; &lt;p class="Heading3" style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font color="#ffa500"&gt;&lt;span class="Heading3"&gt;Brainstorming&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;In this phase, the component team works from the context diagrams and other deliverables from the Preparation Phase to perform STRIDE-based modelling against the component. This will identify the threats and against the component, and highlight any possible weaknesses or vulnerabilities that need to be addressed.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;This task should take around one to two hours for a reasonably-sized component. Additional meetings should be scheduled as appropriate if all avenues are not fully explored.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;The results of the Preparation phase (entry points, DFDs, etc.) should be made available to the brainstorming attendees at least 2 days before the session so that the meeting doesn't just become a walk-through of the DFDs.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;The existing documents (DFDs, access categories, etc.) may be updated during the brainstorming session if new information comes to light, or if a particular feature was overlooked.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;Core component team members (dev, test, PM) must be present, and at least one SWAT team member must be present at the brainstorming session to assist with the process, answer questions, and so on. If the component is particularly high-risk or is heavily based on technology provided by another team, external experts should be invited as appropriate.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;All reasonable threats are enumerated at this stage, even those that already have mitigating strategies or that have been explicitly designed for. The point is not to just identify security bugs, but to document all known threats the component must protect against, and how it does so.&lt;/span&gt; &lt;/p&gt; &lt;p class="Heading3" style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font color="#ffa500"&gt;&lt;span class="Heading3"&gt;Drafting&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;After the Brainstorming session, the PM owner takes all the ideas generated from the meeting and organises them into a Threat Model document as appropriate for the team. This document will contain the (potentially updated) DFDs, the entry points, trust levels, and access categories, and all identified threats along with their mitigating factors (if any)&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;This task should take one to two hours, depending on the amount of data captured in the brainstorming session.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;SWAT team members may be called on to help at this stage (eg to provide guidance on technical terms), but the PM should be able to formalise the data without the help of an expert.&lt;/span&gt; &lt;/p&gt; &lt;p class="Heading3" style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font color="#ffa500"&gt;&lt;span class="Heading3"&gt;Review&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;After the threat model has been drafted, it is subjected to a normal review process like any other document. At this stage there may be minor (cosmetic) changes required to the document, or it may need to go back through a more thorough drafting phase. In the worst case, where a fundamental assumption is shown to be false or some other deep issue invalidates the work done so far, the process may need to go back to the preparation / brainstorming.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;This task should take one to two hours, similar to a normal spec review.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;The draft threat model must be made available at least 2 days before the meeting.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;The members of the Brainstorming session should be present, and the invitation should extend to any other interested parties (the whole PM / QA teams, management, etc.), and the SWAT team. &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;Although the document may undergo cosmetic changes at this stage, it is not acceptable to merely patch it up if a serious hole is found in the document. The process must be re-started, although perhaps in a reduced capacity.&lt;/span&gt; &lt;/p&gt; &lt;p class="Heading3" style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font color="#ffa500"&gt;&lt;span class="Heading3"&gt;Verification&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;Once the threat model is reviewed, the QA team updates existing test plans and augments / writes new test cases to verify assumptions made in the brainstorming phase and to perform directed testing on identified weaknesses. &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;This phase can actually start any time after the Brainstorming phase, but because of the possibility of changes during the review phase it has deferred to this position.&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;If necessary, external teams may be called in to help with penetration testing or other attack strategies if the details of a particular threat are not well understood, or if the mitigation strategies are believed to be lacking.&lt;/span&gt; &lt;/p&gt; &lt;p class="Heading3" style="MARGIN-TOP: 12pt; MARGIN-BOTTOM: 3pt"&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;font color="#ffa500"&gt;&lt;span class="Heading3"&gt;Closure&lt;/span&gt; &lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;Based on the Review, the PM owner makes final edits to the threat model and publishes it (including the context diagrams, etc.) to the appropriate team web site. The PM also logs bugs for investigating / fixing potential weaknesses identified both in the spec and the implementation (these will be followed-up on by dev and QA). &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;This task should take one to two hours&lt;/span&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP: 12pt; MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt"&gt;&lt;span&gt;&lt;span style="FONT-WEIGHT: normal; FONT-STYLE: normal; FONT-FAMILY: Symbol; TEXT-DECORATION: none"&gt;·&lt;span style="PADDING-LEFT: 13.5pt"&gt;&lt;/span&gt;&lt;/span&gt;Remember that threat modelling is never really done! New classes of attacks are always being found, and bugs in dependencies or changes that invalidate assumptions may manifest themselves as new vulnerabilities in the component. &lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=368881" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ptorr/archive/tags/Security/default.aspx">Security</category></item></channel></rss>