You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
4.1 KiB
76 lines
4.1 KiB
КРИПТЕР
|
|
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
|
|
|
|
Нужно написать криптер - программу, содержащую в себе нагрузку в виде ПРОИЗВОЛЬНЫХ .exe или .dll, маскирующую и запускающую ее.
|
|
|
|
Термин "Стаб" - это холостая оболочка криптера без нагрузки.
|
|
|
|
ТРЕБОВАНИЯ
|
|
1. Сборка в обе разрядности (32/64); нагрузка той же разрядности что и стаб.
|
|
2. Если нагрузка - .dll, она запускается БЕЗ CreateProcess. Путем развертывания в памяти текущего процесса, настройки reloc'ов, импорта/экспорта, и вызова точки входа.
|
|
3. Если нагрузка - .exe, запуск бесфайловой техникой. Предпочтительно ProcessHollowing.
|
|
При этом должна происходить подмена родительского процесса.
|
|
4. Стаб должен маскировать нагрузку:
|
|
4.1. Добавлять "левый" импорт, мимикрируя (например) под GUI-программу (в обилии вызовы из GDI), или COM-компонент
|
|
4.2. Содержать "шумовую" логику: отрисовка окон, вызов COM-объектов, итд. Логика, разумеется, отключена и никогда не срабатывает, но АВ должен думать, что вот-вот и мы закончим инициализацию и тогда
|
|
4.3. Можно добавлять ресурсы - левые изображения, текстовые строки итд.
|
|
4.4. Нагрузка зашифрована и/или сжата. Можно использовать простейшее XOR-шифрование с длинной гаммой. Алгоритм сжатия - самый легковесный в плане размера и простоты самого алгоритма.
|
|
4.5. Нагрузка имеет высокую энтропию, а основная логика - низкую. Следует равномерно распределить нагрузку по разным секциям (.text, .data, .rdata итд).
|
|
Таким образом нужно обойти детекты АВ по энтропии.
|
|
5. Выполнение требований "оформление кода и сборок"
|
|
6. Должны быть профили сборки как под LLVMO, так и под Microsoft C++.
|
|
7. Меры по обходу песочниц, задержки запуска нагрузки, на первом этапе опциональны.
|
|
На втором этапе они станут обязательными.
|
|
|
|
Режим использования криптера предполагает генерацию сотен файлов с разными хэшами в день.
|
|
У всех этих файлов должны быть РАЗНЫЕ шумовые строки, ресурсы, если получится - маскирующая логика.
|
|
То есть требуется высокий и АВТОМАТИЗИРОВАННЫЙ уровень полиморфизма.
|
|
То есть, всю эту рандомизацию предлагается внести в систему сборки (в виде событий сборки или билдера).
|
|
|
|
ОФОРМЛЕНИЕ СБОРКИ
|
|
|
|
Цель всех дальнейших действий - подключение автоматической сборки на билд-машине, с целью выдавать большой объем сборок без участия человека.
|
|
За счет объема процент брака на выходе будет иметь меньшее значение (можно будет выбрать 1 из 10 годный крипт).
|
|
|
|
8. Из сборки должны быть исключены ручные операции.
|
|
Все подготовительные, промежуточные и финальные шаги должны быть оформлены как События сборки (правым тапком на проекте в MSVS - События сборки).
|
|
Сюда относятся прошивки байт-массивов unsigned char payload[] = {..} из бинарных файлов, кодирование и упаковка нагрузки,
|
|
затирание строк в финальном бинарнике, задание имени для финального бинарника, и любые подобные манипуляции.
|
|
Билд должен собираться одним действием.
|
|
9. Должен иметься скрипт сборки. Например, build.bat (примерный вариант см. в приложении).
|
|
Так чтобы можно было сборку включить в автоматизированную систему сборки на билд-машине.
|
|
10. Под каждый тип нагрузки должен иметься профиль сборки. Например, Release_Dll_Payload1, Release_Exe_Payload1 для нагрузки 1,
|
|
Release_Dll_Payload2, Release_Exe_Payload2 для нагрузки 2 и так далее.
|
|
Профиль сборки позволяет задавать независимый набор макросов препроцессора.
|
|
Макросами препроцессора можно задать передачу параметров в нагрузку, способ ее развертывания, и прочее.
|
|
Подобный подход применяется для систем сборки наподобие CMake.
|
|
|
|
ПРИЛОЖЕНИЕ 1: СКРИПТ СБОРКИ
|
|
|
|
echo Build started %DATE% %TIME%
|
|
|
|
rem НАСТРАИВАЕМ ПУТИ ПОД СЕБЯ
|
|
rem ЛОКАЛЬНЫЕ ИЗМЕНЕНИЯ В ЭТОМ ФАЙЛЕ В GIT НЕ КОММИТИТЬ!
|
|
|
|
set msbuild="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe"
|
|
set sln=D:\Projects\project\project.sln
|
|
set buildlog=project.log
|
|
|
|
rem type nul > %buildlog%
|
|
echo Build started %DATE% %TIME% > %buildlog%
|
|
|
|
:buildmain
|
|
set buildprofile="Release|Win32"
|
|
%msbuild% %sln% /Clean %buildprofile%
|
|
%msbuild% %sln% /Build %buildprofile% /Out %buildlog% || goto builderr
|
|
|
|
:over
|
|
echo Build finished successfully %DATE% %TIME%
|
|
echo Build finished successfully %DATE% %TIME% >> %buildlog%
|
|
|
|
exit(0)
|
|
|
|
:builderr
|
|
echo Build %buildprofile% failed %DATE% %TIME%
|
|
echo Build %buildprofile% failed %DATE% %TIME% >> %buildlog%
|
|
exit(1)
|