В статье рассматриваются методы защиты исходных текстов сценарных файлов от несанкционированного копирования и модификации. Анализируются инструментальные средства, встроенные средства кроссплатформных интерпретаторов Perl, а также общий метод искажения смысловой нагрузки идентификаторов в исходном тексте. Современные технологии динамического создания информационного наполнения являются мощнейшим средством управления потоками информации в Internet. В условиях постоянного роста вычислительной мощности языки сценариев стали одним из ключевых механизмов организации инфраструктуры Web-сайтов. Получили широкое распространение мощные и одновременно простые специализированные языки программирования, рассчитанные на разработчиков сайтов. Языки сценариев изначально были ориентированы на быстрое и эффективное решение иных задач, нежели языки программирования системного уровня и создавались как связующие средства к уже готовым программным компонентам [1]. Преимущества такого подхода перед традиционным статическим наполнением сайтов очевидны: гибкость построения гипертекстовых переходов, возможность динамического формирования отчетов по записям в базах данных, генерация комплексных документов из имеющихся элементарных компонентов [2].В программировании информационного наполнения Internet-серверов существует два подхода: создание интерпретируемых сценариев и компиляция байт-кода.
При использовании первого подхода для разработки гипертекстовой страницы нужен только обычный текстовый редактор, а сам гипертекстовый документ легко читается. Второй подход повышает эффективность исполнения программы, а также защищенность ее кода от доступа и несанкционированных изменений [2]. Интерпретаторы таких языков сценариев, как Perl и Phyton, в целях повышения эффективности перед исполнением сценария проводят предварительную трансляцию в особый переносимый байт-код. В случае популярного языка сценариев Perl у него даже есть собственное название, данное Ларри Уоллом, создателем Perl, - "пи-код" (p-code). Такой код, сформированный в результате трансляции исходного текста сценария, записывается в память или файл и лишь затем обрабатывается интерпретатором. Для языка Python файлы с байт-кодом (они имеют специальное расширение. pyc) в дальнейшем можно переносить с платформы на платформу и исполнять с равным правом, скажем, и на компьютере Sun Microsystems, и на ПК. В конце 90-х годов CGI-программирование стало наиболее популярным и эффективным способом организации интерактивного взаимодействия с пользователями. Как и в любой другой области программирования, здесь есть свои проблемы. Одним из самых интересных и неоднозначных вопросов был и остается вопрос о защите авторских прав [3]. Он актуален хотя бы потому, что все сценарные языки, такие как Perl, Phyton, JavaScript и всевозможные его производные с постфиксом Script (JavaScript, PerlScript и т. д.) являются интерпретируемыми, и ни о каких двоичных кодах и скрытых исходных текстах не может идти и речи. В этом случае исследованию алгоритма работы сценария и использованию его без разрешения авторов не создано никаких препятствий. Программисты, создающие Web-инструментарий, пытаясь решить названную проблему, прибегают порой к изощренным методикам сокрытия исходных текстов и защиты их от модификации. Стоит отметить, что защита от модификации важна и в качестве защиты "от дурака". Это немаловажно в тех случаях, когда приобретающий программное обеспечение пользователь получает полный доступ не только к конфигурационным файлам, но и к самим сценариям, и может по неосторожности или незнанию повредить их. Кроме того, как показывает практика обеспечения информационной безопасности, программное обеспечение Web-серверов зачастую столь несовершенно, что при достаточной сноровке злоумышленник вполне способен получить исходный текст сценариев. Классическим примером может служить инцидент с сервером WebTrends, который позволял получить исходный текст сценария, просто добавив пробел к его имени в строке запроса. Запрос по адресу "http://somewhere. in. the. internet. com/cgi-bin/script. pl" запускал script. pl на исполнение, а запрос к "http://somewhere. in. the. internet. com/cgi-bin/script. pl%20" выдавал его исходный текст любому, даже неавторизованному пользователю. Для языка Perl одним из вариантов сокрытия исходных текстов стала возможность компилирования исходных текстов в исполняемый двоичный код (формат PE-exe для платформ Win32, ELF для Linux/BSD). Соответствующую утилиту компиляции Perl2Exe с недавних пор предоставляет компания IndigoStar Software (http://www. indigo-star. com/p2xfaq. htm).Исходя из заявлений самих разработчиков, можно было бы предположить, что имеется в виду интеграция интерпретатора языка Perl и уже готового пи-кода: двоичный исполняемый файл не содержит исходного текста сценария. Однако на поверку компиляция оказалась даже не компиляцией в пи-код, а именно простым вложением зашифрованного файла с исходным текстом. В процессе исполнения двоичного файла исходный текст сценария и требуемые модули языка Perl расшифровываются с помощью инженерного пароля, а затем исполняются. Для этого используется технология Perl Embedded in C, разработанная Уоллом, инструментарий для поддержки которой бесплатно распространяется вместе с интерпретаторами Perl.
|