четверг, 29 сентября 2011 г.
Один из многих способов управления паролями
среда, 13 июля 2011 г.
Как узнать размер папки?
воскресенье, 23 января 2011 г.
Непонятный TrustedHosts
На днях мой коллега задал мне вопрос, на который я не смог ответить с ходу. Ему не удавалось подключиться, с помощью powershell remoting, к удаленному серверу, находящемуся в другом домене. При попытке сделать это он получал примерно вот такое сообщение
Не удалось подключиться к удаленному серверу. Сообщение об ошибке: Клиенту WinRM не удается обработать запрос. Проверку подлинности по умолчанию можно использовать с IP-адресом при следующ |
Я, в свою очередь, тоже попробовал сделать это в разных окружениях и получил несколько разных результатов:
После нескольких экспериментов мой коллега сообщил, что если добавить адрес удаленного сервера в TrustedHosts на клиентской машине, то все работает. Все довольно странно и запутано. По этому – давайте подробнее разберем все эти ситуации.
Прежде всего стоит отметить, что проблема возникает, когда используются не доменные окружения. То есть, если клиент и сервер находятся не в одном домене. Наиболее часто, на мой взгляд, встречаются три ситуации:
- компьютеры сервера и клиента расположены в разных доменах
- компьютер сервера расположен в домене а клиент – вне домена
- компьютеры сервера и клиента не входят в домен
Кроме того, исходя из сообщений об ошибках (да, их надо читать внимательно), и, соответственно, из методов обращения к серверу, есть две ситуации:
- при обращении к серверу, клиент указывает IP-адрес в качестве адреса назначения
- при обращении к серверу, клиент указывает имя в качестве адреса назначения
К сожалению в интернетах нет однозначного мнения по поводу того, где, на сервере или клиенте, нужно задавать параметр TrustedHosts, и нужно ли это вообще делать. На что это влияет и все такое. В целом, информация довольно скудная по этому поводу. Поэтому, после долгого забега по гуглу, я решил обратиться, куда бы вы думали – да, к первоисточнику. А именно – к спецификации на ws-management. Про параметр TrustedHosts там сказано следующее:
TrustedHosts: Contains host names to which the Web Services Management Protocol Extensions for Windows Vista clients are allowed to send requests by using an authentication scheme and transport that does not allow the client to authenticate the service, such as Basic over HTTP.
The specified host names may be either Internet host names or IP addresses. TrustedHosts
- Blank: No hosts are trusted.
- The asterisk "*" character: All hosts are trusted.
- A list of host name patterns separated by the comma "," character, in which each host name can be one of four possible values:
- String starting with the asterisk "*" character and containing at least two characters. All hosts that share the suffix are trusted.
- String ending with the asterisk "*" character and containing at least two characters. All hosts that share the prefix are trusted.
- The exact string "
": All NetBIOS names are trusted (for example, strings that do not contain the period "." character).
- A string without the asterisk "*" character: The host named by the string is trusted.
The default value for the <TrustedHosts> element MUST be a blank string.
Основная идея выделена. И это означает, что параметр TrustedHosts нужно использовать на клиенте. В этом списке указываются машины, при работе с которыми невозможно использовать схемы с поддержкой взаимной аутентификации. Таким образом, если и клиент и сервер находятся в одном домене, то для подключения вы можете использовать простую команду без дополнительных параметров.
Следующий этап – два домена с доверительными отношениями. В этом случае тоже нет необходимости в TrustedHosts. Однако необходимо обеспечить корректное разрешение имен. Однако, скажете вы, ведь в домене можно обращаться не только по имени, а еще и по адресу, и все должно работать корректно. А у нас, при попытке использовать адрес, вываливается ошибка. И вот тут возникает необходимость внимательно прочитать содержимое ошибки:
Проверку подлинности по умолчанию можно использовать с IP-адресом при следующих условиях: Транспортом является HTTPS или назначением является список TrustedHosts.
Прежде всего видим, что в TrustedHosts нужно указывать именно назначение. А почему такое ограничение на использование IP-адреса? Об этом написано в блоге Ask the Directory Services Team. Вкратце, там сказано, что нельзя в качестве использовать IP-адреса в синтаксисе записи SPN. И если в windows xp/2003 это работало то в Vista и старше при использовании IP-адреса в назначении не будет даже попыток использовать kerberos . Отсюда и ошибка: раз не используется протокол с взаимной аутентификацией – используйте HTTPS или пропишите TrustedHosts. Для того чтобы убедиться в этом, вы можете воспользоваться вашим любимым сниффером. В нем вы увидите, что клиент даже не пытается установить связь с сервером, если вы указываете в качестве назначения адрес. Ошибка выдается сразу. Более подробно про SPN вы можете так же прочесть в моей статье.
И наконец – не доменное окружение. Powershell знает, что клиентская машина не в домене. Значит kerberos по определению не возможен. Следовательно либо TrustedHosts либо HTTPS.
среда, 15 декабря 2010 г.
Скрипт для борьбы с kido
"\\server1", "\\server2" | test-kidoПри этом у вас на машине появятся консольные окошки с прогрессом проверки. Для работы вам нужно положить в path утилиты psexec и kk<. И при запуске скрипта будет немного счастья.
function test-kido {
[CmdletBinding()]
param (
[parameter(Mandatory=$true,ValueFromPipeline=$true,Position=0)]
[string[]]$computername
)
PROCESS {
$util = "psexec"
$commandLine = "$computername -c -f kk -y -a -z"
Start-Process -FilePath $util -ArgumentList $commandLine
}
}
четверг, 22 июля 2010 г.
Уязвимость в LNK
Уязвимость позволяет выполнить код от имени текущего пользователя, при работе системы с lnk файлами, примерно вот так:
Небольшой, так сказать, обзор.
Ну и собственно реакция MS Security Essentials:
Другие методы борьбы с уязвимостью lnk файлов:
пятница, 16 июля 2010 г.
Локальный администратор
По сути дела эта заметка так, ничего особенного. Просто мне, почему-то раньше эта мысль в голову не приходила. Наверное не задумывался.
Так вот. Часто бывает, когда необходимо залогиниться на компьютер пользователя с привилегиями администратора. Не runas использовать, а именно войти в графическую сессию. В этом кроется опасность, особенно если компьютер доменный, а аккаунт, под которым вы входите – доменного администратора. Если на компьютере “вирус” – он получит права доменного админа и вперде :), заре на встречу. Это, само собой – не хорошо. Что делать? А ничего сложного. Есть специальная доменная политика Restricted groups. Попросту говоря, вы можете указать, в какой локальной группе, какие пользователи должны содержаться. В этом случае вы можете создать доменного пользователя, с правами обычного пользователя, и централизованно добавить его в группу локальных администраторов на всех машинах домена. Само собой, что этот пользователь должен иметь сложный длинный пароль. Но зато зайдя под ним вы не дадите возможности вирусам шастать по домену.
PS.
Коллега, Ростислав, справедливо ткнул меня носом в мою ошибку:
2. По заметке: если ты запустишь процесс от имени локального админа, который также является локальным адмиом на других рабочих станциях, то у него будут все права на заражение парка машин.
Да, действительно, это так [заготавливает ведро пепла].
Однако продолжим.
воскресенье, 10 января 2010 г.
Сетевые порты, используемые ключевыми серверными продуктами Microsoft
Не стану приводить здесь полный список. Просто отошлю с соответствующей статье знаний.
среда, 23 сентября 2009 г.
О вреде доменного админа.
Наша песня хороша – начинай с начала. Очередной раз убеждаюсь в том, что даже производить какие либо действия на рабочих станциях пользователей с админскими привилегиями небезопасно. Особенно, если иметь дело с таким вирусом как kido.
Самый простой пример. Сегодня нужно было сделать некоторые действия на рабочей станции пользователя. Я без зазрения совести залогонился под доменным админом. Как водится, все сделал и оставил машину включенной. Не прошло и нескольких минут, как мне позвонили :). Файерволл засек активность с этой машины. Kido получил админские привилегии и побежал по сети.
Вот такая вот загогулина :)
суббота, 6 июня 2009 г.
SID для службы
В Windows Vista и более новых версиях ОС от Microsoft, есть довольно интересная и полезная фича – назначение SID (Security Identifier), каждому сервису отдельно. Добиться этого можно так:
sc sidtype
ОПИСАНИЕ.
Изменение параметра типа идентификатора безопасности (SID) службы.
Если данный параметр имеет значение unrestricted, диспетчер управления
службами (SCM) добавит SID этой службы к маркеру процесса службы в
следующий раз, когда этот процесс будет запущен при запуске первой из
своих служб. Данный параметр можно использовать только для служб
пользовательского режима Win32.
Если данный параметр имеет значение restricted, диспетчер управления
службами (SCM) добавит SID этой службы к маркеру процесса службы в
следующий раз, когда этот процесс будет запущен при запуске первой из
своих служб. Кроме того, SID данной службы будет добавлен к списку
ограничивающих SID в маркере процесса. Маркер процесса будет являться
ограниченным маркером. Дополнительные сведения об ограниченном маркере
см. в MSDN. Данный параметр можно использовать только для служб
пользовательского режима Win32. Кроме того, если служба является
участником разделяемого процесса, все службы, участвующие в этом
процессе, должны иметь данный тип SID, чтобы описанные выше действия
были выполнены.
Если данный параметр имеет значение none, SCM не будет добавлять SID
службы к маркеру процесса службы.
ИСПОЛЬЗОВАНИЕ:
sc <сервер> sidtype [имя службы] [тип]
ПАРАМЕТРЫ:
тип = <none|unrestricted|restricted>
То есть, вы можете указать системе, чтобы она сгенерировала специальный SID для вашей службы. К вашему сервису будет привязан SID, что даст возможность давать права на ресурсы конкретно вашей службе, и никому другому. Для этого необходимо, чтобы служба имела тип SID – unrestricted
Еще один интересный параметр – restricted. В том случае, когда он применяется, в маркер процесса, исполняющего службу, добавляется список ограничивающих SID. Например, если некий процесс выполняется с правами некоего пользователя и имеет доступ к некой папке, то если вы добавите к его маркеру ограничивающие SID, такие, что они не имеют таких прав – то и процесс, при попытке доступа в нее получит отказ. Это происходит потому, что при проверке доступа происходит две независимые проверки. Одна, для стандартного списка SID, вторая – для ограничивающего. Доступ предоставляется только в том случае, если обе проверки проходят без ошибок. По большому счету такой подход защищает систему от вашей службы, в случае, если она будет “взломана”, ведь обладая таким маркером она потеряет доступ на запись во многие места системы.
На самом деле я не большой специалист в написании скриптов :), однако вот таким вот макаром можно узнать, какие службы с каким типом SID запущен в Vista:
cls
function sidType ($name)
{
$si = new-object System.Diagnostics.ProcessStartInfo
$si.FileName = "sc.exe"
$si.CreateNoWindow = $true
$si.RedirectStandardOutput = $true
$si.UseShellExecute = $false
$si.Arguments = "qsidtype " + $name$proc = [diagnostics.process]::Start($si)
$proc.WaitForExit()
[string] $str = $proc.StandardOutput.ReadToEnd().Trim().Split("`n") | Select-String -Pattern "SERVICE_SID_TYPE: "
$str.Replace("SERVICE_SID_TYPE: ","").Trim()
};$wmiServices = @{}
Get-WmiObject -Namespace root\cimv2 -Class Win32_Service| ForEach-Object {
$sidType = sidType $_.Name
$wmiServices.Add($_.Name,$sidType)
}$wmiServices.Keys | where-object {$wmiServices[$_] -eq "UNRESTRICTED"} | Format-Table
В результате, с типом RESTRICTED в моей системе запущены всего несколько служб:
NetTcpPortSharing
DPS
BFE
pla
MpsSvc
четверг, 4 июня 2009 г.
О системных пользователях.
Как всем, наверное, известно, в системе есть такие встроенные пользователи как:
- LocalService
- NetworkService
- LocalSystem
Что это за пользователи, и чем они отличаются? Зачем они собственно нужны? Особенно первые два.
Сначала о них. Первые два пользователя появились в win2k3/win xp. Эти учетные записи созданы специально для обеспечения безопасного исполнения служб. Раньше все службы исполнялись либо с правами Local System, либо с правами специально созданного пользователя. Это, в некотором роде создавало проблему, поскольку не все стремились создавать пользователей под каждую установленную службу, а тем более следить за паролями и правами этих пользователей.
В конечном итоге родились два этих специфических пользователя. Первый из них, обладает следующими привилегиями:
- SE_ASSIGNPRIMARYTOKEN_NAME (disabled)
- SE_AUDIT_NAME (disabled)
- SE_CHANGE_NOTIFY_NAME (enabled)
- SE_CREATE_GLOBAL_NAME (enabled)
- SE_IMPERSONATE_NAME (enabled)
- SE_INCREASE_QUOTA_NAME (disabled)
- SE_SHUTDOWN_NAME (disabled)
- SE_UNDOCK_NAME (disabled)
- Любыми другими привилегиями, назначенными пользователям и аутентифицированным пользователям (Authenticated Users)
При работе в сети этот пользователь аутентифицируется как анонимный пользователь. В отличие от него NetworkService представляется другим системам в сети как учетная запись компьютера, на котором он запущен, а так же его маркер доступа (token) содержит SID’ы групп everyone и Authenticated Users. Имеет такой набор привилегий:
- SE_ASSIGNPRIMARYTOKEN_NAME (disabled)
- SE_AUDIT_NAME (disabled)
- SE_CHANGE_NOTIFY_NAME (enabled)
- SE_CREATE_GLOBAL_NAME (enabled)
- SE_IMPERSONATE_NAME (enabled)
- SE_INCREASE_QUOTA_NAME (disabled)
- SE_SHUTDOWN_NAME (disabled)
- SE_UNDOCK_NAME (disabled)
- Любыми другими привилегиями, назначенными пользователям и аутентифицированным пользователям (Authenticated Users)
И наконец LocalSystem. В сети он представляется как компьютер, на котором он запущен. Однако набор его привилегий намного более обширен:
- SE_ASSIGNPRIMARYTOKEN_NAME (disabled)
- SE_AUDIT_NAME (enabled)
- SE_BACKUP_NAME (disabled)
- SE_CHANGE_NOTIFY_NAME (enabled)
- SE_CREATE_GLOBAL_NAME (enabled)
- SE_CREATE_PAGEFILE_NAME (enabled)
- SE_CREATE_PERMANENT_NAME (enabled)
- SE_CREATE_TOKEN_NAME (disabled)
- SE_DEBUG_NAME (enabled)
- SE_IMPERSONATE_NAME (enabled)
- SE_INC_BASE_PRIORITY_NAME (enabled)
- SE_INCREASE_QUOTA_NAME (disabled)
- SE_LOAD_DRIVER_NAME (disabled)
- SE_LOCK_MEMORY_NAME (enabled)
- SE_MANAGE_VOLUME_NAME (disabled)
- SE_PROF_SINGLE_PROCESS_NAME (enabled)
- SE_RESTORE_NAME (disabled)
- SE_SECURITY_NAME (disabled)
- SE_SHUTDOWN_NAME (disabled)
- SE_SYSTEM_ENVIRONMENT_NAME (disabled)
- SE_SYSTEMTIME_NAME (disabled)
- SE_TAKE_OWNERSHIP_NAME (disabled)
- SE_TCB_NAME (enabled)
- SE_UNDOCK_NAME (disabled)
На самом деле, редко каким службам необходим такой набор возможностей. Поэтому Microsoft рекомендует использовать для своих целей любой из первых двух, в зависимости от потребностей.
Мало того, в Vista/Win7 появилась возможность еще более активно манипулировать привилегиями. Для этого в sc.exe появился параметр privs:
sc privs
ОПИСАНИЕ.
Изменение параметра необходимых прав для службы.
Параметры прав вступают в силу, когда процесс службы запускается при
запуске первой службы процесса. В этот момент диспетчер управления
службами (SCM) определяет набор всех прав, необходимых всем
службам-участникам этого процесса, а затем создает процесс с такими
правами. Если данный параметр отсутствует, предполагается, что службе
требуются все права, разрешенные подсистемой безопасности для процесса,
который выполняется от имени учетной записи, настроенной для этой
службы.
ИСПОЛЬЗОВАНИЕ:
sc <сервер> privs [имя службы] [права]
ПАРАМЕТРЫ:
права = <Права(разделенные косой чертой (/))>
[Например, SeBackupPrivilege/SeRestorePrivilege]
Этот параметр позволяет дополнительно управлять (удалять/добавлять) привилегии службы. На самом деле эти настройки хранятся в реестре, например у dhcp клиента они такие:
Однако это не всегда так. Например:
в случае с одним из экземпляров процесса svchost, запущеным под LocalService, набор привилегий складывается как все привилегии перечисленные в той группе служб, в которой запускается наш dhcp клиент. В итоге у процесса этих самых привилегий может оказаться немножко больше.
четверг, 28 мая 2009 г.
Немножко об управлении службами
В ответ на предыдущий пост оказалось вот что:
Вероятно, эти службы просто отключены. А в списке services.msc их не видно по той простой причине, что они имеют не английские названия, как ожидается, а русские. Вероятно так отработал руссификатор. Поэтому не люблю их :). Особенно, если они неофициальные.
Само собой разумеется, что службами можно управлять. Дело это достаточно простое с одной стороны, и сложное с другой. Нужно знать, что можно делать, а чего делать нельзя. Для управления службами есть утилита командной строки sc.exe. Это наиболее быстрый и полный способ это делать.
Использование:
Параметр <сервер> задается в формате "\\Имя сервера" . Используя этот параметр можну управлять сервисами удаленно, на других компьютерах, если, конечно, у вас есть на это права.
sc <сервер> [команда] [имя службы] <параметр1> <параметр2>...
Чтобы получить справку о командах: "sc [команда]"
Команда query Запрос состояния службы или перечисление состояний типов служб queryex Запрос расширенного состояния службы или перечисление состояний типов служб start Запуск службы pause Отправка службе управляющего запроса PAUSE. interrogate Отправка службе управляющего запроса INTERROGATE. Это управляющее сообщение – указание службе, обновить свой статус у SCM. continue Отправка службе управляющего запроса CONTINUE stop Отправка службе запроса STOP config Изменение конфигурации службы (необратимое). description Изменение описания службы failure Изменение действия, выполняемого службой при сбое. Тут можно задать действие, происходящее при отказе службы. Например можно службу перезапустить. failureflag Изменение флага действия, выполняемого службой при сбое. Флаг показывает, будут ли предприниматься действия по восстановлению, указанные в команде failure sidtype Изменение типа SID службы privs Изменение привилегий, требуемых для службы qc Запрос данных конфигурации для службы qdescription Запрос описания службы qfailure Запрос действия, выполняемого службой при сбое qfailureflag Запрос флага действия, выполняемого службой при сбое qsidtype Запрос типа SID службы qprivs Запрос привилегий, требуемых для службы delete Удаление службы (из реестра) create Создание службы. (добавление ее в реестр) control Отправка службе управляющего сигнала sdshow Отображение дескриптора безопасности службы sdset Установка дескриптора безопасности службы showsid Отображение строки SID службы, соответствующей произвольному имени GetDisplayName Получение выводимого имени службы GetKeyName Получение имени раздела для службы EnumDepend Перечисление зависимостей службы Следующие команды не требуют имени службы:
sc <сервер> <команда><option>
boot (ok | bad) Показывает, требуется ли сохранить последнюю загрузку в качестве последней удачной конфигурации загрузки Lock Блокировка базы данных служб QueryLock Запрос состояния блокировки базы данных диспетчера управления службами
В нашем случая, я думаю, надо просто запустить консоль с привилегиями администратора, и в ней выполнить несколько команд, имейтеввиду, что пробел после “start=” и перед типом старта обязателен:
sc config tapisrv start= demand
sc config rasauto start= demand
sc config rasman start= demand
понедельник, 27 октября 2008 г.
Критическое обновление от Microsoft
Толи я очень не внимателен и рассеян, толи это действительно большая проблема. Хотя, визуально выглядит как таковая.
Уважаемые коллеги,
Хотим проинформировать Вас, что на прошлой неделе Microsoft выпустила важное обновление безопасности для всех поддерживаемых версий операционных систем, адресованное против серьезной уязвимости ОС, которая может позволить удаленный запуск программного кода.
На данный момент определено, что злоумышленники производили единичные целевые атаки. После глубокого анализа данного риска, стало понятно, что используется нововыявленная уязвимость ОС Windows. В Microsoft был запущен процесс оперативного реагирования на вопросы безопасности (Software Security Incident Response Process (SSIRP)) с целью глубокого изучения проблемы и разработки обновления безопасности ОС. Принимая во внимания серьезность рисков, в интересах наших клиентов было принято решение выпустить внеочередное обновление ОС.
Убедительная просьба установить данное обновление как можно скорее!
Детали см. по ссылке http://www.microsoft.com/technet/security/bulletin/MS08-067.mspx)
Данная уязвимость может позволить удаленный запуск программного кода после получения пользователем особым образом сформированного сетевого пакета. Также возможно, что эта уязвимость может быть использована для проникновения эксплойтов. На системах Windows 2000, Windows XP и Windows Server 2003 она позволяет запускать вредоносный код без идентификации пользователя. В Windows Vista и Windows Server 2008 по умолчанию подобные действия может произвести только идентифицированный пользователь, благодаря изменениям в User Account Control (UAC).
Вдобавок к обновлению безопасности, Microsoft Malware Protection Center выпускает новые сигнатуры защиты против вредоносного ПО, которое было выявлено в процессе изучения данных атак. После обновления сигнатур обладатели Microsoft Forefront и Microsoft OneCare будут защищены против попыток использовать данную уязвимость.
Microsoft прикладывает все усилия, чтобы максимально широко распространить информацию о данной угрозе, и предупредить клиентов и партнеров. Просьба переслать данную информацию вашим клиентам, чтобы они обновили сигнатуры и были защищены от возможных атак.
Клиентам, которые подозревают, что они могли стать объектами подобной атаки, следует обратиться в службу поддержки на http://www.microsoft.com/protect/support/default.mspx, а также в правоохранительные органы.
Заранее благодарны за внимание к данной проблеме.
С уважением,
Майкрософт Украина
пятница, 24 октября 2008 г.
А знаете ли вы что ... №2
psexec -i -s <имя проверяльщика>