15.10.2003

Стандартное использование скриптов и групповой политики в IIS Lockdown

Microsoft Active Directory и Group Policy содержат богатый набор инструментальных средств и процедур, призванных сохранить время и силы администратора в поддержании защиты домена. Блокировка сервера требует выполнения многих шагов, и, в зависимости от степени блокировки, это может занять  несколько часов. Данная статья  прежде всего написана для системных администраторов, которые хотят упростить управление IIS web сервером, используя сценарии с Active Directory и Group Policy.

Microsoft Active Directory и Group Policy содержат богатый набор инструментальных средств и процедур, призванных сохранить время и силы администратора в поддержании защиты домена. Блокировка сервера требует выполнения многих шагов, и, в зависимости от степени блокировки, это может занять  несколько часов. Данная статья  прежде всего написана для системных администраторов, которые хотят упростить управление IIS web сервером, используя сценарии с Active Directory и Group Policy.

Общий сценарий

Предположим, что ваша компания просит вас установить IIS сервер, возможно в DMZ. Проводя защиту, вы хотите выполнить все рекомендуемые процедуры, сформулированные Микрософтом. Также вам нужен недавно созданный сервер. А как же быть иначе, ведь бизнес развивается на больших скоростях. Из-за нехватки времени мы не достаточно часто задумываемся о защите. Это как раз тот случай, когда может пригодиться Active Directory.

Например...

В Group Policy есть хорошая особенность, с которой вы хорошо ознакомитесь, прочитав эту статью. Эта особенность - скрипты Startup и Shutdown. Они не слишком отличаются от сценариев используемых в NT, за исключением того, что Вы можете заставить эти политики обращаться к тем группам компьютеров, которые вы выбрали.

Сценарии Startup настраивается в Group Policy так, как вы хотите представить себе директивы выполняющиеся во время запуска. Эти сценарии выполняются прежде, чем пользователь получает ctrl-alt-del окно регистрации в системе, поэтому они выполняются с  привилегиями локальной системной учетной записи.

При всем том, что можно сделать в  Group Policy существует много того, что нельзя сделать. Для всего того, что нельзя делать существует VBScript! VBScript хорош тем, что разрабатывался для помощи администратору в автоматизации многих стандартных задач администрирования систем, включая (как в нашем случае) блокировку сервера. Например, следующий код:

	Dim Site  
Dim ServerName  
Dim SiteIndex  
ServerName = "LocalHost"
SiteIndex = "1"
Set Site = GetObject("IIS://" & ServerName & "/W3SVC/" & SiteIndex)
Site.LogExtFileDate = True
Site.LogExtFileTime = True
Site.LogExtFileClientIp = True
Site.LogExtFileUserName = True
Site.LogExtFileSiteName = False
Site.LogExtFileComputerName = False
Site.LogExtFileServerIp = True
Site.LogExtFileServerPort = True
Site.LogExtFileMethod = True
Site.LogExtFileUriStem = True
Site.LogExtFileUriQuery = False
Site.LogExtFileHttpStatus = False
Site.LogExtFileWin32Status = False
Site.LogExtFileBytesSent = False
Site.LogExtFileBytesRecv = False
Site.LogExtFileTimeTaken = False
Site.LogExtFileProtocolVersion = False
Site.LogExtFileUserAgent = True
Site.LogExtFileCookie = False
Site.LogExtFileReferer = False
Site.SetInfo
	

Этот сценарий приказывает IIS установить регистрацию. Изменение этого также же просто как изменение значений True и False. Скопируйте и вставьте этот код в блокнот, а затем сохраните  его как "logging.vbs". Убедитесь, что при сохранении вы изменили тип файла на "Все файлы (*.*)", чтобы блокнот не добавил в конец расширение .txt.

Теперь, зайдите в рассматриваемый web-сервер, и просмотрите в IISAdmin ваши параметры настройки регистрации.  Затем, найдите способ получить сценарий с web-сервера, (я рекомендую рабочий стол), кликните на нем и удивляйтесь. Вы можете сказать: "Ничего же не произошло". Но это не так. Закройте IISAdmin, а затем снова его откройте и проверьте параметры настройки регистрации. Класс! Теперь установлены новые параметры настройки, и все это Вы сделали, всего лишь с помощью щелчка мышки на одном маленьком сценарии.

Применение этого примера

Теперь с помощью простого щелчка мышки, вы способны полностью автоматизировать процесс открытия IISAdmin,  вместо щелканья мышкой по дереву,  вкладкам, кнопкам и. т.п. Можете верить или не верить, но для того, чтобы изменить один или два параметра настройки, требуется немало щелканей мышкой, когда у вас куча работы, которую необходимо сделать. Зачем продолжать делать то же самое много раз, если можно без этого обойтись. Автоматизируйте систему, чтобы делать вашу работу для вас.

Если бы вы имели целую армию таких сценариев, ыы могли бы автоматизировать практически все что нужно сделать на компьютере после установки операционной системы.  Это ограничено только вашим воображением и вашей хитростью при работе с VBScript. При работе с VBScript не требуется особой гениальности. Сперва, много интересного можно просто найти на  Google, запросив "vbs". Второе -это телеконференции со знающими людьми. Третье это то, что я собираюсь обеспечить Вас массой сценариев, которые помогут вам выполнить наиболее важные процедуры блокировки, сформулированные Microsoft для IIS 5.0 и Windows 2000 и  которые не были охвачены в групповой политике группы или в любых шаблонах защиты.

Для начала, измените параметры настройки регистрации вручную в IISAdmin так, чтобы они были полностью различны с установленными нами (не имеет значения каковы те параметры настройки, необходимо только удостовериться, что они различны, и что Вы их записали). Для чего все это, мы увидим позже. Вы еще помните те сценарии запуска в Group Policy, который мы упомянули ранее? Мы собираемся использовать эти установки для того, чтобы приказать Windows  выполнить, описанные выше сценарии, используя сценарии запуска в Group Policy. Далее скопируйте этот сценарий на какой-нибудь ресурс в сети.

Теперь необходимо сделать доступным каталог с вашим сценарием. Убедитесь, что вы записали его сетевой путь. Давайте войдем в Group Policy. Start -> Programs -> Administrative Tools -> Active Directory Users and Computers и Вы увидите на экране что-то вроде этого:

Имейте в виду, что я скрыл имя домена и добавил доменные компьютеры как Organizational Unit (OU). Вы не увидите это на вашем мониторе. Создайте новый OU и назовите его "Bob". Хорошо, возможно "Lockdown" был бы более подходящим. Теперь щелкните правой кнопкой мыши на "Lockdown" OU,  выберите пункт свойства, а в появившемся окне выберите вкладку Group Policy.

Нажмите кнопку NEW, которая создает новую групповую политику, затем измените имя этой политики на "Lockdown". Отредактируйте новую политику, что вызовет следующее окно:

Выберите "Computer Configuration", чтобы развернуть "Windows Settings", после нажмите на Scripts (Startup/Shutdown), а затем подождите и сделайте двойной щелчок на Startup. Эти действия вызовут следующее окно:

Добавьте новый сценарий. В данном случае вы не должны волноваться о передаче чего-либо в параметры сценария, т.к параметров просто нет. Так нажав на кнопке Browse, и выполнив обзор сетевого ресурса, вы сохранили ваш сценарий, а выбрав его, нажали на кнопку ОК. Теперь это должно появиться в поле "Script Name". Далее закройте все окна, включая окно Group Policy, а затем добавьте имя web-сервера в "Lockdown" organizational unit. Однажды выполните принудительный ответ от ваших контроллеров домена (предполагается, что их больше одного), затем перезагрузите web-сервер. Когда он перезагрузится, Вы сможете увидеть, как выполняется сценарий Startup. Войдите в систему, и проверьте ваши параметры настройки регистрации. Супер! Они были автоматически установлены для вас! Каждый раз при загрузке, эти сценарии меняют параметры настройки, и таким образом будут осуществлять политику. Даже если другой администратор позже изменит их, то это не будет иметь значения т.к., после перезагрузки, политика вернет все настройки  в прежнее состояние. Запомните все это, чтобы не задаваться вопросом, почему после перезагрузки не сохранились те параметры, которое вы меняли.

Дополнительные сценарии

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

  Const HKEY_CLASSES_ROOT = &H80000000 
Const HKEY_CURRENT_USER = &H80000001 
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003 
Const HKEY_CURRENT_CONFIG= &H80000005 
Const HKEY_DYN_DATA = &H80000006 

Const REG_SZ = 1 
Const REG_EXPAND_SZ = 2 
Const REG_BINARY = 3 
Const REG_DWORD = 4 
Const REG_MULTI_SZ = 7

Set objRegNT = GetObject( "winmgmts://localhost/root/default:StdRegProv" )
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objRegistry = GetObject("winmgmts:" & Computer & "root\default:StdRegProv")
sNetworkCards = "Software\Microsoft\Windows NT\CurrentVersion\NetworkCards"
RC = objRegistry.EnumKey(HKEY_LOCAL_MACHINE, sNetworkCards, sCardNumbers)

If (RC = 0) And (Err.Number = 0) Then

for q = lbound(sCardNumbers) to ubound(sCardNumbers)
sNetCard = "Software\Microsoft\Windows NT\CurrentVersion\NetworkCards\" & 
sCardNumbers(q) 
RCB = objRegistry.GetStringValue(HKEY_LOCAL_MACHINE, sNetCard, "ServiceName", 
sService)
If (RCB > 0) then 
msgbox "Error Number: " & err.number & vbCrLf & "Description: " & 
err.description,,"Error " 

Else

myCardObj = sService

SubKey = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & 
myCardObj

' This sets the ports that are allowed to be open. You can totally modify these 
values. 3389 is for Terminal Server.

TCPports = Array( "3389", "80" )
RawIPAllowed = Array( "53", "" )


ChangeTCPValues = objRegNT.SetMultiStringValue(HKEY_LOCAL_MACHINE, 
Subkey, "TCPAllowedPorts", TCPports)
ChangeProtoValues = objRegNT.SetMultiStringValue(HKEY_LOCAL_MACHINE, 
Subkey, "RawIPAllowedProtocols", RawIPAllowed)

End If
next
End if
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interface
s\Tcpip_" & myCardObj & "\NetbiosOptions", "2", "REG_DWORD"
WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableSec
urityFilters", "1", "REG_DWORD"
 

Этот сценарий в основном использует массив портов (3389, 80, 53), и приказывает Windows NT, или 2000, разрешить трафик только этим портам, блокируя все остальные. В Windows 2000 есть редактор IPSecurity, который выполняет более детальный контроль над этими портами, однако этот механизм не доступен в NT, а вышеупомянутые механизмы работают на обеих системах. Это можно считать самой стандартной централизованной межсетевой защитой. Микрософт рекомендует, чтобы серверы были размещены в защищенном DMZ, однако, эти предложения  являются другим уровнем защиты. Но все же будьте осторожны. Как только вы это примените, домен соединится с сервером, и заблокируется, потому что заблокированы все необходимые порты. Очевидно, что для того чтобы исправить это, вы можете по мере необходимости добавлять или удалять порты.

Ниже описан еще один не менее интересный сценарий:

  On Error Resume Next
Set objNetwork = WScript.CreateObject("WScript.Network")
strComputerName = objNetwork.ComputerName

'This part changes the OS user name
strNewUser = "IUSR_ACCT"
strOldUser = ("IUSR_" & strComputerName)

'This part tells IIS what that new username is so it doesn't get confused
Set oComputer = GetObject("WinNT://" & strComputerName)
Set oUser = GetObject("WinNT://" & strComputerName & "/" & strOldUser & ",user")
Set NewUser = oComputer.MoveHere(oUser.ADsPath, strNewUser)
Dim WebServerObj
Set WebServerObj = GetObject("IIS://localhost/W3SVC")
WebServerObj.Put "AnonymousUserName", "IUSR_ACCT"
WebServerObj.Put "AnonymousPasswordSync", TRUE
WebServerObj.SetInfo
  

Этот сценарий выполняет пару различных действий, но сначала необходима небольшая входная информация. IIS использует учетную запись IUSR_, где - имя вашего компьютера. Это имя пользователя весьма предположительно, если Вы способны получить имя хоста машины. Это также означает, что если нападавший запрашивал пароль, то он просто мог использовать учетную запись (IUSR_< machinename >) и неоднократно вводить неправильные пароли, пока заблокирована учетная запись. При некоторых условиях и в зависимости от вашей политики блокировки это может привести к отказу в обслуживании. Для устранения этого  Вы должны изменить на машине значение учетной записи IUSR_<machinename>, а затем изменить имя пользователя в утилите IISAdmin. Все это требует очень  много времени, особенно если вы должны настроить несколько серверов. Однако этот сценарий и групповая политика делают все это за один шаг.

Вы можете добавлять большее количество сценариев и других параметров настройки Group Policy, чтобы далее блокировать сервер. Вы заметили, что все описанное здесь разбито на отдельные сценарии? Это более модульный путь. Вы можете выбирать процедуры, которые были добавлены в сценарий/политику. Я отдаю должное Руссу Куперу и Куллену Джонсону за их работу с VBScript и IIS. Они создали сценарий, который полностью блокирует IIS. В моих сценариях,  я только разбил его на части, и добавил некоторые процедуры, специфические для операционной системы. Вы можете увидеть эти сценарии здесь.

Выводы

Вы могли бы спросить, почему кто-то оставляет незащищенным  Internet facing machine и передает эти связи домена? Есть два ответа на этот вопрос. Сначала, вы можете временно присоединиться к этому домену, что бы сохранились изменения, а затем отсоединиться. Но если вы имеете отдельный домен для DMZ, то вы можете только остававаться присоединенными там. В первом сценарии, вы должны были бы убедиться только в том, что никакие другие домены не оставлены на сервере, и осознать, что не существует механизм, который предписывал бы политику. Второй сценарий более приемлем по этой причине, потому что при каждой перезагрузке сервера, применяется политика. Если вы сильно обеспокоены связями домена, вы можете просто последовательно выполнять каждый из сценариев на вашем локальном компьютере. Конечно, это не полностью автоматизирует процесс, но достаточно эффективно и потребляет гораздо меньше времени, чем выполнение операций вручную. Также, вы можете создавать локальную политику, которая будет приводить в действие эти изменения, используя MMC, и выбирая встроенный  Group Policy. Также как, указано ранее, эти сценарии не будут охватывать все рекомендуемые процедуры. Например, Микрософт рекомендует, чтобы данные для вашего сайта были помещены в отдельный сектор системного раздела. Наши сценарии не будут проверять/корректировать эту проблему. Также, этими сценариями не устанавливается аудит и другие функции. Они лучше выполняются, используя шаблоны защиты и/или групповую политику для Windows 2000. Наконец, вы можете найти, что эти параметры настройки нарушают работу некоторых приложений, или причиняют еще какие-нибудь проблемы. Никогда не бойтесь. Вы можете восстановить заданную по умолчанию конфигурацию, используя те же самые методы. Обратите внимание, я не говорю, что вы можете восстанавливать предыдущие параметры настройки. Данные сценарии не будут делать этого. Сценарии для отмены изменений, внесенных сценариями блокировки, также включены в сценарии, описанные в этой статье. Также как, и с чем-либо другим, сперва проверьте их в тестовой среде! Вы сможете увидеть, что блокировка сервера, так же проста как установка операционной системы, добавление этого к соответствующему OU, а затем перезагрузка.

или введите имя

CAPTCHA