Жанр: Учеба
Большой справочник по компьютерным вирусам
... программами
на вычислительный центр или он "прятался" где-то еще. Эта ситуация
интересна по другой причине: пользователь В является
сотрудником вычислительного центра и потому имел очень многие
или даже все привилегии (права допускам к чужим файлам); во
всяком случае, он имел больше привилегий, чем пользователь А,
который, возможно, имел право доступа лишь к своим файлам. Как
только вирус попал однажды на такой привилегированный уровень,
ему удалось распространиться по всей системе в кратчайшее время.
Столь же стремительным могло быть распространение вируса в
следующем примере.
_"Сценарий игр"
Пользователь вычислительного центра одной фирмы организовал
на компьютере "уголок игр". В нашем случае такое собственно
непредусмотренное регламентом ВЦ использование ЭВМ покрывалось
операторами системы; они коротали длинные ночные смены с
помощью этих программ. Однажды в уголоке игр появилась новая
игровая программа с именем "STARWARS". Уже во время следующей
ночной смены эта программа несколько раз запускалась операторами
системы; неделю спустя программу кто-то уничтожил.
Если в первом случае причиной быстрого распространения
вируса послужила готовность пользователя В помочь пользователю
А, то в этом случае создателем вируса была использована склонность
операторов системы к компьютерным играм, которая обеспечила
быстрое распространение вируса в привилегированной области.
Тогда препятствий для распространения вируса по всем программам
пользователей вычислительного центра нет.
_13.1 Защита данных и обслуживание
- 255 -
Даже на тех предприятиях, где очень заботятся о безопасности
ЭВМ, часто можно найти две возможные лазейки для проникновения
вируса. Наряду с менеджером системы, т.е. наряду с ответственным
за систему, что касается доступа к данным и программам,
то здесь значительные полномочия имеют и ответственные
за защиту данных. Эти вполне понятные полномочия обуславливают
высокую степень лояльности к пользователям системы. Поэтому
соответствующие персоны подвергаются более жесткой проверке
прежде, чем им будут переданы задачи такого рода. В силу такой
проверки и, как правило, достаточно высокой оплаты такого рода
работы вряд ли правомерно считать, что ответственный за защиту
и безопасность данных сознательно занесет программу-вирус во
вверенную ему систему. Если такой человек понимает свои задачи
серьезно, даже "незлонамеренное" проникновение вирусов в систему
невозможно, поскольку он никогда не будет запускать программы,
не прошедшие самую тщательную проверку.
Но на каждом предприяитии, имеюшем большие ЭВМ, есть и
другой персонал, о значении которых по крайней мере пользователи
мало что знают. Речь идет о персонале, обслуживающем технические
средства ВЦ. И хотя такие люди компетентны лишь в аппаратном
обеспечении, в силу своих познаний в этой области они
всегда имеют возможность получить доступ к данным и программам,
о существовании которых вряд ли кто-либо подозревает. Так,
например, диагностические программы позволяют, естественно,
достичь любых участков системы, чтобы отыскать возможные ошибки.
Благодаря этому технический персонал ВЦ имеет доступ ко
всем данным системы. Но на предприятиях это обстоятельство не
всегда принимают во внимание.
Так например, на одном предприятии для расчетов заработной
платы мини-ЭВМ была установлена на дому. Поскольку ни один
из сотрудников не должен знать размеров заработной платы своих
коллег, во время получения распечатки с результатами счета все
работы на ЭВМ прекращались, носители данных заменялись, а сотрудник
отдела расчета заработной платы находился около печатающего
устройства, чтобы случайно вошедший коллега не увидел
этой распечатки. Правда, данные передавались на печатающее устройство
через отдел технических средств, где линии данных с
целью генерации протокола обслуживания подключались к другому
печатающему устройству...
Но техник или приглашенный извне для технического обслуживания
специалист может при известных обстоятельствах иметь и
другие интересы, а не только "разведывание" получаемых на
предприятии данных. Действительно выгодные договоры на техническое
обслуживание могут быть заключены лишь тогда, когда заказчик
хотя бы однажды столкнулся с отказом ЭВМ. А что для
создания такой ситуации может быть лучше, чем внедрение вируса?
Благодаря этому организации, выполняющие техническое обслуживание,
могли бы гарантировать себе заключение долгосрочных
контрактов. И такие организации ценились бы еще выше, поскольку
всегда быстро устраняли бы периодически возникающие сбои.
То, что такая ситуация не высосана из пальца, подтверджает
Лондонская "Таймс", когда говорит о "самостоятельно действующих
программистах, обслуживающих системы, и об аналитиках",
которые "изменяют" компьютерные системы так, чтобы повторно
возникли мелкие сбои, а они в результате заключили бы новые
контракты на обслуживание ВТ".
Почему же технический персонал ВЦ не должен иметь право
на подобные поступки, получая оплату ниже приглашаемых программистов
и аналитиков? Вот два актуальных примера из другой
области.
Один стекольщик из Кэрнтена оснастил своих сотрудников
пращами с целью получения большого количества заказов...
Недавно была обнаружена фирма, занимающаяся расчисткой
территории при проведении строительных работ. Лишь несколькими
сантиметрами ниже уровня земли было уложено несколько очень
тщательно подготовленных гранат. Можно лишь изумляться, что
эти гранаты до сих пор не взорвались, хотя лежали практически
на поверхности земли и испытали серьезные сотрясения почвы. Но
это длилось не долго, поскольку возникло подозрение, что команда,
занимающаяся распечаткой, сама подложила эти гранаты,
чтобы обеспечить продление контракта. Кроме того, организация
получает солидную премию, если обнаруживает неразорвавшийся
снаряд...
_13.2 VIR-DOS? .
Если на ЭВМ используются только те программы, которые написаны
на ассемблере собственноручно, это еще не гарантирует
от того, что Ваша система свободна от вирусов. Ведь каждая ЭВМ
(за исключением автономных систем) оснащена какой-либо операционной
системой. Проблемы связаны с той информацией, которая
поставляется позднее изготовителем (см. 5.3). Покупатель операционной
системы должен быть уверен в том, что в приобретенной
им системе все в порядке. Насколько часто это не так, свидетельствуют
все изготовители операционных систем, помещая
публикации о все новых версиях систем.
Допустим, что все версии операционной системы определенного
изготовителя, начиная с 1.1.1990, более не работают безупречно.
Сомнительно, чтобы хоть однажды кто-либо взял на себя
труд проанализировать исходный текст операционной системы с
этой точки зрения, учитывая, что и получение этого текста
весьма затруднительно. Проверка по критериям на наличие вирусов
даже для ПЭВМ дело сомнительное, а для мини- или больших
ЭВМ при такой проверке возникают врядли преодолимые трудности.
Операционные системы обьемом в несколько мегабайт, разрабатываемые
несколькими программистами одновременно, вряд ли поддпются
проверке даже со стороны сотрудников, не говоря уже о
внешних, независимых экспертах. Итак, пользователь оказывается
перед изготовителем системы довольно беспомощным.
Остается полагаться на лиц, разрабатывающих операционные
системы для ЭВМ, пригодных для использования в стратегических
целях. Может ли государство идти на рынок, используя для стратегических
целей ЭВМ, операционная система которой разработана
в другом, пока еще дружески настроенном государстве? Даже если
в качестве исключения поставляется полная документация на операционную
систему, включая исходные тексты. Какие проблемы
возникают, когда требуется проверить на наличие вирусов или
циклов выполнения каких-либо манипуляций большую программу (а
ведь речь идет об операционной системе), может увидеть читатель,
подробно ознакомившись с разделом 15.3. Но то, что сделать
это чрезывчайно трудно, понятно уже сейчас. О возможных
последствиях выполнения "злонамеренных" манипуляций на вычислительных
системах стратегического назначения любой читатель
может составить собственное мнение...
_13.3 Случайно возникающие вирусы
Фред Кохэн уже высказывался в своей публикации опасения
по поводу вероятности случайного возникновения вирусов. Такую
вероятность при благоприятных условиях, т.е. при длине вируса
в 1000 бит, когда 50 % всех битов уже установлены правильно,
он оценил следующим образом:
_ 500!
1000 х 500
К сожалению, Фрэд Кохен не дал обоснования этой оценки.
Тогда было бы легче выполнить такой расчет. Вероятно, он исходил
из последовательных мутаций отдельного потока битов, чего,
однако, на практике никогда не происходит, поскольку как
правило, программа не может функционировать в полной мере уже
после изменения одного единственного бита. Исходить же из 500
следующих друг за другом мутаций совершенно нереально. Важнее
ответить, какова вероятность того, что любой поток битов, с
которым манипулирует "амок" запущенной программы, случайно
совпадает с содержимым вируса.
Такая вероятность должна сильно отличаться от рассчитанной
Кохэном. Поскольку очень трудно представить, как приближенным
методом получить значение 500!, продолжим наши рассуждения.
Если, как и Кохэну, исходить из длины вируса в 1000 бит,
то такому вирусу ("поток битов вируса") можно поставить в соответствие
некоторое рациональное числовое значение. Такое
числовое значение никак не может превысить значение 2^1000. с
этим выводом согласится всякий, кто хотя бы однажды попытался
записать в байтной переменной значение, большее 255. Значит,
вероятность того, что в области в 1000 бит точно получим коды
вируса, близка к значению, обратному 2~1000. Итак, вероятность
случайного возникновения вируса составит:
_1
2^1000
Это значение одназначно определено путем логических рассуждений.
Собственно при других условиях и при той же длине
битового набора вероятность может оказаться ниже, но никак не
выше. Правда, приведенное выше значение достаточно сложно
сравнить с приведенным Кохэном значением, поскольку величину
500! очень трудно представить. Ниже будет проверяться следующее
утверждение:
1) _ 500! . " _ 1
1000^500 2^1000
Отдельные этапы проверки поясняются. По формуле Стирлинга
можно оценить значение n!:
n
2) InI ______
n! I I * V(2*П*n)
IcI
C учетом этого приближенного значения результат Кохена
можно представить в таком виде:
3) I500I
I---I
_I c I . * V(2*П*500)
1000^500
4) I500I
I---I * V(2*П*500) * _ 1
I e I 1000^500
5) _ 500^500 .* V(2*П*500)
e^500 * 1000^500
6) _ 500^500 . * V(2*П*500)
e^500 * 2^500 * 500^500
7) _ .1 _ . * V(2*П*500)
e^500 * 2^500
8) _ 1 . * V(2*П*500)
(2^e)^500
9) _ 1 . * V(П*1000)
(2*e)^500
Теперь нужно взять логарифм, чтобы получить нужный результат.
10) _ 1 . * e^4,0262
e*846,5735
11) _ e .^ _4,0262
e^846,57
Теперь окончательно установим результат Кохэне:
12) _ 500 ! . ~ e^842,54
1000^500
В противоположность этому значению обратная величина наиболь
шего из представимых 1000 битами числа такова:
13) e^ -693,14
Итак, значение Кохэна отличается от обратной величины
2^1000 примерно в e^149,4 раза. Это соответствует различию
примерно в 764 х 10(64). Насколько велика эта разница, можно
увидеть, сравнив результат Кохэна со значением 1/2^1000 по основанию
10:
n1/100000000000000000000000000000000000000000000000000000
Обратная величина 2^1000:
n1/100000000000000000000000000000000000000000000000000000
Несмотря на явлную колоссальную разницу в значениях, ве-
роятность случайного возникновения вируса все же пренебрежимо
мала. Если сопоставить эту вероятность со всеми находящимися в
данный момент в эксплуатации вычислительными системами, учтя
при этом скорость передачи данных, составляющую в среднем 5
Мбит/с соответствуют 4,32*10^11 переданных битов в день и ЭВМ,
работающей при совершенно нереальных предположениях о том, что
эта ЭВМ считывает и записывает данные непрерывно.
Если взять теперь среднюю вероятность возникновения ошибки
на 1/10^10 бит, то получим 43,2 n двоичных ошибок в день на
компьютер. Путем умножения этого результата на число ЭВМ, отвечающих
указанным выше спецификациям (оцененное в 10 миллионов
ЭВМ), получим максимум 43,2 миллиона (число с восьмью разрядами)
двоичных ошибок в день. Естественно, этот результат
все еще очень далек от 2^1000 число с 300 знаками).
Итак, утверждение Кохэна, что вирусы не могут образоваться
случайным образом, должно быть этим подтверждено. Но результат
будет выглядеть несколько иначе, если производительность
средней ЭВМ считать равной 1 миллиону операций в секунду.
Это соответствует 8,64*10^10 операций за день на одну ЭВМ.
Если такую производительность использовать для случайной генерации
битового набора длиной 1000 бит, то за день могут быть
сгенерированы 8,64*10^10 случайных чисел. Тогда правильный битовый
набор был бы найден спустя 10^290 дней. Если для такой
цели использовалось бы 10 миллионов ЭВМ, этот результат был бы
получен через 10^283 дня или спустя
лет.
Итак, вероятность генерации вируса путем последовательной
мутации представляется практически невозможной. Правда, на
практике исходят из несколько других предпосылок. Прежде всего
возникает вопрос, чколько битовых наборов длиной в 1000 бит
помещается в оперативной памяти (причем должны учитываться и
перекрывающиеся области); во-вторых, нужно было уяснить, интерпретируется
ли и при каких условиях определенная область
оперативной памяти как область выполнимой программы. Ответ на
эти вопросы выходит за рамки настоящей книги.
Но добавляются и другие факторы: как гласит определение
вируса, вирус должен быть программой, которая копирует сама
себя в другие программы; следовательно, вирус должен иметь
возможность воздавать
файлы.Теперь читателю было бы полезно еще раз задуматься над тем, как
много его программ имеют возможность воздействовать на файлы и считывать
каталоги и данные.
Способность изменять данные присуща практически всем программам.
Многие программы могут к тому же считывать каталоги и файлы. значит, в
таких программах уже заложены основные функции вирусов. Для того чтобы
превратить эти программы в вирусы, нужно лишь заново организовать обработку
таких программ. Нечто подобное делает описанный в разделе 10.4
вирус, вызывающий debug, edlin и сору. Тогда коды программы-вируса
(если отказаться от списка команд) могут занимать менее 50 байтов, а
потому программа будет иметь менее 1000 битов. По сути дела вирус мог
бы выглядеть так:
dir *. сом х 13 Вуtes 104 Bits
еdlin х 1 11 Вуtes 88 Вits
debug х 2 11 Вуtes 88 Вits
tdlin n.ВАТ 3 15 Bytts 120 Bits
N 3 Bytes 24 Bits
--------------------------
Gesamt: 53 Bytes 424 Bits
СR und LF werden mitgerесhnеt
Если эту игрушку еще немного модифицировать и присвоить программам
edlin и deburg новые имена, программу можно еще сократить.
dir *. com x 13 Bytes 104 Bits
ex 1 7 Bytes 56 Bits
dx 2 7 Bytes 56 Bits
tn.bаt 3 11 Вуtes 88 Bits
n 3 Bytеs 24 Bits
----------------------------
Gesamt: 41 Bytes 328 Bits
СR und LF werden мitgtrtсhnet
Итак, установленную Кохен минимальную длину вируса можно было бы сократить
более чем на 60 процентов. Естественно, это лишь пример, но
разве кто может утверждать, что изменения одного единственного бита
недостаточно, чтобы превратить его программу в вирус. Основные функции,
присущие вирусу, имеются практически во всех программах. следовательно,
даже минимальные изменения могкт привести к фатальным последствиям.
Итак: хотя расчеты Кохена, как оказалось,во много десятков раз
расходятся с нашими, это не слишком сказывается на утверждении о том,
что случайное возникновение вирусов практически невозможно. Правда,
это справедливо лишь тогда, когда начинают с нуля. Если исходить из
имеющегося программного обеспечения, в котором, как правило, уже имеются
программы для чтения и записи файлов и пр., то нужно признать
снижение степени вероятности. Насколько в действительности велик шанс
получить вирус в результате случайного изменения программы, точно никак
нельзя рассчитать, также никак нельзя рассчитать, также как нельзя
точно указать, насколько при известных обстоятельствах (в зависимости
от программного окружения) может сократиться произвольно названием Кохеном
длина вируса.
14. Задания на выполнение манипуляций
В этой главе ставится вопрос: "Как далеко можно зайти в такой
публикации?" Эта книга ни в коем случае не должна послужить путеводной
нитью для саботажников. Тем не менее автор решился в этой главе опубликовать
несколько программ "создания хаоса". Во всех приведенных ниже
распечатках речь идет о деструктивных программах или о программах, которые
могут быть использованы для этих преступных целей. Но поскольку
программа сама по себе не может быть ни хорошей, ни "зловредной", все
зависит исключительно от ответственности того, кто работает с такими
программами.
Не в последнюю очередь исходили из того, чтобы показать слабые
места, что позволило бы их обойти. А если возможно причинить вред
компьютерной системе программным путем повредив ее функцию, то речь
действительно идет о слабых местах такой системы. И прежде всего нужно
учитывать, еасколько коротки бывают программы-вирусы.
14.1 Сломать проще всего
Тот, кто знает о сложности компьютерных систем, всегда удивляется
тому, что ожидаемый отказ системы происходит совсем не часто. А ведь
даже одного отдельного бита в оперативной памяти может привести к прерыванию
работы. А потому чрезвычайно легко такого рода ошибку сгенерировать.
Отказ системы представляется пользователю ситуацией, когда не
удается вызвать извне программу обычным порядком. Либо ввод игнорируется
полностью, либо ввод приводит к совершенно иному, неожиданному
результату. Пользователям бытовых компьютеров более старого типа известны
красочные отказы системы, которыми эти приборы "радуют" своих
обладателей время от времени. Сегодня все чаще сталкиваются с "тихими"
отказами, когда компьютер отказывается от приема любой входной информации.
Это объясняется изменившейся структурой аппаратных средств. Если
раньше процессор сам должен был заботиться об изображении на экране
и о выводе звуковых сигналов, то сегодня эти задачи переданы специальным
чипам. Потому отказ прежних моделей бытовых компьютеров выглядели
на экране или в звуковом сопровождении куда более эффектно.
Важно различать два вида отказов системы. "истинные" отказы системы
совершенно не поддаются контролю, и невозможно определить, какие
части программы выполнены процессором. Отказы такого рода обусловлены
загрузкой слишком многих резидентных программ, ошибками в программах
или аппаратными сбоями.
"Смоделированные" отказы внешне выглядят так же, но не являются
полностью неконтролируемыми. Они происходят внутри определенных задач,
которые не поддаются контролю со стороны пользователя. Такими задачами
могут быть форматирование жестких дисков, стирание секторов или манипуляции
с файлами. В результате того, что все контрольные функции передаются
пользователем системе, невозможно прервать запущенный процесс.
Это можно сделать лишь путем аппаратного сброса или путем отключения
питания. Но пока это удастся сделать, пройдет несколько секунд,
которых в любом случае достаточно для того, чтобы разрушить все записи
каталога жесткого диска.
Основной задачей при генерации отказа является блокировка любого
ввода с клавиатуры или возможности прерывания с клавиатуры. Потому
здесь нужно различать несколько этапов:
1) Блокируются возможности прерывания процессов "изнутри" программы.
2) Блокируется прерывание с помощью клавиш ^c.
3) Блокируется прерывание с помощью клавиш Аlt, Соntrоl, DEL.
4) Отвергаются все виды прерываний.
Четвертую форму вряд ли можно реализовать на обычных системах,
поскольку установку можно отключить просто по питанию. Правда, существует
аварийное питание, которое при отказе сети позволяет продолжать
работу еще в течение примерно 15 минут. Но, поскольку здесь используется
дополнительное устройство, можно просто вынуть штекер блока аварийного
питания.
Но все три другие формы фатального сбоя можно сгенерировать довольно
просто. В первом случае исключить программную обработку сигналов
соответствующих клавиш прерывания. Эту форму, безусловно, нет необходимости
подробно. И блокировка клавиш Соntrоl - C не представляет
собой слишком сложную задачу.Это можно сделать описания "Вreак ОFF" в
соnfig. sys или на командном уровне. Еще эффективнее переключение интерфейса
консоли на левое устройство. В этом случае буфер клавиатуры
также не заполнеяется. Лишь для блокировки функций Аlt, Сtrl и Del от
программиста требуется немного больше умения.
Программа, распечатка которой приводится ниже, блокирует любой
ввод с клавиатуры. Невозможен и "горячий" запуск. В остальном система
остается полностью работоспособной. Такую можно ввести с помощью dевуg
и хранить под именем nовreak.com.
2le4:0100 b435 mov ah,35
2le4:0102 b004 mov al,04
2le4:0104 cd21 int 21
21e4:0106 8cco mov ax,es
2le4:0108 89da mov dx,bx
2le4:010a 8td8 mov ds,ax
2kt4:010c B425 mov ah625
2kt4:010t b009 mov al,09
2lt4:0110 cd2l int 2l
2lt4:0112 b80000 mov ax,0000
2kt4:0115 cd2l int 2l
Пояснение функции программы:
считывается вектор прерывания 4. Это чаще всего неиспользуемый
вектор. Результат помещается в еs и вх.
2le4:0100 b435 mov all,35
2le4:0102 b004 mov ak,04
2le4:0104 cd2l int 2l
Преобразовать вектор прерывания 9. Это прерывание с клавиатуры. Оно
преобразовывается в вектор переполнения 4. Этот вектор обычно указывает
на команду iret.
В результате любой ввод "перехватывается".
2le4:0106 8cco mov ax,es
2le4:0108 89da mov dx,bx
2le4:010a 8ed8 mov ds,ax
2ke4:010c b425 mov ah,25
2le4:010e b009 mov ak,09
2le4:0110 cd21 int 21
Обычное завершение программы:
2lt4:0112 b80000 mov ax,00000
2le4:0115 cd21 int 21
Если включить njbreak com. в программу пакетной обработки, то можно
убедиться в ее эффективности.
Nobreak
dir *.*
dir *.*/р
Если эту программу запустить, пакетное задание выполняется, причем никоим
образои нельзя вмешаться в его выполнение, разве что выключив питание,
вынув штекер сетевого прибора. Если клавиатуры блокируется, это
не всегда является для пользователя недостатком. Для некоторых приложений,
когда процесс ни в коем случае нельзя прерывать (прямой доступ
к контроллеру, описанный выше), может иметь смысл блокировка любого
вида прерываний.
14.2 Программное обеспечение против аппаратного
Любая "игрушка" обращается к аппаратным средствам с помощью программ.
несколько примеров этому уже приводилось в разделе 7.3. Иуже там
возникла проблема: как четко провести границу между аппаратным и программным
обеспечением. Описанная ниже программа разрушает нулевую дорожку
дисковода, в результате чего дискета оказывается "нечитабельной"
для dos. Эта программа может также сделать недоступным жесткий диск,
изменив номер дисковода. Если для дискеты можно говорить о программном
обеспечении, для жесткого диска это не всегда так. Во всяком случае
никто не мог бы здесь поспорить. Эту программу также можно ввести с
помощью debug и записать в память под именем kill.com.
1
...Закладка в соц.сетях