2004 г.
Достоинства и проблемы HTML Application
Вячеслав Белов, Издательский Дом "КОМИЗДАТ"
HTА (HTML Application) - простая технология, позволяющая создавать полезные приложения даже без знания серьезных языков программирования. Вот только как быть с безопасностью?
В основе разработанной Microsoft технологии исполнения HTML-приложений вне веб-браузера, получившей название HTA (HTML Application), заложена благородная идея: помочь пользователям, не обремененным познаниями в области программирования на C+, Visual Basic, Delphi и других "тяжелых" языках, создавать приложения, основанные на более известных языках сценариев VBScript и JavaScript, а также в стандартном HTML-коде. Понятно, что, запатентовав подобную технологию, корпорация попытается обеспечить ее поддержку другими операционными системами. И все бы ничего, если бы не формат файлов, с помощью которого планируется продвигать эту технологию.
Вообще-то, сам по себе формат HTA достаточно удобен. К примеру, именно на его базе
построена справочная система Windows. Благодаря ему же обычные HTML-страницы запускаются
без браузера и полностью отображаются в окне HTA-файла - со всеми ссылками, графикой,
эффектами и скриптами. Создавать и редактировать подобные файлы гораздо проще и быстрее,
чем, например, программу на С или Delphi. Удобство работы с HTA еще и в широкой доступности
редакторов - для этого формата могут использоваться как обычные текстовые редакторы вроде
Notepad, так и специализированные HTML-редакторы (наподобие FrontPage или Macromedia Dreamweaver).
Создание HTA-документов сводится к установке специальных атрибутов в разделе <head>…</head> обычной
HTML-страницы, после чего остается только сохранить ее с расширением. hta. Вот пример
листинга простого HTA-файла:
<html>
<head>
<HTA: APPLICATION id="HTA"
applicationName="TEST HTA"
border="thin"
borderStyle="normal"
caption="yes"
icon="С:/temp/favicon. ico"
maximizeButton="yes"
minimizeButton="yes"
showInTaskbar="no"
windowState="normal"
innerBorder="yes"
navigable="yes"
scroll="auto"
scrollFlat="yes"
singleInstance="yes"
sysMenu="no"
contextMenu="yes"
selection="yes"
version="1.0" />
</head>
<body>Текст страницы</body>
</html>
При попытке открыть HTA-файл в браузере пользователю предлагается сохранить этот файл
на жестком диске, так как браузер не интерпретирует расширение HTA. Windows же определяет
HTA-файл как исполняемый и потому запускает его по щелчку на пиктограмме или через командную
строку.
Благодаря тому, что стандарт HTA позволяет исполнять сценарии Java и VB, в этом формате
можно создать много полезных приложений, от простого календаря и конвертора валют до ньюсридера
и менеджера онлайн-доступа к блогам, сайтам и форумам. Поэтому, обладая даже небольшим
опытом создания веб-страниц и написания простых Java-скриптов, пользователь может создавать
HTA-файлы, которые ни по функциональности, ни по дизайну не уступают небольшим программам,
написанным на более серьезных языках.
Но какая бочка меда обходится без ложки дегтя? Это касается и HTA. К сожалению, HTA-файлы
нельзя просматривать в браузере, а значит, все средства защиты веб-браузеров оказываются
бесполезны для них. Именно этот факт чаще всего приводится в качестве аргумента против
HTA. Ведь в обход защиты с помощью VBscript и Jscript вполне можно организовать запись
данных в реестр в фоновом режиме, запускать сторонние программы и скрипты, выполнять чтение
и запись на диск. Поэтому хакеры достаточно хорошо освоили этот стандарт и с успехом применяют
его для своих целей.
Ярким примером использования злоумышленниками HTA являются разнообразные черви, попадающие на наши компьютеры через почтовые программы. Причем некоторые из них приходят прямо в теле письма (HTML-страницы) в виде скрипта, который запускается при открытии сообщения.
Используя известную дыру Scriptlet. Typelib в Internet Explorer, червь с помощью скрипта
создает файлы, никак не сообщая об этом пользователю. Обычно создается сценарий VBscript
в виде HTA-файла, который и содержит тело вируса. Название такого файла обычно имитирует
имя какого-либо системного файла (например, fonts. hta или system. hta) и располагается
в каталоге автозагрузки. Поэтому при очередном запуске Windows автоматически запускается
и созданный HTA-файл. Когда код червя из HTA-файла получает управление, он запускает программу
Outlook со скрытым окном и создает в ней письма, адресованные всем, чьи адреса хранятся
в адресной книге Outlook. Червь создает письма в формате HTML и включает в них свой сценарий.
Таким образом, червь распространяет сам себя. Кстати, для сценариев, не использующих HTML-код
и основное HTA-окно, нет необходимости указывать атрибуты HTA-документа. В этом случае
код записывается между тэгами <script> и </script>.
Похожий принцип используют и вирусы, распространяемые вместе с программами. В этом случае вместе с программой на ваш диск может попасть и такой безобидный с виду файл, как
readme. hta или help. hta. При первом же запуске этих файлов вместе с демонстрацией текста
в фоновом режиме производится ряд записей в реестр. И, несмотря на все ваши последующие
действия, ваш браузер будет содержать дополнительные панели, кнопки или неизменную стартовую
страницу, до тех пор пока вы не обнаружите сам код вируса в hta-файле.
На этом фоне куда более безопасно выглядят различные шутки на основе HTA-файлов. Например, однажды при запуске своего компьютера я обнаружил необычное окно с сообщением: "Внимание! Ваш винчестер содержит битые кластеры и сейчас будет отформатирован". Меня насторожила надпись "VBScript" в заголовке окна. Заподозрив неладное, я обратился к папке автозагрузки в главном меню и обнаружил там файл win. hta с таким содержимым:
<script language=VBScript>
Set Shl = CreateObject ("WScript. Shell")
MsgBox ("Внимание! Ваш винчестер содержит битые кластеры и сейчас будет отформатирован…")
window. close ()
</script>
Этот сценарий при каждой загрузке Windows создавал всплывающее окно с предупреждением
о форматировании жесткого диска. Конечно, диск не форматировался, так как сценарий не
содержал такой команды, но поволноваться заставлял.
Но главное применение возможностей скриптовых языков и HTA заключается, разумеется, отнюдь не в вирусах и шутках. Например, в интернет-кафе HTA можно использовать для контроля за работой компьютеров, для ведения индивидуальной статистики, ограничения доступа к дискам и папкам и т.п. Веб-мастер или веб-администратор, обслуживающие несколько сайтов,
могут организовать специальные инструменты быстрого доступа и контроля за отдельными страницами
сайтов - например, создать прямо в браузере "порт" для внесения на сайт новостей, которые
будут появляться в режиме реального времени. Таким образом, каждый может найти в этой
технологии что-то полезное для себя.
Хотелось бы обратить внимание тех, кто продолжает относиться к HTA скептически, на то, что Microsoft рекомендует использовать этот формат для решения небольших текущих задач, но не для обмена между пользователями. Другими словами, если пользоваться только собственными HTA-файлами, не передавать их кому-либо и не копировать чужие, то о безопасности можно не беспокоится. Если же Microsoft захочет изменить статус HTA-файлов, для этого придется
провести серьезную работу по обеспечению безопасности. Если это удастся сделать в ближайшее
время, то вполне возможно, что новая технология быстро приобретет такую же популярность,
как JScript и VBscript.
И все-таки - безопасность |
На сайте Microsoft размещена " заплатка" для дыры Scriptlet. Typelib в Internet Explorer. Если же вы не планируете использовать HTA-файлы, но хотите защитить компьютер от случайных вирусов, использующих этот формат, лучше отключить поддержку этих файлов. Для этого дважды кликните по пиктограмме Мой компьютер на рабочем столе, откройте Панель управления, выберите в меню окна команду Сервис > Свойства папки, перейдите на вкладку Тип файлов, выберите тип HTA-HTML application и щелкните наM кнопке Удалить.
Атрибуты HTA-документов |
Атрибут |
Описание |
applicationName |
имя приложения, использующегося для идентификации при исполнении HTA-документа |
border |
вид обрамления окна; среди возможных значений - thin, dialog, none, thick |
borderStyle |
стиль обрамления окна; среди возможных значений - complex, normal, raised, static,
sunken |
caption |
указывает, нужно ли показывать заголовок окна (yes/no) |
icon |
путь к пиктограмме, которая будет показана в заголовке; допустимые параметры пиктограммы
- 32x32 пикселей, формат. ICO |
maximizeButton |
указывает, будет ли активизирована кнопка "восстановить" в заголовке документа (yes/no) |
minimizeButton |
указывает, будет ли активизирована кнопка "свернуть" в заголовке документа (yes/no) |
showInTaskbar |
указывает, будет ли показан документ в панели инструментов Windows (yes/no) |
windowState |
первоначальный размер окна; среди возможных значений - normal, minimize, и maximize |
innerBorder |
указывает, будет ли окно иметь внутреннюю границу (yes/no) |
navigable |
указывает, будут ли ссылки открываться в отдельных окнах или в одном (yes/no) |
scroll |
указывает, будет ли окно иметь полосу прокрутки (yes/no) |
scrollFlat |
указывает вид полосы прокрутки: 3D или нет (yes/no) |
singleInstance |
определяет, возможно ли одновременное открытие нескольких окон для HTA-документов
(yes/no) |
sysMenu |
указывает, будут ли показаны составляющие заголовка окна (yes/no) |
contextMenu |
указывает на доступность контекстного меню, вызываемого правой кнопкой мыши (yes/no) |
selection |
указывает, можно ли выделять текст в HTA-окне (yes/no) |
version |
версия HTA |
|