<?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>Big Trapeze</title>
	<atom:link href="http://bigtrapeze.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bigtrapeze.com</link>
	<description></description>
	<lastBuildDate>Fri, 15 Feb 2013 19:41:50 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>ABB &#8211; Always Be Backing-Up</title>
		<link>http://bigtrapeze.com/2013/01/18/abb-always-be-backing-up/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=abb-always-be-backing-up</link>
		<comments>http://bigtrapeze.com/2013/01/18/abb-always-be-backing-up/#comments</comments>
		<pubDate>Fri, 18 Jan 2013 07:06:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://bigtrapeze.com/?p=68</guid>
		<description><![CDATA[<p>This post doesn&#8217;t need any fancy rhetoric or a long drawn-out story. The simple fact is I terminated an Amazon AWS instance this week&#8211;and instead of terminating the one I wanted, I accidentally deleted my own. So, I lost a lot of blog posts. I lost my personal site, and about 7 years worth of [...]</p><p>The post <a href="http://bigtrapeze.com/2013/01/18/abb-always-be-backing-up/">ABB &#8211; Always Be Backing-Up</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>This post doesn&#8217;t need any fancy rhetoric or a long drawn-out story. The simple fact is I terminated an Amazon AWS instance this week&#8211;and instead of terminating the one I wanted, I accidentally deleted my own. So, I lost a lot of blog posts. I lost my personal site, and about 7 years worth of content. I lost my dad&#8217;s site. I lost a Simpson&#8217;s-themed Lorem Ipsum generator. But, through the magic of caching (Yahoo was surprisingly better than Google), I was able to get some of my blog back. I lost a lot of posts, but, in reality, they were pretty much worthless anyway&#8211;I&#8217;ve recovered the ones I wanted. If you&#8217;re missing something you liked, let me know, and I&#8217;ll add it back.</p>
<p>The post <a href="http://bigtrapeze.com/2013/01/18/abb-always-be-backing-up/">ABB &#8211; Always Be Backing-Up</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2013/01/18/abb-always-be-backing-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Google Drive as Your Personal Git Repository</title>
		<link>http://bigtrapeze.com/2012/08/25/using-google-drive-as-a-git-repository/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-google-drive-as-a-git-repository</link>
		<comments>http://bigtrapeze.com/2012/08/25/using-google-drive-as-a-git-repository/#comments</comments>
		<pubDate>Sat, 25 Aug 2012 18:35:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jeffnunn.com/bigtrapeze.com/?p=37</guid>
		<description><![CDATA[<p>GitHub is a great tool, but sometimes you need a private Git repository and don’t want to have to cough up the extra $$ per-month for that. Enter cloud storage. You can get this lots of places now: Dropbox, Amazon Cloud Drive, and Google Drive to name a few. You can take advantage of your free space to store your private repos with just a few [...]</p><p>The post <a href="http://bigtrapeze.com/2012/08/25/using-google-drive-as-a-git-repository/">Using Google Drive as Your Personal Git Repository</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://github.com/" target="_blank">GitHub</a> is a great tool, but sometimes you need a private <b>Git</b> repository and don’t want to have to cough up the extra $$ per-month for that. Enter cloud storage. You can get this lots of places now: <a href="http://dropbox.com/" target="_blank">Dropbox</a>, <a href="https://www.amazon.com/clouddrive/learnmore" target="_blank">Amazon Cloud <b>Drive</b></a>, and <a href="https://drive.google.com/start" target="_blank"><b>Google</b> <b>Drive</b></a> to name a few. You can take advantage of your free space to store your private repos with just a few simple steps. This process will work the same on the sites just mentioned, but these instructions are specific to Google Drive. Open your Terminal to get started:</p>
<ol>
<li>Go to your project’s directory and “git init” to init a new repo.</li>
<li>Add any untracked files with “git add .”</li>
<li>Commit those files with a message using “git commit -m ‘Your commit message’”</li>
</ol>
<p>We’re now going to use our <b>Google</b> <b>Drive</b> and create a blank repo. First, <strong>make sure <a href="https://www.google.com/intl/en_US/drive/start/index.html?authuser=0">Google Drive</a> is running.</strong> Then, open Terminal, and</p>
<ol>
<li>Create a new, blank project with
<pre class="brush: bash; gutter: false; title: ; notranslate">git init –-bare ~/Google\ Drive/git/myproject.git</pre>
<p>. Be sure to change <em>myproject</em> to whatever your git repo’s name will be.</li>
<li>Add the origin to your project with
<pre class="brush: bash; gutter: false; title: ; notranslate">git remote add origin ~/Google\ Drive/git/myproject.git</pre>
</li>
<li>Your origin is now set, meaning you can now push with
<pre class="brush: bash; gutter: false; title: ; notranslate">git push -u origin master</pre>
<p> (on future pushes, you can just <em>“git push”</em> without the “-u origin master”)</li>
</ol>
<p>That’s it–you can verify it worked by going to a new directory and trying to clone your project</p>
<ol>
<li>cd /tmp</li>
<li>git clone ~/Google\ Drive/git/myproject.git</li>
</ol>
<p>and you’ll see it clone your repo into a new folder.</p>
<p>The post <a href="http://bigtrapeze.com/2012/08/25/using-google-drive-as-a-git-repository/">Using Google Drive as Your Personal Git Repository</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2012/08/25/using-google-drive-as-a-git-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Giveo Levels Up</title>
		<link>http://bigtrapeze.com/2012/07/26/giveo-levels-up/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=giveo-levels-up</link>
		<comments>http://bigtrapeze.com/2012/07/26/giveo-levels-up/#comments</comments>
		<pubDate>Thu, 26 Jul 2012 07:17:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://bigtrapeze.com/?p=78</guid>
		<description><![CDATA[<p>I started a web app in 2005, Giveo, which allowed people to raise money and awareness for causes that were important to them. I wanted to give people the ability to  connect with their friends and families to receive micro-donations–and Giveo was the first online social philanthropy site, beating superstars like Kickstarter and Facebook Causes to [...]</p><p>The post <a href="http://bigtrapeze.com/2012/07/26/giveo-levels-up/">Giveo Levels Up</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<div id="singlePost">
<p>I started a web app in 2005, <strong>Giveo</strong>, which allowed people to raise money and awareness for causes that were important to them. I wanted to give people the ability to  connect with their friends and families to receive micro-donations–and Giveo was the first online social philanthropy site, beating superstars like Kickstarter and Facebook Causes to the punch. Giveo’s original tagline was “Giveo: Grassroots Philanthropy” — and it was a message that defined the soul of what I was trying to do. There were (and still are) a lot of  sleepless nights, or days with my head crammed into a book on “how-to” do programming, engineering, and designs, but after almost 2-years of iterations, headaches, and changes–it finally got some traction.</p>
<p>What started as a side project grew into a full time web startup in 2009. I met a couple of great guys who purchased Giveo from me, then in turn offered me a job to keep building it up. Over the course of those years, we found a few partners and investors, and an amazing team was assembled. We teamed up with large non-profits to help them with fundraising campaigns, cause marketing, and customer insights.</p>
<p>We raised money for amazing causes like the disaster in Haiti, school lunch programs for underprivileged children, and ASPCA pet rescue. And then late 2011, Giveo changed focus a bit–and changed names. We became <em>SpotRight</em>–a company built to spot trends and make sense of billions of datapoints, by analyzation of unending streams of data now proliferating across the globe. We use that information to better serve our clients, so that by helping them understand their customers with clarity and depth–they are able to raise more money, more awareness, or be more successful in their campaigns.</p>
<p>Today, I’m happy to say we’ve raised another $1M and acquired a fantastic company called <em>SpotInfluence</em>–a brilliant collection of beautiful minds that will bolster our offerings and put us at the forefront of both #bigdata analysis and social analytics. So, although<em>Giveo</em> is now <a href="http://spotright.com/">SpotRight</a>, it’s still got the DNA of the little company that could, and is now the bigger company that <em>will</em>. Thank you for your continued support–I can’t wait to see what the future holds.</p>
<p>Jeff</p>
</div>
<p>The post <a href="http://bigtrapeze.com/2012/07/26/giveo-levels-up/">Giveo Levels Up</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2012/07/26/giveo-levels-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enable Wildcard SSL on a Heroku Rails App</title>
		<link>http://bigtrapeze.com/2012/05/16/enabling-wildcard-ssl-on-a-heroku-rails-app/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=enabling-wildcard-ssl-on-a-heroku-rails-app</link>
		<comments>http://bigtrapeze.com/2012/05/16/enabling-wildcard-ssl-on-a-heroku-rails-app/#comments</comments>
		<pubDate>Wed, 16 May 2012 19:31:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jeffnunn.com/bigtrapeze.com/?p=52</guid>
		<description><![CDATA[<p>Typically installing SSL is challenging enough, but add Heroku and the need for a wildcard SSL certificate in the mix and you’ve got bigger issues. Here are the steps to get it done with as little fuss as possible: Purchase a wildcard SSL certificate. I used RapidSSL, and while any will work, Comodo seems to be the [...]</p><p>The post <a href="http://bigtrapeze.com/2012/05/16/enabling-wildcard-ssl-on-a-heroku-rails-app/">Enable Wildcard SSL on a Heroku Rails App</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Typically installing SSL is challenging enough, but add Heroku and the need for a wildcard SSL certificate in the mix and you’ve got bigger issues. Here are the steps to get it done with as little fuss as possible:</p>
<ol>
<li>Purchase a wildcard SSL certificate. I used <a href="http://www.rapidssl.com/buy-ssl/wildcard-ssl-certificate/">RapidSSL</a>, and while any will work, <a href="https://dnsimple.com/pricing">Comodo seems to be the one currently recommended by DNSimple</a>, which we’ll use later in these instructions.</li>
<li>Next, add the <a href="https://devcenter.heroku.com/articles/ssl-endpoint-beta">SSL Endpoint add-on</a> to your app via Heroku. It’s an additional $20 a month to enable this service, that’s just the cost-of-doin-bidness with Heroku.</li>
<li>So, at this point, you have your wildcard SSL installed with Heroku. You can tell if you installed it correctly by dropping into the Heroku CLI (which you can install via the <a href="https://toolbelt.heroku.com/">Heroku Toolbelt</a>) and issuing a “heroku certs”.  This should give you an endpoint, which looks something like: <code>waterfall-9359.herokussl.com. </code>You’ll need your specific endpoint for our next step, so copy it and keep it ready.</li>
<li>Finally, create an account with someone like DNSimple. <a href="http://blog.dnsimple.com/introducing-the-alias-record/" target="_blank">Without an ALIAS service like this</a>, you won’t be able to enable SSL on your root domain (like <em>myapp.com</em> or <em>www.myapp.com</em>). If you used DNSimple, go to the <em>Advanced Editor </em>for your domain. You’ll want to add the following:<br />
- an ALIAS record for your root url, <em>myapp.com</em>, which points to your Heroku-issued endpoint, like: <em>waterfall-9359.herokussl.com<br />
</em>- a CNAME record for your <em>www</em>-based url, <em>www.myapp.com</em>, which points to the same endpoint above, like <em>waterfall-9359.herokussl.com<br />
</em>- CNAME records for each subdoman you wish to enable SSL on, like <em>blog.myapp.com</em> or <em>account.myapp.com,</em> each pointing to our Heroku endpoint</li>
<li> That should do it! The next step would be enabling SSL in your app, which is a straightforward process achieved by adding <code>config.force_ssl = true</code> to your application.rb file. (For more details on how to enable it in production only, <a href="http://www.simonecarletti.com/blog/2011/05/configuring-rails-3-https-ssl/" target="_blank">read this excellent blog post from Simone Carletti.</a>)</li>
</ol>
<p>The post <a href="http://bigtrapeze.com/2012/05/16/enabling-wildcard-ssl-on-a-heroku-rails-app/">Enable Wildcard SSL on a Heroku Rails App</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2012/05/16/enabling-wildcard-ssl-on-a-heroku-rails-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extracting a Salt from an MD5 Hash</title>
		<link>http://bigtrapeze.com/2012/04/05/extracting-a-salt-from-an-md5-hash/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=extracting-a-salt-from-an-md5-hash</link>
		<comments>http://bigtrapeze.com/2012/04/05/extracting-a-salt-from-an-md5-hash/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 02:21:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://jeffnunn.com/bigtrapeze.com/?p=12</guid>
		<description><![CDATA[<p>In December of 2011, members of hacktivist group Anonymous released a slew (over 860,000 records) of private data stolen from think-tank Stratfor. While I don&#8217;t condone the theft, I do 1) condone the attention it brings to a firm that prides itself on being both intelligent and secure&#8211;as a means of showing the public that no data is [...]</p><p>The post <a href="http://bigtrapeze.com/2012/04/05/extracting-a-salt-from-an-md5-hash/">Extracting a Salt from an MD5 Hash</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p><a href="http://mashable.com/2011/12/29/stratfor-credit-card-hack/">In December of 2011</a>, members of hacktivist group <a href="https://twitter.com/#!/AnonymousIRC/"><i>Anonymous</i></a> released a slew (over 860,000 records) of private data stolen from think-tank Stratfor. While I don&#8217;t condone the theft, I do 1) condone the attention it brings to a firm that prides itself on being both intelligent and secure&#8211;as a means of showing the public that no data is entirely secure, and 2) as a means of pointing out these insecurities in the hopes that it will make them <i>more</i> intelligent and <i>more</i> secure with our data.</p>
<p>I&#8217;ve seen the list, in an attempt to see if my own information was compromised. It was not (at least here, but was recently in the <span style="text-decoration: underline;">Zappos breach</span>), but I can&#8217;t say the same for almost a million other people. The list contains mostly inconsequential information&#8211;but it does have an encrypted password (along with the email address and username) for each person. After a cursory run through of several thousand random encrypted passwords, I was not able to crack any using the method <a href="http://bigtrapeze.com/2008/01/18/cracking-md5-hashes-with-the-webtionary/">I published a few years back.</a></p>
<p><b>Salting</b></p>
<p>These passwords are at least salted&#8211;<i>salting </i>is the process of taking a password and adding extra characters to it to make it more difficult to crack. If your password was &#8220;submarine&#8221; using MD5 encryption (which is what the majority of websites use to encrypt stored data) it would be encrypted as &#8220;<i>a9bdfa76aa6d76f7bde66e470cf98553</i>.&#8221; In an effort to make your data more secure, a programmer might <i>salt</i> your data with another word, like  &#8221;kangaroo,&#8221; by adding it to your password before storing it. So, instead of storing the MD5 hash of &#8220;submarine,&#8221; which might be easy for a hacker to guess if they accessed the user database, the password is stored as a hash of &#8220;submarinekangaroo,&#8221; which would be much harder for someone to guess. A smarter salt would be something random, like &#8220;tH7rWslwj6&#8243;, so that brute-force attacks on passwords with a word-list for salts would be rendered mostly useless. Try it yourself if you want: If you&#8217;re on a Mac, go into Terminal and type</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">md5 -s 'whatever-you-want'</pre>
<p>then hit Enter. What you&#8217;ll see is the hashed value of your string of text. Now try to add some characters to it&#8211;your own salt&#8211;and see how the results change. It&#8217;s important to realize that there&#8217;s no &#8220;unhash&#8221; method, per-se. There&#8217;s no such thing as</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">unmd5 -s 'a9bdfa76aa6d76f7bde66e470cf98553'</pre>
<p>and get &#8220;submarine&#8221; in response. But&#8211;if you go to Google and search for &#8220;a9bdfa76aa6d76f7bde66e470cf98553&#8243;, you&#8217;ll find plenty of posts telling you the answer is &#8220;submarine.&#8221; Salt <i>submarine</i> with your own new word (md5 -s &#8216;submarineastroturf&#8217;), then search for that&#8211;chances are, your search will come up empty. That&#8217;s the importance of a salt.</p>
<p><b>How does my website know my password then?</b></p>
<p>In most cases, they don&#8217;t. They keep the hashed version of your password, but they have no way of knowing what it actually is in &#8220;plain-text.&#8221; To see if the password you enter when you login  matches what they&#8217;ve stored in their database, they have to hash it, and compare it to what&#8217;s on file. So if your hashed password was stored as</p>
<p><i>8833f74b9da9cf81d33f6c6a79ac9985</i></p>
<p>and you entered &#8220;telescope&#8221; as your password, a program quickly converts your plain-text password to</p>
<p><i>8833f74b9da9cf81d33f6c6a79ac9985</i></p>
<p>and compares it to what&#8217;s stored. In this case, there&#8217;s a match&#8211;and you&#8217;re granted access to your account. If they happened to salt your password before storing it by adding the word &#8220;pineapple&#8221; to the beginning, then your stored password would be:</p>
<p><i>0cf7664d30e8a72b6b423148578ddfba</i></p>
<p>(again, you can confirm by typing md5 -s &#8216;pineappletelescope&#8217; in your terminal). So, when you enter &#8220;telescope&#8221; into your website&#8217;s login box, before it&#8217;s hashed, the website will add &#8220;pineapple&#8221; to your password, <i>then</i> hash it to compare with what&#8217;s stored in the database. You can see not only the importance of salting, but also knowing exactly what the salt is. Without it (without knowing <i>pineapple</i>, in this example), it would impossible to match the password you entered with what was stored.</p>
<p><b>Looking for patterns</b></p>
<p>So, we can assume that Stratfor is at least smart enough to salt their passwords&#8211;the question is, can we take 800+K hashed salted-passwords, and find any patterns or similarities in them? From that, could we build a frequency of the most common hashed passwords, then assume that those passwords are the same&#8211;and try to derive an algorithm that produces a salt? Can we get lucky and hope that Stratfor salted their passwords with either the username or email address of each user? Or did they use the same salt for every user? I would assume they wouldn&#8217;t use an email address&#8211;especially since a user can change their email address&#8211;so we&#8217;ll take that one out of the mix. I will, however, try the username as a salt&#8211;as that is typically something a user isn&#8217;t allowed to change.</p>
<p><b>The First Clue&#8211;No Duplicate Hashes</b></p>
<p>To begin, I sorted the 860,160 hashed-passwords alphabetically, and interestingly (at least in the few thousand I quickly scanned), there were no matches.</p>
<p><i>What does this mean?<br />
</i>It means that a different salt is being used for each person.</p>
<p><i>Why?<br />
</i>Because in a list of 860,160 passwords, the chances of <b><i>none</i> </b>being the same are infinitesimally small. Let&#8217;s say two people used the phrase &#8220;opensesame&#8221; as their password. The hash of this is:</p>
<p>e6078b9b1aac915d11b9fd59791030bf</p>
<p>Let&#8217;s now say that Stratfor salted all passwords when they stored them, and salted them with the phrase &#8220;fishbowl123&#8243; by appending it to the end of a user&#8217;s password. So, <i>opensesame</i> becomes <i>opensesamefishbowl123,</i> which is hashed as</p>
<p>8feb9db2775f81e3b152803bb9704fad</p>
<p>So, theoretically, if only 2 out of 860,160 people had the password of &#8220;opensesame&#8221;, we should see the hash <i>8feb9db2775f81e3b152803bb9704fad</i> show up at least twice. But there are no duplicates&#8211;and that indicates that the same salt isn&#8217;t being used for each person. This is too large a sample size to not have at least 2 people with the same password&#8211;<i>any</i> password. Since we learned above that the salt must be known in order for a website to check your password, we&#8217;ll assume that Stratfor made their salt based on something unique to the user.</p>
<p><b>The User Record</b></p>
<p>The user records for the Stratfor file include information like <i>name,</i> s<i>tratfor ID, user ID, user email address, timezone, picture, signature, theme, last login date, account creation date</i>, and a few trivial ones. We know that the salt most likely comes from one of these fields of information, and we know the salt needs to be unique to each user, so we can start eliminating some of these. The dates are interesting, but there is a good possibility that there are plenty of users with the same login date, or account creation date, even down to the hour or minute&#8211;so we can&#8217;t assume that is unique. We also know that there will be plenty of duplications of the timezone, so that one could be eliminated as well. The <i>theme</i> (which I assume was some sort of color theme or account theme for each user) can also fall under the &#8220;duplicate&#8221; category, but it falls under another greater category&#8211;which is that of a field where the value could change. For the salted password to work&#8211;the salt must always stay the same. We can also consider <i>user email address</i> as something changeable, as well as the user&#8217;s name&#8211;so we&#8217;ll eliminate those from our list of possible salt options.</p>
<p>That leaves us with 2 good options:</p>
<ul>
<li>user id</li>
<li>Stratfor id</li>
</ul>
<p>Because we know that the salt is unique to a user, we have a good starting point for our attack, using the two options above as our primary salt tests. We know that Stratfor isn&#8217;t using a random string for a salt&#8211;something that they&#8217;ve locked away in some file&#8211;because even if they did, there&#8217;s a great possibility we would have duplicate hashes&#8211;and we have none.</p>
<p><b>We have candidates for our salt, now what?</b></p>
<p>To do all the password crunching and text analysis, I&#8217;ll be using my new friend, Ruby on Rails. Rails makes it really easy to spin up a quick database and start throwing data in it and doing text manipulation. The first step is to clean up the list and throw it into a database table. I took the huge Stratfor file, removed the extraneous columns and imported the user records into a database.</p>
<p>Next I created a model for attempts. The attempts are based on the premise that at least one user out of the 860K will have one of the &#8220;<a href="http://www.tomshardware.com/news/imperva-rockyou-most-common-passwords,9486.html">10 most common passwords</a>&#8221; (which, incidentally, were taken from the leak of 32 MILLION passwords from RockYou.com&#8217;s compromised systems.)</p>
<p>The 10 passwords we&#8217;ll start with are:</p>
<ul>
<li>123456</li>
<li>12345</li>
<li>123456789</li>
<li>password</li>
<li>iloveyou</li>
<li>princess</li>
<li>1234567</li>
<li>12345678</li>
<li>abc123</li>
<li>monkey</li>
</ul>
<p>What we&#8217;ll do is take each of the 10 passwords, and add the user id to the beginning, test it, then add the user id to the end, and test it. For example, lets say the user&#8217;s password hash is &#8220;3d50169ccfe06ecf1bdf4c63fb199bd9&#8243;, their user id is &#8220;20,&#8221; and their Stratfor ID is &#8220;23087.&#8221;</p>
<p>I&#8217;ll take our first password, &#8220;123456,&#8221; prepend &#8220;20&#8243; to it, to get &#8220;20123456,&#8221; then get the hash (md5 -s &#8217;20123456&#8242;):</p>
<p>11720f3fa65c0fe57212ba6f12af1af1</p>
<p>No match. So now I&#8217;ll try &#8220;123456&#8243; and append &#8220;20&#8243; to it, to get &#8220;12345620,&#8221; then get the hash (md5 -s &#8217;12345620&#8242;):</p>
<p>594111f029cbea462f70398257ac0e7f</p>
<p>No match. Now I&#8217;ll try it with their Stratfor ID. No match? Now I&#8217;ll move to the next of our Top 10 passwords, &#8220;12345,&#8221; and continue the test. For each password in our list, we have to try 4 different combinations. That&#8217;s 40 combinations for our 10 passwords, tried across 860,160 rows, which means over 36 million tries.</p>
<p>If none of these works, the odds of the salt being based off one of our test columns seems slim, at which point we might consider that the hash is built off of more than one column (for example, prepending the <i>strafor id</i> to the password and appending the <i>user id</i> to the end). If that&#8217;s the case, our number of brute-force attempts increases exponentially&#8211;and that&#8217;s bad news for this exercise, but better news for those whose data is at risk.</p>
<p><b>The Results</b></p>
<p>Armed with my list of 10 common passwords and the Stratfor hash, I put Ruby to the test. Less than 20 minutes later (even running on an underpowered MacBook Air), the experiment was a success, and the results are stunning:</p>
<p>Of the 860,160 user accounts from the Stratfor file, 986 of the users had one of the ten common passwords. The salt, as it turns out, is the Stratfor ID, prepended to a user&#8217;s password. So, if your password happend to be &#8220;monkey,&#8221; and your Stratfor ID was &#8220;187519,&#8221; your password is based off the MD5 hash of &#8220;187519monkey.&#8221; (Incidentally, 14 people of 860,160 had the password <i>monkey. </i>The most common, sadly, were <i>123456</i> (483 occurrences), and <i>password </i>(285 occurrences).</p>
<p><b>What Does This Mean?</b></p>
<p>It means someone nefarious, knowing the salt column, could take it and run each of the users&#8217; passwords against a brute-force dictionary&#8211;and there is no doubt that the 986 number would greatly increase, giving the hacker access to thousands of accounts.</p>
<p>It also means that it only takes two people to have a bad password to crack a salt. If no-one in the 800K test had used one of those top 10 passwords, there&#8217;s a good chance I would&#8217;ve gone on to another method, having found no matches.</p>
<p>What does it mean to Stratfor, and companies like them? <i>You have to do a better job of protecting our data.</i> Salting is a good step towards protecting data, but if you don&#8217;t use it right, it&#8217;s only a minor stumbling block to someone with relatively little skill. Perhaps salting with data from multiple columns, or column data in reverse (maybe the username backwards), or a column on each end of the password (maybe a username and the account-created date), like &#8220;username<i>monkey</i>01-25-2012&#8243; would be better. The insecurity of our personal data is troublesome, and breaches happen almost every day. I can only hope this will help those who keep our data become more responsible in their protection of it.</p>
<p>The post <a href="http://bigtrapeze.com/2012/04/05/extracting-a-salt-from-an-md5-hash/">Extracting a Salt from an MD5 Hash</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2012/04/05/extracting-a-salt-from-an-md5-hash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using RABL to Display Multiple Models</title>
		<link>http://bigtrapeze.com/2012/03/22/using-rabl-to-display-multiple-models/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-rabl-to-display-multiple-models</link>
		<comments>http://bigtrapeze.com/2012/03/22/using-rabl-to-display-multiple-models/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 19:42:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Ruby/Rails]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jeffnunn.com/bigtrapeze.com/?p=57</guid>
		<description><![CDATA[<p>I had a scenario where I needed to show a collection of tweets AND a hash of stats related to those tweets,using RABL, a nice Rails Gem useful for displaying JSON-formatted data. Unfortunately, I couldn’t find enough good examples on how to do this–and after some frustrating hours learned that RABL doesn’t play well with [...]</p><p>The post <a href="http://bigtrapeze.com/2012/03/22/using-rabl-to-display-multiple-models/">Using RABL to Display Multiple Models</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>I had a scenario where I needed to show a collection of tweets AND a hash of stats related to those tweets,using RABL, a nice Rails Gem useful for displaying JSON-formatted data. Unfortunately, I couldn’t find enough good examples on how to do this–and after some frustrating hours learned that RABL doesn’t play well with hashes.</p>
<p>In this example I have a model, @tweets, filled with scraped tweets from Twitter. I have a hash, stats, filled with stats about those tweets–like the total number, the number of tweeters, the number of re-tweets, etc. Ideally, I’d like my JSON response to look something like:</p>
<pre class="brush: ruby; title: ; notranslate">{&quot;stats&quot;:{&quot;total&quot;:1024,&quot;users&quot;:128,&quot;retweets&quot;:&quot;32&quot;},&quot;tweets&quot;:[{&quot;tweet&quot;:&quot;Petrol heads! Tune in to @DiscoveryUK at 9PM for the premiere of brand new #WheelerDealers the series kicks off with a rather nice Fiat Dino&quot;},{&quot;tweet&quot;:&quot;2nd last nite in bahamas!  Dinner alone. shark diving done and my camera gear just arrived!!  Thanks a lot Air Canada. Exmas tmrw.  L&quot;}...]}</pre>
<p>First, in your controller, convert this hash to an OpenStruct format, which uses a RABL-friendly dot notation, like</p>
<p><strong>your_controller.rb</strong></p>
<pre class="brush: ruby; title: ; notranslate">
require 'ostruct'
@stats = OpenStruct.new
@stats.total = @tweets.count
@stats.users = '128'  # Keep adding stats if you'd like
@stats.retweets = '32' # .. more stats
</pre>
<p>Then, in your view file</p>
<p><strong>your_view_file.rabl</strong></p>
<pre class="brush: ruby; title: ; notranslate">
object false

child @stats =&gt; :stats do
  attribute :total, :users, :reteweets
end

child @tweets =&gt; :tweets do
  attributes :tweet
end
</pre>
<p>Your result should look like the example output above. Two things to note: 1) I was able to get this to work without explicitly requiring ostruct in my controller. 2) It also works without explicitly specifying &#8220;object false&#8221; in your .rabl file.</p>
<p>The post <a href="http://bigtrapeze.com/2012/03/22/using-rabl-to-display-multiple-models/">Using RABL to Display Multiple Models</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2012/03/22/using-rabl-to-display-multiple-models/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Removing the Passphrase from SSH Keys</title>
		<link>http://bigtrapeze.com/2012/01/17/removing-the-passphrase-from-ssh-keys/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=removing-the-passphrase-from-ssh-keys</link>
		<comments>http://bigtrapeze.com/2012/01/17/removing-the-passphrase-from-ssh-keys/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 19:11:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jeffnunn.com/bigtrapeze.com/?p=47</guid>
		<description><![CDATA[<p>I never can remember this: Removing a passphrase from your id_rsa key Backup your id_rsa file! Then, Removing a passphrase from an SSL server key Remove passphrase from key: For more details: http://www.akadia.com/services/ssh_test_certificate.html http://www.thinkplexx.com/learn/howto/security/ssl/remove-passphrase-password-from-private-rsa-key</p><p>The post <a href="http://bigtrapeze.com/2012/01/17/removing-the-passphrase-from-ssh-keys/">Removing the Passphrase from SSH Keys</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>I never can remember this:<br />
<strong><b>Removing</b> a <b>passphrase</b> from your id_rsa <b>key</b></strong></p>
<p>Backup your id_rsa file! Then,</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">
openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new
cp ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
rm ~/.ssh/id_rsa
cp ~/.ssh/id_rsa_new ~/.ssh/id_rsa
chmod 400 ~/.ssh/id_rsa
</pre>
<p><strong><b>Removing</b> a <b>passphrase</b> from an SSL server <b>key</b></strong></p>
<pre class="brush: bash; gutter: false; title: ; notranslate">
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
</pre>
<p><code><code><br />
</code></code><strong>Remove passphrase from key:<br />
</strong></p>
<pre class="brush: bash; gutter: false; title: ; notranslate">
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
</pre>
<p>For more details:</p>
<p><a href="http://www.akadia.com/services/ssh_test_certificate.html">http://www.akadia.com/services/ssh_test_certificate.html</a><br />
<a href="http://www.thinkplexx.com/learn/howto/security/ssl/remove-passphrase-password-from-private-rsa-key">http://www.thinkplexx.com/learn/howto/security/ssl/remove-passphrase-password-from-private-rsa-key</a></p>
<p>The post <a href="http://bigtrapeze.com/2012/01/17/removing-the-passphrase-from-ssh-keys/">Removing the Passphrase from SSH Keys</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2012/01/17/removing-the-passphrase-from-ssh-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create an OGV file from M4V</title>
		<link>http://bigtrapeze.com/2011/12/29/create-an-ogv-file-from-m4v/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-an-ogv-file-from-m4v</link>
		<comments>http://bigtrapeze.com/2011/12/29/create-an-ogv-file-from-m4v/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 15:46:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://bigtrapeze.com/?p=83</guid>
		<description><![CDATA[<p>If you want to use HTML5 Video the right way, you’ll need to provide an OGV file along with your M4Vs. On the Mac, it’s easy and free: Download and install ffmpeg2theora from http://v2v.cc/~j/ffmpeg2theora/ Go into terminal, navigate to the directory where your M4V video is stored, and type ffmpeg2theora name-of-movie.m4v That’s it. Depending on the length of your [...]</p><p>The post <a href="http://bigtrapeze.com/2011/12/29/create-an-ogv-file-from-m4v/">Create an OGV file from M4V</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>If you want to use HTML5 Video the right way, you’ll need to provide an OGV file along with your M4Vs. On the Mac, it’s easy and free:</p>
<ul>
<li>Download and install <strong>ffmpeg2theora</strong> from <a href="http://v2v.cc/~j/ffmpeg2theora/">http://v2v.cc/~j/ffmpeg2theora/</a></li>
<li>Go into terminal, navigate to the directory where your M4V video is stored, and type <code>ffmpeg2theora name-of-movie.m4v</code></li>
</ul>
<p>That’s it. Depending on the length of your movie, a few minutes later you’ll have a nice OGV file to go with your M4V.</p>
<p>The post <a href="http://bigtrapeze.com/2011/12/29/create-an-ogv-file-from-m4v/">Create an OGV file from M4V</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2011/12/29/create-an-ogv-file-from-m4v/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Allow Remote MySQL Connections to an AWS Instance</title>
		<link>http://bigtrapeze.com/2011/03/01/allow-remote-mysql-connections-to-an-aws-instance/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=allow-remote-mysql-connections-to-an-aws-instance</link>
		<comments>http://bigtrapeze.com/2011/03/01/allow-remote-mysql-connections-to-an-aws-instance/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 07:13:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://bigtrapeze.com/?p=73</guid>
		<description><![CDATA[<p>This took a while to figure out, but it’ll be easy for you if you follow the steps below: 1. Install the EC2 API Tools (setup instructions for Mac OS X) 2. SSH into the instance in which you wish to allow remote MySQL connections, and edit the my.cnf file. In Ubuntu, you can find [...]</p><p>The post <a href="http://bigtrapeze.com/2011/03/01/allow-remote-mysql-connections-to-an-aws-instance/">Allow Remote MySQL Connections to an AWS Instance</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<div id="singlePost">
<p>This took a while to figure out, but it’ll be easy for you if you follow the steps below:</p>
<p>1. Install the EC2 API Tools (<a href="http://www.robertsosinski.com/2008/01/26/starting-amazon-ec2-with-mac-os-x/">setup instructions for Mac OS X</a>)</p>
<p>2. SSH into the instance in which you wish to allow remote MySQL connections, and edit the my.cnf file. In Ubuntu, you can find this at</p>
<p><code>/etc/mysql/my.cnf</code></p>
<p>Look for the line that starts with <code>bind-address</code>, and comment it out. If enabled, this line tells the MySQL server to only allow connections from the localhost.</p>
<p>3. Login to your EC2 instance at Amazon AWS. Make a note of the security group that your instance belongs to. In my case, it was “default.”</p>
<p>4. Back on your machine where you installed the EC2 API Tools, run the following command:</p>
<p><code>ec2-authorize default -p 3306</code></p>
<p>* Note if your MySQL port is something other than 3306, change the above command to the appropriate number.</p>
<p>That’s it! You should be connecting now with no problems.</p>
</div>
<p>The post <a href="http://bigtrapeze.com/2011/03/01/allow-remote-mysql-connections-to-an-aws-instance/">Allow Remote MySQL Connections to an AWS Instance</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2011/03/01/allow-remote-mysql-connections-to-an-aws-instance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing Your MacBook Pro Airport MAC Address in Snow Leopard</title>
		<link>http://bigtrapeze.com/2010/01/12/changing-your-macbook-pro-airport-mac-address-in-snow-leopard/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=changing-your-macbook-pro-airport-mac-address-in-snow-leopard</link>
		<comments>http://bigtrapeze.com/2010/01/12/changing-your-macbook-pro-airport-mac-address-in-snow-leopard/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 19:36:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://jeffnunn.com/bigtrapeze.com/?p=54</guid>
		<description><![CDATA[<p>There are several reasons you might want to do this&#8211;and if you need to, here&#8217;s how you do it: 1. Check your current MAC address from Terminal: 2. Keep Airport turned on, but log out of all networks (click the Airport icon, “Join Other Network,” enter a bogus one, and hit cancel as it searches). [...]</p><p>The post <a href="http://bigtrapeze.com/2010/01/12/changing-your-macbook-pro-airport-mac-address-in-snow-leopard/">Changing Your MacBook Pro Airport MAC Address in Snow Leopard</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>There are several reasons you might want to do this&#8211;and if you need to, here&#8217;s how you do it:</p>
<p>1. Check your current MAC address from Terminal:</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">ifconfig en1 | grep ether</pre>
<p>2. Keep Airport turned on, but log out of all networks (click the Airport icon, “Join Other Network,” enter a bogus one, and hit cancel as it searches).</p>
<p>4. From terminal again, type:</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -z</pre>
<p>5. Still in terminal, change your MAC address with a command like:</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">sudo ifconfig en1 ether 00:e2:e3:e4:e5:e6</pre>
<p>6. Check your new MAC address to make sure it saved:</p>
<pre class="brush: bash; gutter: false; title: ; notranslate">ifconfig en1 | grep ether</pre>
<p>Done…</p>
<p>The post <a href="http://bigtrapeze.com/2010/01/12/changing-your-macbook-pro-airport-mac-address-in-snow-leopard/">Changing Your MacBook Pro Airport MAC Address in Snow Leopard</a> appeared first on <a href="http://bigtrapeze.com">Big Trapeze</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://bigtrapeze.com/2010/01/12/changing-your-macbook-pro-airport-mac-address-in-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced

Served from: bigtrapeze.com @ 2013-05-25 11:38:20 -->