Введение в компьютерную вирусологию

О цивилизационной важности обычного человеческого рассуждения

Изобретение Фредерика Коэна поставило под угрозу работу главного цивилизационного достижения — вычислительной машины. Но одновременно оно показало и доказало важность обычного человеческого рассуждения.

Записи Алана Тьюринга с изложением его идей. На заднем фоне — портрет автора

Записи Алана Тьюринга с изложением его идей. На заднем фоне — портрет автора

Фото: Dickson Lee / South China Morning Post / Getty Images

Записи Алана Тьюринга с изложением его идей. На заднем фоне — портрет автора

Фото: Dickson Lee / South China Morning Post / Getty Images

«Путь, о котором можно поведать,— не постоянный Путь.
Имя, которое можно назвать,— не постоянное Имя».
Трактат Лао-цзы «Дао дэ цзин»

Вызов — и ответ

Закон (скорее гипотеза) «вызова и ответа», предложенный британским историком и философом Альбертом Тойнби в цикле работ «Постижение истории», опубликованном в период с 1934 по 1961 год, до сих пор вызывает интерес.

«Мы знали только, что закон,
Написанный для всех,
Хранит мякину, а зерно
Роняет из прорех!»
Оскар Уайльд «Баллада Редингской тюрьмы»

Впервые была предложена легко воспринимаемая и понятная модель развития цивилизаций. В соответствии с этой моделью внешние события — войны, революции, природные катаклизмы — ставят перед обществом проблему (challenge). Реакцию общества на этот вызов можно полагать выбором варианта решения (response). Адекватность ответа, по сути дела, определяется общественным удовлетворением. Возникает новый «общественный договор», позволяющий перейти к новой фазе развития общества.

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

Однако мало кто обратил внимание (по крайней мере, насколько мне известно), что модель «challenge—response» может быть применима к слишком широкому классу явлений. По сути дела, поведение любой динамической системы может быть формально описано как «challenge—response».

Что общего в эволюции живых существ и машин?

Алан Тьюринг, роль которого в компьютерном мире сравнима с ролью Эйнштейна в мире физики, первым счел заслуживающим внимания вопрос: можно ли «когнитивные способности» компьютеров сравнить с когнитивными способностями людей. Точнее, его вопрос сводился к следующей проблеме: можно ли создать программу для любого универсального вычислителя, например, «машины Тьюринга» (по сути дела, это будет challenge—response-тест), который позволит, задавая вопросы «пользователю», решать, является «пользователь» человеком или компьютером.

Например, «пользователя» компьютера (компьютерной сети) просят решить задачу: написать некоторую последовательность букв или чисел, выбрать некоторую картинку из заданного множества или сыграть в некоторую простую игру. По результатам теста необходимо установить, кто решает поставленную задачу: человек или другой компьютер.

В 2003 году Луис фон Ан, Мануэль Блум, Николас Хоппер и Джон Лэнгфорд предложили называть такие тесты CAPTCHA (по первым буквам фразы «Completely Automated Public Turing Test to Tell Computers and Humans Apart»). Сегодня подобные тесты широко используются в компьютерных технологиях для борьбы с атаками ботов и спамом.

Например, жизнедеятельность любых живых существ — это последовательность «вызовов» среды, в которой эти существа обитают, и «ответов» на эти вызовы. Впервые такое поведение живых существ под названием «fight or flight» («бей или беги») было рассмотрено Кенноном еще в 1929 году, то есть до появления работ Тойнби.

Кеннон, Уолтер Брэдфорд. Bodily changes in pain, hunger, fear, and rage, New York: Appleton-Century-Crofts, 1929

Жизнь живых существ, те ситуации, которые получили в литературе название «fight or flight», представлялись читателям в начале ХХ века менее интересными, чем судьбы цивилизации, о которых писал Тойнби. И это можно понять: практически каждый человек попадал в ситуацию fight or flight, это дело житейское. Зато обсуждение «судеб цивилизации» — занятие духоподъемное и, как правило, физическими травмами не грозящее. Но если работы по поводу fight or flight довольно быстро приобрели характер достаточно строгих физиологических исследований с проверяемыми на практике результатами, дискуссии о судьбах цивилизаций продолжали носить чисто академический или политический характер, чаще всего обходя стороной вопрос о «качестве ответа», то есть эффективности предложенного решения. Ведь на самом деле оценить это качество можно, лишь когда статистически достоверно удается установить априори все pro и contra предлагаемого «ответа». (В «Поэме о Сталине» Александр Галич подробно описал историю одного «ответа».)

Люди склонны ликовать от того, что произошло нечто «новое», ранее невиданное. Это «новое» они часто готовы истолковать во благо, поскольку надеются, что «болевые симптомы», ранее возникшие в обществе, сами собой исчезнут (или потому, что «хуже уже не будет»).

Если «ответ» организма в случае fight or flight всегда стремится (и часто успешно) к минимизации жизненно важных потерь для своего хозяина, то потери конкретного общества при переходе на новый уровень развития часто оказываются трудновосполнимыми. Общество может быть выведено на новый уровень развития. Но какой ценой? Несложно сформулировать «вызов» — «мы наш, мы новый мир построим, кто был ничем, тот станет всем». «Ответ», найденный большевиками, действительно привел в этом случае к новому «общественному договору», но оставил неизвестным, что ждет в «новом мире» тех, кто был «чем-то» в мире прежнем. Потому и спустя 100 лет после «ответа» на этот вызов непонятно, стоила ли игра свеч. Зато появились новые вопросы:

— не является ли «ответ» природы на новые «вызовы», который приводит к тотальному уничтожению целых видов живых существ, не только достаточным, но и необходимым условием эволюционного развития?

— не может ли так случиться, что «ответ» существующей цивилизации создаст еще более серьезный «вызов»?

«Цивилизация» Artificial Intelligence

Казалось бы, развитие компьютерных наук и технологий — лишь частная подробность в цивилизации людей. Однако и здесь развитие приводит к появлению новых «вызовов», сравнимых по масштабам (и, возможно, последствиям) с наводнениями и пожарами. В основе развития «компьютерной цивилизации» оказался буквально тот же принцип «challenge—response», который предложил Тойнби. На первых порах этот принцип принял вид challenge—response authentication, то есть аутентификация компьютеров (компьютерных сетей) с помощью опросов (паролей). Предполагается, что один из участников задает вопрос (challenge), а другой должен дать правильный ответ (response), чтобы его признали «своим» (аутентифицировали):

«Стой! Кто идет?»
«Одуванчик».
«Проходи!»

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

«Стой! Кто идет?»
«Одуванчик».
«Пароль?»
«Венера».
«Проходи!»

(Не исключено, что оптимальным эволюционным решением в ряде случаев будет решение открывать огонь на поражение по всему, что движется, не утомляясь анализом правильности ответа.)

Challenge—response authentication оказалась лишь верхушкой айсберга, который не собирался таять.

ACE (Automatic Computing Engine) — один из первых компьютеров, разработанных в 1949–1950 годах на основе алгоритмов Тьюринга

ACE (Automatic Computing Engine) — один из первых компьютеров, разработанных в 1949–1950 годах на основе алгоритмов Тьюринга

Фото: SSPL / Getty Images

ACE (Automatic Computing Engine) — один из первых компьютеров, разработанных в 1949–1950 годах на основе алгоритмов Тьюринга

Фото: SSPL / Getty Images

Мир «живых существ»

Слишком я любил на этом свете
Все, что душу облекает в плоть
С. Есенин

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

В сегодняшнем мире все более значимыми вызовами становятся проблемы взаимодействия людей и искусственных «существ», созданных руками людей. Фактически эти проблемы (пусть и в форме мифов, сказок, легенд) стали осознаваться за несколько тысяч лет до всеобщей обеспокоенности всемирным потеплением и искусственным интеллектом.

«На, куколка, покушай, моего горя послушай! Живу я в доме у батюшки, не вижу себе никакой радости; злая мачеха гонит меня с белого света. Научи ты меня, как мне быть и жить и что делать?
Куколка покушает, да потом и дает ей советы и утешает в горе, а наутро всякую работу справляет за Василису; та только отдыхает в холодочке да рвет цветочки, а у нее уж и гряды выполоты, и капуста полита, и вода наношена, и печь вытоплена. Куколка еще укажет Василисе и травку от загару. Хорошо было жить ей с куколкой».
«Василиса Прекрасная» (русская народная сказка)

Сегодня дети получают «куколок» (в виде смартфонов и планшетов) и не без оснований склонны считать их некоей другой формой жизни. Еще бы — с ними можно получать и визуальную, и аудио, и тактильную информацию, причем зачастую в объеме гораздо большем, чем общаясь с родителями.

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

«Болезнь» компьютера может быть как «телесной» (неисправность физических элементов, из которых он состоит), так и «духовной» — ошибкой в загруженном программном коде. Обычно если в процессе эксплуатации появилось подозрение на наличие некоторой неисправности, понять, какого сорта «болезнь», крайне сложно. Как ее распознать? Примерно так же, как это делают врачи. Они измеряют температуру и интересуются различными телесными отправлениями. Затем пытаются выяснить, не подхватил ли пациент какую-то инфекцию. И уже потом прописывают лекарства и дают направления на анализы.

Есть ли гарантия, что будет поставлен верный диагноз? Как указывал Остап Бендер, «полное спокойствие может дать человеку только страховой полис», понимая, что даже страхового полиса недостаточно для гарантий чего бы то ни было (не говоря уж о врачебном диагнозе).

А что происходит с «больным» компьютером? Оставим в стороне «телесные» неисправности (хотя это чрезвычайно любопытный вопрос) и займемся «душой», то бишь программой. Существует ли возможность создать тест типа CAPTCHA для определения программных ошибок?

Наверное, существует некоторый закон типа «хозяин — барин» в соответствии с которым доля людей, которые понимают принципы работы каждого из устройств, постоянно применяемых ими в жизни, неуклонно уменьшается с разнообразием таких устройств. Современная цивилизация сделала компьютерными пользователями чуть ли не всех существ из рода homo sapiens подвидов sapiens. Но даже многие «продвинутые пользователи» не видят необходимости в понимании внутреннего устройства того, с чем проводят зачастую большую часть жизни. В первую очередь это относится к вопросу о том, что может и что не может сделать компьютер, названный «универсальным».

Универсальность компьютера N означает, приблизительно говоря, что принципиально возможно создать такую программу для N, которая решит любую задачу из класса алгоритмически разрешимых.

«Принципиально возможно» вовсе не означает, что это «просто». Более того, это вовсе не означает, что это всегда возможно. В теории алгоритмов существует понятие алгоритмической разрешимости, которое предполагает, что если задача D, интересующая пользователя, относится к этому классу, ее можно решить за конечное время, то есть программа для решения задачи D, которая загружена в компьютер, рано или поздно остановится и будет получен ответ.

Достаточно долго вопрос о существовании задач, которые принципиально невозможно решить, оставался открытым.

(По-видимому существование таких задач уменьшает гордость звучания слова «человек». «Обожествление» людей очень распространенная парадигма, и трудно оценить, чего больше — вреда или пользы — она приносит.)

А что если в наше распоряжение попало устройство, о структуре которого ничего не известно, но опыт показывает, что оно может правильно отвечать на некоторые вопросы. Математики назвали это загадочное устройство «черным ящиком», а «ответ» «черного ящика» на любое допустимое входное слово стали считать расшифровкой автомата (Барздинь Я. М. О расшифровке автоматов. Сб. «Проблемы кибернетики», вып. 21, «Наука», 1969). Оказалось, что «гарантированная» расшифровка автомата, для которого известно только, на каком языке с ним можно общаться (точнее говоря, входной и выходной алфавиты), в общем случае оказывается алгоритмически неразрешимой.

«Обойти» эту неразрешимость можно только, снабдив автомат возможностью осуществления операции «перезагрузки», то есть возвращения автомата в исходное состояние после подачи любого входного слова. Ясно, что подобное требование практически неосуществимо для любого живого организма (так что ругать врачей не стоит).

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

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

Возможно, для проверки способности компьютеров и сетей «выживать» в «неблагоприятной информационной среде» у компьютерных специалистов возникло желание поместить компьютеры в максимально неблагоприятные условия. Давно известно, что самым беспощадным и распространенным врагом людей являются инфекционные заболевания. Ожидать самопроизвольного появления инфекции у компьютеров не приходилось. Однако любопытство представителей рода homo sapiens sapiens не имеет границ — найти способ «заразить» компьютеры было делом времени.

В 1983 году Фредерик Коэн, студент Инженерной школы Университета Южной Калифорнии написал программу, способную захватывать управление над операциями, выполняемыми компьютером. Через много лет, когда один из интервьюеров поинтересовался, с чего началась ставшая такой знаменитой «вирусная эпидемия» компьютеров, Коэн ответил: «В студенческие годы на одной из стен Технологического института Карнеги Аланом Перлисом была написана старая поговорка:

Problems worthy of attack,

Prove their worth by fighting back

(Задачи, достойные решения, // Доказывают свою ценность, сопротивляясь ему)».

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

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

И инфекция может распространяться по всей сети.

В одной из своих первых работ Коэн приводит простой пример. Вирус (V) ищет незараженный исполняемый файл (E), отыскивая исполняемые файлы без «1234567» в начале, и добавляет V к E, превращая его в зараженный файл (I).

Затем V проверяет, верно ли какое-либо условие срабатывания, и наносит какой-то ущерб, после чего выполняет остальную часть программы, к которой он был добавлен. Когда пользователь пытается выполнить E, вместо него выполняется I; он заражает другой файл, а затем все выполняется так, как если бы он был E. За исключением небольшой задержки заражения, I выглядит как E до тех пор, пока условие запуска не приведет к повреждению.

Ключевым свойством такого вируса является способность заражать другие программы, достигая тем самым транзитивного закрытия обмена между пользователями. Например, если V заразил один из исполняемых файлов Е пользователя A, а пользователь B затем запустил E, V также может распространиться на файлы пользователя B.

Конечно, стоило появиться вредоносным вирусам, как незамедлительно встала проблема защиты от таких вирусных атак.

Но Коэн был неумолим. Вскоре он опубликовал работу (Fred Cohen, «Computational Aspects of Computer Viruses», Computers and Security 8 (1989) 325–244), в которой утверждалось, что задача совершенного обнаружения всех возможных вирусов является алгоритмически неразрешимой.

Фактически причина алгоритмической неразрешимости «вирусных заболеваний» была в точности той же, что алгоритмическая неразрешимость проблемы расшифровки автоматов. Проверяя наличие вируса, мы не можем гарантировать, что проверили все мыслимые возможности (вышли из леса, в котором блуждаем).

Единственный гарантированный способ не заразить «здоровый» компьютер — это не «выводить его из дома», то есть не допускать никаких (по крайней мере, непроверенных) внешних источников информации.

Что делать и кто виноват?

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

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

Придется ограничиться «полным спокойствием», как и предлагал сын турецкого подданного Остап Сулейман Берта Мария Бендер-Бей.

Александр Горяшко, доктор технических наук

Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...
Загрузка новости...