
- •Методы, затрудняющие использование скопированной информации
- •Этапы работ по защите персональных данных
- •Создание режима защиты персональных данных
- •Основные отличия поточных шифров от блочных
- •Проектирование поточных шифров
- •Структура сертификата [править]
- •Программная реализация методов защиты в Windows Избирательное управление доступом
- •Маркер доступа
- •Сканирование файловой системы
- •Кража ключевой информации
- •Подбор пароля
- •Сборка мусора
- •Превышение полномочий
- •Программные закладки
- •Стандарты защищённости ос
- •Процессы-серверы
- •Разграничение доступа с помощью доменов безопасности
- •Средства аудита
11111111111111111111111111111111111111111111111111111111
Программное обеспечение может подвергаться НСД с различными целями. Основными целями являются:
копирование и дальнейшее использования ПО с нарушением прав интеллектуальной собственности;
копирование и исследование ПО;
копирование и модификация ПО.
Для предотвращения НСД к ПО применяются следующие методы:
препятствия к использованию скопированной информации;
идентификации и аутентификации пользователей ПО;
разграничения доступа к файлам, каталогам и дискам;
защиты ПО от исследования;
контроль целостности ПО.
Методы, затрудняющие использование скопированной информации
Для предотвращения угрозы копирования программ или данных применяются методы, которые условно можно разбить на две группы:
методы, затрудняющие чтение скопированной информации;
методы, препятствующие использованию скопированной информации.
Методы первой группы основаны на особенностях записи информации на сменные носители, копии с которых трудно или невозможно считать на других накопителях, не входящих в состав данной Компьютерной Системы (КС). КС должна содержать накопитель со стандартными параметрами и накопитель с нестандартными параметрами форматирования носителя. В современных ОС, работающих в защищённом режиме, доступ к управлению накопителями происходит через соответствующий драйвер. Поэтому, при решении задачи перепрограммирования режимов накопителя, стоит задача написания собственного драйвера устройства.
Вторая группа методов предназначена для защиты прочитанной со сменного носителя информации. Наиболее действенным методом защиты программ является привязка программы к конкретной КС при её установке. Для создания привязки инсталляционная версия программы содержит специальный блок, анализирующий состав и параметры КС. Эти параметры определяются и сохраняются в установленной программе. При каждом запуске программа сравнивает полученные ею текущие параметры среды с сохранёнными параметрами, и делает вывод о НСД. В зависимости от возможностей ОС, в случае определения НСД, могут быть проведены деструктивные действия от сокращения выполняемых функций до уничтожения программных модулей. Для защиты данных чаще всего используется криптографическое преобразование. Рассмотрим стандартные API функции для реализации этих методов защиты от НСД.
22222222222222222222222222222222222222222222222222222222222
В качестве анализируемых характеристик для получения привязки используются такие параметры как тип процессора, номер BIOS, номер жёсткого диска и др. Эта информация может стать основанием для создания ключа защиты программ, которые не должны покидать данную КС.
А. Для привязки программы в ОС Windows NT можно использовать API функции, возвращающие сведения об аппаратных и программных средствах КС (System Information Functions):
GetComputerName |
Получить имя NetBIOS локального компьютера. |
GetKeyboardType |
|
GetSystemDirectory |
|
GetSystemInfo |
|
GetSystemMetrics |
Получить метрики и конфиг. Установки |
GetSystemWindowsDirectory |
|
GetUserName |
Получить имя пользователя текущей нити. |
GetUserNameEx |
Получить имя и другую информацию о безопасности, вызываемой нити. |
GetVersion |
Gets the version number of the operating system. |
GetVersionEx |
Gets the version of the current operating system. |
GetWindowsDirectory |
Gets the path of the Windows directory. |
IsProcessorFeaturePresent |
Determines whether a processor feature is supported by the current computer. |
SystemParametersInfo |
Queries or sets system-wide parameters. |
Можно использовать команды, управляющие периферийным оборудованием, объединяемые общим именем IOCTL. Основной функцией для подачи команд является функция DeviceIoControl, которая посылает команду прямо на указанный драйвер устройства. Для получения сведений об устройствах можно использовать такие команды
IOCTL_DISK_GET_DRIVE_GEOMETRY |
Получить информацию о физической геометрии диска |
IOCTL_DISK_GET_DRIVE_LAYOUT |
Получить информацию о каждом разделе жёсткого диска |
IOCTL_DISK_GET_PARTITION_INFO |
Получить информацию о разделе диска |
3333333333333333333333333333333333333333333333333
Полученные сведения об устройстве можно запомнить в тексте самой программы или в труднодоступной для обычного пользователя директории. Чтобы повысить надёжность хранения данных привязки необходимо применить к ним криптографическую функцию, называемую хеш-функцией. Хеш-функция или, как её ещё называют, функция дайджеста, это небольшое по размеру (к общему объёму исходных данных) значение, однозначно идентифицирующее данные. Обычный размер хеша – 128 или 160 бит. Хеш никакой информации о зашифрованных данных не несёт, однако, однозначно их идентифицирует. По нему невозможно получить какие-либо сведения об исходных данных, однако любое изменение данных приводит к изменению и хеш-функции, поэтому она используется для проверки их целостности путём взятия от переданных данных хеш-функции.
Криптография является важной частью средств защиты данных. Поэтому Microsoft создала библиотеки функций криптозащиты – CryptoAPI (CAPI подробнее см. MSDN). Они используют для своей работы Cryptographic Service Providers (CSP). На КС может быть установлено несколько CSP. Каждый CSP использует специфический набор крипт-алгоритмов. CSP может быть реализован как программно, так и аппаратно – smart картами. Особенностью CryptoAPI является то, что они скрывают место хранения используемых ключей. Некоторые CSP сохраняют ключи на аппаратном уровне, некоторые используют системный регистр, а другие используют файловую систему. Smart карты обеспечивают более высокий аппаратный уровень защиты секретных ключей.
Для создания хеша необходимо использовать несколько функций CryptoAPI (CAPI).
1. Функция получения хендла частного контейнера ключей внутри отдельного CSP. По полученному хендлу можно затем вызывать выбранный CSP.
BOOL WINAPI CryptAcquireContext
(
HCRYPTPROV *phProv,
LPCTSTR pszContainer,
LPCTSTR pszProvider,
DWORD dwProvType,
DWORD dwFlags
);
Эта функция позволяет найти CSP с характеристиками заданными параметрами dwProvType и pszProvider. Если CSP найден, функция находит контейнер ключей для данного CSP по имени, указанном параметром pszContainer. Различные флаги параметра dwFlags, позволяют создавать и удалять контейнеры ключей.
phProv
[из] Указатель на хендл CSP.
pszContainer
[в] Имя контейнера. Когда dwFlags равен CRYPT_VERIFYCONTEXT, pszContainer должен быть NULL. Это значит, что будет выбран контейнер с именем по умолчанию. Программный CSP Microsoft использует по умолчанию идентификационное имя пользователя, но другие CSP могут по умолчанию иметь другие имена. Приложение не должно использовать контейнеров по умолчанию, потому что другое приложение может испортить хранящиеся там ключи. Можно получить имя контейнера используя функцию CryptGetProvParam.
pszProvider
[в] NULL имя CSP. Если этот параметр NULL, используется CSP по умолчанию. Можно получить имя CSP используя функцию CryptGetProvParam.
dwProvType
[в] Указывает тип CSP. Подробнее о типах см. Cryptographic Provider Types.
dwFlags
[в] Некоторые флаги
-
Value
Meaning
CRYPT_VERIFYCONTEXT
Запрещает доступ к частным ключам.
CRYPT_NEWKEYSET
Создание нового контейнера.
2. Для работы с хеш-функциями необходимо создание хеш объекта. Следующая функция возвращает хендл созданного хеш объекта.
BOOL WINAPI CryptCreateHash
(
HCRYPTPROV hProv,
ALG_ID Algid,
HCRYPTKEY hKey,
DWORD dwFlags,
HCRYPTHASH *phHash
);
hProv
[в] Хендл CSP.
Algid
[в] структура ALG_ID (unsigned int), содержащая тип хеш-алгоритма. Значение этого параметра зависит от типа CSP.
hKey
[в] Если хеш-функция имеет ключ, то он указывается в этом параметре. В безключевых алгоритмах указывается нуль.
dwFlags
[в] всегда нуль.
phHash
[из] Указатель на хендл созданного хеша.
3. Вычисляет хеш функцию
BOOL WINAPI CryptHashData
(
HCRYPTHASH hHash,
BYTE *pbData,
DWORD dwDataLen,
DWORD dwFlags
);
hHash
[в] Хендл хеш объекта.
pbData
[в] Указатель на буфер хешируемых данных.
dwDataLen
[в] Количество байт данных.
dwFlags
[в] Всегда нуль
4. Функция, которая по запросу может вернуть параметры существующего хеша
BOOL WINAPI CryptGetHashParam
(
HCRYPTHASH hHash,
DWORD dwParam,
BYTE *pbData,
DWORD *pdwDataLen,
DWORD dwFlags
);
hHash
[в] Хендл хеш объекта, к которому посылается запрос
dwParam
[в] Тип запроса:
-
HP_ALGID
Получить алгоритм хеширования
HP_HASHSIZE.
Число байтов, занимаемых хешем
HP_HASHVAL
Значение хеша
pbData
[из] Указатель на буфер, куда возвращаются указанные данные. Форма данных зависит от типа запроса. Этот параметр может быть NULL, чтобы установить требуемый размер буфера
pdwDataLen
[в/из] Указатель на размер в байтах буфера pbdata. В него возвращается размер прочитанных данных.
dwFlags Всегда нуль.
444444444444444444444444444444444444444444444444444444444
Разграничение доступа
Субъектом доступа или просто субъектом называют любую сущность, способную инициировать выполнение операций над объектом (пользователи, процессы).
Объектом доступа или просто объектом называется любой элемент ОС, доступ к которому субъекта доступа может быть произвольно ограничен (файлы, устройства). Возможность доступа определяется архитектурой ОС и текущей политикой безопасности.
Методом доступа к объекту называется операция, определённая для данного объекта. Ограничение доступа к объекту связано именно с ограничением возможных методов доступа.
Владелец объекта – субъект, которому принадлежит (создан им) объект, и который несёт ответственность за конфиденциальность содержащейся в объекте информации, а так же за доступ к объекту.
Право доступа к объекту – право на доступ к объекту по одному или группе методов доступа.
Разграничение доступа – совокупность правил, определяющая для каждой тройки субъект – объект – метод наличие или отсутствие права доступа по указанному методу.
Существует несколько моделей разграничения доступа.
А. Избирательное (дискреционное) разграничение доступа. Эта модель характеризуется следующим набором правил:
Для любого объекта ОС существует владелец.
Владелец может произвольно ограничивать доступ субъектов к данному объекту.
Для каждой тройки субъект – объект – метод возможность доступа определена однозначно.
Существует хотя бы один привилегированный пользователь (администратор), имеющий возможность обратиться к любому объекту по любому методу доступа.
В этой модели для определений прав доступа используется матрица доступа, строки которой – субъекты, а столбцы – объекты. В каждой ячейке хранится набор прав доступа. Типичный объём матрицы доступа для современной ОС составляет десятки мегабайт. На практике используется два способа кодирования матрицы доступа, сокращающие её размеры.
Вектор доступа – вектор, фиксированной длины, разбитый на несколько подвекторов, каждый из которых описывает доступ определённого типа субъектов. Недостатком является фиксированное число типов субъектов, например, UNIX имеет три типа субъектов.
Список доступа – для каждого объекта список переменной длины, элементами которой является структуры, содержащие
идентификатор субъекта;
права доступа на данный объект;
флаги и атрибуты.
Используется в Windows NT, требует большего объёма оперативной и дисковой памяти.
Модель избирательного разграничения доступа является наиболее распространённой моделью, что обусловлено сравнительной простотой реализации и простотой правил разграничения доступа для пользователей.
В. Изолированная программная среда. Представляет расширение предыдущей модели. Имеет следующие правила разграничения доступа:
1.-4. Правила для избирательного разграничения доступа.
Для каждого субъекта определён список программ, которые этот субъект может запускать.
Изолированная программная среда повышает защищённость ОС от разрушающих программных воздействий программных закладок и вирусов, так как ограничивает права доступа к объектам не только субъектов но и программ. Например, к файлам с расширением .doc имеют доступ только программы Word и Viewer. К недостаткам этой модели можно отнести сложности администрирования ОС.
С. Полномочное (мандатное) разграничение доступа без контроля информационных потоков. Имеет следующие правила разграничения доступа:
1.-4. Правила для избирательного разграничения доступа.
Среди множества объектов доступа ОС выделяется подмножество объектов полномочного разграничения доступа. Каждый такой объект имеет гриф секретности. Чем выше его числовое значение, тем секретнее объект.
Каждый субъект доступа имеет уровень допуска.
Если объект относится к подмножеству полномочного разграничения доступа и имеет значение уровня секретности выше, чем открывающий его субъект значение уровня допуска, то доступ субъекта к объекту запрещён независимо от состояния матрицы разграничения допуска.
D. Полномочное (мандатное) разграничение доступа с контролем информационных потоков.
1, 2, 4. Правила для избирательного разграничения доступа.
3. Для каждой четвёрки субъект – объект – метод – процесс возможность доступа определена в каждый момент времени. Каждый момент времени работы процесса однозначно определяет права доступа. Права доступа процесса определяются перед выполнением любого метода доступа.
5– 7. Правила для полномочного разграничения доступа.
Каждый процесс имеет уровень конфиденциальности, равный максимуму из грифов секретности объектов, открытых процессом на протяжении своего существования.
Если объект является элементом множества полномочного разграничения доступа и гриф его секретности ниже уровня конфиденциальности, обратившегося к нему для записи процессу, то доступ к объекту запрещён независимо от состояния матрицы доступа. Это правило предотвращает утечку секретной информации.
Понизить гриф секретности объекта может только субъект, который имеет более высокий уровень доступа к объекту чем гриф секретности объекта и обладает специальной привилегией на изменение грифа секретности.
Эта модель значительно снижает производительность ОС, так как требует проверки прав доступа не только при открытии объекта, но и при любом методе доступа к нему. Кроме того, если процесс работает с секретным и не секретным объектами, то запись в несекретный объект невозможна.
555555555555555555555555555555555555555555555555555555555555
Методы защиты программ от исследования
Для защиты программ от исследования необходимо применять методы защиты от исследования файла с исполняемым кодом программы, хранящемся на внешнем носителе, а также методы защиты исполняемого кода, загружаемого в оперативную память для выполнения этой программы. В первом случае защита может быть основана на шифровании конфиденциальной части программы, а во втором - на блокировании доступа к исполняемому коду программы в оперативной памяти со стороны отладчиков [ЗШ]. Кроме того, перед завершением работы защищаемой программы должен обнуляться весь ее код в оперативной памяти. Это предотвратит возможность несанкционированного копирования из оперативной памяти дешифрованного исполняемого кода после выполнения защищаемой программы. Таким образом, защищаемая от исследования программа должна включать следующие компоненты:
инициализатор;
зашифрованную конфиденциальную часть;
деструктор (деициниализатор).
Инициализатор должен обеспечивать выполнение следующих функций:
сохранение параметров операционной среды функционирования (векторов прерываний, содержимого регистров процессора и т.д.);
запрет всех внутренних и внешних прерываний, обработка которых не может быть запротоколирована в защищаемой программе;
загрузка в оперативную память и дешифрование кода конфиденциальной части программы;
передача управления конфиденциальной части программы.
^ Конфиденциальная часть программы предназначена для выполнения основных целевых функций программы и защищается шифрованием для предупреждения внесения в нее программной закладки. Деструктор после выполнения конфиденциальной части программы должен выполнить следующие действия:
обнуление конфиденциального кода программы в оперативной памяти;
восстановление параметров операционной системы (векторов прерываний, содержимого регистров процессора и т.д.), которые были установлены до запрета неконтролируемых прерываний;
выполнение операций, которые невозможно было выполнить при запрете неконтролируемых прерываний;
освобождение всех незадействованных ресурсов компьютера и завершение работы программы.
Для большей надежности инициализатор может быть частично зашифрован и по мере выполнения может дешифровать сам себя. Дешифроваться по мере выполнения может и конфиденциальная часть программы. Такое дешифрование называется динамическим дешифрованием исполняемого кода. В этом случае очередные участки программ перед непосредственным исполнением расшифровываются, а после исполнения сразу уничтожаются. Для повышения эффективности защиты программ от исследования необходимо внесение в программу дополнительных функций безопасности, направленных на защиту от трассировки. К таким функциям можно отнести:
периодический подсчет контрольной суммы области оперативной памяти, занимаемой защищаемым исходным кодом; сравнение текущей контрольной суммы с предварительно сформированной эталонной и принятие необходимых мер в случае несовпадения;
проверку количества занимаемой защищаемой программой оперативной памяти;
сравнение с объемом, к которому программа адаптирована, и принятие необходимых мер в случае несоответствия;
контроль времени выполнения отдельных частей программы;
блокировку клавиатуры на время отработки особо критичных алгоритмов.
Для защиты программ от исследования с помощью дизассемблеров можно использовать и такой способ, как усложнение структуры самой программы с целью запутывания злоумышленника, который дизассемблирует эту программу. Например, можно использовать разные сегменты адреса для обращения к одной и той же области памяти. В этом случае злоумышленнику будет трудно догадаться, что на самом деле программа работает с одной и той же областью памяти.
66666666666666666666666666666666666666666666666666666
Защи́та персона́льных да́нных — комплекс мероприятий технического, организационного и организационно-технического характера, направленных на защиту сведений, относящихся к определенному или определяемому на основании такой информации физическому лицу (субъекту персональных данных).