<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Fortinet Security Blog &#187; pushdo</title>
	<atom:link href="http://blog.fortinet.com/tag/pushdo/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.fortinet.com</link>
	<description>Real Time Network Protection</description>
	<lastBuildDate>Fri, 27 Jan 2012 11:59:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<!-- podcast_generator="podPress/8.8" -->
		<copyright>&#xA9;Fortinet Product Marketing </copyright>
		<managingEditor>rpopko@fortinet.com (Fortinet Product Marketing)</managingEditor>
		<webMaster>rpopko@fortinet.com(Fortinet Product Marketing)</webMaster>
		<category>Fortinet Product Information</category>
		<ttl>1440</ttl>
		<itunes:keywords>forti-gate, anti-spam, anti-virus, fortigate</itunes:keywords>
		<itunes:subtitle>The latest news and information about Fortinet products and services for Real Time Network Protection.</itunes:subtitle>
		<itunes:summary>Fortinet is a leading provider of Unified Threat Management (UTM) network security solutions for enterprise and service provider environments. The Fortinet FortiCast delivers news, information, and tutorials about products, services, and industry trends. Fortinet's FortiGate product line and FortiGuard security subscription services provide an array of integrated network security functions including antivirus, firewall, virtual private networking, intrusion prevention (IPS), web filtering, antispam and traffic optimization. </itunes:summary>
		<itunes:author>Fortinet Product Marketing</itunes:author>
		<itunes:category text="Technology"/>
<itunes:category text="Technology">
  <itunes:category text="Tech News"/>
</itunes:category>
		<itunes:owner>
			<itunes:name>Fortinet Product Marketing</itunes:name>
			<itunes:email>rpopko@fortinet.com</itunes:email>
		</itunes:owner>
		<itunes:block>No</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://blog.fortinet.com/wp-content/uploads/2009/01/forticast-300x300.jpg" />
		<image>
			<url>http://blog.fortinet.com/wp-content/uploads/2009/01/forticast-144x144.jpg</url>
			<title>Fortinet Security Blog</title>
			<link>http://blog.fortinet.com</link>
			<width>144</width>
			<height>144</height>
		</image>
		<item>
		<title>Pushdo Revolutions: Communication Encryption and Decoy Traffic</title>
		<link>http://blog.fortinet.com/pushdo-revolutions-communication-encryption-and-decoy-traffic/</link>
		<comments>http://blog.fortinet.com/pushdo-revolutions-communication-encryption-and-decoy-traffic/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 19:37:07 +0000</pubDate>
		<dc:creator>xyang</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[pushdo]]></category>

		<guid isPermaLink="false">http://blog.fortinet.com/?p=951</guid>
		<description><![CDATA[It&#8217;s been two months since we revealed the 3rd Generation Pushdo/Cutwail/Webwail Botnet communication protocol and encryption. Recently, while researching a new bot (GoolBot), we found another Pushdo-like malware spreading with its help. After reversing, it became clear that it was a brand new evolution of the infamous multi-malware loader, for two essential reasons: While it [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been two months since we <a id="i-l1" title="revealed the 3rd Generation Pushdo/Cutwail" href="http://www.fortiguard.com/analysis/pushdoanalysis.html">revealed the 3rd Generation Pushdo/Cutwail</a>/Webwail Botnet communication protocol and encryption. Recently, while researching a new bot (GoolBot), we found another Pushdo-like malware spreading with its help. After reversing, it became clear that it was a brand new evolution of the infamous multi-malware loader, for two essential reasons:</p>
<ul>
<li>While it used the 2nd generation Pushdo communication protocol (with minor varations), it encrypted its communications and routed them through the SSL port (443); while this encryption looked like SSL at first sight (which would be consistent with the choice of the port), it is actually NOT.</li>
</ul>
<ul>
<li>There is a routine which generates some actual SSL traffic to a list of 339 <a href="http://blog.fortinet.com/wp-content/uploads/2010/02/ddnknshk_126f427t7fp_b.jpg">known web sites</a><span style="color: #ff0000;"> </span>(legitimate, for the most part), obviously to drawn bot-to-C&amp;C communication in a sea of decoys.</li>
</ul>
<p>This latter point explains why so many webmasters are <a id="sd5d" title="report that SSL traffic" href="http://www.shadowserver.org/wiki/pmwiki.php/Calendar/20100129">reporting that SSL traffic</a> (coming from different IPs) is much higher than normal these days. The good news for them is that the additional traffic is not malicious (application-wise, that is), and the bad news is that an increase of actual viewers is not the cause of it: it&#8217;s just some dummy data generated by calls to the QueryPerformanceCounter API in the latest Pushdo evolution.</p>
<p>Memory snapshots (from a pushdo infected machine) below illustrate the former point about encryption.</p>
<p>Before encryption:</p>
<p><a href="http://blog.fortinet.com/wp-content/uploads/2010/02/ddnknshk_118hmct3mcj_b.jpg"><img class="alignnone size-full wp-image-954" title="ddnknshk_118hmct3mcj_b" src="http://blog.fortinet.com/wp-content/uploads/2010/02/ddnknshk_118hmct3mcj_b.jpg" alt="ddnknshk_118hmct3mcj_b" /></a></p>
<p>After encryption (same memory space), just before sending:</p>
<p><a href="http://blog.fortinet.com/wp-content/uploads/2010/02/ddnknshk_119d52p4qg2_b.jpg"><img class="alignnone size-full wp-image-955" title="ddnknshk_119d52p4qg2_b" src="http://blog.fortinet.com/wp-content/uploads/2010/02/ddnknshk_119d52p4qg2_b.jpg" alt="ddnknshk_119d52p4qg2_b" /></a><br />
The response from the C&amp;C server, encrypted alike, contains the rootkit and spam engine modules (classic Pushdo process).</p>
<p>As an interesting side note, as we will see below, here is a list of those C&amp;Cs:</p>
<div id="xqq9" style="text-align: left;">75.126.159.19:443<br />
75.126.159.19:443<br />
94.75.233.173:443<br />
94.75.233.174:443<br />
94.75.233.171<br />
94.75.233.172<br />
89.149.254.213<br />
89.149.244.141<br />
89.149.244.23<br />
aaa.oduvanchic.com<br />
aaa.news2days.ru<br />
antisgetout.cn<br />
fire***eye.com<br />
****briankrebs.com</p>
<p>This time, the author(s) was/were kind enough to leave the PDB filepath<br />
in the binary:<br />
&#8220;e:\Source\sloader_conc12np1\sloader_conc1\svcloader\Release\svcloader.pdb&#8221;</p>
<p>Historically, it has been common for malware authors to send messages hidden within their binaries &#8211; often as strings. There are, however, other ways. The last listed domain above, presumably registered by the author(s) of this Pushdo variant used for C&amp;C, is an obvious dig at Brian Krebs, author of <a id="sxjm" title="Krebs on Security" href="http://www.krebsonsecurity.com/">Krebs on Security</a> (previously The Washington Post). Indeed, <a id="cevj" title="this is not the first time" href="http://www.krebsonsecurity.com/2010/01/tough-talk-from-those-who-hide/">this is not the first time</a>. We had a look at the <a id="ewa9" title="variant referenced" href="http://www.virustotal.com/analisis/7f4e9677513fd98d8e93cd5baa6e4dd96188010e58191f5cd32a8a726f7cdb01-1263611340">variant referenced</a> in this post (Harebot, detected by Fortinet as W32/Agent.LKU!tr) that was circulating around January 17th, 2010. In fact, this variant is a dropper that drops the same updated 2nd generation Pushdo. These are the main points we observed with this variant seen around January 17th:</p>
<ul>
<li>No SSL traffic is sent: The 2nd generation traffic is still encrypted, but is transmitted on port 80</li>
<li>The project path is slightly different (see above for current path): &#8221; e:\Source\sloader_conc1\svcloader\Release\svcloader.pdb&#8221;</li>
<li>The same C&amp;C domains are used</li>
</ul>
<p>Therefore, we can see the development path the authors are taking with this new variation. In January, they had updated to the new encrypted protocol but did not have the SSL traffic module included. Now, in February, we see the SSL module emerge. Could it shed some light on the question &#8220;are all Pushdo evolutions from the same author(s)&#8221;?</p>
<p>-Kyle</p>
<p><strong>Guillaume Lovet and Derek Manky contributed to this post.</strong></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.fortinet.com/pushdo-revolutions-communication-encryption-and-decoy-traffic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Decrypting Pushdo Botnet Messages</title>
		<link>http://blog.fortinet.com/decrypting-pushdo-botnet-messages/</link>
		<comments>http://blog.fortinet.com/decrypting-pushdo-botnet-messages/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 19:05:59 +0000</pubDate>
		<dc:creator>DMacDonald</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[botnet]]></category>
		<category><![CDATA[Cryptography]]></category>
		<category><![CDATA[pushdo]]></category>

		<guid isPermaLink="false">http://blog.fortinet.com/?p=839</guid>
		<description><![CDATA[While looking at some Pushdo botnet messages recently, I noticed a repeating pattern in the data. Here is an example, taken from an area where the pattern is most obvious: 0340  13 63 cc 69 13 63 cc 69 13 63 cc 69 53 63 cc 2b   .c.i.c.i.c.iSc.+0350  13 63 cc 69 13 63 cc [...]]]></description>
			<content:encoded><![CDATA[<p>While looking at some Pushdo botnet messages recently, I noticed a repeating pattern in the data. Here is an example, taken from an area where the pattern is most obvious:</p>
<p><span style="font-family: Courier New">0340  <strong>13 63 cc 69</strong> 13 63 cc 69 13 63 cc 69 53 63 cc 2b   .c.i.c.i.c.iSc.+</span><br /><span style="font-family: Courier New">0350  13 63 cc 69 13 63 cc 69 13 63 cc 69 13 63 cc 69   .c.i.c.i.c.i.c.i</span><br /><span style="font-family: Courier New">0360  13 63 cc 69 13 63 cc 69 13 63 cc 69 13 63 cc 69   .c.i.c.i.c.i.c.i</span></p>
<p>This looked to me like a flaw in the encryption that potentially could be used for detection purposes. It might even be possible to automatically break the encryption.</p>
<p>It is not hard to guess the cause of this pattern. The data was encrypted with a four byte key, and what we see here is the result of encrypting a block of nulls. Null blocks are an expected part of most program files and not unusual in data files, and this Pushdo message certainly contains both. Looking around in the message data, we can see that even where non-null data is mixed in, the underlying pattern can be recognized.</p>
<p><span style="font-family: Courier New">0030  &#8212; &#8211; &#8212; &#8211; &#8212; &#8211; 15 c8 fc 31 20 20 3f 19 1a <strong>63</strong> . .j&#8230;..1  ?..c</span><br /><span style="font-family: Courier New">0040  d2 <strong>69</strong> 89 <strong>63</strong> 3c 1b 7c db 45 <strong>69</strong> 00 <strong>63 cc 69 13 63</strong> .i.c&lt;.|.Ei.c.i.c</span><br /><span style="font-family: Courier New">0050  1c <strong>69</strong> 21 94 04 47 25 94 fa 5e 3d 9c <strong>cc</strong> 7f <strong>13 63</strong> .i!..G%..^=&#8230;.c</span><br /><span style="font-family: Courier New">0060  <strong>cc 69 13</strong> b3 <strong>cc</strong> 5f 22 91 fd 5c 2b 91 fd 5f 24 91   .i&#8230;_&#8221;..\+.._$.</span></p>
<p>If the encryption was done using a simple XOR, the four pattern bytes would serve as a key to decrypt the message data. But the Pushdo encryption algorithm is a bit more complicated than that. A recent in-depth analysis by Fortinet&#8217;s Kyle Yang <a id="z68c" title="reveals the encryption algorithm" href="http://www.fortiguard.com/analysis/pushdoanalysis.html">reveals the encryption algorithm</a>.</p>
<p>Pushdo encryption uses three key bytes, which we will refer to as key0, key1, and key2. A new key is generated whenever the infected computer is restarted. Here is how the encryption is done.</p>
<p><span style="color: #0000ff">(plain byte 0) XOR key0 = (encrypted byte 0)</span><br /><span style="color: #0000ff">(plain byte 1) &#8211; key1 = (encrypted byte 1)</span><br /><span style="color: #0000ff">(plain byte 2) + key2 = (encrypted byte 2)</span><br /><span style="color: #0000ff">(plain byte 3) XOR (key1 + key2) = (encrypted byte 3)</span></p>
<p>One of the most important rules for encryption systems is that security should depend on the keys, not on the secrecy of the encryption algorithm. In this case a bit of reverse engineering has revealed the algorithm, so whatever security remains is provided by the keys.</p>
<p>At this point it looks like we have all the information we need to decrypt this message. We know how the encryption works, and we should be able to calculate the key from the repeating pattern. But it would be convenient for us to be able to use the pattern itself as the key, if that is possible.</p>
<p>Notice that the last encryption rule contains an unnecessary complication that does not improve security. Adding key1 and key2 only serves to produce another static key byte. For our decryption we can simplify this rule by combining key1 and key2:</p>
<p><span style="color: #0000ff">(plain byte 3) XOR key1.2 = (encrypted byte 3)</span></p>
<p>The plus and minus operations must also be reversed, so the new rules for decryption are:</p>
<p><span style="color: #0000ff">(encrypted byte 0) XOR key0 = (plain byte 0)</span><br />
<span style="color: #0000ff">(encrypted byte 1) + key1 = (plain byte 1)</span><br />
<span style="color: #0000ff">(encrypted byte 2) &#8211; key2 = (plain byte 2)</span><br />
<span style="color: #0000ff">(encrypted byte 3) XOR key1.2 = (plain byte 3)</span></p>
<p>To find the key bytes from the pattern bytes, we can rearrange the decryption rules this way:</p>
<p><span style="color: #0000ff">key0 = (plain byte 0) XOR (pattern byte 0)</span><br />
<span style="color: #0000ff"> key1 = (plain byte 1) &#8211; (pattern byte 1)</span><br />
<span style="color: #0000ff">key2 = &#8211; (plain byte 2) + (pattern byte 2)</span><br />
<span style="color: #0000ff">key1.2 = (plain byte 3) XOR (pattern byte 3)</span></p>
<p>The pattern bytes need to be aligned with the encryption rules before we can find the key bytes. We could test all four possibilities, but a quicker way to do this is by looking at the start of the data. We know from reverse engineering that the message has an 8 byte header, which means the data starts at frame offset 0x003e, so the pattern byte that falls here will correspond to key0. The pattern bytes are <strong>cc 69 </strong><strong>13 63</strong>.</p>
<p><span style="font-family: Courier New">0030  &#8212; &#8211; &#8212; &#8211; &#8212; &#8211; 15 c8 fc 31 20 20 3f 19 1a <strong>63</strong> . .j&#8230;..1  ?..c</span><br /><span style="font-family: Courier New"><span style="background-color: #ffffff"><span style="color: #0000ff">key   &#8212; &#8211; &#8212; &#8211; &#8212; &#8211; &#8212; &#8211; &#8212; &#8211; &#8212; &#8211; &#8212; &#8211; 13 <strong>63</strong></span></span> </span><br /><span style="font-family: Courier New">0040  d2 <strong>69</strong> 89 <strong>63</strong> 3c 1b 7c db 45 <strong>69</strong> 00 <strong>63 cc 69 13 63</strong> .i.c&lt;.|.Ei.c.i.c</span><br /><span style="font-family: Courier New;color: #0000ff">key   cc <strong>69</strong> 13 <strong>63</strong> cc 69 13 63 cc <strong>69</strong> <strong>13</strong> <strong>63 cc 69 13 63</strong></span></p>
<p>Based on this alignment the pattern byte identities are:</p>
<p><span style="color: #0000ff">pattern byte 0 = 0&#215;13</span><br /><span style="color: #0000ff">pattern byte 1 = 0&#215;63 </span><br /><span style="color: #0000ff">pattern byte 2 = 0xcc</span><br /><span style="color: #0000ff">pattern byte 1.2 = 0&#215;69</span></p>
<p>Using the equations above, with the plain bytes set to zero, the key bytes are:</p>
<p><span style="color: #0000ff">key0 = 0&#215;13</span><br /><span style="color: #0000ff">key1 = 0x9d </span><br /><span style="color: #0000ff">key2 = 0xcc</span><br /><span style="color: #0000ff">key1.2 = 0&#215;69</span></p>
<p>To test this we can decrypt some message data to see if we get the correct result. The block below was chosen at random from an area known to contain hard coded IP addresses.</p>
<p><span style="font-family: Courier New">0060  cc 69 13 b3 cc 5f 22 91 fd 5c 2b 91 fd 5f 24 91   .i&#8230;_&#8221;..\+.._$.</span><br /><span style="font-family: Courier New;color: #0000ff">key   cc 69 13 9d cc 69 13 9d cc 69 13 9d cc 69 13 9d</span><br /><span style="font-family: Courier New;color: #ff0000">plain 00 00 00 50 00 36 31 2e 31 35 38 2e 31 36 37 2e</span><br /><span style="font-family: Courier New">text                  6  1  .  1  5  8  .  1  6  7  . </span></p>
<p><span style="font-family: Courier New">0070  01 50 13 7b cc 69 13 63 cc 39 13 94 03 5d 3d 94   .P.{.i.c.9&#8230;]=.</span><br /><span style="font-family: Courier New;color: #0000ff">key   cc 69 13 9d cc 69 13 9d cc 69 13 9d cc 69 13 9d</span><br /><span style="font-family: Courier New"><span style="color: #ff0000">plain 35 39 00 18 00 00 00 00 00 60 00 31 37 34 2e 31</span> </span><br /><span style="font-family: Courier New">text   5  9                             1  7  4  .  1 </span></p>
<p><span style="font-family: Courier New">0080  ff 5a 3d 94 fc 5d 3d 95 fd 59 13 79 cc 69 13 63   .Z=..]=..Y.y.i.c</span><br /><span style="font-family: Courier New;color: #0000ff">key   cc 69 13 9d cc 69 13 9d cc 69 13 9d cc 69 13 9d</span><br /><span style="font-family: Courier New;color: #ff0000">plain 33 33 2e 31 30 34 2e 32 31 30 00 16 00 00 00 00</span><br /><span style="font-family: Courier New">text   3  3  .  1  0  4  .  2  1  0 </span></p>
<p><span style="font-family: Courier New">0090  cc 39 13 95 fe 58 3d 95 ff 59 3d 95 fa 5b 23 9b   .9&#8230;X=..Y=..[#.</span><br /><span style="font-family: Courier New;color: #0000ff">key   cc 69 13 9d cc 69 13 9d cc 69 13 9d cc 69 13 9d</span><br /><span style="font-family: Courier New;color: #ff0000">plain 00 50 00 32 32 31 2e 32 33 30 2e 32 2e 32 30 38</span><br /><span style="font-family: Courier New">text            2  2  1  .  2  3  0  .  2  .  2  0  8 </span></p>
<p>The IP addresses found above in the decrypted block match ones known to be used by this version of Pushdo, so we can safely say the decryption is correct. Automated detection should be possible by picking the key from the message and applying it to a known block like the one above. Even if the IP addresses are changed, their presence in this format can be detected, along with other parts of the structure they are held in.</p>
<p>Unfortunately, sooner or later the encryption algorithm will be changed. It can be recovered by reverse engineering, but we would like to handle the change automatically, if that is possible.</p>
<p>We have some knowledge about the unencrypted data, for example we know that the data block seen here contains a number of IP addresses in text format. More of this kind of predictable data can likely be found. So we should be able to find the key, and we have all of the encrypted data and some of the unencrypted data.</p>
<p>With this information it may be possible to derive the arithmetic or logic operations used to encrypt each of the four bytes. Simple operations like XOR, plus and minus should not be hard to identify. Only operations that do not destroy data can be used, so it may be possible to generate a list of acceptable operations that are not excessively complex. As we saw with the fourth rule, overly complex operations may be reduced to simpler ones. In this sort of analysis we would probably not even be aware of the reduction.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.fortinet.com/decrypting-pushdo-botnet-messages/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

