<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OJ's rants &#187; Security</title>
	<atom:link href="http://buffered.io/category/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://buffered.io</link>
	<description>What would OJ do?</description>
	<lastBuildDate>Mon, 06 Sep 2010 09:30:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Websites are Hard to Build</title>
		<link>http://buffered.io/2008/11/26/websites-are-hard-to-build/</link>
		<comments>http://buffered.io/2008/11/26/websites-are-hard-to-build/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 11:08:24 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[misconception]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[websites]]></category>

		<guid isPermaLink="false">http://buffered.io/?p=585</guid>
		<description><![CDATA["It's just a small site, how hard can it be?" "I thought you could do it for me as a favour. It's not a complicated site." "This would take me an afternoon, but I don't have time, can you do it for me?" Have you ever heard these comments before? Have you heard ones that [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://buffered.io/wp-content/uploads/2008/11/elope-harlequin-jester.jpg" alt="Uninformed client" title="Uninformed client" style="float: left; margin-right: 5px; margin-bottom: 5px;" /><br />
<blockquote>
<p>"It's just a small site, how hard can it be?"</p>
<p>"I thought you could do it for me as a favour. It's not a complicated site."</p>
<p>"This would take me an afternoon, but I don't have time, can you do it for me?"</p>
</blockquote>
<p>Have you ever heard these comments before? Have you heard ones that are similar? I've been hearing them a lot in the last few weeks and it's starting to get to me.</p>
<p>I have just had a chat with a mate who is also suffering this pain, and that conversation is what inspired me to write this, the first random rant in a while. </p>
<p>Let me start by saying that <em>building software is <strong>hard</strong></em>. Building <em>quality</em> software is <strong>harder</strong>. I've been in the industry for 10 years now, and I can say with a certain level of confidence (and perhaps a little bit of authority) that it's harder than most people think -- particularly business users, clients and lots of family and friends.</p>
<p>Let me follow that on by saying that websites are software (no way!). That puts them in the "hard" basket. Every site, even if it's a static page with some simple content, comes with its own set of challenges -- and those challenges are rarely understood by anyone who hasn't experienced the pain of building software.</p>
<p>The point of this post it to give a little bit of exposure to some of these issues. I hope that this post gets read by those people who have plans to have some sort of software built but haven't really got a clue what's involved.</p>
<h2>Requirement Issues</h2>
<p>Let's be fair ... you don't know what you want. You <em>think</em> you do, but you really don't. You have an idea for something that will either make your life easier or "be really cool", but as far as actually <strong>thinking</strong> about how it would function ... ? You haven't done that at all.</p>
<p>Here lies the first of the big stumbling blocks. You want a website, because "everyone has a website these days" for almost everything. Started a new business? You must have a website! Released an album? You must have a website! Had a child? You must have a website! Never had a website? You must have a website!</p>
<p>Before you dive headlong into the quest to find the person to build the site for you, have a good long think about what it is you want that site to be. What is its purpose? What content is required? Will it be dynamic? Will it be static? Will it be data-driven and require a <a href="http://en.wikipedia.org/wiki/Content_management_system" title="Content Management System">Content Management System</a>? Do you want other people to submit content? Do you want to have the facility available for readers to add their own comments? Will it be product driven and need the ability for people to buy stuff directly from the site? Do you need it to work on all browsers? Does it require access via a mobile phone or hand-held gadget?</p>
<p>These questions need to be answered well before any design is even contemplated, let alone structure and technical architecture. Do yourself and your site development team a favour. Think long and hard about what you want, and while you're doing that, ponder what possible issues you might face. The more issues you think of now, the cheaper it will be to build the site that fits your needs. Not just that, but you'll reduce the "scope on a rope" which results in the blowout of timelines and budgets.</p>
<h2>Design Issues</h2>
<p>We're coming to the end of 2008 and yet people still don't realise that development is <strong>not the same as design</strong>. Ask yourself the question: if design is part of development, then why do people make a living out of website design? The answer is simple: It's a big job, and it's very hard to do it right. I'm a developer, and I feel that there are very few (if any) areas of development that I couldn't do well in (yes, I'm arrogant ;)), but I can tell you this for certain: I am <strong>not a designer</strong>. <a href="http://shiftperception.com/blog/" title="Shiftperception">Dan</a> will no doubt appreciate that comment <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';)' class='wp-smiley' /> </p>
<p>It's true, I am not a designer. I can not design websites. I can do the technical desing, the architecture and the implementation. I can not do the design. Creating the right design for a website isn't an easy thing to do. I can tell you when people get it right, and I can tell you when people get it wrong. I can't tell you why <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>So, again, do yourself a favour. Get a proper web designer with a great portfolio of projects and go through the ideas you have with them. They will end up providing you an interface which makes sense for what you're trying to do. Do not fall into the trap of assuming that this part of the process isn't important. Yes, up front the cost most appear higher, but in the long run you will not regret it.</p>
<h2>Technical Issues</h2>
<p>Stumbling block number 3 is the lack of understanding of the technical issues. It's no surprise though, considering that most people wanting sites are not technical in nature. While it's fine for a client to not have (or want) an understanding of the technical issues, it's certainly <em>not</em> fine for them to ignore the fact that they even exist. Sticking your head in the sand and saying things like "well you'll figure it out" or "isn't that what I'm paying you for" doesn't really cut the mustard, particularly when you haven't thought about what you want in the first place.</p>
<p>When building websites there are all kinds of technical hurdles to leap over. To name a few...</p>
<ul>
<li><strong>Platform</strong> - I think most of the non-techie readers will have no clue of what I mean here. The platform is what the site runs on. That is, the operating system, the runtime, the software that supports it, etc.</li>
<li><strong>Cross-browser compatibility</strong> - The biggest issue in any Internet-facing website is cross-browser issues. Not all browsers were made equally. Each and every one has its own set of quirks, and the people responsible for building the interface to the site need to cater for all these quirks. If they don't, then they may alienate a subset of potential readers which would do damage to the site's potential traffic and income. <strong>DO NOT</strong> underestimate how painful this can be. Yes, there are tools out there which apparently take care of these issues for you, but let me tell you that most of the time they fail too. Be prepared for a great deal of work to go into making your site look and behave on the same on a variety of browsers. As a small side-note, some browsers actually behave differently on, say, Windows compared to how they would on, say, Mac OSX.</li>
<li><strong>Secure payments</strong> - Sounds easy right? "I just want the ability for people to enter credit card details and pay for stuff." Unfortunately it isn't that simple. You have all kinds of issues to worry about if you want that to happen directly in your site. You have to set up <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security" title="Transport layer security">SSL</a>, you have to arrange for a proper payment portal to site behind your site and handle the requests. You need to make sure your site is set up in such a way that any malicious users can not buy stuff without paying, nor have honest users' information compromised and shared. There are other options, such as <a href="http://www.paypal.com/" title="PayPal">PayPal</a> and <a href="https://payments.amazon.com/sdui/sdui/index.htm" title="Amazon Payments">Amazon</a>, but these facilities operate externally and won't appear "incorporated" in the site.</li>
<li><strong>Accessibility</strong> - You've done well if you already know what this is. In short, it refers to your sites ability to be read by people who are visually impaired who use devices such as <a href="http://en.wikipedia.org/wiki/Screen_reader" title="Screen reader">screen readers</a>. If you want your site to be fully accessible, then expect a great deal more effort to be involved. Your site needs to be structured in a special way and it needs to be <strong>fully</strong> compliant with a markup standard (such as <a href="http://www.w3.org/TR/html4/sgml/loosedtd.html" title="HTML 4.0">HTML 4.0 Transitional</a>).</li>
<li><strong>Hosting</strong> - This issue comes with a stack of other issues that most people don't even think about (sometimes even developers!). Do you have your own host? Do you have a shared host? Dedicated host? Do you need it in your own country? Do you need Windows or Linux? Do you need email facilities? Do you need SSL? Do you need a <a href="http://en.wikipedia.org/wiki/Content_Delivery_Network" title="Content delivery network">CDN</a>? Choosing a location for your site is affected by so many things. For example, if you're looking for a fully secure site which keeps track of user details and sensitive information (such as credit cards) then a shared hosting solution is an <em>EPIC FAIL</em>. In case the reason isn't obvious I'll tell you. If you use a shared host, then the entire machine is only as secure as the weakest account. If another site, owned by someone else, is compromised then the attacker owns the box which contains YOUR sites as well.</li>
<li><strong>Database</strong> - This isn't just about which one to use. It's about how to use it. Databases are underestimated and often misunderstood. It's <em>very</em> easy to do databases wrong. This is a real kicker for those applications that are very database heavy. In particular, applications which require complex relationships and/or deep searching capabilities. If your application relies on an insanely speedy, distributed database or is search-heavy, you had best get yourself a DB guru ... and be prepared to pay for them! A recent example with some interested details was recently posted on <a href="http://blog.stackoverflow.com/2008/11/sql-2008-full-text-search-problems/" title="SQL 2008 Full Text Search Problems">StackOverflow</a>, go have a read!</li>
<li><strong>Traffic</strong> - If you're aiming to build a site that isn't going to be used often or doesn't have a great deal of content, then this might not be so much of an issue. But if you have a site that is going to be bombarded with traffic, don't expect your first cut of your system to, er, cut it. I once heard a semi-famous man say "<a href="http://www.codinghorror.com/blog/archives/000957.html" title="Everything is fast for small n">Everything is fast for small <em>n</em>"</a>, and he's dead right. In development and testing, your app will probably fly. But under load, with thousands of people hitting it at the same time, it may just keel over and die. Be prepared to face this problem in the development stage.</li>
<li><strong>Maintainability</strong> - I left this one last because it's a little verbose and somewhat random. So many things can affect the maintainability of the site. The main problem here though is that in general, the idea of maintenance after a site has been developed is far from anyone's thoughts. Maintenance is where you'll spend most of your cash long term. Minimising the potential issues during development really is key to making a site which isn't going to cost the earth to maintain or enhance. The most common cause of highly unmaintainable websites is "Little Johnny" (LJ). LJ is the bloke that someone knows through a friend of a friend, or through the family. He's the guy who "knows stuff about computers". Of course, that means that he can &lt;sarcasm&gt;build commercial websites that are flexible, secure, fast, extendible, easy to maintain and that WORK&lt;/sarcasm&gt;. In all seriousness, you might know someone who knows something about computers, but if you're serious about your site, then get someone who knows what they're doing. You'll pay more in the long run for someone who doesn't. Either that, or take one of your employees, and put them through a course so that they can learn how it's done. To sum up, if you want to reduce the cost of maintenance there is a lot of work involved, and your developers need to know what they're doing. Be prepared for a lot of work in this area.</li>
</ul>
<h2>Testing Issues</h2>
<p>Testing? What's that?</p>
<p>It's frightening that even in Enterprise software, testing is generally an afterthought. Recently I was fortunate enough to be part of a team where testing was a huge part of the development process. It was <em>really</em> good and the result was a seriously higher quality application.</p>
<p>Developers do not know how to test their own code properly. Sure, they can write unit tests, and they do some form of manual functional testing on a daily basis while they're building the software. This is <strong>not</strong> the same as having a full test plan and suite of tests to verify the quality of the application.</p>
<p>Do yourself a favour, spend some of your budget and get some testers in. They will put your application/site through its paces instead of your users!</p>
<h2>Deployment Issues</h2>
<p>Once you've worked with a development team, you'll become very familiar with the following phrase:<br />
<blockquote>
<p>It works on my machine.</p>
</blockquote>
<p>It's something that you'll hear constantly <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>The point here is that it is very common for things to work in the development environment, but end up breaking when deployed to a production environment. Deployment is another often overlooked area of the process. When it <em>is</em> considered, it's underestimated.</p>
<p>Be careful. Here be dragons. Before you get stuck, speak to someone who <a href="http://johnmcfadyen.spaces.live.com/" title="John Mcfadyen's Windows Installer blog">knows what they're doing</a>.</p>
<h2>Support Issues</h2>
<p>So you've managed to ship your application. It's online, it's deployed and it's running. But something goes wrong. The site breaks every now and then. Users are having issues with the payment portal. People using Firefox on Mac OSX can't sign in. Reports are coming back with incorrect values.</p>
<p>Do you have a plan in place to handle these requests? Do you have a <a href="http://en.wikipedia.org/wiki/Bugtracker" title="Bug tracker">bug tracking system</a>? Do you have a support team ready to handle requests? Have you kept any of the development team on board to help you with the support issues?</p>
<p>Generally, the answer to all of these questions is: no. My advice would be to make it a yes. Put a plan in place to help you with the teething issues once you've gone live. Trust me, there <em>will</em> be issues.</p>
<h2>Conclusion</h2>
<p>I hope that the target audience have a little more visibility of the issues that are faced when building websites (and software in general). I hope that they learn from it and take some of the advice and do proper preparation before undertaking a development project.</p>
<p>Finally, I really do hope that it stops some of you from coming out with the comments listed at the start of this post <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>As always, feedback and comments are welcomed and appreciated. Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2008/11/26/websites-are-hard-to-build/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>OpenDNS is Wicked</title>
		<link>http://buffered.io/2008/08/18/opendns-is-wicked/</link>
		<comments>http://buffered.io/2008/08/18/opendns-is-wicked/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 12:03:42 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips/Tricks]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[Freeware]]></category>

		<guid isPermaLink="false">http://buffered.io/?p=508</guid>
		<description><![CDATA[Over the last couple of weeks the DNS timeouts and lags I've been experiencing at home have made the web experience a little dire. My ISP is actually pretty darned good, but for some reason they seem to have glitches with their DNS servers every now and then. The last time it happened I wasn't [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Use OpenDNS to make your Internet faster, safer, and smarter." href="http://www.opendns.com/share/"><img src="http://images.opendns.com/buttons/use_opendns_155x52.gif" width="155" height="52" style="border:0; float:right; margin-left:5px;margin-bottom;5px" alt="Use OpenDNS" /></a>Over the last couple of weeks the DNS timeouts and lags I've been experiencing at home have made the web experience a little dire. My <a href="http://internode.on.net/" title="Internode">ISP</a> is actually pretty darned good, but for some reason they seem to have glitches with their DNS servers every now and then. </p>
<p>The last time it happened I wasn't able to get <em>any</em> sites to respond. I ended up popping some manual DNS server entries into my router which I had archived in a "welcome" email that I had received when I first signed up for my Internet account. These worked well for a while, but eventually ended up going offline and so I had to look for another option.</p>
<p>Enter <a href="http://opendns.org/" title="OpenDNS">OpenDNS</a>. A free DNS service with a stack of features that anyone can use. I'll go over a few of them.</p>
<p>First up is <strong>Content filtering</strong>. What a fab idea! Offsite content filtering that stops dodgey and unwanted stuff before it even hits your modem. OpenDNS supports content filtering in a couple of ways which makes it really easy to generally filter out particular sites and content.</p>
<p><a href="http://buffered.io/wp-content/uploads/2008/08/opendns_content_filtering_levels.png" rel="lightbox[508]"><img src="http://buffered.io/wp-content/uploads/2008/08/opendns_content_filtering_levels-150x150.png" alt="Content Filtering" title="Content Filtering" width="150" style="float:left; margin-right:5px; margin-bottom:5px;" rel="lightbox[opendns]" /></a>The content filtering mechanism is quite extensive. You have the option of choosing a predefined "filtering level", each of which defines a set of site categories which will be filtered out for viewers on your network. The options go from <em>Minimal</em>, which simply blocks known <a href="http://en.wikipedia.org/wiki/Phishing" title="Phishing">phishing</a> sites, through to <em>High</em> which covers everything from porn and illegal activities to video sharing sites.</p>
<p><a href="http://buffered.io/wp-content/uploads/2008/08/opendns_content_filtering_custom.png" rel="lightbox[508]"><img src="http://buffered.io/wp-content/uploads/2008/08/opendns_content_filtering_custom-150x150.png" alt="Custom Content Filtering" title="Custom Content Filtering" width="150" style="float:right; margin-left:5px; margin-bottom:5px;" rel="lightbox[opendns]" /></a>There is also a <em>Custom</em> level which allows you to choose the categories that you want filtered. This is the long-hand version of the predefined levels mentioned above, which is great as it let's you pick and choose if you want finger-grained control.</p>
<p><a href="http://buffered.io/wp-content/uploads/2008/08/opendns_site_block.png" rel="lightbox[508]"><img src="http://buffered.io/wp-content/uploads/2008/08/opendns_site_block-150x150.png" alt="Site Blocking" title="Site Blocking" width="150" style="float:left; margin-right:5px; margin-bottom:5px;" rel="lightbox[opendns]" /></a>Lastly, as far as filtering goes, you have the option of allowing or blocking sites as a hard rule. This is handy if you know that a particular site is getting caught in your filter but you know for sure that it's safe. This happens surprisingly often, so having a whitelist is very handy. Being able to block a stack of ad sites before they even hit your browser is also a winner, hence the blacklist feature is great too.</p>
<p><a href="http://buffered.io/wp-content/uploads/2008/08/opendns_client.png" rel="lightbox[508]"><img src="http://buffered.io/wp-content/uploads/2008/08/opendns_client-150x150.png" alt="OpenDNS Client" title="OpenDNS Client" width="150" style="float:right; margin-left:5px; margin-bottom:5px;" rel="lightbox[opendns]" /></a>Thankfully OpenDNS supports <strong>IP address auto-update</strong>. Over time, you'll no doubt get different IP addresses from your ISP as your DHCP leases expire or when you reconnect your modem to your service. Given that OpenDNS needs to have some way of determining who you are, IP address really is the only way. So to help keep OpenDNS up-to-date with your current IP (and hence, keep applying your filtering rules), there is a client application that you can have running in your system tray which contacts the service periodically and makes sure that it has the latest IP. While this is a great idea it's a bit crap that you have to run a client application. It's a shame that they didn't decide to support the use of another dynamic addressing system such as <a href="http://dyndns.org/" title="DynDns">DynDns.org</a> (lots of modems have built-in support for updating services like DynDns automatically).</p>
<p><a href="http://buffered.io/wp-content/uploads/2008/08/opendns_customisation.png" rel="lightbox[508]"><img src="http://buffered.io/wp-content/uploads/2008/08/opendns_customisation-150x150.png" alt="Customisation" title="Customisation" width="150" style="float:left; margin-right:5px; margin-bottom:5px;" rel="lightbox[opendns]" /></a>For those who like to make their services feel cosey, OpenDNS supports <strong>customisation</strong> of various bits of functionality. For example, you're able to change the logo picture (this is more of an interest to site admins). You can also modify messages that are displayed when sites are blocked for various reasons. For those of you on home networks, specifying more meaningful messages for those, shall we say, "less technical" family members will no doubt be beneficial in reducing the number of support calls.</p>
<p><a href="http://buffered.io/wp-content/uploads/2008/08/opendns_shortcuts.png" rel="lightbox[508]"><img src="http://buffered.io/wp-content/uploads/2008/08/opendns_shortcuts-150x150.png" alt="Shortcuts" title="Shortcuts" width="150" style="float:right; margin-left:5px; margin-bottom:5px;" rel="lightbox[opendns]" /></a><strong>Network shortcuts</strong> are another nifty feature. A network shortcut is essentially a bookmark which works across the entire network. All you have to do is specify a name for your shortcut, and the site that it redirects to, and you're done. Once the shortcut has been saved, all you have to do to get to the site is type in the name of the shortcut. When the DNS request is made, OpenDNS looks for any shortcuts by that name that exist in your list, and if found, it will redirect the user to the appropriate site. Groovey!</p>
<p>At first you don't believe it, but OpenDNS is <strong>surprisingly quick</strong>. I wouldn't say that I have conducted a huge set of performance tests and benchmarks, but I would say that it by far outperforms my ISP's DNS servers as far as responsivity is concerned. Not just that, but <strong>it works</strong>. I am yet to see a DNS lookup fail requiring me to retry.</p>
<p>The final redeeming feature of OpenDNS is that it's constantly updated and secure. <a href="http://www.doxpara.com/?p=1185">Flaws in the DNS system</a>, for example, have already been patched. This reduces the chances of you dealing with an insecure DNS server (such as the one sitting at your ISP) and ending up at a site that might be a little unsavoury.</p>
<p>To sum up, I really think OpenDNS is a great service. It's fast, feature-rich and very handy. For anyone with a family/kids or a need/desire to filter out some of the f**ked up content that lives on the web (such as this site ;)), this service is for you. Give it a spin!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2008/08/18/opendns-is-wicked/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>.NET-fu: Signing an Unsigned Assembly (without Delay Signing)</title>
		<link>http://buffered.io/2008/07/09/net-fu-signing-an-unsigned-assembly-without-delay-signing/</link>
		<comments>http://buffered.io/2008/07/09/net-fu-signing-an-unsigned-assembly-without-delay-signing/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 02:13:23 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tips/Tricks]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[disassemble]]></category>
		<category><![CDATA[ilasm]]></category>
		<category><![CDATA[ildasm]]></category>
		<category><![CDATA[MSIL]]></category>
		<category><![CDATA[sign]]></category>
		<category><![CDATA[snk]]></category>
		<category><![CDATA[strong name]]></category>

		<guid isPermaLink="false">http://buffered.io/?p=373</guid>
		<description><![CDATA[This article is also available in: Italian The code-base that I am currently working with consists of a large set of binaries that are all signed. The savvy .NET devs out there will know that any assembly that's used/referenced by a signed assembly must also be signed. This is an issue when dealing with third-party [...]]]></description>
			<content:encoded><![CDATA[<p>This article is also available in: <a href="http://www.otherbit.com/modules/blog/BlogContent.aspx?ID=174" title=".NET-FU : come trasformare in SIGNED un assembly UNSIGNED (senza ricorrere al DELAY SIGNING)">Italian</a></p>
<hr/>
The code-base that I am currently working with consists of a large set of binaries that are all <a href="http://msdn.microsoft.com/en-us/library/xc31ft41.aspx" title="Sign an Assembly with a Strong Name">signed</a>. The savvy .NET devs out there will know that any assembly that's used/referenced by a signed assembly must <em>also</em> be signed.</p>
<p>This is an issue when dealing with third-party libraries that are not signed. Sometimes you'll be lucky enough to be dealing with vendor that is happy to provide a set of signed assemblies, other times you won't. If your scenario fits the latter (as a recent one did for my colleagues and I), you need to sign the assemblies yourself. Here's how.</p>
<p><em>Note:</em> <a href="http://msdn.microsoft.com/en-us/library/t07a3dye(VS.80).aspx" title="Delay Signing an Assembly">delay signing</a> is not covered in this article.</p>
<h2>Scenario 1 - Foo and Bar</h2>
<p><strong>Foo</strong> is the component that you're building which has to be signed.<br />
<strong>Bar</strong> is the third-party component that you're forced to use that <em>isn't</em>.</p>
<p><img src="http://buffered.io/wp-content/uploads/2008/07/foobar.png" alt="Relationship between Foo and Bar" /><br />
Grab <a href="http://buffered.io/wp-content/uploads/2008/07/bar.zip" title="Project/Binary for Bar"><em>Bar.dll</em> and project</a> along with <a href="http://buffered.io/wp-content/uploads/2008/07/foobar.zip" title="Project/Binary for Foo"><em>Foo.dll</em> and project</a> to see a source sample.</p>
<p>You'll notice <em>Foo</em> has a .snk which is used to sign <em>Foo.dll.</em> When you attempt to compile <em>Foo</em> you get the following error message:<br />
<blockquote>
<p>Assembly generation failed -- Referenced assembly 'Bar' does not have a strong name</p>
</blockquote>
<p>We need to sign <em>Bar</em> in order for <em>Foo</em> to compile.</p>
<p><img src="http://buffered.io/wp-content/uploads/2008/07/step1.jpg" style="float: right; margin-left: 5px; margin-bottom: 2px;" alt="Disassemble Bar" /><br />
<h3>Step 1 - Disassemble Bar</h3>
<p>We need to open a command prompt which has the .NET framework binaries in the <a href="http://en.wikipedia.org/wiki/Path_%28computing%29" title="Path">PATH</a> <a href="http://en.wikipedia.org/wiki/Environment_variable" title="Environment variable">environment variable</a>. The easiest way to do this is to open a Visual Studio command prompt (which is usually under the "Visual Studio Tools" subfolder of "Visual Studio 200X" in your programs menu). Change directory so that you're in the folder which contains <em>Bar.dll</em>.</p>
<p>Use <a href="http://msdn.microsoft.com/en-us/library/f7dy01k1(VS.80).aspx" title="MSIL Disassembly">ildasm.exe</a> to disassemble the file using the <strong>/all</strong> and <strong>/out</strong>, like so:</p>
<pre>
C:\Foo\bin> ildasm /all /out=Bar.il Bar.dll
</pre>
<p>The result of the command is a new file, <em>Bar.il</em>, which contains a dissassembled listing of <em>Bar.dll</em>.</p>
<p><img src="http://buffered.io/wp-content/uploads/2008/07/step2.jpg" style="float: right; margin-left: 5px; margin-bottom: 2px;" alt="Rebuild and Sign Bar" /><br />
<h3>Step 2 - Rebuild and Sign Bar</h3>
<p>We can now use <a href="http://msdn.microsoft.com/en-us/library/496e4ekx.aspx" title="MSIL Assembler">ilasm</a> to reassemble <em>Bar.il</em> back into <em>Bar.dll</em>, but at the same time specify a strong-name key to use to sign the resulting assembly. We pass in the value <em>Foo.snk</em> to the <strong>/key</strong> switch on the command line, like so:
<div style="clear:both;"></div>
<pre>
C:\Foo\bin> ilasm /dll /key=Foo.snk Bar.il

Microsoft (R) .NET Framework IL Assembler.  Version 2.0.50727.1434
Copyright (c) Microsoft Corporation.  All rights reserved.
Assembling 'Bar.il'  to DLL --> 'Bar.dll'
Source file is ANSI

Assembled method Bar.Bar::get_SecretMessage
Assembled method Bar.Bar::.ctor
Creating PE file

Emitting classes:
Class 1:        Bar.Bar

Emitting fields and methods:
Global
Class 1 Methods: 2;
Resolving local member refs: 1 -> 1 defs, 0 refs, 0 unresolved

Emitting events and properties:
Global
Class 1 Props: 1;
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved
Writing PE file
Signing file with strong name
Operation completed successfully
</pre>
<p><em>Bar.dll</em> is now signed! All we have to do is reopen <em>Foo</em>'s project, remove the reference to <em>Bar.dll</em>, re-add the reference to the new signed assembly and rebuild. Sorted!</p>
<h2>Scenario 2 - Foo, Bar and Baz</h2>
<p><strong>Foo</strong> is the component that you're building which has to be signed.<br />
<strong>Bar</strong> is the third-party component that you're forced to use that <em>isn't</em>.<br />
<strong>Baz</strong> is another third-party component that is required in order for you to use <em>Bar</em>.</p>
<div class="LargeImage"><img src="http://buffered.io/wp-content/uploads/2008/07/foobarbaz.png" alt="Relationship between Foo, Bar and Baz"/></div>
<p>Grab <a href="http://buffered.io/wp-content/uploads/2008/07/baz.zip" title="Project/Binary for Baz"><em>Baz.dll</em> and project</a>, <a href="http://buffered.io/wp-content/uploads/2008/07/barbaz.zip" title="Project/Binary for Bar"><em>Bar.dll</em> and project</a> along with <a href="http://buffered.io/wp-content/uploads/2008/07/foobarbaz.zip" title="Project/Binary for Foo"><em>Foo.dll</em> and project</a> for a sample source.</p>
<p>When you attempt to build <em>Foo</em> you get the same error as you do in the previous scenario. Bear in mind that this time, <strong>both</strong> <em>Bar.dll</em> and <em>Baz.dll</em> need to be signed. So first of all, follow the steps in <strong>Scenario 1</strong> for both <em>Bar.dll</em> and <em>Baz.dll</em>.</p>
<p>Done? OK. When you attempt to build <em>Foo.dll</em> after pointing the project at the new <em>Bar.dll</em> no compiler errors will be shown. Don't get too excited <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>When you attempt to <strong>use</strong> <em>Foo.dll</em> your world will come crashing down. The reason is because <em>Bar.dll</em> was originally built with a reference to an <u>unsigned version</u> of <em>Baz.dll</em>. Now that <em>Baz.dll</em> is signed we need to force <em>Bar.dll</em> to reference the <strong>signed</strong> version of <em>Baz.dll</em>.</p>
<p><img src="http://buffered.io/wp-content/uploads/2008/07/step3.jpg" style="float: right; margin-left: 5px; margin-bottom: 2px;" alt="Hack the Disassembled IL" /><br />
<h3>Step 1 - Hack the Disassembled IL</h3>
<p>Just like we did in the previous steps we need to disassemble the binary that we need to fix. This time, make sure you disassemble the new binary that you created in the previous step (this binary has been signed, and will contain the signature block for the strong name). Once <em>Bar.il</em> has been created using ildasm, open it up in a <a href="http://www.vim.org/" title="VIM - secretGeek loves it.. no really, he does!">text editor</a>.</p>
<p>Search for the reference to <em>Baz</em> -- this should be located a fair way down the file, somewhere near the top of the actual code listing, just after the comments. Here's what it looks like on my machine:</p>
<pre>.assembly extern /*23000002*/ Baz
{
  .ver 1:0:0:0
}</pre>
<p>This external assembly reference is missing the all-important public key token reference. Before we can add it, we need to know what the public key token is for <em>Bar.dll</em>. To determine this, we can use the <a href="http://msdn.microsoft.com/en-us/library/k5b5tt23(VS.80).aspx" title="Strong Name Tool">sn.exe</a> utility, like so:</p>
<pre>C:\Foo\bin> sn -Tp Baz.dll

Microsoft (R) .NET Framework Strong Name Utility  Version 3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.

Public key is
0024000004800000940000000602000000240000525341310004000001000100a59cd85e10658d
9229d54de16c69d0b53b31f60bb4404b86eb3b8804203aca9d65412a249dfb8e7b9869d09ce80b
0d9bdccd4943c0004c4e76b95fdcdbc6043765f51a1ee331fdd55ad25400d496808b792723fc76
dee74d3db67403572cddd530cadfa7fbdd974cef7700be93c00c81121d978a3398b07a9dc1077f
b331ca9c

Public key token is 2ed7bbec811020ec
</pre>
<p>Now we return to <em>Bar.il</em> and modify the assembly reference so that the public key token is specified. This is what it should look like after modification:</p>
<pre>.assembly extern /*23000002*/ Baz
{
  .publickeytoken = (2E D7 BB EC 81 10 20 EC )
  .ver 1:0:0:0
}</pre>
<p>Save your changes.</p>
<p><img src="http://buffered.io/wp-content/uploads/2008/07/step4.jpg" style="float: right; margin-left: 5px; margin-bottom: 2px;" alt="Reassemble Bar" /><br />
<h3>Step 2 - Reassemble Bar</h3>
<p>This step is just a repeat of previous steps. We are again using ilasm to reassemble <em>Bar.dll</em>, but this time from the new "hacked" <em>Bar.il</em> file. We must use the exact same command line as we did previously, and we still need to specify the <em>Foo.snk</em> for signing the assembly. To save you having to scroll up, here it is again:</p>
<pre>C:\Foo\bin> ilasm /dll /key=Foo.snk Bar.il

Microsoft (R) .NET Framework IL Assembler.  Version 2.0.50727.1434
Copyright (c) Microsoft Corporation.  All rights reserved.
Assembling 'Bar.il'  to DLL --> 'Bar.dll'
Source file is ANSI

Assembled method Bar.Bar::get_SecretMessage
Assembled method Bar.Bar::.ctor
Creating PE file

Emitting classes:
Class 1:        Bar.Bar

Emitting fields and methods:
Global
Class 1 Fields: 1;      Methods: 2;
Resolving local member refs: 3 -> 3 defs, 0 refs, 0 unresolved

Emitting events and properties:
Global
Class 1 Props: 1;
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved
Writing PE file
Signing file with strong name
Operation completed successfully
</pre>
<p>Open up <em>Foo</em>'s project, remove and re-add the reference to <em>Bar.dll</em>, making sure you point to the new version that you just created. <em>Foo.dll</em> will not only build, but this time it will run!</p>
<h2>Disclaimer</h2>
<p>"Hacking" third-party binaries in this manner <strong><em>may</em> breach the license agreement</strong> of those binaries. Please make sure that you are not breaking the license agreement before adopting this technique.</p>
<p>I hope this helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2008/07/09/net-fu-signing-an-unsigned-assembly-without-delay-signing/feed/</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>Microsoft want to Annoy you, Cancel or Allow?</title>
		<link>http://buffered.io/2008/04/12/microsoft-want-to-annoy-you-cancel-or-allow/</link>
		<comments>http://buffered.io/2008/04/12/microsoft-want-to-annoy-you-cancel-or-allow/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 11:43:12 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[brave]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[UAC]]></category>

		<guid isPermaLink="false">http://buffered.io/?p=339</guid>
		<description><![CDATA[Before I even started using Vista, I hated UAC. I read about it all over the place, and laughed at the stupidity involved in asking users to constantly "cancel or allow" every action they wanted to take. As soon as I was forced to use Vista for work (both on my work laptop and on [...]]]></description>
			<content:encoded><![CDATA[<p>Before I even started using Vista, I hated <a href="http://technet2.microsoft.com/WindowsVista/en/library/0d75f774-8514-4c9e-ac08-4c21f5c6c2d91033.mspx" title="User Access Control">UAC</a>. I read about it all over the place, and laughed at the stupidity involved in asking users to constantly "cancel or allow" every action they wanted to take. As soon as I was forced to use Vista for work (both on my work laptop and on site with the client) I turned off UAC on both installations. </p>
<p>UAC has been a nagging frustration for a lot of Vista users, and has also been a <a href="http://www.youtube.com/watch?v=VKM1cAtAdtQ" title="Get a Mac ad">joke to the Apple fans</a> as well:<br />
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/VKM1cAtAdtQ&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/VKM1cAtAdtQ&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><br />
Yeah, I laughed too.</p>
<p>But I didn't really give UAC any credit. I didn't think about why it was there, all I thought was that MS were being stupid. That was until a couple of days ago when I was thinking about it (don't ask me why <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';)' class='wp-smiley' /> ).</p>
<p>After deliberating on it for a day or so, trying to come up with the motivation behind it, <a href="http://arstechnica.com/news.ars/post/20080411-vistas-uac-security-prompt-was-designed-to-annoy-you.html" title="Vista's UAC security prompt was designed to annoy you">this landed in my RSS feed reader</a> and made it clear. MS are taking a hit in the hope that devs will sort their shit out!</p>
<p>Windows users have had a long history of being administrators of their own machines by default. In general, most users do not login using an account with low levels of privileges. In Windows it has been too much of a pain in the butt to get anything done if you <em>don't</em>. Is that the fault of MS and Windows? Yes it is, but it's not their fault alone.</p>
<p>Looking back through history, developers who write software for Windows haven't really been particularly brilliant when it comes to being mindful of security. This is something that needs to change. Some really basic applications, office applications, editors and even games have require administrator privileges to run. It's no wonder that everyone decides to give themselves an admin account. Why would you want to face constant issues with security when all the things you're trying to use need the elevated access?</p>
<p>The fault lies with the developers. They need to get into the habit of writing software that doesn't require elevated privileges. UAC is part of MS's effort to force the plebian developers to sort their shit out. By the looks of it, it's beginning to work. It's a brave move on MS's part, as pissing off users to force developers to be mindful of security is not necessarily the smartest thing to do. Vista has enough pitfalls as it is without having something that's designed to being annoying popping up in your face all the time.</p>
<p>Let's hope the trend continues. In a perfect world it'd be fine to have something like UAC running all the time, so long as it doesn't appear all the time!</p>
<p>Note for those who care: sorry for the poorly written post <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> I couldn't be bothered fixing it up, it's late and it's time for bed!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2008/04/12/microsoft-want-to-annoy-you-cancel-or-allow/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to be an Idiot</title>
		<link>http://buffered.io/2008/03/17/how-to-be-an-idiot/</link>
		<comments>http://buffered.io/2008/03/17/how-to-be-an-idiot/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 05:45:47 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://buffered.io/2008/03/17/how-to-be-an-idiot/</guid>
		<description><![CDATA[I've just done something stupid. I attempted to install a new plugin for WordPress without verifying the contents of the package. The result? I lost most of the file system under this website. From what I can see in the script, it also attempted to various other nasty things such as deleting files from outside [...]]]></description>
			<content:encoded><![CDATA[<p>I've just done something stupid. I attempted to install a new plugin for WordPress without verifying the contents of the package. The result? I lost most of the file system under this website. From what I can see in the script, it also attempted to various other nasty things such as deleting files from outside the web root, and emailing certain files to other websites. It's a good job I have file permissions set up so that the web server can't access the file system outside of its root. I'm lucky it didn't attempt to trash the database too!</p>
<p>I've requested a partial restore of content from our web host so that I don't have to go through the pain of adding all the content again. Hopefully it'll be back up soon.</p>
<p>I'm not happy, but I only have myself to blame. Whatever you do, unless you're grabbing from the official WordPress plugin repo, make sure you check out the contents of the plugin before you attempt to install it!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2008/03/17/how-to-be-an-idiot/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Biosham &#8482;</title>
		<link>http://buffered.io/2007/08/23/biosham/</link>
		<comments>http://buffered.io/2007/08/23/biosham/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 06:20:32 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Being in the Industry]]></category>
		<category><![CDATA[Digital Rights]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[WTF]]></category>

		<guid isPermaLink="false">http://buffered.io/2007/08/23/biosham/</guid>
		<description><![CDATA[I can fully understand the desire a developer has to protect their creation from being copied illegally. I can understand why some steps would be taken to mitigate the risk of losing money due to piracy. What I can't understand is why some companies go so far with their anti-piracy measures that it starts to [...]]]></description>
			<content:encoded><![CDATA[<p>I can fully understand the desire a developer has to protect their creation from being copied illegally. I can understand why some steps would be taken to mitigate the risk of losing money due to piracy. What I can't understand is why some companies go <em>so far</em> with their anti-piracy measures that it starts to have an impact on the honourable, paying customers.</p>
<p>I have <a href="http://buffered.io/2006/10/14/microsoft-vista-licence-restrictions/" title="Microsoft Vista License Restrictions">bitched</a> in the <a href="http://buffered.io/2006/09/10/office-registration-and-activation/" title="Office Registratoin and Activation">past</a> about how activation is a pain in the neck. But that example is nothing like what <a href="http://www.2kgames.com/" title="2K Games">2K Games</a> have recently inflicted on the buyers of their latest creation, <a href="http://www.2kgames.com/bioshock/" title="Bioshock">Bioshock</a>. Rather than throw a few links to a bzillion blog and forum posts that have covered it already, let me just give you the short version:</p>
<ol>
<li>Bioshock comes with <a href="http://www.securom.com/" title="SecuROM">SecuROM</a>.</li>
<li>It requires online activation before it can be played.</li>
<li>It can only be activated <strong>twice</strong>.</li>
</ol>
<p>On the surface this might not sound so bad, but when you think about it a little deeper it becomes obvious why this is such a pain in the arse. </p>
<p>SecuROM has a bit of a reputation amongst gamers, and not a good one at that. Most people who fork out the dollar to purchase a game don't want to be harassed afterwards. SecureROM does a good job of exactly that - harasssing. It usually requires you to insert the CD/DVD of the title while you play it. Again, this isn't a biggie for most people. But for a lot of gamers, changing CDs and DVDs constantly is annoying. I'd go as far as to say that it shits them up the wall! (yup, that one's for you, Vorlath, if you're reading <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';)' class='wp-smiley' /> ). If you buy the game legally, and you install the game legally, you should be allowed to play it legally without having to muck around with the discs.</p>
<p>Activation of games is fairly commonplace these days, but I don't think that's a good enough reason to enforce it on the buyer. In the case of Bioshock, the SecuROM activation does some sort of hashing of your hardware and operating system information before passing it to the Mothership for archiving. If you install it on another machine, the process happens again. Each time your hardware or operating system changes, you end up with a new "fingerprint". According to 2K Games, you're allowed two of these "fingerprints" against a given serial number and that's it. Do you think that's reasonable?</p>
<p>Before giving your answer, make sure you consider all the possible scenarios that might result in the need for reinstallation. Such as ...
<ul>
<li>... Windows biting the dust due to malware.</li>
<li>... hardware biting the dust for any reason.</li>
<li>... the need to put the game on a different machine which has higher specifications and hence can provide a more enjoyable gaming experience.</li>
<li>... the game refusing to run on a certain version of Windows (<em>cough</em> Vista <em>cough</em>).</li>
</ul>
<p>There are probably more reasons as well.</p>
<p>2K Games are saying that it's possible to uninstall the game before reinstalling on another machine and everything will continue to work fine. That's all well and good so long as you <em>can</em> uninstall the game. What happens if your machine is fried? Fat chance of uninstalling a game from a hard disk that burnt to a cinder. Good luck removing software from a machine that's been trashed by some nast virus. If any of the above does happen to you, then you're in for a rough ride convincing the support team to allow you to reinstall past your 2-installation limit.</p>
<p>I'm one of those people who frequently rebuilds their machine. When I do, I don't uninstall every bit of software before wiping and starting again. Usually the disks are repartitioned and the OS is reinstalled. I don't think twice about it. I don't think I'm the only one who would end up suffering because I forgot to uninstall a game that I know I have the original discs for.</p>
<p>Let's consider the long term issues that might arise from a mechansim like this. What happens when 2K decide that they've had enough of supporting Bioshock, and users require help with their activation? Simple: the users are left high and dry.</p>
<p>If you think buying a copy of the game through <a href="http://www.steampowered.com/" title="Steam">Steam</a> is going circumvent this level of protection, think again. Steam not only has its own security in place to prevent piracy, but it also delivers the SecuROM anti-piracy gizmos that you get in the boxed version. So you're not safe.</p>
<p>There are already reports of people in strife due to this stupid level of control. Legal users of the software are unable to play the game because they've been forced to reinstall operating systems, or try on different machines because of the hardware requirements of the game. This is just crap. If you buy the software, it shouldn't come with a stack of crap which prevents you from being able to use whenever and wherever you want.</p>
<p>What makes this worse is that those people who <em>do</em> pirate software do not have to put up with this kind of crap! They download, install and play. That's it. No tales of woe. No activation issues. No concern of not being able to reinstall on a beefier machine. Nothing. The pirate is the winner, not the legal consumer.</p>
<p>I take my hat off to 2K for being monumentally stupid. You've tarnished an arguably amazing game with your stupid anti-piracy antics. You've also managed to piss off half of the game playing population...</p>
<p>.. and that's <em>before</em> we take into account the <a href="http://kotaku.com/gaming/shortscreened/bioshocks-widescreen-pissing-people-off-291697.php" title"Bioshock's Widescreen Pissing People Off">widescreen</a> issue.</p>
<p><em>Edit: Have a read of <a href="http://forums.steampowered.com/forums/showthread.php?t=589874" title="Steampowered Forums">this</a>, <a href="http://forums.2kgames.com/forums/showthread.php?t=5527" title="2K Forums">this</a> and <a href="http://digg.com/pc_games/More_Bioshock_stupidness_you_can_only_install_the_game_twice_WTF" title="More Bioshock Stupidnesss (Digg)">this</a> if you want to see what other people are saying.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2007/08/23/biosham/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Digg is Being Used Against Itself</title>
		<link>http://buffered.io/2007/05/02/digg-is-being-used-against-itself/</link>
		<comments>http://buffered.io/2007/05/02/digg-is-being-used-against-itself/#comments</comments>
		<pubDate>Wed, 02 May 2007 02:00:09 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Digital Rights]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://buffered.io/2007/05/02/digg-is-being-used-against-itself/</guid>
		<description><![CDATA[Over the last day or so, stacks of people have been hammering digg as a revolt against their recent actions. For those of you who don't know, HD-DVD encryption was cracked recently and the master key which allows all movies to be ripped has been released across the web. Digg, in their infinite wisdom, decided [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last day or so, stacks of people have been hammering <a href="http://www.digg.com/" title="Digg" target="_blank">digg</a> as a revolt against their recent actions.  For those of you who don't know, HD-DVD encryption was cracked recently and the master key which allows all movies to be ripped has been released across the web. Digg, in their infinite wisdom, decided to kill off the original blog post (and apparently banned one or two users? - unconfirmed), resulting in an avalanche of posts preaching "free speach" and "fuck you Digg". Digg is now being dugg big time, and as a tool it's being used as a weapon against itself.</p>
<p>This is quite an interesting issue. Digg are obviously in a position where they have to remove anything that may be considered an infringment of copyright, otherwise they could be subject to hefty lawsuits which could result in the site being closed (have a read of <a href="http://blog.digg.com/?p=73" title="What's happening with the HD-DVD stories?" target="_blank">this</a> for a bit more information), but by the same token it almost goes against their whole business idea - sharing information that people want to have shared in a democratic fashion.</p>
<p>At the end of the day, the encryption key is just a bunch of numbers, and most people have a problem with the idea that a bunch of numbers can be patented/copyrighted. I have to say that I agree with them. A number is a number, it exists in so many forms, and can have so many meanings. Trying to prevent people from posting these numbers is a waste of time. There are some smart people out there using some pretty <a href="http://farm1.static.flickr.com/191/480556169_6d731d2416_o.jpg" target="_blank" rel="lightbox[218]">funny</a> and clever ways to post the number without actually stating that the number is the encryption key - which is perfectly legal.</p>
<p>Regardless of the politics, the cat is out of the bag. And from this point on, the 'Net community will no doubt be pushing to <a href="http://rudd-o.com/archives/2007/04/30/spread-this-number/" title="Spread this Number" target="_blank">spread this number</a> as far and as wide as possible.</p>
<p>What are your thoughts on this?</p>
<p>Edit: Kaz just sent me <a href="http://www.zazzle.com/product/235658543735065663" target="_blank">this awesome link</a>. I wonder if they'd have the power to rip the shirt off your back?!</p>
<p>Edit 2: So, the masses have been heard! Digg has <a href="http://blog.digg.com/?p=74" target="_blank">changed its tune</a> and will no longer be attempting to stop said key being shared. Hats off to them for taking a stance. The thing is, whether they try to stop it or not, the encryption key will <em>not</em> be removed from the web - it's out there, and people won't let it be brushed under the carpet.</p>
<p>Edit 3: Couldn't resist posting <a href="http://www.openjesus.org/2007/the-key" title="They Key" target="_blank">this</a>, it's bloody awesome (I'm talking about the pic).</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2007/05/02/digg-is-being-used-against-itself/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>DVD Cracker Nails Apple&#8217;s iPod Code</title>
		<link>http://buffered.io/2006/10/25/dvd-cracker-nails-apples-ipod-code/</link>
		<comments>http://buffered.io/2006/10/25/dvd-cracker-nails-apples-ipod-code/#comments</comments>
		<pubDate>Tue, 24 Oct 2006 22:27:16 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Digital Rights]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://buffered.io/2006/10/25/dvd-cracker-nails-apples-ipod-code/</guid>
		<description><![CDATA[You gotta hand it to this guy, he says that he "doesn't like closed systems", which is pretty darned obvious The man, Jon Lech Johansen, who years ago cracked the DVD encryption known as CSS, and released (with two other unknowns) the software that could be used to decrypt DVDs (called DeCSS), has taken his [...]]]></description>
			<content:encoded><![CDATA[<p>You gotta hand it to this guy, he says that he "doesn't like closed systems", which is pretty darned obvious <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> The man, Jon Lech Johansen, who years ago cracked the DVD encryption known as <a href="http://en.wikipedia.org/wiki/Content_Scrambling_System" title="Content Scrambling System" target="_blank">CSS</a>, and released (with two other unknowns) the software that could be used to decrypt DVDs (called <a href="http://en.wikipedia.org/wiki/DeCSS" title="DeCSS" target="_blank">DeCSS</a>), has taken his code-breaking career to a new level - he's nailed Apple iPod's <a href="http://www.andrewhargadon.com/blog/?p=36" title="iPod's Ecosystem" target="_blank">ecosystem</a> (or so he claims) by breaking their <a href="http://en.wikipedia.org/wiki/FairPlay" title="FairPlay" target="_blank">FairPlay DRM software</a>.</p>
<p>I have no reason to find his claims outrageous, since he's quite clearly experienced in this area (he was 15 when he cracked CSS after all), so it looks like Apple have got themselves an issue to deal with. It'll be interesting to see if they take steps to stop him and his new <a href="http://doubletwistventures.com/" title="DoubleTwist" target="_blank">DoubleTwist</a> venture from taking off, or releasing any information/software pertaining to the crack.</p>
<p>Check out <a href="http://www.smh.com.au/news/digital-music/apples-ipoditunes-code-cracked/2006/10/24/1161455702584.html" title="Apple's iPod code 'cracked' - Digital Music - Gadgets - Technology - smh.com.au" target="_blank">this SMH article</a> for a bit more info.</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2006/10/25/dvd-cracker-nails-apples-ipod-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Code Search</title>
		<link>http://buffered.io/2006/10/16/google-code-search/</link>
		<comments>http://buffered.io/2006/10/16/google-code-search/#comments</comments>
		<pubDate>Mon, 16 Oct 2006 08:22:36 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://buffered.io/2006/10/16/google-code-search/</guid>
		<description><![CDATA[The Search Kings have come up with another rippin' tool which allows you to crawl through source code for examples and whatnot. The Google Code Search is quite a cool utility - but it doesn't come without it's issues. I found an interesting link worthy of reading which talks about a few amusing results returned [...]]]></description>
			<content:encoded><![CDATA[<p>The Search Kings have come up with another rippin' tool which allows you to crawl through source code for examples and whatnot. The <a href="http://google.com/codesearch" title="Code Search" target="_blank">Google Code Search</a> is quite a cool utility - but it doesn't come without it's issues. I found an interesting link worthy of reading which talks about a few <a href="http://www.kottke.org/06/10/google-code-search" target="_blank">amusing results</a> returned from this facility, which I reckon lots of people should check out and be aware of.</p>
<p>So this begs the question: Is this going to be a tool which allows hackers to get acceess to bugs in software a heck of a lot quicker? I believe so. Is that a bad thing? No, I don't think so. In fact, it'll teach developers (the hard way) that they need to be aware of security issues well before they release the code - which can only be a good thing as it should have a positive affect on the software.</p>
<p>As a small side note, there can also be some <a href="http://www.theregister.co.uk/2006/10/13/code_outrage/" title="Apple in code search profanity outrage" target="_blank">embarrassing snippets</a> revealed which will make the big names cringe. So, maybe this will also teach developers to be a little more professional!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2006/10/16/google-code-search/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning Code Security</title>
		<link>http://buffered.io/2006/10/13/learning-code-security/</link>
		<comments>http://buffered.io/2006/10/13/learning-code-security/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 22:15:21 +0000</pubDate>
		<dc:creator>OJ</dc:creator>
				<category><![CDATA[Being in the Industry]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://buffered.io/2006/10/13/learning-code-security/</guid>
		<description><![CDATA[As a regular read of Scott Gu's blog (see blogroll) I often find nuggets of information that are handy for the work that I do, but I also often end up with a few questions The latest one that fired up a bit of thought was his post on guarding against SQL injection attacks. The [...]]]></description>
			<content:encoded><![CDATA[<p>As a regular read of Scott Gu's blog (see blogroll) I often find nuggets of information that are handy for the work that I do, but I also often end up with a few questions <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
<p>The latest one that fired up a bit of thought was his post on <a href="http://weblogs.asp.net/scottgu/archive/2006/09/30/Tip_2F00_Trick_3A00_-Guard-Against-SQL-Injection-Attacks.aspx" title="Guard Against SQL Injection Attacks" target="_blank">guarding against SQL injection attacks</a>.  The information posted very handy, and is something that I would assume most web developers already know, but it made me wonder how many devs out there <em>are</em> actually aware of these kinds of issues while they're building their applications.</p>
<p>I starting hacking code together from a young age, and I've written my fair share of code that I hope to God never made it onto the web <img src='http://buffered.io/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> I'd like to think that over the time that I've spent reading, writing and working I've gained a pretty good coverage of the code security issues that are faced when building all kinds of applications - though I'm sure I have a stack more to learn! One thing struck me though, and that was that almost none of this stuff was covered during my course of formal study at University.</p>
<p>I transferred to different Unis during my time as a student, and out of the 3 that I went to, <strong>none</strong> of them had any form of code security as part of the core syllabus. Sure, there were special subjects that you could take which focussed on things such as this, including SQL injection, buffer overflows, etc, but you actually had to <em>choose the subject</em> out of a stack of others to get a good amount of exposure to the principles.</p>
<p>As time goes by, it becomes harder and harder for the developer to get themselves into trouble when writing code due to the nature of the languages and the support that you get via the accompanying frameworks - but we do manage to find new and startling ways of creating holes in our softy that the malicious and crafty can exploit.</p>
<p>So I do think that learning at least the basics of code security (particularly in web-based environments) is something that every developer should do.  Sure, if you're using C# you might not have to worry about buffer overflows. If you're not using an SQL back-end, you won't have to worry about SQL injection. Regardless of the application and language, there are always different ways in which you can slip up. Coverage should be <strong>mandatory</strong> in courses at any formal education centre so that budding developers are aware of those issues before they hit the streets. To me, this is as obvious as having English and Maths as mandatory subjects during school if you're going to work as a coder!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffered.io/2006/10/13/learning-code-security/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
