My knowledge base

понедельник, 23 апреля 2012 г.

Windows Remote Management (WinRM) - обзор


WinRM основан на стандартах Web Services for Management (службы для управления WS-Management).  Позволяет с помощью PowerShell 2.0 подключаться к удаленному компьютеру и запускать на нем команды. WinRM может разделять входящие соединения на порт 80 с компонентом IIS, который уже, возможно, работает с этим портом.
Поддержка:
Windows 7 и Windows 200R2 – изначально;
Window XP SP3, Windows Vista SP2, Windows Server 2003 SP2, Windows Server 2008 SP2 –
после установки обновления Windows Management Framework Core (http://support.microsoft.com/kb/968930).
Приложения Microsoft:
Sharepoint 2010, Exchange 2010, SQL Server 2008, Active Directory (2008R2), System Center Operations Manager 2007, Hyper-V и др.
Оборудование:
Intel  vPro
 Преимущества:
  •  запросы HTTP легко пересылать через брандмауэр и прокси-серверы;
  • универсальность для приложений Microsoft (планируется поддержка всех серверных приложений Microsoft);
  • высокая функциональность;
  • установка настройка стандартными средствами Windows;
  • передаваемый трафик шифруется;
  • возможность выполнения блока сценариев на нескольких компьютерах;
  • возможность выполнения блока сценария в фоновом режиме;
  • планируемая поддержка PowerShell во всех серверных приложениях Microsoft.
Сравнение WinRM с другими механизмами удаленного доступа Microsoft:
 










 Разграничение прав:
  • использовать пользователя  с  минимально необходимыми правами:
добавить права пользователю можно с помощью скрипта:
Имеющиеся маски доступа:
2032127 {$AccessMask = "FullControl"}
1179785 {$AccessMask = "Read"}
1180063 {$AccessMask = "Read, Write"}
1179817 {$AccessMask = "ReadAndExecute"}
1610612736 {$AccessMask = "ReadAndExecuteExtended"}
1245631 {$AccessMask = "ReadAndExecute, Modify, Write"}
1180095 {$AccessMask = "ReadAndExecute, Write"}
268435456 {$AccessMask = "FullControl (Sub Only)"}
default {$AccessMask = $DACL.AccessMask}

Пример настройки PowerShell для SharePoint: http://technet.microsoft.com/ru-ru/library/ee806878.aspx
 
Настройка WinRM:
Комплексная настройка (служба, firewall, PowerShell) проводится одной командой: Enable-PSRemoting.

Дополнительные сведения по WinRM и PowerShell:
 

вторник, 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.