Валидация файлов в Office 2010

Автор: Topol Четверг, Май 3rd, 2012 Нет комментариев

Рубрика: Операционные системы

Привет, я — Дэвид Хейз, работаю в команде Office Security и отвечаю за тестирование валидации файлов Office (Office File Validation (кодовое имя: Gatekeeper)). Не совсем правильные представления сложились о новой особенности валидации файлов в Microsoft Office 2010 , и я надеюсь развеять их и объяснить что и почему.

Что такое валидация двоичных файлов?
На протяжении многих лет офисные двоичные форматы получили значительное развитие и увеличились в размерах и по сложности. Причины сложности форматов обсуждались достаточно подробно в другом месте (см. статью Джоуля Сполского (Joel Spolsky)), таким образом, мы не будем вдаваться в подробности, так как двоичные форматы также подробно описаны и здесь. Мы обнаружили, что хакеры используют двоичные файлы, направляя вектор атаки для поражения конкретного пользователя, поэтому мы хотели найти способ помешать этому случиться. Одной из обязанностей нашей команды было: когда приходили сообщения от Microsoft о новой атаке формата файла Office, проверять их нашей валидацией, чтобы убедиться в правильной работе валидации. На настоящее время, очень даже хорошо! 

Что такое Gatekeeper?
Валидация файла Office — особенность, которая была первоначально введена в Publisher 2007 для проверки правильности файлов PUB Publisher. Она проверяет, что отдельный двоичный файл соответствует ожиданиям приложения. В Office 2010 мы значительно расширили эту особенность, включив двоичные форматы для Word, Excel, и PowerPoint. Пожалуйста, заметьте, что эта особенность относится ТОЛЬКО к двоичным форматам (т.е. PUB, DOC, XLS, PPT, и т.д.)), она не проверяет документы, основанные на XML (т.е. DOCX, XLSX, PPTX и т.д.), не выполняет валидацию макросов или других пользовательских единиц. То, что она действительно проверяет — это структуру файла, например, если у вас есть XLS-файл со структурой FONTINDEX с набором ifnt-значений для значения 4(которое является недопустимым значением для данного элемента), тогда это нарушит правильность валидации.

Как это работает?
Всякий раз, когда недостоверный двоичный файл (т.е. недостоверное расположение и недостоверный документ) загружается в Word, PowerPoint, или Excel, он проходит проверку на валидность. Эта проверка заключается в просмотре определенных битов файла, с которыми приложение собирается работать, другими словами проверяет соответствующие потоки OLESS ([url=http://msdn.microsoft.com/en-us/library/aa380369(VS.85).aspx]OLESS Streams[/url]). Если проверка проходит верно, всё открывается нормально, ничего не находим.. идем дальше.. идем дальше. Однако, если проверка не прошла, он открывается (по умолчанию) в режиме Защищенного просмотра (Protected View).
http://blogs.technet.com/blogfiles/office2010/WindowsLiveWriter/Office2010FileValidation_6097/image_2.png
Если вы кликнете на этот текст вы перейдете к Backstage view, где вы получите опцию открытия файла с полным доступом к приложению. Пожалуйста, заметьте, это верное решение, которое отметит этот конкретный файл как достоверный файл (trusted file), который НЕ будет проходить валидацию в следующий раз при открытии.
После того, как вы проделали эти действия и закрыли приложение, вы можете увидеть запрос похожий на этот:
http://blogs.technet.com/blogfiles/office2010/WindowsLiveWriter/Office2010FileValidation_6097/image_4.png
Этот запрос появляется не чаще одного раза в две недели (на приложение) и позволяет вам отсылать нам ошибочный файл (или файлы) через Отчет об ошибках Windows (Windows Error Reporting). Конечно, вы можете удалить файл или два, если не хотите делиться этой информацией, но посылая нам файл, вы позволяете нам проанализировать ситуацию и улучшить валидацию файлов Office.

Как я контролирую это?
Через Policy
Мы понимаем, что многим администраторам (или пользователям, задумывающимся о безопасности), возможно, не нравится идея открытия файла, не прошедшего валидацию, для этого существует политика группы для управления действиями по умолчанию, когда файл не проходит валидацию. Эта политика расположена в приложении «Options\Security\Trust Center\Protected View» в шаблонах политики группы, и настраивается на каждое приложение.
http://blogs.technet.com/blogfiles/office2010/WindowsLiveWriter/Office2010FileValidation_6097/image_6.png
Через Системный реестр (Registry)
Существует несколько ключей регистрации, которые управляют различными аспектами валидации файлов Office.

Общие ключи (Common Keys)
HKCU\Software\Microsoft\Office\14.0\Common\Security\FileValidation \ReportingInterval — это DWORD для управления числом дней между показом диалога отправки файлов в Windows Error Reporting.
HKCU\Software\Microsoft\Office\14.0\Common\Security\FileValidation\DisableReporting — это DWORD, если устанавливаете как 1 будет запрещен диалог отсылки файлов (и, таким образом, и отправка файлов) в Windows Error Reporting.
Специфические ключи приложения (Application Specific Keys)
Для этих примеров, я буду использовать Excel, но они также работают и в Power Point и в Word.
HKCU\Software\Microsoft\Office\14.0\Excel\Security\FileValidation\EnableOnLoad — это DWORD, если установить в 0, Office не будет проводить валидацию файлов.
HKCU\Software\Microsoft\Office\14.0\Excel\Security\FileValidation\DisableEditFromPV — это DWORD, если установить в 1, запретит редактирование файлов, не прошедших валидацию.
Специфичные ключи Excel
HKCU\Software\Microsoft\Office\14.0\Excel\Security\FileValidation\PivotOptions — это DWORD, управляет специфичными опциями валидации pivot caches (для повышения производительности) в файлах, которые их содержат.
0 = Никогда не производить валидацию никакого pivot cache
1 = Произвести валидацию pivot cache в следующих случаях: (1) файл открыт из Интернета, и платформа отмечает файл локально, как пришедший из Интернета. (2) файл — вложение электронной почты Outlook Microsoft. (3) пользователь специфично открыл файл в режиме защищенного просмотра. (4) файл открыт из «недостоверного источника» локально, где интернет-содержимое кэшируется, и любые специально определенные пользователем недостоверные источники, за исключением недостоверных источников в режиме защищенного просмотра, блокируются через (различные) ключи регистрации. (5) файл открыт и основной кэш анализируется при загрузке.
2 = Всегда производить валидацию всех pivot caches

Через скрипты (Scripting)
Для отдельных решений, встроенных поверх Office, есть несколько интересных свойств, добавленные в Application Objects, которые будут отключать валидацию для этой сессии. Есть также дополнительная опция в Excel для управления валидацией Pivot Caches (то есть файла, кэширующего данные для сводных таблиц и диаграмм). К примеру, скрипт powershell, демонстрирующий как настроить эти две опции для Excel (но свойство FileValidation могло бы также работать в Word и PPT):
$excel = New-Object -comobject Excel.Application
# valid значения здесь:
# msoFileValidationDefault = 0
# msoFileValidationSkip = 1
$excel.FileValidation = msoFileValidationSkip
# valid значения здесь:
# xlFileValidationPivotDefault = 0 (продолжать обычную работу, то есть следовать системному реестру и настройкам по умолчанию)
# xlFileValidationPivotRun = 1 (валидация всех pivot caches),
# xlFileValidationPivotSkip = 2 (не производить валидацию ни для одного из pivot caches)
$excel.FileValidationPivot = xlFileValidationPivotSkip

Это замечательно, но делает ли это Cook?
Мы достигли определенных успехов, чтобы гарантировать очень быструю валидацию. Да, теперь требуется больше времени на открытие файла, но мы ведь ведем речь о миллисекундах. На самом деле, вы бы затруднились найти такой размер файла, валидация которого составила бы больше секунды, время на валидацию для большинства файлов находится в диапазоне 1 — 100 миллисекунд. Конечно, если файл огромный и сложный и занимает час только на открытие … тогда да, потребуется больше секунды, но вы, вероятно, не собираетесь обращать внимание на различные случаи. В дополнение к этому, если валидация файла занимает больше 5 секунд (т.е. мы говорим об очень сложных файлах), мы создали опцию для отмены и сразу перехода в режим защищенного просмотра. В конце концов, мы не можем просто позволить вам обычно открыть такой файл, потому что тогда хакеры создали бы файл, который был бы действительно сложным …, затем взяли контроль над вашей машиной, равно тому, что эта особенность попытается остановить.
http://blogs.technet.com/blogfiles/office2010/WindowsLiveWriter/Office2010FileValidation_6097/image_8.png
В дополнение, для любого файла с длительным временем валидации (если он все-таки прошел валидацию, не прошел валидацию или валидация была пропущена) появится то же самый запрос Windows Error Reporting как для файла, не прошедшего валидацию; подтвердите опцию оправки нам файла для дальнейшего его анализа.

В двух словах
Однажды в разговоре с разработчиками мы вспоминали разговор, который был типа этого:
«Итак, над чем вы работаете?»
«Над валидацией файлов Office»
«Что это?»
«Я проверяю файл Office, чтобы убедиться, что с ним все в порядке»
«Так что, вы потратили два года на написание булевой функции?»
«Хорошо…ммм…да, но это важная функция!»
В итоге валидация файла Office — действительно только функция Yes/No, чтобы сообщить приложению, правильный файл или нет, но это — действительно важная функция! Фактически это такая же действительно сложная функция, как любой, когда-либо заглядывающий в спецификации формата файла, может засвидетельствовать. Таким образом , вы получаете это, только вкратце. Валидация файла Office будет проверять ваш двоичный файл, чтобы гарантировать, что значимые биты вашего файла правильны, и если вы полагает, что мы неправы, тогда вы можете либо доверять файлу или сообщить нам об этом!

Источник: thevista.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты