1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Avanguard: The Win32 Anti-Intrusion Library

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

Метки:
  1. Indy_

    Indy_ Well-Known Member

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

    > Судя по #GP, ставим на страницу PAGE_GUARD

    Если сервис обратится к невалид области памяти, по произойдёт ошибка. Выборка не контролируется в другом режиме. Тогда нужно знать все указатели и размеры структур в сервисных параметрах. Это можно сделать через сторожевые страницы. Каждый указатель из параметров сервиса устанавливается на границу страницы RW-GUARD и сервис запускается. Он возвращает #GUARD_PAGE_VIOLAT. и определить куда произошло обращение можно по снятому атрибуту GUARD. Тогда блок данных связанный с указателем смещается вниз на один байт и сервис перезапускается. Так определяется размер текущей структуры по указателю, разумеется они могут быть вложенными. Основная проблема это проверка указателей, так как нельзя изменять в параметрах сервиса не указатели. При такой реализации можно полностью область(нп секцию или образ) удалить из памяти.
     
    HoShiMin нравится это.
  2. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    251
    Адрес:
    Россия, Нижний Новгород
    Теперь понял. Уже пробовал сделать концепт?
     
    galenkane нравится это.
  3. hiddy

    hiddy New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2019
    Сообщения:
    19
    Глядя на исходный код, не могу придумать, как из под юзверя это дело обойти без атаки на сам античит... Чисто теоретически, смена контекста в режиме ядра должна сработать же ?
     
  4. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    251
    Адрес:
    Россия, Нижний Новгород
    Она и в юзермоде сработает, смотря что будешь делать дальше и какие функции вызывать - есть вероятность, что где-то спалишься
    --- Сообщение объединено, 18 апр 2019 ---
    Пример шелла, который сработает и не спалится сам по себе, пока из него не вызовут функцию, на которой стоит проверка стактрейса (NtContinue, NtSetContextThread, LdrLoadDll):
    https://github.com/HoShiMin/Avanguard/blob/master/AvnSample/AvnSample.cpp#L70-L374
    --- Сообщение объединено, 18 апр 2019 ---
    И на очереди проверка адресного пространства по таймеру на предмет регионов памяти, которые мы не выделяли
     
    galenkane, q2e74 и hiddy нравится это.
  5. Indy_

    Indy_ Well-Known Member

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

    > Уже пробовал сделать концепт?

    Да, вот пример https://yadi.sk/i/qIDXlVbjQQM9WQ
    Сервисные параметры накапливаются в буферах и выборка в исходные области не происходит. Появился и первый косях при тестах - в одной из версий ос происходило обращение сразу к двум областям. Я уже в ядро полез искать как такое возможно.. оказалось это авер avg из своих кривых хуков в сст память трогает, от них всегда проблемы.
     
    q2e74 и HoShiMin нравится это.
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    2.429
    На проработку алгоритмов ушло несколько недель. Это всё весьма печально, что ни у кого не хватило скилла взяться за реализацию. Тс ты в том числе, не смотря на то, что всё весьма хорошо описано, ты не ушёл дальше примитивных хуков.

    Реализовано наследование указателей, при отладке всё работает стабильно, как запланировано.

    Я уже описывал решение по OP, то же самое наследование необходимо и для реализации нт-анклавов.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    2.120
    стареешь... это нормально...
     
  8. Indy_

    Indy_ Well-Known Member

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

    Задача сложная, очень обширная область для разработок. Я покажу тестовый пример на днях. Важно что задача принципиально решаема, это проверено тестами. Ранее я полагал что решение невозможно в юм. Я ошибался.
     
  9. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    251
    Адрес:
    Россия, Нижний Новгород
    Но и задачи визор решает совсем другие, нежели фильтры на функциях. Как ты и говорил, защита от инжектов, против которых я ставлю фильтры - не задача визора, а мне в первую очередь надо защититься именно от них.

    На самом деле, ты меня уже убедил, что визор - классная вещь, вопрос только в целесообразности и времени на реализацию. У меня висят ещё и другие проекты - гипервизор для VT-x и скрытные хуки в юзермоде и ядре, доработка минифильтра, чтобы соответствовать требованиям Verifier'а (оказалось, что он ругается на IoVolumeDeviceToDosName в PreCreate, и вот что хочешь с этим - то и делай), не считая совершенно отвлечённых проектов на джаве (которые и делаю не для себя).

    В общем, я бы с радостью попробовал всё, но нет столько времени.
     
    galenkane нравится это.
  10. Indy_

    Indy_ Well-Known Member

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

    > Как ты и говорил, защита от инжектов, против которых я ставлю фильтры - не задача визора

    Я бы давно это крутнул под dye, если бы был твой рабочий билд. Никакую новую инфу из этого мы не получим.

    > требованиям Verifier'а

    Недавно что то запускал под юзер верифером. Валилось на выделении памяти - кривой хук верифера, он обрабатывал NtAllocVM и возвращал невалид адрес. При этом я сразу косяк не обнаружил, так как забыл что вр патчит импорт, а фильтр через него вызывает функцию. Эта фигня слишком кривая, этот механизм запускать не следует. Оно если запущено портит весь нэйтив.
    --- Сообщение объединено, 24 апр 2019 ---
    Кстате думаю это будет 5-й публикацией по выборке, именно этой части не хватает для полной картины.
     
  11. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    251
    Адрес:
    Россия, Нижний Новгород
    В юзермоде ещё ладно, а в ядре, всё же, стоит довериться ему. По крайней мере, я хотя бы буду уверен, что ничего нигде не утекает, все хэндлы закрыты, ссылки задереференсены и в фильтрах не происходит ничего неожиданного. Заморачиваюсь с валидностью (особенно, учитывая качество кода паблик-драйверов на unknowncheats, где ридонли-память делают записываемой, сбрасывая WP-флажок!).

    А про какие публикации ты говоришь? Ты где-то пишешь и выкладываешь статьи?
     
    galenkane нравится это.
  12. Indy_

    Indy_ Well-Known Member

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

    > Ты где-то пишешь и выкладываешь статьи?

    Вот же новость, да https://wasm.in/blogs/author/indy_.17347/

    Эта тема заканчивается на наследовании выборки. Хотя это всё к вашей теме имеет лишь косвенное отношение.
     
  13. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    342
    Ждем. В моем окружении людей способных на подобный полет мысли нет, и думаю не только в моем.
     
  14. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    251
    Адрес:
    Россия, Нижний Новгород
    Indy_
    Почитал статьи - в общих чертах (в общих!) примерно так визоры и представлял, но в деталях видна огромная работа.
    В любом случае, чтобы въехать в тему и говорить предметно, надо брать и писать свою реализацию хотя бы самого простого визора-эмулятора, который сумеет выполнить некий поток инструкций, и дальше уже двигаться в сторону защиты памяти.
    Когда появится время, попробую написать нечто подобное, но вопрос о времени и целесообразности остаётся открытым. Если не секрет, сколько по времени заняла реализация простейшего визора и какие задачи решала? И достаточно праздный вопрос, Indy_, почему ты взялся за этот проект? Это была необходимость (например, по работе) или из интереса реализовать подобное? Помню, что ещё года два-три назад ты занимался визорами - очень долгоживущий проект.
     
    galenkane нравится это.
  15. Indy_

    Indy_ Well-Known Member

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

    Все основные задачи к этому приводят, это их решение. К примеру скрытие памяти от сканера ав или защита от OP.

    Защита памяти - в конечном варианте памяти быть не должно, образ или всё АП N/A. Оно всё является анклавом, а данные дешифруются при их выборке. Тогда удалённо, из иного процесса, режима(ядра) или не доверенному потоку прочитать память нельзя. А для этого нужно решить две задачи - контролировать выборку на уровне декодера инструкций и решить проблему с сервисной выборкой.

    Ваш проект если и рабочий, то лишь при прямом исполнении. Если это крутнуть под визором, то окажется что среда вполне себе рабочая. К примеру какой то патч функции - твой ридер обнаружит память не изменной, хотя там может быть что угодно и визор пройдёт весь путь исполнения твоего патча.
    --- Сообщение объединено, 25 апр 2019 ---
    HoShiMin,

    Я раньше не брался за сервисную обработку(наследование указателей), думал что это решить нельзя, да и в целом тема стрёмная. Но получилось что это весьма просто и работает стабильно. Не ясно что делать с разложением указателя на компоненты(eg: mov ah,cl; ecx:PTR). Но обычно в апп это не используется, только в отморфленном коде или при виртуализации. Маркируя память можно получить лог по указателям(источник их). Тогда все сервисные аргументы(прототип) определены и выборки в целевую область нет, так как указатели туда определены. Только лишь так можно убрать область памяти что бы не сломать апп.
     
    Последнее редактирование: 25 апр 2019
  16. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    251
    Адрес:
    Россия, Нижний Новгород
    galenkane, ты чего разошёлся? :swoon:
     
  17. galenkane

    galenkane Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    79
    HoShiMin, вижу в вас божество :acute:
     
  18. HoShiMin

    HoShiMin Active Member

    Публикаций:
    0
    Регистрация:
    17 дек 2016
    Сообщения:
    251
    Адрес:
    Россия, Нижний Новгород
    Недостатком ЧСВ не страдаю, но не в таких масштабах)
     
    galenkane нравится это.