Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд Реверс-инжиниринг вируса вымогателя Nova.

Разработчик
Разработчик
Статус
Онлайн
Регистрация
21 Июн 2025
Сообщения
223
Реакции
88
Относительно недавно, начал форситься Ransomware вирус под названием Nova, +- в Апреле 2025 года он начал распространяться на просторах интернета, операторы начали массово атаковать компании с целью получения финансовой прибыли, на разных форумах данная обезьяна под именованием "NovaClan" сидит и вымоляет продать им доступы к разным корпорациям, чтобы провести атаку.
Статья написана за 30 минут под ЛСД, если что-то не так, пишите.
1777824975298.png
Сразу скажу, что это самый некачественный локер который мне приходилось анализировать, имхо, там нет абсолютно никакой защиты, я иногда удивляюсь, как можно вестись на подобные виды малвари, которые написаны тяп-ляп.

Первичный статический анализ
Когда я первый раз открыл билд внутри дизассемблера, открыв main, я заметил, как малварь вызывает ряд функций которые отвечают за те, или иные действия:
1777819749578.png

Интересно то, что сама малварь полностью написана на языке программирования Go, хотя селлер данного добра явно настаивает на том, что он написан на языке Rust, я не отрицаю, возможно в мои руки попали первые версии билда(всего билдов 2, 1.0 и 2.0), но исходя из первой версии можно будет сделать некий вывод о компететности разработчиков, об их логике мышления и т.д и понять, какое добро они могли изготовить уже во второй версии билда, возможно переписав малварь на Rust.
1777819973857.png

В первую очередь малварь вызывает функцию BRG0SNet_GetRandomString_RandomString передав ей значение 9, чтобы сгенерировать случайную строку длиной в 9 символов:
1777820104501.png

После чего малварь вызывает функцию BRG0SNet_GetConfig_CheckKey для настройки конфигурации, то есть она проверяет наличие своего рабочего файла Windows.json, чтобы понять, является ли это заражение первичным либо уже атака происходила.
Если файла в системе нет, малварь использует сгенерированную ранее 9-символьную строку для создания новой конфигурации через CreateKeyFile, фактически регистрируя новую жертву в своей базе, если же файл уже существует, она считывает старые параметры через ReadKey, чтобы продолжить прерванное шифрование или не начинать его заново
Внутри же функции BRG0SNet_GetConfig_ReadKey происходит чтение JSON-файла, десериализация его содежримого в структуру и извлечение ключа шифрования и расширение файла
C++:
Expand Collapse Copy
  v14 = os_OpenFile((__int64)"C:\\Windows\\System32\\Windows.json", 32, 0, 0);
  result = v14._r0;
  if ( !v14._r1 )
  {
    v12[0] = BRG0SNet_GetConfig_ReadKey_func1;
    v12[1] = v14._r0;
    v13 = v12;
    All = io_ReadAll(go_itab__os_File_io_Reader, v14._r0);
В этой же функции малварь открывает Windows.json и считывает все его содержимое в память через Io.ReadAll.
Две функции которые я проанализировал отвечают за то, чтобы сгенерировать уникальный идентификатор жертвы и проверить на повторный визит, шифровался ли ПК либо нет.

После чего малварь вызывает функцию BRG0SNet_StopImportantServices_StopImportantService для вырубания всего, что мешает добраться до файлов, разблокировки баз данных через принудительный стоп служб mssql и mysql, остановки веб-серверов iis для освобождения занятых конфигов, убийства процессов планировщиков и администрирования, чтобы вирус мог спокойно пережевывать информацию без ошибок
1777820904403.png

1777820935106.png
Также там вызываются функции для очистки разных логов, разбирать я их не буду, имхо, читателю это неинтересно, намного интереснее глянуть на саму логику шифрования, когда уже сама малварь запущена.

1. Вызывается функция BRG0SNet_GetUniqeId_GetNetworkId для того, чтобы сгенерировать сетевой идентификатор.
Малварь берет за основу переменную CurrentTimeForNetworkId и прогоняет ее через алгоритм хэширования SHA-512, после чего малварь проверяет, чтобы результат хэширования был не короче 35 символов, для чего это? это необходимо для создания уникального и неизменяемого отпечатка сессии, который служит эталоном идентификации жертвы в закрытой панели управления Nova, фактически превращая случайную метку времени в жестко заданный 35-символьный серийный номерю
2. После чего малварь начинает формировать имя файла с требованием выкупа, который будет разбросан скорее всего по всей системе:
C++:
Expand Collapse Copy
  v9 = runtime_concatstring3(0, "C:\\", 3, NetworkId._r0, NetworkId._r1, ".README.txt", 11);
Функция runtime_concatstring3 это стандартная внутренняя функция Go для слкеивания трех строк, малварь собирает путь к файлу следующим образом:
- Она берет префикс "C:\\", то есть корень системного диска
- После чего берет NetworkdId - тот самый 35-символьный уникальный идентификатор, который она сгенерировала через SHA-512 ранее
- .README.txt - где будет содержаться сообщение о выкупе.

В итоге на диске появится файл с именем вида:
C:\A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R.README.txt.
После того как Nova очистила логи, остановила базы данных и сгенерировала паспорт атаки, они буквально маркирует территорию, создание файла в корне диска это финальный аккорд перед тем как основной движок начнет превращать файлы пользователя закрипченый массив данных.

После чего в функции BRG0SNet_MessageSoft_MessageRan начинается самое интересное
Малварь получает список всех логических дисков C:, D:, E: и т.д чтобы оставить письмо с счастьем, а именно README.txt где сообщение о выкупе:
1777821878621.png

C++:
Expand Collapse Copy
  while ( r1 > v15 )
  {
    v24 = v15;
    v27 = r0;
    v26 = *r0;
    v23 = r0[1];
    NetworkId = BRG0SNet_GetUniqeId_GetNetworkId(r0);
    v31 = runtime_concatstring4(0, v26, v23, ":\\", 2, NetworkId._r0, NetworkId._r1, ".README.txt", 11, v22);
В цикле внутри функции Message, малварь уже собирает полный путь форматом: [буква диска]:\[NetworkID].README.txt, непонятно, что хотел доказать разработчик, если на диске C: он создал предварительно тот же .txt файл, вопрос в том, зачем нужно было создавать его изначально на диске C, если бы внутри цикла все реализовавалось бы на всех дисках.
Также сообщение о выкупе, которое выглядит так:
C++:
Expand Collapse Copy
    v34 = (string)runtime_concatstring3(
                    0,
                    "# Nova Group\r\n\r\nYour unique network Id: ",
                    40,
                    v30._r0,
                    v30._r1,
                    "\r\n"
                    "----------------------------------------------------------------------------------------------------"
                    "-------------------------------------------------------------------------------------------------\r\n"
                    "\r\n"
                    "[+] What happened?\r\n"
                    "Your computers and servers are encrypted, bac",
                    5371);
В статье я много чего не разобрал, например проход по папкам, более углубленно резолв апи, или алгоритм шифрования, не было это разобрано потому, что малварь буквально мусор, взять тот же стиллер Люмма, там была хоть какая-то обфускация, попытка скрыть выполнение хоть как-то, безопасники ржут с подобных локеров которые продают в итоге гоям по 1000$ на разных теневых грязных форумах.


Запускаем малварь внутри виртуальной машины
Малварь переходит к фазе тотальной деструкции, запуская рекурсивный обход всех обнаруженных ранее дисков и директорий, как видно на скрине под удар попадает все:
от системных файлов конфигурации и логов до личных папок пользователя:
1777823095644.png

Каждый файл получает уникальную приписку .id-XCBTBPMNE.NOVAbe7b2 - XCBTBPMNE это часть той самой функции NetworkId который генерировался через SHA-512.
Также видна фирменная метка группировки .NOVA
Видно, что малварь не делает исключений для занятых системой файлов. Она шифрует даже файлы реестра и журналы транзакций (.regtrans-ms, .blf), что после перезагрузки может привести к полной невозможности входа в учетную запись пользователя.
1777823235682.png

И кстати, 50 процентов функции малвари не отработали, у вас буквально включается консолька где перебирается директория и моментом шифруются некоторые файлы, инвиз-атака 100/100.
Спустя миллиард лет получаем README.TXT содержимое которого:
Код:
Expand Collapse Copy
----------------------------------------------------------------------------- Ransom -----------------------------------------------------------------------------
-> Hello, without any problems, if you see this Readme its mean you under controll by Nova ransomware.
-> Data stolen and will be leaked if didn't contact us in 48 hours.

- Your unique network Id: [FDDSFSDF-ASDFASDFADSF-ADSFASDFASDF]
- Encrypted files have ext: .NOVAbe7b2 (DON'T TOUCH IT)

-> Data from your network will be leaked in 10 days, take action and get in touch please.
--- Make sure that the best way to less the time for you is contacted us to recover and decrypt your secret data and stop leak operation.
-----------------
>>> What we will provide and help with?
-> We will provide advanced decryptor (Katana Decryptor v2.0) easy for use and we will return every file or data we delete or stole from your Network.
-> We will give you link to download data stolen from your network as plus recover.
-> We provide report to how fix your network, and how we gain access and bypass your security, and some advice to up your security.
-----------------
>>> Contact us here (use tor Browser to access chat): download tor from torproject.org
----------------
Chat system (TOR) join link : http://novak6fgohb7m6nm52lgpaaquntawixqsnpc[удалено чтобы не было переходов по ссылке]nion/chat
Put your Network ID to join.
----------------
- Our Session Messenger ID (Official Nova Support):
054f55ec93aca9bac362b9d91eff36a7ce451e7caba47c0b2e004ba429f9529c79 (https:.org)

- Also you can use qtox ID: 8E9A6195A769FE7115F087C61D75CF32874C339B3AB0947D07480C9A8A12DA5009151BE6A51F
-----------------
>>> Important notes:
-> Please do not touch the files because we can't decrypt it if you touch it.
-> Please contact us today or soon as possible, because the leak operation should start, and we will not decrypt or recover you after time.
-----------------
- Your leak post will be in our Blog (Department of Support):
http://novadmrkp4vbk2padk5t6pbxolnd[удалено чтобы не было переходов по ссылке]rcq4mjaoyed6nxsqiuzyyd.onion/

----------------------------------------------------------------------------- Ransom -----------------------------------------------------------------------------
Что отсюда интересное, то это Tox, я решил написать им на Tox, притворившись жертвой Ransomware, для начала я проверил, существует ли этот TOX вообще либо нет, отправив запрос дружбы(заранее скажу, что ответа я не дождался xd)
1777824653925.png

Пишем типа антивирусное ПО для детектирование Nova
Самая интересная часть статьи, в этой главе моя задача будет таковой - написать полноценное антивирусное ПО(индивидуальное) под данный Ransomware основываясь только на данных, которые у меня есть.
Первое, что мне приходит в голову и самое банальное, без реализации каких-либо хуков, это проверять диски на наличие README.txt, после чего считывать оттуда данные и проверять наличие на слово "Nova", либо же проверить папку System32 на наличие Windows.json.
Сама малварь написана конкретно под x64, она не написана на x86 для совместимости, конкретно строго под x64, соответственно модуль наш антивирусный мы тоже будем писать под x64 архитектуру соблюдая соглашение о вызове fastcall.
Ладно, это рофл, для подобного говно мы не должны писать никакие .dll модули, хукать, что либо, мне хватило 25 строк кода на моем любимом ассемблере FASM для деинсталяции мусора:
C:
Expand Collapse Copy
NovaStart:
                SUB RSP, 28H
                LEA RCX,[path]
                CALL [GetFileAttributes] ;// файл с конфигом на месте?
             
                CMP EAX, -1
                JE @F
             
                LEA RCX, [msgdetec]
                LEA RDX, [path]
                CALL [printf]
                CALL [_getch]
                LEA RCX, [path]
                CALL [DeleteFileA]
             
                XOR ECX, ECX
                CALL [ExitProcess]
             
@@:
                LEA RCX, [msgSafe]
                CALL [printf]
                RET
DATA
path DB 'C:\Windows\System32\Windows.json', 0
msgdetec DB 'Nova RansomwareDetected: %s', 10, 0
msgSafe DB '[CLEAN] Windows.json not. Clean', 10, 0
;struct_fh WIN32_FIND_DATA <>
После удаления малварь перестала работать и просто зависла.
1777824625250.png

Заключение
В заключение хотелось бы сказать, что данная малварь самая худшая, что я видел, если кто-то реально занимается локерством, не советую обращаться к данной группировке, кодеры там так себе, так еще и на Go, даже учитывая, что новые версии на Rust, не думаю, что люди там развились, исходя из этой статьи все ясно)
 
Последнее редактирование:
Представим ситуацию, чисто теоретически, они же не могут изменить название этих файлов и ключевое слово nova на что-то другое, верно?
в плане, когда они локают файлы они могут любое имя назначить
к примеру “lockfile”
 
Почитав данный материал, я понял что в нашем мире сидят мазохисты на го. Ну хотя бы функции под вирту закинули бы, ну че за пиздец. Я еще кекнул с антивируса, прикол шифрование ломается из-за удаление кфг или че? Ладно хватит меня с этого на сегодня, завтра в школу, математику учить.
 
Назад
Сверху Снизу