<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-6690994337395244641</id><updated>2009-12-30T13:52:21.936-05:00</updated><title type='text'>Paul Melson's Blog</title><subtitle type='html'>Blog about information security and other random topics</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default?orderby=updated'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default?start-index=26&amp;max-results=25&amp;orderby=updated'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>202</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-415338778579217003</id><published>2009-09-23T22:07:00.020-05:00</published><updated>2009-12-30T07:46:23.456-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logs'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>Queries: Excel vs. ArcSight</title><content type='html'>Since ArcSight ESM 4.0, reports and trends have been based on queries.  Considering that ESM runs on top of Oracle, a query in ESM is exactly what you think it is.  Queries are an extremely flexible way to get at event data. But as the name implies, they go against the ARC_EVENT_DATA tablespace, and therefore you can't use them to build data monitors or rule conditions, since those engines run against data prior to insertion into the database.&lt;br /&gt;&lt;br /&gt;Anyway, I've got a story about how cool queries are.  And about how much of an Excel badass I am. And also about how queries are still better.  Last month, I got a request from one of our architects who was running down an issue related to client VPN activity.  Specifically, he wanted to know how many remote VPN users we had over time for a particular morning.  Since we feed those logs to ESM, I was a logical person to ask for the information.&lt;br /&gt;&lt;br /&gt;So I pulled up the relevant events in an active channel and realized that I wasn't going to be able to work this one out just sorting columns.  So, without thinking, I exported the events and pulled them up in Excel.  So here's the Excel badass part:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/SrrqSjWX45I/AAAAAAAABNs/_C8EGtrOHsI/s1600-h/xl2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 121px;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/SrrqSjWX45I/AAAAAAAABNs/_C8EGtrOHsI/s200/xl2.JPG" alt="" id="BLOGGER_PHOTO_ID_5384873908922475410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jhFXi2qCoWc/Srrm6EanvaI/AAAAAAAABNk/t0eotLr9X1I/s1600-h/xl1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 16px;" src="http://4.bp.blogspot.com/_jhFXi2qCoWc/Srrm6EanvaI/AAAAAAAABNk/t0eotLr9X1I/s320/xl1.JPG" alt="" id="BLOGGER_PHOTO_ID_5384870189767048610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you want to copy it, here it is:&lt;br /&gt;=SUM(IF(FREQUENCY(MATCH(A2:A3653,A2:A3653,0),MATCH(A2:A3653,A2:A3653,0))&gt;0,1))&lt;br /&gt;&lt;br /&gt;So A is the column that usernames are in.  This formula uses the MATCH function to create a list of usernames and then the FREQUENCY function to count the unique values in the match lists.  You need two MATCH lists to make FREQUENCY happy because it requires two arguments, hence the redundancy.  It took about an hour for me to put it together, most of that was spent finding the row numbers that corresponded to the time segment borders.&lt;br /&gt;&lt;br /&gt;But as I finished it up and sent it off to the requesting architect, I thought, there must be an easier way. And of course there is.  So here's how you do the same thing in ESM using queries:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/SztK91SK9NI/AAAAAAAABQQ/Fml7u4uoZos/s1600-h/qry1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 232px; height: 320px;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/SztK91SK9NI/AAAAAAAABQQ/Fml7u4uoZos/s320/qry1.JPG" alt="" id="BLOGGER_PHOTO_ID_5421009002606294226" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jhFXi2qCoWc/SztLMNSG8UI/AAAAAAAABQY/PR1kukSa_eA/s1600-h/qry2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 164px; height: 320px;" src="http://4.bp.blogspot.com/_jhFXi2qCoWc/SztLMNSG8UI/AAAAAAAABQY/PR1kukSa_eA/s320/qry2.JPG" alt="" id="BLOGGER_PHOTO_ID_5421009249566650690" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jhFXi2qCoWc/SztLaNC6tiI/AAAAAAAABQg/whvu5Dz_Q_M/s1600-h/qry3.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 163px; height: 320px;" src="http://4.bp.blogspot.com/_jhFXi2qCoWc/SztLaNC6tiI/AAAAAAAABQg/whvu5Dz_Q_M/s320/qry3.JPG" alt="" id="BLOGGER_PHOTO_ID_5421009490021103138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, it's just EndTime with the hour function applied, and TargetUserName with the count function applied, and the Unique box (DISTINCT for the Oracle DBA's playing at home) checked.  And then on the Conditions tab you create your filter to select only the events you want to query against. That's it.&lt;br /&gt;&lt;br /&gt;Once the query is created, just run the Report Wizard and go.  All told, it's about 90 seconds to the same thing with a query and report that it took an hour to do in Excel.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/Srr1zb1cKyI/AAAAAAAABO0/wLSN2n5id4Q/s1600-h/rpt1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 158px;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/Srr1zb1cKyI/AAAAAAAABO0/wLSN2n5id4Q/s320/rpt1.JPG" alt="" id="BLOGGER_PHOTO_ID_5384886568468884258" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-415338778579217003?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/415338778579217003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=415338778579217003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/415338778579217003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/415338778579217003'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/09/queries-excel-vs-arcsight.html' title='Queries: Excel vs. ArcSight'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jhFXi2qCoWc/SrrqSjWX45I/AAAAAAAABNs/_C8EGtrOHsI/s72-c/xl2.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-6453118783525044035</id><published>2009-12-28T15:09:00.013-05:00</published><updated>2009-12-29T22:37:45.441-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Malware Analysis Toolkit for 2010</title><content type='html'>Back in 2008 I posted a list of the tools I use for doing malware analysis.  The tools I use have changed over time, and rather than just talk about a couple of recent additions, I decided I'd put a current complete list up with links.  This is by no means a comprehensive list of malware analysis tools, it's just what I like and use.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Platform&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;VMWare Workstation&lt;/li&gt;&lt;li&gt;The "vulnerable stuff:"&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Windows XP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Internet Explorer 7/8&lt;/li&gt;&lt;li&gt;Firefox&lt;/li&gt;&lt;li&gt;Acrobat Reader&lt;/li&gt;&lt;li&gt;Flash Player&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;General Tools&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Perl&lt;/li&gt;&lt;li&gt;Python&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hhdsoftware.com/"&gt;Hex Editor Neo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.slavasoft.com/hashcalc/index.htm"&gt;HashCalc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.izarc.org/"&gt;IZArc&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Analysis Tools&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://labs.idefense.com/software/malcode.php"&gt;SysAnalyzer / iDEFENSE MAP&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www2.gmer.net/"&gt;GMER / catchme&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.idefense.com/software/malcode.php"&gt;Multipot&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.online-solutions.ru/en/products/osam-autorun-manager.html"&gt;OSAM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://free.antivirus.com/hijackthis/"&gt;HijackThis&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mlin.net/StartupCPL.shtml"&gt;Startup Control Panel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.idefense.com/software/malcode.php"&gt;HookExplorer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx"&gt;Sysinternals Suite&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scanit.net/rd/tools/03"&gt;ProcL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.idefense.com/software/malcode.php"&gt;sniff_hit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt; (run on "Host OS" outside VM)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Binary Tools&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mandiant.com/mrc"&gt;Mandiant Red Curtain&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ollydbg.de/"&gt;OllyDbg 1.10&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.openrce.org/downloads/browse/OllyDbg_Plugins"&gt;Various OllyDbg plugins&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.peid.info/"&gt;PEiD&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rdgsoft.8k.com/"&gt;RDG Packer Detector&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/pefile/"&gt;pefile&lt;/a&gt; / &lt;a href="http://handlers.dshield.org/jclausing/packerid.py"&gt;packerid.py&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vault.reversers.org/ImpRECDef"&gt;ImportREC&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;JavaScript &amp;amp; HTTP Tools&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.didierstevens.com/programs/spidermonkey/"&gt;SpiderMonkey (Didier Stevens mod)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pmelson.blogspot.com/2008/01/30-second-malware-gathering-tool.html"&gt;ieget.sh script&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pmelson.blogspot.com/2009/11/reversing-javascript-shellcode-step-by.html"&gt;crap2shellcode.pl&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://console2.mozdev.org/"&gt;Console2 Firefox plugin&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://noscript.net/"&gt;NoScript Firefox plugin&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;PDF &amp;amp; Flash Tools&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.didierstevens.com/programs/pdf-tools/"&gt;pdf-parser.py&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.accesspdf.com/pdftk/"&gt;pdftk&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.swftools.org/"&gt;SWFTools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sothink.com/product/flashdecompiler/"&gt;Sothink SWF Decompiler&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Web Sites as Tools&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wepawet.iseclab.org/"&gt;Wepawet&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.virustotal.com/"&gt;VirusTotal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cwsandbox.org/"&gt;CWSandbox&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://camas.comodo.com/"&gt;Comodo Instant Malware Analysis&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://malwaredatabase.net"&gt;Malware Database&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.malwareurl.com/"&gt;MalwareURL&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-6453118783525044035?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/6453118783525044035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=6453118783525044035' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/6453118783525044035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/6453118783525044035'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/12/malware-analysis-toolkit-for-2010.html' title='Malware Analysis Toolkit for 2010'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-5429567000443330518</id><published>2009-11-09T11:26:00.028-05:00</published><updated>2009-12-05T07:38:37.759-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Reversing JavaScript Shellcode: A Step By Step How-To</title><content type='html'>With more and more exploits being written in JavaScript, &lt;a href="http://blogs.pcmag.com/securitywatch/2009/02/acrobat_reader_0day_attack_in_1.php"&gt;even some 0-day&lt;/a&gt;, there is a need to be able to reverse exploits written in JavaScript beyond de-obfuscation.  I spent some time this weekend searching Google for a simple way to reverse JavaScript shellcode to assembly.  I know people do it all the time.  It's hardly rocket science. Yet, I didn't find any good walk-throughs on how to do this.  So I thought I'd write one.&lt;br /&gt;&lt;br /&gt;For this walk-through, I'll start with JavaScript that has already been extracted from a PDF file and de-obfuscated. So this isn't step 1 of fully reversing a PDF exploit, but for the first several steps, check out Part 2 of &lt;a href="http://pmelson.blogspot.com/2009/10/two-for-one-talk-malware-analysis-for.html"&gt;this slide deck&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What you'll need:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A safe place to play with exploits (I'll be using an image in VMWare Workstation.)&lt;/li&gt;&lt;li&gt;JavaScript debugger (I highly recommend and will be using Didier Stevens' modified SpiderMonkey.)&lt;/li&gt;&lt;li&gt;Perl&lt;/li&gt;&lt;li&gt;The crap2shellcode.pl script, which you'll find further down in this post&lt;/li&gt;&lt;li&gt;A C compiler and your favorite binary debugger&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;I'll be using one of the example Adobe Acrobat exploits from the aforementioned slides for this example.  You can grab it from &lt;a href="http://www.milw0rm.org/exploits/8569"&gt;milw0rm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1 - Converting from UTF-encoded characters to ASCII&lt;/span&gt;&lt;br /&gt;Most JavaScript shellcode is encoded as either UTF-8 or UTF-16 characters.  It would be easy enough to write a tool to convert from any one of these formats to the typical \x-ed UTF-8 format that we're used to seeing shellcode in.  But because of the diversity of encoding and obfuscation showing up in JavaScript exploits today, it's more reliable to use JavaScript to decode the shellcode.&lt;br /&gt;&lt;br /&gt;For this task, you need a JavaScript debugger.  Didier Stevens' SpiderMonkey mod is a great choice.  Start by preparing the shellcode text for passing to the debugger.  In this case, drop the rest of the exploit, and then wrap the unescape function in an eval function:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jhFXi2qCoWc/SxCEiTKEWpI/AAAAAAAABQE/6Fl7Z8XUdiE/s1600/code.JPG"&gt;&lt;img style="cursor: pointer; width: 389px; height: 125px;" src="http://4.bp.blogspot.com/_jhFXi2qCoWc/SxCEiTKEWpI/AAAAAAAABQE/6Fl7Z8XUdiE/s400/code.JPG" alt="" id="BLOGGER_PHOTO_ID_5408968877264886418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now run this code through SpiderMonkey.  SpiderMonkey will create two log files for the eval command, the one with our ASCII shellcode is eval.001.log.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/SwK0TbPTrtI/AAAAAAAABPc/zLJM_eMw3UU/s1600/blog_1.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 173px;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/SwK0TbPTrtI/AAAAAAAABPc/zLJM_eMw3UU/s400/blog_1.jpeg" alt="" id="BLOGGER_PHOTO_ID_5405080748620492498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2 - crap2shellcode.pl&lt;/span&gt;&lt;br /&gt;This is why I wrote this script, to take an ASCII dump of some shellcode and automate making it debugger-friendly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;---cut---&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/perl&lt;br /&gt;#&lt;br /&gt;# crap2shellcode  - 11/9/2009 Paul Melson&lt;br /&gt;#&lt;br /&gt;# This script takes stdin from some ascii dump of shellcode&lt;br /&gt;# (i.e. unescape-ed JavaScript sploit) and converts it to&lt;br /&gt;# hex and outputs it in a simple C source file for debugging.&lt;br /&gt;#&lt;br /&gt;# gcc -g3 -o dummy dummy.c&lt;br /&gt;# gdb ./dummy&lt;br /&gt;# (gdb) display /50i shellcode&lt;br /&gt;# (gdb) break main&lt;br /&gt;# (gdb) run&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;my $crap;&lt;br /&gt;while($crap=&amp;lt;stdin&amp;gt;) {&lt;br /&gt;  my $hex = unpack('H*', "$crap");&lt;br /&gt;&lt;br /&gt;  my $len = length($hex);&lt;br /&gt;  my $start = 0;&lt;br /&gt;&lt;br /&gt;  print "#include &amp;lt;stdio.h&amp;gt;\n\n";&lt;br /&gt;  print "static char shellcode[] = \"";&lt;br /&gt;&lt;br /&gt;  for (my $i = 0; $i &amp;lt; length $hex; $i+=4) {&lt;br /&gt;    my $a = substr $hex, $i, 2;&lt;br /&gt;    my $b = substr $hex, $i+2, 2;&lt;br /&gt;    print "\\x$b\\x$a";&lt;br /&gt;  }&lt;br /&gt;  print "\";\n\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print "int main(int argc, char *argv[])\n";&lt;br /&gt;print "{\n";&lt;br /&gt;print "  void (*code)() = (void *)shellcode;\n";&lt;br /&gt;print "  code();\n";&lt;br /&gt;print "  exit(0);\n";&lt;br /&gt;print "}\n";&lt;br /&gt;print "\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;--paste--&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;The output of passing eval.001.log through crap2shellcode.pl is a C program that makes debugging the shellcode easy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/SwK0Y7v3UlI/AAAAAAAABPk/_Gh1InGALJ0/s1600/blog_2.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 190px;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/SwK0Y7v3UlI/AAAAAAAABPk/_Gh1InGALJ0/s400/blog_2.jpeg" alt="" id="BLOGGER_PHOTO_ID_5405080843246326354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3 - View the shellcode/assembly in a debugger&lt;/span&gt;&lt;br /&gt;First we have to build it.  Since we know that this shellcode is a Linux bindshell the logical choice for where and how to build is Linux with gcc. Similarly, we can use gdb to dump the shellcode.  For Win32 shellcode, we would probably pick Visual Studio Express and OllyDbg. Just about any Windows C compiler and debugger will work fine, though.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;To build the C code we generated in step 2 with gcc, use the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gcc -g3 shellcode.c -o shellcode&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The '-g3' flag builds the binary with labels for function stack tracing.  This is necessary for debugging the binary.  Or at least it makes it a whole lot easier.&lt;br /&gt;&lt;br /&gt;Now open the binary in gdb, print *shellcode in x/50i format, set a breakpoint at main(), and run it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ gdb ./shellcode&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;&lt;br /&gt;(gdb) display /50i shellcode&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;&lt;br /&gt;(gdb) break main&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;&lt;br /&gt;(gdb) run&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/SwK0eHcZ6GI/AAAAAAAABPs/UpZQ9lV0FE8/s1600/blog_3.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 188px;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/SwK0eHcZ6GI/AAAAAAAABPs/UpZQ9lV0FE8/s400/blog_3.jpeg" alt="" id="BLOGGER_PHOTO_ID_5405080932285278306" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/SwK0EKOBs8I/AAAAAAAABPU/ymzq57C_w7s/s1600/blog_3.jpeg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-5429567000443330518?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/5429567000443330518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=5429567000443330518' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5429567000443330518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5429567000443330518'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/11/reversing-javascript-shellcode-step-by.html' title='Reversing JavaScript Shellcode: A Step By Step How-To'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jhFXi2qCoWc/SxCEiTKEWpI/AAAAAAAABQE/6Fl7Z8XUdiE/s72-c/code.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-5350019221530667515</id><published>2009-10-18T15:10:00.001-05:00</published><updated>2009-10-18T15:10:43.649-05:00</updated><title type='text'>Two-For-One Talk: Malware Analysis for Everyone</title><content type='html'>These two mini-talks were originally going to be blog posts, but I needed a speaker for this month's ISSA meeting.  So I volunteered myself.  Here are the slides.&lt;div style="width:425px;text-align:left" id="__ss_2266872"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/pmelson/twoforone-talk-malware-analysis-for-everyone" title="Two-For-One Talk: Malware Analysis for Everyone"&gt;Two-For-One Talk: Malware Analysis for Everyone&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=issatwo-for-onetalk-091018144619-phpapp02&amp;stripped_title=twoforone-talk-malware-analysis-for-everyone" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=issatwo-for-onetalk-091018144619-phpapp02&amp;stripped_title=twoforone-talk-malware-analysis-for-everyone" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/pmelson"&gt;pmelson&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-5350019221530667515?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/5350019221530667515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=5350019221530667515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5350019221530667515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5350019221530667515'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/10/two-for-one-talk-malware-analysis-for.html' title='Two-For-One Talk: Malware Analysis for Everyone'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-6304041378947701710</id><published>2009-09-20T23:24:00.003-05:00</published><updated>2009-09-25T22:05:58.238-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logs'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>The 'Cyberwarfare' Problem</title><content type='html'>Last week I attended ArcSight's annual user conference in Washinton DC.  More about that in a later post.  During the conference, ArcSight hosted a panel discussion on cyberwarfare.  In DC, where many of ArcSight's biggest customer are based, this is a hot topic, and there will be a lot of time spent discussing it and a lot of money spent on defending against it, maybe.&lt;br /&gt;&lt;br /&gt;What struck me about the panel discussion were two comments, both made by &lt;a href="http://csis.org/expert/james-andrew-lewis"&gt;James Lewis&lt;/a&gt;, one of the panelists, and a director at the Center for International and Strategic Studies.  At one point, Mr. Lewis invoked Estonia as an example of state-sponsored cyberwarfare, and made the comment that, "the Russians are tickled that they got away with it."  Not ten minutes later, an audience member asked a question about retaliation against cyber-attacks.  Mr. Lewis responded to the question by pointing out the problem of attribution.  That is, from the logs that the victim systems generated, the IP address(es) recorded can't reliably be used to identify the actual individual(s) responsible for the attack.&lt;br /&gt;&lt;br /&gt;Now, I don't intend to pick on James Lewis.  It just so happened that one person on the panel expressed the paradox of cyberwarfare.  The attribution problem is a big problem for all outsider attacks, not just cyberwarfare.  A decade ago, security analysts were calling it "the legal firewall" because US-based hackers would first hack computers in China, Indonesia, Venezuela, or another country that doesn't openly cooperate with US law enforcement, and then hack back into the US from there, causing an investigative barrier that would hinder or prevent an investigation being able to get back to the attacker's actual location.&lt;br /&gt;&lt;br /&gt;So knowing that there's a very real problem with being able to identify the source country for Internet-based attacks, it stands to reason that using the same limited forensic data to not only identify the actual source of an attack, but to determine that it is in fact state-sponsored, and not, say, &lt;a href="http://www.forbes.com/2008/05/14/cyberattacks-terrorism-estonia-tech-security08-cx_ag_0514attacks.html"&gt;a grassroots attack armed by a teenager&lt;/a&gt;, is a stretch.  And for that reason, the question of cyberwarfare is an open one.  Until a government actually comes forward and claims responsiblity for an attack, it's unprovable.&lt;br /&gt;&lt;br /&gt;So as the government spends $100M on cyberdefense over the next six months, it's important to try and answer the question, "What is the military actually defending against?"  At the very least, it's fair to say nobody knows for certain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-6304041378947701710?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/6304041378947701710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=6304041378947701710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/6304041378947701710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/6304041378947701710'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/09/cyberwarfare-problem.html' title='The &apos;Cyberwarfare&apos; Problem'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-5410244263617270812</id><published>2009-08-12T15:57:00.004-05:00</published><updated>2009-08-12T16:22:18.810-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logs'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>Inbox 3</title><content type='html'>Teguh writes,&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Hi Paul,&lt;br /&gt;could you give some guide to administering logger? i searched thru&lt;br /&gt;google, but found nothing significant. How to(s) and tutorial would be enough i&lt;br /&gt;guess. Does it have to have syslog server for the logger to be able to read data&lt;br /&gt;from?&lt;br /&gt;Thanks..&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The documentation for Logger is available from ArcSight's download center. Only registered customers have access, but I assume that if you've got a Logger box, that generally qualifies you.&lt;br /&gt;&lt;br /&gt;With regard to your second question, yes Logger has a syslog server. It actually has a few. In Logger nomenclature these are "receivers." Logger supports UDP and TCP syslog, FTP and SSH file pull, NFS and CIFS remote filesystem. Logger also supports some ArcSight-specific receivers including a SmartMessage receiver for events forwarded from ESM and CEF-over-syslog (OK, ArcSight wouldn't agree that this is specific to their products, but despite the C standing for Common, CEF is anything but. At least right now.)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Configuring Logger to act as a syslog server is pretty straightforward.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;From the web interface, navigate to Configuration, Event Input/Output.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On the "Receivers" tab, click the Add button.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Name your connector and set the type as "UDP Receiver" then click Next.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The defaults for Compression Level and Encoding are fine. Select the IP address you want the listener to reside on, and set the port number. The default syslog server port is UDP/514.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_jhFXi2qCoWc/SoMyBDW0OrI/AAAAAAAABM0/1jZezlzbfpw/s1600-h/logger.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5369190174418025138" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 200px; CURSOR: hand; HEIGHT: 110px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/SoMyBDW0OrI/AAAAAAAABM0/1jZezlzbfpw/s200/logger.JPG" border="0" /&gt;&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Click Save. &lt;/li&gt;&lt;li&gt;On the "Receivers" tab, click the little no-smoking image next to the new receiver to enable it.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-5410244263617270812?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/5410244263617270812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=5410244263617270812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5410244263617270812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5410244263617270812'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/08/inbox-3.html' title='Inbox 3'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jhFXi2qCoWc/SoMyBDW0OrI/AAAAAAAABM0/1jZezlzbfpw/s72-c/logger.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-8657571699144824401</id><published>2009-06-23T12:47:00.005-05:00</published><updated>2009-06-23T13:03:39.115-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Nobody Sells Laptops for The Price of Silver</title><content type='html'>If you haven't already, I recommend that you take 20 minutes and read "&lt;span style="font-weight: bold;"&gt;Nobody Sells Gold for the Price of Silver&lt;/span&gt;" by Cormac Herley and Dinei Florencio. (&lt;a href="http://research.microsoft.com/pubs/80034/nobodysellsgoldforthepriceofsilver.pdf"&gt;PDF Link&lt;/a&gt;)  This is an excellent  analysis of the research into and press coverage of the underground economy.  It's a fascinating read, and they make a cogent argument that the underground economy is more myth than reality. I don't want to say more because it will ruin it for you.&lt;br /&gt;&lt;br /&gt;Now I have an excercise for you.  First, read the Herley/Florencio article.  Then, read &lt;a href="http://www.schneier.com/blog/archives/2009/06/fraud_on_ebay.html"&gt;Bruce Schneier's experiences with trying to sell a laptop on eBay&lt;/a&gt;.  Now think about the implications of the "Ripper Tax" on eBay.  Now ask yourself why you haven't already sold any stock you own in eBay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-8657571699144824401?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/8657571699144824401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=8657571699144824401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/8657571699144824401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/8657571699144824401'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/06/nobody-sells-laptops-for-price-of.html' title='Nobody Sells Laptops for The Price of Silver'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-5826744371464385521</id><published>2009-06-18T22:22:00.009-05:00</published><updated>2009-06-19T15:50:52.231-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compliance'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>PCI-DSS and Encrypting Card Numbers</title><content type='html'>OK, I'm about to do something dumb and talk about cryptography and cryptanalysis.  I'm an expert in &lt;span style="font-style: italic;"&gt;neither&lt;/span&gt; of these things.  But despite the fact that somebody smarter than me should be telling you this, you're stuck with me, and I think I have a point.  So here goes.&lt;br /&gt;&lt;br /&gt;I had a bit of an "A-ha!" moment earlier today around PCI-DSS, specifically requirement 3.4 from v1.2 of the standard.  Here's the relevant language from that requirement:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;3.4 Render PAN, at minimum, unreadable anywhere it is stored (including on portable digital media, backup media, in logs) by using any of the following approaches:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One-way hashes based on strong cryptography&lt;/li&gt;&lt;li&gt;Truncation&lt;/li&gt;&lt;li&gt;Index tokens and pads (pads must be securely stored)&lt;/li&gt;&lt;li&gt;Strong cryptography with associated key-management processes and procedures&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;The bottom line is that this requirement fails to provide adequate protection to card numbers.   Here's why.&lt;br /&gt;&lt;br /&gt;Truncation and tokenized strings with pads have limited use cases.  In the case of truncating card numbers, PCI-DSS recommends only storing the last 4 digits of the card number.   You wouldn't choose truncation for a program that validates a card number because there would be too great a potential for false matches.  It would only be helpful for including in receipts, billing statements, and for use in validating a customer identity in conjunction with other demographic information. Database tokens only provide adequate protection in environments where there is a multi-user or multi-app security model, and if there are flaws in the applications that have access to the pads, then your data is pwned.&lt;br /&gt;&lt;br /&gt;So for the sake of maximum versatility and security, you're likely (or your software vendor is likely) to opt for hashing or encryption. But you still have a serious problem.  While one-way hashes like SHA and block ciphers like AES can provide good protection to many forms of plaintext, credit cards aren't one of them.  That's right, the problem isn't actually in the way you encrypt credit card numbers, it's that credit card numbers make for lousy plaintext to begin with.&lt;br /&gt;&lt;br /&gt;Take for example the following row of data from my hypothetical  e-commerce application's cardholder table:&lt;br /&gt;&lt;br /&gt;LNAME,FNAME,CTYPE,EXP,HASH,LASTFOUR&lt;br /&gt;Melson,Paul,DISCOVER,06/2009,e4b769607856a2f30b57fd26079dfefb,1111&lt;br /&gt;&lt;br /&gt;In this case, we have what we need to use the card, except the card number is hashed with MD5. (Ignore what you know about MD5 collisions for a moment, since this problem also exists for SHA or any other method of encrypting the card number.) If we calculate the possible number of values that could be on the other side of that hash, it would be 10^16, or about 10,000 trillion for the 16-digit card number.  That's roughly twice as many possibilities as an 8-character complex password (96^8), which is an acceptable keyspace size, but also completely doable for a tool like John The Ripper.&lt;br /&gt;&lt;br /&gt;But if you know credit card numbers, then you've already realized that it's even worse than that.  The first 4-6 digits of the card number are a misnomer in calculating keyspace.  There aren't 1 million actual possible values.  Since that row from my e-commerce app's database told me the card issuer, I know within 4-5 guesses the first two to four digits of the card number, and the last four are right there as well for inclusion on statements, etc. In this case, since it's a Discover card, we already know that the card number is 6011XXXXXXXX1111.  Now we've cut the possible values we must guess in half, from 10^16 down to 10^8, which is a mere 100 million possibilities.  There are other clever things we can do if it's encrypted with a stream cipher like RC4 or FISH, because we know the beginning and end values of the plaintext.  But guess what?  It's cheaper and easier to brute-force it even if lousy crypto is used.  Even on the scale of millions of records.  Even with salting, it's still worth it to brute-force the middle digits.&lt;br /&gt;&lt;br /&gt;But wait, there's more!  As if publicly known prefix values weren't enough, credit card numbers are also designed to be self-checking.  That is to say, the numbers contain something like a checksum that, when a known algorithm is applied to the 7-digit account number, 3 digits of which we know from our last-four field, can be used to validate the card number.  This was designed as an anti-fraud mechanism that would allow cards to be checked without a need to communicate with a clearinghouse.  But this algorithm allows us to only generate valid account numbers, combined with partially-known prefixes, to reduce the keyspace significantly.  And since this is a known algorithm I can (and someone already has) very easily write a tool that combines a brute-force password cracker with a credit card generator.&lt;br /&gt;&lt;br /&gt;The bottom line is that, because of the already-partially-known nature of credit card numbers, simply encrypting card numbers inside a database or extract file is insufficient protection.  The PCI Security Standards Council should revisit this requirement and modify it to, at the very least, require symmetric-key block ciphers and disallow stream ciphers and one-way hashes.  But even then, I suspect, encrypted card numbers will be at risk.  Certainly row-level encryption of card numbers should not qualify for "safe harbor" when it comes to breach notification laws.&lt;br /&gt;&lt;br /&gt;PS - Extra credit if you crack the full card number from the hash above and post it below.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-5826744371464385521?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/5826744371464385521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=5826744371464385521' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5826744371464385521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5826744371464385521'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/06/pci-dss-and-encrypting-card-numbers.html' title='PCI-DSS and Encrypting Card Numbers'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-3136836855023869016</id><published>2009-06-11T18:56:00.003-05:00</published><updated>2009-06-11T19:11:51.042-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logs'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>From The Inbox 2</title><content type='html'>&lt;a href="http://pmelson.blogspot.com/2007/09/arcsight-user-conference.html#comments"&gt;lmran writes&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Hi Paul,&lt;br /&gt;Do you know any reason why ArcSight ESM does not support the Cisco MARS? Right now, all my firwalls send the syslog feeds into Cisco MARS and I'm trying to set the Cisco MARS to send thoes raw feeds data to ArcSight local connector but I just found out that ArcSight does not support the Cisco MARS. Thanks in ADV for any info reading this subject.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Starting in 4.x, MARS can forward events to another remote syslog listener.  ArcSight has a syslog connector.  So you ought to be able to forward events from MARS to ArcSight via syslog assuming MARS doesn't change the format of the log events too much.  Even if MARS does mangle the event format, ArcSight will still receive them, but then most or all of the event will be parsed into the CEF Name field and categorization and prioritization won't be accurate.&lt;br /&gt;&lt;br /&gt;If you are unable to upgrade your MARS appliance to 4.31 or later (I think that's the rev you need), another option would be to use a syslog-ng server out front.  It supports forwarding events by source to other syslog servers.  You could use this to send the stuff you want in ESM to ArcSight's syslog Connector and the stuff you want in MARS to MARS.&lt;br /&gt;&lt;br /&gt;Or, you could do the environmentally conscious thing and unplug then recycle your MARS appliance. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-3136836855023869016?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/3136836855023869016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=3136836855023869016' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3136836855023869016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3136836855023869016'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/06/from-inbox-2.html' title='From The Inbox 2'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-8138600557702368026</id><published>2009-06-09T12:32:00.004-05:00</published><updated>2009-06-09T12:51:22.414-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='logs'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>From The Inbox</title><content type='html'>&lt;a href="http://pmelson.blogspot.com/2007/09/arcsight-user-conference.html?showComment=1242845527494#c1929547799234596974"&gt;Anonymous writes&lt;/a&gt;,&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Hi Paul, I am one of those who, as you say, found your blog by googling ArcSight, trying to do some recon on the product for my employer. (I think I see that the most recent posts here are from 2007 so who knows if you or anybody will be seeing my question.) I'm trying to find out, can Arcsight's data be queried programmatically; i.e. is it stored in a relational database, hopefully SQL Server or Oracle, or if not, is there an API or ADO.NET provider that can allow it to be queried, preferably with SQL? Thanks for any info anyone reading can provide. &lt;/blockquote&gt;&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;ArcSight ESM uses Oracle 10g for its back-end database.  At one point, and this may still be true, DB2 was also supported.  You can query the database directly, and the schema is pretty straightforward.  The table ARC_EVENT_DATA is where most of the event data lives, for example.  But depending on your use case, that might not be the best way to get data out of ESM.&lt;br /&gt;&lt;br /&gt;Also, since you didn't specify, it may be worth mentioning that the same is not true of the ArcSight Logger platform, which is flat storage. Instead of querying the log store directly, Logger can be configured to forward events based on source, type, etc. to another destination, if you need them in real-time.  There is a PostegreSQL database on Logger, but it's my understanding that it supports the reports engine, and doesn't store the raw or CEF events in any comprehensive way.&lt;br /&gt;&lt;br /&gt;The interesting thing is that the storage technology behind Logger 3.0, because of its performance and relative "cheapness" may become the data store for ESM down the road.  It would only make sense, since you could handle MUCH higher event rates with less disk and no Oracle license fee.  If it can be done while maintaining the stability and feature set that the Oracle-based data store has, it's a walk-off home run for ArcSight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-8138600557702368026?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/8138600557702368026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=8138600557702368026' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/8138600557702368026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/8138600557702368026'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/06/from-inbox.html' title='From The Inbox'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-4975779623535803054</id><published>2009-06-01T22:02:00.004-05:00</published><updated>2009-06-01T23:22:01.380-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blaggleblaggle'/><category scheme='http://www.blogger.com/atom/ns#' term='fools'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>New Rules</title><content type='html'>After many months off, I'm jumping back in to the blog with both feet.  Mostly in a &lt;a href="http://www.youtube.com/watch?v=WINDtlPXmmE"&gt;Howard Beale&lt;/a&gt; sort of way.  Didja miss me?  Anyway, stealing a meme from Bill Maher, I've got something to say to security vendors.  Without further ado, New Rules.&lt;br /&gt;&lt;br /&gt;If you are a vendor, especially a vendor of security products or services, these are the rules I expect your product to follow.  These are common sense, and I feel a little condescending telling them to you.  But if recent experience is any indicator, you need to hear them. And you deserve the condescension.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Do not store credentials in clear text!&lt;/span&gt; Seriously, you can get &lt;span style="font-style: italic;"&gt;free libraries&lt;/span&gt; to hash credentials or store them in a secure container file that requires a secret key. There's no reason for a password to be in a text file or HKLM Registry key. None.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Do not hardcode passwords!&lt;/span&gt; If I can't change every single password associated with your product simply and easily, then there should be a law that strips all of your developers of any degree they hold and forces them to go back to college and learn file IO methods.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Do not use HTTP/Telnet/FTP/LDAP for authentication!&lt;/span&gt; Seriously, more than enough free libraries for SSH, TLS, IPSec exist. Use one. Or buy the one you really like. It beats having to issue a "patch" to sell to government and regulated industry.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Don't run as root/SYSTEM/sa/DBA!  &lt;/span&gt;Your product is not so special that it actually needs administrative privileges to run on the server or database that hosts it.  Unless by "special" you mean "coded by lazy fools that don't want to define even the most basic security model."  OK, then it &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; special.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Don't use broken crypto algorithms!&lt;/span&gt;  Sorry, but if you are shipping new product that uses 56-bit DES, RC4, or ROT13, please see rule #3.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Don't send passwords in e-mail!&lt;/span&gt; Remote password reset is easy enough to do properly, there's no reason to be lazy and just send me my password if I forget it. Also, it means you're breaking rule #1. Busted.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;There are no excuses for any product to not follow these rules, but especially security/compliance products.  Gee, thanks. I just spent six figures on a product to help me manage or achieve compliance, and the product itself can't comply with the regulation I'm trying to address.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-4975779623535803054?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/4975779623535803054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=4975779623535803054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4975779623535803054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4975779623535803054'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/06/new-rules.html' title='New Rules'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-4885556699932894299</id><published>2009-01-19T23:37:00.006-05:00</published><updated>2009-01-20T00:14:49.132-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blaggleblaggle'/><title type='text'>The Next Phase</title><content type='html'>For those of you who haven't given up on my blog (or forgot it was still in your feed list), I want to let you know that I will be back to it later this year.  More punditry, more metrics, more SIM, more cool random technical stuff. I'll try anyway.  I've been missing it, but I had too much going on, had to prioritize, and this blog has rusted as a result.&lt;br /&gt;&lt;br /&gt;A lot has changed since my last blog post in November - a new position at work, a new baby daughter - and the one thing that I've come to realize is that changing is hard work, but if you want it, it's worth it.  There's been an excessive amount of talk about change this past year, and on the eve of President Obama's inauguration, I've decided to share with you this story of a moment I had recently.&lt;br /&gt;&lt;br /&gt;On November 5th, the day after Election Day 2008, I spoke at the SecureWorld Expo conference in Detroit.  I've been in West Michigan for the past several years, but I used to live and work on the East side of the state.  It was a gorgeous Wednesday, clear and unseasonably warm for November.  And as I was driving westbound on I-96, into the dusk between me and the sunset, I looked up and found myself in familiar territory - Webberville.&lt;br /&gt;&lt;br /&gt;You've probably never heard of Webberville, Michigan.  That's OK.  It's a rural town on the automotive corridor where in the 1990's, companies got huge tax breaks to buy up farmland and build factories.  And in 2001, I had an office in one of those factories.  That company (a "Tier One" in industry lingo because we sold directly to car makers), like many automotive suppliers, has since gone out of business.  And despite working there only a year, I have some very fond and vivid memories of that job.  Perhaps the most vivid, however, is driving that stretch of I-96 between Webberville and Wixom  and hearing the radio newscaster describe the second plane hitting the World Trade Center on 9/11.&lt;br /&gt;&lt;br /&gt;That day changed everything for Americans.  I was living in the Midwest, working in a one-story office that had highway on one side and cows on the other, but for the weeks that followed the attacks, I was afraid.  We all were.  I recall making that drive to Webberville again a week later while all of the planes were still grounded and thinking to myself, "How long until we recover?  Can we recover?  What will it take for us to move forward?"&lt;br /&gt;&lt;br /&gt;Not get over it.  Not forget.  But move forward - take the next step as a society, as a culture, as a country.&lt;br /&gt;&lt;br /&gt;So back to 11/5/2008, and my drive home from SecureWorld, less than 24 hours after learning that Barack Obama - a young, African-American man - would be our next president.  And it was there, on that piece of highway in rural Michigan that I answered my own question.  Seven years and two months later, I knew America was moving forward.  We were moving forward.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-4885556699932894299?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/4885556699932894299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=4885556699932894299' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4885556699932894299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4885556699932894299'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2009/01/next-phase.html' title='The Next Phase'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-559487196446895000</id><published>2007-04-04T14:45:00.000-05:00</published><updated>2008-12-08T19:47:00.453-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compliance'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>Guilty Pleasures, Social Networks, and Event ID's</title><content type='html'>So, one of my guilty pleasures is I like to read and answer the Information Security questions people ask on LinkedIn.  It's like infosec Jeopardy without having to &lt;a href="http://forum.defcon.org/archive/index.php/t-7962.html"&gt;go to Vegas&lt;/a&gt;.  Sometimes I even know the answer and have time to post it.  The other day was one, and I'll share it here in a little more detail.&lt;br /&gt;&lt;br /&gt;Venkatesh asks: "What are you monitoring on Active Directory/SQL Server as part of IT compliance?"&lt;br /&gt;&lt;br /&gt;The cool thing about Microsoft EventLog format is the Event ID field, which for the most part tells you what is happening, and the details are things like who or what is doing that thing to who- or what-else.  An example is Event ID &lt;a href="http://www.eventid.net/display.asp?eventid=628&amp;source=Security"&gt;Security:628&lt;/a&gt;.  Any time you see that code, you know that A changed the password of B, and it is possible that A == B or A != B.&lt;br /&gt;&lt;br /&gt;So get your left pinky finger ready for Ctrl-C &amp;amp; Ctrl-V action.  Here's my big list of Security EventLog ID's that you should monitor as part of your log review processes.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=535&amp;source=Security"&gt;Security:535&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=624&amp;amp;source=Security"&gt;Security:624&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=628&amp;source=Security"&gt;Security:628&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=629&amp;amp;source=Security"&gt;Security:629&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=630&amp;source=Security"&gt;Security:630&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=631&amp;amp;source=Security"&gt;Security:631&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=632&amp;source=Security"&gt;Security:632&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=634&amp;amp;source=Security"&gt;Security:634&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=636&amp;source=Security"&gt;Security:636&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=637&amp;amp;source=Security"&gt;Security:637&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=639&amp;source=Security"&gt;Security:639&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=641&amp;amp;source=Security"&gt;Security:641&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=642&amp;source=Security"&gt;Security:642&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=644&amp;amp;source=Security"&gt;Security:644&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=647&amp;source=Security"&gt;Security:647&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=659&amp;amp;source=Security"&gt;Security:659&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=660&amp;source=Security"&gt;Security:660&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=671&amp;amp;source=Security"&gt;Security:671&lt;/a&gt;&lt;/li&gt;&lt;li&gt;EventID == &lt;a href="http://www.eventid.net/display.asp?eventid=685&amp;source=Security"&gt;Security:685&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Target Account Name == Administrator&lt;/li&gt;&lt;li&gt;Target Account Name == &lt;span style="font-style: italic;"&gt;[real admin user name]&lt;/span&gt; (you renamed Administrator, right?)&lt;/li&gt;&lt;/ul&gt;Here's how it looks in the ArcSight filter editor:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/RhQI8-kZo2I/AAAAAAAAABs/W2CUKe7-JPU/s1600-h/eventlog.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/RhQI8-kZo2I/AAAAAAAAABs/W2CUKe7-JPU/s400/eventlog.JPG" alt="" id="BLOGGER_PHOTO_ID_5049670925870015330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In our environment (200+ Windows servers, another 80-100 UNIX servers that authenticate against AD, and 1200+ Windows workstations), this represents about 70-100 events per day out of roughly a half million EventLog entries that we collect per day. That's so totally manageable. The rest of it you can subject to trending, thresholds, and so on to find weirdness worth investigating.&lt;br /&gt;&lt;br /&gt;It's also a good idea to go through your EventLog data every couple of months and look for new Event ID's that you haven't seen before.  I use a filter that matches all of the Event ID's that I've already identified and excludes them.  Then it's just a matter of researching the new Event ID's and determining their cause and relevance.&lt;br /&gt;&lt;br /&gt;If you've got other ideas of good EventLog content that you focus on, post it up here.  I'd love to hear about it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-559487196446895000?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/559487196446895000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=559487196446895000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/559487196446895000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/559487196446895000'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/04/guilty-pleasures-social-networks-and.html' title='Guilty Pleasures, Social Networks, and Event ID&apos;s'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jhFXi2qCoWc/RhQI8-kZo2I/AAAAAAAAABs/W2CUKe7-JPU/s72-c/eventlog.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-5474009714851206162</id><published>2007-04-20T09:41:00.000-05:00</published><updated>2008-12-08T19:47:00.319-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>My ArcSight Toolbox</title><content type='html'>I'm not shy about the fact that I use ArcSight at work, though when talking about SIM's and logging, I try not to make it all about them. But this post &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; all about ArcSight, but also maybe not. Maybe you use another SIM that has this same type of functionality - it wouldn't surprise me if this was standard on most SIM's shipping today.&lt;br /&gt;&lt;br /&gt;Anyway, ArcSight has a "Tools" feature that basically allows you to pass the contents of any cell in a table view (ArcSight calls them Active Channels) to an external program. This is unbelievably handy. So here are some of my favorite ArcSight Tools.&lt;br /&gt;&lt;br /&gt;1. Cygwin Whois - ArcSight comes with a built-in, java-based whois lookup tool. But for whatever reason, if the address is outside the US, say in an APNIC block, ArcSight just returns the NIC. Cygwin's whois will look up the registrant from the correct NIC.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/RijXc9aRGKI/AAAAAAAAAB0/pvm_Ab4ddo4/s1600-h/arctool1.JPG"&gt;&lt;img style="cursor: pointer; width: 361px; height: 244px;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/RijXc9aRGKI/AAAAAAAAAB0/pvm_Ab4ddo4/s400/arctool1.JPG" alt="" id="BLOGGER_PHOTO_ID_5055527474244425890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. EventID.Net Lookup - Takes a field containing EventLogType:ID ('Device Event Class ID' by default) and passes it to a shell script that launches IE with a properly f0rmatted eventid.net URL:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PATH=$PATH:/cygdrive/c/cygwin/bin:/usr/bin:/bin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if [ "$1" = "" ];&lt;br /&gt;then&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;   echo "usage: $0 [ArcSight EventLog ID Tag]";&lt;br /&gt;exit 0&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;query=`echo $1 | sed 's/\(.*\):\(.*\)/eventid=\2\&amp;source=\1/'`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if [ "$query" = "" ]; then&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;  echo "Error in field format";&lt;br /&gt;exit 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;fi&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/cygdrive/c/Program\ Files/Internet\ Explorer/IEXPLORE.EXE "http://www.eventid.net/display.asp?$query" &amp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. LDAP Server/User Lookup - This is a Perl script that I wrote that takes a server or user name field and searches AD via LDAP for it and returns things like distinguishedName, operatingSystem, description, memberOf, and so on.  This runs in Cygwin as well.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. VHost Live Search - Got this idea from a post to the pen-test mailing list.  Sometimes whois and nslookup don't cut it.  This is a great way to figure out what vhosts might be present on a given IP address.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/RijaItaRGNI/AAAAAAAAACM/whmDNMI1oVU/s1600-h/arctool3.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/RijaItaRGNI/AAAAAAAAACM/whmDNMI1oVU/s400/arctool3.JPG" alt="" id="BLOGGER_PHOTO_ID_5055530424886958290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5. IP2Asset - On our network, workstation names and asset ID's are the same.  So here's a script that takes an IP address, runs nslookup, and then launches Altiris web console to search for the asset.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#!/bin/bash&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;PATH=$PATH:/cygdrive/c/cygwin/bin:/usr/bin:/bin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if [ "$1" = "" ]; then&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;   echo "usage: $0 [ip address]";&lt;br /&gt;exit 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;asset=`nslookup $1 |grep ^Name |sed 's/.*\(it[0-9]*\)\.wks.*/\1/'`&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if [ "$asset" = "" ]; then&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;  echo "Error resolving address";&lt;br /&gt;exit 1&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;fi&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;/cygdrive/c/Program\ Files/Internet\ Explorer/IEXPLORE.EXE "http://altiris_svr/Altiris/NS/Console.aspx?NameMatch='$asset'" &amp;amp;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-5474009714851206162?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/5474009714851206162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=5474009714851206162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5474009714851206162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/5474009714851206162'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/04/my-arcsight-toolbox.html' title='My ArcSight Toolbox'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jhFXi2qCoWc/RijXc9aRGKI/AAAAAAAAAB0/pvm_Ab4ddo4/s72-c/arctool1.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-9186097801682598781</id><published>2007-04-25T13:38:00.000-05:00</published><updated>2008-12-08T19:46:59.957-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>GeekTool</title><content type='html'>So I was playing with my Mac today, trying to make a desktop that's as useful as my KDE/SuperKaramba setup on my Kubuntu laptop. I didn't find all the stuff I was looking for, but I did find &lt;a href="https://sourceforge.net/projects/geektool"&gt;GeekTool&lt;/a&gt;, which is a cool little app that lets you display command-line tools or tail a log to your desktop.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jhFXi2qCoWc/RjtOvJ7SHvI/AAAAAAAAACU/ZC831aCKfO0/s1600-h/Picture+8.png"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_jhFXi2qCoWc/RjtOvJ7SHvI/AAAAAAAAACU/ZC831aCKfO0/s400/Picture+8.png" alt="" id="BLOGGER_PHOTO_ID_5060725178306273010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-9186097801682598781?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/9186097801682598781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=9186097801682598781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/9186097801682598781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/9186097801682598781'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/04/geektool.html' title='GeekTool'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jhFXi2qCoWc/RjtOvJ7SHvI/AAAAAAAAACU/ZC831aCKfO0/s72-c/Picture+8.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-4559800464799161558</id><published>2007-05-07T11:19:00.000-05:00</published><updated>2008-12-08T19:46:59.730-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Quick &amp; Dirty JavaScript Sandbox</title><content type='html'>It seems like more and more browser attacks are using obfuscated JavaScript to make analysis harder.  Some things are as simple as UTF encoding, others are far more inventive and confusing.  Just like packed executables before, there are legit reasons for wanting to obscure JavaScript, like making it harder for people to steal your code.&lt;br /&gt;&lt;br /&gt;So when your IPS alerts on suspicious JavaScript (which is almost never blocked in a default configuration), you can:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A) Investigate, get a sample of the offending page and potentially spend hours trying to work back through it by hand.&lt;/li&gt;&lt;li&gt;B) Investigate, browse the page with your browser to see what happens, and potentially get pwned.&lt;/li&gt;&lt;li&gt;C) Ignore it, and hope the local AV got it.&lt;/li&gt;&lt;/ul&gt;What I have historically done, and continue to do in some cases, is option B from inside a VMWare machine.&lt;br /&gt;&lt;br /&gt;Today, however, I ran into a higher-than-usual volume of alerts, all of which were based on the presence of an unescape() call.  In anticipation of having to do this again, and the VM being a poor solution to  begin with, I built a Java sandbox, starting with a JavaScript interpreter.&lt;br /&gt;&lt;br /&gt;Here's the recipe:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; (optional, but you know I love it, and it makes certain things easier)&lt;br /&gt;2. Current &lt;a href="http://java.sun.com/javase/"&gt;Sun JRE&lt;/a&gt; for Win32&lt;br /&gt;3. Rhino JavaScript engine&lt;br /&gt;&lt;br /&gt;Create an unprivileged local user who's not even a member of 'Everybody'.  You're never going to log in as this user anyway.  Now unpack the JRE and Rhino to a directory where that user can view them.  If you have Cygwin, build a home directory for your user, and then create a bash shell shortcut with that directory in the "Start In" line.  Now use RunAs to launch your shell as the unprivileged user, and start Rhino:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/Rj9Rmp7SHwI/AAAAAAAAACc/A0MEMV5VRt8/s1600-h/javabox.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/Rj9Rmp7SHwI/AAAAAAAAACc/A0MEMV5VRt8/s400/javabox.JPG" alt="" id="BLOGGER_PHOTO_ID_5061854230719110914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now you can dump JavaScript to the shell and watch it execute with relatively low risk of pwnage.  Rhino also has a &lt;a href="http://www.mozilla.org/rhino/debugger.html"&gt;GUI debugger&lt;/a&gt; that's ideal for stepping through more advanced JavaScript trickery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-4559800464799161558?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/4559800464799161558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=4559800464799161558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4559800464799161558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4559800464799161558'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/05/quick-dirty-javascript-sandbox.html' title='Quick &amp; Dirty JavaScript Sandbox'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jhFXi2qCoWc/Rj9Rmp7SHwI/AAAAAAAAACc/A0MEMV5VRt8/s72-c/javabox.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-8559261701360389905</id><published>2007-05-08T15:45:00.000-05:00</published><updated>2008-12-08T19:46:59.536-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>One for the RSS aggregator: Chinese bot/sploit blogs</title><content type='html'>OK, so I can't read Chinese (or Japanese, or Korean, or...) characters to save my life.  But in the course of my recent adventures in obfuscated JavaScript droppers, I stumbled across something interesting.  I put the first piece of some obfuscated JavaScript in Google, and I got 2 hits!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/RkDjVJ7SHxI/AAAAAAAAACk/7yLYow_ivtE/s1600-h/google.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/RkDjVJ7SHxI/AAAAAAAAACk/7yLYow_ivtE/s400/google.JPG" alt="" id="BLOGGER_PHOTO_ID_5062295933745766162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I was really hoping to find a page on this particular type of encoding and where and how it's been used in the past.  Instead, I found it posted to a pair of blogs in China, with no accompanying perl scripts for decoding the payload, so I can only assume the intent of the poster(s).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-8559261701360389905?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/8559261701360389905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=8559261701360389905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/8559261701360389905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/8559261701360389905'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/05/one-for-rss-aggregator-chinese.html' title='One for the RSS aggregator: Chinese bot/sploit blogs'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jhFXi2qCoWc/RkDjVJ7SHxI/AAAAAAAAACk/7yLYow_ivtE/s72-c/google.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-2822173109072460214</id><published>2007-05-17T12:13:00.000-05:00</published><updated>2008-12-08T19:46:59.291-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>ArcSight 4.0 Released</title><content type='html'>As far back as a year ago there was working code that ArcSight was calling "four-point-oh."  So there's no big news here other than the fact that this week ArcSight released installers and docs and all of that good stuff to their software site for general consumption.  Add to that the fact that I can't find the announcement on their web site or in general press, and I figure that makes it blogworthy.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/RkyOmO--_pI/AAAAAAAAACs/4IDMgMPexlg/s1600-h/arcletter.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/RkyOmO--_pI/AAAAAAAAACs/4IDMgMPexlg/s400/arcletter.JPG" alt="" id="BLOGGER_PHOTO_ID_5065580468393410194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;What's also blogworthy is the fact that if you're an existing customer and want to upgrade, you're stuck until August when ArcSight releases the upgrade-capable installers with SP1.  Or, like with 3.5, you can pay their pro services team to do the upgrade for you before then.  Anyway, I'm spoiling the feature list here:&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;&lt;u&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Key features of ArcSight ESM v4.0  include &lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Identity Correlation  &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight ESM v4.0 identity  correlation can model the typical behavior of groups, machines, or individuals  (as reflected in events) and provides a framework to access any other form of  session data through mappings with dynamic variables. This information can be  used or shown in rules, reports, active lists, active channels, and data  monitors.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Improved Asset Management &amp;  Scalability &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight ESM v4.0 introduces the  ability to manage up to one million assets while maintaining performance,  including maintaining memory usage in-line, processing, correlation, and  ensuring sustained EPS (events per second). &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Trend Reporting &amp; Report  Generation Performance &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Trend Reporting enables the ready  historical trending often required for regulatory compliance reporting. Trend  reporting can track a trend over a specified period of time, and highlight  changes in risks or threats during that period. Trend reporting improves report  generation performance for regularly scheduled reports by tracking trends over a  user-specified time and by keeping the data easily accessible. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;New Report and Template Designer  &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight ESM v4.0 provides a new,  more powerful and highly flexible reporting system. You can use this design  capability to create well-defined reports for different scenarios or audiences.  This feature offers options for unique queries and to define the overall  look-and-feel for presenting information. These new features include the ability  to report on several data queries simultaneously, using multiple charts and  grids in one report. Report formats, layout, and overall look-and-feel can be  customized to your needs. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Historical Correlation  &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight ESM v4.0 enhances the  Verify Rules with Events capability (previously known as Replay with Rules) so  you can define actions based on processing historical data through the  correlation engine. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight Packages  &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight ESM v4.0 introduces a new  feature called packages. A package is an ArcSight resource that acts as a  portable container for group resources or content (e.g., rules, filters, data  monitors, reports, etc). &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;Resource Validation Enhancements  &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight ESM v4.0 enhances resource  validation beyond rule- and network-modeling, adding the ability to validate  cross-resource dependencies automatically, and interactively, through the  Console. This enables the ArcSight Manager to detect resource conflicts  introduced during resource modification, creation, upgrading or importing.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;b style=""&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;ArcSight ESM v4.0  64-bit&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;The 64-bit JVM version of ArcSight  ESM v4.0 will be made available as part of a controlled release. Customers who  are interested in participating should contact Technical Support for additional  information. &lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-2822173109072460214?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/2822173109072460214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=2822173109072460214' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/2822173109072460214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/2822173109072460214'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/05/arcsight-40-released.html' title='ArcSight 4.0 Released'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jhFXi2qCoWc/RkyOmO--_pI/AAAAAAAAACs/4IDMgMPexlg/s72-c/arcletter.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-6315463079655631249</id><published>2007-05-24T13:00:00.000-05:00</published><updated>2008-12-08T19:46:59.033-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shameless self-promotion'/><title type='text'>Like an Orange on a Toothpick</title><content type='html'>My ego's going to have to do some sit-ups this weekend.  It's getting huge.  &lt;a href="http://www.cnn.com/video/tech/2007/05/22/center.wifi.freeloader.wood/content.html#"&gt;I'm on CNN&lt;/a&gt; via the WOODTV &lt;a href="http://pmelson.blogspot.com/2007/05/sparta-wifi-arrest.html"&gt;WiFi Arrest story&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/Rl8oqybqIzI/AAAAAAAAADE/fE00CZsfw8o/s1600-h/CNN.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/Rl8oqybqIzI/AAAAAAAAADE/fE00CZsfw8o/s320/CNN.JPG" alt="" id="BLOGGER_PHOTO_ID_5070816420999865138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Supastah!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-6315463079655631249?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/6315463079655631249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=6315463079655631249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/6315463079655631249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/6315463079655631249'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/05/like-orange-on-toothpick.html' title='Like an Orange on a Toothpick'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jhFXi2qCoWc/Rl8oqybqIzI/AAAAAAAAADE/fE00CZsfw8o/s72-c/CNN.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-1026314878695678230</id><published>2007-06-05T09:20:00.001-05:00</published><updated>2008-12-08T19:46:58.950-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>SIM Sizing - CPU (+ Performance Tuning)</title><content type='html'>There are a couple of places across a traditional SIM that are more susceptible to performance degradation than others. Here's the short list:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Database&lt;/span&gt;&lt;br /&gt;There basically two things that can beat up your database. The first is basically drowning it with INSERT's of new log data. While this will manifest as poor performance and high CPU utilization, the problem is most likely disk array write performance. The answer to that problem is most likely expensive. Sorry.&lt;br /&gt;&lt;br /&gt;The second thing that can kill database performance is event searches. This can happen in reporting or table views or pattern discovery or even in charts and graphs. (It can also happen in correlation rule filters - more on that below.) Think of it this way; whatever means you are using to search events, especially historic events (double-especially if there's compression in the mix here) has to be translated in to some horrid, fugly SELECT statement, probably with multiple JOIN's. Use these in rules, graphs, or regularly scheduled reports and you can drown your database server in work to the point that the stuff you're actively doing is unusably slow. The answer here is a combination of giving lots of CPU to your database servers and writing smart search/filter statements.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Correlation Rules&lt;/span&gt;&lt;br /&gt;Correlation rules are the heart &amp; soul of SIM technology. For more on what they do, check out my old ISSA 'Intro to SIM' preso deck (&lt;a href="http://gr-issa.org/200602_Melson_SIM.pdf"&gt;PDF Link&lt;/a&gt;). There are a number of things that can screw you here, and I already mentioned the first one above. Writing filters that are too complex or simple filters that are too vague will come back to haunt you.&lt;br /&gt;&lt;br /&gt;Like an IDS, you will need to tune the correlation rules that your SIM ships with. A lot of this will be about eliminating noise and false positives, just like IDS. But also like IDS, some of the tuning will be performance-related. In addition to the filters you write you will also want to think about things like the number of events to match on, time frame (how long to wait for event2 after event1 occurs), etc. A cool thing that ArcSight includes is a real-time graph partial rule matches. In the example below, you can see there are two rules there that need tweaking and will probably free up measurable memory and CPU cycles once I do.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jhFXi2qCoWc/RmWq-l1yZHI/AAAAAAAAADM/3dyXuoZmGT4/s1600-h/partrules.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_jhFXi2qCoWc/RmWq-l1yZHI/AAAAAAAAADM/3dyXuoZmGT4/s200/partrules.JPG" alt="" id="BLOGGER_PHOTO_ID_5072648547589055602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One last tip on rules and performance: If your rule creates a new meta-event, make certain that the new event does not match its own correlation filter.  Trust me on this one.  It's worth the extra time to double-check before turning it on.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Log Agents/Parsers/Handlers&lt;br /&gt;&lt;/span&gt;The final place where CPU load can grow quickly is your log collection points.  Somewhere between the log source and the database is code that your SIM uses to convert the log from its original format to a standard format for insertion into the database.  The frequency with which log entries hit this code can have an impact on performance.  This is where all of the regex matching, sorting, asset category searching, severity calculation, and so on occurs.  For well-defined log formats and sources (like firewalls), this tends not to be that intense a process since you have very little diversity to be handled.  But for UNIX servers with a variety of services running, there is the potential for serious friction as these parsers try and figure out what the actual log source is and what the message means.&lt;br /&gt;&lt;br /&gt;If you have something like a UNIX a server farm that generates thousands of events per second and you want to push it through your SIM, you will need to spread this load out or buy big hardware to handle it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-1026314878695678230?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/1026314878695678230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=1026314878695678230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/1026314878695678230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/1026314878695678230'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/06/sim-sizing-cpu-performance-tuning.html' title='SIM Sizing - CPU (+ Performance Tuning)'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jhFXi2qCoWc/RmWq-l1yZHI/AAAAAAAAADM/3dyXuoZmGT4/s72-c/partrules.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-3686644114626205413</id><published>2007-06-20T14:35:00.000-05:00</published><updated>2008-12-08T19:46:58.631-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Malware Season Pt. 1</title><content type='html'>&lt;a href="http://pmelson.blogspot.com/2007/06/malware-hunting-for-lazy-idiots.html"&gt;Like I said last week&lt;/a&gt;, I'm going to write up my experience from last week with taking some "0h-day" malware (read: undetected by IDS or AV) from log finding back to analysis of the dropper and binary. This is a 2-parter, the first part covers from discovery through the dropper to getting a copy of the binary.&lt;br /&gt;&lt;br /&gt;If you're aware of what's been going on in the malware arena for the past few years, and has visibly worsened over the last 6-9mos, then you know that you can't rely on your AV vendor to catch it all. (Remember all of that 'defense-in-depth' stuff from the Information Assurance "awakening" 4-5 years ago? Yeah, this is where it should be saving your bacon.) So one thing I've taken to doing is looking at firewall logs for outbound web requests that end in ".exe". I found one that was a "http://&lt;span style="font-style: italic;"&gt;IP:PORT&lt;/span&gt;/bin.exe"  It would be nice if the FQDN were captured here, but it's not.  And as such, that file is just out of reach.&lt;br /&gt;&lt;br /&gt;Using ArcSight, it was pretty easy to give that download some context by pulling up all of the Internet traffic to and from that workstation for 30 minutes before and 30 minutes after. After digging around, I found one of the web sites the user had visited that contained a single line of JavaScript on each page that contained an unescape() call that looked glaringly suspicious.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jhFXi2qCoWc/RnmGSl1yZLI/AAAAAAAAADs/1BSbBO1sD0Y/s1600-h/scr2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_jhFXi2qCoWc/RnmGSl1yZLI/AAAAAAAAADs/1BSbBO1sD0Y/s320/scr2.JPG" alt="" id="BLOGGER_PHOTO_ID_5078237708790424754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In addition to the unescape call, there's also another function named dF() that has a whole mess of obfuscated code in it.  The first step is to find out what the unescape function will actually do.  I used Rhino JavaScript shell:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmGoV1yZMI/AAAAAAAAAD0/Y7WtJedO5oE/s1600-h/scr3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmGoV1yZMI/AAAAAAAAAD0/Y7WtJedO5oE/s320/scr3.JPG" alt="" id="BLOGGER_PHOTO_ID_5078238082452579522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The unescape creates a second set of script tags and defines the dF function. Now I can define dF in Rhino's shell and see what that does:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmG_11yZNI/AAAAAAAAAD8/YxU7rytMu0Y/s1600-h/scr5.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmG_11yZNI/AAAAAAAAAD8/YxU7rytMu0Y/s320/scr5.JPG" alt="" id="BLOGGER_PHOTO_ID_5078238486179505362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Oops. I needed to replace document.write with print in order to actually see output of the dF function:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmHZV1yZOI/AAAAAAAAAEE/uyb7GXPei8k/s1600-h/scr6.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmHZV1yZOI/AAAAAAAAAEE/uyb7GXPei8k/s320/scr6.JPG" alt="" id="BLOGGER_PHOTO_ID_5078238924266169570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;There, that should work:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmH_F1yZPI/AAAAAAAAAEM/4c8CeFBmVn4/s1600-h/scr7.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmH_F1yZPI/AAAAAAAAAEM/4c8CeFBmVn4/s320/scr7.JPG" alt="" id="BLOGGER_PHOTO_ID_5078239572806231282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now I've got a human-readable VBScript dropper with a URL.  Grabbing the binary malware at this point is as easy as using wget.  Despite the fact that the malware URL can easily be read, there's still obfuscation at work here.  Check out the a1,a2,a3,a4 variables and then str1 = a1&amp;a2&amp;amp;a3&amp;amp;a4 used to hide the string "Adodb.Stream."  &lt;a href="http://www.f-secure.com/v-descs/adodb_stream.shtml"&gt;I wonder why&lt;/a&gt;.  Like I said, both the JavaScript payload and the binary went undetected by the workstation's antivirus.   Our IDS fired on both, but they were fairly generic detects - one for the JavaScript unescape function and another for the packed executable download.&lt;br /&gt;&lt;br /&gt;Tomorrow I'll write up the basic analysis of the binary that I did along with some info on the type of external follow-up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-3686644114626205413?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/3686644114626205413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=3686644114626205413' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3686644114626205413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3686644114626205413'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/06/malware-season-pt-1.html' title='Malware Season Pt. 1'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jhFXi2qCoWc/RnmGSl1yZLI/AAAAAAAAADs/1BSbBO1sD0Y/s72-c/scr2.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-1437308022054264155</id><published>2007-06-20T15:18:00.000-05:00</published><updated>2008-12-08T19:46:57.827-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Malware Season Pt. 2</title><content type='html'>&lt;a href="http://pmelson.blogspot.com/2007/06/malware-season-pt-1.html"&gt;When we last left our heroes&lt;/a&gt;, they had de-obfuscated some JavaScript and downloaded a malware binary file named 'bin.exe'.&lt;br /&gt;&lt;br /&gt;As you might have guessed, this binary was packed in order to make detecting its contents more difficult.  I ran it through PEiD to determine what packer was used:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmMbF1yZQI/AAAAAAAAAEU/GUDpfReq2sE/s1600-h/bin1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmMbF1yZQI/AAAAAAAAAEU/GUDpfReq2sE/s320/bin1.JPG" alt="" id="BLOGGER_PHOTO_ID_5078244451889079554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;At this point, I don't even bother trying to unpack it.  Instead, I try to load it in the GenOEP and ScanEP PEiD plugins and then I try to open it in OllyDbg.  They all fail.  Now I start to fear that I'm doomed to repeat &lt;a href="http://pmelson.blogspot.com/2007/04/malware-packers-debuggers-oeps-and.html"&gt;past frustrations&lt;/a&gt;.  But, what the hell, I'll try and unpack it anyway:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmNPF1yZRI/AAAAAAAAAEc/sQ6vhyhFmkA/s1600-h/bin2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmNPF1yZRI/AAAAAAAAAEc/sQ6vhyhFmkA/s320/bin2.JPG" alt="" id="BLOGGER_PHOTO_ID_5078245345242277138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;That was lucky.  It can't be this easy.  You may have noticed that the file in that screen shot is svhost32.exe, not bin.exe.  This is because I was playing with it, trying to get it to run in SysAnalyzer.  Since the VBScript dropper saves the file as svhost32.exe, I thought that might be worth a try.  Anyway, to make sure there aren't more layers of packing going on here, I take another whack at it with PEiD:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmNlF1yZSI/AAAAAAAAAEk/TAIDI19bYzs/s1600-h/bin3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmNlF1yZSI/AAAAAAAAAEk/TAIDI19bYzs/s320/bin3.JPG" alt="" id="BLOGGER_PHOTO_ID_5078245723199399202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I didn't see that coming, but I'm not looking a gift horse in the mouth.  So now we should be able to do stuff like launch it in SysAnalyzer or OllyDbg.  Sure enough, it runs from SysAnalyzer and we get the goodies:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmO2V1yZTI/AAAAAAAAAEs/Ze_JiMsmWcI/s1600-h/bin4.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmO2V1yZTI/AAAAAAAAAEs/Ze_JiMsmWcI/s320/bin4.JPG" alt="" id="BLOGGER_PHOTO_ID_5078247119063770418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmPA11yZUI/AAAAAAAAAE0/RcyZzGSXgBc/s1600-h/bin6.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmPA11yZUI/AAAAAAAAAE0/RcyZzGSXgBc/s320/bin6.JPG" alt="" id="BLOGGER_PHOTO_ID_5078247299452396866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Once it's running with SysAnalyzer, we can get the scoop.  It uses AutoItv3 to download itself again as svhost.exe, modifies a mess of registry keys to run at start up as well as hijack Explorer and IE startup pages, presumably to drive up ad hits for the distributor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmRk11yZVI/AAAAAAAAAE8/uZ6oF47PFKs/s1600-h/bin7.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmRk11yZVI/AAAAAAAAAE8/uZ6oF47PFKs/s320/bin7.JPG" alt="" id="BLOGGER_PHOTO_ID_5078250116950943058" border="0" /&gt;&lt;/a&gt;A quick Google search, and we have a name for it: Sohanad.  So it's not new malware, really, just slightly modified from the original so as to get by more AV scanners.  I wonder how many:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmSp11yZWI/AAAAAAAAAFE/OHmYEt4tT_U/s1600-h/bin9.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/RnmSp11yZWI/AAAAAAAAAFE/OHmYEt4tT_U/s320/bin9.JPG" alt="" id="BLOGGER_PHOTO_ID_5078251302361916770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The packed executable that we downloaded is detected by 13/31 AV products used by VirusTotal.  Just for kicks, what happens if we try the &lt;span style="font-style: italic;"&gt;unpacked&lt;/span&gt; file from earlier:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmTBV1yZXI/AAAAAAAAAFM/Hn69hX2aTQ0/s1600-h/bin8.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/RnmTBV1yZXI/AAAAAAAAAFM/Hn69hX2aTQ0/s320/bin8.JPG" alt="" id="BLOGGER_PHOTO_ID_5078251706088842610" border="0" /&gt;&lt;/a&gt;Ugh.  Only 5/31 detect it now, when it's &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;not obfuscated&lt;/span&gt;&lt;/span&gt;.  The irony is overwhelming.  Quick, somebody in the AV R&amp;amp;D field write a paper on using un-obfuscated code as a means of bypassing AV detection.  This is hot!&lt;br /&gt;&lt;br /&gt;Lastly, I contacted McAfee for an EXTRA.DAT file for both the packed and unpacked binaries and notified &lt;a href="http://isc.sans.org/"&gt;SANS ISC&lt;/a&gt; of the hacked web site with the dropper as well as the site hosting the binary.&lt;br /&gt;&lt;br /&gt;I'd like to say, if you do run into sites hosting malware, the handlers at ISC are a great resource for coordinating response and clean-up.  In this case, the hacked site was cleaned up and the malicious site was taken down within a day of my contacting ISC.  They contacted the responsible parties and got it done.  Doing this by yourself is hard and annoying work, and I am grateful to the ISC folks that they're willing to let us offload this stuff to them.  So when you're out and about at conferences this summer and you see any of the &lt;a href="http://handlers.sans.org/"&gt;ISC handlers&lt;/a&gt;, remember to thank them and maybe buy them a beer or something.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-1437308022054264155?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/1437308022054264155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=1437308022054264155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/1437308022054264155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/1437308022054264155'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/06/malware-season-pt-2.html' title='Malware Season Pt. 2'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jhFXi2qCoWc/RnmMbF1yZQI/AAAAAAAAAEU/GUDpfReq2sE/s72-c/bin1.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-3133779493484766144</id><published>2007-06-26T12:20:00.001-05:00</published><updated>2008-12-08T19:46:56.397-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fools'/><title type='text'>ISN Funny</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/RoFLA11yZZI/AAAAAAAAAFg/09mEdpQScI0/s1600-h/isnoops.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/RoFLA11yZZI/AAAAAAAAAFg/09mEdpQScI0/s320/isnoops.JPG" alt="" id="BLOGGER_PHOTO_ID_5080424332475393426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;I &lt;span style="font-weight: bold;font-family:trebuchet ms;" &gt;&amp;lt;3&lt;/span&gt; &lt;a href="http://www.theonion.com/"&gt;The Onion&lt;/a&gt;.  But I especially love it when they show up mixed in with the "real news."&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.infosecnews.org/pipermail/isn/2007-June/014889.html"&gt;http://www.infosecnews.org/pipermail/isn/2007-June/014889.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-3133779493484766144?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/3133779493484766144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=3133779493484766144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3133779493484766144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3133779493484766144'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/06/isn-funny_26.html' title='ISN Funny'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jhFXi2qCoWc/RoFLA11yZZI/AAAAAAAAAFg/09mEdpQScI0/s72-c/isnoops.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-3506515499471107958</id><published>2007-07-02T12:29:00.000-05:00</published><updated>2008-12-08T19:46:56.331-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Little Stuff</title><content type='html'>So in between playing whack-a-mole with ecard.exe urls and trying to figure out which BlackHat talk you're going to now that The Brothers Kumar have backed out of their talk on bypassing TPM (BTW, these guys are kinda &lt;a href="http://lists.virus.org/dailydave/msg00053.html"&gt;tipping the shady-meter&lt;/a&gt;, no?), you're looking for something interesting to read.&lt;br /&gt;&lt;br /&gt;Try&lt;a href="http://www.securls.com/"&gt; http://www.securls.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And since I mentioned ecard, &lt;a href="http://www.lyberty.com/blog/2007/06-june/under-attack.html"&gt;here's a write-up&lt;/a&gt; on some other oft-repacked malware that won't go away.  Lyberty Miller does a nice job of pointing out practical countermeasures, something researchers don't always do.&lt;br /&gt;&lt;br /&gt;Also, more ecard.  Guess what I'm neck-deep in today.  It's all new since the weekend!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jhFXi2qCoWc/RolTRARfTZI/AAAAAAAAAGA/Mixsl9KHcyY/s1600-h/pic5.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_jhFXi2qCoWc/RolTRARfTZI/AAAAAAAAAGA/Mixsl9KHcyY/s200/pic5.jpg" alt="" id="BLOGGER_PHOTO_ID_5082685206060551570" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-3506515499471107958?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/3506515499471107958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=3506515499471107958' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3506515499471107958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/3506515499471107958'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/07/little-stuff.html' title='Little Stuff'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jhFXi2qCoWc/RolTRARfTZI/AAAAAAAAAGA/Mixsl9KHcyY/s72-c/pic5.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6690994337395244641.post-4880678105478159537</id><published>2007-07-05T10:31:00.000-05:00</published><updated>2008-12-08T19:46:56.204-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Welcome Back!</title><content type='html'>Welcome back from the holiday!  Pffft.  I enjoyed the day off, but I'm starting to dread coming back to work after holidays.  New Years.  Superbowl Sunday.  Lately, any random weekend.  And now Independence Day.&lt;br /&gt;&lt;br /&gt;So for those keeping score, we're now on variant 4 of ecard.exe, all new for July 4th!  And look, with the new version, no two binaries are exactly the same:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jhFXi2qCoWc/Ro0PXgRfTaI/AAAAAAAAAGI/leWn-x12pJM/s1600-h/p3.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_jhFXi2qCoWc/Ro0PXgRfTaI/AAAAAAAAAGI/leWn-x12pJM/s200/p3.jpg" alt="" id="BLOGGER_PHOTO_ID_5083736450845855138" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6690994337395244641-4880678105478159537?l=pmelson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pmelson.blogspot.com/feeds/4880678105478159537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=6690994337395244641&amp;postID=4880678105478159537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4880678105478159537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6690994337395244641/posts/default/4880678105478159537'/><link rel='alternate' type='text/html' href='http://pmelson.blogspot.com/2007/07/welcome-back.html' title='Welcome Back!'/><author><name>PaulM</name><uri>http://www.blogger.com/profile/02530533566781746778</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07710546765367697106'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jhFXi2qCoWc/Ro0PXgRfTaI/AAAAAAAAAGI/leWn-x12pJM/s72-c/p3.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>