Свойства безопасности


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

Как проявляются различные свойства безопасности, почему они нам важны? Несмотря на кажущуюся очевидность, далеко не каждый специалист (даже специалист!) может грамотно сформулировать ответы на эти вопросы. Обсуждению их и посвящена эта статья.

Security Properties

Бизнес и информация

Для начала давайте обсудим, для чего информация нужна бизнесу, государству, вообще людям.

Об информации можно говорить очень много, понятие это очень емкое, но давайте договоримся, для целей этой книги, что информация позволяет принимать правильные решения.

Любое управление можно рассматривать как последовательное принятие решений, призванных приблизить нас к нашим целям и, в конце концов, достичь этих целей. Принятие решений требуется тогда, когда у нас есть несколько вариантов действия, каждое из которых приведет к каким-то последствиям. Последствия каких-то из этих действий будут для нас благоприятны. Другие действия отдалят нас от цели или вообще приведут к катастрофе.

Причем, может оказаться, что в разных ситуациях необходимо выбирать прямо противоположные решения. Такая дилемма стоит перед живыми существами уже многие тысячи лет: выбор «беги или дерись» стоял задолго до появления человека. В современном обществе, чаще всего наш выбор менее драматичен, но и сейчас от правильныx действий часто зависит благополучие человека, компании.

Мы выбираем действия, приближающие нас к цели используя различную имеющуюся у нас информацию.

Давайте рассмотрим относительно простой пример, который, тем не менее, имеет много общего с современным бизнесом.

Представим, что вы играете в карты, в покер, например. В игре вы можете использовать разные тактики. Вы можете отказываться от дальнейшего торга; вы можете повышать ставки, блефовать; наоборот, вы можете пытаться убедить, что у вас плохая карта, чтобы противник сделал большую ставку. Ваша цель — выиграть деньги, как можно больше денег. Ну, или, по крайней мере, проиграть как можно меньше.

Вам раздали карты, и вы должны выбрать тактику на ближайшее время. Пока вы не посмотрели свои карты, пока вы не можете по действиям партнеров по игре понять, какие карты есть у них, вы можете действовать только наугад. Все ваши действия с определенными оговорками можно считать равноправными. Что бы вы ни выбрали, вы можете проиграть, можете выиграть, все это случай, если, конечно ваши партнеры находятся в той же ситуации.

Когда вы посмотрели свои карты, и если вы знаете, как играть с этими картами, вероятность вашей победы существенно возрастает. Если вы знаете, как интерпретировать поведение своих партнеров — имеете дополнительную информацию — ваши шансы еще более возрастают.

В качестве отступления замечу, что здесь есть и еще очень важное условие: вы должны уметь играть. Если вы играть не умеете, то даже знание всех карт у всех партнеров, не даст вам возможности выиграть у знающих игроков.

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

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

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

Конфиденциальность

Мы говорим, что у информации сохраняется конфиденциальность, если она остается известной только определенному кругу людей. Таким образом, только эти люди могут воспользоваться преимуществом, которое дает знание. Остальные должны либо действовать наугад, либо самостоятельно добывать необходимые данные.

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

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

Тем не менее, надо понимать, что ограничение доступа к информации — это не цель, это средство. И его не всегда достаточно, чтобы сохранить конфиденциальность.

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

Аналогичная ситуация существует и в информационных системах. Зачастую, сделать заключение об обрабатывающихся в системе данных можно, наблюдая за определенными ее характеристиками.

Таким образом, ограничение доступа является необходимым, но не достаточным условием сохранения конфиденциальности. Мы еще вернемся к этой теме в , посвященной политикам безопасности.

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

Еще одно, очень важное, свойство конфиденциальности — невозможность ее восстановления в случае нарушения. Информация, которая стала доступна достаточно широко, не может быть снова засекречена, забыта всеми, кому она стала известна. Остановить распространение конфиденциальной информации можно только сразу после начала утечки, и только при благоприятных условиях. Это наблюдение очень хорошо иллюстрируется в русской пословице: «Слово не воробей — вылетит, не поймаешь».

Целостность

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

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

Вернемся к примеру с карточной игрой. Вам раздали карты, вы просматриваете свои, наблюдаете за партнерами, стараясь понять расклад. В это время совершенно незнакомый человек тихо говорит вам: «У него там два туза!». У вас есть информация о картах вашего противника. Но что вы можете с ней сделать? Насколько вы можете ей доверять? Сколько денег вы готовы поставить, полагаясь на эту информацию? Проблема в том, что вы не знаете, можно ли доверять ее источнику.

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

Примеры последствий нарушения целостности сообщений можно встретить даже в художественной литературе. Вспомним, как у Дюма Граф Монте-Кристо модифицировал телеграфное сообщение, и это привело к катастрофически неверной игре на бирже одного из его врагов. Вспомним у Пушкина «родила царица в ночь не то сына, не то дочь…».

Наш уровень доверия к информации, определяется многими факторами.

Во-первых, мы должны доверять ее источнику.

Во-вторых, мы должны быть уверены, что информация получена именно от него.

В-третьих, мы должны быть уверены, что сообщение не было модифицировано при передаче. Мы должны быть уверены, что оно не было модифицировано при хранении в нашей системе.

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

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

Доступность

Пожалую, требование доступности — самое нелюбимое безопасниками. Думаю, это связано с тем, что оно практически всегда понимается не совсем корректно.

В техническом задании, когда мы говорим о доступности, скорее всего, будет записано что-то такое: «Авторизованный пользователь должен получить доступ к информации за время не большее X минут; время простоя системы должно составлять не более X часов в год».

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

Давайте разбираться.

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

Другая ситуация. Вышел из строя жесткий диск на одном из серверов, система недоступна длительное время. Она недоступна, пока диск не заменяют и не восстанавливают информацию из бэкапа (да, у нас есть бэкап!). Это нарушение безопасности? Нет, это недостаточная надежность. Но, согласно нашему определению, это все же нарушение безопасности-доступности.

Значит, этим должны заниматься безопасники? Знаю, что на практике часто так и происходит (впрочем, ИТишники при этом занимаются безопасностью, обычное явление). Но достигаются быстродействие и надежность совсем другими методами и средствами, чем безопасность. Надо понимать, когда мы говорим о безопасности, когда о других свойствах системы. Повторюсь, потому, что они достигаются разными средствами.

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

Давайте рассмотрим еще один пример.

Представим себе, что мы арендуем у некого провайдера модных сейчас облачных услуг набор приложений. Эти приложения обслуживают наших клиентов и доступны из интернета. Провайдер позволяет гибко реагировать на повышение нагрузки, запуская новые копии приложения, подверженного повышенной нагрузке. Каждый месяц он выставляет нам счет. Требуемая сумма зависит от того, как много копий разных приложений за этот период работало. Как вы можете видеть, это вполне жизненный сценарий.

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

С точки зрения нашего определения, произошло нарушение доступности? Нет, все клиенты получили обслуживание. Ущерб нанесен? Да, мы потратили достаточно большие деньги на оплату счетов.

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

Вернемся к нашему облачному приложению. Мы могли бы заранее договориться с провайдером, и ограничить количество копий приложения и, соответственно, свои расходы. Тогда мы бы получили ситуацию, которая попадает под «привычное» определение доступности, классический отказ в обслуживании.

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

Поэтому на практике, когда мы говорим о сохранении доступности, мы должны говорить о возможности управлять нашими ресурсами, управлять их потреблением. По крайней мере, именно при таком определении доступности, мы можем применять к этому свойству методы, обсуждаемые в этой книге.

И еще одна вещь, на которую стоит обратить внимание. Конфиденциальность и целостность — это свойства информации. Доступность — свойство информационной системы.

Программный продукт как информационный ресурс

Поскольку эта книга посвящена разработке программного обеспечения, вполне естественно посмотреть на него, как на информацию.

С точки зрения разработчика, программа является информационным ресурсом, непосредственно приносящим доход. Предоставляя ее в пользование, разработчик покрывает свои расходы на ее создание, получает возможность развиваться, получает прибыль. С этой точки зрения он заинтересован в предотвращении несанкционированного использования программы, то есть, в поддержании ее доступности.

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

Еще хотелось отметить, уже на рассмотренном здесь примере мы видим, что ожидания ключевых участников разработки ПО существенно отличаются. При проектировании приходится учитывать все эти потребности, находить компромисс. Организация этого процесса — тема, достойная отдельной большой книги.

Подведем итоги.

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

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

Доступность определяет нашу возможность управлять ресурсами информационной системы. Нарушение доступность может привести к отказу в обслуживании или может остаться незамеченным. Доступность является свойством информационной системы, а не информации.

Заключение

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

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

Задача аналитика — выяснить, какие конкретные задачи имеет в виду клиент, произнося известные всем термины.

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

Что еще почитать

Вероятно, лучшее обсуждение этой темы мы можем найти в книге Мэта Бишопа [1].

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

Хочу только предупредить, что книга подразумевает наличие неплохих знаний математики.

Литература

  1. Matt Bishop "Computer Security: Art and Science", Addison-Wesley Professional, 2003, ISBN 0-201-44099-7

Опубликовано:

Вопросы, мнения?

Совет

Есть вопросы по системе комментирования?

Вам сюда!