<?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>Shivam&#039;s World</title>
	<atom:link href="http://shivampatel.net/blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://shivampatel.net/blog</link>
	<description></description>
	<lastBuildDate>Tue, 17 Jan 2012 07:47:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Rails error: Session contains objects  whose class definition isn&#8217;t available</title>
		<link>http://shivampatel.net/blog/index.php/2012/01/17/rails-error-session-contains-objects-whose-class-definition-isnt-available/</link>
		<comments>http://shivampatel.net/blog/index.php/2012/01/17/rails-error-session-contains-objects-whose-class-definition-isnt-available/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 07:42:40 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=142</guid>
		<description><![CDATA[I am writing a rails3 application where I am storing some custom objects in the session. All goes well until I restart my server and all the existing sessions start throwing this error: Session contains objects whose class definition isn't available. Remember to require the classes for all objects kept in the session. (Original exception: [...]]]></description>
			<content:encoded><![CDATA[<p>I am writing a rails3 application where I am storing some custom objects in the session. All goes well until I restart my server and all the existing sessions start throwing this error:</p>
<pre>Session contains objects whose class definition isn't available.
Remember to require the classes for all objects kept in the session.
(Original exception: uninitialized constant Map [NameError])</pre>
<p>Specifically I have a geographical map class (Map) and I am storing the map object in sessions. Rails cannot unmarshal the serialized session representation into the map object until it knows what the Map class looks like.</p>
<p>To overcome this problem, I added the following line of code in my <strong>config/locales/application.rb</strong> file and it solved the error for me:</p>
<blockquote><p> require &#8220;#{Rails.root}/app/models/map&#8221;</p></blockquote>
<p>where my map class is defined in /app/models/map.rb file.</p>
<p>Though it is discouraged to store complex objects in sessions, I got to know about this taboo much later in my development cycle. At that point, this fix was easier for me than to rewrite major pieces of code.<br />
I hope this helps someone on the other side of planet who is banging his head over this peculiar error.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2012/01/17/rails-error-session-contains-objects-whose-class-definition-isnt-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails applications using cookie based session store for session management are vulnerable to Replay Attacks</title>
		<link>http://shivampatel.net/blog/index.php/2011/07/18/replay-attacks-on-rails-applications-using-cookie-store-for-session-management/</link>
		<comments>http://shivampatel.net/blog/index.php/2011/07/18/replay-attacks-on-rails-applications-using-cookie-store-for-session-management/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 22:23:02 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[cookie based session store]]></category>
		<category><![CDATA[cookiestore]]></category>
		<category><![CDATA[rails3]]></category>
		<category><![CDATA[rails3 security]]></category>
		<category><![CDATA[replay attack on rails3 application]]></category>
		<category><![CDATA[replay attacks]]></category>
		<category><![CDATA[web security]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=75</guid>
		<description><![CDATA[Rails3 uses Cookie Store as the default for session management . This is a significant (and interesting) change that has a couple implications on the security of web application that rely on cookies for session storage. People have already illustrated how replay attacks can subvert your web applications. This article demonstrates a replay attack where [...]]]></description>
			<content:encoded><![CDATA[<p>Rails3 uses Cookie Store as the default for session management . This is a significant (and interesting) change that has a couple implications on the security of web application that rely on cookies for session storage. People <a href="http://www.ruby-forum.com/topic/102147" target="_blank">have already illustrated</a> how replay attacks can subvert your web applications.</p>
<p>This article demonstrates a replay attack where &#8211; in certain cases &#8211; your login based application&#8217;s logic can be subverted to bypass the authentication and directly impersonate an user (whose cookie you&#8217;ve managed to sniff/steal).</p>
<p>This post will:</p>
<ul>
<li>Illustrate how sessions are stored in cookies instead of server side storage.</li>
<li>Demonstrate a common mechanism in web applications to identify if the user is authenticated.</li>
<li>Show how can a stolen cookie can be replayed to impersonate a valid user (even after the real user logs off).</li>
</ul>
<p>In cookie based session stores, all the session data is stored in a cookie as a hash map of key:value pairs. Everything that you set in a session is serialized into a stream of bytes &#8211; base64 encoded &#8211; and set as a browser cookie. Hence, all of your session variables actually end up being stored on client side. From then on, <strong>your browser sends all your session data to the server in each single request you make to the website.</strong></p>
<p>However there is a security mechanism that prevents from any user from tampering the session data stored as cookie &#8211; and that is the <a href="http://en.wikipedia.org/wiki/HMAC" target="_blank">HMAC</a> of the session byte stream calculated from a server side secret. So here is how it works:</p>
<ul>
<li>When you do a session[:valid] = &#8220;true&#8221; in a rails application, the application converts it into a hash, serializes it into a byte stream and calculates a HMAC of this stream.</li>
<li>This HMAC is appended along with the session object in the cookie with a &#8216;- -&#8217; delimeter.</li>
<li>The browser sends this cookie (session object&#8211;HMAC) with every request to server.</li>
<li>For every request, the server <strong>calculates </strong>the HMAC of the session hash that browser sent in the cookie and compares it with the accompanying HMAC in the cookie. If they don&#8217;t match, the session hash (or the HMAC) has been modified on client side &#8211; the session data will be ignored in this case.</li>
</ul>
<p>Now lets see a common way how sessions are managed in many web applications.<br />
Suppose your web applications&#8217; authentication routine looks like this:</p>
<div class="codecolorer-container ruby railscasts" style="border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">def</span> verify<br />
<span style="color:#9966CC; font-weight:bold;">if</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:username</span><span style="color:#006600; font-weight:bold;">&#93;</span>==<span style="color:#996600;">'demo'</span> <span style="color:#006600; font-weight:bold;">&amp;&amp;</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:password</span><span style="color:#006600; font-weight:bold;">&#93;</span>==<span style="color:#996600;">'demo'</span><br />
flash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:message</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;Login Successful! Welcome to the member area&quot;</span><br />
session<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:valid</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;true&quot;</span><br />
session<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:name</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;Shivam Patel&quot;</span><br />
session<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:email</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;shivam@cmu.edu&quot;</span><br />
session<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:password</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;commack@782&quot;</span><br />
session<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:credits</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;780&quot;</span><br />
redirect_to <span style="color:#996600;">'/members/profile'</span><br />
<span style="color:#9966CC; font-weight:bold;">else</span><br />
flash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:message</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;Your username/password is incorrect. Did you try demo/demo :)&quot;</span><br />
redirect_to <span style="color:#996600;">'/auth/login'</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>The code above checks for the valid credentials, and sets some session variables once the user is authenticated. A common technique employed for session management is to set a special session variable once an user is authenticated. Thereafter for each request by the browser, a simple check is performed to see if that session variable is set or not. If its set, the requested &#8216;member only&#8217; page is displayed else an error is displayed asking user to login to access that page. This value is cleared when user presses logout. In our code above, session[:valid] serves the purpose of the &#8216;flag&#8217; to denote a authenticated user.</p>
<p>Consecutively, our &#8216;members only&#8217; pages will have something like this defined in their controller:</p>
<div class="codecolorer-container ruby railscasts" style="border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> MembersController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController<br />
before_filter <span style="color:#ff3333; font-weight:bold;">:check_login_status</span></div></td></tr></tbody></table></div>
<p>Where check_login_status is a method which will be evaluated before every action in this controller. The check_login_status will look something like:</p>
<div class="codecolorer-container ruby railscasts" style="border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">class</span> ApplicationController <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActionController::Base</span><br />
protect_from_forgery<br />
..<span style="color:#9966CC; font-weight:bold;">def</span> check_login_status<br />
....<span style="color:#9966CC; font-weight:bold;">if</span> session<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:valid</span><span style="color:#006600; font-weight:bold;">&#93;</span> != <span style="color:#996600;">&quot;true&quot;</span><br />
......<span style="color:#9900CC;">flash</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:message</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;That is a 'member only' page, please login with valid credentials to access it&quot;</span><br />
redirect_to <span style="color:#996600;">&quot;/auth/login&quot;</span><br />
....<span style="color:#9966CC; font-weight:bold;">end</span><br />
..<span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>I&#8217;ve put up a demo application at <a href="http://replayattack.mocktest.net" target="_blank">http://replayattack.mocktest.net</a> where you can play with a simple login based application which uses cookie based session store. You can try the replay attack (described below) on this application.</p>
<p>I use a simple Firefox extension &#8211; <a href="https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/" target="_blank">Live HTTP headers</a> for evaluating and replaying the cookie. So, lets login at the application (demo/demo) and lets see what cookie we got. The headers for &#8216;/members/profile&#8217; page sets this cookie.</p>
<blockquote><p>Set-Cookie: _rails_demo_session=BAh7DUkiD3Nlc3Npb25faWQGOgZFRiIlZTBhZWRjZGE3M<br />
GE5MTk5MGMyNTllMDU1ZWRkMGRkMDdJIhBfY3NyZl90b2tlbgY7AEZJIjFicFl4aUpuSURI<br />
WkVhaE8rTVpuTDgrUWNvdzlwRnYzVWJhcEYwazBDRzM0PQY7AEZJIgp2YWxpZAY7AEZJ<br />
Igl0cnVlBjsARkkiCW5hbWUGOwBGSSIRU2hpdmFtIFBhdGVsBjsARkkiCmVtYWlsBjsARkkiE3<br />
NoaXZhbUBjbXUuZWR1BjsARkkiDXBhc3N3b3JkBjsARkkiEGNvbW1hY2tANzgyBjsARkkiDGN<br />
yZWRpdHMGOwBGSSIINzgwBjsARkkiCmZsYXNoBjsARklDOiVBY3Rpb25EaXNwYXRjaDo6Rm<br />
xhc2g6OkZsYXNoSGFzaHsGOgxtZXNzYWdlSSIxTG9naW4gU3VjY2Vzc2Z1bCEgV2VsY29tZSB<br />
0byB0aGUgbWVtYmVyIGFyZWEGOwBGBjoKQHVzZWRvOghTZXQGOgpAaGFzaHsA&#8211;8033ab5323d8adfb80a32fa448a41a586138ee4a; path=/; HttpOnly</p></blockquote>
<p>You can now see two distinct parts of this cookie: The base64 encoded session data followed by the delimiter &#8211; - followed by the HMAC (8033ab5323d8adfb80a32fa448a41a586138ee4a). If you use any <a href="http://www.opinionatedgeek.com/dotnet/tools/base64decode/" target="_blank">base64 decoder</a> and try to decode the session data part of the cookie (BAh7&#8230;. aHsA), you&#8217;ll see the serialized representation of the session hash:</p>
<blockquote><p>{<br />
I&#8221;session_id:EF&#8221;%e0aedcda70a91990c259e055edd0dd07I&#8221;_csrf_token;�FI&#8221;1bpYxiJnIDHZEahO+MZnL8+Qcow9pFv3UbapF0k0CG34=;�FI&#8221;<br />
<span style="color: #993366;">valid</span>;�FI&#8221;    <span style="color: #008000;">true</span>;�FI&#8221;    <span style="color: #993366;">name</span>;�FI&#8221;<span style="color: #008000;">Shivam Patel</span>;�FI&#8221;<br />
<span style="color: #993366;">email</span>;�FI&#8221;<span style="color: #008000;">shivam@cmu.edu</span>;�FI&#8221;<br />
<span style="color: #993366;">password</span>;�FI&#8221;<span style="color: #008000;">commack@782</span>;�FI&#8221;<span style="color: #993366;">credits</span>;�FI&#8221;<span style="color: #008000;">780</span>;�FI&#8221;<br />
flash;�FIC:%ActionDispatch::Flash::FlashHash{:messageI&#8221;1Login Successful! Welcome to the member area;�F:<br />
@usedo:Set:<br />
@hash{�</p></blockquote>
<p>We can see the session variables highlighted in this semi-readable text. Can you change the value of &#8216;credits&#8217; in the cookie and fool the server to accept that. Fortunately not, because the HMAC won&#8217;t match. <strong>But you can always store this cookie to replay it later.</strong> And here lies the problem.</p>
<p>Now we&#8217;ll logout from the application by clicking the &#8216;Logout&#8217; link on the web application. The logout code is:</p>
<div class="codecolorer-container ruby railscasts" style="border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#9966CC; font-weight:bold;">def</span> logout<br />
..<span style="color:#9900CC;">reset_session</span><br />
..<span style="color:#9900CC;">flash</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:message</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;You have been successfully logged out !&quot;</span><br />
..<span style="color:#9900CC;">redirect_to</span> <span style="color:#996600;">&quot;/auth/login&quot;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></td></tr></tbody></table></div>
<p>This resets the session and generates a new session id. If you inspect the new cookie (post logout) in Live HTTP headers, you&#8217;ll no longer find those session variables.</p>
<div id="attachment_112" class="wp-caption alignright" style="width: 462px"><a href="http://shivampatel.net/blog/wp-content/uploads/2011/07/rails_cookie_store_session_management_replay_attack1.png"><img class="size-full wp-image-112" title="Locate an old GET request in Live HTTP header and replay it" src="http://shivampatel.net/blog/wp-content/uploads/2011/07/rails_cookie_store_session_management_replay_attack1.png" alt="" width="452" height="493" /></a><p class="wp-caption-text">Locate an old GET request in Live HTTP header and replay it</p></div>
<p>But what if you just replay that old cookie. In Live HTTP headers, all you need to do it to scroll up to reach the request which was made to a page before you clicked logout and &#8220;Replay it&#8221;.</p>
<p>As soon as you click that, BINGO !!! &#8211; you are logged in as a valid user.</p>
<p>This happened because the session[:valid] flag we are checking on server side to see if the user has already authenticated to the application is set in this cookie which obviously is of a time before users clicked &#8216;Logout&#8217;. This is a very serious issue. You need to worry if your applications&#8217; login design is similar to one described here.<br />
This will allow people to sniff your users cookie if they are on a public wireless (airports, coffee shops) and replay it to gain access to your application <strong>even when the real user has logged off the application</strong>.</p>
<p>You are safe from such an attack if:</p>
<ul>
<li>You use SSL on your website. However, remember that SSL should be enabled for the entire site rather than for the login page only. For sites using SSL, there is no way an attacker can sniff plain text cookies and try to read/replay them.
<ul>
<li>Also make sure that you set the &#8216;secure&#8217; cookie flag so that the cookie is never inadvertently transmitted on a http channel</li>
</ul>
</li>
<li>You are not using cookie store to manage your sessions.</li>
</ul>
<p>If you want to quickly migrate from cookie based session store to database based sessions, its actually very easy. However you may want to think about the performance impact it will have based on the way you&#8217;ve deployed your application.</p>
<p>In case you want to switch to database backed sessions, <a href="http://stackoverflow.com/questions/2588241/rails-sessions-current-practices-especially-for-rails-3" target="_blank">here is how to</a>.</p>
<p>Hope this post helped you understand how cookie based sessions work and why and when you should not use CookieStore. Have fun doing the replays at <a href="http://replayattack.mocktest.net" target="_blank">http://replayattack.mocktest.net</a>. Don&#8217;t mount other nefarious attacks on it please.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1834px; width: 1px; height: 1px; overflow: hidden;"><img src="data:image/png;base64,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[/cc]/b5b3rnO0Ynr4zOHl7YOKWw32r33Wr33W733Xb4b4j2fgdx3jHgGgetg3qsk5dNkHaENvuGmCdg55r3c7T9ltCgyvV4ErVF84atM2taa6kYvWuZP1Y4spowu5ctzvX60bWLg+v1g6toHZpMKZYzUBUtkiNA7NqR6TaEa52hKv7w9X9IdSq+kNVfaGqvuWqvuXKvuXKXtqWFLvYE0TtQneAZxe7A2KYyt5gVd9yjSNUOxC5PBSzD69cGVmtH11rGFu/6oo3uhKN7mTTeLJ5PNXsKYSNG2VNpCUbXYmrrkTDWLxhLH7FuW4fWa0bXqkdjF4aiNQ41HbmN+xyZe9yZd9yFWYh4gRxLCydUNXIk86wgQjSSaI1A9FLoiG9SLTawRjR0zLb8CrTLku2VkobWqsdWq0dXL00uFLjiFX1hSt7ly90B893LZ7r9J/tWDjb4T17x3v2jvdsh/dsx8LZ4UfIRAAAAfZJREFUjoUv73i/uDV/+tb8X2/M/eX6zKnW6T81T/53g/sPtYO/vdj13pe3fvlZ67//z9V3Pqn7t4+q//XDyn/7sPLfPqx8+6Oqd/67+hcf14j2H3+q/Y8/1Z749DLPfnnq8i9P1WW0d5n2Z9TsvyLsf7j2a9KuZLa/kPaebL/+H/uv/lz3qz9ffvdUrdDgLisxxfV0TNXTupG1jHp6iaOnqphSelqVWU+5YnqxJ3gxo5j2BKt6l6r7Q5cc4drBSN1QzD6ycsW52jC6fnVMFlN34cS0iHra6Fb1tH50/YpzrW545fJQjNBTqWF1i2lVX6hKj5iSeqpDTB2kmNZwxFSS1EKIaVnoqYaY3vWf7fDRYnpGj5j+ueHtT+re+rDqXz+4+JYspm//d7Wip//+ySVtPc1LTPPQ01wkldLTX/PEtLB6mrukssS0fixxZTRud67XjWQan6LXCTk4DfP0tBoRU9Zlv6Slp1piGhDFVBqcSnoarRuO2UdW651rDaPrV13xRneiSRmcbrTxaaM7KQ1OR9frR5XBaUwW07A89ucPTkkxzUZP8cGpPjFlDU4H2XpaqMFpbZmLaafvbMcCQ0xve3li+usvZDH9uO6tD6uOf3DxrQ8u/tuHlf/2YZU4OH3nvyUxFfWUK6b69FSfmFJ6WnQx/f8BFBTpZSjB2e0AAAAASUVORK5CYII=" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2011/07/18/replay-attacks-on-rails-applications-using-cookie-store-for-session-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bye bye Pittsburgh</title>
		<link>http://shivampatel.net/blog/index.php/2010/06/12/bye-bye-pittsburgh/</link>
		<comments>http://shivampatel.net/blog/index.php/2010/06/12/bye-bye-pittsburgh/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 03:32:26 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[Personal Life]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=54</guid>
		<description><![CDATA[As with all the happy stories, my Pittsburgh story comes to an end today. I am leaving Pittsburgh. I have graduated and will have to move elsewhere to earn a living. So here I am, sitting in an Amtrak Pennsylvania 42 train which will take me to New York City in about 9 hours from [...]]]></description>
			<content:encoded><![CDATA[<p>As with all the happy stories, my Pittsburgh story comes to an end today. I am leaving Pittsburgh. I have graduated and will have to move elsewhere to earn a living. So here I am, sitting in an Amtrak Pennsylvania 42 train which will take me to New York City in about 9 hours from now.</p>
<div class="wp-caption alignright" style="width: 226px"><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073496727984306" target="_blank"><img class=" " title="Aditya seeing me off !!" src="http://lh3.ggpht.com/_NRv8qSsc8Lc/TBQ8zM0OGLI/AAAAAAAAC-g/WNxqBoL9aiw/s720/IMG_0925.JPG" alt="Aditya seeing me off !!" width="216" height="144" /></a><p class="wp-caption-text">Aditya seeing me off !!</p></div>
<p>The early morning train did not allow me to sleep much last night. Thankfully, Aditya accompanied me to the train station and we just had a sad parting. The train now steers off into woods, mountains, springs and begins its breathtakingly enchanting journey to the east coast. I must thank my friend, Krishna, who suggested that I should try the Pittsburgh-New York train ride. Although it is a bit costlier than the airplane journey and 9x times longer but it has been only an hour and already I seem to be very happy about this decision.</p>
<p>I am overflowing with a multitude of thoughts as I leave Pittsburgh and thought that I can preserve them by writing them down. Pittsburgh was my gateway to United States. My first city in the US and a perfect one to get acclimatized to the American lifestyle and culture. It is neither too fast nor too slow, relatively cheap, full of scenic beauty and provides a great academic setting with some very fine Universities.</p>
<p>I had two contrasting years at Carnegie Mellon. The first year was one of the most torturous one I’d ever had (or probably will have in future). Days and nights were spent studying and doing hard work.  I had been living an easy life for 2 years before coming to CMU and the contrast in the lifestyles completely threw me out of my comfort zone. It was not uncommon to come back home at 4 AM in the morning, cook and eat ‘dinner’ by 5-6AM and then have a good night’s sleep after that.</p>
<p>Second year though was a little easy. Partly because we got accustomed to the lifestyle, partly because the tough courses were over and partly because I got an offer from Bloomberg and many apprehensions about the job and job search were over. I chose the computer forensics track in my second year and time was spent in doing a lot of forensics &#8211; which was real fun. With a little less workload, I could find time to do other activities. Swimming was one of them. I am happy that I was pretty regular at swimming this semester and hope to continue that even in New York. I also could devote a good time for the alumni activities of my Undergrad school which resulted in a <a title="IET USA East Coast Alumni Meet" href="http://ietalumni.org/meets/30_05_2010_USA/" target="_blank">great east coast alumni meet</a>.</p>
<p>Last 30 days have been so eventful at Pittsburgh. Final exams, graduation ceremony, visiting friends and lots of time spent at the playground.<br />
During my two years in Pittsburgh, I stayed in a street called Murray Ave. It is a hub of restaurants and pubs – one of the liveliest streets in that area.  Although we walked down that street every day, we never had a chance to try out various eateries (or should I say any eatery). With only a few days of Pittsburgh left, we decided to try each of them. This meant freedom from cooking and lots of intercontinental food every day. What a great end <img src='http://shivampatel.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="wp-caption alignleft" style="width: 269px"><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073723779714594" target="_blank"><img title="Gullifty's" src="http://lh6.ggpht.com/_NRv8qSsc8Lc/TBQ9AapkjiI/AAAAAAAADAI/-TEtrczZgO4/s720/IMG_0854.JPG" alt="Gullifty's" width="259" height="173" /></a><p class="wp-caption-text">Gullifty&#39;s</p></div>
<div class="wp-caption alignnone" style="width: 269px"><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073690684344626" target="_blank"><img title="Silk Elephant" src="http://lh3.ggpht.com/_NRv8qSsc8Lc/TBQ8-fXBSTI/AAAAAAAAC_w/p6vF4QFE0X8/s720/IMG_0813.JPG" alt="" width="259" height="173" /></a><p class="wp-caption-text">Silk Elephant</p></div>
<div class="wp-caption alignnone" style="width: 269px"><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073683306188610" target="_blank"><img title="Sun Penang" src="http://lh4.ggpht.com/_NRv8qSsc8Lc/TBQ8-D37j0I/AAAAAAAAC_s/rbCKMoJrQRI/s720/IMG_0782.JPG" alt="Sun Penang" width="259" height="173" /></a><p class="wp-caption-text">Sun Penang</p></div>
<p>I cannot close my Pittsburgh chapter without mentioning about the friends I made here. Definitely, it would have been impossible to survive without these wonderful people I met here. They were a critical ingredient in making my stay wonderful and splendid. No wonder they’ve become my friends for life. I’d love to thank Shishir, Aditya, Mayuresh, Snehal, Rohan and Krishna for being such great friends. There are so many things I’d love to learn from each of them.</p>
<p><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482083807319961026"><img class="alignleft" title="Shishir" src="http://lh4.ggpht.com/_NRv8qSsc8Lc/TBRGLWw6LcI/AAAAAAAADD4/mgZUat6OL7U/s576/DSC01421.JPG" alt="Shishir" width="83" height="75" /></a><strong> Shishir</strong> – Well, the list is long. Anyone who knows Shishir knows what qualities of his I am talking about. I’ll keep telling stories of Shishir as an example of will, determination and Hard work.</p>
<p>.</p>
<p><a style="http: //picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073784806675042;" href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073784806675042" target="_blank"><img class="alignleft" title="Aditya" src="http://lh6.ggpht.com/_NRv8qSsc8Lc/TBQ9D9_iEmI/AAAAAAAADAw/U82nUHKFKSI/s720/IMG_0788.JPG" alt="Aditya" width="93" height="60" /></a><strong> Aditya</strong> – I really wish I could get the calmness and virtue of patience that Aditya has. His never say die attitude and optimism towards life(whether aiming for 105 out of 100 in an assignment – by chasing 5 extra credits or chasing a bus that is 3 stops ahead) is simply inspiring.</p>
<p><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482081896107621442" target="_blank"><img class="alignleft" title="Mayuresh" src="http://lh5.ggpht.com/_NRv8qSsc8Lc/TBREcG8YPEI/AAAAAAAADDQ/wL9tRQsQDs8/s720/IMG_0817.JPG" alt="" width="93" height="60" /></a> <strong>Mayuresh</strong> – <img src='http://shivampatel.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   I always appreciate (and envy) this guy’s technical skills and sharp mind. This might be for the first time I am ever accepting that in public, but I wish I could borrow some intelligence from you.</p>
<p><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073795099191506" target="_blank"><img class="alignleft" title="Snehal" src="http://lh4.ggpht.com/_NRv8qSsc8Lc/TBQ9EkVdaNI/AAAAAAAADA0/NZjQuHGTl8g/s720/IMG_0790.JPG" alt="Snehal" width="93" height="60" /></a><strong>Snehal </strong>– Snehal’s journey from MIT (Maharashtra Institute of Technology) to MIT (Massachusetts Institute of Technology) is an inspiration. I am glad that in this jump from MIT to MIT, he chanced to be at CMU and I could know and befriend him. A super sensitive person at heart: dare to hurt him and you’ll receive an 18 page email from him after 3 days of silence.</p>
<p><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073806991661490" target="_blank"><img class="alignleft" title="Rohan" src="http://lh4.ggpht.com/_NRv8qSsc8Lc/TBQ9FQo2GbI/AAAAAAAADA4/4TxORD7p3TY/s720/IMG_0791.JPG" alt="Rohan" width="93" height="60" /></a><strong> Rohan</strong> – A happy go lucky person who’ll say only one thing in case of trouble: “arre suno na… tum tension mat lo, ho jayega”</p>
<p>.</p>
<p><strong><a href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482087888026599218" target="_blank"><img class="alignleft" title="Krishna" src="http://lh3.ggpht.com/_NRv8qSsc8Lc/TBRJ44lL_zI/AAAAAAAADFA/VbzzOvyC0Nk/Edited%204.jpg" alt="Krishna" width="73" height="76" /></a> Krishna </strong>– I owe him for tolerating me a lot in all the coursework and assignments we did together. Thank you for getting me good marks in all those projects <img src='http://shivampatel.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>.<br />
I am finishing this up after arriving at my home in NJ and I can already feel the loneliness and vaccum without them.</p>
<p>All  Good Things Must Come to An End, and so has this. I’ll cherish each moment spent at Carnegie Mellon and Pittsburgh throughout my life.</p>
<p>I’ll end this blog on a happy note. Here are all the pictures that I took all the while I was writing this blog. Next time you are making a journey from NYC to Pittsburgh or the other way round, consider taking a train !!</p>
<p><a title="Train Pictures" href="http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073489044775890" target="_blank">http://picasaweb.google.com/shivam.unleashed/LastDaysAtPittsburghAndTrainRideFromPittToNYC#5482073489044775890</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2010/06/12/bye-bye-pittsburgh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tweet it loud &#8211; When under attack, let the world know !!</title>
		<link>http://shivampatel.net/blog/index.php/2010/04/02/tweet-it-loud-when-under-attack-let-the-world-know/</link>
		<comments>http://shivampatel.net/blog/index.php/2010/04/02/tweet-it-loud-when-under-attack-let-the-world-know/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 07:31:52 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[tweet attacks]]></category>
		<category><![CDATA[Update attacks to twitter]]></category>
		<category><![CDATA[update ftp attacks]]></category>
		<category><![CDATA[update ssh attacks]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=45</guid>
		<description><![CDATA[Soon after I set up my web server a couple of weeks ago, attacks started coming in. It took no time to realize that there is little that can be done. There attacks are more or less harmless as they try to brute force the username and password for various services on the server. In [...]]]></description>
			<content:encoded><![CDATA[<p>Soon after I set up my web server a couple of weeks ago, attacks started coming in. It took no time to realize that there is little that can be done. There attacks are more or less harmless as they try to brute force the username and password for various services on the server. In my case, the services are sshd and FTP server (vsftpd). I said that the attacks are mostly harmless because it is difficult to brute force any decent password, more so when you don’t know the username.</p>
<p>I see so many attacks on my SSH server trying to brute force the password for usernames ‘admin’ and ‘root’. Clever sshd just lets them keep guessing without telling them that the username doesn’t exist. It just sits there and enjoys the conversation. Actually it is fun to see the usernames/password that are tried. Just fire up wireshark/tcpdump when under attack and look at the packets, the username/passwords are as amusing as they can get. Sometimes the passwords are pure dictionary attack. Sometimes they even have a local tinge in them. For example, Chinese names !!!</p>
<p>Most of the attacks are from bots. Bots running on ‘owned’ machines – compromised machines at government offices, educational institutes and public kiosks. Basically, this is generally how botnets work – a bot infects your computer, it then starts launching attacks on other computer in its quest to multiply. In addition it also opens up other services on the infected computer to achieve its other primary objectives. Remember, bots and botnets are all about money today. It is no longer a fame game. So typically a owned machine will have port 80 (http), 21(ftp), 22(ssh). You will also see compromised computers hosting a website (often porn) and running services like webmail, phpmyadmin etc.</p>
<p>Last weekend, I thought – is there something I can do when under attack… Ummm well maybe I can become a good netizen and let the world know about the attack. Why would that help anyone? Well just in case someone else in world is getting attacked by the same IP address and chooses to type its IP address on google, he can have a little more information about the attack and his fellow sufferers.</p>
<p>Okay, so I want to make the attack information quickly available to the world. So probably I can have a webpage of such attack information and I’ll keep updating it as and when I get an attack. Well … sort of good idea but not so slick. If google indexes my webpage every 30 days, it will take 30 days (worst case) for the information to be available on google.</p>
<p>A better approach is to ‘tweet’ about the attack <img src='http://shivampatel.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  . Google indexes twitter accounts far more frequently than it indexes an average website. So an twitter update can be indexed even within minutes after it has been tweet’ed.</p>
<p>We* wrote a quick and dirty python script to help us do exactly that. The scripts monitors the log files every few minutes (15 minutes in our case). The log files are /var/log/auth.log and /var/log/vsftpd.log.<br />
The scripts maintains an in-memory hash table of &lt;ip, [list of usernames used in attack]&gt;. Here ip is IP address of the attacker and it serves as an key in the hash table. The corresponding value is a list of all the usernames that the attacking computer tried.</p>
<p>So the in memory hash table grows with each attack and would typically look like:<br />
&lt; 210.90.74.163, [admin, test, root, nagios…]&gt;</p>
<p>The following algorithm is repeated every 15 minutes:</p>
<ul>
<li>We check the new attacks in past 15 minutes and update our in memory hash table</li>
<li>For all those entries that have surpassed a threshold number of tries in this timeslot are eligible to get tweeted. For eg. With a threshold of 5 tries, all those entries that now have more than 5 entries in the username list (and were not tweeted before) are deemed as attacks and are tweeted.</li>
<li>A simple twitter API for python makes tweeting as simple as possible.</li>
<li>A new tweet appears on <a href="http://twitter.com/compromised_sys">http://twitter.com/compromised_sys</a> account.</li>
</ul>
<p>A diagrammatic representation of the process is below:</p>
<div class="wp-caption aligncenter" style="width: 610px"><img title="Overview of the entire process" src="http://shivampatel.net/images/compromised_sys_diagram.png" alt="" width="600" height="300" /><p class="wp-caption-text">Overview of the entire process</p></div>
<p>In case you are interested in seeing the python implementation, you can download the file below. As I said earlier, it is quick and dirty implementation and requires code cleanup.<br />
<a class="wp-caption" href="http://shivampatel.net/blog/wp-content/uploads/2010/04/tweet_attacks.py_.txt">tweet_attacks.py</a><br />
<strong><br />
Results:</strong><br />
The script runs in production and tweets the twitter account <a href="http://twitter.com/compromised_sys">http://twitter.com/compromised_sys</a> regularly. Once we had the first version up and running, we could see tweets getting indexed in as less as 15 minutes after updates to twitter account.</p>
<p>*This code was co-authored by <a class="wpGallery" title="Aditya Mahendrakar's personal webpage" href="http://www.andrew.cmu.edu/user/amahendr/home.html" target="_blank">Aditya Mahendrakar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2010/04/02/tweet-it-loud-when-under-attack-let-the-world-know/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A tale of a security flaw, its discovery, disclosure to authorities and their indifference.</title>
		<link>http://shivampatel.net/blog/index.php/2010/02/18/a-tale-of-security-flaw-its-discovery-disclosure-to-authorities-and-their-indifference/</link>
		<comments>http://shivampatel.net/blog/index.php/2010/02/18/a-tale-of-security-flaw-its-discovery-disclosure-to-authorities-and-their-indifference/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 16:39:56 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[National Institute of Design]]></category>
		<category><![CDATA[NID]]></category>
		<category><![CDATA[NID Ahmedabad]]></category>
		<category><![CDATA[NID portal vulnerability]]></category>
		<category><![CDATA[NID vulnerable]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=39</guid>
		<description><![CDATA[I do not believe in full disclosures. I think they do more harm than good. But lately I had an experience which helped me understand the reasons people are often forced to do a full disclosure of a software vulnerability. There is only one ‘argument’ for a full disclosure – that it ’forces’ the organization [...]]]></description>
			<content:encoded><![CDATA[<p>I do not believe in full disclosures. I think they do more harm than good. But lately I had an experience which helped me understand the reasons people are often forced to do a full disclosure of a software vulnerability.</p>
<p>There is only one ‘argument’ for a full disclosure – that it ’forces’ the organization to act swiftly and fix the vulnerability. And believe me there are many organizations that are lazy enough to fix a problem reported to them.</p>
<p>Lately, I chanced to visit the website of National Institute of Design, Ahmedabad. NID happens to be one of the premier institute of design in India. The website has a portal (called Kportal) aimed to provide unified login for students, staff and alumni for various institute related functions. It has monthly pay-slips for employees and library records for students and many more Institute specific features.</p>
<p>This portal has several security vulnerabilities. It is a great example of a ‘poor design’. By design I mean the design of their web architecture rather than their user interface. I was curious to know how deep can one get into their systems and it took me a couple of hours to verify that a sophisticated attack can actually give one access to their database. And guess what do you find in their database. You find pay slips, marks of students and passwords (very unfortunately in plain text). This was horrifying.  More horrifying was the fact that updating records in the database was just a matter of firing some update queries using a specific channel. I wish I were a student there <img src='http://shivampatel.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Immediately after, I sent an email to the top officials of NID explaining them about the vulnerabilities that their portal has. Since, I did not know the right person to talk to regarding this, I went to their ‘Director and Deans’ page and emailed their Director (Shri Pradyumna Vyas), Activity Chairperson (Shri Akhil Succena),  Acting Dean, R&amp;D Campus (Dr. S Ghosal). I also emailed Ms. L Padmavati Bet, a person I believe to be closely related to development of this portal. I specifically wrote about the vulnerability and the amount of data that can be leaked in case one is successful in his attempt. I sent a separate email to Ms. Padmavati explaining in detail a typical hack which makes her account is especially vulnerable. By the nature of the design of Kportal, her account was ‘most prone’ to a very popular class of attack (I am not mentioning the names of techniques for obvious reasons).</p>
<p>Guess what the response was!! I heard nothing back from them. They read the emails and didn’t bother to take any action on it. The portal still poses a big threat to the personal data of all the students/staff of NID. I volunteered to give specific inputs to harden their portal in case they need it but they don’t want any.</p>
<p>The downside of all this is that the students of NID are continually exposed to attacks leading to privacy invasion and data loss. <strong>I may not be the first person to discover this.</strong> Maybe there are many others who are snooping into accounts of these students without their knowledge.  Even worse, many people tend to keep their passwords same for various online accounts that they have. In such a case, getting a password from the NID portal will enable any attacker to login to the other accounts of users.  There are many more lateral attacks possible than I can enumerate here. Think about the secret question. What if you have different passwords for different accounts but you keep the same secret question-answer for all of them. As of today its fairly easy to get any of these detail of any NID student/staff.</p>
<p>There is an urgent need for NID to let the students know about the weakness that they had and send emails to all the 1848 students/staff registered on their portal to do the following:</p>
<ul>
<li>Change passwords of all other online accounts which had the same password as the one they used for K portal.</li>
</ul>
<ul>
<li> Change the secret question/answer of all other online accounts that have the same secret question/answer pair as used on K portal.</li>
</ul>
<p>I wish I could force them to do this. I wish they were a little more responsible. If you are running an organization this big, isn’t it your responsibility to protect your users data ??</p>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2010/02/18/a-tale-of-security-flaw-its-discovery-disclosure-to-authorities-and-their-indifference/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>From a Website to a Webserver !</title>
		<link>http://shivampatel.net/blog/index.php/2010/02/12/from-a-website-to-a-webserver/</link>
		<comments>http://shivampatel.net/blog/index.php/2010/02/12/from-a-website-to-a-webserver/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 07:33:08 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[Personal Life]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=20</guid>
		<description><![CDATA[I still remember the day when I launched my first website. It was a couple of years back. Although I had developed many sites before that as class projects or hobby but they were all limited to localhost. Win-98 PWS (okay so now you have some idea of the time period I am talking about) [...]]]></description>
			<content:encoded><![CDATA[<p>I still remember the day when I  launched my first website. It was a couple of years back. Although I had  developed many sites before that as class projects or hobby but they were all  limited to localhost. Win-98 PWS (okay so now you have some idea of the time  period I am talking about) was ‘sufficiently robust’ to handle my ‘dynamic’  websites written in ASP. But things changed and I got a chance to host a website  on Internet.</p>
<p>So this fine night, I was struggling  to make ‘upbazar.com’ live. I had been working really hard on this project since  past couple of weeks and I was very excited about it. upbazar.com had a  interesting story behind it. My computer vendor came up with this excellent idea  of creating a ‘online marketplace’ which would provide a interface where users  can search for businesses based on keywords. We would categorize local  businesses (think dmoz) and also provide advanced search features to find local  shops that sell the items or provide the service one is looking for. A kind of  online yellow pages on steroids. The idea was to hire a bunch of sales  executives who will visit local businesses (shops, restaurants etc.) and pursue  them to buy one of our ‘silver’, ‘gold’ or ‘platinum’ packages which were priced  at Rs. 250, Rs. 500 and Rs. 850 respectively. These were essentially their  entries into our database. A silver package was just a listing on our website, a  gold package was a highlighted entry and a platinum package also included a  dedicated web page for that business (wow !).</p>
<p>All was set. Now this idea had to be  implemented. Let me introduce you to the core team of this expedition. My  computer vendor, Sandeep Saxena was the big boss (aka CEO) who would do all the  funding for this project. I was the lead developer along with my friend Himanshu  Yadav. My another friend Randeep Singh Bedi was the semi sales – semi tech guy.  A true arm-twister as he is, he got himself designated as the ‘Director’ of the  company and also got ‘company sponsored’ business cards (much to our disgust). A  22 years old director, wow. My yet another friend, Shashi Shekhar joined later  and got involved into marketing domain.<br />
So, the couple of things that were  needed first were:</p>
<ul>
<li>A website &#8211; that was the core product,</li>
<li>A office</li>
<li>A bunch of sales executives who’d report to the office in the morning, get their  areas and targets assigned, go to their designated area and work all day, come  back in evening to report their status and deliver data to the dev team that  would feed it to the databases.</li>
<li>A manager who’d manage all this sales and marketing stuff.</li>
</ul>
<p>I started the dev work on war scale. I’d spend entire nights to develop a site  that was intuitive and which could scale well. Sandeep leased a office at a  prime locality in Lucknow. I personally liked that office. Within no time we had  telephone, internet and a couple of computers at our office. While on the other  hand, we were recruiting for one manager and a couple of sales executives. We  had advertized these vacancies in the leading local newspapers.</p>
<p>One rather  interesting moment occurred to us one day. I and Randeep were sitting idle at  office that day and a lady appears and says she’s come of a walk-in interview  that we advertised in the newspaper. Normally we had nothing to do (and no say)  in the recruitment process but since Sandeep wasn’t around, we thought to handle  the situation. We posed as if we were the right people to talk to and started  the interview. The lady ‘L Sri Priya’ was a rather short, dark complexioned  south Indian and didn’t look like she was worthy enough for this job. But faces  deceive. Our first question was about her work experience and the answer was  that she has been a Manager in Standard Chartered bank for a couple of years.  Now now now, we were quiet in trouble. We had no idea how to deal with a senior  person that she was. Obviously we had no questions to ask. Although we did ask  ‘why upbazar.com’ and why did you leave Standard Chartered. It turned out that  her husband was transferred to Lucknow and she had to accompany him to this city  and now she was looking for some job that won’t have any long term commitment.</p>
<p>She was good in all respect for our needs. Sandeep went by our word and hired  her. Very soon we also had half a dozen sales executives. The company was  growing fast, you see. However, I was never convinced by the core idea behind  the company. Computer penetration in a city like Lucknow was very low. A  fraction of people had computers at that time and only a fraction of the people  who had computers had Internet. So why would a person log on to computer and  visit a website to find out which is the best shop for him. Normally, a person  knows where to get his daily stuff.</p>
<p>But I had a different interest in this project. Learning. I couldn’t afford a  web space just for experimenting. Web server space was costly and I was just a  student. So, I saw this as a big opportunity to play with a web space and know  more about how a website is hosted.</p>
<p>So as I said before, I worked really hard to develop the website. And this night  I was all set to make the site ‘live’. But the question was ‘How’? I had no idea  what do I need to do to make my site run on the server. I didn’t know anything  about FTP nor did I know how can I copy files to the server. So I was shooting  queries like ‘copy file to server’, ‘run website on server’ on google (so nice  that google was there at that time too). So it took a lot of discovery to figure  out that we can upload file to a server with the help of something called FTP.  Finally a couple of hours later, I could get my files up there and database  configured. And lo… if I type upbazar.com on the browser, the website opens… the  same one that opens on my localhost. <strong><span style="color: #800000;">It was a moment of triumph for me.</span></strong> Simply  the thought that people can see my creation from anywhere in the world was so  exhilarating. It was really a happy moment for me.<br />
The site was up and within some time we had a couple of customers too.</p>
<p>And then  we hit the wall. Persuading businesses to advertise with us was a difficult  task. While we had customers, but we needed a lot more even to break even. As I  look back to it, I feel there were a couple of things that could and should have  been done differently.</p>
<ul>
<li>We were paying way too high to our manager. Fine that she was very qualified  but she was over-qualified for the job that we had. We were paying her  commensurate to her qualifications which was not right. We should have been  paying her commensurate to the job requirements that we had.</li>
<li> I feel that this project was way ahead in time for Lucknow. Lucknow (or for  that matter even metro cities) was not technically advanced to fully leverage  the benefits of such a system. People still preferred traditional ways to shop.</li>
<li> Technology in general wasn’t at a stage where it could compliment our  business. For example, there were no iPhones or smartphones then. I just think  of a scenario where people would use PDA’s and our site would then have a mobile  version where one could make use of all the facilities via mobile phones. This  was much more convenient for a person who is on road and wants to lookup  something.</li>
</ul>
<p>Sandeep tried hard to continue the business. Unfortunately, he suffered huge  losses in a years’ time and had to shut down the business. It was really sad.  The domain name wasn’t renewed the following year and the site was off the  Internet. It has been years since then, but whenever I chance to go alongside  the road where that office was, I remember those days and feel bad about the  outcome. I still have that website on my computer and it still works. Probably  I’ll have it with me for the rest of my life. After all it was my first website  that went ‘on air’.</p>
<p>Incidentally, the CEO of a New York based startup yext.com had come to Carnegie  Mellon to hire engineers for his company. Yext.com is a ‘the next yellow pages’  company (and hence the name yext). He gave a impressive introduction about his  company. Surprisingly, this company has a very similar concept that we had.  During his entire address, I kept thinking about upbazar.com. Its a  multi-million dollars company already and has only 4 engineers and about a  couple of dozens of sales and marketing people. How similar to our setup.  Obviously ideas are re-discovered over time and more importantly it’s their  implementation that makes them work. Recently the business model of yext was  liked by many at    <a href="http://techcrunch.com/2009/10/01/the-25-million-demo-yext-scores-a-big-round-from-ivp-after-techcrunch50-debut/"> Techcrunch50 </a>and he got huge funding.</p>
<p>Upbazar.com came to a end. But we all kept moving. Some in that team moved  really far. I completed my engineering and moved to USA. Himanshu, the other  developer, has moved to UK. Sandeep is doing fine with his primary business  and Randeep is now a commercial pilot and flies Airbus A320(don’t be  surprised &#8211; he is a sardar, he is bound to do crazy things.)</p>
<p dir="ltr">My technical skills have bettered    since then and I have developed and hosted a lots of sites since then.    Fortunately I landed up at Carnegie Mellon University where my learning curve    has been exponential. With so many websites running on various collocated servers, lately recurring  payments to web hosting companies was becoming a pain and so I thought &#8211; <strong> <span style="color: #800000;">‘time  has come to have my own webserver’</span></strong>.</p>
<p>I had been searching for some hardware to turn it into a webserver. I found good  enough box at craiglist and was all set to do the magic. So last night, there  was a lot of resemblance in what I was doing a couple of years back. But my  queries were a bit different though. This time they were ‘apache vs IIS’, ‘best  linux disto for webserver’ and ‘chrooting for FTP’. After a couple of hours of  configurations and installations, I had my webserver up, running and live. Running a webserver when you don’t want to make ‘any’ investments is a big    <a href="http://en.wikipedia.org/wiki/Jugaad">Jugad</a>.  I am running my server on my home connection. So, I had to find and  configure a <span style="text-decoration: underline;">free</span> dynamic DNS, a <span style="text-decoration: underline;">free</span> and robust dynamic DNS client, proper port  forwarding and correct configurations. I specially stress on correct  configuration for the reasons mentioned below.</p>
<p>Well, I am specializing in Information security and have taken many security/computer  forensics classes. In more than one class, the professors told that it is common  for a machine (specially server) to get attacked and compromised within hours  once it gets connected to a wild wild internet. I always wondered how could that  be</p>
<p>I don&#8217;t wonder anymore. Within hours after the DNS was set up to    route traffic to my server, I got my first attack. A brute-force attack on    FTP. I was very excited to see the attack happening right before my eyes. I    quickly fired up wireshark and could see the passwords that the attacker was trying to access the  FTP account. The pattern of passwords indicated a dictionary attack. My  excitement did not last long as soon I realized that getting attacked is now the order of the day. I  get almost 4-5 FTP attacks per day. The attacking computers are from all over  the world- China, Korea, Germany.. you name it. For almost all the cases, the  attacking computers are themselves compromised. It is the bot on that machine    that is attacking my  server and the owner of that computer doesn&#8217;t know it. Poor  owners of those computers don’t even know that their computer has port 80  (http), 21(ftp) opened on their systems and that they are serving porn to the  world and attacking other computers.</p>
<p>However, I’ll take a moment to clarify that although I get attacked many times a  day, my server hasn’t been compromised on any of those attacks. I have set up  sophisticated triggers that ban IP’s on 15 invalid attempts of FTP logins and  other such security primitives. And for those who didn’t know, companies like  google, facebook, amazon face huge attacks from around the world every hour and  survive them. The internet is a very hostile environment &#8211; ask any system  administrator and he’ll tell you the tales of horror.</p>
<p>My next action item is to make the server really secure. It will indeed be a  shame if my server gets hacked. Currently it is on a Windows/Apache platform, I  plan it to move it to Linux/Apache pretty soon. Currently my old school project http://mocktest.net runs on it. It’s a ASP  website running on Apache so obviously isn’t functional but the point is that I  can host php/mysql websites now.</p>
<p><span style="color: #800000;"><strong>Before I end    my gigantic blog, a note to all my special friends:</strong></span> Come on, stop    paying to your webhosts, your friend just got a ‘world class’ server. Gimme    your code and I’ll host it for free !</p>
<blockquote><p>So, this is the story of two triumphs of my life. Although the first triumph was  much more special but nevertheless it is a great feeling to have my own webserver. It feels great whenever the server’s hard disk starts churning every    now and then. I know that someone, somewhere in the world has clicked my    website <img src='http://shivampatel.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p></blockquote>
<p>Oh by the way.. here&#8217;s what my server looks like:</p>
<div id="attachment_36" class="wp-caption alignleft" style="width: 310px"><a href="http://shivampatel.net/blog/wp-content/uploads/2010/02/DSC00347.jpg"><img class="size-medium wp-image-36" title="I and my Web Server !!" src="http://shivampatel.net/blog/wp-content/uploads/2010/02/DSC00347-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">I and my Web Server !!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2010/02/12/from-a-website-to-a-webserver/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Remebering Randy Paush</title>
		<link>http://shivampatel.net/blog/index.php/2010/01/31/remebering-randy-paush/</link>
		<comments>http://shivampatel.net/blog/index.php/2010/01/31/remebering-randy-paush/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 07:01:21 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[Personal Life]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=14</guid>
		<description><![CDATA[It is such a pleasure and honor to be at a place where professors like Randy Pausch have spent their lives. He inspired students when he was with us and he continues to inspire us after he&#8217;s gone. The Randy Pausch Bridge connects the fine arts buliding, Purnell Center, with the Gates &#38; Hillman Centers, [...]]]></description>
			<content:encoded><![CDATA[<p>It is such a pleasure and honor to be at a place where professors like <a href="http://en.wikipedia.org/wiki/Randy_Pausch">Randy Pausch</a> have spent their lives. He inspired students when he was with us and he continues to inspire us after he&#8217;s gone.<br />
The <a href="http://www.cmu.edu/randyslecture/bridge.html">Randy Pausch Bridge</a> connects the fine arts buliding, Purnell Center, with the Gates &amp; Hillman Centers, the home for computer science at Carnegie Mellon.</p>
<p>The bridge&#8217;s railing consists of 7000 programmable LED&#8217;s that animate to represent 6 different metaphors from his book &#8220;The Last Lecture&#8221;. The 6 animated sequence represent:</p>
<ul>
<li>Fun with Crayons</li>
<li>Outer Space</li>
<li>Make the Most of Each Day</li>
<li>Be the First Penguin</li>
<li>The Elevator in Randy’s Room</li>
<li>Disney and the Circus</li>
</ul>
<p>A beautiful video on the various sequence can be seen below.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/4sL-8r3kMBw&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/4sL-8r3kMBw&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>This bridge will stand forever and keep inspiring generations of students who&#8217;ll walk on it. We&#8217;ll always miss him.<br />
<img class="alignnone" title="Randy Pausch Bridge" src="http://shivampatel.net/images/banner3_full.jpg" alt="" width="512" height="384" /> This picture was taken on 6 December 2009</p>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2010/01/31/remebering-randy-paush/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pittsburgh Downtown</title>
		<link>http://shivampatel.net/blog/index.php/2009/10/27/pittsburgh-downtown/</link>
		<comments>http://shivampatel.net/blog/index.php/2009/10/27/pittsburgh-downtown/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 03:30:16 +0000</pubDate>
		<dc:creator>Shivam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shivampatel.net/blog/?p=8</guid>
		<description><![CDATA[Pittsburgh has one of the most picturesque downtown of all the cities I have seen.  You won&#8217;t find many cities where 2 rivers meet to form a third right at the heart of the town. Two rivers, Allegheny and Monongahela meet here to form the Ohio river. The place of confluence is called the Golden Triangle (between [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="Pittsburgh Downtown" src="http://www.shivampatel.net/images/banner1_full.jpg" title="Pittsburgh Downtown" class="alignnone" width="531" height="275" /><br />
Pittsburgh has one of the most picturesque downtown of all the cities I have seen.  You won&#8217;t find many cities where 2 rivers meet to form a third right at the heart of the town.</p>
<p>Two rivers, Allegheny and Monongahela meet here to form the Ohio river. The place of confluence is called the Golden Triangle (between Allegheny and Monongahela) and there is a nice park at this place.</p>
<p>The beauty of this is accentuated by surrounding hills which present make the view even better. If you want to admire its real beauty, take a fun ride on Duquesne Incline to reach the top of Mt. Washington and start clicking</p>
<p>About this Picture:<br />
This picture was taken from Mt. Washington on 19 Dec 2008.</p>
]]></content:encoded>
			<wfw:commentRss>http://shivampatel.net/blog/index.php/2009/10/27/pittsburgh-downtown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

