Что такое криптор и стаб ?
< Что такое фаззинг? 06.12.2016 00:55 Давность: 5 yrs
Категория: Безопасность
Криптор (aka cryptor) — это тулза, которая предназначена для скрытия троянов, ботов и прочей нечисти от детектирования антивирусами.
Хорошие крипторы работают очень просто, быстро и надёжно, хоть и не безглючно. Они дописывают свой код (в контексте таких крипторов этот код называется стабом) в криптуемую программу и шифруют код самой программы. При запуске первым стартует стаб, он восстанавливает оригинальный код и программа начинает работать. Если криптор свежий (или просто хороший, об этом ниже), то закриптованная программа не будет детектироваться антивирусами.
Чаще всего такие крипторы полиморфны — т.е. код криптора в криптуемой программе каждый раз уникален, заполнен случайными инструкциями и бессмысленными вызовами функций API. Такие крипторы достаточно долго остаются недетектируемыми в силу уникальности каждого закриптованного файла. Такие крипторы тоже со временем детектируются, и если автор не чистит свой продукт, то криптор перестает быть уникальным.
Суть работы плохих крипторов вот в чем — есть стаб. Стаб в этом случае — это отдельная программа, к которой цепляется криптуемый файл. При запуске файл извлекается, расшифровывается и запускается.
Т.е. надеюсь поняли отличия в первом случае шифруется код программы, и стаб расшифровывает уже команды программы, а во втором случае шифруется сам файл программы и расшифровывается тоже сам файл, ну и понятно, что второй тип криптора это не что иное как ерунда, т.к. практически любой антивирусник спалит вирус при расшифровке ! 😉
Некоторые крипторы напрямую файл на диск не пишут, а запускают его из памяти, но это их не оправдывает, т.к. продвинутый антивирус словит это при запуске.
В таких крипторах уникальность каждого закриптованного файла достигается разными стабами. Но такой подход весьма ограничен — в хороших криптах это всего-лишь код, и его можно сгенерировать, а со стабами в плохих крипторах уже сложнее, поэтому авторы чаще всего создают под каждого клиента отдельный стаб. Подход глуп до безобразия, ведь ежели спалится антивирусами один закриптованный файл — за ним полетят и все остальные.
Ну, антивирус, погоди! Создаем EXE-криптор на Python’е — «Хакер»
Содержание статьи
Web мы спасли от антивирусов несколько месяцев назад. Это было нетрудно — область относительно новая, не освоенная. С исполнимыми же файлами антивирусы борются уже десятилетиями. Побороть EXE-модуль будет сложнее, но… мы справимся :).
Выпуск 1. Ознакомительный
Ты уже знаешь, что я считаю антивирусы абсолютно бесполезными — хотя бы по той причине, что они помогают только от самых примитивных зверьков, которые в условиях современного денежного малварьбизнеса встречаются не так часто. Современные злокодеры, подогретые денежными вливаниями, научились программировать довольно жестко, но есть у них одна маленькая проблема — криптовка — достаточно сложная штука, для написания которой нужны глубокие знания PE-формата, ассемблера и системного программирования. Из-за высокого «входного барьера» в этой области мало профессионалов.
И найти хорошего криптора ой как сложно.
Но решение проблемы есть! Как мы знаем, антивирусные компании обмениваются технической информацией и создают специальные ресурсы, посредством которых мы сами отсылаем им сэмплы (типа VirusTotal’а). Но ведь и вирмейкеры тоже могут обмениваться информацией! Необязательно палить приватные мазы — публичные технологии тоже сгодятся. Например, было бы круто, если бы в каком-то одном месте лежали функции для генерации PE-файла, генерации импорта, шифрования ресурсов, рабочие функции определения SandBox’ов, тогда мы могли бы создавать крипторы так же непринужденно, как домики из кубиков Лего.
Идеальным местом для обмена, наверное, будет GitHub, и туда я залью исходники написанного нами сегодня криптора — он будет доступен по адресу http://github.com/presidentua/ExePacker.
Кроме того, в решении проблемы здорово помогло бы использование высокоуровневых языков программирования. В паблике сейчас валяются исходники крипторов на С++ или VisualBasic’е, но ведь от этого проще не становится, поскольку разобраться в написанном коде — ой как непросто. На Python’е все выглядит в разы лучше, поэтому именно его мы сегодня и будем использовать. В общем, заложим фундамент этой благородной миссии. Присоединяйся!
Выпуск 2. PE-файл
Структура PE-файла довольно сложная, поэтому подробная документация будет ждать тебя на диске, а здесь я представлю твоему вниманию лишь избранные моменты.
PE-файл представляет набор разных служебных структур, связанных между собой, и набор данных, которые размещены в секторах. Загрузчик Windows’a читает структуры, обрабатывает их (например, импортирует DLL’ки) и потом передает управление на инструкцию, указанную в поле «Entry Point».
Теперь посмотрим, что же нужно нам сделать, чтобы изменить файл и при этом не испортить его.
Выпуск 3. Теоретический криптор
Для начала выберем файл, который будет у нас исполнять функции лабораторной мыши. Чтобы сделать приятное Андрюшку :), мы, пожалуй, будем издеваться над Putty.exe. Упрощенно его структура будет выглядеть так:
- Служебные данные
- Первая кодовая секция
- Другие секции с данными
Алгоритм криптора следующий. Создать две ассемблерные программы. Первая будет косить под обычную прогу и проверять, что мы не в эмуляторе, а потом передаст управление на вторую программу. Вторая же восстановит оригинальную структуру файла и передаст управление на оригинальную точку входа Putty. И записать эти программы в файл.
В результате получится следующая структура:
- Служебные данные
- Первая кодовая секция
- Наша первая программа, которая передаст управление на 4.2
- Шифрованный код первой секции
- Другие секции с данными
- Добавленная секция
- Часть кодовой секции, перезаписанной программой 2.1
- Вторая программа, которая оригинальный код из 4.1 поместит на 2.1, а потом расшифрует кодовую секцию и передаст на нее управление.
Выпуск 4. Практический криптор
Ну наконец-то мы добрались до сердца нашей статьи. Для работы криптора нам понадобится модуль pefile (будем использовать несколько модифицированную версию), и с помощью либы откроем Putty:
import pefile
pe = pefile.PE("putty.exe")
Теперь, если ты напишешь «print pe», то увидишь подробную инфу обо всех характеристиках файла, по этой инфе я советую искать нужные для изменения поля в файле. А о внутренней работе модуля обязательно прочитай во врезке. Теперь немного математики. У нас будут две программы, которые нужно внедрить в файл. Они будут занимать где-то по 512 байт каждая максимум. Поэтому для размещения добавим новую секцию в 1024 килобайт вызовом:
pe.add_last_section(size=1024)
Закриптуем первую секцию XOR’ом с ключом «1»:
pe.sections[0].xor_data(code=1)
Магия, правда? :). А теперь прикинь, что все это пришлось бы писать на С++!
Поскольку в начале программы будет наш код, то сохраним оригинальный код, скопировав его в последнюю секцию.
pe.data_copy(pe.sections[0].PointerToRawData, pe.sections[-1].PointerToRawData, 512)
Оригинальный код сохранен, и мы приступим к написанию первой программы. Конечно же, писать мы ее будем на ассемблере, используя FASM для компиляции. Создадим файлик pack.tpl.asm с содержанием:
use32
mov eax, {{ go }}
jmp eax
Ты, наверное, уже догадался, что это не готовый исходник, это лишь шаблон для шаблонизатора из TornadoWeb, а его мы уже отлично знаем, ведь именно его мы использовали при написании HTML-морфера. Сгенерируем первую программу:
asm = Template(open("pack.tpl.asm", "r").read()).generate(
go=pe.OPTIONAL_HEADER.ImageBase + pe.sections[-1].VirtualAddress+512,
)
with open("pack.asm", "w") as f:
f.write(asm)
os.system(r"c:fasmwFASM.EXE pack.asm")
В переменной go мы передаем адрес в памяти, где будет наша вторая программа — то есть, в последней секции, начиная с 512 байта. А в последней строчке компилим результат на FASM’е. Теперь запишем получившийся код в начало первой секции:
new_pack = open("pack.bin", "rb").read()
pe.data_replace(offset=pe.sections[0].PointerToRawData, new_data=new_pack)
Вторую программу запишем в файл copy.tpl.asm. Размер у нее более внушительный, поэтому полный код смотри на диске. Там содержится два цикла, один скопирует 512 байт оригинальной программы с последней секции в первую, а второй цикл расшифрует всю первую секцию. После этого передается управление на оригинальную программу.
При компиляции темплейта нужно передать туда параметры для циклов копирования и расшифровки:
copy_from = pe.OPTIONAL_HEADER.ImageBase+pe.sections[-1].VirtualAddress
oep = pe.OPTIONAL_HEADER.ImageBase+pe.OPTIONAL_HEADER.AddressOfEntryPoint
asm = Template(open("copy.tpl.asm", "r").read()).generate( copy_from=copy_from, copy_to=copy_to, copy_len=512, xor_len=pe. sections[0].Misc_VirtualSize, key_encode=1, original_oep=oep,)
Остался маленький штришок — записать вторую прогу в файл и сделать первую секцию записываемой, чтобы расшифровщик не выдавал ошибок, а также установить точку входа на начало первой секции:
new_copy = open("copy.bin", "rb").read()
pe.data_replace(offset=pe.sections[-1].PointerToRawData+512, new_data=new_copy)
pe.OPTIONAL_HEADER.AddressOfEntryPoint = pe.sections[0].VirtualAddress
pe.write(fi lename="result.exe")
Выпуск 5. Завершающий
Если собрать кусочки кода вместе, то будет у нас всего 50 строк. Всего лишь 50 — и криптор готов! А теперь прикинь, сколько строк содержала бы программа на С? Конечно, это еще далеко не готовый продукт, над ним нужно работать и работать. Чтобы довести систему до реального криптора, нужно добавить как минимум шифрование ресурсов и импорта, а также антиэмуляцию.
Желательный функционал 1. Обход песочниц
В крипторе нужно делать проверки на запуск в виртуальной машине, SandBox’е или анализаторе типа анубиса. Чтобы их зедетектить, нужно провести небольшое исследование и написать программу, которая будет на экран выводить разные внутренние параметры системы, а дальше — проверить этот файл на том же анубисе и в скриншоте посмотреть параметры, которые показала наша прога. Дальше все просто — при запуске на системе с подобными параметрами — просто уходим в цикл.
Обязательный функционал 2. Шифрование ресурсов и импорта
Для шифрования ресурсов мы должны пройтись по секции ресурсов и сохранить оттуда важные для запуска файла — иконки и манифест. Дальше создаем новые ресурсы с важными ресурсами, а остальное шифруем. После запуска криптора восстанавливаем все обратно.
Несколько сложнее получается с импортом, ведь его также нужно сначала зашифровать, потом сгенерировать липовый импорт, но после восстановления импорт еще нужно вручную проинициализировать, то есть — загрузить DLL’ки и сохранить в таблицу импорта реальные указатели на функции.
Обязательный функционал 1. АнтиЭмуляция
Кроме избавления от внешних сигнатур, очень важно, чтобы антивирус в своем эмуляторе не добрался до исходного файла. Для этого нужна антиэмуляция. Раньше были очень популярны приемы, основанные на предположении, что эмулятор не понимает все инструкции процессора. Сейчас же ситуация изменилась, и самые эффективные приемы основаны на использовании Windows API. Согласись, что антивирус вряд ли сможет эмулировать все API.
Вот тебе такая идейка для реализации:
- создаем Windows-приложение и один дополнительный поток;
- после создания потока он должен послать через API сообщение основному потоку с каким-то ключом;
- в главной программе проверяем, и если ключ правильный — передаем управление на код расшифровки основного файла;
- если код неправильный, то просто ничего не делаем и находимся в вечном цикле получения сообщений от Windows.
PS:Никогда не останавливай программу с ошибкой, это лишь прибавит криптору лишний вес. Вечный цикл получения сообщений от Windows — лучший способ.
Внутренности Антивирусов
В упрощенном виде, антивирус — это набор правил (сигнатур) и система, которая проверяет файл по этим правилам.
К примеру, пусть в антивирусе будут такие сигнатуры:
- секция с кодом, записываемая +10;
- после запуска прописывается в авторан +30;
- вторая секция с именем Zeus +30;
- меньше 4 энтропия кодовой секции +20;
- есть сертификат от майкрософта -10.
Дальше антивирь проверяет те правила, которые возможно проверить без запуска EXE, потом в эмуляторе запускает файл и проверяет все остальные правила. А после этого подсчитывает сумму, если она больше 100, значит вирус, если меньше — значит не вирус.
Как работает pefile
При загрузке в pefile экзэхи, библиотека сохраняет сам файл в pe.data, а потом обрабатывает его и создает массив структур pe.structures. Структура — это объект, у которого есть адрес. Адрес, по которому она находится в файле, и есть набор полей.
При сохранении файла pe.write(filename=»result. exe») либа проходит по всем структурам и сохраняет их по указанным адресам. Чтобы что-то добавить, например, в ту же секцию, нам сначала нужно найти адрес в памяти. Это можно посчитать так: адрес в памяти последней секции + размер секции. Дальше заполняем все поля в структуре и добавляем ее в массив pe.structures. Вот и все :).
Links
Криптор
Итак, Вы решили стать крутым хакером и вирусописателем, и уже даже купили себе самую нужную книгу «Как стать хакером для чайников»? Быть хакером – это конечно круто, но прочитав книгу подобного рода, максимум, кем Вы станете, это хакером чайников.
В данной статье мы постараемся объяснить некоторые аспекты программирования некоего программного обеспечения, касающегося именно хакерских сторон деятельности – как написать вирус, чтобы его не палили антивирусы, какие программы при этом использовать и где эти программы брать.
Криптор (от английского слова «Cryptor» — шифровщик) – это название одного из вида программных продуктов, которые используются программистами-вирусописателями для того, чтобы скрыть вредоносную сущность написанного ими программного обеспечения от антивирусных программ.
Криптор, используя шифрование программы, содержащей вирус, маскирует и защищает ее от антивирусных программ, которые работают методами поиска по сигнатурам.
Различают два вида крипторов: обычный и полиморфный. Обычные крипторы имеют статическую сигнатуру декриптора-расшифровщика, а у полиморфных данная сигнатура динамическая, и каждый раз при компиляции они (файлы, упакованные такими крипторами) выглядят по иному.
Как же работают крипторы? Все довольно просто: берется исходный оригинальный файл вредоносной программы, затем данная программа шифруется каким-либо криптором, при этом в начало вновь полученного файла записывается код для расшифровки программы. Чтобы было более понятно, объясним на простейшем примере: берется некая троянская программа и архивируется архиватором WinRAR, причем архивируется не просто так, а с парольной защитой. После выполнения данных действий ни одна антивирусная программа не сможет добраться до данного трояна, так как расшифровывать пароли к архивам они не умеют.
Здесь присутствует один небольшой подводный камень. Антивирусы добавляют в свои базы сигнатур коды расшифровки наиболее распространенных программ-крипторов, но если Вы создали какую-либо программу, которая совсем не является вирусом, а выполняет какие-либо только полезные действия, но при этом запаковали ее для уменьшения размера каким-либо популярным криптором, то зачастую может так случиться, что антивирус при попытке скопировать данную программу на компьютер или запустить ее начнет ругаться, что в данной программе содержится страшный вирус. Ну, от этого никуда не деться, если Вы пользуетесь общедоступными крипторами.
Вообще, по типу доступности крипторы подразделяют на Публичные (Public) и Приватные (Private).
Первый вид крипторов является общедоступным, они широко распространены на просторах Интернета и при наличии желания их может скачать любой пользователь. Основной отрицательной стороной таких крипторов является то, что по истечении совсем небольшого срока они начинают палиться практически всеми антивирусами (ведь антивирусные лаборатории тоже не дремлют и стараются отловить свежие виды крипторов, тем более как их не отлавливать, если они лежат в свободном доступе).
Со вторым же видом все не так просто. Эти крипторы доступны только избранному сообществу людей либо же их можно приобрести за вполне реальные деньги (электронные в основном). Данный тип крипторов является более устойчивым к проверке их антивирусами благодаря как постоянно совершенствующимся алгоритмам шифрования, так и постоянно обновляемому стабу. Что такое стаб, спросите Вы? Ответим. Стаб – та часть кода криптора, которая используется для расшифровки данных вредоносной программы, которая и была зашифрована данным криптором.
Часто в раделах форумов, где представлены крипторы, присутствуют аббревиатуры FUD и semiFUD. Расшифруем эти аббревиатуры, чтобы Вам было более понятно. Что же это такое.
1)FUD — Full Undetected — «полностью не определяется антивирусами»
2)semiFUD — Semi-full undetected — «почти не определяется антивирусами».
Помимо крипторов, при написании вредоносного программного обеспечения (вирусов и троянских программ), используются и некоторые другие виды программ. Вкратце перечислим их названия и расскажем, для чего они служат.
Для кражи номеров ICQ, логинов и паролей к аккаунтам электронной почты и социальным сетям используются особые тоянские программы, которые называются пинчи и ксинчи.
Для приема и обработки полученной ворованной информации используются специальные php-скрипты, которые называются гейтами.
Для соединения в один файл безопасной программы и какого-либо вируса служат джойнеры. При этом функциональность как первого (допустим, фотографии), так и второго (например, троянского вируса), остается на высшем уровне.
Вот в принципе и вся основная теоретическая информация по крипторам, которую мы хотели Вам представить.
криптор, который любит держаться в тени / Блог компании Group-IB / Хабр
Ни один атакующий не хочет, чтобы его инструменты обнаружили и раскрыли раньше времени. Поэтому, как правило, в чистом виде никто вредоносные программы не распространяет. Например, пользователю прилетело фишинговое письмо от имени известной транспортной компании и просят проверить документы во вложении. Подобные письма достаточно часто являются началом атаки, так было и на этот раз. Внутри архива находился исполняемый файл Cassandra Crypter — популярный криптор, полезной нагрузкой которого могут выступать различные семейства вредоносного программного обеспечения. Алексей Чехов, аналитик CERT-GIB, рассказывает, как Cassandra проникает на компьютер жертвы и приводит с собой других незваных гостей.
Работу Cassandra можно условно разделить на два этапа. На первой стадии загружается вспомогательная библиотека, которая извлекает основную часть криптора из исходного файла. На второй — криптор раскрывает весь свой потенциал.
Первая стадия
Cassandra маскируется под легитимное приложение. В точке входа располагается стандартная для приложений Windows Forms функция запуска.
Конструктор формы также выглядит стандартным, ничем не отличающимся от легитимного приложения.
При детальном анализе был обнаружен вызов функции aaa()
, которая содержит вредоносный функционал. Ее вызов приводит к расшифровке и подгрузке вспомогательной dll
.
Для расшифровки используется алгоритм AES.
После подгрузки вспомогательной dll
вызовется одна из её функций, в результате чего будет получена и запущена вторая стадия криптора.
Вторая стадия содержится в изображении, в зашифрованном виде, в исходной сборке.
Для расшифровки используется операция XOR, ключом для расшифровки являются первые 16 байтов исходного изображения.
В первой стадии злоумышленники практически не используют средства противодействия анализу, отладки и так далее, за исключением обфускации дополнительной библиотеки.
Вторая стадия
Вторая стадия представляет собой исполняемый файл .Net Framework.
Конфигурационный файл
Ключ, который используется на первой стадии расшифровки пейлоада | «baAsaBBxDT» |
Поле, содержащее пейлоад в расшифрованном виде | |
Поле содержащее сырой (не разобранный) конфиг | «0||0||0||0||0||||||0||0||0||0||||||||||||||0||0||0||0||0||0||0||0||v2||0||3046||0||0||||||0||0||0||||» |
Поле, содержащее подготовленный конфиг | |
Поле, содержащее флаг типа инжекта | 0 |
Поле, содержащее флаг закрепления в системе | 0 |
Поле, содержащее имя файла после закрепления в системе | «YhwcrydjrNS» |
Поле, содержащее название мьютекса | «ljrSLVyCApWxcUE» |
Неиспользуемое поле | 0 |
Поле, содержащее информацию об использовании загрузчика | 0 |
Поле, содержащее информацию о пути до загруженного файла | 0 |
Поле, содержащее ссылку на пейлоад | 0 |
Поле, содержащее информацию об использовании Anti-VM/Sandbox-функции, осуществляющей поиск | 0 |
Поле, содержащее информацию об использовании Anti-VM/Sandbox-функции, осуществляющей поиск строк в пути файла | 0 |
Неиспользуемое поле | 0 |
Неиспользуемое поле | 0 |
Поле, содержащее информацию об использовании Fake MessageBox | 0 |
Текст заголовка Fake MessageBox | 0 |
Текст Fake MessageBox | 0 |
Информация о кнопках Fake MessageBox | 0 |
Информация об иконке Fake MessageBox | 0 |
Количество секунд, в течение которых приложение будет бездействовать | 0 |
Полезная нагрузка
Полезная нагрузка содержится в крипторе в зашифрованном виде. Расшифровка проходит в два этапа:
1. В цикле осуществляется побайтовый XOR шифрограммы, ключа и значения операции XOR от последнего элемента байта шифрограммы и 112. Полученные значения сохраняются в созданный массив. Ключ для первой стадии содержится в конфигурационном файле.
2. Осуществляется дешифрование, аналогичное тому, что было на первой стадии: используется операция XOR, в качестве ключа используются первые 16 байтов массива, полученного на первом этапе.
Закрепление в системе
Закрепление в системе осуществляется через создание отложенной задачи. Файл копируется в директорию AppData//{имя файла, заданное в конфиге}+”.exe”
. После этого исходный файл удаляется и создается задача на выполнение.
Anti-VM
В функции осуществляется поиск виртуальных видеоадаптеров и специфических ключей реестра, свойственных для виртуальных машин.
Anti-Sandbox
Реализованы три функции противодействия песочнице:
Детект изолированной среды.
Функция проверяет путь до исполняемого файла и ищет в нём специфические строки, таких как \\VIRUS, SAMPLE, SANDBOX и т.д. Также осуществляется поиск окна, свойственного WindowsJail, и библиотеки SbieDll.dll, загруженной в процесс.
Защита от повторного запуска
Реализована путем создания мьютекса с заданным именем в системе.
Функционал
Downloader
Реализована функция загрузки пейлоада из сети.
Запуск полезной нагрузки
Содержит два варианта запуска пейлоада:
1. Загрузка в память при помощи функций .Net Framework.
2. Инжект полезной нагрузки в запущенный процесс. Есть возможность выбора из нескольких процессов.
На данный момент Cassandra — достаточно распространенный тип крипторов. Как правило, злоумышленники используют его в массовых рассылках, чтобы незаметно запускать на машине пользователя вредоносное ПО. Cassandra позволяет запускать даже хорошо изученные семейства ВПО.
Исследователи обнаружили и изучили распространенный криптор OnionCrypter
С 2016 года OnionCrypter широко используется одними из самых известных и наиболее распространенных семейств вредоносных программ, таких как Ursnif, Lokibot, Zeus, AgentTesla и Smokeloader.
Исследователи Avast Threat Labs, подразделения компании Avast, мирового лидера в области цифровой безопасности и решений защиты, обнаружили криптор, который с 2016 года широко используется одними из наиболее распространенных семейств вредоносных программ, таких как Ursnif, Lokibot, Zeus, AgentTesla и Smokeloader. За последние три года Avast защитила почти 400 000 пользователей по всему миру от вредоносных программ, содержащих этот криптор.
Устройство современного вредоносного ПО очень похоже на строение автомобиля: оно тоже состоит из множества деталей. Только вместо двигателя, колес и руля у таких программ есть загрузчик, полезная нагрузка и командный модуль.
Исследователи лаборатории угроз Avast Threat Labs изучили одну из «деталей» вредоносных программ, которая называется «криптор». Это инструмент, который скрывает вредоносные части кода с помощью шифрования — таким образом, код может на первый взгляд показаться безвредным, и его будет сложнее прочитать. Так создатели вирусов могут скрыть всю сущность программы от исследователей, антивируса и решений защиты. Для разработчиков вредоносных программ криптор — важный инструмент для противодействия защите. В то же время для исследователей обнаружение криптора позволяет быстрее находить и идентифицировать новое вредоносное ПО, которое его содержит.
Исследователи Avast изучили криптор, который они назвали OnionCrypter: как и лук, он состоит из множества слоев шифрования, защищающих информацию от исследователей, антивируса и решений безопасности. Именно благодаря своей «многослойности» OnionCrypter так необычен. Стоит подчеркнуть, что его название никак не связано с браузером или сетью Tor.
Исследователи лаборатории угроз Avast также отмечают, что OnionCrypter активно используется с 2016 года в самых известных и распространенных семействах вредоносных программ, таких как Ursnif, Lokibot, Zeus, AgentTesla и Smokeloader. За последние три года Avast защитила почти 400 000 пользователей со всего мира от вредоносного ПО, содержащего OnionCrypter. Диаграмма ниже показывает, какие семейства вредоносного ПО, использующие OnionCrypter, были обнаружены Avast.
Учитывая достаточно долгое время использования и распространенность OnionCrypter, исследователи сделали вывод, что разработчики продают его в качестве услуги. За последнее время рынок вредоносного ПО значительно вырос, и вполне объяснимо, почему некоторые люди и компании начали предлагать специализированные услуги. Кроме того, развитость этого рынка свидетельствует о том, что создатели OnionCrypter предлагают покупателям настройку, чтобы сделать его еще менее заметным. В рекламе на форумах OnionCrypter часто называют «совершенно незаметным».
Информация, предоставленная исследователями Avast, упростит задачу по обнаружению OnionCrypter и любого вредоносного ПО, которое его использует.
Возвращаясь к аналогии с автомобилем, можно сказать, что исследователи лаборатории угроз Avast обнаружили важную деталь в двигателе множества вредоносных программ. Теперь ее проще найти и изучить, если она окажется в неизвестном коде — как показывает исследование Avast, в большинстве случаев это новое вредоносное ПО. Результаты работы команды Avast помогают не только клиентам компании – найденной информацией исследователи делятся и с другими разработчиками защитных решений.
По материалам Avast
PaaS, или Как хакеры ускользают от антивирусов
Одним из главных инструментов любой хакерской группировки является вредоносное ПО. В зависимости от уровня квалификации хакеров и особенностей операции, они могут использовать как массовые, зачастую публично доступные инструменты (типичным примером может быть фреймворк Cobalt Strike), так и собственные разработки.
Создание уникального набора инструментов для каждой атаки требует большого количества ресурсов, поэтому вредоносное ПО так или иначе переиспользуется как в различных операциях одной группы, так и среди дружественных группировок. Массовое использование одного и того же инструмента неизбежно приводит к его попаданию на радары антивирусных компаний, и, как следствие, к снижению его эффективности.
Чтобы бороться с этой проблемой, хакеры используют техники упаковки, шифрования и мутации кода. Такие техники часто реализуют отдельные инструменты — «крипторы» (crypters), иногда называемые просто «пакерами». В этой статье на примере банковского трояна RTM мы рассмотрим, какие пакеры могут использовать злоумышленники, как эти пакеры осложняют обнаружение конкретного ВПО и какие еще вредоносы ими упаковываются.
Packer-as-a-service
Хакерская группа, стоящая за распространением RTM, до конца 2020 года регулярно проводила массовые фишинговые рассылки с вредоносными вложениями. Этот процесс, по всей видимости, происходил автоматически.
Рис. 1. Фишинговое письмо RTM, декабрь 2020Каждое такое вложение содержало существенно отличающиеся друг от друга файлы, при этом итоговая полезная нагрузка практически не менялась.
Рис. 2. Пример архива RTM
Подобная особенность — естественное следствие применения крипторов. Первоначально группа, стоящая за RTM, использовала свой собственный уникальный криптор, однако в течение 2020 года дважды его сменила.
При исследовании по-новому упакованных образцов нам удалось обнаружить множество другого ВПО, которое было защищено аналогичным образом. Пересечения с другими вредоносами с учетом автоматизации процесса упаковки, на наш взгляд, позволяют говорить об использовании злоумышленниками модели packer-as-a-service. В этой модели упаковка вредоносных файлов делегируется специальному сервису, которым управляет третья сторона.
Рис. 3. Сайт одного из крипт-сервисовДоступ к таким сервисам часто продается на хакерских форумах.
Рис. 4. Пример объявления о продаже услуг по упаковке файловДалее мы рассмотрим конкретные примеры крипторов, которые были применены группой RTM.
Rex3Packer
Первое использование этого пакера группой RTM, которое нам удалось обнаружить, относится к ноябрю 2019 года. Активное же его применение, по нашим данным, приходится на период апрель—май 2020 года. Единичные случаи использования этого пакера для распространения старых версий трояна RTM мы также наблюдали в конце января 2021 года.
Нам не удалось связать этот упаковщик с каким-либо из ранее описанных публично, поэтому мы дали ему свое название по трем особенностям его устройства: наличию рекурсии (recursion), реверса битов (reverse), и рефлективной загрузки PE-файлов (reflection) — Rex3Packer.
Алгоритм распаковки
Общий алгоритм извлечения полезной нагрузки выглядит так:
- С помощью VirtualAlloc выделяется заранее определенное количество памяти с правами на чтение, запись и исполнение.
- В выделенный буфер копируется содержимое образа текущего процесса в памяти (в частности, секция .text).
- Управление передается на функцию внутри буфера.
- Вычисляется разница между положением одних и тех же данных в буфере и в образе PE-файла (разность между адресами в буфере и виртуальными адресами в образе). Эта разность заносится в регистр ebx. Все обращения к виртуальным адресам в коде проиндексированы содержимым этого регистра. За счет этого, везде, где это необходимо, к адресам из PE-образа добавляется поправка, которая позволяет получить соответствующий адрес в буфере. Рис. 6. Обращения к функциям и переменным с учетом поправки в регистре ebx
- Выделяется еще один буфер под упакованные данные.
- Через вызов VirtualProtect устанавливаются права RWX на весь регион памяти с образом PE-файла.
- Упакованные данные копируются в свой буфер.
- Происходит декодирование упакованных данных.
- Регион памяти с образом PE заполняется нулевыми байтами.
- Декодированные данные представляют собой исполняемый файл — PE-нагрузку. Эта полезная нагрузка рефлективно загружается на место исходного PE-образа, и управление передается на ее точку входа.
Отдельный интерес представляет специфический алгоритм декодирования упакованных данных. В данном случае некорректно говорить об упаковке, как о сжатии: алгоритм устроен так, что размер упакованных данных всегда больше размера исходных.
Непосредственно упакованным данным предшествует заголовок размером 16 байт, который содержит 4 поля по 4 байта:
- размер самого заголовка,
- размер исходных данных (PE-нагрузки),
- позиция в исходных данных (*), по которой происходит их разделение (об этом ниже),
- режим кодирования (1, 2, либо 4).
Декодирование выполняется следующим образом:
- Внутри каждого байта выполняется реверс порядка битов (к примеру, 10011000 становится 00011001).
- В зависимости от режима кодирования (1, 2, 4) данные разбиваются на блоки размером N = 9, 5, либо 3 байта соответственно. Результат декодирования блока — это (N – 1) байт (то есть 8, 4, или 2).
- В первых N-1 байтах блока отсутствует часть битов: их значения всегда равны нулю. Чтобы восстановить оригинальные байты, с помощью масок вида 00000001, 00010001 или 01010101 из последнего байта блока извлекаются недостающие биты. При этом для каждого следующего байта маска сдвигается. То есть последний байт блока фактически составлен из объединенных логической операцией OR битов, которые извлечены из предыдущих байтов.
Например, в режиме 4 последний байт состоит из четных битов первого байта блока и нечетных битов второго байта блока. В результате возврата этих битов в первый и второй байты, получается оригинальная последовательность из двух байт.
Рис. 7. Схема получения исходных байтов в режиме 4 - После операции по восстановлению битов во всех блоках полученные данные представляют собой исходный PE-файл, который был разделен по позиции (*) на две части. Эти части, в свою очередь, были переставлены между собой. Обратная перестановка с учетом значения (*) позволяет получить оригинальный файл.
Обфускация
Чтобы усложнить анализ, в пакере применяются несколько техник добавления «мусорного» кода :
-
В промежутках между исполнением полезных команд делаются вызовы различных функций WinAPI. Их результаты сохраняются, но не используются, а сами функции выбираются так, чтобы не влиять на работу программы.
Рис. 8. Примеры вызова функций WinAPI
-
Характерная особенность данного пакера — наличие циклов (не выполняющих полезных операций), которые реализуются через рекурсивную функцию.
Рис. 9. Функция с рекурсивным вызовом (вариант без обфускации)
-
Для дополнительного запутывания в исполняемый файл добавляется несколько десятков случайно сгенерированных функций. Они могут ссылаться друг на друга, но в процессе работы ни одна из них не получает управления.
Рис. 10. Пример сгенерированной функции
Использование
Кроме экземпляров RTM, мы обнаружили использование Rex3Packer для упаковки различного ВПО, в основном имеющего происхождение из стран СНГ. Ниже расположен список некоторых примеров таких вредоносов.
Семейство ВПО | SHA256 |
---|---|
Phobos Ransomware | 6e9c9b72d1bdb993184c7aa05d961e706a57b3becf151ca4f883a80a07fdd955 |
Zeppelin Ransomware | 8d44fdbedd0ec9ae59fad78bdb12d15d6903470eb1046b45c227193b233adda6 |
Raсcoon Stealer | 3be91458baa365febafb6b33283b9e1d7e53291de9fec9d3050cd32d98b7a039 |
KPOT Stealer | 9b6af2502547bbf9a64ccfb8889ee25566322da38e9e0ccb86b0e6131a67df1e |
Predator The Thief | d1060835793f01d1e137ad92e4e38ef2596f20b26da3d12abcc8372158764a8f |
QakBot | 18cc92453936d1267e790c489c419802403bb9544275b4a18f3472d2fe6f5dea |
Также мы отметили использование пакера для упаковки экземпляров ВПО из семейств Nemty, Pony, Amadey. Безусловно, приведенные нами примеры — это далеко не все случаи использования Rex3Packer.
HellowinPacker
В мае 2020 группа RTM переключилась на использование нового упаковщика, который продолжала активно использовать до начала 2021 года. Мы назвали его HellowinPacker из-за встречающихся в некоторых экземплярах строк с именем файла hellowin.wav.
Ключевой особенностью этого пакера является два уровня мутации кода. Первый из них существенно меняет структуру кода распаковки, делая различные образцы не похожими друг на друга.
Рис. 11. Сравнение кода в двух экземплярах разной структурыНа примере выше можно увидеть сравнение образцов 5b5f30f7cbd6343efd409f727e656a7039bff007be73a04827cce2277d873aa0 (слева) и 1f9a8b3c060c2940a81442c9d9c9e36c31ad37aaa7cd61e1d7aec2d86fe1c585 (справа).
Второй уровень меняет лишь отдельные детали при неизменной в целом структуре кода. При этом изменения главным образом затрагивают ассемблерные инструкции и не влияющие на работу программы константы. В результате в декомпилированном виде код выглядит практически идентичным.
Так же, как и в случае с Rex3Packer, мы имеем дело с массовым использованием HellowinPacker для упаковки различного ВПО. При этом вредоносное ПО из одного семейства, как правило, имеет в упакованном виде одну и ту же структуру. Это можно пронаблюдать, по крайней мере, на протяжении некоторого времени — затем структура может измениться.
Все эти особенности хорошо согласуются с описанием одного из сервисов упаковки, доступ к которому продается на хакерских форумах:
[Уникальность]Для клиента дается уникальный криптор, который не зависит от других клиентов. Если ваши файлы спалились, то только от ваших же прогрузов. Мы не набираем >10000 клиентов, только аккуратная Premium-поддержка, клиенты единичные. We make only unique stubs for a customer.
По всей видимости, в каждый такой уникальный криптор закладывается собственная структура генерируемого кода. При этом сам криптор также умеет изменять код, но уже на более низком уровне, не меняя структуру программы в целом. В любом случае содержание «полезного» исполняемого кода остается одинаковым.
Алгоритм распаковки
Одни из первых действий, которые встречаются во всех упакованных файлах — это попытки открыть ключ реестра HKEY_CLASSES_ROOT\Interface\{b196b287-bab4-101a-b69c-00aa00341d07} (регистр символов в конкретном случае может отличаться) и запросить в нем значение по умолчанию (Default). От успешности этих операций в некоторых модификациях генерируемого кода зависит корректное продолжение работы программы.
GUID интерфейса в разных случаях также может отличаться. Вот некоторые из возможных вариантов:
- {3050f1dd-98b5-11cf-bb82-00aa00bdce0b}
- {aa5b6a80-b834-11d0-932f-00a0c90dcaa9}
- {683130a6-2e50-11d2-98a5-00c04f8ee1c4}
- {c7c3f5a1-88a3-11d0-abcb-00a0c90fffc0}
- {b8da6310-e19b-11d0-933c-00a0c90dcaa9}
Дальнейший код некоторым образом получает адрес, по которому располагается блок зашифрованных данных.
Этот блок начинается с четырехбайтного числа, которое хранит размер исходных данных (тех, которые будут получены после декодирования). Вызовом VirtualAlloc под расшифрованные данные выделяется блок памяти нужного размера с правами RWX. В выделенную память блоками по X байт копируются зашифрованные данные. При этом в оригинальном файле между этими блоками располагаются пропуски длиной Y байт.
Рис. 13. Схема копирования данных в HellowinPackerЗатем происходит процесс дешифровки блоками по 4 байта:
- очередной блок интерпретируется как целое число (DWORD),
- к его значению прибавляется индекс первого байта в блоке,
- выполняется операция XOR между полученным значением и суммой индекса и фиксированного ключа, числа Z.
Пример реализации алгоритма на Python:
def decrypt(data, Z): index = 0 while index < len(data): dword = struct.
(index + Z) data[index:index + 4] = struct.pack("<I", dword) index += 4
Значения X, Y и Z варьируются в зависимости от конкретного упакованного экземпляра.
Внутри дешифрованных данных располагается следующая стадия извлечения полезной нагрузки — шеллкод. Он получает управление после окончания расшифровки.
Шеллкод самостоятельно загружает необходимые для своей работы функции, имена которых прописаны в таблице импорта, находящейся в начале дешифрованных данных.
Рис. 14. Таблица импорта в дешифрованных данных
Для большей вариативности строки в таблице импорта могут частично заполняться посторонними символами. Так, в примере выше, первое имя функции — GetProcAddress — полностью заменено на строку aaa45678901234; кроме того, повреждены имена VirtualAlloc и VirtualProtect. Непосредственно перед обработкой таблицы шеллкод восстанавливает корректные значения для всех символов.
Полезная нагрузка (на этот раз, это PE-файл) извлекается шеллкодом из оставшейся части дешифрованных данных. Она вновь зашифрована, причем тем же алгоритмом, который описан выше. В качестве ключа Z всегда используется число 1001.
После окончательной расшифровки шеллкод производит рефлективную загрузку PE-файла, используя для этого импортированные на первом этапе функции.
Обфускация
Как и в случае с Rex3Packer, в экземплярах с HellowinPacker встречаются вызовы функций WinAPI, не относящихся к основной логике программы. Однако в данном случае они используются скорее как способ затруднить поведенческий анализ и детектирование в песочницах. В пользу этого предположения говорит то, что в большинстве случаев разнообразные функции вызываются подряд в самом начале программы.
Рис. 16. Точка входа в одной из упакованных библиотек
Дополнительным эффектом от такого использования WinAPI становится невозможность детектирования по списку импортируемых функций и imphash.
При работе с различными числовыми значениями часто встречается некоторая арифметическая обфускация: необходимые константы представляются в виде суммы или разности других констант (в определенных случаях равной нулю). При этом для получения констант могут быть использованы и вызовы функций WinAPI, дающие предсказуемый результат (например, 0 в случае неудачи).
Пример такой обфускации приведен на рис. 17: единственная задача данной функции — присвоить глобальной переменной, на которую указывает target, значение аргумента source. В данном случае результат вызова GetStockObject(789644) всегда будет равняться нулю, поскольку функции передан заведомо некорректный аргумент.
Рис. 17. Арифметическая обфускация в коде HellowinPacker
Разного рода мутации встречаются и на ассемблерном уровне: вставка «мусорных» команд, непрозрачные предикаты (opaque predicates), передача неиспользуемых аргументов в функции и повторные вызовы функций, изменение инструкций на эквивалентные.
Использование
HellowinPacker существует по крайней мере с 2014 года. За это время он был использован в различном массовом вредоносном ПО. Вот лишь несколько примеров:
Семейство ВПО | SHA256 |
---|---|
Cerber Ransomware | 1e8b814a4bd850fc21690a66159a742bfcec212ccab3c3153a2c54c88c83ed9d |
ZLoader | 44ede6e1b9be1c013f13d82645f7a9cff7d92b267778f19b46aa5c1f7fa3c10b |
Dridex | f5dfbb67b582a58e86db314cc99924502d52ccc306a646da25f5f2529b7bff16 |
Bunitu | 54ff90a4b9d4f6bb2808476983c1a902d7d20fc0348a61c79ee2a9e123054cce |
QakBot | c2482679c665dbec35164aba7554000817139035dc12efc9e936790ca49e7854 |
Пакер неоднократно упоминался в отчетах других исследователей. Самое раннее упоминание, которое нам удалось найти, относится к 2015 году. В своей статье о крипторах специалисты Malwarebytes в качестве примера исследуют образцы с HellowinPacker. Другие исследователи позже напишут о нем, как об упаковщике Emotet: (1, 2). Уже в 2020 году наши коллеги из NCC Group дадут ему название CryptOne и опишут его применение для упаковки вымогателя WastedLocker. По данным NCC Group, он также использовался в таких семействах ВПО, как Netwalker, Gozi ISFB v3, ZLoader, Smokeloader.
Заключение
Пример с использованием крипторов позволяет проиллюстрировать разделение обязанностей в хакерской среде, в особенности среди массового ВПО. Разработка вредоносной нагрузки, ее защита от антивирусов (крипт) и доставка конечному пользователю может выполняться совершенно не связанными между собой хакерами, при этом каждый элемент в этой цепочке может предоставляться как сервис. Такой подход снижает порог входа для технически не подготовленных киберпреступников: для проведения массовой атаки достаточно обладать лишь необходимой суммой денег на оплату всех сервисов.
Описанные нами упаковщики, конечно же, далеко не единственные из существующих на рынке. При этом они хорошо демонстрируют общие свойства подобного рода инструментов: в результате их работы получается исполняемый файл с обфусцированным полиморфным кодом распаковщика и шифрованной тем или иным образом полезной нагрузкой. Мутации в коде и переиспользование одних и тех же крипторов делают практически невозможным статическое детектирование полезной нагрузки. Однако поскольку эта нагрузка так или иначе расшифровывается в память и начинает свою вредоносную деятельность, поведенческий анализ с использованием песочниц (таких, как PT Sandbox) позволяет обнаруживать ВПО и давать точные вердикты даже для упакованных файлов. Помимо этого, нужно отметить, что упаковщики никак не влияют на взаимодействие вредоносов с управляющими серверами. Это даёт возможность определять присутствие ВПО в сети, используя инструменты анализа трафика – такие, как PT Network Attack Discovery.
Вердикты наших продуктов
PT Sandbox
-
Trojan.
Win32.RTM.a
-
Trojan.Win32.RTM.b
-
Trojan-Banker.Win32.RTM.a
-
Trojan-Banker.Win32.RTM.b
-
Trojan-Banker.Win32.RTM.c
-
Trojan-Banker.Win32.RTM.d
-
Trojan-Banker.Win32.RTM.e
-
Trojan-Banker.Win32.RTM.f
PT Network Attack Discovery
-
REMOTE [PTsecurity] TeamBot/RTM
sid: 10004412; -
BACKDOOR [PTsecurity] TeamBot/RTM
sid: 10004415; -
MALWARE [PTsecurity] RTM Banker CnC POST
sid: 10000765; -
MALWARE [PTsecurity] RTM.
N (Redaman)
sid: 10005556; 10005557; -
MALWARE [PTsecurity] Spy.RTM.AF
sid: 10005468; -
MALWARE [PTsecurity] Trojan[Banker]/RTM
sid: 10004855; 10004875; -
MALWARE [PTsecurity] Win32/Spy.RTM.N (Redaman)
sid: 10003414; 10004754; 10005555; -
PAYLOAD [PTsecurity] RTM.Payload.xor
sid: 10005585;
IOCs (RTM)
Дата обнаружения | Криптор | SHA256 | SHA1 | MD5 |
---|---|---|---|---|
19.04.2020 | RTM | a4229a54f76815ac30a2a878eadf275e199c82da657dbc5f3fc05fe95603c320 | ad22ceb309dd30dc769f63174292657fe07f0ced | 80b116708f75de212b49ff994ad8b43e |
22.![]() |
Rex3Packer | 9b88e8143e4452229dac7fdcc3d9281d21390f286c086f09aec410f120dc4325 | f881729f6a5ca6fe80f385a2b0f8583b19214466 | 3965b819eb945a9c0defc746bbc8ed7a |
13.05.2020 | HellowinPacker | 43e8ebacfa319ff7d871eef3cc35266cfa7c6f44dd787f27a48311e39727e10f | 8a28b75285409c55d5bbeca62e3819c83c8e663f | afd18be08d135f7bf07007c1c9041126 |
28.01.2021 | Rex3Packer (2 слоя) | fbf5974daee93bf5a2ed1816a4edbb108ceccb264d3e3f72d0aed268dd45e315 | 2e3352c6341ce57a03aaf2c4fbf484f3a0a4bfe3 | 6e0c8510443586cdc8f84330e447aae5 |
Статья — Современные крипторы в 2020 году — Какие они должны быть
Сразу хочу обратить внимание и извинится за качество кода, который будет приложен к этой статье, данный материал больше направлен, как концепт к изучению и обсуждения.
Итак, что ждет вас в этой статье (Оглавление):
- Введение. Теория. Что есть крипторы в 2020 году и для чего они нужны.
- Какие они, должны-быть эти крипторы.
- Маленький демонстрационный проект и описание как и что делается.
- Супер-мега блокбастер. Вирус против антивирусов. Итоги.
1). Введение. Теория. Что есть крипторы в 2020 году и для чего они нужны.
Крипторы, их можно также назвать протекторами, а также если говорить про реалии 2020 года, их также можно назвать обфускаторами, в зависимости от типа зверька, которого мы хотим скрыть, но обо всем по порядку.
В далекие наверно уже 2000 – 2010 года, крипторы делали для скрытия уже известного в базе вируса, смысл был такой, есть вирус, который детектится сигнатурно, для его скрытия делали следующее:
Писался загрузчик (stub) – Это минимальная программа, который из оверлея, специально созданной секции, или ресурсов загружала шифрованного зверька, делала антиэмуляцию и запускала зверька в памяти.
По сути криптор состоит из двух частей:
- Билдер – Это специальная программа, по сути отдельный проект, который шифрует зверька, помещает его в оверлей стаба, или в ресурсы, либо в специальную секцию.
- Стаб – Это уже часть криптора, который как написано выше, расшифровывает зверька, делает антиэмуляцию и запускает зверька в памяти.
Что-бы дальше было понятно, немного расскажу про виды детекта, а потом про виды крипторов уже в 2020 году и какие они должны быть)
Итак виды детектов антивирусов:
1. Сигнатурный детект
Тут всё и просто, и сложно. Сигнатура может-быть по определённой контрольной сумме, например антивирус считает контрольную сумму файла (CRC32, MD5 и т. д.), и в случае если такая сумма совпала в базе. То выдаётся детект.
Это называется «точечный детект» и используется часто в «облаках», что позволяет быстро выявить угрозу и нейтрализовать её.
Но а действительно удобно, та-же автоматика может задетектить угрозу по каким-то признакам и быстро добавить контрольную сумму в базу.
Но возникает проблема, что обойти это может даже трёхлетний ребёнок, добавив например один байт в конец файла и контрольная сумма уже будет другой.
Также, сигнатурный детект может-быть и на часть файла, например на какую-то функцию зверька.
2. Эмуляция кода
По простому, антивирус исполняет ваш код в момент сканирования и если находит какие-то касяки, например «Непонравилась API» или обнаружена сигнатура вируса, или кусок такой сигнатуры, то будет детект.
Ещё пример (мы этот пример разберём ниже, чуть позже), вы можете написать протектор, который например из дата-секции будет брать шифрованный вирус, а далее расшифровывать его, например в какой-то буфер в оперативной памяти. Казалось-бы, вирус шифрованый и антивирус его не должен детектить.
А-нет, эмулятор расшифрует код и задетектит вирус. В общем-то для этого и нужен эмулятор кода.
3. Детект при запуске
Всё-что выше, мы разбирали так-называемый «статический детект», т.е. детект, который выдаётся до запуска файла, такой детект будет если вы просканируете файл сканером, или зальёте например на вирустотал и т.д.
Но нужно ещё сказать и про динамический детект. Это детект при запуске файла. Как он формируется ?
У всех антивирусов по разному, например у касперского есть критерии по которому может-быть детект при запуске, например часть таких критериев: Создаёт-ли вирус процессы и как делает это, добавляется-ли вирус в автозапуск, как дербанит сеть вирус и т.д.
Ну тут понятно, что даже при обходе сигнатурного детекта и эмулятора, если вирус по тупому крадёт пароли, создаёт скрытые процессы, всё это пересылает по сети, делает хук на клавиатуру, да ещё и добавляет себя в автозагрузку, то думаю детект не заставит себя ждать !
К тому-же, у многих антивирусов, у таких как нод и др. веб, есть так называемый детект в памяти, т.е. антивирус расшифровывает код до запуска процесса и проверяет его. Да это проблема, т.к. перед запуском нового процесса код должен-быть расшифрован.
4. Еще раз про облако и «искусственный интеллект»
Ошибочно думать, что облако – Это только детект по контрольной сумме. Нет это достаточно сложная система, основанная на ИИ.
Например антивирус может отсылать полностью зверька в «виртуальную лабораторию», где произойдет запуск зверька и ИИ определит вирус-ли это или нет, по разным критериям, будь это репутация, где распространяется зверек и т.д.
Также например, как у касперского может происходить и автоматическое помещение программы в определенную группу, например «программа для удаленного управления» и т.д., также автоматически происходит и установка «репутации программы».
Поэтому у современных АВ, аналитики выполняют либо анализ по запросу, либо если у ИИ возникает какие-то спорные моменты, то зверек перейдет аналитику уже. )))
2) Какие они, должны-быть эти крипторы.
Фу-фу, наконец-то перейдем к самим крипторам уже.
Итак вначале виды крипторов в 2020 году:
1. Натив крипторы:
Ну это крипторы, которые должны криптовать зверьков, которые написаны на нативных языках, таких-как С/С++, ассемблер, Delphi и т.д.
Также крипторы могут криптовать разные разрядности зверьков, например есть крипторы для x86, а есть x64.
Мы рассмотрим на практике именно такой вид криптора, для других крипторов, должны писаться отдельные статьи.
2. Крипторы .NET и C#:
Как видно из названия, эти крипторы криптуют только .NET и C#. (ремарка: используя модуль RunPE появится возможность крипта нативных файлов)
Хорошо будет, если после этой статьи появятся статьи по крипторам C# и .NET.
На самом деле на том-же C#, можно писать хорошую малварь, ничего против шарпов не имею, но я низкоуровневый программист, поэтому мало что скажу про шарпы и дот нет, максимум что там писал, это гуй…)
Может-быть в будущем в зависимости от задач, ближе познакомлюсь с шарпами, но пока-что таких задач к сожалению нет.
3. Крипторы скриптовых языков:
Это по сути обфускаторы, например попадались на глаза обфускаторы батников, java и т.д.
Интересно, что в таких крипторах также используют антиэмуляцию, в виде задержек sleep и т.д.)))
Много про эти виды крипторов тоже писать не буду, т.к. это дело отдельной статьи.
Итак, 2020 год, какие должны-быть крипторы, чтобы выжить:
Современные антивирусы, даже уровня виндового дефендера, имеют не хилые технологии, что-бы свести на нет распространение практически любого вируса.
Но тем не менее, если использовать крипторы правильно, это максимально усложнит детект автоматики, а соответственно увеличит время жизни зверька и уменьшит время чистки следующего билда зверька.
Если раньше крипторы использовались для обхода детекта, то в 2020 году, криптор нужно использовать уже для усложнения детектов автоматики, смысл сделать так что-бы автоматика не добралась до самого зверька, при этом под детект попадала минимальная часть криптора, для автоматизации и ускорения чистки самого криптора.
Как-же это сделать?
Есть концепт использования шелл-кодов и обфускаторов кодов.
Основная идея — это шифровка и скрытие основных частей криптора, например можно пошифровать модуль криптора, который отвечает за запуск зверька в памяти, пошифровать модуль антиэмуляции и т.д.
Эти шифрованные части можно хранить в ресурсах, дата-секции, или вообще загружать по сети.)))
Тем самым стаб будет минимален, а все остальное — это пошифрованные шелл-коды…
Шифрованные части можно прятать например в картинку и размещать на каком-то ресурсе, либо на ломанном сайте.
Пошифрованные части криптора, ну очень сложно задетектить автоматикой, также добраться непосредственно до вашего зверька автоматика не сможет.
В итоге детект будет на часть криптора, которая отвечает за запуск уже шелл-кода, а это как праило 15-30 строк Си-кода, тут уже выходит на первый план обфускаторы и генераторы мусорного Си-кода.
Если все это автоматизировать, билды зверьков будут жить долго и чистка будет происходить достаточно быстро. )))
3) Маленький демонстрационный проект и описание как и что делается.
Итак, что получилось:
Решение состоит из двух проектов:
1. Первый проект LoadPeToShell — Переводит в шифрованный шелл-код модуль LoadPe, по сути создаёт заголовочный файл «loadpe.h», с шифрованным шелл-кодом.
LoadPe — Это основной модуль криптора, по сути там все.)
Антиэмуляция происходит путем вызова функции close по её хешу, то-что должна возвратить функция, это код ошибки ESTALE, на основе этого формируется ключ для расшифровки и расшифровывается пейлоад и запускается…
Немного каснусь тему антиэмуляции, вообще по хорошему также написать отдельную статью про это дело.)
Итак антиэмуляция бывает, как интеллектуальная с точки зрения реализации, так и дерьмовая.
Дерьмовая антиэмулция по моему мнению, это то-что использует атаки на ресурсы эмулятора, да у эмулятора антивируса ограничены ресурсы и если сделать задержку например 2 секунды, или делать какие-то ресурсоемкие расчёты, для получения ключа расшифровки, то скорей-всего эмулятор антивируса пропустит эту задержку и если использовать этот прием, то будет фуд. )
Но данный прием дерьмовый по моему мнению, т.к. для некоторых зверьков критична задержка, например для запуска кейлоггера и т.д.
Да и интеллектуального тут ничего нет, если говорить про малварь, как искусство, какое-то извините говно…)
Более интелектуальный подход и самый простой, как в этом примере проверять например коды ошибок API, и на основе их уже что-то делать.
Есть и другие методы, но обсуждение антиэмуляции, лучше вынести в отдельную статью.)))
Также в LoadPeToShell шифруется пейлоад и создается заголовочный файл «payload.h».
Алгоритм шифрования RC4.
2. Второй проект. Stub — Это уже сам проект криптора.
Где происходит расшифровка шелл-кода из дата секции и запуск этого шелл-кода, пример:
— Расшифровка шелл-кода:
— Запуск шелл-кода:
В сам шелл-код нужно передать буфер шифрованного зверька и размер.
Антиэмуляция, расшифровка и запуск, уже в шелл-коде. )))
Как это сделано, можно глянуть в исходнике, который выложен на гитхабе: https://github.com/XShar/shell_crypor_framework
Как пользоваться:
- В Release положить файл, который нужно закриптовать с именем PayloadExe.exe.
- Запустить файл «LoadPeToShell.exe».
- Собрать проект в Visual Studio C++.
- Получится файл в Release «stub.exe».
*Доработка, кто хочет использовать в комерсе:
- Нужно создать генератор мусора для стаба и обфускатор си-кода. Можно использовать готовые движки, ну собственно если автоматизировать этот процесс, чистка будет весьма быстрой.
- В стабе для скрытия VirtualAlloc я использую проект lazy_importer, рекомендую отказаться от него и вообще нужно отрефакторить код, писалось на скорую руку, опять-же качество кода желает лучшего, но для демонстрации концепта подойдет.
- Сам шелл-код, как и криптованного зверька можно прятать в картинках на сайта, или в любом другом месте, тут просто опять-же для демонстрации концепта, в дата секции.
4) Супер-мега блокбастер. Вирус против антивирусов. Итоги.
Для демонстрации, что концепт работает, на момент написание данной статьи, прилагаю скан на dyncheck.com:
Статик детект на DarkComet (Изначально детектят все):
Рантайм детект (DarkComet):
Спойлер
Детект на безобидный файл (Рантайм):
Спойлер
То-что восклицательный знак, говорят можно за детект не считать, также на разные зверьки может реагировать по разному.)))
Автор: https://ru-sfera.org/threads/frejmvork-kriptora-protektora-na-shell-kodax-x86-x64.3980/
EGACryptor — Европейский архив генома-фенома EGA
EGACryptor
Ega-Cryptor v. 2.0.0 — это приложение на основе JAVA, которое позволяет отправителям создавать зашифрованные файлы, совместимые с EGA, а также файлы для зашифрованной и незашифрованной md5sum для каждого отправляемого файла. Приложение сгенерирует выходную папку, которая по умолчанию будет отражать структуру каталогов, содержащую исходные файлы.Эта выходная папка может быть впоследствии загружена в промежуточную область FTP EGA через клиент FTP или Aspera. Это зеркальное отображение структуры каталогов предназначено для помощи в ассоциации метаданных на портале отправителя.
Загрузить EgaCryptor
Необходимые файлы jar можно получить, загрузив файл jar EgaCrytptor
После загрузки файла требуется распаковать заархивированный архив.
Новый Cryptor был создан для работы со средами выполнения Java версии 6 и выше, а также со средой OpenJDK. Пожалуйста, обратитесь к соответствующим ресурсам за инструкциями по установке. При установке последней версии OpenJDK будут включены файлы JCE. Если ваша установка Java JRE меньше 1.8.0_151, потребуется ручная установка файлов политики JCE. Вы можете проверить версию установленной Java, используя команду:
$ java -версия
в вашем терминале, PowerShell или командной строке.Результатом, который вам нужно будет запомнить, будет версия сборки для Java (TM) SE Runtime Environment.Если вам нужно установить JCE, следуйте приведенным ниже инструкциям.
Установка файлов политики JCE (в соответствии с условиями лицензирования необходимые файлы политики должны быть загружены непосредственно с веб-сайта ORACLE):
- Загрузить файлы политик JCE неограниченной мощности (JRE 6 / JRE 7 / JRE 8)
- Распакуйте и извлеките загруженный файл.
- Это создаст подкаталог с именем JCE. Этот каталог содержит следующие файлы: README.txt, COPYRIGHT.html, local_policy.jar и US_export_policy.
jar
- Установите два файла JAR политики, заменив существующие в домашнем каталоге java.
- Стандартное место для файлов JAR политики юрисдикции JCE:
- Установите два файла JAR политики, заменив существующие в вашем каталог.
- Стандартное место для файлов JAR политики юрисдикции JCE: / lib / security [Unix] или \ lib \ security [Win32]
Примечания: относится к каталогу, в котором была установлена среда выполнения Java SE (JRE).
Из-за процессов, используемых в EGA для архивирования файлов, использование не буквенно-цифровых символов в имени файла вызовет проблемы при архивировании.По соглашению следует избегать использования пробелов в именах файлов, их следует заменить символом подчеркивания (_).
Дополнительные улучшения производительности, которые были включены в новую версию EGA-Cryptor V2.0.0:
- возможность распараллеливать обработку наборов данных за счет использования ресурсов системы. Многоядерные системы позволят пользователю указать n-1 ядер для n-ядерной системы. Использование этой функции в кластерах может ускорить обработку наборов данных с большими номерами файлов, но пользователям следует проконсультироваться со своим локальным руководством по кластерам, чтобы убедиться, что они не монополизируют ресурсы, необходимые другим пользователям системы.По умолчанию этот процесс остается однопоточным.
- Можно указать 3 уровня использования системы. Полное использование в пределах, указанных выше. Ограниченный режим, обеспечивающий доступность 50% системных ресурсов для других задач. Максимальный режим ограничен 75% системных ресурсов, это позволяет отдавать приоритет шифрованию, но позволяет использовать систему для легких альтернативных задач. Наконец, есть режим регулирования, который позволяет пользователю указать точное количество вычислительных потоков, которые будут использоваться.
- Cryptor может принимать структурированный каталог и выводить каталог с той же структурой, содержащий зашифрованные файлы вместе с контрольными суммами md5 для простых и зашифрованных файлов. Затем весь выходной каталог можно загрузить в EGA для архивирования.
- , как и в случае с входным путем, теперь можно указать выходной путь.
- параметры были обновлены в соответствии с обновленной функциональностью.
Обратите внимание, что графический интерфейс пользователя, который присутствовал в предыдущей версии EgaCryptor, был удален.| & поскольку их использование может помешать процессу архивирования в дополнение к возникновению проблем в конвейерах конечных пользователей.
Ниже мы представляем 3 возможных рабочих примера использования инструмента EgaCryptor
Шифрование одного файла:java -jar ../EGA-Cryptor_2_0_0.jar -i example1.bamШифрование нескольких файлов:
java -jar ../EGA-Cryptor_2_0_0.jar -i "example1.bam, example2.bam"Шифрование всех файлов в папке
java -jar../EGA-Cryptor_2_0_0.jar -i путь / к / target / каталог
По умолчанию EGA-Cryptor v2 создает новый выходной каталог, содержащий все зашифрованные файлы и соответствующие контрольные суммы в целевом каталоге. Если требуется конкретный каталог, это можно указать с помощью флага -o. Это можно сделать аналогично следующему примеру:
java -jar ../EGA-Cryptor_2_0_0.jar -i / путь / к / целевому / каталогу -o / путь / к / выходному / каталогу
Инструмент будет выводить три файла на каждый входной файл:
- * файл.gpg (зашифрованный файл)
- * file.md5 (файл значений суммы md5)
- * file.gpg.md5 (зашифрованный файл md5, файл значений суммы)
Все выходные файлы должны быть затем загружены в вашу учетную запись для отправки с помощью Aspera или FTP. Для выполнения такой операции следуйте документации на страницах FTP и Aspera.
Примечание
- Не забудьте указать путь к EgaCryptor.jar и запустить команду из каталога, в котором находятся файлы.
- EgaCryptor записывает файлы в исходный каталог вашей локальной файловой системы, поэтому у вас должны быть права на запись для исходного каталога.
Поиск и устранение неисправностей
Если вы сомневаетесь в правильности работы Cryptor, рекомендуется сначала обратиться к встроенной документации. Это можно сделать с помощью флага -h, как указано в следующей таблице.
Встроенные команды
Таблица: список параметров командной строки, встроенных в EGA-Cryptor v2.0,0.
Параметр командной строки Действие --------------------- ----------- -f Установите этот параметр, чтобы разрешить приложению создавать максимум потоки для использования полной мощности ядер / процессоров доступно на машине -h Используйте эту опцию для просмотра встроенного меню справки * -i Файл (ы) для шифрования. Укажите путь к файлу / папке или запятую разделенный путь к файлу, если несколько файлов в двойных кавычках -l Установите этот параметр, чтобы разрешить приложению создавать максимум потоков равняется 50% мощности ядер / процессоров доступно на машине -m Установите этот параметр, чтобы разрешить приложению создавать максимум потоков равняется 75% мощности ядер / процессоров доступно на машине -o Путь к выходному файлу.Это необязательно. Если не при условии, что выходные файлы будут сгенерированы в тот же путь, что и у исходного файла (по умолчанию: output- файлы) -t Установите этот параметр, если пользователь хочет управлять приложением в создать максимальное количество потоков, как указано. Приложение будет рассчитать нет. ядер / процессоров, доступных на машине & создаст потоки соответственно
Ошибки шифрования
UnixFileSystem.createFileExclusively (собственный метод)
Ошибка вызвана UNIX («UnixFileSystem.createFileExclusively (собственный метод)»). Похоже, что у пользователя нет доступа для записи в файловую систему, в которой находится загружаемый файл. EgaCryptor всегда записывает контрольные суммы MD5 в файлы перед их загрузкой на сервер, и эти файлы создаются в том же месте, где находится сам загруженный файл. Решение: устраните проблему с правами доступа к каталогу и повторно запустите команду.
Установить файлы политики юрисдикции неограниченной силы JCE
Файлы юрисдикции неограниченной силы политики JCE должны быть установлены в соответствии с вашей текущей версией Java
Если у вас все еще возникают проблемы с EGA-Cryptor v.2 после ознакомления с документацией обратитесь в службу поддержки EGA.
Анализ новой небета-версии программы-вымогателя Kraken Cryptor
Отчет об исследовании угроз FortiGuard Labs
FortiGuard Labs недавно обнаружила новые версии Kraken Cryptor Ransomware. Хотя бета-тег был удален из его конфигурации, в этом вымогателе все еще есть множество ошибок, и автор все еще постоянно изменяет его основные функции.
Этот вариант программы-вымогателя относительно новый и начал распространяться только в августе этого года. Очевидно, что эта программа-вымогатель все еще находится в стадии разработки, и что автор продолжает добавлять новые методы для улучшения ее функциональности. Однако, когда мы проанализировали последние образцы, мы обнаружили, что эти новые версии вредоносного ПО все еще слишком нестабильны, чтобы запускаться сами по себе. Они по-прежнему полны ошибок кодирования и даже имеют окно сообщений для отладки. После обнаружения нескольких непригодных для использования версий мы наконец смогли получить работающий образец.
В этой статье мы проанализируем новую «рабочую» версию Kraken Cryptor Ransomware, которая все еще находится в стадии разработки и пытается быть более стабильной. Для получения подробной информации об основном поведении этого вымогателя вы можете проверить здесь некоторую информацию, опубликованную McAfee в прошлом месяце для справки.
Версия 2.1, обнаружено несколько ошибок
Мы нашли версию 2.1 в начале ноября и вскоре поняли, что это версия с ошибками, которая всегда завершала свое выполнение, не заражая нашу тестовую систему.Причина не в новой функции антианализа в образце, а просто в том, что он проверяет несуществующий тег в своей конфигурации.
Рисунок 1: Ошибка чтения значения конфигурации в Kraken Cryptor Ransomware V2.1Это заставляет функцию всегда возвращать false, заставляя ее завершить выполнение с помощью вызова функции самоубийства, чтобы удалить себя.
После обнаружения этого ошибочного образца мы обнаружили еще один образец, помеченный как версия 2.1 всего через несколько часов после того, как ошибка, о которой мы только что говорили, была удалена. Однако эта версия включала еще одну ошибку, при которой функция автономной установки отключена из-за ошибки обработки логических исключений в функции получения геолокации. Эта функция подключается к ipinfo [.] Io / json для получения геолокации системы. Если ему не удается установить соединение, он перехватывает исключение и не присваивает никакого значения переменной геолокации, что приводит к сбою чтения конфигурации. В результате эту версию можно запускать только в онлайн-среде.
Еще один интересный момент заключается в том, что он также включает сообщение отлаженного исключения.
Рисунок 2: Отображение окна сообщения отладки в Kraken Cryptor RansomwareИнтересно, что мы обнаружили эти вызовы MessageBox в предыдущей версии 2.07. Однако в версии 2.1 мы обнаружили больше вызовов MessageBox. В течение следующих нескольких дней автор несколько раз модифицировал исходный код Kraken Cryptor Ransomware и распространял его, не удаляя его отлаженное сообщение или даже неисполняющие ошибки.
Мы также обнаружили, что в одной и той же версии есть разные адреса электронной почты поддержки в его конфигурациях, что наводит нас на мысль, что возможно, что эти два образца были скомпилированы разными авторами. В этом примере мы обнаружили только адрес электронной почты службы поддержки «middleeast [@] cock.li», в то время как все электронные письма службы поддержки в других примерах, которые мы упоминаем в этой статье, относятся к «onionhelp [@] memeware [.] Net»
Рисунок 3.Различные адреса электронной почты службы поддержки в разных образцах одной и той же версии (2.1)Версия 2.2 с HelloWorld!
Еще одна новая версия была выпущена вскоре после того, как мы проанализировали те версии 2.1 с ошибками. Эта обновленная версия работает нормально, хотя функция автономной установки все еще отключена. Все остальные функции почти идентичны, за исключением одной интересной функции, которую можно найти в начале основной функции.
Рисунок 4: Динамическая компиляция для HelloWorld!HelloWorld! Образец исходного кода теперь динамически скомпилирован и выполнен.Автор забавляется с исходным кодом.
Изменение функций после версии 2.1
Изменение конфигурации
Эта новая версия также имеет новый тег конфигурации «партнер» по сравнению с версией 2.1, который заменяет старый тег «работать».
Рисунок 5: Настроенный партнер и бета-версия (удалена в 2.1) с использованием строки API.Мы также обнаружили, что тег «beta» был удален из части конфигурации в версии 2.1. В версии 2.07 он был настроен как 1 в своей конфигурации, что означало, что он все еще находился в бета-версии. Однако в версии 2.1 он присвоил значение 0 в своем источнике для строки запроса API, что означает, что это соединение было не из бета-версии.
Еще одно изменение в его конфигурации — «help_voice».
Рисунок 6: help_voice в конфигурацииТакая конфигурация использует CScript для выполнения созданного файла сценария Visual Basic (.vbs), содержимое которого настраивается в теге «API». После запуска этого файла сценария он произносит текст, настроенный в конфигурации.
Рисунок 7: Выполнение CScript для вновь созданного .vbs для help_voiceПоследнее изменение — это тег skip_directories. Он пытается пропустить больше каталогов, чтобы ускорить этап шифрования.
На следующем изображении показаны изменения конфигурации между версиями 2.07, 2.1 и 2.2. Красный квадрат выделяет пропущенные каталоги в версии 2.1.
Рисунок 8: Изменения конфигурации для версий 2.07, 2.1 и 2.2В версии 2.2 мы также обнаружили, что «price» и «price_unit» теперь настроены как USD, а не BTC, как в предыдущей версии.
Больше никаких анти-smb и anti-rdp
На следующем изображении мы показываем, как внутренняя часть тега «module» сильно отличается от версии 2.04. Конфигурация для «smb» и «rdp» в антианализирующем модуле удалена из версии 2.07. Изначально в версии 2.04 теги smb и rdp использовались для блокировки smb и rdp-соединений в зараженной среде. Однако мы не можем найти эти функции блокировки ни в версии 2.1, ни в версии 2.2.
Рисунок 9: Конфигурация модуля в версии 2.04Подозрительная проверка SelfKill
Мы также обнаружили еще одну интересную проверку в обеих этих новых версиях. Kraken теперь проверяет конкретное имя пользователя, конкретный файл и даже конкретный IP-адрес или код страны.Если он соответствует проверкам, он перестанет заражать систему и удалится сам.
Рисунок 10: Проверка подозрительного самоуничтоженияНапример, указанный здесь IP-адрес «104.207.76 [.] 103» — это IP-адрес, расположенный в Неаполе, Италия.
Рисунок 11: проверка геолокации с помощью IPINFO apiЗаключение
Fortiguard Labs обнаружила последнюю новую версию Kraken Cryptor Ransomware, разработка которой началась с августа.В этой новой версии есть ошибки, из-за которых вредоносная программа не запускается или отключает некоторые предыдущие функции, обнаруженные в более старых версиях. Например, теперь отключен модуль офлайн-шифрования файлов. Мы также обнаружили, что, хотя файл конфигурации был изменен, основные функции не претерпели значительных изменений. Мы даже обнаружили, что автор удалил метку «beta» программы, хотя эта программа-вымогатель все еще является «бета-версией», поскольку она содержит множество очевидных ошибок в исходном коде.
FortiGuard Labs продолжит наблюдение за семейством вредоносных программ.
Решение
Пользователи Fortinet защищены от вредоносных угроз, упомянутых в этом отчете, с помощью следующих решений:
· Файлы обнаруживаются антивирусом FortiGuard
· Вредоносные и фишинговые URL-адреса блокируются нашей службой веб-фильтрации FortiGuard
IOC
Образцов:
f1334e51705ba874bf61e50e57288228c2f1d8334c4c385f3b454cc6c07c982a — MSIL / Filecoder.PI! Tr
d57d0689c2600b47faab6ac43e22daab1f76b4dfef35e7752a671b6bbe484b37 — MSIL / Filecoder.PI! Tr
f7358b103185458619e7203c3de6ed503374914318fc2aee52ed1d704b0cb0a8 — MSIL / Filecoder.PI! Tr
c915d380cc548876754f9c9f0c7ecb8ec6923f150cd77822ede330a2a9283d21 — MSIL / Filecoder.PI! Tr
6fc366dbc035226190c72d93962d2ad3c1c1f9c93fa1f63a9b31eb969d3f57d7 — MSIL / Filecoder.PI! Tr
30147aefa2a24c6c5efeef4b6f6980cfc04aa6cd7c85aff9a3cb8316a14bd2e7 — MSIL / Filecoder.PI! Tr
0857d5f714e88a2347affff4a440d9c76e6ddd18265e1c9a7d1c9966b0bfe61a — MSIL / Filecoder.PI! Tr
URL для сбора информации:
hxxps: // 2no [.] Co / 2FtQu5 — вредоносный
— = FortiGuard Lion Team = —
Зарегистрируйтесь для получения еженедельного обзора угроз FortiGuard.
Знайте свои уязвимости — узнайте факты о безопасности вашей сети. Оценка киберугроз Fortinet может помочь вам лучше понять: безопасность и предотвращение угроз, производительность пользователей, а также использование и производительность сети.
LEGO® Minifigure njo092 Общий шифровальщик
Вы любите приключения, тайны и действия? Тогда тема Ninjago для вас! Во вселенной Ниндзяго ниндзя борются со злом.
Тема Ниндзяго была представлена LEGO® в январе 2011 года. Эта тема основана на более ранней теме Ниндзя.
Ninjago вращается вокруг молодых ниндзя: Коула, Джея, Кая и Зейна. Все они были обучены мастером Сэнсэем Ву защищать остров Ниндзяго от злых сил.Каждый сезон выходит новая серия. Теперь в игре 11 сезонов, каждый со своей историей и соответствующими строительными наборами.
Хотите заказать отдельные фигурки Ниндзяго? ToyPro — это интернет-магазин номер 1, где продаются отдельные минифигурки и детали LEGO®. Так что вам не нужно покупать весь набор, если вам нужна только одна минифигурка.
Степени ниндзя минифигурок Кая, Коула, Джея, Зейна и Нии можно узнать по их одежде. Ученики ниндзя носят только пояс с символом их силы.Если ученик приручил своего первого дракона, он становится DX-ниндзя и носит мантию дракона (на торсе изображен плюющийся дракон).
Следующая степень — ниндзя кендо. Униформа кендо состоит из шлема и доспехов. Как ZX, Ниндзя носит наплечники ниндзя с ножнами для катан. Если ниндзя использует чистую энергию своей стихии, он появится как NRG Ninja. Помимо этих вариантов, есть также Кимон, Техно и еще несколько нарядов.
На стороне плохих парней тоже есть желанные варианты.Помимо армии скелетов Скалкина, есть Каменная армия, Серпентины, Ниндроиды, Призрачные Воины и Небесные Пираты.
Вы можете поискать в нашем интернет-магазине по названию фигурки из набора и посмотреть, какие минифигурки LEGO® Ninjago находятся в этом наборе.
ToyPro также предлагает обширную коллекцию конструкторов LEGO® Ninjago. Вы найдете храмы Ниндзяго, рынки, лодки, мотоциклы и, конечно же, Кружитцу. Аркадные капсулы с минифигурками. Мы предлагаем быструю доставку и отличное обслуживание клиентов.
Kitura / BlueCryptor: кроссплатформенная криптографическая библиотека Swift с использованием CommonCrypto / libcrypto
Кросс-платформенная криптографическая библиотекаSwift, полученная на основе IDZSwiftCommonCrypto.
ВАЖНОЕ ПРИМЕЧАНИЕ: Этот выпуск НЕ является полностью исходным кодом , совместимым с предыдущими выпусками. Бывают случаи, когда теперь генерируется исключений вместо вызова fatalError () фреймворком.Это означает, что в библиотеке больше исправимых ошибок, чем раньше. Единственный раз, когда вызывается fatalError () , — это указать либо на ошибку программирования , либо на неисправимую системную ошибку .
Примечание. В macOS и iOS BlueCryptor использует предоставленную Apple библиотеку CommonCrypto . В Linux он использует libcrypto из проекта OpenSSL .
Предварительные требования
Swift
- Swift с открытым исходным кодом
swift-4.0.0-RELEASE
набор инструментов (минимум ТРЕБУЕТСЯ для последней версии ) - Swift с открытым исходным кодом
swift-4.2-RELEASE
toolchain ( рекомендуется ) Набор инструментов - Swift включен в Xcode версии 10.0 (10A255) или выше .
macOS
- macOS 10.11.6 ( El Capitan ) или выше.
- Xcode версии 9.0 или выше с использованием одного из вышеуказанных наборов инструментов.
- Xcode версии 10.0 (10A255) или выше с использованием прилагаемой инструментальной цепочки ( рекомендуется ).
- CommonCrypto предоставляется macOS.
iOS
- iOS 10.0 или выше
- Xcode версии 9.0 или выше с использованием одного из вышеуказанных наборов инструментов.
- Xcode версии 10.0 (10A255) или выше с использованием прилагаемой инструментальной цепочки ( рекомендуется ).
- CommonCrypto предоставляется iOS.
Linux
- Ubuntu 16.04 (или 16.10, но проверено только 16.04) и 18.04.
- Один из перечисленных выше наборов инструментов Swift с открытым исходным кодом.
- OpenSSL предоставляется дистрибутивом. Примечание. Поддерживаются 1.0.x, 1.1.x и более поздние версии OpenSSL.
- При сборке необходимо установить соответствующий пакет libssl-dev .
Сборка
Для сборки Cryptor из командной строки:
% cd <путь-клону>
% быстрая сборка
Тестирование
Для запуска поставляемых модульных тестов для Cryptor из командной строки:
% cd <путь-клону>
% быстрая сборка
% быстрый тест
Начало работы
В том числе в ваш проект
Менеджер пакетов Swift
Чтобы включить BlueCryptor в пакет Swift Package Manager, добавьте его в атрибут dependencies
, определенный в вашем пакете .swift
файл. Вы можете выбрать версию с помощью параметров majorVersion
и minor
. Например:
зависимости: [
.Package (url: "https://github.com/IBM-Swift/BlueCryptor.git", majorVersion: , minor: )
]
Карфаген
Чтобы включить BlueCryptor в проект, использующий Carthage, добавьте строку в свой Cartfile
с организацией GitHub, названиями и версией проекта. Например:
github "IBM-Swift / BlueCryptor" ~> .<второстепенный>
Какао-Стручки
Чтобы включить BlueCryptor в проект, использующий CocoaPods, вы просто добавляете BlueCryptor
в свой Podfile
, например:
платформа: ios, '10 .0 '
цель "MyApp" делать
use_frameworks!
под "BlueCryptor"
конец
Перед запуском
Первое, что вам нужно сделать, это импортировать фреймворк Cryptor. Это делается следующим образом:
API
Криптор
Следующий код демонстрирует шифрование и дешифрование с использованием одноблочного режима CBC AES
с использованием дополнительной цепочки.
let key = CryptoUtils.byteArray (fromHex: "2b7e151628aed2a6abf7158809cf4f3c") let iv = CryptoUtils.byteArray (fromHex: «00000000000000000000000000000000») let plainText = CryptoUtils.byteArray (fromHex: "6bc1bee22e409f96e93d7e117393172a") var textToCipher = plainText if plainText.count% Cryptor.Algorithm.aes.blockSize! = 0 { textToCipher = CryptoUtils.zeroPad (byteArray: plainText, blockSize: Cryptor.Algorithm.aes.blockSize) } делать { let cipherText = попробуйте Cryptor (операция: .encrypt, алгоритм:.aes, параметры: .none, key: key, iv: iv) .update (byteArray: textToCipher) ?. final () print (CryptoUtils.hexString (от: cipherText!)) let decryptedText = try Cryptor (операция: .decrypt, algorithm: .aes, options: .none, key: key, iv: iv) .update (byteArray: cipherText!) ?. final () print (CryptoUtils.hexString (от: decryptedText!)) } catch let error { охранник let err = error as? CryptorError else { // Обработка ошибки, не связанной с шифрованием ... возвращение } // Обработка ошибки Cryptor ... (Типы выдаваемых ошибок см. В Status.swift) }
Дайджест
В следующем примере показано создание дайджеста MD5
как из строки
, так и из экземпляра NSData
.
let qbfBytes: [UInt8] = [0x54,0x68,0x65,0x20,0x71,0x75,0x69,0x63,0x6b, 0x20,0x62,0x72,0x6f, 0x77,0x6e, 0x20,0x66,0x6f, 0x78,0x20,0x6a , 0x75,0x6d, 0x70,0x73,0x20,0x6f, 0x76,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x6c, 0x61,0x7a, 0x79,0x20,0x64,0x6f, 0x67,0x2e] let qbfString = "Быстрая коричневая лисица перепрыгивает через ленивую собаку." // Нить... let md5 = Digest (используя: .md5) md5.update (строка: qfbString) пусть digest = md5.final () // NSData с использованием необязательной цепочки ... пусть qbfData = CryptoUtils.data (от: qbfBytes) let digest = Digest (используя:.md5) .update (данные: qbfData) ?. final ()
HMAC
Ниже показано создание SHA256
HMAC с использованием байтовых массивов для ключей и данных.
let myKeyData = "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" let myData = "4869205468657265" пусть ключ = CryptoUtils.byteArray (fromHex: myKeyData) пусть данные: [UInt8] = CryptoUtils.byteArray (fromHex: myData) let hmac = HMAC (используя: HMAC.Algorithm.sha256, key: key) .update (byteArray: data) ?. final ()
Ключевые производные
Ниже показано создание ключа с использованием пароля, соли, количества раундов и заданной длины производного ключа с использованием алгоритма SHA1.Затем он показывает, как сгенерировать String
из результирующего ключа.
let password = "пароль" пусть соль = соль пусть раунды: UInt = 2 пусть производноеKeyLen = 20 делать { let key = PBKDF.deriveKey (fromPassword: пароль, соль: соль, prf: .sha1, раунды: раунды, производная длина ключа: производная длина ключа) пусть keyString = CryptoUtils.hexString (от: ключ) } catch let error { охранник let err = error as? CryptorError else { // Обработка ошибки, не связанной с шифрованием ... возвращение } // Обработка ошибки шифратора ... (см. Состояние.swift для типов выдаваемых ошибок) }
Генерация случайных байтов
Ниже показано создание случайных байтов заданной длины.
пусть numberOfBytes = 256 * 256 делать { let randomBytes = попробуйте Random.generate (byteCount: numberOfBytes) } ловить { print ("Ошибка генерации случайных байтов") }
Коммунальные услуги
Cryptor также предоставляет набор служебных функций для работы с данными для преобразования данных из различных форматов:
- В byteArray (
[UInt8]
)- Из шестигранника
- Из строки UTF8
- Кому
Данные
- Из шестигранника
- Из байтового массива (
[UInt8]
)
- К
NS Данные
- Из шестигранника
- Из байтового массива (
[UInt8]
)
- К
NSString
- Из байтового массива (
[UInt8]
)
- Из байтового массива (
- В шестнадцатеричный список (
Строка
)- Из байтового массива (
[UInt8]
)
- Из байтового массива (
Также предоставляется API для заполнения массива байтов ( [UInt8]
), так что это целое число размером блока в байтах длиной
.
-
func zeroPad (byteArray: [UInt8], blockSize: Int) -> [UInt8]
-
func zeroPad (строка: String, blockSize: Int) -> [UInt8]
Ограничения
Следующий алгоритм недоступен в Linux, так как он не поддерживается OpenSSL .
Во всех случаях использование неподдерживаемых API или алгоритмов приведет к Swift fatalError ()
, завершению программы и должно рассматриваться как ошибка программирования.
Сообщество
Мы любим говорить о серверных Swift и Kitura. Присоединяйтесь к нашему Slack, чтобы познакомиться с командой!
Лицензия
Эта библиотека находится под лицензией Apache 2.0. Полный текст лицензии доступен в ЛИЦЕНЗИИ.
DIY вредоносных программ-шифровальщиков в виде веб-сервиса, обнаруженного в дикой природе — часть вторая
Данчо Данчев
В связи с тем, что в Интернете продолжает появляться самодельных вредоносных программ для самостоятельной работы, как новички, так и опытные киберпреступники могут легко запутать любой вредоносный образец в необнаруживаемом — с помощью сканирования на основе сигнатур, а не поведенческого обнаружения — вредоносного ПО, успешно обходящего средства защиты на основе периметра в настоящее время на месте.
В этом посте я расскажу о недавно запущенном сервисе, который дает возможность практически каждому, кто его использует, создавать необнаруженные вредоносные программы. Я подчеркну его ключевые факторы дифференциации и приведу образцы MD5, которые, как известно, были зашифрованы с помощью этой службы.
Подробнее:
Пример снимка экрана веб-службы шифрования вредоносных программ DIY:
Второй снимок экрана веб-службы шифрования вредоносных программ DIY:
Среди ключевых особенностей этой веб-службы шифрования вредоносных программ — автоматическое сканирование зашифрованных файлов, чтобы продемонстрировать клиенту, что файл действительно не обнаруживается большинством антивирусных решений, поддержка файлов x32 и x64, а также DLL, поддержка всех версий Windows от XP до Windows 8, а также повсеместная поддержка защиты от VMware / отладки.
Цена? 20 долларов США, при этом поставщик услуг утверждает, что файл останется незамеченным более 7 дней. Теперь, как он может рассчитать это, остается неясным, поскольку, как только его клиенты начнут распространять необнаруженные образцы, они в конечном итоге попадут в сенсорную сеть поставщика безопасности, так что все зависит от тактики уклонения от сенсора клиента, а не обязательно служебная функция.
Также стоит подчеркнуть тот факт, что в его нынешнем виде сервис не имеет возможности «инновационным» образом нарушить экосистему киберпреступности, в основном из-за отсутствия поддержки API (интерфейс прикладного программирования) , кое-что, что мы видели реализованным в конкурирующих сервисах.
В настоящее время мы в курсе следующих MD5s зашифрованную с помощью службы:
MD5: 8b9dbeb474375f703cb394c4b661122f
MD5: 7251862e224474899a2e60737cc745ef
MD5: de9ebb0bb5ee713e4815c35c64b14691
MD5: adf4df9e1383a99fe647eaa4b81ded13
MD5: 647627f810630ccdc7f30ddeca688d19
MD5: f1caa0212f85e8850b3a11234a2af1be
MD5: 5a2d1771acf1332c2b9ff93312ccd8b9
MD5: 2893f78fdf8245628473517317448acc
MD5.
Webroot SecureAnywhere пользователей проактивно защищены от этих угроз.
Вы можете узнать больше о Данчо Данчеве в его профиле LinkedIn . Вы также можете подписаться на в Twitter .
Об авторе
Сотрудники блога
Блог Webroot предлагает экспертную информацию и анализ последних тенденций в области кибербезопасности. Независимо от того, являетесь ли вы домашним или корпоративным пользователем, мы стремимся предоставить вам информацию и знания, необходимые для того, чтобы опережать сегодняшние киберугрозы.
Документация по мобильному решению Axway Appcelerator Платформа Appcelerator включает SDK, сервисы и инструменты для создания, тестирования и управления мобильными и облачными приложениями. | |||
Axway Appcelerator Studio IDE на основе Eclipse для быстрого создания, тестирования, упаковки и публикации мобильных приложений | Интерфейс командной строки Appcelerator Инструменты командной строки для разработки и публикации мобильных и облачных приложений | ||
Панель управления AMPLIFY Мониторинг и управление мобильными и облачными приложениями | Axway Mobile Analytics: использование Отслеживайте принятие и участие пользователей ваших приложений, чтобы понять, как ваше приложение используется | ||
Axway API Builder Создание и развертывание новых конечных точек API для использования любым клиентским приложением | Службы времени выполнения AMPLIFY Размещайте приложения, созданные с помощью API Builder и предварительно созданных служб, включая ArrowDB (объекты данных без схемы) и push-уведомления | ||
Мобильные серверные службы Mobile Backend Services предоставляет предварительно созданные, автоматически масштабируемые сетевые сервисы и объекты данных для ваших клиентских приложений | Axway Сплав Платформа MVC для быстрой разработки высококачественных мобильных приложений | ||
Axway Титановый SDK Разработка собственных, гибридных и мобильных приложений на основе единой кодовой базы | AMPLIFY Crash Analytics Отслеживайте сбои приложения, чтобы диагностировать проблемы. | ||
Axway Mobile Analytics: построитель запросов Функция Query Builder помогает создавать запросы к аналитическим данным, собранным из вашего мобильного приложения. |
Какие бывают типы программ-вымогателей?
Хотите верьте, хотите нет, программы-вымогатели существуют с 1980-х годов, но лишь сравнительно недавно они стали серьезной угрозой для современного бизнеса.Современные программы-вымогатели не позволяют пользователям получить доступ к их системе и / или их личным файлам, а блокировка сопровождается требованием денег.
Существует два основных типа программ-вымогателей, хотя каждый день могут отслеживаться гибриды и новые типы.
Программа-вымогатель
Криптовымогатель (также известный как шифровальщик) — это любая вредоносная программа, которая шифрует файлы, хранящиеся на компьютерах или мобильных устройствах, с целью вымогательства денег. Когда запускается атака шифровальщика, она «шифрует» содержимое файла, делая его нечитаемым.Затем злоумышленники будут оказывать давление на жертву, чтобы она заплатила непомерную сумму денег в обмен на ключ дешифрования, необходимый для «расшифровки» файла. Опасно то, что нет гарантии, что злоумышленники даже выпустят ключ дешифрования после того, как оплата будет произведена.
Крипторы обычно встречаются через файлы или ссылки, доставляемые по электронной почте, в мгновенных сообщениях или в социальных сетях. Другой распространенный метод доставки — это троянские загрузчики или комплекты эксплойтов — это программы или строки кода, которые тайно загружают, устанавливают и запускают вредоносные файлы с удаленного сервера.После того, как шифровальщик установлен и запущен на устройстве, он начинает поиск целевых файлов для шифрования.
Одним из наиболее вредоносных шифровальщиков является Petya, семейство программ-вымогателей, которые шифруют основную загрузочную запись (MBR) компьютера. MBR — это данные, которые определяют, как и где находится операционная система на компьютере, чтобы ее можно было загрузить в оперативную память (RAM) компьютера. Чтобы все остальные части компьютера работали, сначала должна быть запущена MBR. Излишне говорить, что делая его недоступным, делает весь компьютер и всю информацию, которую он несет, бесполезной.
Пока что самой заметной жертвой Пети была Reckitt Benckiser, компания, стоящая за брендами Dettol, Nurofen и Durex. Он потерял около 100 миллионов фунтов стерлингов дохода. Анализ атак 2017 года, проведенный Microsoft, показал, что жертвами стали более 12500 человек из более чем 65 стран и что распространение Пети началось с программного обеспечения для налогового учета украинской компании. Более поздняя версия Petya не просто шифрует компьютерные данные, она полностью стирает их навсегда.
Шкафчики для экрана
В отличие от шифровальщиков, программа-вымогатель для шкафчиков (также известная как программа-вымогатель для блокировки экрана) не шифрует информацию, хранящуюся на устройстве, для предотвращения доступа.Вместо этого он просто предотвращает доступ жертвы к устройству, оставляя информацию относительно нетронутой. Блокировщики экрана более примитивны, чем шифровальщики-вымогатели, и в первую очередь они играют на том, насколько убедительно киберпреступники развертывают свои атаки.
Одной из самых известных атак на блокировку экрана в истории стала афера Metropolitan Police, которая впервые появилась в 2012 году. Когда эта программа-вымогатель атакует компьютер, из ниоткуда появляется навязчивое полноэкранное сообщение с угрозой жертве.В этом сообщении утверждается, что жертва просматривала и хранила запрещенную порнографию, и чтобы разблокировать свой компьютер, ему необходимо заплатить штраф. Некоторые версии этого вымогателя даже берут под контроль веб-камеру компьютера, чтобы снимать жертву и использовать отснятый материал в качестве инструмента для дальнейшего мошенничества.
Статья по теме: Проверьте этот список бесплатных расшифровщиков программ-вымогателей
Борьба с программами-вымогателями с помощью управляемых служб
Компетентные поставщики управляемых услуг (MSP), такие как аутсорсинг IT, обеспечивают комплексную защиту сети и данных, которая защитит ваш бизнес от программ-вымогателей.