|
|
ru.nethack- RU.NETHACK ------------------------------------------------------------------- From : Eugene Korovin 2:5080/196.72 01 Apr 2002 15:39:22 To : All Subject : Мелкософт опять в своем духе --------------------------------------------------------------------------------
Поразительно...
О уязвимости локальной подсистемы безопасности MS Windows NT 4.0 and
Windows 2000.
Перевод пресс-релиза посланного в MS:
Исследователь Radim "[1]EliCZ" Picha ([2]Bugs@EliCZ.cjb.net) обнаружил
серьезную уязвимость в безопасности Windows NT и Windows 2000. Им была
написана программа (exploit), демонстрирующая очевидную слабость
локальной подсистемы безопасности NT/2000 и полностью компрометирующая
всю систему безопасности этих операционных систем.
Программа, названая DebPloit (от английских слов Debug и Exploit),
использует "дыру" в подсистеме отладки (debugging subsystem) и
позволяет ЛЮБОМУ пользователю с ЛЮБЫМИ привилегиями (даже
пользователям входящим в группы Guests и Restricted Users), выполнять
программный код с правами администратора и/или локальной системы.
Другими словами, любой человек имеющий доступ к локальному компьютеру
может стать администратором и делать на этом компьютере все, что
угодно.
Принцип работы DebPloit: программа "просит" отладочную подсистему
(smss.exe) вернуть описатель (handle) процесса, запущенного с правами
администратора или локальной системы (в системе всегда находится
большое кол-во процессов, работающих с правами локальной системы):
1. Становимся dbgss-клиентом (функция DbgUiConnectToDbg).
2. Подключаемся к LCP-порту DbgSsApiPort (ф-ция ZwConnectPort). Любой
пользователь имеет доступ к этому порту!
3. Посылаем запрос на отладку процесса к dbgss, точно так же как это
делает CreateProcess (ф-ция ZwRequestPort).
4. Ожидаем овета (CREATE_PROCESS_DEBUG_EVENT) от dbgss (ф-ция
WaitForDebugEvent). Ответ будет содержать описатель (handle)
процесса.
5. Переключам свой текущий контекст безопасности на контекст
безопасности описателя, полученнго на шаге 4.
6. Исполняем код (например запускаем внешнюю программу) с правами
выбранного для отладки процесса.
Загрузить DebPloit можно с сайта EliCZ`а -
[3]http://www.anticracking.sk/EliCZ/bugs/DebPloit.zip (исходный код
прилагается).
Что бы проверить свою систему на эту уязвимость, надо:
1. Загрузить DebPloit.zip и распаковать его на диск.
2. Выйти из системы и вновь зайти с минимальными правами (например
используя учетную запись Guest).
3. Запустить программу ERunAsX.exe из командной строки и указать ей в
качестве параметра любую внешнюю программу (например "ERunAsX.exe
cmd").
4. Теперь программа, указанная на шаге 3, выполняется с правами
локальной системы.
HOTFIX
Что бы закрыть эту "дыру" в безопасности NT/2000, я написал
специальный драйвер DebPloitFix, который устанавливает новые права для
LPC-порта DbgSsApiPort. После запуска DebPloitFix, доступ к
DbgSsApiPort будет иметь только локальная система.
Загрузить DebPloitFix и исходный код к нему можно с
[4]www.smartline.ru/software/DebPloitFix.zip
Текст взят с сайта [5]3D News; [6]Кузин Андрей
[7]DebPloit - do everything in MS Windows NT 4.0 and Windows 2000.
DebPloit allows Everyone to get handle to Any process or thread.
Handles have enough access to promote everyone to system/admin (inthe
case Target is running under LocalSystem, Administrator account).
Works on: Any MS Windows NT 4.0, Windows 2000 (SPs before
Mar-12-2002).
Former NTs weren't tested.
Discovered: Mar-09-2002.
Author: Radim "EliCZ" Picha. Bugs@EliCZ.cjb.net.
[8]http://www.anticracking.sk/EliCZ .
Details: Exploit\DebPloit.h.
Principle: Ask debugging subsystem (lives in smss.exe) to create
(duplicate) handle(s) to Target for you:
1. Become dbgss client (DbgUiConnectToDbg).
2. Connect to DbgSsApiPort LPC port (ZwConnectPort). Everyone has
access to this port.
3. Ask dbgss to handle CreateProcess SsApi with client id (or pid or
tid only) of Target (ZwRequestPort).
4. Wait for dbgss to reply with CREATE_PROCESS_DEBUG_EVENT
(WaitForDebugEvent). Message contains duplicated handle(s).
5. When debugger's thread terminates (e.g. on logoff), Target process
or thread is terminated too (like it was regularly debugged).
How MS will solve this problem:
*) Impersonate requesting thread (or client of port); try to open
Target pid or tid; revert to self. If open failed, refuse
request/debugging/ duplication (csrss does it this way).
*) Put restrictions on DbgSsApiPort port : don't use WORLD SID, ..
*) move dbgss to kernel like in Windows XP ;)]
I will tell you which solution MS used after the next hotfix or SP
will be out.
How administrators can solve this problem:
*) Modify smss.exe file (one-byte change). See HotFix directory.
*) Hook NtConnectPort and refuse non-system/admin connections to
DbgSsApiPort.
*) Modify security descriptor of the port object in kernel memory, ...
Notes: It's interesting for how long (~6 years) was this "possibility"
available. The "beauty" of this "exploit" is that it is supported by
OS. No overflows, no buggy drivers, no invalid pointers, no syscalls,
no patching.
EliCZ, Mar-11-2002
Ссылки
1. http://www.anticracking.sk/EliCZ/
2. mailto:Bugs@EliCZ.cjb.net
3. http://www.anticracking.sk/EliCZ/bugs/DebPloit.zip
4. http://www.smartline.ru/software/DebPloitFix.zip
5. http://www.3dnews.ru/
6. mailto:akuzin@corbina.net
7. http://www.anticracking.sk/EliCZ/bugs/DebPloit.zip
8. http://www.anticracking.sk/EliCZ
/evk
--- tin/1.5.12-20020311 ("Toxicity") (UNIX) (Linux/2.4.18 (i686))
* Origin: Registered Linux user #194650 (2:5080/196.72)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.nethack/4004ef7e02f0.html, оценка из 5, голосов 10
|