• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья -==Полный анализ рансома Darkside от корейца Чуонга==-

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Обзор

Это мой отчет об одном из последних образцов Darkside Ransomware v1.8.6.2 для Windows!

Поскольку на тему Darkside не так много глубокого анализа, я решил написать его сам.

Darkside использует алгоритм aPLib для сжатия своей конфигурации и схему гибридной криптографии пользовательских реализаций RSA-1024 и Salsa20 для шифрования файлов и защиты своих ключей.

Несмотря на использование обфускации кода и сложных методов для повышения привилегий и шифрования, программа-вымогатель имеет более низкую скорость шифрования по сравнению с другими программами, такими как Babuk или Conti, из-за рекурсивного обхода файлов.
Darkside2.png




IOCS

Этот конкретный образец, который я использовал для своего анализа, представляет собой 32-разрядный файл .exe.

Есть версия для Linux, которую легче анализировать, но я слишком ленив, чтобы охватить и то, и другое …

MD5: 9d418ecc0f3bf45029263b0944236884

SHA256: 151fbd6c299e734f7853497bd083abfa29f8c186a9db31dbe330ace2d35660d5

Сэмпл:
https://bazaar.abuse.ch/sample/151fbd6c299e734f7853497bd083abfa29f8c186a9db31dbe330ace2d35660d5/

Darkside1.png


Записка о выкупе

Записка с требованием выкупа зашифрована и хранится в сжатой с помощью aPLib конфигурации.

Контрольная сумма GUID создается и добавляется в конец каждого имени файла с запиской о выкупе.

Darkside3.png


Статический анализ кода

Создание KEY_BUFFER


После выполнения Darkside генерирует глобальный 256-байтовый буфер. Этот буфер важен, поскольку он используется для резолвинга API и дешифрования зашифрованных строк/буферов в памяти.

Назовем этот буфер KEY_BUFFER. Этот буфер создается с использованием двух жестко закодированных 16-байтовых ключей в памяти.

Darkside4.png


Вот функция для генерации KEY_BUFFER.

Сначала у неё есть цикл для записи 4 DWORD из key1 в KEY_BUFFER и вычитания 0x10101010 из каждого DWORD каждый раз. Затем у неё есть еще один цикл, чтобы добавить байты в key2 к байтам в KEY_BUFFER и поменять их местами.

Darkside5.png


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

Алгоритм дешифрования буфера.

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

Расшифровка состоит из простого цикла с заменой байтов и одной операции XOR, которая использует данные из сгенерированного KEY_BUFFER.

Darkside6.png


Эта функция, однако, предназначена только для дешифрования не более 255 байтов, поскольку размер параметра длины составляет всего 1 байт.

Для поддержки буферов большего размера Darkside выделяет функцию-обертку, которая вызывает decrypt_buff() для buffer_length/255 раз с параметром длины 255.

В случае, если длина буфера не делится поровну на 255, вредоносная программа выполняет модульную операцию buffer_length% 255 и использует ее в качестве параметра длины для decrypt_buff() для дешифрования остальных байтов.

Darkside7.png


Динамической резолвинг API функий

Функция резолвинга API повторяет следующие операции.

Во-первых, она использует функцию decrypt_large_buffer() для дешифрования таблицы библиотеки в памяти.

Эта таблица разделена на блобы разного размера. Размер каждого блоба двоичного объекта - это 4-байтовое значение, стоящее перед ним.

Darkside8.png


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

Таблица построена таким образом, что сначала идет большой двоичный объект с именем DLL, а после него идут большие двоичные объекты с именами API, экспортированными из этой конкретной библиотеки.

Если мы выполним дешифрование всей таблицы и удалим байты, представляющие размер больших двоичных объектов, мы получим это.

Darkside9.png


После расшифровки имени DLL функция затем вызывает LoadLibraryA, чтобы загрузить эту библиотеку и начать импорт адреса в массив API в памяти. Вредоносная программа также стирает каждую расшифрованную строку из памяти, когда заканчивает ее использовать.

Эта операция повторяется до тех пор, пока не обработыются все библиотеки в таблице.

Darkside10.png


Функция импорта API для каждой библиотеки выполняет цикл, который расшифровывает имя API, вызывает GetProcAddress и каждый раз записывает адрес каждого API в массив.

Darkside11.png


Как мы видим, массив API строится в последовательном порядке от первого до последнего большого двоичного объекта API, и очень просто написать скрипт для расшифровки всех имен API и записи в массив API соответственно для автоматического разрешения всех API.

Вы можете просмотреть мой сценарий IDAPython для их автоматического импорта в IDA здесь.

После запуска скрипта таблица будет выглядеть так, что значительно упрощает статический анализ.

Darkside12.png


Резолвинг конфигурации


Зашифрованная конфигурация сохраняется в памяти и заканчивается DWORD 0xDEADBEEF. Поскольку для вызова decrypt_large_buffer() необходимо знать размер зашифрованного буфера, этот DWORD необходим для итеративного определения размера конфигурации.

Darkside13.png


После вызова decrypt_large_buffer() расшифрованная конфигурация имеет этот конкретный макет.

- Offset 0x0 - 0x7F: RSA-1024 exponent
- Offset 0x80 - 0x103: RSA-1024 modulus
- The rest: aPLib-compressed configuration.

Используя константы в операциях сравнения по всему алгоритму, довольно просто обнаружить, что Darkside распаковывает данные с помощью алгоритма aPLib.

Darkside14.png


Поскольку библиотеки aPLib широко доступны, я просто взял реализацию Python на Github, чтобы распаковать и проанализировать конфигурацию в файл JSON. Вы можете получить мой сценарий для создания этого файла JSON здесь.

Ниже представлена полная конфигурация этого образца в формате JSON.

JSON:
{
  "VICTIM_ID": "[0x30, 0x36, 0x30, 0x31, 0x30, 0x38, 0x65, 0x66, 0x62, 0x35, 0x31, 0x30, 0x63, 0x39, 0x38, 0x0, 0xdb, 0x85, 0x9b, 0xad, 0x0, 0x38, 0xe0, 0xc4, 0xf0, 0x92, 0x9, 0xa2, 0xa3, 0xc6, 0x14, 0xa4]",
  "ENCRYPTION_MODE": "Full",
  "AVOID_PROCESS_FLAG": true,
  "ENCRYPT_ALL_DRIVES_FLAG": true,
  "ENCRYPT_NET_SHARED_RESOURCE_FLAG": true,
  "CHECK_RUSSIAN_COMP_FLAG": true,
  "DELETE_SHADOW_COPIES_FLAG": true,
  "WIPE_RECYCLE_BIN_FLAG": true,
  "SELF_DELETE_FLAG": true,
  "UAC_ELEVATION_FLAG": true,
  "AdjustTokenPrivileges_FLAG": true,
  "LOGGING_FLAG": false,
  "DIRECTORY_TO_AVOID_FLAG": true,
  "FILE_TO_AVOID_FLAG": true,
  "FILE_EXTENSION_FLAG": true,
  "DIR_TO_REMOVE_FLAG": true,
  "SQL_SQL_LITE_FLAG": true,
  "PROCESS_TO_KILL_FLAG": true,
  "SERVICE_TO_KILL_FLAG": true,
  "THREAT_WALLPAPER_FLAG": true,
  "RANSOM_NOTE_FLAG": true,
  "CHANGE_ICON_FLAG": true,
  "BUILD_MUTEX_FLAG": true,
  "THREAD_OBJECT_FLAG": false,
  "C2_URL_FLAG": true,
  "DIRECTORY_TO_AVOID": "$recycle.bin, config.msi, $windows.~bt, $windows.~ws, windows, appdata, application data, boot, google, mozilla, program files, program files (x86), programdata, system volume information, tor browser, windows.old, intel, msocache, perflogs, x64dbg, public, all users, default",
  "FILE_TO_AVOID": "autorun.inf, boot.ini, bootfont.bin, bootsect.bak, desktop.ini, iconcache.db, ntldr, ntuser.dat, ntuser.dat.log, ntuser.ini, thumbs.db",
  "FILE_EXTENSION_TO_AVOID": "386, adv, ani, bat, bin, cab, cmd, com, cpl, cur, deskthemepack, diagcab, diagcfg, diagpkg, dll, drv, exe, hlp, icl, icns, ico, ics, idx, ldf, lnk, mod, mpa, msc, msp, msstyles, msu, nls, nomedia, ocx, prf, ps1, rom, rtp, scr, shs, spl, sys, theme, themepack, wpx, lock, key, hta, msi, pdb",
  "DIR_TO_REMOVE": "backup",
  "SQL_STRING": "sql, sqlite",
  "PROCESS_TO_AVOID": "vmcompute.exe, vmms.exe, vmwp.exe, svchost.exe, TeamViewer.exe, explorer.exe",
  "PROCESS_TO_KILL": "sql, oracle, ocssd, dbsnmp, synctime, agntsvc, isqlplussvc, xfssvccon, mydesktopservice, ocautoupds, encsvc, firefox, tbirdconfig, mydesktopqos, ocomm, dbeng50, sqbcoreservice, excel, infopath, msaccess, mspub, onenote, outlook, powerpnt, steam, thebat, thunderbird, visio, winword, wordpad, notepad",
  "SERVICE_TO_KILL": "vss, sql, svc$, memtas, mepocs, sophos, veeam, backup, GxVss, GxBlr, GxFWD, GxCVD, GxCIMgr",
  "C2_URL": "securebestapp20.com, temisleyes.com",
  "THREAT_STRING": "All of your files are encrypted! \r\n  \r\n Find %s and Follow Instructions!",
  "RANSOM_NOTE": "----------- [ Welcome to DarkSide ] -------------> \r\n  \r\n What happend? \r\n ---------------------------------------------- \r\n Your computers and servers are encrypted, backups are deleted. We use strong encryption algorithms, so you cannot decrypt your data. \r\n But you can restore everything by purchasing a special program from us - universal decryptor. This program will restore all your network. \r\n Follow our instructions below and you will recover all your data. \r\n  \r\n What guarantees? \r\n ---------------------------------------------- \r\n We value our reputation. If we do not do our work and liabilities, nobody will pay us. This is not in our interests. \r\n All our decryption software is perfectly tested and will decrypt your data. We will also provide support in case of problems. \r\n We guarantee to decrypt one file for free. Go to the site and contact us. \r\n  \r\n How to get access on website?  \r\n ---------------------------------------------- \r\n Using a TOR browser: \r\n 1) Download and install TOR browser from this site: https://torproject.org/ \r\n 2) Open our website: http://darksidfqzcuhtk2.onion/CZEX8E0GR0AO4ASUCJE1K824OKJA1G24B8B3G0P84LJTTE7W8EC86JBE7NBXLMRT \r\n  \r\n When you open our website, put the following data in the input form: \r\n Key: \r\n  \r\n 0kZdK3HQhsAkUtvRl41QkOdpJvzcWnCrBjjgg5U4zfuWeTnZR5Ssjd3QLHpmbjxjo7uWzKbt8qPVuYN38TsDPI3bemd5I40ksemIzuI5OhIHZsi9cn3Wpd7OUT72FP9MyAUzR586yMsI2Ygri9in0Bf4EkG0pmBOLyRG1T788foGJQW1WxS1Qd2sMVvX0jKlbGG1zLp7g0u6buDCzSMyTjWjuVzJYufBBv7S2XvciEVvboiTNbZA4UUU6PttKERQSb018aILd6xO3ulk6fbEgZDO5tZSGn2zRevn5YXnHtg6vt1ToLe3izQOgYbs8Ja1fkfJBUYVux1ITyWBjpn0xPayKfwln8SqgMkbqiDyxEDEtFhqiffLcONMhi4TmW50loZIC6mWSaOjThWp6XSJUWPtY8Mkzs8Cs0qjPahx58iAEVIRGUVpLkMs7xPN7ydZ6wMWaOcRC1AD1JEUVTjLikXXyckgYaS6FnEv0UNEsv6QbTLSpDomIg3rEYZBib6ozrwH5n0M5wrKo8NciUBmfJWDP4XKkjznpsa05rEpuAklM0dMmZsYGVR \r\n  \r\n !!! DANGER !!! \r\n DO NOT MODIFY or try to RECOVER any files yourself. We WILL NOT be able to RESTORE them.  \r\n !!! DANGER !!!"
}

Повышение привилегий

После экспорта конфигурации вредоносная программа затем проверяет, есть ли у нее права администратора, вызывая IsUserAnAdmin. Если пользователь не является администратором, она выполняет проверку информации токена пользователя, чтобы убедиться, что у его токена первое значение субавторитета равно SECURITY_BUILTIN_DOMAIN_RID и второе значение субавторитета равно DOMAIN_ALIAS_RID_ADMINS.

Darkside15.png


Эта проверка необходима для следующего шага, когда Darkside выполняет повышение UAC, чтобы перезапустить себя с более высокими привилегиями. Это старый трюк с повышением прав для выполнения обхода UAC через COM-интерфейс ICMLuaUtil. У Microsoft есть отличная документация по этому поводу здесь.

Обход выполняется, только если UAC_ELEVATION_FLAG в конфигурации установлен в 1.

Darkside16.png


Эта функция выполняет CoGetObject с именем объекта Elevation:Administrator!New: {3E5FC7F9-9A51-4367-9063-A120244FBEC7}.

Проверив с помощью редактора реестра, мы видим, что этот CLSID принадлежит cmstplua.dll в system32, а CoGetObject получит интерфейс ICMLuaUtil с учетными данными администратора.

Darkside18.png


Используя этот интерфейс, Darkside вызывает функцию интерфейса ShellExec, чтобы снова запустить вредоносную программу с обновленными привилегиями.

Darkside17.png


Изменение привилегии токена

Если AdjustTokenPrivileges_FLAG установлен в 1 в конфигурации, Darkside получит токен текущего процесса через OpenProcessToken и изменит привилегию на SE_PRIVILEGE_ENABLED, чтобы активировать привилегию токена.

Darkside19.png


Импернасолизация контекста безопасности

Если возможно, Darkside пытается заставить свой процесс имитировать контекст безопасности вошедшего в систему пользователя.

Во-первых, он проверяет, есть ли у вошедшего в систему пользователя учетная запись с указанным доменным именем NT AUTHORITY, AUTORITE NT или NT-AUTORITE. Это делается путем вызова GetTokenInformation для получения SID пользователя, а затем LookupAccountSidW для поиска указанного доменного имени.

Darkside20.png


Если токен пользователя имеет NT AUTHORITY, Darkside затем извлекает токен пользователя, вызывая WTSGetActiveConsoleSessionId и WTSQueryUserToken.

Darkside21.png


Darkside хранит этот токен в памяти и вызывает ImpersonateLoggedOnUser при шифровании файла.

Контрольная сумма GUID

Darkside сначала имеет функцию для выполнения хеширования CRC32 и операций XOR. Эта функция использует 0xDEADBEEF в качестве первого значения CRC32 и выполняет операции XOR с большим двоичным объектом данных между ними.

Darkside22.png


Чтобы сгенерировать контрольную сумму жертвы с использованием ее GUID, Darkside выполняет 4 цикла этой функции на машины жертвы. Он также имеет функцию для преобразования окончательной контрольной суммы из байтов в форму шестнадцатеричной строки.


Darkside23.png


Журнал логов


Если LOGGING_FLAG в конфигурации установлен на 1, программа-вымогатель начнет регистрировать каждую операцию в файле журнала.

Сначала он генерирует имя файла журнала, форматируя контрольную сумму GUID в LOG% s.TXT.

Darkside24.png


Затем Darkside создает файл журнала в той же папке, что и исполняемый файл вредоносной программы, используя GetModuleFileNameW и CreateFileW.

Darkside25.png


Файл README о выкупе

Если для параметра RANSOM_NOTE_FLAG в конфигурации установлено значение 1, программа-вымогатель сгенерирует имя файла README. Этот файл с запиской о выкупе внутри будет помещен в каждый зашифрованный каталог.

Имя файла README генерируется путем форматирования контрольной суммы GUID в README% s.TXT.

Darkside26.png


Параметры командной строки

Darkside может принимать параметры командной строки -path и имя каталога. Это можно использовать для специального шифрования выбранного каталога с помощью обычного шифрования.

Darkside27.png


Если -path не указан, но вместо этого параметр представляет собой имя файла, вредоносная программа шифрует только этот конкретный файл.

Darkside28.png


В случае, когда путь к папке/файлу в параметре является ссылкой (.lnk), Darkside вызывает функцию, чтобы найти полный путь к папке/файлу по этой ссылке.

Эта функция использует CoCreateInstance с CLSID {00021401-0000-0000-C000-000000000046} для запроса интерфейса из windows.storage.dll.

Вероятно, он использует интерфейсы IStorageFolderHandleAccess и IStorageFileHandleAccess для извлечения полного пути из ссылки, но я не уверен в этом.

Я плохо разбираюсь в COM-объектах, поэтому, если кто-нибудь понимает, как это работает, свяжитесь со мной!

Darkside30.png


Одноразовый мьютекс

Если BUILD_MUTEX_FLAG в конфигурации установлен в 1, программа-вымогатель построит строку мьютекса для однократного выполнения. Вызывая OpenMutex на мьютексе, она может проверить, что в любой момент времени работает только один экземпляр Darkside.

Функция для создания этого мьютекса сначала извлекает текущий путь к файлу вредоносной программы и считывает содержимое файла в буфер кучи с помощью GetModuleFileNameW, CreateFileW, GetFileSize и ReadFile.

Затем вычисляется контрольная сумма файлового буфера путем прохождения одного цикла функции CRC32_checksum_generator.

Строка мьютекса расшифровывается с помощью decrypt_large_buffer и добавляется в строку Global\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Затем все символы «X» в строке заменяются шестнадцатеричной строкой контрольной суммы файлового буфера.

Часть Global означает, что мьютекс виден во всех сеансах терминального сервера.

Darkside28 (1).png


Шифрование одного файла/папки

Поскольку функция шифрования отдельного файла/папки используется только тогда, когда указаны параметры, она, скорее всего, предназначена только для целей тестирования. Следовательно, эта функция не слишком сложна.

Во-первых, она проверяет, установлен ли CHECK_RUSSIAN_COMP_FLAG в 1 в конфигурации. Если да, то она переходит к проверке, является ли язык компьютера жертвы русским, анализируя выходные данные GetUserDefaultLangID и GetSystemDefaultUILanguage.

Если язык компьютера русский, он немедленно закрывается. Я не думаю, что мне нужно вдаваться в подробности о том, почему здесь находится этот блок кода ;).

Darkside31.png


I. Шифрование пуи UNC

Затем он проверяет, является ли путь к файлу путем к серверу UNC, вызывая PathIsUNCServerW. Если это так, вызывается функция шифрования UNC. В этой функции Darkside перечисляет все сети, совместно используемые с помощью NetShareEnum, строит для каждого действительный сетевой путь UNC и вызывает функцию main_encryption для их шифрования.

Darkside32.png


II. Шифрование нормального путь

Если путь не ведет к серверу UNC, Darkside построит действительный путь соответствующим образом, проверив, является ли путь сетевым путем, путем к смонтированному сетевому диску или просто обычным путем в системе.

Darkside33.png


Вот что входит в файл журнала, если LOGGING_FLAG равен 1.

Darkside34.png


Перед вызовом функции main_encryption для шифрования этого окончательного пути Darkside попытается вызвать ImpersonateLoggedOnUser (USER_TOKEN), если у него есть NT AUTHORITY для имперсонализации пользователя при выполнении шифрования файла.

Полное шифрование

Если параметры командной строки не указаны, Darkside выполнит полное шифрование на машине жертвы, что включает в себя множество других операций, таких как соединение с сервером C2, удаление теневых копий, завершение процессов и служб,…

Эта функция также имеет такой же блок кода для проверки русского языка на компьютере жертвы.

I. Подключение к C2 и отправка информации о жертвах

Если для параметра CONFIG_C2_URL_FLAG установлено значение 1 и в конфигурации указан URL-адрес C2, он отправит информацию об ОС жертвы на сервер C2.

Функция извлечения информации об ОС пользователя использует такие функции, как GetUserNameW, GetComputerNameW, MachinePreferredUILanguage, чтобы найти эту информацию.

Darkside35.png


После извлечения всего он запишет все данные в строковом формате в эту форму JSON.

JSON:
"os":{
  "lang":"en-US",
  "username":"cdong49",
  "hostname":"DESKTOP-739L404",
  "domain":"WORKGROUP",
  "os_type":"windows",
  "os_version":"Windows 10 Education N",
  "os_arch":"x64",
  "disks":"C:69/99",
  "id":"c46289476b8ceea97117"
}

Затем он создаст строку-обертку, чтобы включить версию вредоносного ПО и UID жертвы с этой информацией об ОС.

Darkside36.png


Окончательная строка будет в такой форме JSON.

JSON:
{
  "bot":{
    "ver":"1.8.6.2",
    "uid":"060108efb510c98"
  },
  "os":{
    "lang":"en-US",
    "username":"cdong49",
    "hostname":"DESKTOP-739L404",
    "domain":"WORKGROUP",
    "os_type":"windows",
    "os_version":"Windows 10 Education N",
    "os_arch":"x64",
    "disks":
    "C:69/99",
    "id":"c46289476b8ceea97117"
  }

Эта строка будет хеширована функцией ручного хеширования. Опять же, я не стал разбираться в этом, потому что это всего лишь функция хеширования. Она нужна только для того, чтобы убедиться, что информация не отправляется в виде открытого текста.

Darkside37.png


Хешированная информационная строка и UID жертвы затем записываются в эту строку формата, которая позже используется в качестве содержимого сетевого пакета для отправки на C2.

random_num1=hash(information_string)&random_num2=victim_UID

Darkside38.png


На этом этапе Darkside использует InternetOpenW и InternetConnectW, чтобы открыть дескриптор Интернет-приложения Firefox/80.0 и подключиться к серверу C2 через порт 443.

Darkside39.png


После установления соединения Darkside отправляет запрос POST на C2 с помощью HttpOpenRequestW, расшифровывает заголовок HTTP, устанавливает параметры Интернета с помощью InternetSetOptionW и, наконец, отправляет пакет с созданным выше буфером содержимого.

Darkside40.png


Наконец, Darkside вызывает HttpQueryInfoW, чтобы запросить код состояния и проверить, успешно ли отправлен пакет.

II. Очистка корзины

Если WIPE_RECYCLE_BIN_FLAG в конфигурации установлен в 1 и текущий процесс запущен как ADMIN, Darkside попытается стереть все папки корзины, которые он может найти на дисках машины.

Во-первых, чтобы найти папку корзины на заданном пути к диску, функция итеративно вызывает FindFirstFileExW и FindNextFileW, чтобы найти папку, содержащую «* recycle *» в своем имени.

Darkside41.png


Найдя путь к корзине, Darkside перебирает каждый каталог внутри и вызывает рекурсивную функцию, чтобы полностью очистить ее.

Darkside42.png


Рекурсивная функция довольно проста. Она использует FindFirstFileExW и FindNextFileW для поиска файлов и папок внутри. Если она находит файл, он вызывает DeleteFileW для его удаления. Если она находит папку, она снова рекурсивно вызывает себя, чтобы удалить содержимое папки, и вызывает RemoveDirectoryW для его удаления.

Darkside43.png


III. Удаление теневых копий

Если DELETE_SHADOW_COPIES_FLAG в конфигурации установлен в 1, Darkside попытается удалить все теневые копии в системе. Есть две разные функции для решения этой задачи в зависимости от системной архитектуры машины.

Если машина является 64-битной машиной Windows, она расшифровывает команду CMD и выполняет ее с помощью CreateProcessW.

Darkside44.png


Ниже представлена расшифрованная команда CMD.

powershell -ep bypass -c "(0..61)|%{$s+=[char][byte]('0x'+'4765742D576D694F626A6563742057696E33325F536861646F77636F7079207C20466F72456163682D4F626A656374207B245F2E44656C65746528293B7D20'.Substring(2*$_,2))};iex $s"

Эта команда выполняет 61 цикл, извлекает 2 символа за раз, преобразует их в байт и преобразует этот байт в символ ASCII.

Декодирование этой строки приведет к созданию этой команды Powershell, которая получает каждый объект Win32_Shadowcopy в системе и удаляет его.

Get-WmiObject Win32_Shadowcopy | ForEach-Object {$_.Delete();}

Если машина представляет собой 32-битную машину с Windows, все обстоит немного лучше.

Darkside вызовет CoInitializeEx, CoInitializeSecurity и CoCreateInstance для создания единого объекта класса IWbemLocator с указанным CLSID {4590F811-1D3A-11D0-891F-00AA004B2E24} для запроса из wbemprox.dll.

Используя объект IWbemLocator, Darkside вызывает функцию ConnectServer для подключения к локальному пространству имен «root/cimv2» и получает указатель на объект IWbemServices.

Darkside45.png


С помощью этого объекта IWbemServices Darkside выполняет SQL-запрос SELECT * FROM Win32_ShadowCopy для получения перечислителя всех теневых копий на локальном сервере.

Затем Darkside перебирает каждый из объектов теневой копии, получает его идентификатор и вызывает функцию объекта DeleteInstance, чтобы удалить себя.

В конечном итоге это приведет к удалению всех областей хранения теневых копий на компьютере.

Darkside46.png


IV. Убийство целевых сервисов

Если SERVICE_TO_KILL_FLAG в конфигурации установлен в 1, Darkside пройдёт через все службы на машине и уничтожит любую службу, которая находится в списке SERVICE_TO_KILL конфигурации.

Это делается путем вызова OpenSCManagerW для открытия диспетчера управления службами и EnumServicesStatusExW для перечисления всех служб со статусом SERVICE_WIN32.

Darkside47.png


Darkside итеративно просматривает эти службы и проверяет, существует ли каждая в списке SERVICE_TO_KILL. Если это так, то служба останавливается и удаляется с помощью вызовов ControlService и DeleteService.

Darkside48.png


IV. Убийство целевых процессов

Если PROCESS_TO_KILL_FLAG в конфигурации установлен в 1, Darkside пройдёт через все процессы на машине и завершит любой процесс, который находится в списке PROCESS_TO_KILL конфигурации.

Это делается путем вызова NtQuerySystemInformation для запроса массива структур SYSTEM_PROCESS_INFORMATION, каждая из которых содержит имя процесса.

Darkside итеративно перебирает эти процессы и проверяет, существует ли каждый из них в PROCESS_TO_KILL. Если это так, то процесс завершается с помощью TerminateProcess.

Darkside49.png


V. Шифрование всех локальных дисков

Если ENCRYPT_ALL_DRIVES_FLAG в конфигурации установлен в 1, Darkside будет проходить цикл через все диски с типом диска DRIVE_FIXED, DRIVE_REMOVABLE или DRIVE_REMOTE в системе. Затем он создает соответствующий путь к папке для каждого диска и вызывает main_encryption.

Darkside50.png


VI. Шифрование общих папок

Если ENCRYPT_NET_SHARED_RESOURCE_FLAG в конфигурации установлен в 1, Darkside попытается получить все пути к общим папкам в сети и зашифровать их с помощью main_encryption.

Во-первых, он вызывает функцию для извлечения всех адресов сетевых узлов с двумя подфункциями.

Первая подфункция вызывает GetAdaptersInfo и inet_addr для извлечения адресов других хостов в сети. Затем он вызывает вторую подфункцию и предоставляет эти адреса в качестве параметра.

Darkside52.png


Вторая подфункция запускает потоки с помощью CreateThread для вызова SendARP и gethostbyaddr для поиска имен других хостов в сети по их адресам.

Darkside51.png


После нахождения всех имен хостов и помещения их в глобальный массив Darkside вызывает NetShareEnum для перечисления всех сетевых общих папок, строит соответствующие сетевые пути и вызывает main_encryption для их шифрования.

Darkside53.png


VII. Отправка статистики шифрования сервера C2

После завершения шифрования и если CONFIG_C2_URL_FLAG установлен в 1 в конфигурации, Darkside отправит серверу C2 окончательную статистику шифрования.

Сначала он расшифровывает строку формата для этого пакета и начинает записывать идентификатор жертвы, UID, количество зашифрованных файлов, размер шифрования, количество пропущенных файлов и прошедшее время в эту строку формата.

Затем он использует эту отформатированную строку в качестве буфера для вызова описанной здесь функции.

Darkside54.png


Основное шифрование

Наконец-то мы подошли к самой пикантной части программы-вымогателя - основной функции шифрования! Это довольно сложная функция, поэтому я снова разделю свой анализ на части.

I. Начальные операции

Перед началом шифрования вредоносная программа проверяет, есть ли в системе минимум 0x6400000 байт или 100 МБ свободного места. Это пространство необходимо для размещения записки о выкупе в каждом каталоге, а также потому, что шифрование также увеличивает каждый файл на установленное количество байт.

Darkside55.png


Если CONFIG_C2_URL_FLAG в конфигурации установлен в 1, Darkside также начинает записывать время начала шифрования, вызывая GetTickCount.

Darkside56.png


II. Создание рабочих потоков

Darkside использует многопоточность с портом завершения ввода-вывода для связи между основным потоком и рабочими потоками и ускорения шифрования. Потенциально это может быть действительно хорошо, но, к сожалению, есть один недостаток дизайна, который замедляет весь процесс.

Во-первых, Darkside создает 2 порта завершения ввода-вывода, вызывая CreateIoCompletionPort, которые используются основным потоком для отправки данных файла для шифрования рабочим потокам.

Затем он порождает заданное количество потоков в зависимости от количества процессоров в системе. Он будет порождать 2 потока для каждого подсчета процессоров, но это максимальное количество потоков составляет 64, даже если процессоров больше 32.

Darkside58.png


Лучше всего иметь один поток на процессор, но поскольку многопоточность Darkside не максимизирует вычислительную мощность системы, это не имеет большого значения.

Каждый из этих потоков добавляется в глобальный массив потоков, чтобы сделать очистку более организованной, путем вызова WaitForMultipleObjects с массивом в качестве параметра.

III. Рекурсивный обход каталогов

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

Во-первых, в рекурсивной функции основной поток вызывает SetEntriesInAclW и SetNamedSecurityInfoW для доступа/аудита информации управления и безопасности обрабатываемого каталога. Ниже приведена жестко запрограммированная структура EXPLICIT_ACCESS_W с новой информацией о безопасности и доступе.

Darkside59.png


Затем, если RANSOM_NOTE_FLAG в конфигурации установлен на 1, Darkside поместит записку о выкупе в обработанный каталог, используя эту функцию.

Darkside60.png


После этого идут проверки файлов/каталогов. Во-первых, чтобы начать вызов FindFirstFileExW в текущем каталоге, он должен добавить символы «\\ *» в конец имени каталога. По мере того как он просматривает папку в поисках подкаталогов и файлов с помощью FindNextFileW, он сначала проверяет, чтобы избежать двух имен каталогов «.» и «.. », которые ссылаются на текущий каталог и родительский каталог. Эти два каталога могут привести к тому, что программа войдет в бесконечную рекурсию, если вредоносная программа не избежит их.

Он также проверяет атрибут файла, чтобы избежать подкаталогов/файлов с атрибутом FILE_ATTRIBUTE_ENCRYPTED.

После этих проверок, если текущий путь указывает на каталог и DIRECTORY_TO_AVOID_FLAG установлен в 1, то выполняется еще одна проверка, чтобы убедиться, что имя подпапки отсутствует в списке DIRECTORY_TO_AVOID.

После завершения всех проверок путь к его подкаталогу передается в качестве параметра рекурсивной функции.

Рекурсивная функция вызывается при обнаружении папки для обхода всех ее подпапок.

Darkside61.png


Если текущий путь указывает на файл, Darkside проверяет следующее:

- Если имя файла не является файлом README.
- Если его расширение не .TXT.
- Если его содержимое не является запиской о выкупе (путем сравнения хэшей файлов CRC32).
- Если FILE_TO_AVOID_FLAG равен 1 и имя файла отсутствует в CONFIG_FILE_TO_AVOID.
- Если FILE_EXTENSION_TO_AVOID_FLAG равен 1, а расширение файла отсутствует в FILE_EXTENSION_TO_AVOID.


Если все это правда, Darkside продолжит обработку файла.

Если SQL_SQL_LITE_FLAG равен 1, а имя файла находится в SQL_STRING, он устанавливает ENCRYPTION_MODE на полное шифрование.

Darkside62.png


После проверки файла основной поток Darkside начинает обработку и отправляет данные файла рабочим потокам.

IV. Проверка, зашифрован ли файл

Во-первых, путь к файлу правильно фиксируется, и вызывается подфункция, чтобы проверить, был ли файл зашифрован или нет. Эта проверка выполняется путем считывания последних байтов 0x90 в буфер кучи и генерации контрольной суммы для первых байтов 0x80 с помощью CRC32_checksum_generator. Эта контрольная сумма сравнивается с последними 0x10 байтами буфера, и если они совпадают, это означает, что файл зашифрован.

Это также дает нам подсказку, что после шифрования к концу каждого файла добавляется большой двоичный объект с зашифрованной матрицей Salsa в качестве первых 0x80 байтов и контрольной суммы ключа в качестве последних 0x10 байтов.

Darkside63.png


V. Завершить процесс, использующий файл

Если PROCESS_TO_AVOID_FLAG установлен в 1 в конфигурации, Darkside вызывает функцию, чтобы найти и закрыть другой процесс, который в настоящее время использует файл.

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

Darkside64.png


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

Darkside65.png


VI. Создание зашифрованное имя файла

Имя файла копируется в новый буфер, а контрольная сумма GUID добавляется в конец имени файла. Этот буфер позже используется в качестве зашифрованного имени файла, поэтому Darkside снова пытается завершить любой процесс, использующий этот файл.

Darkside66.png


VII. Отправка файловых данных в рабочие потоки

Darkside делает 2 вызова CreateIoCompletionPort для создания портов завершения ввода-вывода, связанных с дескриптором зашифрованного файла.

Darkside67.png


Затем он создает буфер для добавления необходимых данных для отправки рабочим потокам с использованием этих портов завершения ввода-вывода.

Важные данные включают информацию, связанную с файлом, такую как ENCRYPTION_MODE, дескриптор файла и размер файла.

Буфер также включает в себя матрицу Salsa20, ее зашифрованную версию RSA-1024 и контрольную сумму зашифрованного ключа.

Когда этот буфер ввода-вывода готов, он отправляется рабочим потокам с помощью вызовов PostQueuedCompletionStatus.

Darkside68.png


VIII. Salsa20 и генерация матрицы


Darkside делает несколько вызовов RtlRandomEx для создания 64-байтового буфера.

Darkside69.png

Причина, по которой этот буфер не является ключом Salsa20, заключается в том, что он слишком длинный (обычно ключ Salsa20 имеет длину не более 32 байтов) и потому, что Darkside фактически изменяет свою реализацию Salsa20, чтобы не использовать какой-либо ключ.

Обычно для генерации этой матрицы начального состояния Salsa20 требуется пара ключей-одноразовых ключей.

Darkside70.png

Однако Darkside полностью пропускает этот шаг и использует случайно сгенерированный буфер в качестве своей матрицы Salsa20.

Это не влияет на результат шифрования Salsa20, поскольку в конечном итоге это XOR-шифр. Чтобы расшифровать файл, им просто нужно иметь доступ к этому случайному буферу и использовать его в качестве матрицы Salsa20.

IX. Шифрование RSA-1024

Специальная реализация RSA-1024 Darkside используется для шифрования матрицы Salsa20 перед добавлением ее в конец зашифрованного файла.

Открытый ключ RSA-1024 встроен в зашифрованные конфигурации Darkside и разделен на две части.

Первая - это показатель степени RSA-1024 с прямым порядком байтов, и я не знаю почему. Поскольку автор вручную написал эту реализацию RSA-1024, я думаю, это облегчит им задачу?

Вторая - это модуль RSA-1024.

Darkside71.png
 
Ниже представлена часть функции шифрования RSA-1024.

Darkside72.png


Легко понять, что это шифрование RSA-1024 с математическими функциями. Обратите внимание, что показатель степени RSA-1024 читается спереди назад с помощью операции AND, которая говорит нам, что она имеет прямой порядок байтов.

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

Darkside73.png


Для умножения она каждый раз поворачивает B влево на 1 и добавляет A к результату, если после поворота нет переноса.

Для модуля функция продолжает вычитать N из результата до тех пор, пока не получит перенос (вычитание дает отрицательное число), которое затем добавляет N обратно в результат.

Функции сложения/вычитания больших чисел также говорят нам, что результат шифрования RSA-1024 также имеет прямой порядок байтов, поскольку операции выполняются от самого низкого индекса до самого высокого для каждого числа.

Darkside74.png


X. Рабочие потоки ввода-вывода

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

Потоки постоянно вызывают GetQueuedCompletionStatus на своем собственном порту завершения ввода-вывода, пока они не получат большой двоичный объект, содержащий информацию о файле из основного потока.

Darkside75.png

Вот самые важные смещения в файле.

- 0x5: минимальное текущее смещение файла
- 0x6: максимальное смещение текущего файла

- 0x7: количество байтов для перехода к следующему блоку в зависимости от ENCRYPTION_MODE (0x80000 для FULL, -1 для FAST и динамически изменяется в зависимости от размера файла для AUTO)

- 0x9: количество раз, чтобы начать шифрование 0x80000 байт
- 0xB: дескриптор файла
- 0xC: состояние шифрования
- 0x2d: размер файла
- 0xD: случайная матрица Salsa20
- 0x1D: RSA_1024 (Salsa20_matrix)
- 0x3d: CRC32_checksum_generator (RSA_1024 (Salsa20_matrix))
- 0x41: файловый буфер

Получив это, функция проверяет байт в по смещению 0xC, чтобы определить между 4 состояниями шифрования.

Состояние предварительного шифрования возникает, когда blob 0xc] равен 0, и поток просто вызывает ReadFile для чтения 0x80000 байтов из текущего смещения файла в буфер файла. Затем функция устанавливает для blob[0xc] значение 1 для перехода в состояние шифрования. Если функция достигает EOF и номер последней ошибки - ERROR_HANDLE_EOF, поток переходит в состояние пост-шифрования.

Darkside76.png


Состояние шифрования возникает, когда blob[0xc] равен 1, и поток будет шифровать файловый буфер, как правило, с помощью Salsa20. Darkside шифрует по одному блоку размером 0x80000 байт за раз и сразу после этого переходит к следующему блоку. Если blob [0x7] не равен -1, он перейдет к следующему блобу, добавив blob[0x7] к текущему смещению файла. Это сделано для того, чтобы пропустить части шифрования файла, когда он слишком велик. Если blob[0x7] равен -1, состояние шифрования изменяется на состояние пост-шифрования. Затем зашифрованный файловый буфер записывается обратно в файл с помощью WriteFile, и поток возвращается в состояние предварительного шифрования с обновленным смещением файла.

Darkside77.png


Состояние пост-шифрования возникает, когда blob[0xc] равен 2. В этом состоянии зашифрованная матрица Salsa20 и ее контрольная сумма записываются в конец файла с помощью WriteFile. После этой операции поток переходит в состояние очистки.

Darkside78.png


Состояние очистки происходит, когда blob[0xc] равен 4. Поток просто закрывает дескриптор файла и возвращается к вызову GetQueuedCompletionStatus, чтобы получить новый файловый блоб.

Darkside79.png


Самоуничтожение

В конце программы, если SELF_DELETE_FLAG установлен в 1 в конфигурации, Darkside выполнит команду для удаления самого себя.

Во-первых, Darkside получает короткий путь к текущему исполняемому файлу вредоносной программы, вызывая GetModuleFileNameW и GetShortPathNameW.

Darkside расшифровывает имя переменной среды «ComSpec» и использует его для получения пути к CMD.EXE.

Наконец, он вызывает ShellExecuteW для выполнения этой команды:

CMD.EXE /C DEL /F /Q short_malware_path >> NUL

Эта команда CMD.EXE выполняет команду DEL. Флаг /F включает автозаполнение введенных имен путей, что необходимо для расширения короткого пути до полного пути. /Q просто отключает эхо для скрытности!

Darkside80.png

Обсуждение скорости шифрования Darkside

Darkside использует уникальную комбинацию многопоточности и рекурсивного обхода файлов для поиска и шифрования файлов.

Однако его скорость не так впечатляет из-за использования рекурсии.

Darkside81.png


Мы ясно видим, что скорости шифрования Darkside явно не хватает, поскольку он не использует 100% ЦП жертвы.

Это потому, что Darkside страдает от нехватки потоков. Каждый рабочий поток может выполнять блок кода шифрования относительно быстро, но некоторые из них не работают в основном потоке и никогда не получают возможности выполнить работу.

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

Истощение возникает, когда основной поток не может проходить и отправлять файлы достаточно быстро, в то время как получающие потоки уже завершают свою работу. Следовательно, если основной поток не имеет постоянной пропускной способности 32 файла, отправляемых на порты завершения ввода-вывода в любой заданный момент времени, какой-то поток определенно будет испытывать нехватку ресурсов, и ЦП не будет полностью задействован.

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

Такая конструкция в конечном итоге сводит на нет цель использования многопоточности и порта завершения ввода-вывода.
rule DarksideRansomware1_8_6_2 {
meta:
description = "YARA rule for Darkside v1.8.6.2"
reference = "http://chuongdong.com/reverse engineering/2021/05/06/DarksideRansomware/"
author = "@cPeterr"
tlp = "white"
strings:
$hash_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
$gen_key_buff = {89 54 0E 0C 89 44 0E 08 89 5C 0E 04 89 3C 0E 81 EA 10 10 10 10 2D 10 10 10 10 81 EB 10 10 10 10 81 EF 10 10 10 10 83 E9 10 79 D5}
$dyn_api_resolve = {FF 76 FC 56 E8 91 FE FF FF 56 E8 ?? 69 00 00 8B D8 FF 76 FC 56 E8 85 FB FF FF 8B 46 FC 8D 34 06 B9 23 00 00 00 E8 5E 02 00 00 AD}
$get_config_len = {81 3C 18 DE AD BE EF 75 02 EB 03 40 EB F2}
$RSA_1024_add_big_num = {8B 06 8B 5E 04 8B 4E 08 8B 56 0C 11 07 11 5F 04 11 4F 08 11 57 0C}
$CRC32_checksum = {FF 75 0C FF 75 08 68 EF BE AD DE FF 15 ?? ?? ?? 00 FF 75 0C FF 75 08 50 FF 15 ?? ?? ?? 00 31 07 FF 75 0C FF 75 08 50 FF 15 ?? ?? ?? 00 }
condition:
all of them
}

Использованная литература:


Screenshot_2.png


Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://chuongdong.com/reverse engineering/2021/05/06/DarksideRansomware/
 
Последнее редактирование:
Люди, можете мне на пальцах объяснить что за Салса такая двадцать и Чача?

Screenshot_3.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Люди, можете мне на пальцах объяснить что за Салса такая двадцать и Чача?
Статью пока не читал, но Сальса-20 и Чача из одного семейства поточных алгоритмов шифрования. Особых преимуществ в сравнении со стандартами типа AES и ГОСТ я не в курсе, только побыстрее работает, наверное (типа его можно распараллелить на несколько ядер).
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Разве Чача потоковая? Или я что-то путаю?
Пришлось на википедию слазить, чтобы уточнить, ничего ли я не попутал: "Salsa20 and the closely related ChaCha are stream ciphers developed by Daniel J. Bernstein...", но вроде ничего не попутал.
 
Но автор, по ходу, в каком-то параллельном мире живёт, где в сутках 72 часа
Ага, Китай называется. Они везде так.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну я прочел... многие вещи перекликаются с его анализом Revil: https://web.archive.org/web/2021071...verse engineering/2021/07/11/REvilRansomware/ - конечно, и от первого и от второго анализа ожидал хоть какого-то рокетсаенса (все-таки эти вещи зарабатывают колоссальные деньги в сравнении с другой малварью), но толком ничего прям интересного не увидел. Видимо, просто вся ИБ индустрия (и аверы в частности) решили посвятить всех себя сосанию рансомварного хера. Как такие на первый взгяд топорные вещи до сих пор работают и не палятся - ума не приложу.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Это вроде старая версия. Последняя, помниться, у них мультипроцессорная была.
 
ТСу спасибо!
Но автор, по ходу, в каком-то параллельном мире живёт, где в сутках 72 часа - иначе откуда он берёт столько времени на анализ и публикацию всякого.
Ну смотри, он же студент, пол дня на парах, пол дня дома, задрачивает ИДУ, работать не надо, родители платят за учебу и т.д. Только кто-то в ДОКУ 2 дрочит а он в ИДЕ сидит. Как говорится каждый дрочит как хочет.
 
Грамотное распределение времени решает. Я, как студент, скажу, что за день поаутировать (хоть часик) можно, даже без особых проблем.
Как студент )). А я как чел, работающий 5-2, скажу что невозможности совмещать основную работу с реверсингом.
 
Задам ещё парочку вопросов, которые мне интересны, потому что я очень далек от криптографии(Да, я так Шнайдера и не прочитал). Почему в Винде применяют метод Салса20+Рса1020, в Линухе Чача20+Рса4096?
 
Вот тут есть список https://en.wikipedia.org/wiki/Stream_cipher . Из всего списка я только знаю по названию RC4. Почему его не применили не применяют? И потоковая это вот что.
Это симметричный шифр, в котором каждый символ открытого текста преобразуется в символ шифрованного текста в зависимости не только от используемого ключа, но и от его расположения в потоке открытого текста. Поточный шифр реализует другой подход к симметричному шифрованию, нежели блочные шифры.

Потоковый шифр, это же не значит что это ХипеТрэдный ?
 
Последнее редактирование:
Ну я прочел... многие вещи перекликаются с его анализом Revil: https://web.archive.org/web/20210713024553/https://chuongdong.com/reverse engineering/2021/07/11/REvilRansomware/ - конечно, и от первого и от второго анализа ожидал хоть какого-то рокетсаенса (все-таки эти вещи зарабатывают колоссальные деньги в сравнении с другой малварью), но толком ничего прям интересного не увидел. Видимо, просто вся ИБ индустрия (и аверы в частности) решили посвятить всех себя сосанию рансомварного хера. Как такие на первый взгяд топорные вещи до сих пор работают и не палятся - ума не приложу.
Рансом ревила, я думаю, взят за основу, а каждый вендор допиливает свою плюшки. Салсу впервый раз впихнули в Петю, или ещё раньше применяли?
 
Приглашаю экспертов-криптологов в тред, чтобы поотвечать на вопросы.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Теперь под видом безобидной научной статьи начинают сорцы этой дряни рансонварной выкладывать, такие темы сносить нужно сразу с форума, и не нужно тут гору скриншотов выкладывать для отвода глаз, админ тут четко сказал что все рансонварщики и их подельники идут на заводы и на нары!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Приглашаю экспертов-криптологов в тред, чтобы поотвечать на вопросы
Спросил бы это у Ревилов или Дарксайда, кто знает, что им там в голову пришло.


Потоковый шифр, это же не значит что это ХипеТрэдный ?
Нет, но Сальса и ЧаЧа может быть распараллелина по ядрам проца, может поэтому они использовали ее, а не AES тот же, наверное, она быстрее, я не в курсе.

Почему его не применили не применяют?
На RC4 вроде были какие-то атаки, то есть не то чтобы очень стойкий, но опять же, может быть, что Сальса и Чача быстрее.

Почему в Винде применяют метод Салса20+Рса1020, в Линухе Чача20+Рса4096?
Сейчас использовать RSA1024 - кринж, надо использовать минимум RSA4096, но опять же, может никому и в голову не придет брутить RSA1024, кто их знает.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пожалуйста, обратите внимание, что пользователь заблокирован
Сейчас использовать RSA1024 - кринж, надо использовать минимум RSA4096, но опять же, может никому и в голову не придет брутить RSA1024, кто их знает.
О! Да вы эксперт в криптографии. Особенно в факторизации больших чисел. ;)
Больше - не значит лучше.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх