Введение:
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.