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

Статья Ransomware - все по взрослому или оптимизация работы (конкурс 2020)

merdock

X-pert
Эксперт
Регистрация
09.06.2019
Сообщения
335
Реакции
259
WQnhzyO.jpg


Ransomware - все по взрослому или оптимизация работы. merdock для конкурса xss.pro (ex DaMaGeLaB) 2020

1. Вступление
2. Оптимизация вычислительной нагрузки и алгоритма шифрования
3. Оптимизация работы с файловой системой
4. Ошибки в реализациях
5. Выводы
6. Исходники

1. Вступление
Статью пишу второй раз, первую Вы не найдете, так как первую случайно удалил. Данная статья создана на основе опыта и реверса Ransomware, он же шифровальщик (тип зловредного программного обеспечения, предназначен для вымогательства).
Решил поделиться методиками оптимизации данного типа зловреда и ошибками которые многие допускают при их написании. Я не буду разбирать эксплойты, т.к. дыры постоянно закрываются, рассмотрим ядро шифровальщика.
Статья и исходники создана сугубо в познавательных целях, основана на статистических данных собранными мной для исследования и обоснования.

2. Оптимизация вычислительной нагрузки и алгоритма шифрования
Наиболее хорошие результаты показал алгоритм шифрования AES(Advanced Encryption Standard, также известный как Rijndael ), это симметричный алгоритм блочного шифрования.
Среди всех алгоритмов он показал наиболее высокую скорость и криптостойкость, мы будем использовать AES с ключом 256 бит с сцеплением блоков CBC, без использования PKCS7 padding (нам отступы не нужны, так как будут нарушать симметричность данных), без использования хеширования ключа алгоритмом SHA-256 (256 ключ будем сами генерировать и его длинна будет определена заранее), без использования сохранения вектора блоков (вектор рекомендую сохранять с ключом, чтобы усилить криптостойкость и не нарушать симметричность данных).
Чтобы усилить криптостойкость (тут паранойя) я предлагаю использовать гибридный метод, т.е. поверх шифрованных данных будем использовать быстрый симметричный алгоритм шифрования RC4 без блокового сцепления, ключ так же будем хранить вместе с вектором и ключом AES.
Данный подход даст возможность увеличить вариативность против атак подбора ключей и не сильно увеличить нагрузку. Код будет без использования сторонних библиотек, таких как OpenSSL или CryptAPI, это даст надежность (закладки и моя параноя) и независимость, а так же уменьшит шанс runtime детектов антивирусных программ.

Выбор AES был обучловнет по причине того что все современные процессоры поддерживают AES-NI (Intel Advanced Encryption Standard New Instructions) - расширение системы команд микропроцессоров, т.е. эта технология даст возможность без ущерба криптостойкости увеличить скорость шифрования и снизить нагрузку на процессор.

Я написал программу и выложил исходники для сбора статистики и проверки алгоритмов. Суть программы заключается в том чтобы продемонстрировать и показать наиболее эффективный метод шифрования. Методика теста заключается в создании массива случайных данных, их шифрование AES 256 с использованием AES-NI и без, с использованием RC4 и без, на разном количестве данных.
И так приступим.

На скрине мы видим сравнительный тест на длине данных 16кб (эта цифра выбрана не случайно в следующем разделе причины выбора будут объяснены)

x86 без AES-NI img1_86_not_aesni.png
WpMMR8V.png


x64 без AES-NI img1_64_not_aesni.png
5DEuppR.png


x86+AES-NI img1_86_aesni.png
nkJMcma.png


x64+AES-NI img1_64_aesni.png
peYgixy.png


Так же я хотел добавить тесты с использованием GPU, и даже почти написал софт, но нашел статистику проведенную уже другим человеком, из нее видно что шифрование через CPU без AES-NI и чреез GPU на 16кб составляет небольшую раздницу.
img1_GPU_CPU_not_aesni.png
ZSBwMaB.png


Если посмотреть мои тесты то использование CPU с AES-NI 16кб по скорости будет сравнительно с GPU, т.е. использование в шифровальщике GPU не имеет большого смысла. GPU выигрывает только при распараллеливании процессов шифрования файлов, но прирост при сохранении файлов будет потерян.

Выводы тестов показывают, что технология AES-NI дает серьезный прирост в скорости шифрования 3-5 раз, техника не имеет внешних зависимостей, так же на 16кб разница между AES и AES+RC4 не столь существенна.

3. Оптимизация работы с файловой системой
Самым узким местом в реализации шифровальщика становиться файловая система, т.е. жесткий/HDD или твердотельный/SSD диск. Для оптимизации мы будем использовать частичное шифрование с частичной перезаписью файла, именно по этой причине нам был необходим полностью симметричный алгоритм сцеплением блоков, чтобы не менять длину файлов. Для данной техники мы не будем считывать весь файл и не будем его весь сохранять, только начальную часть в размере 16кб (этого достаточно чтобы любой файл потерял целостность и не смог был восстановлен, кроме архивов, их желательно шифровать первые 1-2мб).

Для ускорения работы стоит использовать много поточность поиска, т.е. на каждый диск один поток который ищет файлы и заносит их путь в буфер. Так же используем 16кб шифрования начальных данных файла без его полной перезаписи, 16кб потому что обычно стандартный размер кластера блока записи на диск 4кб, значит нам надо использовать кратную величину.
В тестах на скине мы видим тест скорости работы шифровальщика для заданного диска в одном потоке и в 3х потоках, для SSD и для HDD на реальных носителях в одной системе.

x86 HDD img2_86_hdd.png
0ZjivcU.png


x64 HDD img2_64_hdd.png
pI9BqEI.png


x86 SSD img2_86_ssd.png
RpmIcse.png


x64 SSD img2_64_ssd.png
Vmu2YwN.png


На скинах где используем один поток шифрования и записи данные почти не отличаются от того где используемым три потока.
Как видно из тестов вышее скорость работы с файловой системой при увеличении потоков не сильно отличается (%5 на каждый дополнительный поток, но не более 5), т.е. мы упираемся в ограничения записи (что и следовало ожидать).
Вывод показывают, что нет смысла делать кучу потоков. Оптимальный вариант на каждый диск по потоку поиска и один поток на весь буфер шифрования.

4. Часто встречающиеся ошибки в реализациях
Частые ошибки в реализации шифровальщиков:
- читают, шифруют и записывают файл полностью
- используют недостаточно кислотостойкие алгоритмы
- при поиске не учитывают папки-ссылки и не ограничивают вложенность рекурсии при поиске
- не учитывают юникод в названиях файлов и папок
- не ограничивают буферы для получания полного пути (ос виндовс есть ограничения на длину)
- не используют несколько источников для отсылки ключа(если не оффлайн шифровальщик)
- не используют несколько источников для выкупа ключа (WannaCry использовал почту и ее заблокировали)
- часто используют библиотеки шифрования не учитывая криптостойкость
- не делают балансировку нагрузки (или слишком много потоков или слишком мало)

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

6. Исходники

Использовалось Delphi XE10, будет работать и на других дельфи после мелких изменений

Скрытый контент для зарегистрированных пользователей.
 
Последнее редактирование:
А почему вышло так, что скорость работы на ssd получилась меньше чем на hdd?
Интел в 2008 вместе с aes-ni зафорсили и avx, можно ли тут еще и avx инструкции заюзать, чтобы увеличить скорость?
Как быть если случайно попасть на тачку, на которой нет aes-ni, я не знаю, запустится ли программа, но если запустится, то можно ли в рантайме проверить поддержку aes-ni и как?
Кста, если read\write операции независимы друг от друга на ssd(на hdd я думаю нет, там же головка крутится, но не уверен), то можно по потоку отдельному на запись и чтение замутить, чтобы ускориться.
 
А почему вышло так, что скорость работы на ssd получилась меньше чем на hdd?
Потому что запись на SSD происходит дольше чем на HDD - механика такая, тонкости разъяснять не буду. SSD выигрывает только в скорости чтения, но и это не самый его важный показатель, самый важный - расспаралеивание потоков чтения на физическом уровне, т.е. можно создать кучу потоков на чтение и они одновременно будут работать, на HDD такого быть не может, там грубо говоря одна головка и кэш.

Как быть если случайно попасть на тачку, на которой нет aes-ni, я не знаю, запустится ли программа, но если запустится, то можно ли в рантайме проверить поддержку aes-ni и как?
В представленном софте есть пример проверки и она так же ведется в реальном времени.

Кста, если read\write операции независимы друг от друга на ssd(на hdd я думаю нет, там же головка крутится, но не уверен), то можно по потоку отдельному на запись и чтение замутить, чтобы ускориться.
Это не совсем так, у вас один поток будет набирать данные быстрее или медленней другого, т.е. по итогу общий конец программы по времени будет один и тот же (опять же зависит от типа диска, HDD к примеру считывает и записывает последовательно, головка одна на цилиндр).

Пропустил вопрос
Интел в 2008 вместе с aes-ni зафорсили и avx, можно ли тут еще и avx инструкции заюзать, чтобы увеличить скорость?
Не знаю не изучал данный вопрос, я постарался взять наиболее распространенную на текущий момент технологию, еще есть PADLOCK инструкции от VIA, ее тоже можно добавить. Задача была выбрать наиболее оптимальный алгоритм для обоснованной оптимизации с наименьшими зависимостями и наибольшей распространенностью.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Адекватный форум вроде, зачем так портить его такими пошлыми картинками?
 
Адекватный форум вроде, зачем так портить его такими пошлыми картинками?
Вам не нравятся сиськи? Если да, то этот форум не для вас. А так в статье должно быть все красиво, особенно начало.:cool:
 
Думаю решать это не вам. Лично я полностью согласен сGoodSmile
отдельный респект за дельфи
Я всего лишь выразил свое мнение по данному вопросу. Если человек любит мужскую грудь, то я могу добавить и ее.
 
По желанию. Мы тут все выражаем своё мнения по различным вопросам.
Напомню, человек говорит, что это серьезный форум, и при этом разводит необоснованный флуд в конкурсной статье. Пусть выражает свои мысли по теме, а не по ориентации.
 
Да, я с тобой согласен:
1) разводить тупо флуд в конкорсной статье - это как минимум признак убогостаи
2) Я очень слеп что бы найти где тут где он говорил что-то про орентацию. Вообще кроме как от тебя я ничего не увидел
3) надо быть очень безукарещненым что бы в конкурсной статье не забыть про это голосуйте за меня и я сделаю вашу жизнь веселее!.
Я думаю ты из техлюдей которые ставить себе лайки, и сами себе комментируют фотки, и даже пишут в свой контакт от лица другоо человека. Как ты думаешь, я ошибаюсь?
Конечно не ошибаешься, я никогда не был скромным, не вижу в этом смысла . И скромность никак не коррелирует со знаниями. Но т.к. мы на серьезном форуме то обсуждать мою скромность и то как преподношу материал как то не правильно, важна лишь суть.
 
Суть чего?
Знаний, ведь ради этого мы тут все собрались, не ради обсуждения картинки.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вам не нравятся сиськи? Если да, то этот форум не для вас. А так в статье должно быть все красиво, особенно начало.:cool:
Это информационный портал, а не очередной клон браззерса. Если бы статья была про "Взламываем порно-сайт с помощью уязвимости 0day" , было бы всё понятно. А так, нету ничего общего между картинкой в начале статьи и конкурсом. У меня всё.
 
Это информационный портал, а не очередной клон браззерса. Если бы статья была про "Взламываем порно-сайт с помощью уязвимости 0day" , было бы всё понятно. А так, нету ничего общего между картинкой в начале статьи и конкурсом. У меня всё.
Ты опять флудишь в конкурсной теме? Я тебе дизлайк выпишу именно за это, что бы ты потом опять не спрашивал за что.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Дайте же человеку забрать 5000$ что же вы ему мешайте?
merdock,Не читай их, забирай деньги спокойно
Человек так старается, даже жалко стало немного.
 
Дайте же человеку забрать 5000$ что же вы ему мешайте?
merdock,Не читай их, забирай деньги спокойно
Просто чтобы ты понимал что тут происходит GoodSmile написал конкурсную статью не о чем, т.е. взял чужой софт, чужую микросхему и положил в свою коробочку, я ему об этом намекнул - что это не красиво. Он же пришел сюда и флудит.
 
Ну , на самом деле он не хорошо сделал. очень. Считаю что к конкурсу надо хорошо готовится и должны быть авторские ресерчи, и материал, оформление и потдача. Ведь вы ха это получайте бабки.
Ну а по теме, ну вы оба хороши. Я конечно понимаю, что статья притедент на победу. В смысле конкурсная, и я сам флужу тут что не есть гуд. Но простите меня, не могу не удержаться. Могу сказать одно, я не читал статью. Но уверен она очень интересная и то что тут флуд, быть может изза трафика она попадёт в топ, может не как выиграшная, но как с наиболее большим кол-во постов точно.
Я вот подумал, что было бы не полохо удалить флуд. С другой стороны это может стать историй.
Вообщем парни, не ссортесь, не ведите себя как пидоры, и лучше просто написать статью, не для конкурса, а ради того что бы поделиться мыслими, знаниями. Как вы считайте это хуже ?
Именно эту статью я сделал именно для Конкурса и ни чуть не стесняюсь, потому что обещал сделать что то хорошее и с исходниками. Имею ли я ПРАВО раз за 10 лет сделать статью (из несколько сотен статей) для конкурса на этом форуме? А все очень просто я коплю денюшку на новый автомобиль. И даже если я не выиграю, я не сдамся :D И я считаю не достойным флудить в отместку в чужой теме.
 
Конечно имеешь право. А что тут стесняться, ну написал статью.. Что тут зазаорного может быть. Пожалуйс с другими пунктами тоже соглашуь, слушай, вот последний вопрос. Только честно как на духу, клянчить что бы за тебя проглосовали, что бы ты купил себе новый автомобиль норм? И да, ты там что-то про знания говорил, это всё не правда. Ты же сам знаешь .

Просто я вот такой хреновый шутник, но живу в ладах с собой и очень крепкой психикой.
 
Лан, сарян, я не в праве тебе что-то говорить, темболее подёбывать итд, вообщем, просто скучно мне было. Я попрашу админов удалить мои посты, сарян ещё раз. успехов
Ты забыл, ПОСТАВИТЬ лайк статье!
 
Если я прямо сейчас поставлю лайк, то это быдет несправедливо, ведь я даже не знаю о чем она. Но я даю тебе слово, что после такого как прочитаю, то поставлю лайк. Вне зависимости от того понавиться она мне или нет.
Отмазки не принимаются, картинку посмотрел, тема понравилась, даже повеселила с твоих слов - значит ставь лайк!
 
Для данной техники мы не будем считывать весь файл и не будем его весь сохранять, только начальную часть в размере 16кб (этого достаточно чтобы любой файл потерял целостность и не смог был восстановлен
Этому есть более научно-техническое объяснение или это только предположение? К примеру если там база данных на гигабайты, почему, зашифровав только первые 16кб нельзя будет восстановить данные, что идут дальше?
 
Этому есть более научно-техническое объяснение или это только предположение? К примеру если там база данных на гигабайты, почему, зашифровав только первые 16кб нельзя будет восстановить данные, что идут дальше?
Есть объяснения, все зависит от базы конечно, но большинство баз хранят в хидерах начальную точку "дерева" данных или точки смещения, так же есть еще один ньюанс, как правило вместе с файлом идет индекс файл и его изменение его хидера критично, потому что там идет старт цепи индекса (скажим так я пока не знаю случаев когда смогли восстановить с кандочка)
 


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