The Kernel-Bridge Framework

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

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Если нужна трассировка - в VT-x есть специальные трассировочные события, заставляющие гостя выполнить одну инструкцию и вернуть управление гипервизору.
    В AMD-V таких событий нет, но их можно сэмулировать через EFLAGS.TF.
    Т.е., формально гипервизор позволяет трассировать гостя, но т.к. выход в VMM - тяжёлая операция, такая трассировка ударит по производительности (не забываем, что в момент выхода в VMM логический процессор эксклюзивно занят гипервизором).

    Виртуализация - не про анализ бинарников. Для аппаратной трассировки есть специальная технология Intel PT и с виртуализацией она не связана.
     
  2. Indy_

    Indy_ Well-Known Member

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

    > EFLAGS.TF

    Забудь про это)

    Выше приводили ссылки на сервисы по анализу бинарей. Ранее был годный анубис". Как это работает, очевидно что не на ловушках ?
    --- Сообщение объединено, 15 авг 2020 ---
    > Виртуализация - не про анализ бинарников.

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

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Мы опять ходим по кругу)

    Сейчас я скажу, что практическое применение - скрытие или подмена памяти, а ты в ответ скажешь, что всё это можно реализовать на ловушках.
    Я отвечу, что на ловушках это реализовать нельзя из-за многопроцессорности, и получу ответ, что можно сделать аналогичный твоему визор и пересобирать код, подменяя выборку.
    На что я парирую: у нас нет выборки, т.к. код вызывают из разных процессов, в разных режимах, а ядро не документировано, часто меняется и мы не можем даже собрать карту ядерного адресного пространства, а также, не можем атомарно делать патчи.
    Ты снова скажешь, что гипервизор - слишком сложное решение для простых задач, а я снова упомяну "всего полторы тысячи строчек и скрытие в один mov".

    Мы так ни к чему не придём!

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

    И никто не в дураках! Идёт?
     
    TrashGen нравится это.
  4. Indy_

    Indy_ Well-Known Member

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

    Да, получается замкнутая петля порочный круг.

    Скрытие памяти - ты это не смог реализовать. Подмена выборки как бы моя тема. Тут рядом говорят что я теоретик, но это не так. С-анклавы реализованы практически. Как же ты иначе скроешь память, кто тебе права даст на кернел.. Эти решения проработаны годами практически и для этого не нужен ядерный мод.

    Смысл скрытия памяти - это виксы, чтобы аверский сканер не обнаружил сигнатуру. Можно прицепить визор в виде загрузчика к апп. Но а какой смысл скрывать память в дебаг софте ?

    Твой визор запалят сразу все и всё при попытке смены мода.
    --- Сообщение объединено, 15 авг 2020 ---
    HoShiMin,

    > высокопроизводительно решать задачи, связанные с доступом к памяти и с системными инструкциями и событиями.

    На счёт профайла ты сам себе противоречишь. Через ловушки куда быстрее я могу решить возможные задачи. Быстрее значит что это время разработки и профайл кода. Для этого не нужны сложности в виде хард вирты делающей тоже самое.
    --- Сообщение объединено, 15 авг 2020 ---
    HoShiMin,

    Был на rohitab чувак, у него в блоге сервисные таблицы. Так вот он и есчо один искали через гипер ошибки ядра. Это сработало, их нашли много. Практическое применение. Но это самое простое, ибо нет алгоритмов для поиска более сложных уязвимостей.
     
  5. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Indy_, привязался же ты к этому гипервизору, всё он тебе покоя не даёт!

    А у меня, между прочим, там ещё минифильтр есть. Да не простой, а с юзермодными подписками!

    Рассказал бы лучше, как ловить memory-mapped-файлы и менять записываемые и читаемые данные на лету.

    Только чур без визоров, на Flt-стеке!

    Да и вообще, вопрос ко всем присутствующим, может кто знает?

    Раз уж начал переписывать кб, то и минифильтр надо до ума довести.
     
    Последнее редактирование: 16 авг 2020
  6. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
  7. Indy_

    Indy_ Well-Known Member

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

    > Рассказал бы лучше, как ловить memory-mapped-файлы и менять записываемые и читаемые данные на лету.

    Для этого нужен всё тот же визор. Быть может предлагаешь это решать на системных ловушках ?

    > А у меня, между прочим, там ещё минифильтр есть.

    Не интересует что там по ядру, все задачи решаются через визоры сейчас они заменяют отладчик. По этой причине и интересен именно визор, а остальное - ниочём.
     
  8. hiddy

    hiddy Member

    Публикаций:
    0
    Регистрация:
    10 мар 2019
    Сообщения:
    82
    У отладчика есть гуй, а у DBI нет.. Хотя вроде к иде обещали вот эту штуку прикрутить https://github.com/qilingframework/qiling. Подозреваю DBI все таки оставляет больше артефактов, чем тот же отладчик на базе гипервизора, например, если исключения еще понятно как обрабатывать, то что делать с гуй диспатчером (KiUserCallbackDispatcher) не совсем понятно, самомодифицирующийся код и разного рода хуки для перехвата управления тоже под вопросом.
     
  9. Indy_

    Indy_ Well-Known Member

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

    > У отладчика есть гуй, а у DBI нет..

    Зачем там гуй, не он не нужен. Мне например вывод в консоль нравится. Можно прицепить и гуй, другой процесс будет принимать сообщения и выводить. Но зачем, если это делает и так сама ось в консолях. Если лог большой то сбрасывается файл, затем смотри его чем угодно в гуе. Отладчик отличается от dbi - с ними идёт работа в компилере, задаются решающие алгоритмы после чего просто ждёшь выхлоп. Отладчик же это инструмент для ручной работы, чем у него круче гуй, тем удобнее работать(вручную). Хотя это тоже не точно, спецы используют коммандные - виндебаг в пример(сразу скажу что мне это не нравится). Забиваешь команды адреса в примитивный диалог и в такой же примитивный гуй идёт выхлоп. Так было изначально сейчас походу допилили. Чем от этого он лучше стал - хз сам подход к ядерной отладке не совпадает с юзер, это не память можно одного процесса листать, а смотреть глобальные структуры ядра.
    --- Сообщение объединено, 18 авг 2020 ---
    > то что делать с гуй диспатчером (KiUserCallbackDispatcher) не совсем понятно

    Колбэк пропатчил, поставил ловушку на его адрес(это значит что эвент для визора когда произойдёт софт выборка по адресу, не хард ловушка они невероятно тормозные). Это обратный вызов гуя, он рекурсивен и решение по этой задаче не простое(нужно вести стек векторов и чистить его налету). Ну и в гипере на смену мода есть событие.

    > самомодифицирующийся код

    А что с ним не так ?

    Вначале идёт запись, только затем исполнение. Он же не выполняется напрямую, эмулируется/транслируется - никаких проблем. Про обнаружение визора речь не идёт, можно запалить по профайлу и прочему, но это так же быстро решается.
     
    Последнее редактирование: 18 авг 2020
    hiddy нравится это.
  10. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    185
    HoShiMin, как насчёт того что бы добавить в свой фреймворк возможность работы с оборудованием ,например с шиной PCI или USB ?
     
  11. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    С периферийным железом никогда не работал.
    Какие функции могут понадобиться и где это может быть применимо?
     
  12. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    185
    HoShiMin, могут понадобиться функции для анализа трафика по шине PCI,просто что бы узнать что предаёт устройство подключённое к этой шине,для USB желательно тоже
     
  13. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Даже не представляю, как подступиться к этой задаче, поэтому вряд ли.
     
  14. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Для USB есть USBPcap:
    https://desowin.org/usbpcap/
     
  15. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Давай абстрагируемся от решения конкретных задач: я хочу предоставить универсальный инструмент, с помощью которого можно исследовать ядро.
    То есть, давать не готовую функцию findHooks(), а возможности для её реализации.
    Что может для этого понадобиться?

    Например, сейчас драйвер позволяет свободно читать/писать память ядра, создавать отображения в юзермод, выделять память и создавать потоки.
    А что нужно ещё? Может какие-то хелперы для поиска чего-то конкретного?
    Или фильтры на какие-то конкретные IRP?
     
  16. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    К сожалению, я не знаю.

    Еще на клабе год назад писал, что готов проспонсировать статью вида "реверс антивируса", допустим Софос (или симантек или сентинел, без разницы). Суть - как именно он защищает себя, что делает, и что с этим делать (за неимением нормальных руткитов). Думаю, в этом нет никакого нарушения, на васме полно старых статтей про виксы, реверс эвристики и прочее. И исходя из этого можно обсуждать.
    --- Сообщение объединено, 8 ноя 2020 ---
    HoShiMin, кстати, нашел еще такой проект https://github.com/HoShiMin/EnjoyTheRing0
    в чем разница с текущим? Мне этот приглянулся, ибо там можно использовать Си (я наоборот не люблю все новое, все эти С++17 и прочие инновации).
    А можно в этом сделать какие-то "апи" для языка Си, допустим , как дллка есть, и ее можно вызывать с любого языка (или там интерфейс GDI, есть ООП, а есть процедурный). Хотя, врядли это кому-то ,кроме меня надо, но чисто теоретически.
     
  17. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Не стоит вскрывать эту тему. Вы молодые, шутливые, вам всё легко. Это не то.

    Это мой первый драйверный проект, на котором я впервые знакомился с си и плюсами (в прошлом я дэльфист) и в котором плохо всё =_=
    Это страшный легаси, с ошибками, небезопасный, с примитивной архитектурой.
    На гитхабе он у меня только для истории.

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

    Кроме того, сейчас пишу с нуля кб2.
    Если первая версия написана, в общем-то, на си с классами, то в кб2 - настоящий C++20: шаблоны, наследование, вывод типов и типобезопасность.
    Как следствие - намного более краткий, простой и безопасный код. И более производительный.
    Но даже кб2 будет собираться в дллку, которую ты сможешь использовать где угодно.
    Хотя настоятельно советую пересмотреть отношение к C++ и начать писать на нём.

    Будет, AngelScript никуда не делся.
     
    Последнее редактирование: 8 ноя 2020
  18. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Если стоит задача выполнять опкоды - это юзермодная виртуальная машина, как JVM или .NET.
    Если трассировать машинный код - любой аналог твоего визора.

    Они пишут операционку с изолированными процессами, для этого им нужны специалисты по виртуализации.
     
  19. Andrey333

    Andrey333 Member

    Публикаций:
    0
    Регистрация:
    30 янв 2020
    Сообщения:
    35
    HoShiMin. Пробую посредством Kernel-Bridge загрузить тестовый драйвер (в аттаче). Получаю ошибку KbLdrStatus::KbLdrImportNotResolved. Драйвер импортирует лишь 2 функции из ntoskrnl - DbgPrint и RtlAssert. В чем может быть проблема? Спасибо.
     

    Вложения:

    • TestDriver.rar
      Размер файла:
      1,5 КБ
      Просмотров:
      156
  20. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Как импортируешь функции?