<?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>Ian Dennis Miller &#187; security</title>
	<atom:link href="http://iandennismiller.com/blog/tag/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://iandennismiller.com/blog</link>
	<description>Essays and Whatnot</description>
	<lastBuildDate>Sun, 25 Jul 2010 02:46:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Passwords, and the Apple Keychain</title>
		<link>http://iandennismiller.com/blog/2010/05/passwords-and-the-apple-keychain/</link>
		<comments>http://iandennismiller.com/blog/2010/05/passwords-and-the-apple-keychain/#comments</comments>
		<pubDate>Wed, 19 May 2010 15:47:18 +0000</pubDate>
		<dc:creator>idm</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://iandennismiller.com/blog/2010/05/passwords-and-the-apple-keychain/</guid>
		<description><![CDATA[Some time around 2006, I started thinking about my online passwords in a new way. Until this point, I had used a collection of perhaps a dozen gibberish passwords, which I reused on various sites depending on the sensitivity of the site. For example, my bank account would use a nearly unique password, whereas a [...]]]></description>
			<content:encoded><![CDATA[<p>Some time around 2006, I started thinking about my online passwords in a new way. Until this point, I had used a collection of perhaps a dozen gibberish passwords, which I reused on various sites depending on the sensitivity of the site. For example, my bank account would use a nearly unique password, whereas a random forum would use a very commonly reused password.</p>
<p>This worked acceptably well, but I frequently had to ask myself: &#8220;which password did I use when I signed up for this service?&#8221; In response to having to guess my own passwords, I made two decisions: I would start writing my passwords down, and I would make them all unique and randomly generated.  Four years later, I am using a totally different system, and I&#8217;ll explain all of my reasoning.</p>
<p><span id="more-183"></span></p>
<p>To facilitate my random password approach, I started using 3&#215;5 index cards and a card filer. I added A-Z tabs, and I generally filed cards according to the domain name of the service (e.g. paypal.com is filed under P). I wrote a quick perl script to make 10 random passwords at a time, and I would pick one from the list and write it down on the index card. I really liked the concept of a purely non-digital password storage system, because it would be essentially unhackable without physical access. <i>Essentially unhackable</i> &#8211; more on this later.</p>
<p>There were several drawbacks to the index card system. For brevity, I&#8217;ll just list them:</p>
<ul>
<li>writing some characters by hand is ambiguous. I confused capital I, lowercase L, and numeral 1 all the time. Capital O and numeral 0 are also a trick.</li>
<li>it&#8217;s possible to copy the password incorrectly</li>
<li>it is extremely difficult to create a backup copy, so catastrophic loss is a possibility</li>
<li>if someone has physical access to the index cards, they have access to your accounts</li>
<li>it&#8217;s tedious to type in a random password every time you log in</li>
<li>it doesn&#8217;t scale well after about 400 accounts</li>
</ul>
<p>The scaling problems were the real killer. For example, did I file sandbox.paypal.com under P for paypal or S for sandbox? I don&#8217;t remember, so I need to perform a linear search through both letters.  Or, since a disproportionate number of words start with S, then it became a more tedious task to flip through all the S cards in order to find an S site, whereas a site that started with Y would be pretty quick to look up since there were fewer. Eventually, it got to the point that I knew it was too much of a chore to look up cards, and on that basis, I became too lazy to log in to my accounts! Total failure.</p>
<p><img src="http://iandennismiller.com/blog/wp-content/uploads/2010/05/Keychain-Icon.png" width="64" height="64" alt="Keychain Icon.png" style="float:left;" /> The solution for me is to use <a href="http://en.wikipedia.org/wiki/Apple_Keychain">Apple Keychain</a>. If you&#8217;re a <a href="http://en.wikipedia.org/wiki/Getting_things_done">GTD adherent</a>, then you&#8217;ll understand what I mean when I say this is my trusted system for account information. How did I reconcile a digital password storage with my original goal of keeping my passwords offline in order to make it unhackable? It was when I realized that both offline passwords and the keychain can be successfully attacked with a keystroke logger. If someone went to those lengths to get a password, then it wouldn&#8217;t matter how it was originally stored; the password could be intercepted regardless.</p>
<p>Why use Apple Keychain? Based on my list of drawbacks for the index cards, here&#8217;s a list of pro-Keychain points:</p>
<ul>
<li>built-in random password generator</li>
<li>keyword search</li>
<li>simple cut-and-paste workflow makes it very easy to enter passwords without typing</li>
<li>keychain itself is password protected</li>
<li>passwords are <a href="http://en.wikipedia.org/wiki/Triple_DES">Triple DES</a> encrypted (which should be acceptable until the year 2030)</li>
<li>simple to back up keychain file</li>
<li>slick integration with many applications, including Mail.app, subversion, and Safari/Chrome.</li>
</ul>
<p>I&#8217;m currently at about 900 accounts (yes &#8211; this is deserving of a separate post unto itself) and the system is working great. I think this scales to meet my requirements, and probably beyond. In practical terms, a password that used to take 30 second to retrieve is now instant.  I probably save 5 minutes per day by switching away from index cards, and I am avoiding untold frustrations.  In all, I recommend Apple Keychain highly.  &nbsp;&nbsp;</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://iandennismiller.com/blog/2010/05/passwords-and-the-apple-keychain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wireless Security in 2009: Recommendations</title>
		<link>http://iandennismiller.com/blog/2009/07/wireless-security-in-2009-recommendations/</link>
		<comments>http://iandennismiller.com/blog/2009/07/wireless-security-in-2009-recommendations/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 16:12:59 +0000</pubDate>
		<dc:creator>idm</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[802.11]]></category>
		<category><![CDATA[802.11b]]></category>
		<category><![CDATA[802.11g]]></category>
		<category><![CDATA[802.11i]]></category>
		<category><![CDATA[802.11n]]></category>
		<category><![CDATA[MAC]]></category>
		<category><![CDATA[MAC address]]></category>
		<category><![CDATA[radius]]></category>
		<category><![CDATA[recommendation]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[SSID]]></category>
		<category><![CDATA[TKIP]]></category>
		<category><![CDATA[WEP]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[wireless]]></category>
		<category><![CDATA[wireless access point]]></category>
		<category><![CDATA[wireless AP]]></category>
		<category><![CDATA[wireless network]]></category>
		<category><![CDATA[wireless router]]></category>
		<category><![CDATA[wireless security]]></category>
		<category><![CDATA[WPA]]></category>
		<category><![CDATA[WPA2]]></category>
		<category><![CDATA[WPA2-PSK]]></category>

		<guid isPermaLink="false">http://iandennismiller.com/blog/?p=48</guid>
		<description><![CDATA[Yesterday, I  grabbed an 802.11b/g/* router from Chinatown ($32 &#8211; can&#8217;t beat that) and set out to use my laptop&#8217;s wireless network card.  I hadn&#8217;t done this before because I was (justifiably) concerned about wireless security, so I wanted to make sure that a breach of the wireless network wouldn&#8217;t turn into a breach of [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I  grabbed an 802.11b/g/* router from Chinatown ($32 &#8211; can&#8217;t beat that) and set out to use my laptop&#8217;s wireless network card.  I hadn&#8217;t done this before because I was (justifiably) concerned about wireless security, so I wanted to make sure that a breach of the wireless network wouldn&#8217;t turn into a breach of the wired LAN (which includes a printer and a few sensitive servers). This post collects some of my research and observations, and it concludes with my recommendations for how you can secure your own wireless network&#8230;  or at a minimum, it tells you how you could if you were willing to spend $32 on a new wireless access point.</p>
<p><span id="more-48"></span></p>
<h4>Network Topology: equal distrust for the Internet as for wireless</h4>
<p>A series of events brought me to the point where this became realistic, the most important of which is that I got an extra router for the LAN.  Let me briefly explain the current network topology I use, which allows me to equally distrust public Internet traffic as much as I distrust my wireless router.</p>
<p>- We connect to the internet via DSL and a router, which uses NAT to provide a private address space behind the router (10.0.50.x)</p>
<p>- The &#8220;wired&#8221; router connects to the DSL+router, which uses NAT to create a separate private address space (10.0.51.x)</p>
<p>- The wireless router also connects to the DSL+router, and as you might have guessed, there is yet another private address space behind this router (10.0.52.x)</p>
<p>So, if you&#8217;re using an ethernet cable, your connection cannot be routed to a machine connected via wireless, and vise versa.  Barring an attack against the wired router, the address space is simply not routable.  I&#8217;ll eventually provide a VPN into the wired network, so I can print using a wireless connection (since the printer is only connected to the wired network).</p>
<p>At this point, I was pretty happy about running a wireless access point, because I was really no worse off if someone attacked the wired LAN via wireless or via the public Internet.  Basically, both vectors are equally untrusted.</p>
<h4>Digging into WPA2</h4>
<p>Still, I was uneasy about actually using my wireless network, and I hoped that wireless security had advanced beyond <a href="http://en.wikipedia.org/wiki/Fluhrer,_Mantin,_and_Shamir_attack">the famous WEP debacle</a>, which made it downright trivial to attack older wireless access points.  <a href="http://en.wikipedia.org/wiki/WPA2#WPA2">The solution is to use WPA2,</a> which is a better protocol that only runs on newer hardware.  This is not without its pitfalls, and some impressive work has been undertaken to attack WPA2.  Notably, <a href="http://code.google.com/p/pyrit/">the pyrit project</a> has made great progress using 3d acceleration hardware to create downright feasible attacks against WPA2 with a pre-shared key (WPA2-PSK).</p>
<p>An alternative to using a pre-shared key with WPA2 is to use a <a href="http://freeradius.org/">key server technology called Radius</a>, but because I didn&#8217;t wish to run another server, I needed to learn more about the pyrit approach so that I could still use WPA2-PSK.</p>
<h4>The Pyrit Approach</h4>
<p>Pyrit can make use of multiple 3d accelerator cards, and now can even cluster machines for parallel processing, in order to pre-calculate values that are useful in attacking a wireless network.  In other words, it is plausible for anyone with enough friends (or perhaps a government budget) to get the raw computing power required to crunch the numbers.  After saving these computed values to disk (a process that takes hours or days), they can be rapidly transmitted to the access point in a few minutes, and the attack will have been executed.</p>
<p>The key here comes down to disk storage, instead of processor power, because we might as well assume that processor power isn&#8217;t realistically limited anymore.  From the pyrit blog itself, <a href="http://pyrit.wordpress.com/the-twilight-of-wi-fi-protected-access/#comment-103">it appears PSK values longer than 10 ASCII characters</a> cannot affordably be stored on current hard drives, even though it is definitely possible to perform the necessary calculations.</p>
<p>The pyrit attack is further thwarted by the incorporation of the wireless access point&#8217;s SSID in the WPA2 calculations, so while it is possible to pre-calculate an attack for common SSIDs (like &#8220;linksys&#8221; or &#8220;default&#8221;) it is only possible to attack a novel SSID after some reconnaissance to determine that value of the target SSID.  Most impromptu pyrit attacks will probably involve common SSIDs that ship as the default setting for wireless access points.</p>
<h4>Other considerations</h4>
<p>There is also the issue of traffic over the air, where the question is to either use TKIP or AES.  This one is easy: there is <a href="http://en.wikipedia.org/wiki/WPA2#Weakness_in_TKIP">a weakness in TKIP</a>, so don&#8217;t use it.</p>
<p>If you know ahead of time which machines will exclusively use your access point, then MAC address filtering will be an extra security measure.  While MAC addresses can be spoofed, it takes extra time to do so and can be a hassle to brute force your way through the address space.  MAC address filtering is an option on my wireless router, so I have chosen to disallow all network access except for the few wireless devices that I know the MAC address of.</p>
<p>So you know, it can become a hassle to keep your MAC address whitelist up to date if you keep adding new wireless devices, like if you have friends who drop by with their laptops.  It&#8217;s probably worth the 60 seconds it takes to add a new device, but YMMV.</p>
<h4>Recommendations</h4>
<p>After all is said and done, it looks like it&#8217;s possible to create a relatively secure wireless access point.  Here are my recommendations:</p>
<p>- Use WPA2-PSK</p>
<p>- Use a PSK that is the maximum allowable length (probably around 63.)  Use a completely random method that includes all allowable ASCII characters (mixed case, numbers, and symbols).  Your wireless access point will probably call this a &#8220;password&#8221; or something, but just know that this is the &#8220;pre-shared key&#8221; (PSK).</p>
<p>- Encrypt all traffic with AES instead of TKIP</p>
<p>- Use a randomly generated SSID to name your access point</p>
<p>- tell your access point to NOT broadcast its SSID.  This will prevent it from showing up in the list of available access points when someone clicks on their wireless network card to scan.  This won&#8217;t deter the most determined attackers, but do this if it&#8217;s an option.</p>
<p>- Use MAC address filtering.  Disallow all by default, and whitelist the devices you want to explicitly allow.</p>
<p>This should be a pretty good starting point, and it works with my $32 wireless router.  There may be new attacks in the future, and hard drive space will obviously get cheaper, but I feel pretty comfortable at this precise moment.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandennismiller.com/blog/2009/07/wireless-security-in-2009-recommendations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
