Введение:

WannaCry, также известная как WCry или WannaCrypt, — печально известная программа-вымогатель, которая попала в заголовки газет в мае 2017 года после того, как заразила сотни тысяч компьютеров в 150 странах. Вредонос распространялся через червя, который использовал уязвимость в операционных системах Microsoft Windows. Программа-вымогатель WannaCry зашифровывала файлы на зараженных компьютерах и требовала выкуп в биткойнах, чтобы восстановить доступ к данным. В этой статье мы углубимся во внутреннюю работу WannaCry и проанализируем ее свойства и поведение.

Анализ статических свойств:

WannaCry — это исполняемый файл Windows, написанный на C++ и упакованный упаковщиком UPX. UPX — это популярный исполняемый компрессор, используемый авторами вредоносных программ, чтобы избежать обнаружения антивирусом на основе сигнатур. Размер упакованного исполняемого файла составляет около 359 КБ. Заглушка распаковки UPX распаковывает полезную нагрузку и передает управление исходному коду.

Анализ поведения:

При выполнении WannaCry создает мьютекс, чтобы гарантировать, что на зараженной машине работает только один экземпляр вредоносного ПО. Затем он начинает шифровать файлы на компьютере, используя шифрование AES. Зашифрованные файлы переименовываются с расширением .WNCRY, а записка о выкупе создается на рабочем столе и в виде текстового файла в каждой зашифрованной папке. В записке о выкупе жертве предписывается заплатить выкуп в размере 300 долларов в биткойнах в течение трех дней, в противном случае сумма выкупа будет увеличена до 600 долларов. В записке о выкупе также указан уникальный биткойн-адрес для платежа и веб-сайт Tor для связи со злоумышленником.

Ручное реверсирование кода:

Поведение WannaCry можно проанализировать, разобрав код вредоносного ПО и изучив его функции. В следующих фрагментах кода показаны примеры поведения и функциональности WannaCry.

Пример 1: Шифрование файлов WannaCry шифрует файлы на зараженной машине, используя шифрование AES. В следующем фрагменте кода показана функция шифрования, используемая вредоносной программой.

void encrypt_file(char *file_path, unsigned char *key, unsigned char *iv)
{
  int input_fd = open(file_path, O_RDONLY);
  int output_fd = open(file_path, O_WRONLY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE);
  AES_KEY aes_key;
  AES_set_encrypt_key(key, 128, &aes_key);
  ...
  while (1)
  {
    int num_read = read(input_fd, in_buf, AES_BLOCK_SIZE);
    ...
    AES_encrypt(in_buf, out_buf, &aes_key);
    write(output_fd, out_buf, num_read);
    ...
  }
  ...
}

В приведенном выше коде функция encrypt_file принимает в качестве аргументов путь к файлу, ключ и вектор инициализации (IV). Функция открывает файл в режиме только для чтения и создает новый файл в режиме только для записи. Ключ шифрования AES устанавливается с помощью функции AES_set_encrypt_key, а шифрование выполняется с помощью функции AES_encrypt. Зашифрованные данные записываются обратно в файл, заменяя исходные данные.

Пример 2: создание записки о выкупе WannaCry создает записку о выкупе на зараженной машине, предлагая жертве заплатить выкуп в биткойнах, чтобы восстановить доступ к зашифрованным файлам. В следующем фрагменте кода показана функция, используемая вредоносным ПО для создания записки с требованием выкупа.

void create_ransom_note(void)
{
  ...
  char desktop_path[MAX_PATH];
  char ransom_note_path[MAX_PATH];
  ...
  snprintf(desktop_path, sizeof(desktop_path), "%s\\Desktop", getenv("USERPROFILE"));
  snprintf(ransom_note_path, sizeof(ransom_note_path), "%s\\%s", desktop_path, RANSOM_NOTE_NAME);
  ...
  FILE *fp = fopen(ransom_note_path, "w");
  ...
  fprintf(fp, "Ooops, your important files are encrypted.\n");
  fprintf(fp, "If you want to restore them, write us to the e-mail %s\n", EMAIL_ADDRESS);
  fprintf(fp, "Your ID: %s\n", victim_id);
  ...
  fclose(fp);
  ...
}

В приведенном выше коде функция create_ransom_note создает записку с требованием выкупа на рабочем столе зараженной машины. Функция использует функцию fopen для открытия файла в режиме записи и функцию fprintf для записи содержимого примечания о выкупе в файл. Записка о выкупе включает адрес электронной почты злоумышленника, уникальный идентификатор жертвы и инструкции о том, как заплатить выкуп.

Заключение:

WannaCry — это сложная и опасная программа-вымогатель, поразившая сотни тысяч компьютеров в 2017 году. Ее способность быстро распространяться с помощью червя и использование надежных алгоритмов шифрования делают ее угрозой для глобальной кибербезопасности. В этом сообщении блога мы проанализировали статические свойства, поведение и код WannaCry, чтобы лучше понять, как он работает. Для отдельных лиц и организаций важно поддерживать свое программное обеспечение и системы в актуальном состоянии для защиты от таких атак, как WannaCry.