Название:
КАК ЗАЩИТИТЬ ИНФОРМАЦИЮ
(пособие по борьбе с хакерами)
авторы: С.П.Расторгуев
А.Е.Долгин
М.Ю.Потанин
Редакторы: гл.редактор А.Н.Перевозчиков
лит.редактор Ю.Ф.Филатов
редактор В.А.Алексеев
СОДЕРЖАНИЕ
О программах-отмычках, взломанных файлах и несанкционированном
копировании
Идентификация пользователя: "СВОЙ" - "ЧУЖОЙ"?
Может ли компьютер стать графологом?
Как защититься от "размножения"
Защита от исследований.
Самомодификация программ - эффектно и полезно
Исполняемый модуль - что можно сделать без исходных текстов?
Как очистить прогармму от вирусов и пристыкованных защит
Проверка усвоенного
Анонс вместо заключения
Приложение 1. Словарь терминов
Приложение 2. Программа DLOCK ver. 2.0
ДИСКЕТЫ
"Очистка" исполняемого модуля, удаление пристыкованных
механизмов: вирусов, защит, реклам и т.д..директорий \EXEB
Дизассемблер (ИСХОДНЫЕ ТЕКСТЫ)..........директорий \DIS
"Склейка" задач (ИСХОДНЫЕ ТЕКСТЫ).......директорий \KL
Корректировка (ИСХОДНЫЕ ТЕКСТЫ).........директорий \KORR
Восстановление векторов прерывания......директорий \PTRACE
Самомодифицирующиеся программы: исходные тексты..........
..........................................директорий \GIB
Идентификация по клавиатурному почерку..директорий \IDEN
Защита от исследования..................директорий \DLOCK
Защита от несанкционированного копирования...............
..........................................директорий \DCOP
Примеры на сообразительность............директорий \PRIM
0. ВВЕДЕНИЕ
В редакцию журнала "ТЕХНИКА-МОЛОДЕЖИ" нередко приходили письма с
просьбой публиковать компьютерные программы. Однако массовый
научно-художественный журнал не мог давать специфические материалы.
Поэтому было решено издать приложение, укомплектованное дискетой:
прочитал, и тут же запустил программу с дискеты. А тематика самая
разная - от алгоритмов игр и борьбы с вирусами до справочных
материалов по операционным системам, распространенным программам и
периферийному оборудованию (например, как подключить принтер и
сконструировать собственные шрифты). Ну а первые выпуски посвятили
защите информации. Все алгоритмы, рассчитанные на непосредственное
применение в работе, можно использовать и как пособие в практических
занятиях. Это актуально, ведь учебников по способам пресечения
информационного воровства до сих пор не существовало.
О ПРОГРАММАХ-ОТМЫЧКАХ, ВЗЛОМАННЫХ ФАЙЛАХ И
НЕСАНКЦИОНИРОВАННОМ КОПИРОВАНИИ
(предисловие к серии приложения "ТМ")
Компьютеры стремительно проникают во все сферы нашей жизни. Но с
ростом автоматизации перед рядовым пользователем возникает и целый
букет проблем, о существовании которых он даже не подозревал.
Начнем с "защиты информации" - тема выбрана не случайно. Несмотря
на недавно принятый Закон о защите программ и баз данных, нелегальное
копирование, компьютерные диверсии (вирусы, "бомбы", "троянские
кони"), а также количество финансовых преступлений с использованием
вычислительной техники - не уменьшаются. Поэтому сохранность
информации является проблемой номер один не только у нас, но и во всем
мире. Ее усугубляют отсутствие элементарных знаний у большинства
пользователей, владеющих лишь простейшими навыками копирования файлов,
выработанная с годами привычка никогда не покупать программы и
кажущаяся легкость бесплатного добывания дорогостоящего программного
обеспечения.
Впрочем, для любителей головоломок и нестандартных решений тема
защиты информации интересна сама по себе. Динамичность и сложность, в
сочетании с краткостью применяемых алгоритмов, возможность
предугадывать действия потенциальных хакеров ("взломщиков" программ)
роднят ее с увлекательными играми, основанными на интеллектуальном
поединке двух противников.
Как предупредить покушения на информацию? Можно ограничить доступ
к ней посторонним, встроить в компьютер замок, отключающий клавиатуру,
поставить сейф для дискет, вставить в один из разъемов ПК парольную
"заглушку"... Из всего арсенала организационных, технических и
программно-аппаратных средств выделим чисто программные. Они просты в
тиражировании, технологичны в изготовлении и применении, не требуют
каких-либо производстводственных мощностей, в то же время обеспечивают
достаточный уровень защищенности. Впрочем, надежность в этом случае
определяется знанием последних достижений общей теории
программирования и умением разработчика использовать специальные
приемы. Естественно, что новинки систем охраны влекут и
совершенствование способов "взлома" - извечное противоборство "щита и
меча".
Вот некоторые из наиболее популярных приемов защиты.
Преобразование ФОРМАТА ДИСКЕТЫ - наиболее простой путь
предотвращения ее копирования средствами DOS. Даже незначительные
изменения в структуре или расположении системных таблиц или каталога
приводят к тому, что дискета становится непонятной "операционке".
Можно "перепутать" адреса секторов, на которых расположены защищаемые
файлы; пометить отдельные кластеры, занятые данными, как сбойные;
переделав запись в BOOT-секторе, изъять из доступного системе
пространства несколько треков (дорожек); в конце-концов - просто
применить иную структуру, взяв за основу аналог из других операционных
систем (например, RT-11 от ДВК). Разумеется, работать с такой дискетой
сможет только специальная программа, полностью заменяющая стандартные
функции ввода-вывода.
Одним из способов ШИФРАЦИИ данных является их архивация по
специальным алгоритмам, что позволяет к тому же и сэкономить место на
магнитном носителе. Правда, сами кодирующие блоки программ оказываются
слабым местом. Их исследование под отладчиком или дизассемблером
позволяет хакеру понять алгоритм шифрации и повторить его. Поэтому
особенно актуальна ЗАЩИТА ОТ ИССЛЕДОВАНИЯ. Важную роль здесь играет
стиль программирования. В отличие от общепринятых "наглядности" и
"структурности", для охранных механизмов следует применять
"изощренность", то есть такой стиль, который позволит получить сложный
и запутанный исполняемый модуль. Еще лучше - если он будет
саморазворачивающимся в процессе работы (программа "дописывает" свои
части, отсутствующие на винчестере). Очень полезными могут оказаться
приемы, о которых журнал "ТМ" рассказывал в 1986 - 1988 годах в
разделе "Клуб электронных игр" (использование кода оператора в
качестве операнда, набора констант по прямому назначению и как
подпрограммы, передача управления в середину сложной двух-трехбайтовой
команды, проход "своим ходом" через данные и другие хитрости, не
только экономящие память, но и запутывающие алгоритм).
Но это пассивная защита, а в качестве активной - рекомендуем
ПРЕСЕКАТЬ ПОПЫТКИ ИССЛЕДОВАНИЯ ИЛИ НЕСАНКЦИОНИРОВАННОГО "РАЗМНОЖЕНИЯ":
периодически определять контрольную сумму всех кодов образа задачи в
процессе работы (не "отрезан" ли какой-либо блок); сравнивать
свободную память с тем объемом ОЗУ, к которому программа привыкла или
приучена (не запущены ли паралельно резидентные "отмычки"); проверять
вектора прерываний (нет ли их перехватов); используя компьютерный
таймер, контролировать время прохождения отдельных частей (выявление
"остановов" и "потактового режима" отладчика).
Изучение операционных систем, аппаратных особенностей ЭВМ
позволяет выделить индивидуальные отличия и использовать их для
НАСТРОЙКИ НА КОНКРЕТНУЮ ПЭВМ, СИСТЕМУ или ДИСКЕТУ, что делает
программное обеспечение непереносимым без санкции разработчика.
Правда, в архитектуре большинства компьютеров не существует аппаратной
особенности, анализ которой помог бы выделить одну машину из серии
таких же. Зато динамические характеристики различных частей (вращение
винчестера и дисководов, скорость обращения к оперативной памяти и
реакции клавиатуры) и их соотношения между собой индивидуальны, хотя и
не очень устойчивы. Для повышения надежности рекомендуется
использовать аппарат математической статистики. Вы не знакомы с ней?
Мы снабдим вас необходимыми алгоритмами. Кстати, передаваемые в
комплекте с лицензионными программами специальные электронные
устройства, искусственно создающие аппаратную уникальность конкретной
машины (так называемые "заглушки", которые подключаются к одному из
разъемов ПЭВМ и по предусмотренному автором ПО запросу выдают
парольную комбинацию байт), не всегда эффективны. Хакеры, используя
принцип спаривания компьютеров, отслеживают на втором все передаваемые
"заглушкой" сигналы, чтобы затем для несанкционированных копий
повторить их программой-"псевдозаглушкой".
Простой царапиной можно пометить дискету - сделать точно такую же
на другой дискете невозможно, а охранный механизм по характеру и
местоположению сбойных блоков (или их отсутствию) легко определит
подмену. (Но и с этим хакеры успешно справляются: особый драйвер
дисковода перехватывает поступающую информацию и заменяет ее на
выявленную предварительным тестом с ключевой дискеты.)
Надежную ИДЕНТИФИКАЦИЮ ПОЛЬЗОВАТЕЛЯ можно провести по почерку
(скорость, привычки в использовании основных или вспомогательных
частей клавиатуры, "любимые" комбинации клавиш при альтернативных
вариантах, выполнение "сдвоенных" и "строенных" нажатий одной или
двумя руками и т.д.), по росписи с использованием мышки, с помощью
психологических тестов и паролей.
ПОИСК И УНИЧТОЖЕНИЕ ПОХИЩЕННОЙ ИНФОРМАЦИИ осуществляется
специальными резидентными драйверами (находящимися в памяти даже после
выгрузки пакета), которые постоянно контролируют операции
ввода-вывода, "просматривают" другие директории винчестера и дискет,
вставленных в дисководы. По сути это практическое применение вирусных
механизмов для защиты. Отдельных читателей может шокировать такой
способ охраны. Однако, если речь идет о важной информации и вирус
настроен исключительно на уничтожение украденных данных, то криминала
нет. Даже сторож яблоневого сада вооружается ружьем, так что же
говорить о допустимых средствах борьбы с утечкой интеллектуальных
ценностей?
Это далеко не полный перечень различных вариантов
"предохранения". Однако следует учесть: их применение нередко мешает
работе легальных пользователей, поэтому включение того или иного
способа в защитный механизм требует тщательной оценки всех
положительных и отрицательных сторон.
Каждый алгоритм обладает своей степенью НАДЕЖНОСТИ. Как
показывает опыт - 98 процентов "любознательных" программистов
отступятся от защиты, если она гарантирует: невозможность копирования
дискет с двух - трех попыток распространенными средствами типа COPY
II-PC, COPYWRITE или UNLOCK; невозможность разобраться в алгоритме
стартовых блоков программы с помощью известных отладчиков и
дизассемблеров (удача же на первых шагах, наоборот, подхлестнет
"спортивный" интерес); уникальность применяемых систем (если на один и
тот же "замок" закрыты программы разных авторов, то с ним стоит и
повозиться). А если к тому же пакет решает специальные задачи (не
интересен широкому кругу пользователей) и обходится дешевле, чем
оплата профессионального хакера, - то можно быть спокойным, "краж" не
будет.
Но, предположим, перед неким хакером все же поставили такую цель.
К сожалению, пока не существует объективных критериев оценки
надежности того или иного алгоритма либо их комбинаций, зато из
субъективных можно взять за основу - время, которое понадобится для
"взлома". Шансы того, что защита целиком будет вскрыта, могут быть
подсчитаны на основании следующих параметров: вероятность наличия у
хакера спецсредств копирования и анализа защищенных программ; объем и
степень популярности примененной системы охраны; насколько интересна
сама программа другим пользователям; стоимость программы и системы
защиты.
Обеспечение БЕЗОПАСНОСТИ В ЛОКАЛЬНЫХ СЕТЯХ, пожалуй, самая
сложная проблема. Она не решается автоматически, даже если на каждой
ПЭВМ все обстоит благополучно, но системе в целом должного внимания не
уделялось. Да и сам подход к построению защиты иной. Сначала
необходимо разобраться: во-первых, к каким блокам имеющейся информации
доступ должен быть максимально открыт (общая часть), ограничен
(дополнительные сведения) или полностью закрыт (управление сетью,
списки абонентов и их паролей); во-вторых, какие способы проникновения
в базы данных возможны для легальных корреспондентов, включая сетевые
серверы, и для хакеров. Теоретически всегда допустима ситуация, когда
два защитившиеся друг от друга абонента контактируют с третьим через
общие устройства - тут-то и возникают любопытные варианты похищения
или порчи данных. Поистине неоценим зарубежный опыт борьбы и с
сетевыми вирусами, автономно живущими в узловых компьютерах и
накапливающими передаваемую информацию. Но поскольку сети в нашей
стране только начинают развиваться, теория и практика их безопасности
разработаны пока недостаточно.
Решение некоторых из этих проблем - вы найдете в этом выпуске
приложения "ТМ", а остальные - в последующих.
1. ИДЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ: "СВОЙ" - "ЧУЖОЙ"?
Почерк уникален, это знают все. Но немногие догадываются, что в
общении с компьютером индивидуальность пользователя проявляется также:
скорость, привычка использовать основную или дополнительную часть
клавиатуры, характер "сдвоенных" и "строенных" нажатий клавиш,
излюбленные приемы управления компьютером..., с помощью которых можно
выделить конкретного человека среди всех работавших на данной машине.
И ничего удивительного, - это сродни способности меломанов различать
на слух пианистов, исполняющих одно произведение.
Как же выявить индивидуальные особенности клавиатурного почерка?
Также, как и при графологической экспертизе: нужны эталонный и
исследуемый образцы текста. Лучше, если их содержание будет одинаковым
(так называемая, парольная или ключевая фраза). Разумеется, по
двум-трем, даже по десяти нажатым клавишам отличить пользователя
невозможно, нужна статистика.
При наборе ключевой фразы компьютер позволяет зафиксировать много
различных параметров, но для идентификации наиболее удобно
использовать время, затраченное на ввод отдельных букв. А повторив
ввод фразы несколько раз, в результате будем иметь множество временных
интервалов для каждого символа. На базе полученных значений всегда
можно рассчитать среднее время ввода каждого символа, допустимое
отклонение от среднего, и хранить эти результате в качесте эталонов
для каждого пользователя.
Уникальные особенности клавиатурного почерка выявляются двумя
методами: по набору ключевой фразы или по "свободному" тексту. Каждый
обязательно имеет режимы настройки и идентификации. При настройке
определяются и запоминаются эталонные характеристики ввода
пользователем ключевых фраз, например, время, затраченное на отдельные
буквы. А в режиме идентификации, после исключения грубых ошибок,
эталонное и полученное множества сопоставляются (проверяется гипотеза
о равенстве их центров распределения).
Обе методики различаются лишь выбором парольной фразы. В первом
случае это всегда одно и то же, а во втором - самый разнообразный
текст, что имеет свои преимущества, позволяя получать те же
характеристики незаметно, не акцентируя внимание пользователя на
парольной фразе. Впрочем, на выбор схемы проверки влияет тематика
защищаемого ПО. Предположим, некий владелец фирмы, желая узнать
текущий финансовый оборот, запустил программу бухгалтерского учета, а
компьютер, вместо короткой справки с коммерческой и потому секретной
информацией, предлагает набрать 2 - 3 странички "свободного текста",
дабы убедиться, что перед ним действительно директор или главбух. То
есть, здесь лучше применить метод "парольной фразы". С другой стороны,
лицо, имеющее допуск к секретам, может работать с такой программой
целый день, время от времени отлучаясь от компьютера, а чтобы в этот
момент злоумышленники не воспользовались раскрытой системой,
желательно периодически проводить "негласную проверку" (просьба
перенабрать "пароль" через каждые полчаса будет слишком назойлива).
Правильной идентификации помогает также рисунок почерка. Под этим
понимается ряд значений, представляющих собой разность между соседними
временными интервалами - своего рода "производная" по почерку,
показывающая относительные замедления или ускорения при работе с
клавиатурой. Характеристика достаточно индивидуальна, что
подтверждается рядом экспериментов.
НАСТРОЙКА
Для определения эталонных характеристик пользователя необходимо
выбрать ключевую фразу. Желательно, чтобы буквы были равномерно
распределены по клавиатуре, например: "Внимание - идентификация
пользователя по клавиатурному почерку". Затем раз десять набрать ее на
клавиатуре, определить время, затраченное на ввод каждой буквы, и
исключить грубые ошибки (те значения, которые резко выделяются из
каждой десятки имеющихся). Рассчитать и запомнить величины
математического ожидания (M), дисперсии (S) и число наблюдений (n).
Эти значения и называются эталонными (на блок-схеме - с индексом "э").
Блок-схема алгоритма режима настройки приведена на рис. 1.1.
ИДЕНТИФИКАЦИЯ ПО НАБОРУ КЛЮЧЕВОЙ ФРАЗЫ
Определение математических параметров пользователя (на блок-схеме:
M, S и n с индексом "и") при его идентификации проводится аналогично,
как и в режиме настройки. Единственное отличие - множества по каждому
символу будут состоять из меньшего количества значений (если фразу
набирают несколько раз) или даже из единичных величин (при однократном
наборе). Затем сравниваются дисперсии двух множеств (эталонного и
только что расчитанного) и величины математического ожидания - равны
ли, то есть совпадают ли центры распределения этих двух совокупностей.
Разумеется, полного равенства не будет, потому алгоритм заканчивается
оценкой вероятности того, что пользователь - тот же (если она больше
50%, то все несоответствия можно отнести за счет случайных факторов).
Алгоритмы обоих вариантов набора ключевой фразы приведены на
блок-схемах - рис. 1.2 (неоднократный) и рис. 1.3 (однократный).
ИДЕНТИФИКАЦИЯ ПО "СВОБОДНОМУ" ТЕКСТУ
В отличие от первого метода, здесь получаемый ряд значений сильно
отличается от эталона (любой символ "ключа" даже если и встретится, то
окажется не на "своем" месте). Поэтому при составлении множеств в
качестве базисных используются величины, которые можно подобрать и в
ключевой, и в случайной фразах, например, - время между нажатием двух
клавиш в одинаковых сочетаниях (если слово эталона "Внимание", то в
свободном тексте ищем "Вн", "ни", "им" и т.д. и определяем размер
паузы, прошедшей с момента нажатия "В" до нажатия "н"), считая, что
пользователь будет переносить руку от одной клавиши к другой одинаково
в обоих случаях (при настройке и идентификации).
А сравнение математического ожидания и дисперсии с эталонными
такое же, как и раньше (если базисные величины двух множеств выбраны
правильно, то они хорошо коррелируют), но прежде необходимо исключить
грубые ошибки, которых в данном случае будет больше.
Приведенные методы достаточно просты и опираются на известные
разделы математической статистики [1-3], в различных вариациях они
используются во многих системах. Разумеется, можно воспользоваться
дисперсионным, регрессионным и другими видами анализа и усложнить
решения, доведя их до совершенства. Но это усложнит и жизнь
пользователя, ведь затруднительно каждый раз перед началом работы
вводить солидные куски парольных текстов.
Вполне естественно, что с течением времени характеристики
пользователя меняются. Поэтому рекомендуется после каждой успешной
идентификации корректировать эталоны по формуле Mи=(n*Mэ+X)/(n+1), где
Mи, Mэ - характеристики исправленного и эталонного множеств, X -
величина, полученная в ходе идентификации, n - количество опытов,
вошедших в эталонное множество.
ДРУГИЕ СПОСОБЫ ИДЕНТИФИКАЦИИ
Люди по разному воспринимают происходящие события. Предложи за
короткое время прикинуть количество точек или гласных букв в длинных
словах, размеры горизонтальных и вертикальных линий, - сколько
испытуемых, столько и мнений.
Эти особенности человеческой психики также подходят для
идентификации. Правда, в зависимости от состояния и самочувствия
человека полученные значения будут "плавать", поэтому в практике
разумнее положиться на интегральный подход, когда итог подводится по
нескольким проверкам, учитывая и работу с клавиатурой. Результирующий
тест мог бы быть таким: на экране, на несколько секунд, появляются
вертикальные линии. Их размер и количество случайны. Пользователь
набирает соответствующие, на его взгляд, цифры. Таким образом,
выясняем: характеристики клавиатурного почерка, оцениваем память
(насколько указанные длина и число линий близки к действительности),
внимание и точность подсчета (насколько длина одной линии правильно
сопоставлена с соседней). Сравниваем результаты с эталоном. В этом
методе не так важны ошибки в определении размеров, главное - чтобы они
повторялись и при настройке, и при идентификации.
x 3 БЛОК-СХЕМА РЕЖИМА
"НАСТРОЙКА"
Выбрать ключевую START
фразу, буквы которой равно-
мерно "расбросаны" по
клавиатуре
‹
Іњњњњњњњњњњњњњњњ™њњњњњњњ—
‹набрать ее n раз ‹