Это первая часть из двух. Продолжение в следующем посте.

Привет^3🦠 Сегодня покажу вам разбор несложной малвари под Linux.

Реверс-инжиниринг помогает разобраться в том, как работает ВПО(вредоносное программное обеспечение). Более подробно можно почитать туть.

При анализе малвары мне нравится извелкать интересные приемы, которые в ней используются. А далее воспроизводить их для дальнейшего детекта и забавы ради.

Обычно проводится статический и динамический анализ для полного понимания алгоритма работы программы.

В этом посте я проведу статический анализ. Динамический анализ и небольшой интерактивчик будет на следующей неделе:3

Первым делом

Обычно я смотрю файл через утилиту Detect It Easy. Вот ее вывод:

Bash

Info: 
    Size: 1028096
    File type: ELF32
    String: ELF(386)
    Extension: elf
    Operation system: Red Hat Linux(ABI: 2.6.9)
    Architecture: 386
    Mode: 32-bit
    Type: EXEC
    Endianness: LE

Выглядит так, что таблица символов не удалена, поэтому можно сразу найти main. Закидываб бинарь в IDA Pro

main

В функции main происходит создание процесса-демона с вызовом chroot() в корневую директорию /.

IMG

Далее в бесконечном цикле вызывается функция do_heartbeat().

do_heartbeat()

Из функции можно извлечь все директории, с которыми малвара взимодействует.

IMG

/u01, /u02, /u03, /u04 - это часто используемые точки монтирования в Linux при работе с базами данных Oracle.

find

Конечно же следом пойду смотреть фунцию find.

IMG

Алгоритм функции достаточно простой:

  1. Открывает директорию и проходится по всем файлам в ней. Если это . или .., то их пропускает;
  2. Вызвает функцию CreatRadMe (да-да, это не опечатка). По названию понятно, что создается README файл (скриншот 4);
  3. Далее происходит вызов EncrFile, если не находит подстроку C_I_0P в пути до файла. Если же это директория, то рекурсивно вызывается find;

CreatRadMe

Ничего особо интересного тут нет. Просто создается файл со следующим содержанием.

IMG

EncrFile

Думаю, что ключевая функция во всем малваре - EncrFile.

IMG

По сути для файла изменяются права с помощью chmod() на rw-------. Эти же права используются далее для работы с файлами.

Файл шифрутеся с помощью алгоритма rc4. Ключ генерируется для каждого файла отдельно, и, что интересно, записывается в файл рядом с раширением .C_I_0P с помощью функции CreateKey. Это означает, что получится эти файлы расшифровать) При этом шифруется максимум 100’000’000 байт файла.

Итог

Я провел статический анализ не сложного шифровальщика-демона(такие бываю не часто, но об этом напишу позже❤️). Так как ключ хранится рядом с зашифрованным файлом, то мы можем написать дешифровшик. Динамическим анализом и написанием дешифровшика мы займемся в следующий вторник. Так что ожидайте с нетерпением:3