информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / site updates
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
с debug priveleges можно и из своего процесса bsod вызвать. 27.12.04 09:29  Число просмотров: 3229
Автор: r4dx Статус: Незарегистрированный пользователь
<"чистая" ссылка>
с debug priveleges можно и из своего процесса bsod вызвать.
например сделать WriteProcessMemory на winlogon'овсий eip (GetThreadContext+OpenThread) :P

ну или даже просто завершить winlogon (любой другой необходимый для нормальной работы сервис). даже сорс мой старый могу дать...
.data
token_priv dd 1
p_luid dq ?
szdp db "SeDebugPrivilege",0
p_token dd ?
szwin db "NDDEAgnt",0
dpid dd 0
.code
start:
invoke GetCurrentProcess
invoke OpenProcessToken, eax, 20h, o p_token
dec eax
jnz exit
invoke LookupPrivilegeValueA, eax, o szdp, o p_luid
dec eax
jnz exit
invoke AdjustTokenPrivileges, p_token, eax, o token_priv, 10h, eax, eax
invoke FindWindow, o szwin, 0
invoke GetWindowThreadProcessId, eax, o dpid
invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, dpid
invoke TerminateProcess, eax, 0
exit: invoke ExitProcess, 0
end start
<site updates>
BSOD из user mode: бывает и такое 26.12.04 19:27  
Publisher: dl <Dmitry Leonov>
<"чистая" ссылка>
BSOD из user mode: бывает и такое
YuraN

При написании программы, целью которой было спрятаться куда подальше от глаз пользователя, я сделал так, чтоб она пряталась в другом процессе. Для отладки созданный поток выводил сообщение с его PID и TID MessageBox'ом.
Когда программа уже была готова, я решил, что пора бы ей брать привилегию отладчика, дабы прятаться и в системых процессах (а-ля winlogon, svchost, etc). Сказано - сделано. Однако, забыв о том, что системному процессу вряд ли разрешено использовать GUI, а если и разрешено, то он может быть на другом десктопе, отладочные сообщения я не убрал. При первом же запуске вывалился BSOD.
В результате выяснил, что машина падает при вызове MessageBox в csrss.exe (стоит отметить, что это не первый BSOD, вызываемый этим процессом).
Избавиться от этой "возможности" можно, убрав права отладки (secpol.msc -> Local Policies -> User Rights Assignment -> Debug Programs)
Исходник прилагается, для сборки использовался Visual C 6.

/* ************************************************************************...

Полный текст
Ну и зачем это в статьи писать? 28.12.04 07:26  
Автор: AlexD <Alexander> Статус: Member
<"чистая" ссылка>
CSRSS - это кусок подсистемы win32, напрямую связанный с ее реализацией в ядре - win32k.sys. Он напрямую участвует в выводе на экран этого MessageBox. Естественно, никто при разработке не планировал, что туда полезет пользователь.

А с админскими правами можно даже диск отформатировать, железо программно попортить....странно, да?
для коллекции преимущественно 28.12.04 17:29  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
Человек прислал пример кода, мне он показался любопытным и поучительным, я попросил оформить как статью. Если у кого-то из посчитавших этот пример слишком очевидным найдется время и желание расписать нечто более обобщенное, я буду только рад.
с debug priveleges можно и из своего процесса bsod вызвать. 27.12.04 09:29  
Автор: r4dx Статус: Незарегистрированный пользователь
<"чистая" ссылка>
с debug priveleges можно и из своего процесса bsod вызвать.
например сделать WriteProcessMemory на winlogon'овсий eip (GetThreadContext+OpenThread) :P

ну или даже просто завершить winlogon (любой другой необходимый для нормальной работы сервис). даже сорс мой старый могу дать...
.data
token_priv dd 1
p_luid dq ?
szdp db "SeDebugPrivilege",0
p_token dd ?
szwin db "NDDEAgnt",0
dpid dd 0
.code
start:
invoke GetCurrentProcess
invoke OpenProcessToken, eax, 20h, o p_token
dec eax
jnz exit
invoke LookupPrivilegeValueA, eax, o szdp, o p_luid
dec eax
jnz exit
invoke AdjustTokenPrivileges, p_token, eax, o token_priv, 10h, eax, eax
invoke FindWindow, o szwin, 0
invoke GetWindowThreadProcessId, eax, o dpid
invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, dpid
invoke TerminateProcess, eax, 0
exit: invoke ExitProcess, 0
end start
Согласен, еще один способ - SetContext 27.12.04 12:31  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
С его помощью можно установить ядерный контекст в котором винда уже не будет разбираться с виртуальной памятью и выпадет в бсод
неправда! 27.12.04 23:11  
Автор: r4dx Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> С его помощью можно установить ядерный контекст в котором
> винда уже не будет разбираться с виртуальной памятью и
> выпадет в бсод
неправда!
нельзя установить еip в context, больший чем максимальный адрес user-mode режима.
тока щазз сорс написал - не работает (все ф-ии возвращают GetLastError=0)

.data
a dd 1
lu dq 0
aaaa db "SeDebugPrivilege",0
.code
kern: jmp $
start:
xor esi, esi
push esi
callx CreateThread, esi, esi, o kern, esi, CREATE_SUSPENDED, esp
mov edi, eax
call GetCurrentProcess
callx OpenProcessToken, eax, 20h, esp
pop ebx
dec eax
jnz exit
callx LookupPrivilegeValueA, esi, o aaaa, o lu
dec eax
jnz exit
callx AdjustTokenPrivileges, ebx, esi, o a, 10h, esi, esi
or eax, eax
jz exit
sub esp, sizeof(CONTEXT)
callx GetThreadContext, edi, esp
mov [esp+CONTEXT.regEip], 0FFFFFFFFh
callx SetThreadContext, edi, esp
callx ResumeThread, edi
exit: callx ExitProcess, esi
end start

кстати - может быть будет интересно узнать (я это узнал в ходе написания этого незаурядного сорца), что advapi ф-ии требуют, чтобы их аргументы, принимающие данные находились в секции данных (не в стэке и не в секции кода с атрибутом w), а ф-ии Get/SetThreadContext, чтобы данные были в стэке %)
да уж на правду что-то непохоже 03.02.05 10:32  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> кстати - может быть будет интересно узнать (я это узнал в
> ходе написания этого незаурядного сорца), что advapi ф-ии
> требуют, чтобы их аргументы, принимающие данные находились
> в секции данных (не в стэке и не в секции кода с атрибутом
> w), а ф-ии Get/SetThreadContext, чтобы данные были в стэке
> %)

бред. кусок рабочего исходника - параметры и в стеке и в коде (/SECTION:.text,erw конечное)

.code

priv_name db 'SeDebugPrivilege',0
lib_name db '\test.dll',0
kernel_name db 'kernel32',0
proc_name db 'LoadLibraryA',0

entry:
;
var_hObject equ ebp-4
var_newstate equ ebp-14h
var_length equ ebp-18h
var_prevstate equ ebp-28h
var_procid equ ebp-128h
;
mov ebp,esp
sub esp,130h
xor ebx,ebx

lea eax,[var_hObject]
push eax
push ebx
push 28h ; TOKEN_QUERY or TOKEN_AJUST_PRIVILEGES
call GetCurrentThread
push eax
call OpenThreadToken
test eax,eax
jnz token_ok

call GetLastError
cmp eax,3f0h ; ERROR_NO_TOKEN
jne exit

lea eax,[var_hObject]
push eax
push 28h ; TOKEN_QUERY or TOKEN_AJUST_PRIVILEGES
call GetCurrentProcess
push eax
call OpenProcessToken
test eax,eax
jz exit

lea edx,[var_newstate]
lea eax,[edx+4]
push eax
push offset priv_name
push ebx
mov dword ptr [edx],1
mov dword ptr [edx+0ch],2
call LookupPrivilegeValueA

lea eax,[var_length]
push eax
lea eax,[var_prevstate]
push eax
push 10h
lea eax,[var_newstate]
push eax
push ebx
push dword ptr [var_hObject]
call AdjustTokenPrivileges
mov edi,eax

call GetLastError
cmp eax,514h

token_ok:
push dword ptr [var_hObject]
call CloseHandle
и т.д. и т.п. ...

либо руки у тебя кривые либо винда особая
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach