The Kernel-Bridge Framework

Discussion in 'WASM.PROJECTS' started by HoShiMin, Nov 18, 2018.

  1. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    Добрый день форумчанам!
    Пишу фреймворк на C++ для свободной работы в Ring0 и исследования памяти ядра и процессов.
    Представляет собой готовый драйвер с заготовками для лёгкого добавления своих обработчиков и файловых фильтров; API, не привязанный к проекту, и который можно использовать в сторонних самописных драйверах, а также юзермодная библиотека с обёртками над всем функционалом.

    Из основных возможностей:
    • Гипервизор (AMD-V/RVI)
    • Работа с портами ввода-вывода, проброс в юзермод через IOPL
    • Работа с памятью (физической и виртуальной, юзермодной и ядерной) - аллокации/чтение/запись/маппинг
    • MSR
    • Создание ядерных и юзермодных потоков
    • Доставка APC из ядра
    • Загрузка неподписанных драйверов (без поддержки SEH)
    • Отправка ядерных каллбэков в юзермод (Ob*** и Ps***)
    • Юзермодный файловый фильтр (Create/Read/Write/DeviceIoControl)
    • Исполнение произвольного кода в Ring0 из юзермодной памяти, поддержка SMEP
    • Парсер PE-файлов
    • Парсер PDB
    • Сканер сигнатур из ядра
    • Работа с Mdl из юзермода
    • Биндинг для питона
    В планах:
    • GUI-платформа для рантайм-анализа памяти, дампов, модификации системных данных
    • Скриптовый движок на питоне для прототипирования и выполнения произвольного кода в ядре
    • Интеграция с AsmJIT
    • Библиотека для инжектов и перехватов функций
    • Простой гипервизор для обхода PatchGuard и фильтрации сисколлов
    • Документация, до которой никак не дойдут руки
    • Страничка для проекта либо на github.io, либо на отдельном хостинге
    • Пройти HLK, если драйвер такого типа вообще может его пройти
    Примеры использования:
    И, наконец, репозиторий, где можно скачать подписанные бинарники:

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

    P.S.: Всего неделю назад узнал про аналогичный проект - Google Rekall. Что, однако, не отменяет моих планов!
    P.P.S.: Mikl___ , не серчай за даблпостинг, здесь ошибся с разделом, этот более подходящий (и более живой).
     
    Last edited: Jan 6, 2019
  2. UbIvItS

    UbIvItS Well-Known Member

    Blog Posts:
    0
    интересный проект. и на каких выньках пашет?
    в твоем желание сделать отдельный проект есть, конечно, серьёзный изъян == много прогеров скорей примкнут к хухлю, чем к тебе. у тебя должна быть особая фича в проекте.
     
  3. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    Пашет на Win7..Win10. В планах есть поддержка ХР, но не в приоритете.

    А что до Rekall'a, он всё же отличается и от Blackbone (тоже "конкурент"), и от кб. В каждом есть свои фичи, которых нет у других. У меня, например, юзермодные фильтры и, видимо, самый обширный набор функций для работы с памятью. И банальная простота: скачал, подключил хедеры и юзай. Rekall же гвоздями приколочен к своему амплуа standalone-инструмента.
     
    galenkane likes this.
  4. SadKo

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

    Blog Posts:
    8
    А при помощи этого фреймворка можно посниффать, что, драйвер отправляет/получает по шине FireWire?
     
  5. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    Нельзя :dntknw:

    Давно уже нет - все его способы инжекта давно палятся всеми античитами, как и сам он давно во всех чёрных списках. Сейчас читеры пишут свои драйвера "под ключ", загружая через win64ast (или через турлу), обходы через DMA. Кое-кто пишет свои гипервизоры. И всё в привате, ибо паблик = моментальный блэклист.
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Отличный проект, пробуйте, и ссылку на гитхаб тоже прикрепите. Может кто помогать будет, ревью сделает.
     
  7. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    А ссылка и так в шапке
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Blog Posts:
    0
    ну, что (если сохранишь банальную простоту) это (пожалуй) может стать очень важным аргументом для разгона твоего проекта.
    главное, что код открытый, тч годное можно выдернуть на свои нужды.
    вот на сие точно забей :) поддержка андроида иль линя будут гораздо актуальней :grin:
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Минута критики...
    1) много опасного кода.. в стиле size_t sig_length = strlen(mask)
    2) работа с PE Заявлена но она только UserMode судя по коду, возможно плохо смотрел . Вообще не хватает списка АПИ группированного по функционалу и по режиму работы, с нормальной навигацией, а не по гитхабу.
    3) нет тестов на плохих данных. Например если вы заявляете о безопасном АПИ то имеет смысл добавить тесты, где идут вызовы Всех АПИ с разными некорректными параметрами.

    И это так, на вскидку.
    к слову сказать подобный проект уже лет 10 назад был на гитхабе, и уже тогда С++ использовался гораздо шире.
    Проект был очень сильный.
    https://github.com/icestudent/ontl

    У вас С++ в проекте сильно ограничен. Попробуйте улучшить этот момент тоже. Добавьте Auto в конце концов )
    --- Сообщение объединено, Nov 19, 2018 ---
    Немного почистил во избежании срача
     
  10. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    HoShiMin,

    > MmSecureVirtualMemory

    Вы должны знать что это кривая реализация. Она защищает лишь от удаления, но не от смены аттр.

    > Иногда возникает вопрос

    Верно всё, я просто завис на своих идеях. У меня свет клином сошёлся на протекторах и крипторах.
     
  11. UbIvItS

    UbIvItS Well-Known Member

    Blog Posts:
    0
  12. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    Да, есть такое. В основном, в работе с юзермодными буферами при передаче их по указателю. Где имело смысл, защитил память, поставил проверки, но кое-где - действительно - полагаюсь на то, что пользователь передал валидную память. Решил, что в таких случаях пока лучше положиться на try..except, а потом, при необходимости, в нужных местах добавлять проверки и валидацию.
    А с другой стороны, в конкретно этом примере с strlen - как мы можем быть уверены, что передали валидную строку? strlen_s не гарантирует, что не случится PageFault. Передавать длину извне? Тоже не можем полагаться на эти данные. И, честно говоря, я не вижу гарантированно надёжного способа работать с пользовательскими данными.
    Сделаю поддержку в км, когда напишу км-контейнеры, типа сетов, векторов и мап. Хочется перенести юзермодный модуль в ядро без изменений интерфейса.
    Сделаю вики-страничку на гитхабе, когда закончу питоновский биндинг
    В планах есть, но отложил на потом - слишком долго писать настолько всеобъемлющие тесты. Закончить бы основной функционал, там ещё делать и делать...

    Страшно представить, сколько времени он его писал...

    А как же AddSecureMemoryCacheCallback? Сам её не пробовал, но, судя по докам, каллбэк вызывается также при изменении атрибутов (и нет указания, что только при изменении в сторону уменьшения прав)
     
    Last edited: Nov 19, 2018
  13. UbIvItS

    UbIvItS Well-Known Member

    Blog Posts:
    0
    ковырялка ядра по-определению надёжной быть не может :) это дэв-режим со всеми сопутствующими траблами :)
     
  14. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    И ещё приходится держать баланс между надёжностью и скоростью разработки, иначе можно погрязнуть в простынях проверок)
    --- Сообщение объединено, Nov 19, 2018 ---
    Как увидел Rekall - тоже появилась шальная мысль написать аналог под линь, но в лине хотя бы нет проблем с драйверами, всегда можно накидать простенький драйвер в 20 строчек и заinsmod'ить.
    А в сторону андроида даже не смотрел, хотя идея интересная)
     
    UbIvItS likes this.
  15. UbIvItS

    UbIvItS Well-Known Member

    Blog Posts:
    0
    HoShiMin, кстати, самый сок, когда ковырялка пашет под виртой, а юм панелька управления на хосте. + дамп пишется на хост. Тогда можно рестартить вирту с бэкап дампом. :)
     
    HoShiMin likes this.
  16. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    Хммм, допустим: на виртуалке драйвер и юзермодный прокси, отвечающий за загрузку-выгрузку и общение с хостовой машинкой. Это можно.
     
  17. UbIvItS

    UbIvItS Well-Known Member

    Blog Posts:
    0
    да, акь сказать == проприетарные модули идут без исходников порой, тч надобность ковырялок и в лине начинает быть актуальной :)
     
  18. f1redArk

    f1redArk Member

    Blog Posts:
    0
    Извините, а что есть турла?)
     
  19. HoShiMin

    HoShiMin Well-Known Member

    Blog Posts:
    5
    f1redArk, __sheva740 and q2e74 like this.
  20. f1redArk

    f1redArk Member

    Blog Posts:
    0
    Тупой инжект через хуки до сих пор работает почти везде, ибо если его заблочить, то сразу отвалится куча всяких фрапсов, плееров, и прочего)
    --- Сообщение объединено, Nov 20, 2018 ---
    thx