Осенью прошёл курс и получил ключ. Но т.к. уже имел действующую подписку, то ключом не воспользовался. Сейчас захожу сюда, а про DreamSpark вообще ни слова. Где же мой ключ? |
Visual Studio 2013 и ее возможности для надежных и безопасных вычислений (trustworthy computing)
Цель лекции
Ознакомление с концепцией надежных и безопасных вычислений (trustworthy computing); поддержкой надежных и безопасных вычислений в Visual Studio 2013.
18.1. Введение. Инициатива Trustworthy Computing (TWC) фирмы Microsoft
Данная лекция тесно связана по тематике с монографией [38] и является одной из первых моих работ русском языке по данной теме.
Одним из самых важных и перспективных направлений ИТ является надежное и безопасное программирование. В более широком смысле, в современной англоязычной терминологии, данный термин звучит как trustworthy computing, что в буквальном переводе означает вычисления, заслуживающие доверия. Что это означает на практике?
Как известно, в течение всего развития развития программирования и программного обеспечения, при любых подходах к разработке программ, наиболее важными их качествами признавались работоспособность и полезность (usability) - программа должна выполнять то, чего от нее ожидают, в заданных условиях, а также быть дружественной к пользователю - быть удобной, иметь комфортный пользовательский интерфейс, "вести себя разумно", с точки зрения житейской и профессиональной логики. Только такая программа, на наш взгляд, заслуживает доверия пользователей, поэтому и ставлю эти качества на первое место при определении понятия trustworthy computing.
Если рассматривать понятия, более близкие к предмету настоящей лекции, - следует признать, что важнейшим качеством программ является их безопасность (security): программа должна уметь защищаться от внешних угроз и атак и сохранять работоспособность после их отражения. В настоящее время этому придается особое внимание, так как, ввиду широкого распространения сетей и ввиду усложнения архитектуры программ, появилось гораздо больше возможностей для хакерских атак, последствия которых могут очень серьезны, так как использование программного обеспечения стало частью нашей повседневной жизни.
Другое важнейнее качество программы - надежность (reliability): программа должна вести себя разумно и предсказуемо в случае некорректных исходных данных и обеспечивать безотказную работу в течение как можно более долгого периода времени. Понятие надежности в ранних работах было принято количественно характеризовать в терминах Mean Time Between Failures (MTBF) - среднего времени наработки на отказ, т.е. среднего времени, в течение которого система работает безотказно. В настоящее время требуются более детальные и точные количественные оценки и предсказание надежности, над которыми и ведется работа.
Третье. Программа должна обеспечивать защиту и корректность использования конфиденциальной информации (privacy) - личных и банковских данных, информации, используемой в повседневной работе предприятия и т.д. Такого рода информация должна запрашиваться у пользователя и использоваться только в случае крайней необходимости, для конкретных целей, которые программа должна понятно объяснять пользователю, своевременно предупреждая его об этом и заручаясь его одобрением и доверием.
Четвертое. Фирма-разработчик программы должна обеспечивать целостность и корректность бизнеса (business integrity), связанного с разработкой и использованием программы. Данное качество имеет две стороны. Во-первых, это четкая организация сопровождения программы - быстрое исправление ошибок и быстрые ответы на вопросы пользователей, которые, в свою очередь, должны оценить хорошую организацию бизнеса, связанного с разработкой и сопровождением, и, как следствие, продолжать пользоваться программой и приносить ее разработчикам доход. Во-вторых, это контроль прозрачности, законности, корректности бизнеса компании-пользователя программы. Имеется в виду, прежде всего, что программа должна подсказывать пользователю, как ее использовать корректно. Если использование программы связано с ведением какого-либо бизнеса - продаж, рекламы, перечисления денежных средств и т.д., - то программа должна контролировать корректность и законность всех операций, которые пользователь выполняет с ее помощью, а в случае обнаружения каких-либо отклонений от этого правила - предупреждать и консультировать пользователя, предотвращая его возможные несанкционированные и незаконные действия. В настоящее время в стадии разработки в корпорации Microsoft находятся интеллектуальные решения для бизнеса, которые осуществляют контроль и консультирование в области законности бизнеса на основе баз знаний.
Четыре перечисленных качества программ - security, reliability, privacy, business integrity, которым в наше время придается особое значение, стали основой инициативы trustworthy computing (TWC) [39], провозглашенной в 2002 г. корпорацией Microsoft. В меморандуме TWC фирмы Microsoft они названы "четырьмя колоннами TWC" (four pillars). Качество usability мы добавляем к рассмотренной парадигме, исходя из соображений здравого смысла.
Главная цель инициативы TWC - обратить внимание фирм-разработчиков программного обеспечения на особую важность указанных качеств программ. Разработчики должны стремиться к тому, чтобы учитывать требования TWC, начиная с самых ранних этапов разработки и на каждом ее этапе.
Классической работой по TWC стала книга [40], в которой подробно, на содержательных примерах, объясняются принципы разработки безопасного кода. Книга имеет приложение на Web-сайте, где доступны для скачивания через Web полезные примеры безопасного кода.
С целью коренного улучшения надежности и безопасности разрабатываемых программ фирма Microsoft разработала и применяет особую схему жизненного цикла разработки безопасных программ (Security Development Lifecycle, SDLC) [41]. Она является результатом анализа серьезных уроков, извлеченных Microsoft из опыта эксплуатации предыдущих версий Windows, до Windows XP. Для улучшения безопасности уже выпущенной и распространенной по всему миру ОС Windows 2000, разработанной еще до введения SDLC, Microsoft пришлось срочно прервать дальнейшую разработку системы, "посадить за парты" всех ее разработчиков, обучить их в кратчайшие возможные сроки принципам разработки безопасных программ, а затем за короткий срок исправить уже существующий, гигантский код операционной системы и распространить ее новую, более надежную и безопасную версию. В мировую историю программирования этот беспрецедентный шаг вошел под названием "security push" [40].
Чтобы избежать подобных дорогостоящих экстренных мер при разработке нового программного обеспечения, Microsoft рекомендует применять схему SDLC - проектировать, реализовывать и тестировать реализацию подсистемы безопасности на каждом этапе жизненного цикла программы, т.е. заниматься безопасностью программы постоянно, начиная с самых ранних этапов ее разработки. В этом - основная суть схемы SDLC.
Поскольку для практического осуществления данного принципа требуются высококлассные эксперты по компьютерной безопасности, которыми большинство инженеров-программистов, к сожалению, отнюдь не являются, - Microsoft рекомендует в каждом проекте иметь небольшую группу экспертов по безопасности, либо хотя бы одного эксперта, возможно, приглашенного из другой компании, - "security buddy". Цель экспертной группы по безопасности - постоянный контроль соблюдения правил разработки безопасного кода на всех этапах разработки, консультации разрабочиков по безопасности и т.д.
Согласно принципам TWC и SDLC, безопасность системы начинается еще до ее разработки. В документе, описывающем требования (requirements) к системе, должны быть отдельными разделами сформулированы требования к безопасности, типичные возможные угрозы (threats) системе и методы их отражения (mitigation). Для осуществления этих принципов необходимо еще на начальных этапах разработки заниматься моделированием угроз (threat modeling) [42].
Вот важнейщие принципы разработки безопасного кода, согласно TWC:
- Принцип минимизации атакуемой поверхности программы (minimizing the attack surface). Необходимо проектировать и реализовывать программу так, чтобы хакеры имели как можно меньше возможностей "взломать" данные работающей программы и вывести ее из строя.
- Принцип минимальных привилегий (least privilege). В большинстве случаев разработка и отладка программ ведется разработчиками "от имени администраторов", т.е. программа тестируется от имени пользователя, имеющего права администратора, например, право изменения реестра или других системных файлов. При попытке использовать такую программу от имени обычного пользователя могут возникнуть проблемы, связанные с отсутствием полномочий. Чтобы этого не случилось, программу необходимо обязательно тестировать от лица обычного непривилегированного пользователя. Функциональность программы не должна опираться на то, что пользователь имеет права администратора.
- Принцип обеспечения безопасности по дизайну, по умолчанию, при развертывании (secure by design, by default, by deployment). Как уже говорилось, еще на этапе проектирования программы необходимо предусмотреть для нее меры безопасности. Программа должна быть реализована так, чтобы быть безопасной по умолчанию, т.е. все меры и проверки безопасности по умолчанию должны быть включены (даже если это приведет к некоторому замедлению программы или некоторым неудобствам для пользователя). Мы с вами хорошо знаем, что последнее означает на практике: ОС и браузер запрашивают дополнительные подтверждения от пользователя в случае потенциально небезопасных для системы действий - просмотра незнакомого сайта, скачивания и инсталляции чужих программ и др. Это характерно для всех версий Windows, начиная с 2002 г.
Мировое сообщество программистов первоначально несколько скептически отнеслась к инициативе TWC, однако за 12 лет ситуация коренным образом исправилась. Проблемы с безопасностью и с внешними атаками испытывают программные продукты всех фирм-разработчиков и миллионы их пользователей. Microsoft своей инициативой TWC подает пример остальным компаниям, индивидуальным разработчикам и пользователям, и теперь дело - за нами, за мировым сообществом программистов: мы должны эту инициативу подхватить и развивать, во имя нашей общей пользы и безопасности разрабатываемых и используемых нами программ.
Применительно к нам, уважаемые коллеги по ИТ-образованию, это означает, прежде всего, что мы должны учить наших студентов принципам, технологиям и инструментам TWC и их практическому применению.
К сожалению, пока не только в России, но и во всем мире обучение TWC недостаточно распространено. Этим занимаются, главным образом, университеты и колледжи в США и Канаде, ориентированные на военные разработки, - исторически именно военные и близкие к ним организации, по вполне понятным причинам, испытывают особый интерес к компьютерной безопасности.
Такая ситуация должна быть срочно исправлена - невозможно больше мириться с (как приходится признать) высококвалифицированными атаками хакеров, взламывающих защиту банков, важнейшие сайты, проникающих к нам с недобрыми намерениями через IP-сети, электронную почту и т.д., - и при этом наносящих многим из нас ежедневно ощутимый материальный и моральный ущерб.
Результатом моей работы в 2006 - 2008 гг. по проекту TrustSPBU.NET по разработке учебных материалов по надежным и безопасным вычислениям [38], поддержанному Microsoft Research, стало введение в практику обучения на мат-мехе СПбГУ нового спецкурса "Инженерия надежных и безопасных программ" (в англоязычном варианте - "Secure Software Engineering") [38, 43, 44] для студентов 4 курса, а также расширение тематики следующих моих курсов принципами TWC:
- "Разработка надежных компиляторов" ("Trustworthy Compiler Development") [38, 45, 46] - обновленный и расширенный спецкурс по компиляторам для студентов 5 курса;
- "Надежное и безопасное программирование для платформы Microsoft.NET на языке C# " ("Trustworthy Programming for .NET Platform in C#") [38, 47, 48] - обновленный и расширенный спецкурс для студентов 4 курса;
- "Операционные системы и сети" ("Operating Systems and Networking") [38, 49, 50] - обновленный и расширенный обязательный курс (64 часа) для студентов 2 курса.
В дальнейшем материал по надежным и безопасным вычислениям я постоянно включал во все свои новые курсы и семинары - "Компьютерные сети" (основной курс для студентов 2 курса, специальность "Фундаментальная информатика и информационные технологии), "Модели и архитектуры программ и знаний" (обязательный спецкурс для 4 курса) и собираюсь это выполнять и впредь. Студенты должны хорошо понимать специфику TWC и практически ориентироваться в ней, применительно к своей работе.
Как результат работы по проектам TrustSPBU.NET и Aspect.NET [38], в 2008 г. опубликована моя монография на английском языке [38] в издательстве John Wiley & Sons. Кроме материалов по АОП и по системе Aspect.NET, она содержит также подробное описание моего подхода к преподаванию ИТ - ERATO (о нем я уже писал ранее в работе [51]), учебные программы всех моих курсов и пояснения к ним. Ссылки на материалы всех моих курсов доступны через сайт моей лаборатории Java-технологии [52], раздел УЧЕБНЫЕ МАТЕРИАЛЫ.
Как уже отмечалось, одной из самых серьезных проблем развития TWC как научного направления является выработка количественных оценок (quantitative assessment) безопасности, риска при разработке и использовании программ, надежности программ. В этом отношении следует отметить работы [53, 54], благодаря которым, впервые в более чем 50-летней практике программирования, становится возможным использование реалистичных и практически ориентированных количественных оценок качеств и свойств программ, основополагающих для TWC. Методы таких оценок основаны на методах математической статистики.
Подчеркнем, что без количественной оценки характеристик TWC применение принципов TWC в значительной степени теряет как научный смысл, так и практическое значение.