Avanguard: The Win32 Anti-Intrusion Library

Тема в разделе "WASM.PROJECTS", создана пользователем HoShiMin, 17 мар 2019.

Метки:
  1. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    HoShiMin,

    > визор не сумеет отличить валидные либы от недоверенных

    Это задача не среды исполнения. Через эту технику можно блокировать все передачи управления и связать указатели(блокировать OP-инжект).
     
  2. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    В том и дело, что у меня задачи хоть и сходные, но применение визора не так критично, когда есть десятки обходных путей, намного более простых, чем смена контекста и тем более ROP'ы
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    HoShiMin,

    > А как насчёт DeviceGuard/HVCI?

    Я не знаю как это работает, но сомнительно. Так как обратный инжект не зависит от каких то железячных фич.

    > смена контекста и тем более ROP'ы

    Тогда что вы строите за защиту, от пары штатных инжектов в лабораторных" условиях ?
     
  4. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    Именно от них, потому что именно эти инжекты и будут использовать для внедрения своих библиотек.
    Просто абстрагируемся от деталей и подумаем: много ли вообще людей представляют, как собрать цепочку гаджетов, чтобы выполнить нужный код? Да таких единицы процентов по соотношению с остальной массой кодеров, которые просто возьмут ExtremeInjector, даже не представляя, как он работает внутри. Вот почему я говорю лишь о достаточной защите. Потому что именно штатные инжекты в лабораторных условиях и используются в "широком продакшне".
    --- Сообщение объединено, 20 мар 2019 ---
    Я ничуть не умаляю необходимость визора для защиты от перехвата потока команд, но банальный пример: ставят SetWindowsHookEx - и что дальше? Оконный поток сам же и побежит загружать либу, совершенно легитимно. Визор в данном случае полезен как защита для защиты, чтобы не сняли фильтры, но фундамент - именно фильтры на точках входа (а в случае контекстов, точках выхода) инжектов.
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    HoShiMin,

    Нигде это не используется. Потому что это блокирует сама система. Зачем что то впрыскивать в ваш процесс, как минимум достаточно создать его копию используя загрузчик, так почти всегда малварь делает. А сами инжекты существуют только в виде OP-атак, других нет.
     
    TermoSINteZ нравится это.
  6. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    Хм, не совсем понял.

    Приведу реальный пример: процесс джавы. В него инжектят дллку (любыми способами), она аттачит поток к JVM и получает возможность работать с виртуалкой через интерфейсы JNI/JVMTI (набор нативных функций в JVM для управления поведением виртуалки). После этого подгружают джава-класс специальной функцией JVM_DefineClass.
    Нам нужно любыми способами предотвратить загрузку джава-класса в виртуалку.
    Используемые инструменты для внедрения дллки - инжектор в ProcessHacker'e (пока его не вырезали), пресловутый ExtremeInjector, довольно часто AppInit_DLLs, чуть пореже - SetWindowsHookEx. Чрезвычайно редко - апц и контексты. И ни разу я не видел, чтобы кто-то использовал какой-нибудь ROP, чтобы сделать то же самое. Вот и пример, где используются штатные инжекты в лабораторных условиях. И что в таких случаях делать?

    Здесь не банковский софт, на внедрение в который тратятся квинтиллионы долларов и все возможные виды атак, включая аппаратные. Здесь самые банальные, затёртые до дыр книжные академические инжекты дллок.
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    HoShiMin,

    > Хм, не совсем понял.

    Так как доступ к уже созданному процессу как то ограничен, то создаётся клон процесса, на что нужны меньшие права. Обычно там окружение процесса не запускается, а проецируются свои образы и запускаются. Это классический путь запуска малвари.
     
  8. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    В том и дело, что нет. Пользователь может запустить процесс с ограниченными правами, работая под учёткой хоть NT_AUTHORITY/System. Он может делать с процессом совершенно всё, что пожелает (ObRegisterCallback пока не рассматриваем), поэтому и не требуются настолько изощрённые методы внедрения.

    Фактически, в коде любого процесса зашит LoadLibrary, которому можно совершенно документированно и легально передать любой путь и заставить выполниться. Но это не нравится самому процессу, поэтому он сам режет эти пути, минимизируя возможность что-то подгрузить легально, оставляя только истинно хакерские методы.
    --- Сообщение объединено, 21 мар 2019 ---
    Это я к тому, что зачем извращаться с лоадерами и прочим, если достаточно прописать дллку в AppInit_DLLs, и процесс сам её подгрузит?
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    HoShiMin,

    Это всё на мой взгляд обсуждение по типу сам защиту придумал сам обошёл и так рекурсивно. Против лома нет приёма, если нет другого лома. Это просто смысла не имеет.
    Как уже говорил защита должна блокировать обратные атаки. А эти инжекты - открыл процесс и setcontext/queueapc/etc это тут в виде обучалок. Я не помню даже когда последний раз такое видел.
     
  10. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    Тут ещё зависит от сферы, в которой работает защищаемое приложение, есть ли физический доступ к машинке с ним и т.д.
    В моём случае приложение работает на машинке пользователя, он может делать с ним что угодно, и в таких условиях я просто не вижу смысла городить огород с контекстами (не говоря уже про обратные атаки), если банальный CreateRemoteThread(LoadLibrary) сделает всё необходимое.

    Я с вирусологией не связан, поэтому для меня применение ROP'ов в новинку, потому что совершенно всегда любой из шаблонных инжектов в моих условиях отработает без проблем. Просто смысла нет ткать простыню из цепочек ропов, если то же самое делается в две строчки библиотечных функций. А так как именно эти инжекты и используются в нашей среде, то и защищаюсь от них, благо все их легко задетектить, и буду очень сильно удивлён, если однажды увижу в применении что-то сложнее оконных хуков или апп-инитов
     
  11. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    467
    многие ав вендоры юзают luajit ) вполне себе норм считаю. никто не будет юзать твой дсл, нахер он нужен, новое никто не любит учить.

    интересная дискуссия. ТС я думаю из мира читов/античитов судя по описаниям. обычно там все через лаунчер. те ты говоришь лаунчеру что ему запускать и он стартует огороженные процесс игры. в км он передает пид игры и список тех кто может его открыть, создать потоки итд (фильтрует на базе обколбаков), мониторит список софта который может запускать одновременно, тестовый режим, аппинит просто отрубается для такого процесса, есть мета инфа о составе дистра, чтобы левого не подложили и не запатчили.. короче это такое.. нового ты тут не придумаешь. но если запилишь стабильное и опенсорс, то может это будет успех.

    вот метода инди как раз может с этим помочь. НО! слишком много надо решить чтобы это юзать. он для 32 битов не все решил, а для 64 битов и не начал еще. хз стоит ли прорабатывать. HoShiMin ты сам обозначил в переписке проблемы - капец это долго решать. И главное чтобы стабильно и везде работало и было совместимо с кучей софта. Не понятно будет ли профит.
     
  12. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    superakira,

    Принципиальной разницы между 86-64 никакой нет, все механизмы и алгоритмы теже самые. Даже на 86 отладка заняла очень много времени(большая часть ошибок трудно разбираема, так как из за не корректной обработки событие получается отложенным; к примеру инструкция не верно декодирована и после тысяч итераций возникнет проблема, которую трудно выявить), стрёмно подумать даже как это будет на 64..

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

    К примеру задачу по поиску EP, которая на кл я так и не решил, точнее я к ней не возвращался. Так как нужно серьёзно покодить, реализовав тот самый граф указателей(PFG), который нужен для защиты от OP. Это довольно сложная задача. Когда это напишу, тогда вернусь к нескольким задачам, в частности и по OP.
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    Новость. Реализовать нт анклав в юм возможно. Это значит что можно протектить всё. Я покажу если получится.
     
  14. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    Гут, ждём
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.354
    HoShiMin,

    Возможен сервисный перезапуск. Это сложно, но сам механизм следующий. У сервиса есть прототип, в нём указатели. Тут проблема первая определить что значение указатель. Наследование требует слишком много памяти(1/8 АП).
    Структуры растут вниз(такое использовалось RLDE).
    Выборка доступна из юм - #GP(сторожевые страницы). Тогда у сервиса есть прототип, части которого растут вниз во множестве пограничных областей. Это позволяет определить указатели и размеры структур. Но это значительная работа, так будет множество скрытых нюансов.
    Таким же путём можно определить число сервисных параметров(уже практически проверено), это работает.
     
  16. Rel

    Rel Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    2.111
    в венде есть встроенные интерпретаторы JScript и VBScript, загружаемые и расширяемые через COM, гуглить на тему интерфейса IActiveScriptHost...
     
  17. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    Indy_, честно говоря, не понял ничего. Какой сервис? Что такое "сервисный перезапуск"? Какие указатели? Где "в нём"? Почему нужно определять, что значение - указатель? От чего наследование и зачем? Какие структуры растут вниз? Что такое RLDE?

    Что конкретно нужно сделать, чтобы доступ к заданному участку памяти имел только процесс\поток? Судя по #GP, ставим на страницу PAGE_GUARD (или вообще страницы нет в памяти или она лежит в другом месте и\или сжата\закриптована), а при обращении кода к ней ловим эксепшн и подкачиваем страницу с диска или меняем права на R/W, если к странице обращается доверенный поток. Правильно понимаю? Или какая вообще идеология этих анклавов? Если идея верная - то VirtualProtectEx/Read[Write]ProcessMemory сработает без проблем, если страница физически загружена в процесс

    Гут, гляну
     
    Последнее редактирование: 13 апр 2019 в 22:36
    q2e74 нравится это.
  18. hiddy

    hiddy New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2019
    Сообщения:
    16
    Мощная штука! Проверил парочку км-инжекторов, ни один не справился.
     
    HoShiMin нравится это.
  19. vx1d

    vx1d Member

    Публикаций:
    0
    Регистрация:
    13 дек 2016
    Сообщения:
    98
    а отладчиком windbg можно приатачица к защищенному процессу в invasive/noninvasive режимах отладчика?
     
  20. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    244
    Адрес:
    Россия, Нижний Новгород
    Антиотладку ещё не встраивал, можно