<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.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>Tales from the Crypto : Things I Learned At Microsoft</title><link>http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx</link><description>Tags: Things I Learned At Microsoft</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Microsoft TechFest</title><link>http://msmvps.com/blogs/alunj/archive/2009/03/03/1675447.aspx</link><pubDate>Tue, 03 Mar 2009 23:45:49 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1675447</guid><dc:creator>Alun Jones</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1675447</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1675447</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2009/03/03/1675447.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://research.microsoft.com/en-us/events/techfest2009/default.aspx"&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" src="http://research.microsoft.com/en-us/images/ads/hero/techfest_hero.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Last week, I went to Microsoft’s TechFest as part of their “Public Day”. This is the first time &lt;a title="MVPs" href="http://mvp.support.microsoft.com" target="_blank"&gt;MVPs&lt;/a&gt; as a group have been invited to this event, and although it’s clear we missed some of the demonstrations that are not public-ready, this is something that I hope can be extended to us in future, even if only to Washington-state MVPs&lt;/p&gt;  &lt;p&gt;For general news links on &lt;a href="http://research.microsoft.com/en-us/events/techfest2009/default.aspx"&gt;MS TechFest 2009&lt;/a&gt;, you can search news.google.com for “TechFest”. Here’s a couple of samples:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.king5.com/video/index.html?nvid=335707"&gt;&lt;u&gt;http://www.king5.com/video/index.html?nvid=335707&lt;/u&gt;&lt;/a&gt; – I didn’t see these guys there.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.guardian.co.uk/technology/blog/2009/feb/25/microsoft-software"&gt;&lt;u&gt;http://www.guardian.co.uk/technology/blog/2009/feb/25/microsoft-software&lt;/u&gt;&lt;/a&gt; - I bumped into this guy.&lt;/p&gt;  &lt;p&gt;I also saw Chris Pirillo there from &lt;a href="http://www.lockergnome.com/"&gt;LockerGnome&lt;/a&gt; and &lt;a href="http://chris.pirillo.com"&gt;Chris.Pirillo&lt;/a&gt;, but he hasn’t written anything yet. I only mention him because it’s about time that I thanked him for being one of the earliest online writers (they were called “e-Zines” back then, apparently) to mention &lt;a title="WFTPD by Texas Imperial Software" href="http://www.wftpd.com/" target="_blank"&gt;WFTPD&lt;/a&gt; in his column. Sadly, I don’t have a copy to remember what it is that he said :(&lt;/p&gt;  &lt;p&gt;Apologies to anyone who expected to reach me by email that day – the usual computers spread around the Microsoft Conference Centre for email and web browsing were missing, possibly because the Press were there, and they’ll steal anything that isn’t nailed down, before coming back with crowbars.&lt;/p&gt;  &lt;p&gt;So, here’s some description of the things I saw, ranging from the exciting and relevant to the “why is Microsoft spending money on that?” [Note that this is not meant to be disrespectful of ‘pure research’ – often, today’s “useless meanderings” become tomorrows product – WFTPD itself started from a momentary “how hard can it really be?” lapse in my own judgement, followed by a little research and a lot of effort.]&lt;/p&gt; &lt;dl&gt;&lt;dt&gt;Specification Inference for Security&lt;/dt&gt;&lt;dd&gt;To improve focus on potential security faults in static analysis tools, this is a toolset whose approach is to divide functions into Sources, Sinks and Sanitizers (although that alliteration is liable to lead to confusion) – Sources generate untrustworthy data from input, Sinks consume data that they trust will fit their expectations, and Sanitizers transform the data along the way, ideally making sure that it goes from untrustworthy to trusted. Thinking in terms of a SQL injection, the Source would be a web server receiving input from a user containing a SQL command, the Sink would be the SQL server, and the Sanitizer would be whatever code packages the input and determines whether to pass it to the SQL server, and what changes to make (such as requiring proper quoting, or using a stored proc or parameterized query). Once these categorizations have been made, the static analysis tool can check that Sanitizers actually do sanitize – rather than having to try and analyse every function for possible sanitization. &lt;a href="http://research.microsoft.com/merlin"&gt;&lt;u&gt;http://research.microsoft.com/merlin&lt;/u&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;Concurrency Analysis Platform and Tools&lt;/dt&gt;&lt;dd&gt;Enhances your test tool set by allowing tests to run with multiple permutations of concurrency. Race conditions are usually caught by users, or in production environments, because the environments cause different threads or processes to run at different speeds – with this toolkit, you get to try out multiple combinations of execution sequence, so that you are more likely to trigger the race condition. Of course, you still have to write tests that consider the prospect of doing more than one thing at a time, and because there are a large number of concurrency permutations, it’s not a turn-key solution, but it does allow you to debug concurrency issues more methodically, and catch those that appear more frequently. &lt;a href="http://research.microsoft.com/chess"&gt;&lt;u&gt;http://research.microsoft.com/chess&lt;/u&gt;&lt;/a&gt; - and this one’s available for download as an add-on to Visual Studio! &lt;/dd&gt;&lt;dt&gt;Lightweight Software Transactions for Games&lt;/dt&gt;&lt;dd&gt;Not just for games, the ORCS platform (Object-based Runtime for Concurrent Systems) makes coding multi-threaded applications easier and more problem-free. &lt;a href="http://research.microsoft.com/orcs"&gt;&lt;u&gt;http://research.microsoft.com/orcs&lt;/u&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;Closed-Loop Control Systems for the Data Center&lt;/dt&gt;&lt;dd&gt;Power consumption monitoring and control allows for servers to be brought online or offline as computing demands change, so that as usage ramps up, more servers are turned on, and as usage declines, servers are turned off. I don’t think this is entirely original. &lt;/dd&gt;&lt;dt&gt;Algorithms and Cryptography&lt;/dt&gt;&lt;dd&gt;Cryptographic solutions with leakage. Unfortunately, the lady who came up with this wasn’t on hand to discuss her work, and her husband standing in for her didn’t seem to understand much about it either. The poster claimed an algorithm whereby you could leak some of your key to an attacker without reducing the strength of the key. I’m not sure how this works, or where it differs from having redundant information in the keys, or something like M of N crypto, but maybe it’ll be something that will affect our field in the years to come. &lt;/dd&gt;&lt;dt&gt;Opinion Search&lt;/dt&gt;&lt;dd&gt;Full of marketing jargon and too dense for me to penetrate, this is something that we could potentially use in the business side of Expedia, making use of customer opinions to allow search results to match the user’s opinion against the opinions of others with whom they have consistently agreed in the past, and can be expected to do so in the future. &lt;/dd&gt;&lt;dt&gt;Low-Power Processors in the Data Center&lt;/dt&gt;&lt;dd&gt;Using Netbook processors for data processing in a parallel environment allows for significant power savings. &lt;/dd&gt;&lt;dt&gt;Audio Spatialisation and AEC for Teleconferencing&lt;/dt&gt;&lt;dd&gt;Relying on the rise of computer-phone integration, and the fact that most computers have stereo speakers, this is a system for teleconferencing where different parties are given a different spot in the stereo spatialisation. Makes it much easier to tell who’s talking. &lt;/dd&gt;&lt;dt&gt;SecondLight&lt;/dt&gt;&lt;dd&gt;Surface computing taken to another level, literally. The surface on which images are projected is usually a light diffuser, so that the image effectively “stays” on the surface. In this implementation, the surface is rapidly switched between diffuse and transparent, so that you can use a secondary diffuser surface on top, which shows a different image. You have to see a demonstration to understand it - &lt;a href="mms://wm.microsoft.com/ms/research/projects/secondlight-cambridge/secondlight.wmv"&gt;&lt;u&gt;mms://wm.microsoft.com/ms/research/projects/secondlight-cambridge/secondlight.wmv&lt;/u&gt;&lt;/a&gt; - it’s a little flickery, in real-life too, but the team assured me that it can be made less so. &lt;/dd&gt;&lt;dt&gt;Commute UX – Dialog System for In-Car Infotainment&lt;/dt&gt;&lt;dd&gt;Will this stop executives requesting shorter passwords for unlocking their phone while driving? Probably not. &lt;/dd&gt;&lt;dt&gt;Back-of-Device Touch Input&lt;/dt&gt;&lt;dd&gt;Anyone using an iPhone or similar touch-based device will be familiar with the issue that your fingers are covering the image you’re trying to manipulate. By putting a sensor panel on the back of the device, you can reduce the size of the display without making it impossible to read while you select. &lt;/dd&gt;&lt;dt&gt;Augmented Reality&lt;/dt&gt;&lt;dd&gt;Combining GPS location with stock footage of the place you’re in, this is all about placing extra information into a view (such as a cell-phone with a video camera, or maybe eventually a heads-up display in glasses / goggles) of the world around you, by recognising where you are. Can be used for games, directions, advertising, city guides, or post-it notes without the paper. &lt;/dd&gt;&lt;dt&gt;Recognizing characters written in the Air&lt;/dt&gt;&lt;dd&gt;Entertaining just to watch people dragging an apple around to make letters on a screen in front of them. Probably more useful in the mode where the lid of an OHP pen is the “bright spot of strong solid colour” being tracked in mid-air. &lt;/dd&gt;&lt;dt&gt;Colour-structured Image Search&lt;/dt&gt;&lt;dd&gt;Draw a rough colour picture of the image you want to see, and get a page of search results from around the web. The demonstrations consisted of drawing pictures of flowers, or flags, or a sunset. I foresee widespread abuse once deployed, although it will mean that people who usually draw on bathroom walls will be moving their talents online. &lt;/dd&gt;&lt;/dl&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1675447" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category></item><item><title>MVP Summit 2009 is here!</title><link>http://msmvps.com/blogs/alunj/archive/2009/03/02/1675278.aspx</link><pubDate>Mon, 02 Mar 2009 18:44:06 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1675278</guid><dc:creator>Alun Jones</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1675278</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1675278</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2009/03/02/1675278.aspx#comments</comments><description>&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/alunj/IMG_5F00_2512-_2800_480x640_2900_-_2800_480x640_29005F00_2.jpg"&gt;&lt;img title="IMG_2512 (480x640) (480x640)" style="border-right:0px;border-top:0px;display:inline;margin-left:0px;border-left:0px;margin-right:0px;border-bottom:0px;" height="480" alt="IMG_2512 (480x640) (480x640)" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/alunj/IMG_5F00_2512-_2800_480x640_2900_-_2800_480x640_29005F00_thumb.jpg" width="360" align="left" border="0" /&gt;&lt;/a&gt;   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I snapped this picture last week at Microsoft&amp;#39; Research’s Tech-Fest event.&lt;/p&gt;  &lt;p&gt;Microsoft always makes the visiting &lt;a title="MVPs" href="http://mvp.support.microsoft.com" target="_blank"&gt;MVPs&lt;/a&gt; feel welcome at Global Summit time, when all MVP awardees are invited to visit Microsoft’s campus, and engage in face-to-face conversations with various Microsoft Product Groups about the feedback they’re seeing from the users they talk to in their various forums, whether that’s Usenet newsgroups, web forums, user groups, or book and magazine readers.&lt;/p&gt;  &lt;p&gt;This year, in large part thanks to the efforts of one of the other Security MVPs, Dana Epps, we have a fantastic schedule of in-depth sessions on identity frameworks, threat modeling, Microsoft’s internal security, and a number of other topics that I should perhaps keep quiet about.&lt;/p&gt;  &lt;p&gt;The other benefit to me, as an MVP, from these sessions is that I get to network with other MVPs – all of whom are intelligent, driven individuals with expertise in a wide variety of fields, not just my own area of Enterprise Security.&lt;/p&gt;  &lt;p&gt;Already I’ve spoken to a number of people in conversations that I intend to continue long after the Summit is over. I’ve made some new friends, met plenty of old friends, and expanded and strengthened existing social connections.&lt;/p&gt;  &lt;p&gt;It’s a little sad that the worsening economic climate has caused a number of MVPs from outside the US to not attend this year’s Summit, and even some from inside the country. But it does appear that the MVP programme is still strong, as around 1500 MVPs from around the world are in attendance.&lt;/p&gt;  &lt;p&gt;For those wondering about the swag bag, we got a cloth bag, stickers, a pen, and a water bottle. The shirts will be arriving on Wednesday (thank you, US Customs!). The benefit is more in the programme of technical sessions than the bag, unlike some technical conferences, where your $2500 entrance fee gets you a rather spectacular bag of ‘freebies’ and a number of sessions scheduled such that all the ones you want to see are in the same time slot.&lt;/p&gt;  &lt;p&gt;I have to say, I love the stickers. Being a part of the MVP programme is a really nice thing that Microsoft does to say ‘thank you’ to people who are assisting Microsoft’s customers in newsgroups, user groups, etc, and who would continue to do so anyway, even if Microsoft ended the MVP programme. As such, I think it’s an excellent recognition, and I’m proud of the fact that I was awarded – so I like to show it off, mainly by plastering stickers on my various technology items like laptops and PDAs.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1675278" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category></item><item><title>UAC - The Emperor's New Clothes</title><link>http://msmvps.com/blogs/alunj/archive/2008/04/24/1603407.aspx</link><pubDate>Thu, 24 Apr 2008 23:47:38 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1603407</guid><dc:creator>Alun Jones</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1603407</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1603407</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2008/04/24/1603407.aspx#comments</comments><description>&lt;p&gt;I heard a complaint the other day about UAC - User Account Control - that was new to me.&lt;/p&gt; &lt;p&gt;Let&amp;#39;s face it, as a Security MVP, I hear a lot of complaints about UAC - not least from my wife, who isn&amp;#39;t happy with the idea that she can be logged on as an administrator, but she isn&amp;#39;t really an administrator until she specifically asks to be an administrator, and then specifically approves her request to become an administrator.&lt;/p&gt; &lt;p&gt;My wife is the kind of user that UAC was not written for. She&amp;#39;s a capable administrator (our home domain has redundant DCs, DHCP servers with non-overlapping scopes, and I could go on and on), and she doesn&amp;#39;t make the sort of mistakes that UAC is supposed to protect users from.&lt;/p&gt; &lt;p&gt;My wife also does not appreciate the sense that Microsoft is using the users as a fulcrum for providing leverage to change developers to writing code for non-admin users. She doesn&amp;#39;t believe that the vendors will change as a result of this, and the only effect will be that users get annoyed.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;But not me.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I like UAC - I think it&amp;#39;s great that developers are finally being forced to think about how their software should work in the world of least privilege. &lt;/p&gt; &lt;p&gt;So, as you can imagine, I thought I&amp;#39;d heard just about every last complaint there is about UAC. But then a new one arrived in my inbox from a friend I&amp;#39;ll call Chris.&lt;/p&gt; &lt;h3&gt;&amp;quot;Why should I pretend to be different people to use my own PC?&amp;quot;&lt;/h3&gt; &lt;p&gt;I must admit, the question stunned me.&lt;/p&gt; &lt;p&gt;Obviously, what Chris is talking about is the idea that you are strongly &amp;quot;encouraged&amp;quot; (or &amp;quot;strong-armed&amp;quot;, if you prefer) by UAC to work in (at least) two different security contexts - the first, your regular user context, and the second, your administrator context.&lt;/p&gt; &lt;p&gt;Chris has a point - you&amp;#39;re one person, you shouldn&amp;#39;t have to pretend to be two. And it&amp;#39;s your computer, it should do what you tell it to. Those two are axiomatic, and I&amp;#39;m not about to argue with them - but it sounds like I should do, if I&amp;#39;m going to answer his question while still loving UAC.&lt;/p&gt; &lt;p&gt;No, I&amp;#39;m going to argue with his basic premise that user accounts correspond to individual people. They correspond more accurately - particularly in UAC - to clothing.&lt;/p&gt; &lt;p&gt;Windows before NT, or more accurately, not based on the NT line, had no separation between user contexts / accounts. Even the logon was a joke - prompted for user name and password, but if you hit Escape instead, you&amp;#39;d be logged on anyway. Windows 9x and ME, then, were the equivalent of being naked.&lt;/p&gt; &lt;p&gt;In Windows NT, and the versions derived from it, user contexts are separated from one another by a software wall, a &amp;quot;Security Boundary&amp;quot;. There were a couple of different levels of user access, the most common distinctions being between a Standard (or &amp;quot;Restricted&amp;quot;) User, a Power User, and an Administrator.&lt;/p&gt; &lt;p&gt;Most people want to be the Administrator. That&amp;#39;s the account with all the power, after all. And if they don&amp;#39;t want to be the Administrator, they&amp;#39;d like to be at least &lt;u&gt;an&lt;/u&gt; administrator. There&amp;#39;s not really much difference between the two, but there&amp;#39;s a lot of difference between them and a Standard User.&lt;/p&gt; &lt;p&gt;Standard Users can&amp;#39;t set the clock back, they can&amp;#39;t clear logs out, they can&amp;#39;t do any number of things that might erase their tracks. Standard Users can&amp;#39;t install software for everyone on the system, they can&amp;#39;t update the operating system or its global settings, and they can&amp;#39;t run the Thomas the Tank Engine Print Studio. [One of those is a problem that needs fixing.]&lt;/p&gt; &lt;p&gt;So, really, a Standard User is much like the driver of a car, and an administrator is rather like the mechanic. I&amp;#39;ve often appealed to a different meme, and suggested that the administrator privilege should be called &amp;quot;janitor&amp;quot;, so as to make it less appealing - it really is all about being given the keys to the boiler room and the trash compactor.&lt;/p&gt; &lt;h3&gt;It&amp;#39;s about wearing dungarees rather than your business suit.&lt;/h3&gt; &lt;p&gt;You wear dungarees when working on the engine of your car, partly because you don&amp;#39;t want oil drops on your white shirt, but also partly so your tie doesn&amp;#39;t get wrapped around the spinning transmission and throttle you. You don&amp;#39;t wear the dungarees to work partly because you&amp;#39;d lose respect for the way you look, but also because you don&amp;#39;t want to spread that oil and grease around the office.&lt;/p&gt; &lt;p&gt;It&amp;#39;s not about pretending to be different people, it&amp;#39;s about wearing clothes suited to the task. An administrator account gives you carte blanche to mess with the system, and should only be used when you&amp;#39;re messing with the system (and under the assumption that you know what you&amp;#39;re doing!); a Standard User account prevents you from doing a lot of things, but the things you&amp;#39;re prevented from doing are basically those things that most users don&amp;#39;t actually have any need to do.&lt;/p&gt; &lt;p&gt;You&amp;#39;re not pretending to be a different person, you&amp;#39;re pretending to be a system administrator, rather than a user. Just like when I pretend to be a mechanic or a gardener, I put on my scungy jeans and stained and torn shirts, and when I pretend to be an employee, I dress a little smarter than that.  &lt;p&gt;When you&amp;#39;re acting as a user, you should have user privileges, and when you&amp;#39;re acting as an administrator, you should have administrative privileges. We&amp;#39;ve gotten so used to wearing our dungarees to the board-room that we think they&amp;#39;re a business suit.  &lt;p&gt;So while UAC prompts to provide a user account aren&amp;#39;t right for my wife (she&amp;#39;s in &amp;#39;dungarees-mode&amp;#39; when it comes to computers), for most users, they&amp;#39;re a way to remind you that you&amp;#39;re about to enter the janitor&amp;#39;s secret domain.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1603407" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/What+my+wife+knows/default.aspx">What my wife knows</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category></item><item><title>Silently fixing security bugs - how dare they!</title><link>http://msmvps.com/blogs/alunj/archive/2008/04/22/1600135.aspx</link><pubDate>Tue, 22 Apr 2008 22:06:30 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1600135</guid><dc:creator>Alun Jones</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1600135</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1600135</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2008/04/22/1600135.aspx#comments</comments><description>&lt;p&gt;Over in &amp;quot;&lt;a href="http://hellnbak.wordpress.com/2008/04/21/more-on-sdl-counting-vulnerabilities/"&gt;Random Things from Dark Places&lt;/a&gt;&amp;quot;, Hellnbak posts about reducing vulnerability counts by applying the SDL (Security Development Lifecycle), and makes the very reasonable point that vulnerabilities found prior to release by a scan that is part of the SDL process cannot be counted as failures of the SDL process. What&amp;#39;s more, those vulnerabilities can be silently fixed by the vendor before shipping / deploying the product being reviewed. [Obviously, not fixing them would be a really bad idea]&lt;/p&gt; &lt;p&gt;What intrigued me, though, was this line:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;But, as Ryan [Naraine] said — issues found in public code that are fixed silently are a real issue.&amp;nbsp; While I have picked on Microsoft specifically for this practice the sad reality (that I quickly learned after publicly picking on MS) is that pretty much all vendors do this.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So, let&amp;#39;s see now... this is talking about a patch, hotfix, or service pack, that removes a security vulnerability from a product, but where the vulnerability (and its fix) does not get announced publicly.&lt;/p&gt; &lt;p&gt;There are two reasons not to announce a security vulnerability, in my view:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;You don&amp;#39;t want to.&lt;/li&gt; &lt;li&gt;You can&amp;#39;t.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Let&amp;#39;s subdivide reason 1, &amp;quot;You don&amp;#39;t want to&amp;quot;:&lt;/p&gt; &lt;ol&gt; &lt;ol&gt; &lt;li&gt;You feel it would adversely affect public opinion, stock price, user retention...&lt;br /&gt;Well, that&amp;#39;s kind of bogus, isn&amp;#39;t it? Given some of the vulnerability announcements that have appeared, what on earth could be worse than remote execution, elevation of privilege, and complete control over your system? The only way to make this accusation is to assert that the vendor randomly picks vulnerabilities to announce or not announce, to somehow reduce the overall numbers - and then manages to do so in such a way that noone else notices the vulnerability that was fixed.&lt;br /&gt;That&amp;#39;s not security, and any vendor who did that would find its security staff soon revolting against that practice. There isn&amp;#39;t enough of a glut of security workers to be engaging in a practice that assumes you can hire more to replace the disgusted ones that quit.&lt;/li&gt; &lt;li&gt;You&amp;#39;re tired of going through the process of documenting the bug, its workarounds and/or mitigations, and would rather be doing something else, like, oh, I don&amp;#39;t know, fixing more vulnerabilities.&lt;br /&gt;That&amp;#39;s not good security - create a more streamlined and automated process for creating the announcements, and do both - find and fix more vulnerabilities &lt;u&gt;and&lt;/u&gt; make announcements for the ones you find. If you&amp;#39;re too busy to announce all the vulnerabilities in your product, you&amp;#39;re too busy to fix them all.&lt;/li&gt; &lt;li&gt;You found the vulnerability internally, and would like to prevent it from being exploited, by releasing the patch along with an announced fix and hoping people install it.&lt;br /&gt;That&amp;#39;s not terribly reliable as a patching policy. It makes some small sense for related fixes, but then why wouldn&amp;#39;t you announce that as a related fix in the related announcement? Perhaps it makes sense for architectural fixes, where the only good fix is to go to the next level of service pack, but then wouldn&amp;#39;t you want to publicise workarounds for those who can&amp;#39;t apply the next service pack for one reason or another?&lt;br /&gt;But the biggest reason not to do this is that when you release a patch, people will reverse-engineer it, to figure out how to exploit the unpatched version - and they&amp;#39;ll find the change you didn&amp;#39;t mention as well as the one you did, and will exploit both of them. But your users will only be aware of one problem that needs patching, and may have decided that they can mitigate that without patching.&lt;br /&gt;So, pretty much bad security on that approach, too.&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;So, &amp;quot;You don&amp;#39;t want to&amp;quot; comes out as bad security, and it&amp;#39;s the sort of bad security that you would have to fix to employ - and continue to employ - a halfway decent security team.&lt;/p&gt; &lt;p&gt;What about &amp;quot;You can&amp;#39;t&amp;quot; - how could that come about?&lt;/p&gt; &lt;ol&gt; &lt;ol&gt; &lt;li&gt;You have a legal judgement or contract requirement forbidding you from disclosing vulnerabilities. Hey, Microsoft has some of the best and most expensive lawyers on the planet, but even they get stuck with tough legal decisions that they have to abide with, and can&amp;#39;t do anything about. If a security vulnerability was considered to be a &amp;quot;threat to national security&amp;quot;, the current administration (and possibly many others) would be only too quick to deem it so secret that no-one could reveal its presence. And once you accept that possibility, it isn&amp;#39;t hard to think of too many circumstances where a company might be forced to keep a vulnerability quiet.&lt;/li&gt; &lt;li&gt;You know enough to fix the code, but not enough to classify the vulnerability or explain its workarounds or mitigations.&lt;br /&gt;Yeah, that&amp;#39;s pretty much the truth for all the announced vulnerabilities, too - how many times have you seen a vulnerability announcement that says &amp;quot;this cannot be exploited remotely&amp;quot;, followed by one a few days later with updated information that reveals that, oh yes it can. This doesn&amp;#39;t appear to be a good reason not to announce a vulnerability.&lt;/li&gt; &lt;li&gt;You don&amp;#39;t know the vulnerability is there, or you don&amp;#39;t realise that you fixed a vulnerability.&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;Okay, that last one&amp;#39;s the topper, isn&amp;#39;t it? How can you announce a fix for a vulnerability that you don&amp;#39;t know about?&lt;/p&gt; &lt;p&gt;Clearly, you can&amp;#39;t.&lt;/p&gt; &lt;p&gt;Just as clearly, perhaps you&amp;#39;re thinking, you can&amp;#39;t fix a vulnerability that you don&amp;#39;t know about, right?&lt;/p&gt; &lt;p&gt;Wrong. You can very easily fix a vulnerability about which you know nothing. Here&amp;#39;s a couple of hypothetical examples:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;After we moved into our new house, we changed all the locks on the doors. Why? Because the new locks were prettier. In doing so, we fixed a vulnerability (the former owner could have kept the keys, and exploited us through the old locks) - but we didn&amp;#39;t intend to fix the vulnerability, we just wanted prettier locks.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;Years ago, I needed a piece of functionality that wasn&amp;#39;t provided by the Win16 API, so I wrote my own routine to do file path parsing. A couple of years back, I dropped support for Windows 3.1, and in a recent code review, I spotted that the file path parsing routine was superfluous. So I removed it. In removing it, I didn&amp;#39;t spend a lot of time looking at the code - there was a vulnerability in there, but who does a code review of a function they&amp;#39;re removing? So now, I&amp;#39;ve fixed a vulnerability that I didn&amp;#39;t know existed.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Too many times, we assert evil intent for those actions that we disagree with. Ignorance is a far better explanation, along with incompetence, expediency, and just plain lack of choice. Note that ignorance is no bad thing - as in my hypothetical case, a genuine attempt to improve quality leads to a security improvement of which the developer was wholly ignorant.&lt;/p&gt; &lt;p&gt;Whether vendors don&amp;#39;t want to disclose all of their vulnerabilities when patching, or simply can&amp;#39;t, because they didn&amp;#39;t realise the scope of a fixed vulnerability, it&amp;#39;s important to stay current with patches wherever that would not interfere with your production applications. Because one day there will be a flaw patched, which your company will be attacked through. If you didn&amp;#39;t apply that patch, you will be owned.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1600135" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category></item><item><title>Google on Microsoft / Yahoo! Deal: "Wah!"</title><link>http://msmvps.com/blogs/alunj/archive/2008/02/04/1495751.aspx</link><pubDate>Mon, 04 Feb 2008 20:21:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1495751</guid><dc:creator>Alun Jones</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1495751</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1495751</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2008/02/04/1495751.aspx#comments</comments><description>&lt;p&gt;In case you&amp;#39;ve been under a rock, Microsoft appears to be trying to take advantage of Yahoo! Inc&amp;#39;s recent poor performance to &lt;a title="Microsoft wants to purchase Yahoo!" href="http://news.bbc.co.uk/2/hi/business/7222114.stm"&gt;make an unsolicited offer&lt;/a&gt; (as far as I can tell, it&amp;#39;s not a hostile bid until and unless Yahoo! officers declare that they will be fighting against it by offering a deal they think their stockholders will prefer) to buy the company.&lt;/p&gt;
&lt;p&gt;Clearly, given Microsoft&amp;#39;s intent to compete with Google, this is a great move for Microsoft - the Microsoft search engines have always lacked popularity compared to Google, and Yahoo!&amp;#39;s engines are still hugely popular. With Yahoo!&amp;#39;s large user base for other web pages, this acquisition amounts to a huge number of eyeballs to which Microsoft can expose their Internet product strategies.&lt;/p&gt;
&lt;p&gt;Google, obviously, &lt;a title="Google troubled by Microsoft move" href="http://news.bbc.co.uk/2/hi/business/7225599.stm"&gt;is a little perturbed&lt;/a&gt; by this.&lt;/p&gt;
&lt;p&gt;How do they choose to express their concern?&lt;/p&gt;
&lt;p&gt;&lt;a class="" title="http://googleblog.blogspot.com/2008/02/yahoo-and-future-of-internet.html" href="http://googleblog.blogspot.com/2008/02/yahoo-and-future-of-internet.html"&gt;&lt;img alt="The Official Google Blog - Insights from Googlers into our products, technology and the Google culture" src="http://photos1.blogger.com/x/blogger2/7380/1325/1600/z/222811/gse_multipart53168.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;By pointing to the openness and innovation which has underscored the Internet&amp;#39;s development throughout the years, and which has been the reason that the Internet has remained popular and usable.&lt;/p&gt;
&lt;p&gt;Now, I will definitely agree that Microsoft is known for locking up many of their most interesting innovations inside of patents.&lt;/p&gt;
&lt;p&gt;However, the company is also very well known for contributing technical standards to the Internet body of knowledge as expressed in the Internet RFCs.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s see how innovative and open Google has been, by searching for &amp;quot;Google&amp;quot; in the Internet RFCs - let&amp;#39;s see how many employees have written these open and innovative documents.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RFC 4473: &amp;quot;...search engines such as Google.&amp;quot; is the only occurrence - so it&amp;#39;s not written by a Google employee.&lt;/li&gt;
&lt;li&gt;RFC 4646: Tags for Identifying Languages - authored&amp;nbsp; by Yahoo! and Google employees.&lt;/li&gt;
&lt;li&gt;RFC 4647: Matching of Language Tags - essentially part II of RFC 4646, by the same authors.&lt;/li&gt;
&lt;li&gt;RFC 4657: Contributors include a Google employee&lt;/li&gt;
&lt;li&gt;RFC 4772: Notes that Google was searched.&lt;/li&gt;
&lt;li&gt;RFC 4693: An administrative note about the IETF, written by a Google employee.&lt;/li&gt;
&lt;li&gt;RFC 4838: Delay-Tolerant Networking Architecture - technically, Vint Cerf was a Google employee at the time, but appears to have done this as work for JPL.&lt;/li&gt;
&lt;li&gt;RFC 4954: An authentication extension for SMTP, co-written by a Google employee.&lt;/li&gt;
&lt;li&gt;RFC 4959: Authentication extension for IMAP, co-written by a Google employee.&lt;/li&gt;
&lt;li&gt;RFC 4981: Refers in passing to Google.&lt;/li&gt;
&lt;li&gt;RFC 4990: Use of addresses in GMPLS Networks, co-written by a Google employee.&lt;/li&gt;
&lt;li&gt;RFC 5023: The Atom Publishing Protocol, co-written by a Google employee.&lt;/li&gt;
&lt;li&gt;RFC 5034: POP3 Authentication extension, co-written by a Google employee.&lt;/li&gt;
&lt;li&gt;RFC 5050: Vint Cerf of Google is listed as a contributor.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;So, the number of RFCs listing Google employees as authors or co-authors is nine. If you are ruthless in your search for originality, and cut out RFCs that appear to be copies or extensions of other Google employee RFCs, as well as those that were written for other employers than Google, you get five. And one of those is a note about the way in which the IETF operates.&lt;/p&gt;
&lt;p&gt;What about Microsoft - when have Microsoft employees ever contributed time to the development of Internet RFCs?&lt;/p&gt;
&lt;p&gt;Compared to Google&amp;#39;s fourteen matches in the RFCs, &amp;quot;Microsoft&amp;quot; is found hundreds of times. So I tried to limit my search to RFCs that were likely written by Microsoft employees - a good search term for this is to find those RFCs in which either &amp;quot;Microsoft&amp;quot; or &amp;quot;Microsoft Corporation&amp;quot; is at the end of a line. I further limited the search to documents where this match was found in the first 25 lines.&lt;/p&gt;
&lt;p&gt;175 RFCs.Okay, so maybe some of those were duplicates, or unimportant ones, and Microsoft have certainly been doing this longer than Google.&lt;/p&gt;
&lt;p&gt;Google&amp;#39;s first employee-written RFC came in September 2006, so in eighteen months, they&amp;#39;ve written at most nine, at a rate of one every two months; Microsoft&amp;#39;s first is dated December 1995 - that&amp;#39;s 146 months ago, so that Microsoft employees are producing RFCs at a rate of slightly more than one every month - more than twice as fast as Google.&lt;/p&gt;
&lt;p&gt;I think that if Google wants to cry &amp;quot;shame&amp;quot; that Microsoft is not open or innovative, and that this will cause the Internet to shrivel, they should perhaps start with a little introspection.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Buying an Internet founder does not make you into a founder of the Internet.&lt;/li&gt;
&lt;li&gt;Buying an RFC author does not make you open and innovative.&lt;/li&gt;
&lt;li&gt;Complaining that a competitor&amp;#39;s proposed acquisition will stifle openness and innovation only makes sense if you are, by comparison, a champion of those two qualities - by comparison through the reading of RFCs, Google appears somewhat secretive and dull.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;P.S. Please don&amp;#39;t comment in this entry about &amp;quot;embrace and extend&amp;quot; - let&amp;#39;s face it, openness and innovation as they apply to the Internet are all about &amp;quot;embrace and extend&amp;quot; - Internet standards are published so that they can be adopted and advanced. This discussion is not about whether Microsoft copies from other companies - after all, if this is all about openness and innovation, copying is a good thing.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1495751" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category></item><item><title>Waiting for Vista SP1?</title><link>http://msmvps.com/blogs/alunj/archive/2008/01/17/1468300.aspx</link><pubDate>Fri, 18 Jan 2008 05:24:31 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1468300</guid><dc:creator>Alun Jones</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1468300</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1468300</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2008/01/17/1468300.aspx#comments</comments><description>&lt;p&gt;In a previous article, I wrote about how to sound stupid by saying &amp;quot;&lt;a title="Let&amp;#39;s just wait for Service Pack 1" href="http://msmvps.com/blogs/alunj/archive/2007/08/30/1147398.aspx"&gt;let&amp;#39;s wait for Service Pack 1 before we deploy Windows Vista&lt;/a&gt;&amp;quot;.&lt;/p&gt; &lt;p&gt;Now here are a few ways to sound clever, by pointing to specific &lt;a title="Overview of Windows Vista Service Pack 1" href="http://technet2.microsoft.com/WindowsVista/en/library/417467e7-7845-46d4-85f1-dd471fbc0de91033.mspx"&gt;issues that will be fixed by Windows Vista SP1&lt;/a&gt;.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;GPMC.MSC (the Group Policy Management Console) gets removed, and the Group Policy Editor will default to editing the local group policy only. Okay, that&amp;#39;s not really an advantage - but you will be able to download a newer group policy editor later.&lt;/li&gt; &lt;li&gt;Allows Remote Desktop Protocol (RDP) files to be signed. Complains when they aren&amp;#39;t (though this does cause a problem for Remote Web Workplace users in SBS land, because there&amp;#39;s no way to actually sign the RDP files!)&lt;/li&gt; &lt;li&gt;Improved cryptographic random number generator, leveraging the TPM if you have one on your computer. (Not sure there was that much wrong with the old one... but this one&amp;#39;s better, and more ... cryptographicky)&lt;/li&gt; &lt;li&gt;BDE + TPM + USB + PIN - need I say more? Oh, okay then - for the truly security paranoid, you can use Bitlocker Drive Encryption with the Trusted Platform Module, and have it require a USB key &lt;u&gt;and&lt;/u&gt; a PIN before the system will start.&lt;/li&gt; &lt;li&gt;Also with BitLocker, there is support for encryption of drives other than the main boot volume (which is the volume that has the system software on it, not the system drive, which is the one you boot from). Still can&amp;#39;t encrypt the system drive - because that would be just plain stupid.&lt;/li&gt; &lt;li&gt;Performance improvements - really, what&amp;#39;s not to like with an update that makes your computer go faster?&lt;/li&gt; &lt;li&gt;exFAT file system for flash memory storage - you probably haven&amp;#39;t exactly been drooling about this.&lt;/li&gt; &lt;li&gt;SSTP - allows VPN over HTTPS to Windows Server 2008 systems. Yeah, because if you&amp;#39;re holding off installing Vista until SP1 ships, you&amp;#39;ve got loads of those ready to use, right?&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I don&amp;#39;t know - were any of those features worth waiting for? I know there&amp;#39;s performance and reliability improvements, but those are somewhat nebulous and indistinct.&lt;/p&gt; &lt;p&gt;My advice is still to test Vista as it shipped, test Vista with the Service Pack 1 Release Candidate - report bugs to Microsoft quickly, before they lock it down - and then when SP1 releases, and then test with Vista SP1 RTM when it comes out... and stop letting vendors get away with saying that &amp;quot;all you need to do to run our software on Vista is to disable UAC, or make all users administrator&amp;quot; - that&amp;#39;s just plain bad.&lt;/p&gt; &lt;p&gt;What do I wish was in SP1?&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Some provision for solving the EFS incompatibility between XP and Vista (maybe XP SP3 will help, I don&amp;#39;t know)&lt;/li&gt; &lt;li&gt;The ability for a standard user to back up his own files, including EFS encrypted files, so that a user can export encrypted data to removable physical media (like a CD-R). Too much data still travels unencrypted, and it might help to have the ability to put encrypted files on CD-Rs using only what comes with the OS.&lt;/li&gt; &lt;li&gt;A server administration toolkit that allows me to administer Windows versions 2000, 2003 and 2008 from Vista.&lt;/li&gt; &lt;li&gt;An ability to switch sound output devices on already-running applications. When my wife comes into the office, I want to stop using the built-in speakers and start using the Bluetooth headset, so that she can&amp;#39;t hear me playing Halo.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So, tell me, what are you waiting for?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1468300" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Windows+Vista/default.aspx">Windows Vista</category></item><item><title>Why you don't run as root</title><link>http://msmvps.com/blogs/alunj/archive/2008/01/11/1457310.aspx</link><pubDate>Sat, 12 Jan 2008 05:03:12 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1457310</guid><dc:creator>Alun Jones</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1457310</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1457310</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2008/01/11/1457310.aspx#comments</comments><description>&lt;p&gt;[... or administrator, or whatever]&lt;/p&gt; &lt;p&gt;I like Roger Grimes, he&amp;#39;s a nice guy, and he generally makes me think about what he has to say. That&amp;#39;s a good thing, because otherwise he&amp;#39;d either be part of the same choir as me, or he&amp;#39;d be the sort of guy whose ideas I dismiss with a wave of the paw and a barely audible &amp;quot;Pah.&amp;quot;&lt;/p&gt; &lt;p&gt;Today, though, I think he&amp;#39;s missing something fundamental - and perhaps you are too.&lt;/p&gt; &lt;p&gt;He writes in the &lt;a title="InfoWorld Security Adviser - Why UAC will not work." href="http://www.infoworld.com/article/08/01/11/02OPsecadvise-user-account-control_1.html"&gt;InfoWorld Security Adviser column that &amp;quot;UAC will not work&amp;quot;&lt;/a&gt;, on the simple basis that malware can still do all the things it wants to do without having to execute under a privileged account.&lt;/p&gt; &lt;p&gt;That&amp;#39;s true, and it always will be - the day that a computer can see my attempt to &amp;quot;delete the Johnson account, and forward that instruction to the following addresses&amp;quot;, and determine whether it&amp;#39;s malicious or appropriate, is the day when the computer can do the whole job for me, by simply choosing all possible actions and seeing which are malicious and which are appropriate.&lt;/p&gt; &lt;p&gt;However, what I can rely on, if the malware has been held out of privileged accounts, is the integrity of the system, and (unless they were prone to activating the same malware) the other users on that system. [By system, I may mean one machine or several networked together to perform a function.]&lt;/p&gt; &lt;p&gt;So while it&amp;#39;s true that the old cross-platform virus &amp;quot;forward this message to everyone in your address book, then delete all your data&amp;quot; is still going to function if the user stays out of administrator roles, at least the operation of the system can be restored, as well as whatever data has been backed up.&lt;/p&gt; &lt;p&gt;You don&amp;#39;t run as a restricted user to prevent viruses from happening - you run as a restricted user to prevent viruses from happening to the people and systems with whom you work. You run as a restricted user, so that when some system falls over, you can say &amp;quot;it couldn&amp;#39;t possibly have been me&amp;quot;. You run as a restricted user because if there is a bug in the program you run, its effects will be limited to only that portion of the OS and its data to which you are restricted.&lt;/p&gt; &lt;p&gt;Sure, least privilege is somewhat of an artificial construct - but the alternative is that users get more privileges than they need. That quickly boils down to &amp;quot;everyone can do anything&amp;quot;.&lt;/p&gt; &lt;p&gt;I&amp;#39;ve been on that kind of a network before, and when we found one guy&amp;#39;s stash of truly offensive porn (this wasn&amp;#39;t the occasional Rubens painting) on the server, we had no way of finding out who it was, let alone punishing them by firing them. The company I worked for was fortunate that whoever found it didn&amp;#39;t sue for fostering the creation of a hostile workplace.&lt;/p&gt; &lt;p&gt;So, no, UAC won&amp;#39;t stop malware - but then that&amp;#39;s not its purpose. It&amp;#39;s purely a beneficial, incidental, and temporary side-effect that it will stop much of today&amp;#39;s malware.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1457310" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/What+my+wife+knows/default.aspx">What my wife knows</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/UAC/default.aspx">UAC</category></item><item><title>How many people do you represent?</title><link>http://msmvps.com/blogs/alunj/archive/2007/11/22/1348634.aspx</link><pubDate>Fri, 23 Nov 2007 06:44:31 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1348634</guid><dc:creator>Alun Jones</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1348634</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1348634</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/11/22/1348634.aspx#comments</comments><description>&lt;p&gt;In my &lt;a title="100% utilisation is not (generally) a sign of efficiency" href="http://msmvps.com/blogs/alunj/archive/2007/11/20/1342567.aspx"&gt;earlier discussion on why 100% utilisation is not maximum efficiency&lt;/a&gt;, I alluded to the fact that a rejected customer, or a customer with a bad experience, will tell other potential customers that you never get to see.&lt;/p&gt; &lt;p&gt;This reminded me that there are a myriad of connections that we have to other people around us, and that this should always be recognised when considering how best to serve a customer.&lt;/p&gt; &lt;p&gt;As a business example, my FTP server, &lt;a title="WFTPD by Texas Imperial Software" href="http://www.wftpd.com/"&gt;WFTPD&lt;/a&gt;, has been sold to over 10,000 customers, some of whom have purchased hundreds of licences. Most of those large sales were preceded by a sale of a single licence that I believe led directly to the larger sale. So to me, every single sale represents a potential of hundreds of licences.&lt;/p&gt; &lt;p&gt;Of course, to Microsoft, I represent in some small way those 10,000 customers, all of whom use not only my software, but the operating system and network components on which my software runs.&lt;/p&gt; &lt;p&gt;In the sphere of community, this is why &lt;a title="MVPs" href="http://mvp.support.microsoft.com"&gt;MVPs&lt;/a&gt; are considered so valuable by Microsoft. Whereas most customers represent themselves, or possibly a department or a company, &lt;a title="MVPs" href="http://mvp.support.microsoft.com"&gt;MVPs&lt;/a&gt; represent those members of the community that they assist - and that generally means dozens, hundreds, possibly thousands of individuals or companies.&lt;/p&gt; &lt;p&gt;I like to think they listen to us - they certainly spend enough time asking us questions, and getting our opinions.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1348634" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/What+my+wife+knows/default.aspx">What my wife knows</category></item><item><title>Let's just wait for Service Pack 1</title><link>http://msmvps.com/blogs/alunj/archive/2007/08/30/1147398.aspx</link><pubDate>Thu, 30 Aug 2007 13:08:19 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1147398</guid><dc:creator>Alun Jones</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1147398</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1147398</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/08/30/1147398.aspx#comments</comments><description>&lt;p&gt;Every so often, I&amp;#39;ll hear it said, and frequently not in jest, &amp;quot;let&amp;#39;s wait until Service Pack 1 before we deploy Vista&amp;quot;, or sometimes &amp;quot;Server 2008&amp;quot;.&lt;/p&gt; &lt;p&gt;While it&amp;#39;s true that &lt;a title="Announcing Windows Vista Service Pack 1 Beta" href="http://windowsvistablog.com/blogs/windowsvista/archive/2007/08/29/announcing-the-windows-vista-service-pack-1-beta.aspx"&gt;Microsoft has indeed announced plans to test, and then release, Windows Vista SP1 early in 2008&lt;/a&gt;, I have to say that I don&amp;#39;t find this thinking any smarter than the old &amp;quot;let&amp;#39;s buy IBM&amp;quot; idea, based on the &amp;quot;Nobody Ever Got Fired For Buying IBM&amp;quot; principle.&lt;/p&gt; &lt;p&gt;Even if it were true, someone&amp;#39;s eventually going to realise that if it&amp;#39;s your job to specify what the IT budget gets spent on, and you say things like &amp;quot;we&amp;#39;ll deploy it after Service Pack 1&amp;quot;, you&amp;#39;re just not acting as if you&amp;#39;re doing your job.&lt;/p&gt; &lt;p&gt;Somebody, one day, will call your bluff, and say &amp;quot;Why? What bug is a showstopper for deploying Vista RTM, and why do you believe it&amp;#39;s fixed by SP1? Why didn&amp;#39;t you find that bug out while you were beta testing the operating system? Weren&amp;#39;t you beta testing the operating system?&amp;quot;&lt;/p&gt; &lt;p&gt;And you&amp;#39;re going to look foolish, because you don&amp;#39;t have anything in particular to point to (UAC? That&amp;#39;s a bit generic - you have to say what you don&amp;#39;t like about UAC, &lt;u&gt;and&lt;/u&gt; why you think SP1 will make it all better) in order to defend your mindless parroting of &amp;quot;let&amp;#39;s wait for SP1&amp;quot;.&lt;/p&gt; &lt;p&gt;For the record, there are reasons to anticipate SP1 - it adds an SSL-based VPN capability, through the SSTP, and it allows you to encrypt multiple drives using BitLocker through the UI (you can use manage-bde.wsf to encrypt multiple drives using BitLocker from the command prompt).&lt;/p&gt; &lt;p&gt;There are other features in SP1, and you should definitely consider whether you can use those features. But there really isn&amp;#39;t any break-fix that makes it important for you to stop testing and planning to deploy Vista RTM while you wait for SP1.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1147398" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Windows+Vista/default.aspx">Windows Vista</category></item><item><title>Are you a 'dual'?</title><link>http://msmvps.com/blogs/alunj/archive/2007/08/29/1147378.aspx</link><pubDate>Thu, 30 Aug 2007 04:08:54 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1147378</guid><dc:creator>Alun Jones</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1147378</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1147378</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/08/29/1147378.aspx#comments</comments><description>&lt;p&gt;Last month at Tech-Ed, I was discussing with someone from the Solution Accelerators team about how I wished that Microsoft would produce some administration documentation for developers, and/or developer documentation for administrators, so that the two groups would be able to talk the same language.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[As a f&amp;#39;rinstance, back in the days of Windows 2000 and before, if you were a developer writing code to log a user on to the system and run a process (say, for instance, in your &lt;a href="http://www.wftpd.com"&gt;spiffy little FTP server&lt;/a&gt;), you would face an error if your code wasn&amp;#39;t running in the context of an account with SE_TCB_NAME privilege.&lt;/p&gt; &lt;p&gt;But you couldn&amp;#39;t tell an administrator to enable the SE_TCB_NAME privilege on the application&amp;#39;s account, because he&amp;#39;d have no idea what you mean.&lt;/p&gt; &lt;p&gt;To an administrator, that privilege is called &amp;quot;Act as part of the operating system&amp;quot;.]&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;quot;Well,&amp;quot; said my conversational partner, &amp;quot;That&amp;#39;s because you&amp;#39;re a jewel.&amp;quot;&lt;/p&gt; &lt;p&gt;&amp;quot;That&amp;#39;s awfully nice of you to say, you&amp;#39;re somewhat of a gem yourself.&amp;quot;&lt;/p&gt; &lt;p&gt;&amp;quot;No, not &amp;#39;jewel&amp;#39;, a &amp;#39;dual&amp;#39; - you span the two worlds of IT Pros and Developers.&amp;quot;&lt;/p&gt; &lt;p&gt;He went on to explain that there are few duals, and that this was why there were few resources that address the disparity between what is developed, and what is administered.&lt;/p&gt; &lt;p&gt;A lot of the examples I came up with (e.g. the name LUA versus UAC) were rooted in the history of development - where Microsoft&amp;#39;s naming police have chosen a name that they felt was &amp;quot;catchier&amp;quot;, &amp;quot;more marketable&amp;quot;, or simply &amp;quot;not offensive to &amp;lt;some-group&amp;gt;&amp;quot;, as a replacement for an internal name. Changing the internal name in APIs that have already gone through beta testing is not generally possible, so the developer name stays as the old name, and the administrative interface is changed to present the new, marketing- and legal-friendly name or image.&lt;/p&gt; &lt;p&gt;Are you a dual? What are some of your challenges in communicating across the boundaries between two worlds?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1147378" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/TechEd/default.aspx">TechEd</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category></item><item><title>Larry Osterman isn't that into you, either.</title><link>http://msmvps.com/blogs/alunj/archive/2007/08/22/1132270.aspx</link><pubDate>Thu, 23 Aug 2007 04:53:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1132270</guid><dc:creator>Alun Jones</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1132270</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1132270</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/08/22/1132270.aspx#comments</comments><description>&lt;p&gt;In previous articles, I&amp;#39;ve pointed out:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="Programmer Hubris - He&amp;#39;s just not that into you" href="http://msmvps.com/blogs/alunj/archive/2005/12/22/79670.aspx"&gt;Programmer Hubris - He&amp;#39;s just not that into you&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Programmer Hubris - I don&amp;#39;t run your software all the time" href="http://msmvps.com/blogs/alunj/archive/2006/03/13/86222.aspx"&gt;Programmer Hubris - I don&amp;#39;t run your software all the time&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Programmer Hubris Part 3 - Microsoft Knows I&amp;#39;m Not That Into Them" href="http://msmvps.com/blogs/alunj/archive/2006/07/19/Programmer-Hubris-Part-3_3A00_-Microsoft-Knows-I_2700_m-Not-That-Into-Them.aspx"&gt;Programmer Hubris Part 3 - Microsoft Knows I&amp;#39;m Not That Into Them&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="I&amp;#39;m still not that into Apple" href="http://msmvps.com/blogs/alunj/archive/2007/05/14/i-m-still-not-that-into-apple.aspx"&gt;I&amp;#39;m still not that into Apple&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;All of these are on the basic theme that developers should be aware that many users - possibly even most users - possibly even most of &lt;u&gt;their&lt;/u&gt; users - are not going to spend a majority of their time running software written by those developers.&lt;/p&gt; &lt;p&gt;I pick on Apple for this because it&amp;#39;s fun to do so, and because their attitude&amp;nbsp;seems to me to be&amp;nbsp;that they know what&amp;#39;s best for their users, and the users have no right to choose anything different. That&amp;#39;s insulting to power users - hey, it&amp;#39;s insulting to many novice users, too.&lt;/p&gt; &lt;p&gt;But it&amp;#39;s not just Apple who exhibits this attitude. For instance, on my laptop, I have this icon in my notification area called &amp;quot;HP Digital Imaging Monitor&amp;quot;&lt;a href="http://msmvps.com/blogs/alunj/WindowsLiveWriter/LarryOstermanisntthatintoyoueither_13464/Image-0050.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="21" alt="Image-0050" src="http://msmvps.com/blogs/alunj/WindowsLiveWriter/LarryOstermanisntthatintoyoueither_13464/Image-0050_thumb.png" width="18" border="0" /&gt;&lt;/a&gt; . Clicking on it does nothing, right-clicking on it does nothing, and I can&amp;#39;t say that I remember it ever doing anything other than sit there staring at me.&lt;/p&gt; &lt;p&gt;I can at least disable some of the icons that bother me by their presence in the notification area (but have I disabled the processes they represented?) - but the point is that there is a pile of crap on my machine that I almost never use.&lt;/p&gt; &lt;p&gt;Quite honestly, I&amp;#39;ve gotten into the habit of downloading a fresh copy of QuickTime, or RealPlayer, whenever I need to play one of their format files, and then uninstalling them again once I&amp;#39;m done.&lt;/p&gt; &lt;p&gt;What does it say about your code that a user would rather install and uninstall your program every time he wants to view your file format, rather than keep your software around?&lt;/p&gt; &lt;p&gt;And how easy is it then for that user to be distracted away from your code to someone else&amp;#39;s that does the same job? Never give your users a good&amp;nbsp;excuse to dump you.&lt;/p&gt; &lt;p&gt;But what does this have to do with the title of this blog posting?&lt;/p&gt; &lt;p&gt;I&amp;#39;ve just noticed that over the last several days, Larry, too, has been spouting off about his battles inside Microsoft to persuade his fellow developers that, quite frankly,&amp;nbsp;your users aren&amp;#39;t that into&amp;nbsp;your code, and you shouldn&amp;#39;t expect them to think it&amp;#39;s as important as you do.&lt;/p&gt; &lt;p&gt;A natural consequence of this is that you should think very carefully when writing software, not to view it as the most important thing (which, being your baby, it quite obviously is), but to view it as something that a user might use once every six months.&lt;/p&gt; &lt;p&gt;Enough of me, then, go look at Larry&amp;#39;s articles - he has some even more practical advice on crapplet mitigation:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="Why do people write applets?" href="http://blogs.msdn.com/larryosterman/archive/2007/08/14/why-do-people-write-applets.aspx"&gt;Why do people write applets?&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="So, why are applets so bad, anyway?" href="http://blogs.msdn.com/larryosterman/archive/2007/08/15/so-why-are-applets-so-bad-anyway.aspx"&gt;So, why are applets so bad, anyway?&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Applet mitigations" href="http://blogs.msdn.com/larryosterman/archive/2007/08/16/applet-mitigations.aspx"&gt;Applet mitigations&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Applet mitigations - updaters" href="http://blogs.msdn.com/larryosterman/archive/2007/08/20/applet-mitigations-updaters.aspx"&gt;Applet mitigations - updaters&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Applet mitigations - notification area handlers" href="http://blogs.msdn.com/larryosterman/archive/2007/08/21/applet-mitigations-notification-area-handlers.aspx"&gt;Applet mitigations - notification area handlers&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a title="Applet mitigations - services" href="http://blogs.msdn.com/larryosterman/archive/2007/08/22/applet-mitigations-services.aspx"&gt;Applet mitigations - services&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Larry&amp;#39;s one of my favourite bloggers - I almost always learn something from reading his posts.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1132270" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Programmer+Hubris/default.aspx">Programmer Hubris</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category></item><item><title>firefoxURL:%03</title><link>http://msmvps.com/blogs/alunj/archive/2007/07/26/firefoxurl-03.aspx</link><pubDate>Fri, 27 Jul 2007 04:05:53 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1063600</guid><dc:creator>Alun Jones</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1063600</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1063600</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/07/26/firefoxurl-03.aspx#comments</comments><description>&lt;p&gt;Part 3 - and I promise that&amp;#39;s the lot for now, because it&amp;#39;s starting to look like I&amp;#39;m obsessed or something.&lt;/p&gt; &lt;p&gt;Over the past week or so, you&amp;#39;ve read me talking about vulnerabilities in Fire fox&amp;#39;s protocol handlers, and how my perception is that Internet Explorer is neither the source of the flaw. A few others have weighed in on the issue in various directions, some at their own blogs, and others shuffling from blog to blog leaving comments.&lt;/p&gt; &lt;p&gt;Now, I think it&amp;#39;s time to look at Internet Explorer.&lt;/p&gt; &lt;p&gt;Some of my readers have suggested that I have been blinkered to what they see as Internet Explorer&amp;#39;s failings in this conversation, and in a sense, they&amp;#39;re right - I&amp;#39;ve been looking primarily at identifying where the actual &lt;u&gt;security vulnerability&lt;/u&gt; lies, and deliberately not broadened my inspections to look at where related&amp;nbsp;non-standard&amp;nbsp;behaviour lies.&lt;/p&gt; &lt;p&gt;I&amp;#39;ve quoted RFC 3986 a couple of times, and in this article, it&amp;#39;s worth pointing out that although I believe it is correct that Internet Explorer should not percent-encode the URIs that it passes on to protocol handlers, I also believe that Internet Explorer should not be percent-decoding the URIs passed to protocol handlers.&lt;/p&gt; &lt;p&gt;Sadly, this is not the case - Internet Explorer decodes percent-encoded values, and also has a habit of percent-encoding some URIs on re-display. For instance, the URI &amp;quot;whatnot:hi there&amp;quot; becomes &amp;quot;whatnot:hi%20there&amp;quot; in the address display, even as it&amp;#39;s passed unfiltered to the protocol handler.&lt;/p&gt; &lt;p&gt;Just as Internet Explorer has no way to know what the URI&amp;#39;s intent in encoding is, it has no way to know what the URI&amp;#39;s intent at decoding is, and should feed the URI unvarnished to the protocol handler, for the protocol handler to deal with as it will. At least the &lt;a title="Launching the handling application" href="http://msdn2.microsoft.com/en-us/library/aa767914.aspx#url_inv"&gt;developer documentation for writing a protocol handler&lt;/a&gt; documents that Internet Explorer decodes percent-encoded values before handling them to the protocol handler - and this is likely a result of noting how few protocol handlers were written by people who read RFC 3986.&lt;/p&gt; &lt;p&gt;What isn&amp;#39;t documented is that in addition to &amp;quot;%1&amp;quot;, there are other substitutions that can be made in the command line. %d and %l (that&amp;#39;s a letter &amp;#39;ell&amp;#39;) both appear to be the same as %1, as does %0, confusingly enough. %i gives some kind of identifier, in the form of :M:N, where N is the PID of the process that Internet Explorer is running - I have yet to figure out what M is. %s gives 1, and %h gives 0 - perhaps these indicate whether the handler is to be shown or hidden? Again, these are just guesses, and I have asked Microsoft if they can document these parameters.&lt;/p&gt; &lt;h3&gt;Should Internet Explorer be changed?&lt;/h3&gt; &lt;p&gt;So,&amp;nbsp;now we&amp;#39;ve&amp;nbsp;discussed that Internet Explorer decodes percent-encoded values on their way to the protocol handler, and encodes them on their way to the address bar, and I&amp;#39;ve stated my opinion that I think this is wrong. We&amp;#39;ve discussed that it&amp;#39;s documented behaviour, but that Internet Explorer exhibits other behaviour that ought to be documented.&lt;/p&gt; &lt;p&gt;Others have discussed that Internet Explorer does not encode values on their way to the protocol handler, and that they think this is wrong.&lt;/p&gt; &lt;p&gt;First, let me re-iterate that while that is definitely opinion on their part and mine, and I can&amp;#39;t call one definitively right or wrong, I am still going to say that Window Snyder is wrong to &lt;a title="Fix for Windows URL Protocol Handling Problem in Firefox 2.0.0.5" href="http://blog.mozilla.com/security/2007/07/18/fix-for-windows-url-protocol-handling-problem-in-firefox-2.0.0.5/"&gt;assess this behaviour as a critical vulnerability in Internet Explorer&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;If Internet Explorer changes its behaviour, it will be as a convenience to the protocol handler developers, with the side effect of possibly protecting users from a small class of bugs in protocol handlers written by people with poor security skills (but not protecting against any number of wider classes of bugs that those developers might make). The critical vulnerability is still in&amp;nbsp;any such exploitable protocol handler.&lt;/p&gt; &lt;p&gt;Many have pointed to Firefox&amp;#39;s quick fixes to the handler calling encoding as an example that Microsoft should make these changes themselves, and that Microsoft&amp;#39;s lack of change indicates a reluctance to address security.&lt;/p&gt; &lt;p&gt;We&amp;#39;ve seen a number of occasions where Microsoft has been quick to address security - and in a situation like this, you can bet that Microsoft staff have been asking the question &amp;quot;should we change this behaviour?&amp;quot;&lt;/p&gt; &lt;p&gt;If security was the only consideration, then making the change is still an unlikely decision - the flaw is not with Internet Explorer, and if you&amp;#39;re going to argue that &amp;quot;defence in depth&amp;quot; suggests that Internet Explorer should accommodate flawed protocol handlers, then you&amp;#39;re going to have to answer the question of whether you&amp;#39;re going to patch this in the TCP/IP stack, the Ethernet drivers, the Linksys/Cisco routers... All of these feature significantly in the path under consideration, and to all of these, the possibility of a malformed URI triggering a vulnerability in a protocol handler is but a miniscule fraction of the work they do.&lt;/p&gt; &lt;p&gt;Every time you change code, you run the risk of introducing related - and unrelated - damage. For Firefox, that risk is relatively small - the code-base is known for being changed at the drop of a hat, and vendors and users aren&amp;#39;t surprised to see weekly patches, some of which will kill functionality that they use. For Internet Explorer, there is a far greater expectation of stability. There is a far larger pool of documentation on its functionality, and if that documented functionality disappears or changes, users and developers call on Microsoft expecting assistance.&lt;/p&gt; &lt;p&gt;Don&amp;#39;t forget, also, that every Windows Firefox user is also an Internet Explorer user, and &lt;a title="The Protocol Handler Saga Continues: Say What Secunia?" href="http://msinfluentials.com/blogs/jesper/archive/2007/07/26/the-protocol-handler-saga-continues-say-what-secunia.aspx"&gt;as Jesper found when delving into the bowels of the most recent Firefox bugs&lt;/a&gt;, Firefox on Windows is an Internet Explorer user.&lt;/p&gt; &lt;p&gt;As a result of all these things, Internet Explorer is going to always balance security against compatibility and usability - and where the security problem is external to Internet Explorer, there&amp;#39;s going to have to be a pretty powerful argument in place that Internet Explorer can best address the problem before changes will be made there.&lt;/p&gt; &lt;p&gt;To date, these exploits have centered around one vendor&amp;#39;s code. Should Internet Explorer be pushing a disruptive change&amp;nbsp;to everyone just because that vendor calls IE by rude names in reaction to its own flaws? Should a change be forthcoming as a result of seeing how incompatible the URI behaviour is with RFC 3986?&lt;/p&gt; &lt;p&gt;I don&amp;#39;t think so. Maybe the next time significant disruptive change comes along - IE 8, perhaps. This time, why don&amp;#39;t you all test your apps while it&amp;#39;s still in beta, mm-kay?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1063600" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Programmer+Hubris/default.aspx">Programmer Hubris</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category></item><item><title>firefoxurl: URL vulnerability</title><link>http://msmvps.com/blogs/alunj/archive/2007/07/22/firefoxurl-url-vulnerability.aspx</link><pubDate>Sun, 22 Jul 2007 20:57:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1047500</guid><dc:creator>Alun Jones</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=1047500</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=1047500</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/07/22/firefoxurl-url-vulnerability.aspx#comments</comments><description>&lt;p&gt;Heard about the firefoxurl vulnerability?&lt;/p&gt;
&lt;p&gt;It turns out that you can exploit Firefox by&amp;nbsp;having&amp;nbsp;Internet&amp;nbsp;Explorer&amp;nbsp;visit a link to a URL that starts with &amp;quot;firefoxurl:&amp;quot; (and a bunch of other code). [Assuming you have Firefox on your computer along with Internet Explorer]&lt;/p&gt;
&lt;p&gt;This is because Internet Explorer blindly accepts and passes the entire contents of the URL to the handler for the firefoxurl URL type - that handler, as the URL scheme name implies, is Firefox. It&amp;#39;s also because Firefox can be exploited by command-line parameters, because Firefox&amp;#39;s protocol is handled by interpreting a command-line, and because Firefox interprets the command-line provided to it as if it is always well-formed.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s been a lot of discussion about whose problem this is, and where it needs fixing. Jesper&amp;#39;s a friend of mine, and I&amp;#39;m a fan of his,&amp;nbsp;so I&amp;#39;d like to point to his&amp;nbsp;posts on the discussion so far, &lt;a title="Blocking the Firefox - IE 0-day" href="http://msinfluentials.com/blogs/jesper/archive/2007/07/10/blocking-the-firefox-gt-ie-0-day.aspx"&gt;here&lt;/a&gt; and &lt;a title="Hey, Mozilla: Quotes are not legal in a URL" href="http://msinfluentials.com/blogs/jesper/archive/2007/07/20/hey-mozilla-quotes-are-not-legal-in-a-url.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A number of people have made references to &lt;a class="" title="RFC 1738: Uniform Resource Locators (URL)" href="http://www.ietf.org/rfc/rfc1738.txt"&gt;RFC 1738&lt;/a&gt;, and its description of which characters must, and may, be encoded in a URL. That&amp;#39;s all very interesting , if you&amp;#39;re engaged in academic discussion of how to create a URL, as the originator, or how to process it, as a consumer.&lt;/p&gt;
&lt;p&gt;In this case, the discussion as to whether IE has a flaw&amp;nbsp;should be centered on how much work an intermediary party should do when given something that is alleged to be a URL, before it hands it off to a third party for actual handling.&lt;/p&gt;
&lt;p&gt;This makes this intermediary (Internet Explorer in the original exploit, but ... are there others?) behave like a proxy for such&amp;nbsp;protocol handlers, rather than a consumer or provider of the URL as a whole.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m sure we&amp;#39;d have heard a different tale if Microsoft&amp;#39;s Internet Explorer team had chosen to limit the set of characters that can be passed through to an underlying handler; instead we&amp;#39;d hear &amp;quot;why does my protocol handler have to interpret encoded character sequences? They&amp;nbsp;weren&amp;#39;t encoded in the&amp;nbsp;link, and there&amp;#39;s no reason for&amp;nbsp;IE to encode them!&amp;quot;&lt;/p&gt;
&lt;p&gt;As &lt;a title="Enriching the Web Safely: How to Create Application Protocol Handlers" href="http://blogs.msdn.com/ie/archive/2007/07/18/enriching-the-web-safely-how-to-create-application-protocol-handlers.aspx"&gt;Markellos Diorinos, IE Product Manager, points out&lt;/a&gt;&amp;nbsp;in the &lt;a href="http://blogs.msdn.com/ie/"&gt;IEBlog&lt;/a&gt;, it&amp;#39;s not just the presence of uncomfortable quote characters that the protocol handler will have to cope with, it&amp;#39;s buffer overflows, invalid representations, and out-of-spec protocol portions of varying kinds. IE can&amp;#39;t possibly know all the things that your application might find uncomfortable, versus all the things that your protocol may need, so it doesn&amp;#39;t try to guess, or limit the possible behaviours of the protocol handler.&lt;/p&gt;
&lt;p&gt;In short, IE does what any interface between transport layers does - it strips off the header (&amp;quot;firefoxurl:&amp;quot;), and passes the rest uninterpreted to the next layer. It is IE&amp;#39;s job, in this case, only to identify (from the scheme specifier) which protocol handler to fire up, and to pass its parameters to it.&lt;/p&gt;
&lt;p&gt;Perhaps you think that&amp;#39;s not defence in depth - but then, defence in depth is not about enforcing the same defence at several layers, it&amp;#39;s about using knowledge specific to each layer to protect against attacks within each layer. &lt;u&gt;Sometimes&lt;/u&gt; those protections are redundant, but unless there is different knowledge in that redundancy allowing the layers to do different defence work, there is&amp;nbsp;little value to redundancy for redundancy&amp;#39;s sake.&lt;/p&gt;
&lt;p&gt;Yes, the IE team &lt;u&gt;could&lt;/u&gt; have decided that they&amp;#39;d enforce URL standards that were not being followed by the upstream provider (in this case, the creator of the link), and enforce them on the portion passed to the downstream, but such approaches tend to limit the flexibility of the protocol.&lt;/p&gt;
&lt;p&gt;IE&amp;#39;s responsibility is to ensure that any URL that comes to it does not trigger a vulnerability in IE, that any URL that comes from it conforms to RFCs, and that any information that is supposed to pass unmolested through it actually passes unmolested.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s just a matter of some&amp;nbsp;amusement that when Mozilla&amp;#39;s Window Snyder, Chief Security Something-or-other, &lt;a title="Fix for Windows URL Protocol Handling Problem in Firefox 2.0.0.5" href="http://blog.mozilla.com/security/2007/07/18/fix-for-windows-url-protocol-handling-problem-in-firefox-2.0.0.5/"&gt;called out this lack of extra preprocessing as a specific vulnerability in Internet Explorer&lt;/a&gt;, she did not think to confirm first that Firefox itself did not contain the same behaviour. I will be interested to see how they address this - whether they will &amp;#39;fix&amp;#39; the behaviour, and if they do, what will be the resulting impact on compatibility with existing protocol handlers whose programmers&amp;nbsp;assumed that&amp;nbsp;their data would arrive unmolested, as documented, and who have already taken appropriate security measures to cope with this (such as not parsing anything past the beginning of the user data as if it was anything other than untrustworthy user data).&lt;/p&gt;
&lt;p&gt;Finally, as a nod to my own past as a nit-picker of RFCs, here&amp;#39;s what &lt;a class="" title="RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax" href="http://www.ietf.org/rfc/rfc3986.txt"&gt;RFC 3986&lt;/a&gt;, which obsoletes the generic URL specification portions of RFC 1738, has to say about intermediaries in the URI handling stream:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The URI syntax is organized hierarchically, with components listed in&lt;br /&gt;order of decreasing significance from left to right. For some URI&lt;br /&gt;schemes, the visible hierarchy is limited to the scheme itself:&lt;br /&gt;everything after the scheme component delimiter (&amp;quot;:&amp;quot;) is considered&lt;br /&gt;opaque to URI processing. Other URI schemes make the hierarchy&lt;br /&gt;explicit and visible to generic parsing algorithms.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;That suggests that a generic URI processor (such as a forwarding proxy) should see the URI after the scheme component as &amp;quot;opaque to URI processing&amp;quot; - in other words, that the processor should assume it can understand nothing about, and therefore should not inspect, the part after the colon. 
&lt;p&gt;Further down in the document: 
&lt;blockquote&gt;
&lt;p&gt;Under normal circumstances, the only time when octets within a URI are percent-encoded is during the process of producing the URI from its component parts. This is when an implementation determines which of the reserved characters are to be used as subcomponent delimiters and which can be safely used as data. Once produced, a URI is always in its percent-encoded form.&lt;/p&gt;
&lt;p&gt;When a URI is dereferenced, the components and subcomponents significant to the scheme-specific dereferencing process (if any) must be parsed and separated before the percent-encoded octets within those components can be safely decoded, as otherwise the data may be mistaken for component delimiters.&lt;/p&gt;
&lt;p&gt;...Implementations must not percent-encode or decode the same string more than once, as decoding an already decoded string might lead to misinterpreting a percent data octet as the beginning of a percent-encoding, or vice versa in the case of percent-encoding an already percent-encoded string.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Clearly, if Internet Explorer (or any other web browser that supports this kind of protocol pass-through technique) were to encode characters that are not supposed to be in a URL, it would fall afoul of this definition in the usual case, by encoding &amp;quot;the same string more than once&amp;quot;, once at preparation by a conformant URI provider, and once again as it passed through IE.&lt;/p&gt;
&lt;p&gt;IE&amp;#39;s best bet for compatibility and future extensibility (as well as compliance with current RFCs) is to not inspect or modify the scheme-specific component of any URI unless it is handling that URI itself.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1047500" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Programmer+Hubris/default.aspx">Programmer Hubris</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category></item><item><title>Security Expert Chat - Thursday 6/21/2007, 4pm PDT</title><link>http://msmvps.com/blogs/alunj/archive/2007/06/19/security-expert-chat-thursday-6-21-2007-4pm-pdt.aspx</link><pubDate>Tue, 19 Jun 2007 18:52:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:974059</guid><dc:creator>Alun Jones</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=974059</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=974059</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/06/19/security-expert-chat-thursday-6-21-2007-4pm-pdt.aspx#comments</comments><description>&lt;p&gt;Technet&amp;#39;s brief description for a chat this Thursday (June 21st)&amp;nbsp;at 4pm PDT:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Q&amp;amp;A with the Security MVP Experts&lt;br /&gt;&lt;/strong&gt;We invite you to attend an Q&amp;amp;A with the Microsoft Security MVPs. In this chat the MVP experts will answer your questions regarding online safety issues such as phishing, spyware, rootkits as well as server related topics. If you have questions on how to protect your PC, please bring them to this informative chat.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Here&amp;#39;s a &lt;a class="" title="Q &amp;amp; A with the Security MVP Experts - Calendar Invite" href="http://www.microsoft.com/communities/chats/vcs/07_0621_TN_Security.ics"&gt;link to the calendar invite&lt;/a&gt; for those of you running Outlook, and on the day, at the time, you can &lt;a class="" href="http://www.microsoft.com/technet/community/chats/chatroom.aspx"&gt;click here to enter the chat room&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Why am I linking to it? Because I&amp;#39;ve been invited along as one of the &amp;quot;Security MVP Experts&amp;quot; - bring along your questions and concerns, and we&amp;#39;ll try our very best to answer them.&lt;/p&gt;
&lt;p&gt;For other &lt;a class="" href="http://www.microsoft.com/technet/community/chats/default.mspx"&gt;Technet related chats, click here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=974059" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category></item><item><title>Couldn't have done that at Microsoft</title><link>http://msmvps.com/blogs/alunj/archive/2007/03/22/couldn-t-have-done-that-at-microsoft.aspx</link><pubDate>Thu, 22 Mar 2007 13:45:54 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:701441</guid><dc:creator>Alun Jones</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=701441</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=701441</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/03/22/couldn-t-have-done-that-at-microsoft.aspx#comments</comments><description>&lt;p&gt;Today, another reminder of things I couldn't have done at Microsoft.&lt;/p&gt; &lt;p&gt;Last night, I rushed home from work in time to take my kid to his Webelos den meeting.&lt;/p&gt; &lt;p&gt;There, we worked on his Pinewood Derby car.&lt;/p&gt; &lt;p&gt;He's been sick most of last week and weekend, so he hasn't done as much work on it as he'd like.&lt;/p&gt; &lt;p&gt;So, I stayed up late last night, gluing parts together, and finishing up painting on spots he hadn't managed to get to.&lt;/p&gt; &lt;p&gt;I got up early this morning to finish the job.&lt;/p&gt; &lt;p&gt;And&amp;nbsp;I even managed to put in some time on my own car.&lt;/p&gt; &lt;p&gt;I never could have done something so time-consuming&amp;nbsp;while I worked at Microsoft.&lt;/p&gt; &lt;p&gt;Microsoft may be great for some, but I couldn't successfully maintain their lifestyle.&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=701441" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Miscellany+-+not+security/default.aspx">Miscellany - not security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/What+my+wife+knows/default.aspx">What my wife knows</category></item><item><title>WIP: Principles of Secure Software Development</title><link>http://msmvps.com/blogs/alunj/archive/2007/03/21/wip-principles-of-secure-software-development.aspx</link><pubDate>Thu, 22 Mar 2007 00:19:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:700223</guid><dc:creator>Alun Jones</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=700223</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=700223</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/03/21/wip-principles-of-secure-software-development.aspx#comments</comments><description>&lt;P&gt;This is a work-in-progress, but I'd like your opinions on it:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Principles of Secure Software Development&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You're not that good - someone will find a hole in your software. Find as many as you can, first.&lt;/LI&gt;
&lt;LI&gt;You're still not that good - you didn't find all the holes.&amp;nbsp; Someone will find a hole in your software. Have a plan in place for when that happens. Pay someone to find holes.&lt;BR&gt;[Corollary: If you aren't that good now, you weren't any better before, and you'll be just as bad in the future - so when someone finds a hole, scan for other similar behaviours in the rest of your code, and put processes into place that prevent you from making the same mistake in the future.]&lt;/LI&gt;
&lt;LI&gt;Someone else is better (or has had more time to&amp;nbsp;iron out the wrinkles)&amp;nbsp;- if someone else has written it well already, use theirs. Make sure you keep up-to-date with fixes on it!&lt;/LI&gt;
&lt;LI&gt;Even &lt;EM&gt;they&lt;/EM&gt; are not that good - review and test for security threats in anyone else's software you use.&lt;BR&gt;[Corollary: You were never that good, nor was anyone else, and you / they never will be. Re-visit old code with new understanding. Document new code as you write it and as you change it, and make sure it is simple enough to understand. Complex code has complex bugs that are hard to find.]&lt;/LI&gt;
&lt;LI&gt;They wrote it for themselves, not for you - if you use someone else's software, review their assumptions and see if they still apply in your environment. [c.f. Rocky Horror Picture Show, "I didn't make him for you"]&lt;/LI&gt;
&lt;LI&gt;Comments are not code (but code should read like comments) - use comments as a suggestion of how the code was supposed to run, and remember that code is often changed without updating comments. Make your code tell all the story it needs to.&lt;/LI&gt;
&lt;LI&gt;If it's not your code, it's data, and data is evil until&amp;nbsp;proven good&amp;nbsp;- anything that you don't hard-code into the program is data. That includes mouse movements, window messages, network traffic, keyboard input, etc, etc. Anything that isn't in your source code should be treated as malicious until proven otherwise.&lt;/LI&gt;
&lt;LI&gt;People are replaced easily, processes are not - ensure that your secure development processes revolve around processes, not personalities.&lt;/LI&gt;
&lt;LI&gt;Secure development just plain takes longer - so make time for it. If you don't have time to do it right, when will you have time to make it right?&lt;/LI&gt;
&lt;LI&gt;Secure code just plain works better - it's more reliable, has fewer bugs, is simpler to maintain. It may bring you to market slightly later, but a "second-to-market" product can beat a "first-to-market" product if it has an improved reputation for reliability.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;EM&gt;So, let me know what you think of these - ten is a number picked rather arbitrarily, I could extend or reduce the list if you think I should.&lt;/EM&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=700223" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Programmer+Hubris/default.aspx">Programmer Hubris</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/What+my+wife+knows/default.aspx">What my wife knows</category></item><item><title>Security Bulletins are easier to read in Japanese</title><link>http://msmvps.com/blogs/alunj/archive/2007/02/18/security-bulletins-are-easier-to-read-in-japanese.aspx</link><pubDate>Mon, 19 Feb 2007 00:52:47 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:595326</guid><dc:creator>Alun Jones</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=595326</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=595326</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/02/18/security-bulletins-are-easier-to-read-in-japanese.aspx#comments</comments><description>&lt;p&gt;It's "Patch Tuesday" again - and you're going to be spending a busy Valentine's day installing all of them. I'm not the first person to cover this - Steve Riley did it way back when, and &lt;a title="From now on I'm reading Japanese Security bulletins" href="http://msmvps.com/blogs/bradley/archive/2005/04/16/43170.aspx"&gt;Susan Bradley reminded us of it&lt;/a&gt;, but it's time to raise the point up again.&lt;/p&gt; &lt;p&gt;You can get to the Japanese Security Bulletins at &lt;a href="http://www.microsoft.com/japan/security/bulletins/default.mspx"&gt;http://www.microsoft.com/japan/security/bulletins/default.mspx&lt;/a&gt; - there's a lot of Japanese script there, but it's easy to see where a particular bulletin - say &lt;a title="Japanese version of MS07-005" href="http://www.microsoft.com/japan/security/bulletins/ms07-005e.mspx"&gt;MS07-005&lt;/a&gt; - is, because those numbers are in a Latin character set.&lt;/p&gt; &lt;p&gt;Compare it against the English version of &lt;a title="English version of bulletin MS07-005" href="http://www.microsoft.com/technet/security/Bulletin/MS07-005.mspx"&gt;MS07-005&lt;/a&gt;. First, let's see how you get hit by an exploit against the vulnerability:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;An attacker could try to exploit the vulnerability by creating a specially crafted message and sending the message to an affected system. The message could then cause the affected system to execute code.  &lt;p&gt;There are several additional ways that an attacker could try to exploit this vulnerability. However, user interaction is required to exploit this vulnerability in each of these ways. Some examples follow: &lt;p&gt;•An attacker could exploit the vulnerability by constructing a malicious Step-by-Step Interactive Training bookmark file (a .cbo, cbl, or .cbm file) and then persuade the user to open the file. &lt;p&gt;•An attacker could send a malicious file as an attachment to a user through e-mail and then convince a user to open the attachment. &lt;p&gt;•An attacker could host a malicious Web site that is designed to exploit this vulnerability through Internet Explorer and then persuade a user to view the Web site. &lt;p&gt;•In a Web-based attack scenario, an attacker would have to host a Web site that contains a Web page that is used to exploit this vulnerability. An attacker could also try to compromise a Web site to have it deliver a Web page that contains malicious content to try to exploit this vulnerability. An attacker would have no way to force users to visit a Web site. Instead, an attacker would have to persuade them to visit the Web site, typically by getting them to click a link that takes them to the attacker's Web site or to a Web site that has been compromised by the attacker.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Did you understand that? I'm sure your management chain didn't.&lt;/p&gt; &lt;p&gt;How about in Japanese?&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Abuse_Web%5B1%5D%5B2%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="145" src="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Abuse_Web%5B1%5D_thumb.jpg" width="500" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;a href="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Abuse_Mail_link%5B1%5D%5B2%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="147" src="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Abuse_Mail_link%5B1%5D_thumb.jpg" width="500" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;a href="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Abuse_Mail_Attach%5B1%5D%5B2%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="147" src="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Abuse_Mail_Attach%5B1%5D_thumb.jpg" width="500" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Okay, that's fairly obvious, the bad guy's web site infects your machine, or the bad guy's email infects it, either when you open the email, or open the attachments in the email. [The bad guy wears a black hat and dark glasses, of course.]&lt;/p&gt; &lt;p&gt;How about what can be done to your machine:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This is a remote code execution vulnerability. If a user is logged on with administrative user rights, an attacker who successfully exploited this vulnerability could take complete control of an affected system. An attacker could then install programs; view, change, or delete data; or create new accounts with full user rights. Users whose accounts are configured to have fewer user rights on the system could be less impacted than users who operate with administrative user rights.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Again, Japan makes it easy:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Result_addacount_m%5B1%5D%5B2%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="186" src="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Result_addacount_m%5B1%5D_thumb.jpg" width="500" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;a href="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Result_read_m%5B1%5D%5B2%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="130" src="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Result_read_m%5B1%5D_thumb.jpg" width="498" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;a href="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Result_del_m%5B1%5D%5B2%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="133" src="http://msmvps.com/blogs/alunj/WindowsLiveWriter/SecurityBulletinsareeasiertoreadinJapane_5B14/Result_del_m%5B1%5D_thumb.jpg" width="492" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Oh, right, so the bad guy can drop a little copy of himself on my machine, he can look through his network "telescope" and see all my files, and he can reach through the network with his grabby thing, and dump my photos, files and emails in the trash.&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=595326" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/What+my+wife+knows/default.aspx">What my wife knows</category></item><item><title>ScreenSaverGracePeriod - how fast can you cross a training room?</title><link>http://msmvps.com/blogs/alunj/archive/2007/01/26/screensavergraceperiod-how-fast-can-you-cross-a-training-room.aspx</link><pubDate>Fri, 26 Jan 2007 18:38:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:521639</guid><dc:creator>Alun Jones</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=521639</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=521639</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/01/26/screensavergraceperiod-how-fast-can-you-cross-a-training-room.aspx#comments</comments><description>&lt;P&gt;We're faced with an issue where presenters are losing their train of thought mid presentation because their slides are covered up by the screensaver - this would not be a significant problem, except that by the time they get back to wiggle the mouse, the workstation has been locked, and they have to type in their password again.&lt;/P&gt;
&lt;P&gt;Clearly, we can't make presenters use a machine without workstation locking on the screensaver, or these machines would be accessible for hours under potentially "privileged" accounts. [Note that privilege includes social privilege here - if a VP is presenting, even if they're a restricted user in Windows, any email that comes from them is treated like the word of %deity.]&lt;/P&gt;
&lt;P&gt;And I didn't want them finding their own solution (like the "Brandenberg Concerto" solution, where you simply play the Beethoven clip in Windows Media Player, put it on loop, mute the Media Player, and then minimise it), that might simply disable or prevent the screensaver completely, thus avoiding any chance of lockout.&lt;/P&gt;
&lt;P&gt;So we found a really creative solution - &lt;A class="" title="Registry documentation for ScreenSaverGracePeriod" href="http://technet2.microsoft.com/WindowsServer/en/library/fc8b1f06-0f7b-4799-b9a1-f01f40703c371033.mspx?mfr=true"&gt;ScreenSaverGracePeriod&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;This is a registry setting - under HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon - that controls how long you have after a screen saver goes active, to wiggle the mouse and get back to your presentation without encountering the workstation lock. [You've probably noticed already that you can wiggle the mouse quickly and not have to re-enter your password.]&lt;/P&gt;
&lt;P&gt;It's only a little unfortunate that the documentation incorrectly describes this as a REG_DWORD setting - our own testing shows that it has to be a REG_SZ, even though the contents are a number, describing the number of seconds 'grace' you want. You can use decimal, or hexadecimal if preceded by "0x".&lt;/P&gt;
&lt;P&gt;[Aside - why do Microsoft's programmers do this? Surely it's more effort to extract the string and convert it to a number, than have it stored as a number in the first place!]&lt;/P&gt;
&lt;P&gt;Note that setting the ScreenSaverGracePeriod to 0 does not disable the workstation lock, it forces it to happen at any point the screensaver goes active, no matter how fast you are. The maximum value is 2,147,483 - seemingly a random number, until you realise that if you express it in thousandths of a second, it's the largest number that can be expressed in a four byte signed integer.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=521639" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Programmer+Hubris/default.aspx">Programmer Hubris</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category></item><item><title>Trying to deploy an Outlook add-in</title><link>http://msmvps.com/blogs/alunj/archive/2007/01/23/trying-to-deploy-an-outlook-add-in.aspx</link><pubDate>Wed, 24 Jan 2007 06:36:21 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:515175</guid><dc:creator>Alun Jones</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=515175</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=515175</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/01/23/trying-to-deploy-an-outlook-add-in.aspx#comments</comments><description>&lt;p&gt;Even us grizzled security professionals occasionally have to give up when faced with a pile of security so incomprehensibly bizarre as to make life seem impossible.&lt;/p&gt; &lt;p&gt;Recently, a member of our Security Council&amp;nbsp;asked the simple question "instead of having us manually forward email to the junk mail filters, can we have a button that automatically forwards our currently selected messages as false negatives?"&lt;/p&gt; &lt;p&gt;When I heard of this, my natural inclination was "sure, I'm not doing anything terribly interesting or important with my few minutes of spare time a day - how hard could it be?"&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;I should slap myself every time I say "how hard could it be?" - although this phrase has often brought me my best achievements (&lt;a title="WFTPD - Windows FTP Server" href="http://www.wftpd.com/"&gt;WFTPD&lt;/a&gt; came from "this piece of crap FTP server [WinQVT/Net]&amp;nbsp;crashes every time a second user logs on - how hard could it be to write a working FTP server?"), it's also brought on some of the hardest challenges. WFTPD took a solid six months before it was remotely usable, and a few years to get to its current state, including a three month period just trying to get SSL working.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;In this case, of course, I said "how hard could it be - looks like it'll be really easy in .NET".&lt;/p&gt; &lt;p&gt;So, I spent two hours writing the add-in in C# .NET.&lt;/p&gt; &lt;p&gt;And the following three weeks trying to figure out how to deploy it.&lt;/p&gt; &lt;p&gt;There were pre-requisites and requirements, updates to install, KB article patches&amp;nbsp;to fetch, and then I had to write or download an extra setup custom action to add my add-in to the Code Access Security using CASPOL.EXE.&lt;/p&gt; &lt;p&gt;Yuck. I mean, don't get me wrong, CASPOL's a wonderful idea - that you can list what behaviours a program is allowed to have, that's really powerful. Unfortunately, it's also difficult, and prone to making it so difficult that the whole project got canceled.&lt;/p&gt; &lt;p&gt;Fortunately, I'm not a one-trick pony. I canceled the .NET project, sure, but I got to looking at &lt;a title="Download details: Junk E-mail Reporting Tool" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53541292-ce94-4c5b-9127-b7d56f11b619&amp;amp;DisplayLang=en"&gt;Microsoft's Outlook Junk Mail&lt;/a&gt;&amp;nbsp;button - &lt;a title="Tell us about the junk email you receive" href="http://blogs.technet.com/steriley/archive/2006/12/20/tell-us-about-the-junk-email-you-receive.aspx"&gt;Steve Riley pointed it out recently&lt;/a&gt; - and I noticed that it's written as a straight COM component using C++.&lt;/p&gt; &lt;p&gt;So I do the same. It's slightly longer to develop - perhaps six hours, because I'm really not familiar with COM, and I make a few beginner mistakes. But to deploy - it's a simple case of copy the file, run regsvr32, and away we go - a perfectly operating (if possibly a little unsecure) Outlook add-in.&lt;/p&gt; &lt;p&gt;Can anyone tell me why I should have persevered with the .NET version?&lt;/p&gt; &lt;p&gt;Or better still, &lt;u&gt;how&lt;/u&gt; I should have done it more easily?&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=515175" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Programmer+Hubris/default.aspx">Programmer Hubris</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category></item><item><title>Developers still don't get it.</title><link>http://msmvps.com/blogs/alunj/archive/2007/01/11/developers-still-don-t-get-it.aspx</link><pubDate>Thu, 11 Jan 2007 21:13:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:484875</guid><dc:creator>Alun Jones</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/rsscomments.aspx?PostID=484875</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/alunj/commentapi.aspx?PostID=484875</wfw:comment><comments>http://msmvps.com/blogs/alunj/archive/2007/01/11/developers-still-don-t-get-it.aspx#comments</comments><description>&lt;P&gt;I'm perplexed by a statement made by one of the commentors on a &lt;A class="" title="My Take on Visual Studio 2005 SP1 and Windows Vista" href="http://blogs.msdn.com/michael_howard/archive/2007/01/04/my-take-on-visual-studio-2005-sp1-and-windows-vista.aspx"&gt;recent Michael Howard blog posting&lt;/A&gt;.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Why would you NOT run [Visual Studio] as an administrator at all times? &lt;/P&gt;
&lt;P&gt;As a developer, I spend enough time on my own work. I don't need to be spending ONE second switching profiles, typing passwords, or wondering when something fails whether it is a security issue or not.&lt;/P&gt;
&lt;P&gt;I know many developers, and not a single person I know develops as non-admin. Since VS2005 needs to run as Admin, I'd be willing to bet that 99% of the Visual Studio team does the same thing too.&lt;/P&gt;
&lt;P&gt;(and yes, I own (and read) Writing Secure Code, and I do keep a low-privilege account to test my apps, so I'm not *totally* ignorant about security issues)&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Wow.&lt;/P&gt;
&lt;P&gt;This emphasises a few things I've said on numerous occasions in the past:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Developers are prima donnas (you may have heard me use a different description, beginning with an "a", and ending in "rseholes"). I can say this because I am a developer, and I've spent a lot of my career in the company of developers. "I am not willing to spend ONE second ... wondering when something fails whether it is a security issue or not". Heads up, Bucky - it's your job, very specifically, your job, to spend a lot of time wondering how something will fail, and whether or not it's because of a security issue. If not the developer, then who? Tech support? What you get wrong in Development comes back a thousand fold to Tech Support.&lt;/LI&gt;
&lt;LI&gt;Owning and reading "Writing Secure Code" is only the start. You actually have to &lt;U&gt;get&lt;/U&gt; it. You have to live it and breathe it - and keep abreast of new issues that aren't covered in the book.&lt;/LI&gt;
&lt;LI&gt;Testing security in to the product never works. It's too late by then, because the insecurity is already there, and it's good at hiding. All testing does is demonstrate that your testing was unable to find the holes.&lt;/LI&gt;
&lt;LI&gt;Most code is never run by anyone other than the developer, until it gets to a few thousand users&amp;nbsp;- as such, it always runs as administrator under its test environment, so it never fails until it reaches the user.&lt;/LI&gt;
&lt;LI&gt;Developers are not administrators.&amp;nbsp;Most of them don't even know what group policy is, let alone how to spell it. Even in a managed domain, developers' machines are segregated into their own OU, so that the developers can pretty much do whatever they want with "their" machines. As a result, unit tests are never run on machines that mimic production environments, even for in-house applications.&lt;/LI&gt;
&lt;LI&gt;You can teach as much as you like, but some people just aren't that interested in learning.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Rather than asking for reasons why a developer shouldn't be an administrator, development team managers should be asking why a developer ever &lt;U&gt;should&lt;/U&gt; be an administrator. Have an administrator account, perhaps, but almost all of a developer's work should be done as a local user, unless that developer is producing an administration tool designed only to be run by administrators.&lt;/P&gt;
&lt;P&gt;[Nods go out to &lt;A class="" title="The Windmill (not the London theatre)" href="http://msmvps.com/blogs/bradley/archive/2007/01/11/the-windmill.aspx"&gt;Susan Bradley&lt;/A&gt; and &lt;A class="" title="Secure software education. Does it start with our tools?" href="http://silverstr.ufies.org/blog/archives/000995.html"&gt;Dana Epps&lt;/A&gt;, who brought this article to my attention in the first place.]&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=484875" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/alunj/archive/tags/General+Security/default.aspx">General Security</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Programmer+Hubris/default.aspx">Programmer Hubris</category><category domain="http://msmvps.com/blogs/alunj/archive/tags/Things+I+Learned+At+Microsoft/default.aspx">Things I Learned At Microsoft</category></item></channel></rss>