Опубликован: 26.03.2007 | Доступ: свободный | Студентов: 6609 / 1933 | Оценка: 4.03 / 3.84 | Длительность: 14:55:00
Лекция 2:

Теоретические сведения о компьютерных вирусах

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >

Результат Леонарда Адельмана

Леонард Адельман, известный математик, обладатель премии Тьюринга, участвовавший в свое время разработке криптосистемы RSA (буква A в аббревиатуре) для исследования феномена вирусов решил использовать другой формализм теории алгоритмов - не формализм машин Тьюринга, а формализм рекурсивных функций.

Теория машин Тьюринга и теория рекурсивных функций в некотором смысле эквиваленты - алгоритмы, вычислимые в одной теории будут вычислимыми в другой, и наоборот. Этот факт в совокупности с тезисом Тьюринга-Черча, означает, что полученные Л. Адельманом результаты в той же степени применимы к современным реалиям, что и результаты Ф. Коэна, Д. Чесса, С. Вайта, Ф. Лейтольда и других исследователей опиравшихся в своих работах на теорию машин Тьюринга.

Принятые обозначения

В дальнейшем изложении будет считаться, что данные и программы, во-первых, различимы, как это обычно и бывает в компьютерных системах, а во-вторых, могут быть закодированы натуральными числами. Поскольку и данные и программы всегда имеют ограниченный размер и ограниченный алфавит для их представления, принципиальная возможность взаимно однозначного кодирования натуральными числами сомнений не вызывает.

Исходя из сказанного, состояние некой вычислительной системы с точки зрения выполняющейся программы, может быть описано как набор доступных программе данных и других программ, что может быть выражено как наборы или последовательности натуральных чисел. Действие любой программы заключается в том, чтобы из одного набора данных и программ получить другой набор данных и программ.

Ниже везде неявно подразумевается описанная интерпретация вычислительной системы.

  1. Обозначим S - множество всех конечных последовательностей натуральных чисел, S = \Omega (\infty). Таким образом элемент S может обозначать либо набор файлов данных, либо набор файлов программ, закодированных при помощи натуральных чисел.
  2. Обозначим e - вычислимую инъективную функцию из SxS на \infty с вычислимой обратной функцией, e: S \times S \to \infty. По тому же принципу, что и программы и данные, натуральными числами могут кодироваться и состояния системы. Функция e взаимно однозначно ставит в соответствие набору данных и программ натуральное число. Иными словами e - однозначная нумерация состояний системы.
  3. \forall s,t \in S : \langle s,t \rangle := e(s,t)
    Нотация \langle s,t \rangle предназначена для обозначения состояния системы и фактически является кодом этого состояния, представленным натуральным числом.
  4. Для всех частичных функций f : \infty \to \infty, \forall s,t \in S: f(s,t) := f(\langle s,t \rangle) Любая программа переводит систему из одного состояния в другое, учитывая, что состояния кодируются натуральными числами, можно считать любую программу функцией из \infty в \infty.
  5. Для всех частичных функций f : \infty \to \infty, \forall n \in \infty примем обозначение f(n)\downarrow f(n) определена
  6. Для всех частичных функций f : \infty \to \infty, \forall n \in \infty примем обозначение f(n)\uparrow f(n) не определена
Определение 2.26. Для всех частичных функций f, g: \Gamma ' \to \Gamma ', \forall s,t \in S, f(s,t)=g(s,t) выполняется одно из условий:
  1. f(s,t)\uparrow и g(s,t)\uparrow, либо
  2. f(s,t)\downarrow и g(s,t)\downarrow и f(s,t) = g(s,t)

Определение служит для уточнения понятия тождественности программ, представленных в виде частичных функций.

Определение 2.27. \forall z,z' \in \Gamma ', \forall p,p',q = q_1,q_2,\ldots ,q_z,q' = q'_1,q'_2,\ldots ,q'_z \in S для всех частичных функций : : \begin{aligned}
_h_~~~~~~~~  \\
h: S \to S: \langle p,q \rangle : \langle p',q' \rangle
\end{aligned}
  1. z=z', и
  2. p=p', и
  3. \exists i \in [l,z]: q_i \ne q'_i, и
  4. \forall i \in [l,z] либо
    • q=q', либо
    • h(q_{i})\downarrow и h(qi)=q'i

Если раньше для обозначения действия программы на систему использовались коды состояний, то в этом определении используется детализированное описание состояния и по сути вводится отношение между чистым и зараженным состоянием системы. Зараженное состояние характеризуется тем, что при прочих равных в нем некоторые программы изменены вирусом (функция h ).

Определение 2.28. Для всех частичных функций f, g, h: \Gamma ' \to \Gamma ', \begin{aligned}
_h_~~~~~~~ \\
\forall s,t \in S: f(s,t) : g(s,t)
\end{aligned}
f(s,t)\downarrow, g(s,t)\downarrow
, и \begin{aligned}
_h_~~~~~~~ \\
f(s,t) : g(s,t)
\end{aligned}

В этом определении уточняется введенное ранее отношение для состояний, получаемых в результате действия двух функций. Результатом действия функции f на состояние системы \langle s,t \rangle является натуральное число, которое можно однозначно интерпретировать как новое состояние \langle s',t' \rangle. Точно так же g(s,t) = \langle s'',t'' \rangle. Соответственно, запись \begin{aligned}
_h_~~~~~~~ \\
f(s,t) : g(s,t)
\end{aligned}
обозначает, что обе программы завершают свою работу при запуске из состояния \langle s,t \rangle и результат их выполнения будет отличаться фактом заражения некоторых программ: \begin{aligned}
_h_~~~~~~~~~ \\
\langle s',t' \rangle : \langle s'',t'' \rangle
\end{aligned}
.

Определение 2.29. Для всех частичных функций f, g, h: \Gamma ' \to \Gamma ', \begin{aligned}
_h_~~~~~~~ \\
\forall s,t \in S: f(s,t) \cong g(s,t)
\end{aligned}
f(s,t) = g(s,t) или \begin{aligned}
_h_~~~~~~~ \\
f(s,t) : g(s,t)
\end{aligned}

Введенное обозначение призвано отразить тот факт, что зараженная программа не всегда выполняет заражение - в некоторых состояниях зараженная программа может выполнять ровно те же действия, что и незараженная, т. е. результат ее действия при некоторых состояниях системы будут точно таким же как и у незараженной программы.

Определение 2.30. Для всех геделевских нумераций частичных рекурсивных функций {\phi_i}, общерекурсивная функция v будет вирусом по отношению к {\phi_i} \forall d,p \in S выполняется либо:
  1. Повреждение: (\forall i,j \in \Gamma ')[\phi_{v(i)} (d,p) = \phi_{v(j)} (d,p)]
  2. Заражение или имитация: \begin{aligned}
_v_~~~~~~~~~~~~~~~  \\
(\forall j \in \Gamma ')[\phi_j (d,p) \cong \phi_{v(j)} (d,p)]
\end{aligned}

В данном определении выбор переменных d и p в явном виде указывает на их природу - данные (информация не подверженная заражению) и программы (информация подверженная заражению).

Здесь необходимы комментарии:

  • Повреждение. Из определения следует, что результат действия зараженной программы при определенном состоянии системы определяется только типом вируса и состоянием системы, независимо от того, какая программа была заражена. На самом деле, выполняемое вирусом действие может и не быть деструктивным, важно то, что оригинальная программа не выполняется вовсе, т. е. выполняется функция прописанная в самом вирусе.
  • Заражение или имитация. Здесь, согласно определению, ситуация прямо противоположная. Результат действия зараженной программы либо вовсе не отличается от результата действия исходной, либо отличается появлением в системе новых зараженных программ. Различное поведение определяется различиями в исходном состоянии системы.

Классификация вирусов

Определение 2.31. Для всех геделевских нумераций частичных рекурсивных функций {\phi_i}, для всех вирусов v по отношению к {\phi_i}, \forall i,j \in \Gamma ':
  • i вредоносна по отношению к v и j

    • i = v(j)
    • \begin{aligned}
_v_~~~~~~~~~~~ \\
(\exists d,p \in S)[\phi_j (d,p) \not\cong \phi_i (d,p)]
\end{aligned}

    Существует состояние системы, при котором зараженная вирусом v программа j выполняет вредоносную функцию, т.е. результат действия зараженной программы не ограничивается заражением (появлением новых зараженных программ).

  • i заразна по отношению к v и j
    • i = v(j)
    • \begin{aligned}
_v_~~~~~~~~~~ \\
(\exists d,p \in S)[\phi_j (d,p) : \phi_i (d,p)]
\end{aligned}

    Существует состояние системы, при котором зараженная вирусом v программа j выполняет функцию размножения - в результате ее действия в системе появляются новые зараженные программы.

  • i безобидна по отношению к v и j
    • i = v(j)
    • i не вредоносна по отношению к j
    • i не заразна по отношению к j
  • i является трояном по отношению к v и j
    • i = v(j)
    • вредоносна по отношению к j
    • i не заразна по отношению к j

    Троян способен только к выполнению вредоносных функций и не может размножаться.

  • i является переносчиком по отношению к v и j
    • i = v(j)
    • не вредоносна по отношению к j
    • i заразна по отношению к j

    Переносчик является антиподом трояна: он только размножается и не содержит вредоносных функций.

  • i является вирусом по отношению к v и j
    • i = v(j)
    • i вредоносна по отношению к j
    • i заразна по отношению к j

Вирус - наиболее универсальный тип вредоносных программ, способный как к размножению, так и к выполнению вредоносных действий.

В тех случаях когда существует единственная j такая, что (т.е. когда v инъективна) и i является вредоносной (заразной, безобидной, трояном, переносчиком, вирусом) по отношению к v и j, ссылка на j будет опускаться и i будет называться вредоносной (заразной, безобидной, трояном, переносчиком, вирусом) по отношению к v.

Таким образом, если по отношению к какому-либо вирусу инфицированная программа является безобидной, это значит что она выполняет в точности те же действия, что и исходная неинфицированная программа и никаких других. Если она является трояном, значит она не может заражать другие программы, а может только имитировать их действия или наносить вред. Если программа является переносчиком, значит она не способна наносить вред, но при определенных обстоятельствах может заражать другие программы.

Определение 2.32. Для всех геделевских нумераций частичных рекурсивных функций {\phi_i}, для всех вирусов v по отношению к {\phi_i}:
  • вирус v безобиден одновременно справедливо:
    • (\forall  j \in  \Gamma ') [v(j) \ не \ является \ вредоносной \ по \ отношению \ к \ v \ и \ j]
    • (\forall  j \in  \Gamma ') [v(j) \ не \ является \ заразной \ по \ отношению\  к \ v \ и \ j]
  • вирус v - троянский конь одновременно справедливо:
    • (\forall  j \in  \Gamma ') [v(j) \ является \ вредоносной \ по \ отношению \ к \ v \ и \ j]
    • (\forall  j \in  \Gamma ') [v(j) \ не \ является \ заразной \ по \ отношению \ к \ v \ и \ j]
  • вирус v только распространяется одновременно справедливо:
    • (\forall  j \in  \Gamma ') [v(j) \ не \ является \ заразной \ по \ отношению \ к \ v \ и \ j]
    • (\forall  j \in  \Gamma ') [v(j) \ является \ вредоносной \ по \ отношению \ к \ v \ и \ j]
  • вирус v вредоносен одновременно справедливо:
    • (\forall  j \in  \Gamma ') [v(j)  \ является \ вредоносной \ по \ отношению \ к \ v \ и \ j]
    • (\forall  j \in  \Gamma ') [v(j)  \ является \ вредоносной \ по \ отношению \ к \ v \ и \ j]

Следующая теорема отмечает ряд простых свойств, присущих различным типам вирусов.

Теорема 2.11. Для всех геделевских нумераций частичных рекурсивных функций {\phi_i}, для всех вирусов v по отношению к {\phi_i}:
  1. (\exists j \in \Gamma ') [v(j) безобидна по отношению к v и j]
  2. вирус v безобиден (\forall j \in \Gamma ') [v(j) безобидна по отношению к v и j]
  3. если v - троян, то (\forall j \in \Gamma ') [v(j) безобидна по отношению к v и j] или [v(j) является трояном по отношению к v и j]
  4. если v способен только распространяться, то (\forall j \in \Gamma ') [v(j) безобидна по отношению к v и j] или [v(j) является переносчиком по отношению к v и j]

Доказательство. Первое свойство непосредственно следует из первой теоремы о рекурсии (теоремы о неподвижной точке).

Остальные свойства следует непосредственно из определений.

Обнаружение компьютерных вирусов

После определения компьютерного вируса естественным образом возникает вопрос об обнаружении такого рода программ, или о разрешимости множества компьютерных вирусов. Л. Адельман доказал следующую теорему.

Теорема 2.12. Для всех геделевских нумераций частичных рекурсивных функций {\phi_i}: V = \{i\mid \phi_i \text{является вирусом}\} - \Pi_2 - полное множество

Теорема приводится без доказательства.

Здесь \Pi_2 - класс множеств в арифметической классификации. Известно, что классы множеств \Pi_n с индексом 1 и выше являются неразрешимыми. Следовательно и множество вирусов является неразрешимым.

Заключение

Из вышеизложенного видно, что разные исследователи в разное время используя различный математический аппарат получили эквивалентный вывод. Класс вирусов является неразрешимым, т.е. не существует алгоритма, который бы позволил однозначно определить является программа зараженной (вирусом) или нет. Речь идет даже не о нехватке ресурсов, а о принципиальной невозможности создать подобный алгоритм.

В связи с этим проблема естественным образом переходит из теоретической области в практическую, где применяются частные решения для решения частных задач обнаружения вирусов. В частности решаются задачи определения вирусов по сигнатурам, или вероятностного определения вирусов. О подклассах вредоносных программ и практических методах борьбы с ними и пойдет речь в последующих главах.

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Ангелина Бабенко
Ангелина Бабенко