Computer security basics
1.08K subscribers
47 photos
3 videos
7 files
58 links
Канал для открытых материалов и обратной связи по сжатому курсу теории компьютерной безопасности
Download Telegram
Разделение обязанностей (separation of duties) – чуть ли не самая туманная тема в ИБ.

Во-первых, терминологическая путаница вокруг нее несусветная. Separation of duties или segregation of duties? А чем отличаются separation of privileges, separation of functions, separation of tasks?
Во-вторых, практически нет дизайн-паттернов для реализации и особенно для распознавания, когда разделение обязанностей требуется, сплошные примеры и кейсы.
И в-третьих, то есть даже в-нулевых, что такое эти самые обязанности (duties)? В теории ИБ больше нигде не используется этот термин. Права есть – обязанностей нет 😊
При этом конструктивные решения на основе разделения обязанностей очень эффективно работают в плане предотвращения фрода и разного рода намеренных нарушений безопасности. Это происходит из-за разделения и ослабления факторов вынужденного доверия (trust). То есть фактически через разделение обязанностей мы можем ослабить влияние ненадежных предположений безопасности. Это нужно делать всегда, когда только получается.
Поэтому если удается распознать ситуацию, позволяющую ввести разделение обязанностей, то это обязательно нужно сделать.

Давайте разберемся.
Принцип разделения обязанностей «вырос» не из области обеспечения безопасности бумажных-важных документов, а из коммерческих областей, чувствительных к фроду. Отсюда, видимо, нетипичное для ИБ слово – обязанности. И отсюда же частый пример разделения обязанностей: необходимость двух подписей на платежном поручении для осуществления платежа.
Зальцер и Шредер формулируют его как принцип разделения привилегий: где возможно, принятие решения о доступе или о выполнении операции должно базироваться на двух факторах доверия вместо одного.
Принцип разделения привилегий и принцип разделения обязанностей – это одно и то же. Называйте как нравится, хотя аббревиатура SoD фактически всем понятна, а SoP я как-то не встречала.
Паттерны реализации SoD следующие:
1️⃣ Последовательное разделение: выполнение двух или более действий в определенном порядке. К примеру: выполнение тестирования программного модуля, аппрув отчета о результатах тестирования, аппрув перехода к стадии релиза.
2️⃣ Разделение по принципу водолаза "четыре глаза": два человека независимо выполняют одно действие или подтверждают факт его выполнения. Типичный пример – ревью кода.
3️⃣Пространственное разделение: действие раздельно выполняется в двух различных пространственных локациях. Типичнейшее – разделение продакшн окружения от среды разработки.
4️⃣Многофакторное разделение, основанное на нескольких факторах подтверждения, ну тут я думаю, все понятно.

С паттернами распознавания все сложнее. Чаще всего для распознавания ситуаций, когда требуется SoD, нужно искать «слабые» предположения безопасности и усиливать их:
▶️ вторым фактором доверия
▶️ разделением среды (то есть – разделением доменов, например в MILS системе)
▶️ добавлением альтернативных средств мониторинга безопасности (хостовой + сетевой мониторинг – это тот же SoD)
▶️ внедрением протоколов, основанных на разделении секретов (secret sharing)
и т.д.
Разделение секретов кстати не стоит в ряду «разделение обязанностей – привилегий – функций…». Это просто криптографический прием, позволяющий распределить данные между несколькими субъектами так, чтобы восстановить их можно было только собравшись вместе или каким-то определенным минимальным коллективом. Почитать можно у Шнайера в «Прикладной криптографии», ну или википедию посмотреть.
Что же касается «separation of functions», то часто этот термин встречается как прямой синоним SoD или разделения привилегий. Но вот это уже я совсем не считаю правильным, как минимум в контексте ИБ. Во-первых, это терминологически неаккуратно: separation of functions, как и separation of tasks относится к любым функциям (задачам), не только к требующим каких-то особенных привилегий. А значит их точно так же можно отнести к необходимости, например, функционального деления ПО на модули, например так, чтобы каждому пользователю были сопоставлены только необходимые функции (задачи). А это уже реализация принципа минимальных привилегий. Выходит путаница.

Я знаю только про одно «официальное» использование принципов разделения обязанностей и разделения функций: в рамках модели Липнера, описывающей разработку ПО. Вот так их описание дается в книжке Мэтта Бишопа:
«Принцип разделения обязанностей гласит, что, если для выполнения критической функции требуется два или более шагов, эти шаги должны выполнять как минимум два разных человека. Перемещение программы из системы разработки в продакшн является примером критической функции. Предположим, что один из разработчиков приложений сделал неверное предположение при разработке программы. Часть процедуры установки заключается в том, чтобы установщик удостоверил, что программа работает «правильно», то есть в соответствии с требованиями. Ошибка с большей вероятностью будет обнаружена, если установщиком является другой человек (или группа людей), а не разработчик. Точно так же, если разработчик хочет испортить данные в продакшн, внедрив трояна, то либо установщик, проверяющий корректность работы, не должен обнаружить троянский код, либо он должен быть в сговоре с разработчиком. (примечание – это снижает вероятность успеха атаки)
Разделение функций определяется так: один человек не должен иметь возможность выполнять разные задачи (роли) в рамках одной критической функции. Разработчики не разрабатывают новые программы в продакшн окружении из-за потенциальной угрозы реальным рабочим данным. Точно так же разработчики не обрабатывают реальные данные в окружении разработки во избежание утечки этих данных. В зависимости от конфиденциальности данных разработчики и тестировщики могут получать очищенные (sanitized) реальные данные. Кроме того, среда разработки должна быть максимально похожа на продакшн».

Тут, собственно, речь о том, что нельзя пытаться «обойти» разделение обязанностей между ролями, назначив две разные роли одному и тому же человеку/субъекту. Отсюда остается всего один шаг до ролевой модели, в которой разделение обязанностей определено куда более формально и логично. Об этом – в следующей серии)
👍4
Привет, а вот опрос.
Интересно ли вам видеть короткие видеолекции или объяснения в канале (как вчера), или достаточно текста?
Anonymous Poll
47%
Видео (аудио) нужно, мне слушать удобнее чем читать
53%
Хватит текста и иногда слайдов
Всем привет!
Коллеги из ЛК, наш 10тичасовой курс порезали на съедобные кусочки и выложили на SF. Теперь его можно проходить официально и гордиться галочкой в профиле)
Ссылку ищите на интранете
🔥15👍2👏1
А вот давайте про читовые модели угроз поговорим?

Недавно в руки попал документ на ревью, long story short, содержащий в числе прочего перечень угроз для устройств IoT. Один нюанс, при ближайшем рассмотрении в перечне оказались не угрозы, а уязвимости.
Вообще описание уязвимости под угрозу замаскировать легко. Например, «пароль по умолчанию» становится «использованием пароля по умолчанию», race condition становится «атакой одновременного доступа», захардкоженный пароль или сертификат становится «раскрытием или угадыванием информации».

Продолжение 👇
Польза от такой «модели угроз-уязвимостей» есть разве что до начала использования системы. Уязвимость == угроза для участников процесса разработки, с определенными оговорками. Обнаружение уязвимостей тормозит работу, заставляет менять код, добавлять функционал. Однако полноценной угрозой уязвимость станет только тогда, когда разработчика непосредственно за нее оштрафуют. Это может произойти из-за нарушения KPI, сдвигов срока релиза, придется проводить выплату по bug bounty и т.п. Вот тогда уязвимость полностью совпадает с угрозой с явно определенным ущербом.
Некоторые уязвимости могут продолжать оставаться «угрозами для разработчика» и после начала использования системы – но только в контексте необходимости патчей. Стоимость выпуска патча == угрозе для разработчика, стоимость раскатывания == угрозе для интегратора и т.п. Если же мы представим, что система с момента релиза обновления получать не будет по любой причине (увозится в тайгу, погружается на дно морское, производитель прекращает поддержку), то получается, что угрозы нет?
Для разработчика – действительно нет (если не считать репутацию). Он общение с системой закончил, нет тела – нет дела. А для владельца системы, пользователей, обслуживающий персонал, если таковой имеется, угроза есть (уязвимость-то есть), но ее описание почти не имеет смысла. Потому все, что их волнует – это не причины, а импакт угрозы, и как его дешевле предотвратить.
Если приводить аналогию, то лишь небольшое число людей занимаются изучением причин и многочисленных последствий тектоники литосферных плит. На самом деле никто не знает, почему происходят сейсмические сдвиги. При этом практически все боятся землетрясений и их разрушительных последствий в сейсмоактивных областях планеты.
Давайте предположим, что причина того, что литосфера Земли – пазл с плохо пригнанными краями – нам известна. Повлияет ли это на нашу оценку угроз сейсмоактивности? Конфигурация планеты уже релизнута и плохо поддается патчам – нужно справляться с последствиями, предотвращать катастрофическое течение событий. Причины катастрофы нужно понимать до той степени, в которой это помогает с ней справится.

Модель угроз, рассчитанная на систему в контексте ее использования, сфокусирована на последствиях угроз (тех, которые нарушают цели безопасности). Она может учитывать технические аспекты уязвимостей и групп уязвимостей, пока это важно для того, чтобы предотвратить угрозы или снизить их воздействие. Но она не должна их дублировать.
🤔5👍2
Всем привет! Смотрите какой стандарт вышел совсем недавно
Словарь доверия. Или доверенности. Или благонадежности. Как мы там определяли trustworthiness?🤔

✔️✔️Trustworthiness: ability to meet stakeholders’ expectations in a verifiable way.

Кратко и по делу. Уже ниже дается описание trustworthiness characteristics (те самые -ilities). И все они в этом стандарте имеют такие определения – лаконичные, конкретные.
А если не получается термин определить достаточно конкретно? Стоит пояснить контекст, и сразу все получится. Например, целостность определена два раза: для системы, и для данных:
✔️Integrity: <data> property whereby data have not been altered in an unauthorized manner since they were created, transmitted, or stored
✔️Integrity: <systems> property of accuracy (3.2.2) and completeness

Или надежность определена в контексте системы и в контексте характеристики кибербезопасности:
✔️Reliability: <cybersecurity> property of consistent intended behaviour and results
✔️Reliability: <system> ability of an item to perform as required, without failure, for a given time interval, under given conditions

Как думаете, круто придумали, или это читерство, и путаница в итоге выйдет?

PS Стандарт по ссылке конечно предлагается купить, но можно и воспользоваться «Preview», которое как раз для ИСО-шных стандартов по обыкновению содержит термины и определения. Когда речь идет о стандарте-словаре, это очень удачно, я считаю😊
👍3🔥2👏1
Мегановость ☄️
Видеоматериалы с курса выложены в открытый доступ на платформе Stepik.
Мы поделились ими практически в полном объеме, с обсуждениями, острыми вопросами из зала и из чата. Жалею только что мы не писали общение во время кофе-брейков)
Жду на степике всех, кто не из ЛК или не имел возможности присоединиться к нам раньше!
👍13🔥5👏3🤯1
Computer security basics pinned «Мегановость ☄️ Видеоматериалы с курса выложены в открытый доступ на платформе Stepik. Мы поделились ими практически в полном объеме, с обсуждениями, острыми вопросами из зала и из чата. Жалею только что мы не писали общение во время кофе-брейков) Жду на степике…»
Где найти практические примеры решений, построенных по принципу security by design aka конструктивная безопасность в реальном применении?🤔

Кажется, уж точно не в промышленной безопасности. Конечно, все знают, что АСУ ТП дырявые и, конечно, производители очень стараются их защитить.

Но зачем нам враги, когда у нас есть такие друзья, говорит аналитик, погруженный в изучение монолитных архитектур, прикидывающихся компонентными, протоколов аутентификации, проводящих вычисления только на стороне клиента и диковатых криптоалгоритмов, не защищающих, а раскрывающих пароли (подробности – в публикациях Kaspersky ICS CERT).

И даже если бы дела с безопасностью отдельных решений обстояли получше, сложные разнородные инфраструктуры всегда будут не до конца безопасными: особенности отдельных конфигураций, проблемы совместимости решений, необходимость доступности для гарантий safety не дают скучать.

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

К слову, о security by design: меня всегда восхищало изящество сетевых СОВ как решения для мониторинга. Прозрачная установка, невлияние на работу сети, невозможность атаковать саму СОВ напрямую - как будто специально придумано для промышленности. Но детали о работе процессов, подключенных устройств, содержимое шифрованного трафика и прочие нужности на уровне сети недоступны, тут работают endpoint агенты.

И совмещение данных для анализа, получаемых от обоих типов решения – та еще задачка, если мы хотим сохранить безопасность всего решения «by design». Именно в силу упомянутых достоинств.

Я слежу за Kaspersky OT Cybersecurity еще с рабочего названия TMS и полностью отдельно разрабатываемого «антивируса для SCADA». Мы привыкли различать KICS for Networks и KICS for Nodes. Больше не нужно: наши архитекторы собрали их единую платформу с кросс-продуктовыми сценариями для эффективной аналитики и расследования инцидентов в промышленных системах.

Самое время и место для правильных архитектурных решений. Как работает XDR платформа KICS, будут показывать завтра, 6 декабря в 11.00. Искренне рекомендую.
👍4🔥1
Меня часто спрашивают, почему я и мои коллеги переводим "security by design» как "конструктивная безопасность", а не как "безопасность в силу архитектуры".
Объяснение в трех частях

1/3
Дело в том, что слово «architecture» и слово «design» не являются синонимами. А дальше вопрос, можем ли мы переводить дизайн как архитектуру (коротко – нет).

Если длинно, то хорошо бы включить в термины "инженерный подход" - engineering.
Построение архитектуры системы (architecting) – это задача, решаемая индуктивным образом, а то время как при проектировании системы инженерными средствами (engineering) применяется подход от общего к частному, то есть дедуктивный.
👍1
Из книги Maier, Rechtin “The Art of Systems Architecting”

Поскольку это чаще этот вопрос задают инженеры в новых областях, первое, что необходимо объяснить, — это различие между архитектурой и инженерией в целом. Хотя инженеры-строители и архитекторы-строители, даже после столетий дискуссий, не ответили на этот вопрос абстрактно, они ответили на практике. Инженерия почти полностью имеет дело с измеримыми величинами с использованием аналитических инструментов, полученных из математики и точных наук; инженерия - это дедуктивный процесс. Архитектура имеет дело в основном с неизмеримыми, используя неколичественные инструменты и рекомендации, основанные на практических уроках; проектирование - это индуктивный процесс. На более детальном уровне инжиниринг связан с измеримыми затратами, а архитектура — с качественной ценностью. Инжиниринг направлен на техническую оптимизацию, архитектура на удовлетворение потребностей клиентов. Инженерное дело — это больше наука, а создание архитектуры — больше искусство.
2/3

Ясно, что оба процесса могут включать и включают элементы другого. Архитектура может и требует количественного анализа высшего уровня для определения осуществимости и количественных мер для подтверждения готовности к использованию. Инжиниринг может и иногда требует создания архитектурно различных альтернатив для решения трудноразрешимых проектных проблем. Для сложных систем важны оба процесса. На практике редко бывает необходимо провести между ними четкую грань.

Далее, дизайн как процесс (design) включает оба вида деятельности (architecting, engineering):
"Архитектор занимается совместным исследованием требований и дизайна, в отличие от классического инженерного подхода, заключающегося в поиске оптимального проектного решения для четко определенного набора целей."
Поэтому "архитектурный подход к безопасности" – это перевод, который не в полной мере отражает security by design, так как в этом by design большая доля инженерного подхода. Например, мы идем от целей безопасности для системы, при необходимости декомпозируем их, поддерживаем отслеживаемость до требований, затем в обратную сторону верифицируем, валидируем решение относительно целей.

Требование к тому, чтобы эти процессы выполнялись вместе с созданием правильной архитектуры системы (ее внутренней организации) является неотъемлемой частью подхода security by design. Так что термина «архитектура» нам явно недостаточно, нужен более объемлющий термин.
3/3
Теперь почему "конструктивная безопасность". Термин этот в действительности взят из строительного стандарта. Он означает именно то, что нам нужно: здание не только должно иметь правильную архитектуру для того, чтобы не разрушиться и быть устойчивым к внешним факторам.
Мы недавно всем ICS CERT-ом были на Чиркейской ГЭС. С архитектурной точки зрения это выдающееся сооружение. Однако создание всего надежного и безопасного комплекса ГЭС полагалось и на качество бетонных блоков, и на технологии бетонирования, и на уникальные технологии проходки и укрепления горной породы, боюсь, не смогу перечислить все. Больше описаний с картинками можно посмотреть тут
При строительстве предъявляются требования к материалам (у нас это качество кода), к инструментам (кран не должен упасть на здание в процессе строительства), к технологиям (приготовление строительных растворов, выдерживание технологических интервалов).. Безопасность инженерных коммуникаций имеет существенное значение для конструктивной безопасности. Например, пожаробезопасность зависит от вентиляции, это часть конструктивной безопасности. А у нас безопасность данных, к примеру, зависит от коммуникационных протоколов.
Так что "security by design" действительно более точно переводится как "конструктивная безопасность", а не "безопасность в силу архитектуры"

Согласны?
👍4🔥2
Computer security basics pinned «Мегановость ☄️ Видеоматериалы с курса выложены в открытый доступ на платформе Stepik. Мы поделились ими практически в полном объеме, с обсуждениями, острыми вопросами из зала и из чата. Жалею только что мы не писали общение во время кофе-брейков) Жду на степике…»