· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Zw(Nt)LoadDriver

Посл.отвђт Сообщенiе


Дата: Апр 25, 2004 23:51:42

Когда-то задавал вопрос о том, как можно запустить драйвер без прав админа. (service manager не в админе со мной говорить не хочет) Получил совет use-ать ZwLoadDriver@4. Нашел, что в параметрах к нему передать Unicode-строку надо. Ну хорошо, но при попытке импортировать её (ф-ю) из ntoskrnl, получаем STATUS_ACCESS_VIOLATION. Хорошо, смотрим, что есть еще и Nt-вариант этой ф-йй. Опять передаем Unicode-строку. Все бы хорошо, но получаем: STATUS_DATATYPE_MISALIGNMENT.
Вопрос 1. Чё делать??? :)
Вопрос 2. И вообще действительно ли получится запуск драйвера в режиме обычного пользователя???

Заранее благодарен. --==ППС==--


Дата: Апр 26, 2004 09:22:07

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


Дата: Апр 26, 2004 10:54:21 · Поправил: PavPS

Да, действительно нет, не спорю (там код типа:mov edx,offset stroka; test dl,01;jnz fuck_you), но уже пробовал. Пишет типа с000003b - адрес не тот (но с этом я еще разберусь... пока не всё перепробовал).
И как на счет вопоса №2. Может кто устранит сию недокументированость???


Дата: Апр 26, 2004 12:11:41

[ PavPS: Ну хорошо, но при попытке импортировать её (ф-ю) из ntoskrnl, получаем STATUS_ACCESS_VIOLATION. ]

Зачем из ntoskrnl то? Ты же из режима пользователя хочешь дровину запускать. Т.е. надо тянуть из ntdll.


[ PavPS: Хорошо, смотрим, что есть еще и Nt-вариант этой ф-йй. ]

Для ntdll Nt и Zw - синонимы. Для ntoskrnl нет.


[ PavPS: Получил совет use-ать ZwLoadDriver@4. ]

Не, не получится. Ей нужно передавать не адрес файла драйвера на диске, а адрес сервиса в реестре. Например если beeper.sys зарегистрировать, то запустить его можно так:
;@echo off
;goto make

.386
.model flat, stdcall
option casemap:none

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::

include \masm32\include\kernel32.inc
include \masm32\include\w2k\ntdll.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\w2k\ntdll.lib

include \masm32\Macros\Strings.mac

.const

CTW "\\Registry\\Machine\\System\\", g_wszName, 4
CTW0 "CurrentControlSet\\Services\\beeper"

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::

.code

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::

start proc uses esi edi ebx

local us:UNICODE_STRING

    invoke RtlInitUnicodeString, addr us, addr g_wszName
    invoke ZwLoadDriver, addr us

    invoke ExitProcess, 0
    ret

start endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::

end start

:make

set exe=ZwLoadDriver

\masm32\bin\ml /nologo /c /coff %exe%.bat
\masm32\bin\link /nologo /subsystem:windows %exe%.obj

del %exe%.obj

echo.
pause


Но сервис уже должен быть зарегистрирован, а это ограниченные пользователи делать не могут. Даже если он уже будет зарегистрирован админом, то всё равно ZwLoadDriver обломится.


Дата: Апр 26, 2004 16:33:39

Спасибо!
2 Four-F
Zw - вариант я смотрел, т.к. у меня именно к нему было описание, а т.к. у Nt варианта тоже 1 параметр, то по логике... А зачем из User-a вызавал - а черт его знает...
А вот как же бальIf из user-а хоче DRV запустить... Для регистрации в реестре и ServiceManager пойдет да вот фига... Надеюсь на вопрос есть ответ. Если нет, конечно, хуже, но у нас есть NTCALL и шлюз 2Eh, так вот хотелось бы узнать по-полной о работе, которая производиться при загрузке драйвера Wind-ой. Может ручками получится?!?!?!.
И коль уж разговороились про регистрацию дров в реестре, то позволю себе продолжить в этой теме, т.к. "Автозапуск драйвера" у меня зашелл за экран :)
- призадании воппроса про SafeBoot был получен следующий ответ: HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot
Ну и чё? Там куча "папочек" (например внутри "minimal") с ,может, именами дров, но как мне то себя внести??? и где перед этим зарегиться???


Дата: Апр 26, 2004 20:12:36

Я пользую программу Kernel-mode Driver Manager
by Four-F. и регистрирую и выгружаю и запускаю
под 2000 и XP (не админом не пробовал звиняй)
но пользоваться очень удобно...


Дата: Апр 26, 2004 21:21:34 · Поправил: PavPS

2 S_W_A_N
Ну!!! Куда же без нее!!! Уже давно use-аю её и очень благодарен автору! АФигенная вешь.... но вопрос не в обычной регисрации :) про SafeBoot! и про регисрацию (запуск) из User-а.

[S_W_A_N: не админом не пробовал звиняй]

Правильно, не пробуй. Уверяю, что пошлет. И далеко... Прямо за SACL админа.


Дата: Апр 26, 2004 22:59:21

[ PavPS: про SafeBoot! ]

Берешь у меня из KmdKit драйвер beeper.sys, пихаешь его в %SystemRoot%\drivers\
Регистрируешь (например KmdManager'ом). Заходишь в реестр в \CurrentControlSet\Services\beeper
Меняешь Start на 1, а ImagePath на System32\drivers\beeper.sys
Идешь в Minimal или Network (по вкусу)
Создаешь там раздел beeper.sys
В параметр (По умолчанию) пишешь Driver
Ребутишься в сейфмоде и слышишь как драйвер пиликает.
Всё, с деталями сам, надеюсь, разберешься.


ЗЫ: KmdManager, кстати, уже давно вторая версия у мя пылиться. Там значительно больше функционала. Надо только чуть закончить, да времени нет :(


Дата: Апр 26, 2004 23:12:13

Спасибо попробую. А на счет KmdManager V2.0 - это с удовольствием.
Кстати, может надоел уже с вопросом, но о загрузке DRV без прав админа Все намерено молчат, аль не знают ??? :)) Хотя буду рыть... можа и откопаю чё.


Дата: Апр 27, 2004 00:07:53

Да что тут рыть-то...
Как-то давным-давно прочитал я одну книжонку. Ничего такого особенного, но одна строчка мне в память крепко зашла. Мол, только защита, подкрепленная аппаратными средствами чего-то стоит, остальное - фигня. Вот к примеру, кольца защищенного режима подкреплены процом - их не пробить. А вот админские привилегии - это софтная защита, ее, вероятно, обойти можно. Но только это сработает раз и не больше. Смотри:
NTSTATUS
NtLoadDriver(
    IN PUNICODE_STRING DriverServiceName
    )

...

    requestorMode = KeGetPreviousMode();

    if (requestorMode != KernelMode) {
   //все что тут, это к нам

        if (!SeSinglePrivilegeCheck( SeLoadDriverPrivilege, requestorMode )) {
            return STATUS_PRIVILEGE_NOT_HELD;
        }
   //ага, вот и проверочка - любишь винду хакать?

   //далее еще хренова туча проверок на DriverServiceName
  
...
     }

//а теперь и есть самое любопытное - загрузка драйвера:

  KeInitializeEvent( &loadPacket.Event, NotificationEvent, FALSE );
    loadPacket.DriverObject = (PDRIVER_OBJECT) NULL;
    loadPacket.DriverServiceName = &driverServiceName;
    
    if (PsGetCurrentProcess() == PsInitialSystemProcess) {
    
        IopLoadUnloadDriver(&loadPacket);
    
    } else {
    
        ExInitializeWorkItem( &loadPacket.WorkQueueItem,
                              IopLoadUnloadDriver,
                              &loadPacket );
    
        ExQueueWorkItem( &loadPacket.WorkQueueItem, DelayedWorkQueue );
    
        KeWaitForSingleObject( &loadPacket.Event,
                               UserRequest,
                               KernelMode,
                               FALSE,
                               (PLARGE_INTEGER) NULL );
    
    }
    
...



Вывод: вероятно, обратившись к функциям после проверок напрямую, ты сможешь обойти защиту. Может быть. Но даже если у тебя это и получится, то дыру залатают через сервис-пак. Максимум.


Дата: Апр 27, 2004 00:29:57 · Поправил: PavPS

Мерси! Как всё просто :))), и всего то делов :))))). Наверное да, читать исходники надо :)


Дата: Май 20, 2004 01:26:32

Да нет, не все так просто :(
NtLoadDriver - это ж ведь шлюз, т.е. код, что я привел, в ядре-то. А к ядру и надо доступ получить. Т.е., получается замкнутый круг. Низзя :(


Дата: Май 20, 2004 02:35:05 · Поправил: PavPS

4)Путь к сердцу wind-ы - через кольцо 0
3)В кольцо ноль - через драйвер
2)В драйвер - через права админа
1)В права админа - через огран.пользователя

Чтобы пройти снизу вверх - хотелось бы запуститься в процессе System. Так вот последние 2 дня, как в инкубаторе, выращиваю и лилею хрен-знает какой вирус, но эта дрянь из любой учетной записи запускается System. Правда он ищо в инет лезет - но с SiftIce это отрубить не проблема. Так вот в ближайшие дни, надеюсь на первую ступень поднимусь.

ЗюЫю А прога, представленная в новом посте про ring-0 , которая типа делает вышеописанное, не пашет.


Дата: Май 20, 2004 03:24:08

volodya
вероятно, обратившись к функциям после проверок напрямую
Да, но в некоторых из них происходит проверка SeSinglePrivilegeCheck :), и потому это не реально.
А NtLoadDriver работает в режиме админа без вопросов, даже SC (service manager) не нужен.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.134