Thursday, January 18, 2007

Выпуск N5. Открой тайну ключика! Работаем с registry.

Ну вот мы и подошли к одной из самых интересных и обширных, на мой взгляд, тем - конфигурирование параметров реестра Windows. Можно смело сказать что реестр, одно из коренных отличий конфигурирования Windows от других операционных систем, является как одной из блестящих идей Microsoft, так и одним из наиболее опасных и уязвимых мест в системе. Однако, возможность конфигурации практически любого параметра системы через единую базу данных, имеющую чёткую и ясную (может быть не для всех :)) структуру, а также частичный механизм само восстановления, стоит некоторой доли риска от опасности повреждения или внесения ложных данных. При условии правильной конфигурации и защиты, этот риск не больше чем у систем с файловой структурой конфигурации. Сам реестр, в конечном счёте, как вы понимаете тоже является набором файлов в определённом формате, такой файл называется ещё hive. Файлы всех разделов кроме HKEY_CURRENT_USER, хранятся в директории - %SystemRoot%\System32\Config.

И так из чего-же состоит реестр:

Первый подраздел это - HKEY_CLASSES_ROOT. В нем хранится информация, во-первых, о том какие действия ассоциированы с тем или иным расширением файла - т.е. какой исполняемый код и с какими параметрами будет вызван при обращении к файлу; во-вторых, информация о конфигурации COM, VB аппликаций, а так-же других (практически всех) объектов или связанных с ними классов. Данный раздел отражает информацию из двух других ветвей реестра, а именно: HKEY_LOCAL_MACHINE\SOFTWARE\Classes (в версиях WinNT 4.0 и ранее, только от сюда) и HKEY_CURRENT_USER\SOFTWARE\Classes. Нужно отметить, что если данные в этих двух разделах входят в конфликт, то используются значения из раздела - HKEY_CURRENT_USER\SOFTWARE\Classes.

Второй подраздел - HKEY_CURRENT_USER. Хранит информацию о настройках активного пользователя. Реально не является записью в реестре, а только линком на соответствующую ветвь (SID этого пользователя) в HKEY_USERS. Предназначен для облегчения доступа к профилю текущего пользователя. Эта запись создаётся каждый раз, при входе пользователя в систему. Если профиль недоступен (например, первый вход) он будет создан на основании профиля по умолчанию (.DEFAULT)

Третий подраздел - HKEY_LOCAL_MACHINE. Пожалуй самый важный из разделов реестра. В нем хранится вся информация о конфигурации аппаратного и программного обеспечения компьютера, а так-же раздел SAM где в зашифрованном виде хранятся пароли локальных пользователей - пожалуй единственный раздел куда по умолчанию отсутствует доступ даже администратору. Следует так-же отметить что тут хранится та самая "последняя известная хорошая конфигурация реестра", которую предлагается загрузить в случае повреждения или неудачной загрузки. Отсюда становится ясно, что эта версия хранит не полную копию реестра, а только ту часть которая необходима для успешной загрузки системы до момента подключения пользователя.

Четвёртый подраздел - HKEY_USERS Содержит профили: активного консольного пользователя (именно на эту ветвь указывает подраздел - HKEY_CURRENT_USER), .DEFAULT - его предназначение описывалось выше, три раздела со стандартными SID: S−1−5−18, S−1−5−19, S−1−5−20, это: LocalSystem, LocalService и NetworkService соответственно. Они необходимы для запуска соответствующих служб системы. Кроме того здесь есть классы для каждого из SID-ов. Могут быть так-же и дополнительные SID что свидетельствует о том что на машине запущены приложения или сервисы с правами других (не консольного) пользователей, например при помощи run as.

Пятый подраздел - HKEY_CURRENT_CONFIG. Последний раздел, он не содержит не каких данных, а является собственно указателем на HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles. Здесь содержится профиль аппаратного обеспечения данного компьютера.

На этом мы закончим общее рассмотрение этой увлекательной структуры - Windows registry (надеюсь, нам удастся продолжить его в другом издании, на другом гораздо более серьёзном уровне). Теперь можно приступить к основной цели этого раздела.

Конфигурация параметров безопасности системы в реестре:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows \System\ DisableCMD (DWORD) – Позволяет запретить интерактивное использование или запуск bat файлов командным интерпретатором cmd.exe Может принимать следующие значения 0 – разрешено всё, 1 – запрещён интерактивный режим а так-же запуск скриптов, 2 – запрещён интерактивный режим, но не запуск bat скриптов. Установите в 1 для всех учётных записей (помните, HKEY_CURRENT_USER – только текущий профиль) , которые не требуют запуска bat файлов. 2 – для всех остальных.
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\ CurrentVersion\Policies\System\ DisableRegistryTools (DWORD) – Позволяет запретить использование инструментов редактирования реестра, например regedit.exe, regedt32.exe. Установите в 1 для всех учётных записей.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ SecurePipeServers\winreg\AllowedPaths\ Machine (Multi-String – не используйте regedit в Win2K, только regedt32 во-избежания повреждения данных в этом формате) - Содержит список ветвей реестра которые доступны удалённо. Если вы не используете сервисы требующие удалённый доступ к данным в реестре – очистите этот ключ, в противном случае, постарайтесь минимизировать количество строк в нем.
HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\ Task Scheduler5.0\ для пользователя,
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\ Task Scheduler5.0\ для всей системы
"Property Pages" (DWORD) – Позволяет регулировать использование встроенного scheduler Windows – этот сервис имеет много уязвимостей и в общем случае его лучше остановить. Но, если ваш сервер использует управление заданиями через него, то как минимум уменьшите доступ к его настройкам. И так, установка этого ключа в 1 – запретит доступ к к свойствам уже существующих заданий.
"
Allow Browse" (DWORD) – Запрещает редактирование команды запускаемой заданием, блокирует кнопку "Browse" в свойствах Task Scheduler. Установите в 1 для активизации ограничения.
Execution (DWORD) – Блокирует возможность ручного запуска задания пользователем. Установите в 1 для активизации ограничения.
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\ Installer DisableMSI (DWORD) – Позволяет заблокировать установку программ через Windows installer service (сам сервисе тоже лучше остановить). Может принимать значения: 0 - разрешено всем, 1 - разрешено только администратору или 2 - запрещено всем. Я рекомендую устанавливать значение 2 для стабильных систем, с редко производимыми обновлениями.
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Policies\System\ DisableTaskMgr (DWORD) – При установке этого параметра в 1-у Task Manager будет заблокирован от запуска. Однако это не влияет на другие подобные утилиты сторонних производителей (Procexp и т.п.)
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Policies\System\ ScreenSaverGracePeriod (REG_SZ) - Устанавливает период между срабатыванием хранителя экрана и закрытием на пароль (если эта опция активизирована) сервера. Обычно существует некоторый промежуток времени, после срабатывания хранителя экрана, в течении которого не требуется введение пароля для возвращения к рабочему столу. Установите это время в 0 и эта задержка будет удалена. Теперь вы уверенны, что если вы видите хранитель - доступ к консоли заблокирован.
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Policies\Explorer\ CDRAutoRun (DWORD) – Параметр регулирует автозапуск дисков CD-R(W) или DVD-R(W). Поскольку автоматический запуск приложения с такого диска потенциально опасен, к тому-же если в этот момент активный пользователь имеет права администратора, программа может получить неограниченные права над сервером. Установите значение в 0, для отключения автоматического запуска.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Explorer\BitBucket NukeOnDelete (DWORD) – Этот ключ позволяет отключить перенос в корзину удаляемого файла, т.е. производит действия при нажатии Del как при Shift-Del. Дело в том что незадачливый пользователь может стереть секретную информацию не полностью, что позволит злоумышленнику произвести полное восстановление данных, без лишних усилий и не прибегая ко специальным средствам. Установите значение в 1 для немедленного уничтожения стираемой информации. По поводу стирания секретной информации нужно заметить следующее, используйте специальное программное обеспечение для полного уничтожения данных с диска. В противном случае, файлы будут лишь помеченными как удалённые и доступны к полному или частичному восстановлению до того момента как физическое пространство на диске, занимаемое стёртой информацией, не будет перезаписано другими данными.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EFS EfsConfiguration (DWORD) – Этот параметр позволяет включить или отключить использование EFS. Если вы не предполагаете использовать данный метод криптования на вашей машине - установите значение ключа в 1, в противном случае в 0.
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Policies\Explorer\ для пользователя,
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ CurrentVersion\Policies\Explorer\ для всей системы, NoDriveAutoRun (DWORD) - позволяет контролировать на каких из дисков будет разрешена функция AutoPlay. Параметр может принимать следующие значения: A: 1, B: 2, C: 4, D: 8, E: 16, F: 32, G: 64, H: 128, I: 256, J: 512, K: 1024, L: 2048, M: 4096, N: 8192, O: 16384, P: 32768, Q: 65536, R: 131072, S: 262144, T: 524288, U:1048576, V: 2097152, W: 4194304, X: 8388608, Y: 16777216, Z: 33554432, ALL: 67108863. Наиболее безопасный вариант, это полный запрет - 67108863.
HKEY_CURRENT_USER\Software\Microsoft\Windows\ CurrentVersion\Policies\Explorer\ для пользователя,
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ CurrentVersion\Policies\Explorer\ для всей системы, NoDriveTypeAutoRun (DWORD) – Позволяет управлять функцией авто-запуска в зависимости от типа устройства. Значение является битовой маской и состоит из следующих компонент:
0 Неизвестное устройство,
1 Не корневая директория,
2 Съёмные устройства (Floppy, ZIP),
3 Жёсткие диски,
4 Сетевые диски,
5 CD-ROM диски,
6 RAM диски,
7 Резервировано.
По умолчанию активны жёсткие диски и CD-ROM. Как и в приведущем случае рекомендуется полное отключение - 255 (0хFF).

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Explorer\BitBucket\ NoRecycleFiles (DWORD) - Запрещает перемещение файлов или директорий удалённых с помощью Windows Explorer в корзину. Для активизации установить в 1.
HKEY_CLASSES_ROOT\...\ NeverShowExt (DWORD) - Данный ключ добавляется в те разделы HKCR, файловые расширения которых необходимо спрятать не взирая на требования пользователя "показывать расширения файлов" - так называемые супер скрытые расширения. Такой подход может позволить злоумышленнику обмануть пользователя и заставить его открыть (а практически запустить) файл с опасным кодом под видом безобидного файла. Например файл pic.jpg.shs, будет выглядеть как обычная картинка pic.jpg. И так, удалите все встречающиеся в этом разделе ключи NeverShowExt.

На этом я пожалуй приостановлюсь до следующего раза. На последок хочу ещё раз напомнить, что все изменения связанные с разделом реестра HKEY_CURRENT_USER должны быть выполнены для всех учётных записей требующих установки параметров безопасности.

Cледующий раз:
Работаем с
registry, продолжение…

Если ваши советы и комментарии интересны всем, буду рад увидеть их здесь. С личными просьбами и предложениями, добро пожаловать на e-mail

Tuesday, January 2, 2007

Выпуск N4. Немного о безопасности в Windows или как из удобной вещи сделать надёжную.

Ну чтож, наша сегодняшняя тема - права доступа в файловой системе. Тема сама по себе не сложная но действительно важная для безопасности системы, и требующая внимательности при её реализации. Устанавливая жёсткие права на диске мы с одной стороны значительно повышаем устойчивость системы к внутренним атакам, когда атакующий уже имеет доступ к машине, но не имеет достаточно полномочий для реализации своих планов; с другой же стороны, мы имеем серьёзную угрозу вызвать неполадки (иной раз очень трудно объяснимые) в работе приложения а нередко и самой операционной системы. Несколько слов о файловых системах официально поддерживаемых Microsoft Windows, практически их две - это старая, добрая, но совсем не защищённая FAT32; и стандартная на сегодняшний день, и даже имеющая наконец совместимость с другими операционными системами (например Linux) NTFS. В FAT не было ни каких механизмов защиты от несанкционированного доступа к файлам, в NTFS появилась возможность устанавливать различные права на доступ, поиск, запуск и изменение файлов, а так же целый ряд дополнительных прав связанных с наследованием и передачей прав контроля. Более того начиная с Win2K, появилась так называемая шифрованная файловая система (EFS), которая позволяет криптовать таблицы файловой системы и информацию находящуюся в самих файлах. Этот механизм был предложен для защиты информации в off-line режиме, когда на компьютере запущена другая OS имеющая прямой доступ к данным на диске. К сожалению, на сегодняшний день, мы не можем считать это панацеей, и даже WinXP SP2 где этот вопрос был значительно усилен, не может противостоять специализированным системам доступа. Основной причиной такой ситуации является то что по причинам удобства работы, ключи криптования хранятся там же где и данные, а именно на самом локальном диске. Кстати, Microsoft рекомендует хранить копии сертификатов на отдельном носителе, поскольку при случайном их разрушении, доступ к данным (по заявлениям MS, но с некоторым допущением в жизни) будет безвозвратно утерян. Возможно так же постоянное хранение сертификата на внешнем носителе или на специальном сервере в домене, но по понятным причинам это может вызывать неудобства в виде отсутствия доступа к информации в нужный момент. Существует так же дополнительное ограничение на совместное использование файлов защищённых EFS - предоставление совместного доступа, путём добавления сертификатов, возможно только для файлов (не для директорий) и только отдельным юзерам (не группам). Думаю, на сегодняшний день, для обеспечения надёжной зашиты информации стоит воспользоваться разработками сторонних фирм. В заключении несколько слов о частном, но очень важном, случае криптования файлов - криптование SAM. Как известно, SAM это то самое место где Windows хранит пароли в зашифрованном виде. Сами эти файлы так же могут быть зашифрованными (по умолчанию начиная с Win2K) с помощью дополнительного ключа по MD5 протоколу. Обычно ключ тоже сохраняется на диске по специальному алгоритму. С помощью утилиты syskey он может быть удалён из системы или защищён дополнительным паролем. В этом случае после начала загрузки, но до авторизации в компьютер должна быть вставлена дискета (или другой носитель) с ключом, или введён пароль защиты ключа соответственно.

Хочу отметить что этот метод не защищает от разрушающих методов взлома, когда SAM администратора или другого пользователя разрушается, после чего производится безпарольный вход.

И так, после этого небольшого введения перейдём непосредственно к установлению прав на объекты в файловой системе NTFS. Права делятся на основные и расширенные, основные практически являются стандартными фиксированными наборами расширенных прав, предназначенными для определённой цели. NTFS так же поддерживает запрещающие права - т.е. правила которые запрещают те или иные действия пользователю. Их приоритет всегда выше чем у разрешающих. Основные: Полый контроль, Изменение, Запись, Чтение_и_Выполнение, Чтение. Их предназначение понятно из названий. Расширенные: Полый контроль, Исполнять файл (для директории - использовать в пути), читать (список файлов - поиск), читать основные атрибуты, читать расширенные атрибуты, писать (создавать файлы в директории), изменять данные (создавать поддиректории), устанавливать основные права, устанавливать расширенные права, удалять вложенные объекты (поддиректории и файлы), удалять (сами объекты), читать права, изменять права, передавать владение.

При установке прав можно делегировать их на ниже лежащие объекты - файлы и поддиректории, а также любые их сочетания (директория и поддиректории, директория и файлы и т.п.). Будьте очень внимательны при делегировании (особенно рекурсивном). Ошибки могут привести к серьёзным пробелам в безопасности системы, или к её не работоспособности. Microsoft распространяет специальные политики для восстановления прав "по умолчанию", однако, если ваш сервер выполняет дополнительные задачи (к примеру - веб сервер на базе IIS) этого может оказаться недостаточно. Последнее маленькое замечание, кроме прав доступа у файла существует так же, владелец. Этот пользователь имеет полный контроль над файлом независимо от того в какой группе он находится и какие права доступа выставлены в разделе security. Это необходимо помнить в том случае, если вы случайно удалили всех пользователей из списка прав доступа. В таком случае только владелец (не администратор, а именно владелец) сможет назначить новые права доступа.

На этом мы пожалуй закончим подготовительную часть и перейдём к рекомендациям по установки уровня безопасности доступа к файлам.

И так (для случая когда с:\ - системный диск):

  • C:\ - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.
  • C:\autoexec.bat - Administrators - полный контроль, SYSTEM - изменять. Заменить приведущее, отменить наследование сверху.
  • C:\boot.ini - Administrators - полный контроль, SYSTEM - изменять. Заменить приведущее, отменить наследование сверху.
  • C:\config.sys - Administrators - полный контроль, SYSTEM - изменять. Заменить приведущее, отменить наследование сверху.
  • C:\io.sys - Administrators - полный контроль, SYSTEM - изменять. Заменить приведущее, отменить наследование сверху.
  • C:\msdos.sys - Administrators - полный контроль, SYSTEM - изменять. Заменить приведущее, отменить наследование сверху.
  • C:\ntdetect.com - Administrators - полный контроль, SYSTEM - изменять. Заменить приведущее, отменить наследование сверху.
  • C:\ntld - Administrators - полный контроль, SYSTEM - изменять. Заменить приведущее, отменить наследование сверху.
  • C:\Program Files - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.
  • C:\Documents and Settings\ - Administrators - полный контроль, SYSTEM - изменять, "CREATOR OWNER" - полный контроль. Распространить на всю глубину заменяя приведущее.
  • C:\Documents and Settings\Administrator - Administrators - полный контроль, SYSTEM - изменять. Распространить на всю глубину заменяя привидущее.
  • C:\Documents and Settings\All Users - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.
  • C:\Documents and Settings\Default Users - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее. (Для AllUsers и DefaultUsers очень важно дать права на чтение для группы Users. В противном случае могут возникнуть проблемы при локальном входе в систему у не административных пользователей.
  • C:\WINNT (для общего случая используйте %SystemRoot%) - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.
  • C:\WINNT\Debug - Administrators - полный контроль, SYSTEM - изменять. Распространить на всю глубину заменяя привидущее.
  • C:\WINNT\Registration - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.
  • C:\WINNT\Repair - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.
  • C:\WINNT\system32 - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.
  • C:\WINNT\system32\*.msc - Administrators - полный контроль, заменяя приведущее.
  • C:\WINNT\System32\Config - Administrators - полный контроль, SYSTEM - изменять, заменяя привидущее.
  • C:\WINNT\system32\IAS - Administrators - полный контроль, SYSTEM - изменять, заменяя привидущее.
  • C:\WINNT\system32\Setup - Administrators - полный контроль, SYSTEM - изменять, заменяя привидущее.
  • C:\WINNT\System32\Spool - Administrators - полный контроль, SYSTEM - изменять, Users
  • C:\WINNT\system32\spool\Drivers - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать, заменяя приведущее.
  • C:\WINNT\system32\spool\Printers - Administrators - полный контроль, SYSTEM - изменять, заменяя привидущее.
  • C:\WINNT\system32\Dllcache - Administrators - полный контроль, SYSTEM - изменять, заменяя привидущее.
  • C:\WINNT\Temp - Administrators - полныйконтроль, SYSTEM - изменять, "CREATOR OWNER" - изменять. Распространить на всю глубину заменяя приведущее.
  • D:\ (и все остальные разделы) - Administrators - полный контроль, SYSTEM - изменять, Users - читать и запускать. Распространить на всю глубину заменяя приведущее.Обратите внимание на порядок изменения прав доступа к директориям, он важен для получения в результате установки необходимого результата.

Если у вас на сервере имеются пользователи с не интерактивным входом в систему (например веб пользователи IIS), бы можете установить Deny на полный контроль, он без распространения на всю глубину, на следующие директории:

C:\
C:\WINNT
C:\WINNT\Debug
C:\WINNT\Installer
C:\WINNT\Repair
C:\WINNT\Security
C:\WINNT\system32
C:\WINNT\System32\inetsrv
C:\WINNT\system32\Dllcache
C:\WINNT\system32\drivers
C:\WINNT\system32\os2
C:\WINNT\system32\Web

Ну что-ж на этом можно закончить очередной выпуск. В заключение только хочу сказать, если в вашей системе есть дополнительные сервисы которые используют специальные учётные записи, обратите внимание на права для них предустановленные. Однако если после hardening-а аппликация всё-же перестала работать (а это не редко, к сожалению) воспользуйтесь утилитой filemon для поиска недоступных путей.


Cледующий раз:
Открой тайну ключика! Работаем с registry

Если ваши советы и комментарии интересны всем, буду рад увидеть их здесь.
С личными просьбами и предложениями, добро пожаловать на e-mail