25 Обзор возможностей Visual Studio 2013. Trustworthy Computing (TWC)

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

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


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

Другое важнейнее качество программы - надежность (reliability): программа должна вести себя разумно и предсказуемо в случае некорректных исходных данных и обеспечивать безотказную работу в течение как можно более долгого периода времени. Понятие надежности в ранних работах было принято количественно характеризовать в терминах Mean Time Between Failures (MTBF) - среднего времени наработки на отказ, т.е. среднего времени, в течение которого система работает безотказно. В настоящее время требуются более детальные и точные количественные оценки и предсказание надежности, над которыми и ведется работа.

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

Четвертое. Фирма-разработчик программы должна обеспечивать целостность и корректность бизнеса (business integrity), связанного с разработкой и использованием программы. Данное качество имеет две стороны. Во-первых, это четкая организация сопровождения программы - быстрое исправление ошибок и быстрые ответы на вопросы пользователей, которые, в свою очередь, должны оценить хорошую организацию бизнеса, связанного с разработкой и сопровождением, и, как следствие, продолжать пользоваться программой и приносить ее разработчикам доход. Во-вторых, это контроль прозрачности, законности, корректности бизнеса компании-пользователя программы. Имеется в виду, прежде всего, что программа должна подсказывать пользователю, как ее использовать корректно. Если использование программы связано с ведением какого-либо бизнеса - продаж, рекламы, перечисления денежных средств и т.д., - то программа должна контролировать корректность и законность всех операций, которые пользователь выполняет с ее помощью, а в случае обнаружения каких-либо отклонений от этого правила - предупреждать и консультировать пользователя, предотвращая его возможные несанкционированные и незаконные действия. В настоящее время в стадии разработки в корпорации Microsoft находятся интеллектуальные решения для бизнеса, которые осуществляют контроль и консультирование в области законности бизнеса на основе баз знаний.

Четыре перечисленных качества программ - security, reliability, privacy, business integrity, которым в наше время придается особое значение, стали основой инициативы trustworthy computing (TWC), провозглашенной в 2002 г. корпорацией Microsoft. В меморандуме TWC фирмы Microsoft они названы "четырьмя колоннами TWC" (four pillars). Качество usability мы добавляем к рассмотренной парадигме, исходя из соображений здравого смысла.

С целью коренного улучшения надежности и безопасности разрабатываемых программ фирма Microsoft разработала и применяет особую схему жизненного цикла разработки безопасных программ (Security Development Lifecycle, SDLC). Она является результатом анализа серьезных уроков, извлеченных Microsoft из опыта эксплуатации предыдущих версий Windows, до Windows XP. Для улучшения безопасности уже выпущенной и распространенной по всему миру ОС Windows 2000, разработанной еще до введения SDLC, Microsoft пришлось срочно прервать дальнейшую разработку системы, "посадить за парты" всех ее разработчиков, обучить их в кратчайшие возможные сроки принципам разработки безопасных программ, а затем за короткий срок исправить уже существующий, гигантский код операционной системы и распространить ее новую, более надежную и безопасную версию. В мировую историю программирования этот беспрецедентный шаг вошел под названием "security push".

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

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

Согласно принципам TWC и SDLC, безопасность системы начинается еще до ее разработки. В документе, описывающем требования (requirements) к системе, должны быть отдельными разделами сформулированы требования к безопасности, типичные возможные угрозы (threats) системе и методы их отражения (mitigation). Для осуществления этих принципов необходимо еще на начальных этапах разработки заниматься моделированием угроз (threat modeling).

Вот важнейщие принципы разработки безопасного кода, согласно TWC:
  • Принцип минимизации атакуемой поверхности программы (minimizing the attack surface). Необходимо проектировать и реализовывать программу так, чтобы хакеры имели как можно меньше возможностей "взломать" данные работающей программы и вывести ее из строя.
  • Принцип минимальных привилегий (least privilege). В большинстве случаев разработка и отладка программ ведется разработчиками "от имени администраторов", т.е. программа тестируется от имени пользователя, имеющего права администратора, например, право изменения реестра или других системных файлов. При попытке использовать такую программу от имени обычного пользователя могут возникнуть проблемы, связанные с отсутствием полномочий. Чтобы этого не случилось, программу необходимо обязательно тестировать от лица обычного непривилегированного пользователя. Функциональность программы не должна опираться на то, что пользователь имеет права администратора.
  • Принцип обеспечения безопасности по дизайну, по умолчанию, при развертывании (secure by design, by default, by deployment). Как уже говорилось, еще на этапе проектирования программы необходимо предусмотреть для нее меры безопасности. Программа должна быть реализована так, чтобы быть безопасной по умолчанию, т.е. все меры и проверки безопасности по умолчанию должны быть включены (даже если это приведет к некоторому замедлению программы или некоторым неудобствам для пользователя). Мы с вами хорошо знаем, что последнее означает на практике: ОС и браузер запрашивают дополнительные подтверждения от пользователя в случае потенциально небезопасных для системы действий - просмотра незнакомого сайта, скачивания и инсталляции чужих программ и др. Это характерно для всех версий Windows, начиная с 2002 г.

Как уже отмечалось, одной из самых серьезных проблем развития TWC как научного направления является выработка количественных оценок (quantitative assessment) безопасности, риска при разработке и использовании программ, надежности программ. В этом отношении следует отметить работы, благодаря которым, впервые в более чем 50-летней практике программирования, становится возможным использование реалистичных и практически ориентированных количественных оценок качеств и свойств программ, основополагающих для TWC. Методы таких оценок основаны на методах математической статистики.

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