My knowledge base

вторник, 20 марта 2012 г.

Сканирование Windows без прав администратора

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

                    I.            Информация о жестком диске ПК (чтение информации о жестком диске).
                  II.            Права пользователей (чтение списка пользователей с указанными привилегиями):
1.       доступ к диспетчеру учетных данных от имени доверенного вызывающего;
2.       изменение метки объекта;
3.       создание символических ссылок;
4.       увеличение рабочего набора процесса;
5.       доступ к компьютеру из сети (SeNetworkLogonRight);
6.       работа в режиме операционной системы (SeTcbPrivilege);
7.       настройка квот памяти для процесса (SeIncreaseQuotaPrivilege);
8.       разрешить локальный вход в систему (SeInteractiveLogonRight);
9.       архивирование файлов и каталогов (SeBackupPrivilege);
10.   обход перекрестной проверки (SeChangeNotifyPrivilege);
11.   изменение системного времени (SeSystemTimePrivilege);
12.   создание файла подкачки (SeCreatePagefilePrivilege);
13.   создание маркерного объекта (SeCreateTokenPrivilege);
14.   создание глобальных объектов (SeCreateGlobalPrivilege);
15.   создание постоянных объектов совместного использования (SeCreatePermanentPrivilege);
16.   отладка программ (SeDebugPrivilege);
17.   отказ в доступе к компьютеру из сети (SeDenyNetworkLogonRight);
18.   отклонить локальный вход (SeDenyInteractiveLogonRight);
19.   разрешение доверия к учетным записям и компьютеру при делегировании (SeEnableDelegationPrivilege);
20.   принудительное удаленное завершение (SeRemoteShutdownPrivilege);
21.   создание журналов безопасности (SeAuditPrivilege);
22.   имитация клиента после проверки подлинности (SeImpersonatePrivilege);
23.   увеличение приоритета выполнения (SeIncreaseBasePriorityPrivilege);
24.   загрузка и выгрузка драйверов устройств (SeLoadDriverPrivilege);
25.   закрепление страниц в памяти (SeLockMemoryPrivilege);
26.   вход в качестве пакетного задания (SeBatchLogonRight);
27.   вход в качестве службы (SeServiceLogonRight);
28.   управление аудитом и журналом безопасности (SeSecurityPrivilege);
29.   изменение параметров среды оборудования (SeSystemEnvironmentPrivilege);
30.   запуск операций по обслуживанию логических дисков (SeManageVolumePrivilege);
31.   профилирование одного процесса (SeProfileSingleProcessPrivilege);
32.   профилирование загруженности системы (SeSystemProfilePrivilege);
33.   извлечение компьютера из стыковочного узла (SeUndockPrivilege);
34.   замена маркера уровня процесса (SeAssignPrimaryTokenPrivilege);
35.   восстановление файлов и каталогов (SeRestorePrivilege);
36.   завершение работы системы (SeShutdownPrivilege);
37.   овладение файлами или иными объектами (SeTakeOwnershipPrivilege).
                III.            Политики аудита (чтение информации о статусе включения указанного аудита):
1.       аудит событий входа в систему;
2.       аудит управления учетными записями;
3.       аудит доступа к службе каталогов;
4.       аудит входа в систему;
5.       аудит доступа к объектам;
6.       аудит изменения политики;
7.       аудит использования привилегий;
8.       аудит отслеживания процессов;
9.       аудит системных событий.

В MS проблема описана, но реакции пока не видно:
For purposes of compliance and audit Windows we should use least privilege (read only). But Windows has the following problems:
1. Lsa*InformationPolicy APIs were never designed (almost 20 years ago)
for remoting, and were designed to require administrative rights. These APIs manage the policy that the security subsystem enforces and it’s easy to effectively make someone an admin via policy, without regards to group membership.
2.IF they can't impersonate an administrator, you won't be able to retrieve the logical disk information. The only way to retrieve the class is to be a member of the administrators group on the local machine, ordinary users cannot retrieve this information from WMI because of the low level API execution restrictions. Need to inform that it's confirmed that this a normal behavior due to a change in security change.
To summarize it shortly, the issue occurs because the above classes under the cover uses APIs which require elevated privileges. This is by design and very difficult to change the work around is to use administrator credentials when accessed remotely. As WMI is ment to be used by Administrators we run here in a limitation of WMI for Standard Users that can´t be changed.
In regards to accessing i.e. Win32_CDROMDrive, Win32_QuickFixEngineering or Win32_PageFileSettings, the WMI provider, servicing these two classes requires the use of the SetupDi APIs which do require Administrator or Administrator or INTERACTIVE_USER access. … and all changes via the APIs are restricted to Admins. This is basically dictated by the PNP manager for device and driver access in case of Win32_CDROMDrive.
Using an agent does not solve the problem.
This problem does not exist in *nix systems (have full RBAC). 


Обходным маневром является написание скрипта, который запускается с правами администратора (ИТ администратор запускает по расписанию или как сервис), и таким образом разделить ИТ и ИБ. Но это полумера.

Но большую часть информации собрать можно, например, через WMI. Вот описание настройки привилегий:
МоёМесто.ru WMI ACCESS for non admin user.pdf (17 Kb)
Есть классная утилита для настройки привилегий: SetACL, хотя ещё понадобиться скачать dcomperm с сайта Microsoft (входит в SDK).

Получится, что-то типа этого:
@ECHO OFF
REM Проверяем правильность введенных параметров
IF /i "%1" NEQ "set" IF /i "%1" NEQ "unset" GOTO ERR
IF "%2" EQU "" GOTO ERR2
IF "%3" NEQ "" GOTO ERR3
IF "%4" NEQ "" GOTO ERR3
REM Проверяем, что пользователь существует (в искомой строке важны пробелы)
net user | find /I " %2 " > nul
IF ERRORLEVEL 1 GOTO ERR4
IF /i "%1" EQU "unset" GOTO UNSET
REM Права на чтение всей ветки HKCU (официальная утилита от MS) Право на чтение HKLM есть у группы "Пользователи"
subinacl /subkeyreg HKEY_CURRENT_USER /grant=%2=r > nul 2>nul
ECHO reg OK
REM Полные права на папку %systemroot%\temp
subinacl /subdirectories %systemroot%\temp\* /grant=%computername%\%2%=F
ECHO TEMP folder OK
REM Права на DCOM (официальная утилита от MS): разрешить локальный и удаленный доступ
dcomperm -ma set %2 permit > nul
REM Права на DCOM (официальная утилита от MS): разрешить удаленный запуск и активацию
dcomperm -ml set %2 permit level:rl,ra > nul
ECHO DCOM OK
REM Права на удаленный доступ (чтение) к WMI Namespace (утилита от www.codeproject.com/KB/system/WmiSecurity.aspx)
wmiSecurity /C="%computername%" /A /N=Root/CIMV2 /M="%computername%\%2:REMOTEACCESS" /R > nul
ECHO WMI OK
GOTO EXIT
:UNSET
REM удаляем права на чтение ветки реестра HKCU
subinacl /subkeyreg HKEY_CURRENT_USER /revoke=%2 > nul
ECHO reg OK
REM удаляем права на папку
subinacl /subdirectories %systemroot%\temp\* /revoke=%computername%\%2%
ECHO TEMP folder OK
REM удаляем права на локальный и удаленный доступ DCOM
dcomperm -ma remove %2 > nul
REM удаляем права на удаленный запуск и активацию DCOM
dcomperm -ml remove %2 > nul
ECHO DCOM OK
REM должны удалить права на WMI Namespace - пока утилита этого сделать не может, надо удалять вручную
GOTO EXIT
:ERR
ECHO First parameter is incorrect. Enter SET or UNSET
GOTO EXIT
:ERR2
ECHO Enter user name
GOTO EXIT
:ERR3
ECHO Too many parameters
GOTO EXIT
:ERR4
ECHO User not found
GOTO EXIT
:EXIT


В этом скрипте wmisecurity и subinacl лучше заменить на SetACL.

Комментариев нет:

Отправить комментарий