как заблокировать внедрение dll с помощью Blackllist/путем уникальной идентификации dll?

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

У кого-нибудь есть идеи или указатели относительно того, как этого можно достичь??

Спасибо, Дипак :)


person Deepak Mahale    schedule 06.04.2016    source источник
comment
Возможный дубликат Предотвратить внедрение Dll из Dll C++   -  person RJFalconer    schedule 06.04.2016


Ответы (1)


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

Редактировать: Из вашего комментария это на самом деле не так! Похоже, они ведут черный список и делают некоторые тайный вызов NtMapViewOfSection для предотвращения загрузки dll (за что я благодарен, что мне никогда не приходилось использовать Windows API):

#if defined(_WIN64)
// Interception of NtMapViewOfSection within the current process.
// It should never be called directly. This function provides the means to
// detect dlls being loaded, so we can patch them if needed.
SANDBOX_INTERCEPT NTSTATUS WINAPI BlNtMapViewOfSection64(
    HANDLE section, HANDLE process, PVOID *base, ULONG_PTR zero_bits,
    SIZE_T commit_size, PLARGE_INTEGER offset, PSIZE_T view_size,
    SECTION_INHERIT inherit, ULONG allocation_type, ULONG protect);
#endif
// Replace the default NtMapViewOfSection with our patched version.
#if defined(_WIN64)
  NTSTATUS ret = thunk->Setup(::GetModuleHandle(sandbox::kNtdllName),
                              reinterpret_cast(&__ImageBase),
                              "NtMapViewOfSection",
                              NULL,
                              &blacklist::BlNtMapViewOfSection64,
                              thunk_storage,
                              sizeof(sandbox::ThunkData),
                              NULL);

Помимо подхода Chromium, существует также ряд сторонних приложений, которые усложняют загрузку динамических библиотек, например. Arxan GuardIT.

Сборки .Net также могут быть сильно подписанными с закрытым ключом, то приложение будет загружать только dll, подписанные этим ключом.

person RJFalconer    schedule 06.04.2016
comment
Нет, они не ведут белый список. Я проверил, что code.google.com /p/chromium/codesearch#chromium/src/chrome_elf/ . Они могут каким-то образом идентифицировать dll из черного списка даже после модификации... - person Deepak Mahale; 06.04.2016
comment
Таким образом, беглый взгляд на вашу собственную ссылку показывает, что магия заключается в этой функции Windows NtMapViewOfSection. Я не разработчик winapi, поэтому не могу комментировать, почему это работает, но это то, что они делают. Я добавил соответствующие фрагменты, чтобы ответить, если вы хотите копать дальше. - person RJFalconer; 06.04.2016