Спасительный BSOD защитил компьютеры под Windows XP от заражения WannaCry

fcaf198e971d99d11d3936faf55dc9e6.jpg

Новый отчёт от компании Kryptos Logic подвёл итоги распространения червя-криптовымогателя WannaCry (WannaCrypt) спустя две недели после начала эпидемии. Кстати, именно в Kryptos Logic работает хакер MalwareTech, который заметил новый ботнет в системе раннего детектирования Kryptos Vantage, сразу зарегистрировал на себя домен, с которым связывался WannaCry, и тем самым случайно остановил распространение вируса.

Один из интересных выводов экспертов: оказывается, операционная система Windows XP была железобетонно защищена от вируса, как многие думали. Выяснилось, что при заражении самым распространённым вариантом WannaCry компьютеры под Windows XP SP3 просто зависали и показывали «синий экран смерти» с последующей перезагрузкой. Никакие файлы не шифровались. Криптовымогатель не мог функционировать в таких условиях.
В первые дни после начала распространения WannaCry многие СМИ распространили информацию, что главная вина за заражение лежит на Windows XP. Вероятной причиной такого заблуждение было массовое инфицирование компьютеров Государственной службы здравоохранения Великобритании. Говорят, что в этой организации работает много древних ПК со старыми операционными системами. Служба здравоохранения решительно отвергла обвинения: она заявила, что на момент атаки всего всего 5% их компьютеров работали под Windows XP.

Одновременно критике подверглась компания Microsoft, которая прекратила выпускать обновления безопасности под Windows XP ещё в 2014 году. Специалисты Microsoft не стали спорить и оперативно выпустили необходимый патч для старых систем.

Две недели тестирования в лабораториях Kryptos Logic показали, что WannaCry действительно мог заразить непропатченные компьютеры с Windows XP, но попытка после этого загрузить полезную нагрузку DoublePulsar приводила к зависанию системы.

Сначала тестирование происходило в режиме, приближённом к реальному, когда распространение нагрузки DoublePulsar проверялось через эксплоит EternalBlue. На втором этапе на компьютеры вручную устанавливалась DoublePulsar. Выяснилось, что криптор успешно запускался на машинах Windows 7 64-bit, SP1, а вот машины c Windows XP непрерывно вылетали в BSOD, так что инфицирования не происходило.

Исследователи делают вывод, что машины под Windows XP не могли стать главным средством распространения инфекции, потому что «реализация эксплоита в WannaCry не могла надёжно запустить DoublePulsar и добиться корректного RCE». Соответственно, такой компьютер не имел возможности распространять вредоносный код далее по сети, используя уязвимость в SMB. Эти выводы соответствуют тем, к которым пришли эксперты «Лаборатории Касперского» в первые дни. Они выяснили, что 98% всех заражений приходится именно на компьютеры с Windows 7, а доля инфицированных Windows XP «незначительна».

«В самом худшем случае, который является наиболее вероятным, — сказано в отчёте Kryptos, — WannaCry вызвал много неожиданных сбоев с синим экраном смерти».

Наверное, впервые в истории BSOD сделал что-то полезное полезное — защитил компьютеры.

В то же время компьютеры под Windows 7 пострадали довольно серьёзно. Исходя из данных системы Kryptos Vantage, специалисты оценивают количество заражений в 14–16 млн. Общее количество систем, где криптор сработал и зашифровал файлы пользователей до срабатывания стоп-крана, оценивается в несколько сотен тысяч.

Всего WannaCry поразил сети более 9500 IP-диапазонов интернет-провайдеров и/или организаций в 8900 городах 90 стран. Наиболее пострадавшими оказались Китай, США и Россия.

1e934d644b5d40569a7927fa4fbc3e58.png

Sinkhole-серверы компании Kryptos до сих пор регистрируют большое количество обращений к стоп-крану, в том числе с новых IP-адресов. Это говорит о том, что червь продолжает распространяться (в основном, в Китае). То есть миллионы пользователей до сих пор не установили патчи, не закрыли уязвимость в Windows и на них не установлены антивирусы. Этот факт могут использовать новые версии червя — и может разродиться новая инфекция.

Специалисты Kryptos рассмотрели предположение хакера Нила Меты (если помните, он обнаружил Heartbleed), что авторы WannaCry связаны с группой Lazarus, которая провела знаменитую атаку на Sony Pictures в 2014 году, а спустя два года выкрала часть золотовалютных резервов банка Бангладеш (101 млн через систему SWIFT). Эта группа связана с Северной Кореей.

Нил Мета указал на одинаковый участок кода в WannaCry и зловреде группы Lazarus.

static const uint16_t ciphersuites[] = {
  0x0003,0x0004,0x0005,0x0006,0x0008,0x0009,0x000A,0x000D,
  0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x002F,
  0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
  0x0038,0x0039,0x003C,0x003D,0x003E,0x003F,0x0040,0x0041,
  0x0044,0x0045,0x0046,0x0062,0x0063,0x0064,0x0066,0x0067,
  0x0068,0x0069,0x006A,0x006B,0x0084,0x0087,0x0088,0x0096,
  0x00FF,0xC001,0xC002,0xC003,0xC004,0xC005,0xC006,0xC007,
  0xC008,0xC009,0xC00A,0xC00B,0xC00C,0xC00D,0xC00E,0xC00F,
  0xC010,0xC011,0xC012,0xC013,0xC014,0xC023,0xC024,0xC027,
  0xC02B,0xC02C,0xFEFF
};

template
void store_be(void * p, T x) {
  // store T in p, in big-endian byte order
}

template
void store_le(void * p, T x) {
  // store T in p, in little-endian byte order
}

bool find(const unsigned char * list, size_t n, uint16_t x) {
  for(size_t i = 0; i < n; ++i) {
    uint16_t t = (list[2*i + 0] << 8) | packet[2*i + 1];
    if(t == x) return true;
  }
  return false;
}

void make_client_hello(unsigned char * packet) {
  uint32_t timestamp = time(NULL);
  packet[ 0] = 0x01; // handshake type: CLIENT_HELLO
  packet[ 4] = 0x03; // TLS v1.0
  packet[ 5] = 0x01; // TLS v1.0
  random_bytes(&packet[6], 32); // random_bytes
  store_be(&packet[6], timestamp); // gmt_unix_time
  packet[38] = 0x00; // session id length
  const size_t cipher_num = 6*(2 + rand() % 5);
  store_be(&packet[39], cipher_num * 2); // ciphersuite length
  for(size_t i = 0; i < cipher_num;) {
    const size_t index = rand() % 75;
    // Avoid collisions
    if(find(&packet[41], i, ciphersuites[index])) {
      continue;
    } else {
      store_be(&packet[41 + 2*i], ciphersuites[index]);
      i += 1;
    }
  }
  store_be(&packet[41 + cipher_num * 2], 0x01); // compression_method_len
  store_be(&packet[42 + cipher_num * 2], 0x00); // compression_method
  store_le(&packet[0], 0x01 | ((43 + cipher_num * 2) << 8)); // handshake size
}


Это фиктивная реализация TLS 1.0, чтобы замаскировать трафик под TLS. Действительно, некоторые особенности этой реализации таковы, что случайно их повторить точно не могли. Это или та же хакерская группа или кто-то другой, кто внимательно проанализировал выводы аналитического отчёта (pdf) по атаке на Sony — и решил попробовать в точности такой же метод маскировки трафика. Собственно, это мог быть кто угодно.

Факты таковы, что в наше время такие атаки может провести абсолютно любой человек из любой страны мира, даже в одиночку — благодаря утечкам из АНБ и ЦРУ и другим источникам в руках любого хакера сейчас есть мощные инструменты для проведения хорошей качественной атаки в глобальном масштабе.

© Geektimes