ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.04.2021

Просмотров: 1873

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

!

46

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 8

П

ри
ме

р

со

зд

ан

ия

за

щ

и

щ

ен

но

й

ба

зы

да

нн

ы

х

!

!

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

11.

Пользователь

  U21 

добавляет

содержимое

документа

имеющее

гриф

  «

ДСП

». 

Входим

под

именем

 U21.  

Подаем

контрольный

запрос

select * from doc_info_read; 

Пользователь

  U21 

видит

запись

т

.

к

он

назначен

в

качестве

ответственного

за

документ

Для

добавления

содержимого

документа

подаем

запрос

insert into doc_ins##"

ДСП

"#"

ДСП

" (r_doc##"

ДСП

"#"

ДСП

", 

comment##"

ДСП

"#"

ДСП

") values (1, '

Д

онесение

'); 

В

данном

случае

мы

могли

бы

и

не

указывать

метки

доступа

т

.

к

у

пользователя

 U21 

RAL 

и

 WAL 

и

так

равны

 (“

ДСП

”,”

ДСП

”). 

Мы

сделали

это

для

полноты

Теперь

можно

проконтролировать

добавленную

запись

подав

запрос

select * from doc_read; 

Ответственный

за

документ

видит

добавленную

информацию

  (

поле

content 

типа

BLOB 

мы

оставим

в

нашем

примере

пустым

т

.

к

оно

не

может

заполняться

запросами

и

это

уже

задача

приложения

на

защиту

это

никак

не

влияет

). 

12.

Начальник

отдела

 BOSS2 

проверяет

добавленное

содержимое

документа

Входим

под

именем

 BOSS2 

и

подаем

запрос

   

select * from doc_read; 

Начальник

отдела

также

видит

данные

документа

.

Жизненный

цикл

второго

документа

1.

Пользователь

-

секретарь

  SEC2 

создает

новый

документ

с

идентификатором

  2, 

именем

  ‘

Документ

  2’, 

и

относит

его

к

отделу

с

кодом

  2  (

в

нашем

примере

это

отдел

с

именем

  ‘

Отдел

  1’).   

Для

этого

соединяемся

с

сервером

БД

под

именем

SEC2 

и

подаем

запрос

insert into doc_info_ins(doc_id, name, r_division) 
values(2, '

Документ

 2', 2); 

Проверим

select * from doc_info_read; 

Получаем

только

одну

запись

  – 

о

только

что

добавленном

документе

Запись

о

первом

документе

пользователь

 SEC2 

не

видит

т

.

к

не

имеет

к

ней

отношения

.  

13.

Начальник

Отдела

  1 

назначает

в

качестве

исполнителя

документа

своего

подчиненного

 U11. 

Входим

под

именем

 BOSS1 

и

подаем

запрос

update doc_info_write##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"# set 

R_OPERATOR##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"#='U

1

1' where 

doc_id=

2

14.

Начальник

Отдела

  1 

передает

свою

функцию

контроля

документа

своему

подчиненному

 U12. 

Подаем

запрос

update doc_info_write##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"# set 

R_

REVIEWER

##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"#='U

12

' where 

doc_id=

2

Проверяем

результаты

select * from doc_info_read; 


background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 8

П

ри
ме

р

со

зд

ан

ия

за

щ

и

щ

ен

но

й

ба

зы

да

нн

ы

х

!

47

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

Видим

что

значение

поля

  R_REVIEWER 

поменялось

на

  U12. 

Заметим

что

  BOSS1 

продолжает

видеть

информацию

о

документе

т

.

к

является

начальником

отдела

к

которому

приписан

документ

Однако

если

подать

запрос

select * from doc_info_write; 

пользователь

  BOSS1 

не

увидит

ни

одной

строки

он

уже

не

является

ни

ответственным

ни

контролером

документа

поэтому

не

может

модифицировать

информацию

о

нем

15.

Пользователь

  U11 

добавляет

содержимое

документа

имеющее

гриф

  «

ДСП

». 

Входим

под

именем

  U11.   

Для

добавления

содержимого

документа

подаем

запрос

insert into doc_ins##"

ДСП

"#"

ДСП

" (r_doc##"

ДСП

"#"

ДСП

", 

comment##"

ДСП

"#"

ДСП

") values (2, '

Приказ

 1

'); 

Теперь

можно

проконтролировать

добавленную

запись

подав

запрос

select * from doc_read; 

Видим

добавленную

запись

16.

Пользователь

  U11 

добавляет

обновление

содержимого

документа

причем

на

этот

раз

оно

имеет

гриф

 «

СОВ

.

СЕКРЕТНО

». 

Подаем

запрос

insert into doc_ins##"

СОВ

.

СЕКРЕТНО

"#

(r_doc##"

СОВ

.

СЕКРЕТНО

"#, comment##"

СОВ

.

СЕКРЕТНО

"#) values 

(2, '

Приказ

 1 – 

секретная

часть

'); 

Проконтролируем

добавленную

запись

получив

также

информацию

об

уровне

чтения

записей

select doc_read.*, security(*,’R’) from doc_read; 

Видим

обе

записи

т

.

к

пользователь

U11 

имеет

право

чтения

информации

с

грифом

«

СОВ

.

СЕКРЕТНО

». 

Последняя

колонка

показывает

что

вторая

строка

действительно

добавлена

с

 RAL 

равным

 4 (

что

и

соответствует

 «

СОВ

.

СЕКРЕТНО

»). 

17.

Пользователь

  U12  (

контролер

документа

смотрит

содержимое

документа

  2. 

Входим

под

пользователем

 U12. 

Подаем

запрос

select * from doc_read; 

Видим

только

первую

запись

т

.

к

у

пользователя

  U12 

нет

прав

на

чтение

сов

секретной

информации

8.2. 

Проверка

выполнения

ПРД

по

модели

нарушителя

Проверим

как

в

нашей

БД

реализуются

необходимые

ПРД

1. 

Секретарь

пытается

получить

содержимое

секретного

документа

Теоретически

это

можно

попытаться

сделать

одним

из

запросов

select * from docum.doc_content; 

select * from doc_read; 

select * from doc_read where r_doc = 

1

Первый

запрос

отвергается

по

нарушению

доступа

Остальные

два

не

возвращают

данных

т

.

к

секретарю

не

назначен

ни

один

документ

Допустим

теперь

что

начальник

Отдела

  2  (BOSS2) 

назначил

секретаря

  SEC1 

в

качестве

ответственного

за

Документ

 1. 

Для

этого

войдем

под

пользователем

 BOSS2, 

и

подадим

запрос


background image

!

48

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 8

П

ри
ме

р

со

зд

ан

ия

за

щ

и

щ

ен

но

й

ба

зы

да

нн

ы

х

!

!

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

update doc_info_write##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"# set 

R_OPERATOR##"

НЕСЕКРЕТНО

"#"

НЕСЕКРЕТНО

"#='SEC1' where 

doc_id=1; 

Теперь

по

дискреционному

принципу

пользователь

  SEC1 

должен

увидеть

содержимое

документа

Но

содержимое

документа

имеет

уровень

чтения

  «

ДСП

», 

а

пользователь

 SEC1 

может

читать

только

информацию

с

грифом

 «

НЕСЕКРЕТНО

». 

Снова

войдем

под

пользователем

  SEC1 

и

подадим

один

из

перечисленных

выше

select-

запросов

из

 doc_read. 

Пользователь

не

видит

данных

Проверим

что

если

бы

 SEC1 

имел

доступ

хотя

бы

к

информации

грифа

 «

ДСП

», 

он

бы

увидел

содержимое

документа

Для

этого

войдем

под

АБ

и

подадим

запрос

alter user SEC1 level("

ДСП

","

НЕСЕКРЕТНО

"); 

Теперь

снова

войдем

под

  SEC1 

и

подадим

  SELECT 

из

  doc_read. 

Пользователь

увидел

данные

2. 

Секретарь

пытается

явно

назначить

ответственного

за

документ

 (

минуя

отдел

)

Речь

идет

о

добавлении

нового

документа

Войдем

под

пользователем

  SEC1 

и

попытаемся

подать

запрос

insert into doc_info_ins(doc_id, name, r_division, 
r_reviewer) values(10, '

Документ

 10', 2, ‘SEC2’); 

Т

.

е

мы

попытались

явно

задать

в

качестве

ответственного

  SEC2. 

Запрос

прошел

удачно

но

смотрим

что

получилось

select * from doc_info_read; 

Поле

  R_REVIEWER 

в

добавленной

записи

установлено

в

  ‘BOSS1’ 

вместо

  ‘SEC2’  – 

это

обеспечил

триггер

3. 

Работник

пытается

получить

информацию

или

содержимое

не

назначенного

ему

документа

Войдем

под

пользователем

 U11. 

Ему

был

назначен

документ

с

идентификатором

 2. 

Для

получения

информации

или

содержимого

документа

с

идентификатором

 1 

можно

было

бы

попытаться

использовать

один

из

запросов

select * from doc_info_read; 

select * from doc_info_read where doc_id = 1; 

select * from doc_read; 

select * from doc_read where r_doc = 1; 

Ни

один

из

этих

запросов

не

вернет

записей

о

документе

с

идентификатором

  1.  

Доступ

же

к

таблицам

напрямую

 (

не

через

представления

вообще

закрыт

4. 

Секретный

документ

случайно

назначен

сотруднику

который

не

имеет

доступа

к

секретным

сведениям

Это

требование

уже

два

раза

проверялось

Один

раз

когда

при

проверке

жизненного

цикла

документа

  2 

мы

вставили

данные

о

документе

с

грифом

  «

СОВ

.

СЕКРЕТНО

», 

и

контролер

документа

эту

запись

не

увидел

Второй

раз

когда

мы

проверяли

первое

ПРД

5. 

Работник

имеющий

доступ

к

секретному

документу

пытается

открыть

эту

информацию

 (

понизить

уровень

секретности

)

В

нашем

примере

пользователь

U11 

не

может

понизить

уровень

чтения

известной

ему

информации

ниже

 «

ДСП

».  

Первое

действие

могло

бы

быть

связано

с

попыткой

внести

в

таблицу

содержимого

документов

что

-

нибудь

с

 RAL 

ниже

 «

ДСП

» 


background image

!

!

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 8

П

ри
ме

р

со

зд

ан

ия

за

щ

и

щ

ен

но

й

ба

зы

да

нн

ы

х

!

49

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

insert into doc_ins##"

НЕСЕКРЕТНО

"#

(r_doc##"

НЕСЕКРЕТНО

"#) 

values(2); 

Результатом

является

ошибка

 1070 – 

нарушение

мандатного

доступа

Заметим

что

WAL 

самой

таблицы

 DOC_CONTENT 

не

позволяет

вносить

в

нее

записи

с

 RAL 

ниже

 «

ДСП

». 

Тогда

представим

что

пользователь

  U11 

получает

категорию

  DBA  (

дайте

ему

соответствующие

права

при

помощи

АБ

). 

Попытаемся

теперь

создать

от

имени

  U11 

несекретную

таблицу

create table notsec(c char(100) 
level(“

НЕСЕКРЕТНО

”,”

НЕСЕКРЕТНО

”)) 

level(“

НЕСЕКРЕТНО

”,”

НЕСЕКРЕТНО

”); 

По

-

прежнему

получаем

ошибку

доступа

:  WAL 

пользователя

опять

не

позволяет

создать

такую

таблицу

Теперь

представим

что

в

БД

есть

доступная

U11 

на

запись

несекретная

таблица

Можно

создать

ее

в

 INL:

username

 SYSTEM/MANAGER

create

 table notsec

(

c char(100) 

level(“

НЕСЕКРЕТНО

”,”

НЕСЕКРЕТНО

”)) 

level(“

НЕСЕКРЕТНО

”,”

НЕСЕКРЕТНО

”); 

grant all on notsec to public;

Пусть

теперь

 U11 

пытается

вставить

в

эту

таблицу

данные

с

уровнем

ниже

 «

ДСП

»

insert into system.notsec##”

НЕСЕКРЕТНО

”# values(‘

тест

’);

Опять

получаем

ошибку

нарушения

мандатного

доступа

Хотя

следующий

запрос

проходит

нормально

:

insert into system.notsec##”

ДСП

”# values(‘

тест

’);

Что

касается

попытки

раскрытия

секретных

данных

при

выгрузке

информации

из

БД

эта

проблема

должна

решаться

на

стыке

со

средствами

защиты

ОС

как

говорилось

в

лекции

6. 

Работник

не

являющийся

секретарем

пытается

добавить

новый

документ

Попробуем

добавить

информацию

о

документе

от

имени

пользователя

 BOSS1: 

insert into doc_info_ins(doc_id, name, r_division) 
values(20, '

Документ

 20', 2); 

Получаем

нарушение

привилегий

 (1022), 

т

.

к

только

пользователи

роли

 SECRETARY 

имеют

право

вставлять

записи

в

эту

таблицу

7. 

Работник

не

связанный

с

документом

пытается

добавить

его

содержимое

Попробуем

добавить

запись

о

содержимом

документа

с

идентификатором

  1 

из

-

под

пользователя

 U11: 

insert into doc_ins##"

ДСП

"#"

ДСП

" (r_doc##"

ДСП

"#"

ДСП

", 

comment##"

ДСП

"#"

ДСП

") values (1, '

Мои

данные

'); 

Ошибок

не

выдается

но

мы

получаем

сообщение

о

том

что

добавлено

ноль

строк

(

можно

это

и

проверить

при

помощи

 SELECT). 

Это

ПРД

реализовано

при

помощи

триггера

8. 

Работник

пытается

удалить

данные

о

документе

или

его

содержимом

Запросы

 DELETE 

просто

запрещены

по

дискреционному

принципу

Любой

запрос

на

DELETE 

из

таблиц

 DOCUM.DOC_REG 

или

 DOCUM.DOC_CONTENT 

возвращает

 1022. 


background image

!

50

П

ра
кт

ич

ес

ко

е

за

ня

ти

е

 8

П

ри
ме

р

со

зд

ан

ия

за

щ

и

щ

ен

но

й

ба

зы

да

нн

ы

х

!

!

 
 

E-

mai

l: 

ma

rke

t@

rele

x.r

u

9. 

Администратор

безопасности

  (

приложения

)   

пытается

получить

информацию

о

документах

Войдем

под

пользователем

 DOCUM 

и

попытаемся

подать

запросы

select * from doc_reg; 

select * from doc_content; 

DOCUM 

не

видит

ни

одной

записи

т

.

к

они

были

сделаны

пользователями

другой

группы

Сменить

себе

группу

 (

оказать

доверие

) DOCUM 

не

может

т

.

к

не

является

АБ

АБ

вообще

не

имеет

доступа

к

таблицам

документооборота

т

.

к

. DOCUM 

не

назначил

ему

никаких

прав

на

них

10. 

Администратор

безопасности

  (

приложения

пытается

модифицировать

информацию

о

документах

Войдем

под

пользователем

 DOCUM 

и

попытаемся

подать

запросы

delete from doc_reg; 

delete from doc_content; 

В

первом

случае

ошибка

не

выдается

но

ничего

не

удаляется

т

.

к

записи

сделанные

пользователями

другой

группы

пользователю

  DOCUM 

не

видны

Во

втором

случае

выдается

нарушение

мандатного

доступа

т

.

к

метки

доступа

 DOCUM 

не

позволяют

даже

в

принципе

модифицировать

таблицу

 DOC_CONTENT. 

Аналогично

можно

проверить

попытки

с

операторами

 UPDATE. 

АБ

вообще

не

имеет

доступа

к

таблицам

документооборота

т

.

к

. DOCUM 

не

назначил

ему

никаких

прав

на

них

Таким

образом

все

ПРД

оказались

выполненными

8.3. 

Протоколирование

 (

аудит

Протоколирование

изменений

данных

о

документах

было

включено

с

самого

начала

Можно

зайти

под

АБ

 (SYSTEM) 

и

подать

запрос

select * from audit_events; 

В

результате

будут

видны

все

записи

о

сделанных

модификациях

включая

время

автора

модификации

тип

события

и

т

.

д

.