Методы детектирования сендбоксов так же востребованы у разработчиков защит, как и методы антиотладки: если программа работает в изолированной среде, это может означать, что ее поведение хотят исследовать реверсеры или вирусные аналитики, либо это означает, что наша программа изолирована защитными средствами решений internet security. Так или иначе, определение факта изоляции программы — полезный навык, который помогает и разработчикам защит, и вирмейкерам. В этой статье я покажу, как распознавать sandbox-изоляцию и запуск под гипервизорами разных типов.

INFO

Sandbox (песочница) — изолированная программная среда, в которой задается и контролируется набор ресурсов для запущенной внутри нее программы. Как правило, ограничиваются и фильтруются вызовы WinAPI, которые отвечают за доступ к оборудованию, процессорным ядрам, определение размера памяти, а также доступ к сети и привилегированным средствам операционной системы. Сендбоксинг часто используется для запуска небезопасного кода и для анализа программ.

Есть ли надежные средства детекта песочниц и виртуалок?

Загрузка ... Загрузка ...
 

Проверяем запущенные процессы

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

DWORD getPIDproc(char * pProcName)
{
    HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if(pHandle == NULL) return 0;

    PROCESSENTRY32 ProcessEntry;
    DWORD pid;
    ProcessEntry.dwSize = sizeof(ProcessEntry);
    bool Loop = Process32First(pHandle, &ProcessEntry);

    if(Loop == NULL) return 0;

    while (Loop)
    {
        if (strstr(ProcessEntry.szExeFile, pProcName))
        {
        pid = ProcessEntry.th32ProcessID;
            CloseHandle(pHandle);
            return pid;
        }
        Loop = Process32Next(pHandle, &ProcessEntry);
    }
    return 0;
}

Детект песочницы Comodo Internet Security:

if(getPIDproc("cmdvirth.exe")) std::cout << "Comodo sandbox detected!\n";

Процесс cmdvirth.exe обеспечивает виртуализацию в Comodo Internet Security. По тому же принципу можно задетектить песочницу Sandboxie:

if(getPIDproc("SbieSvc.exe")) std::cout << "Sandboxie detected!\n";

Я думаю, что принцип понятен. 🙂 Если процесс не будет найден, функция вернет 0, и условие if не будет выполнено. Также функция вернет 0, если возникнут проблемы с получением первого процесса в системном снапшоте функцией Process32First либо с получением самого снапшота функцией CreateToolhelp32Snapshot.

 

Проверяем подключенные модули в нашем адресном пространстве

Другая интересная идея — просмотреть подключенные модули в адресном пространстве нашей программы на предмет известных модулей песочниц. Сделаем это напрямую из нашего процесса при помощи WinAPI-функции GetModuleHandle:

BOOL checkLoadedDll(LPCWSTR pDllName)
{
    HMODULE hDll = GetModuleHandle(pDllName);
    if(hDll) return TRUE;
}

Проверка на песочницу Comodo Internet Security:

if (checkLoadedDll(L"cmdvrt64.dll")) std::cout << "Comodo sandbox detected!\n";

Или проверим на Sandboxie:

if (checkLoadedDll(L"sbiedll.dll")) std::cout << "Sandboxie detected!\n";

Функция GetModuleHandle() проверяет наличие DLL в адресном пространстве вызывающего процесса. Если функция не находит модуль, то возвращает ноль, условие не срабатывает.

Чтобы узнать список подключенных модулей в стороннем процессе, нужно получить его хендл, вызвав функцию WinAPI OpenProcess, затем перечислить все подключенные к процессу модули с помощью функции EnumProcessModules (в нее следует передать полученный хендл) и, наконец, получить название модуля с помощью функции WinAPI GetModuleFileNameEx.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


4 комментария

  1. 0ri0n

    27.02.2018 at 13:42

    Интересно. запустить приложение с названием Idapro64.exe — на сколько это будет эффективнее антивирусников )))

  2. john_

    12.03.2018 at 15:16

    Годные статьи под хайдом)

  3. haje

    01.06.2018 at 01:45

    Такой себе метод детекта по мышке. Сейчас эмулируют движение мышки. Есть гораздо лучше: строятся векторы между каждым перемещением мышки, после чего считается «неравномерность» и по этому параметру делается вывод о присутствии песка.

    Не знаю можно ли тут ссылки прикреплять, гуглить по запросу «Анти-песочница на базе статистического анализа»

    • haje

      01.06.2018 at 01:46

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

Оставить мнение

Check Also

Эксплоиты в десятку. Обзор самых интересных докладов с мировых ИБ-конференций

В последние годы мы отучились воспринимать Windows как нечто невероятно дырявое. Эта опера…