Среда, 09.10.2024, 18:15
Приветствую Вас Гость | RSS Главная | Регистрация | Вход
Мой сайт
Меню сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » 2014 » Январь » 20 » Что такое компьютерный вирус? :: Что означает троян
05:04

Что такое компьютерный вирус? :: Что означает троян





что означает троян

1 июля 2011 в 12:01

Что такое компьютерный вирус?



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

В этой статье мы рассмотрим три разных определения понятия «компьютерный вирус». Первые два сформулированы Фредериком Коэном и Леонардом Адлеманом в фундаментальных работах 1984-1992 годов и считаются классическими в современной компьютерной науке. К сожалению, из них автоматически следует, что задача распознавания произвольного вируса неразрешима. Что и доказали эти ученые в тех же работах, где привели свои определения.

Поэтому третье определение мы специально сформулируем таким образом, чтобы оно делало ту же самую задачу полностью разрешимой. Для этого мы откажемся от нескольких плохо формализуемых понятий, которые лежат в основе классических определений, и отнесем к вирусам более широкий круг информационных объектов. Такой подход — решение сложной задачи с помощью замены категорий, в которых она формулируется — часто бывает удобен и полезен в практической работе специалиста по информационной безопасности.
«An Abstract Theory of Computer Viruses». Модель Адлемана сильно отличается от модели Коэна. Но и для этой модели делается доказательный вывод о невозможности решения задачи распознавания произвольного вируса.

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

Определение Адлемана отличается крайней широтой и абстрактностью. Мы привели ссылку на оригинал работы, чтобы читатели могли самостоятельно делать выводы о том, насколько это определение соразмерно, полно, точно и применимо к реальным компьютерным вирусам в реальной среде спустя 20 лет после публикации.

В 2005 году китайские исследователи Zhihong Zuo, Mingtian Zhou и Qing-xin Zhu опубликовали работу «On the Time Complexity of Computer Viruses», расширяющую модель Адлемана на сложные типы вирусов, в частности — на полиморфные вирусы. Это потребовало значительного усложнения модели, но не изменило ее сути. В работе подтверждается прежний вывод о невозможности распознать произвольный вирус, точнее — о возможности существования вирусов, принципиально не поддающихся распознаванию в рамках используемой модели.

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

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

Определение вируса по нарушению кода


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

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

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

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

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

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

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

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

Заметим, что при отсутствии эталона для произвольного кода весь этот код по данному определению считается вирусом. Хотя это непривычно звучит, это надо хорошо понять и всегда иметь в виду. О том, откуда берется эталон, мы поговорим в следующих выпусках блога: для этого понадобится привлечение социальных факторов.

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

Какое из определений вируса лучше?


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

Вирус — это:
a) соответствующая определенным критериям функция, отображающая эталонный, незараженный объект на отличающийся от него зараженный объект;
b) любая функция, отображающая эталонный, незараженный объект на отличающийся от него зараженный объект.

Для распознавания вируса в проверяемом объекте нужно:
a) провести полное аналитическое или алгоритмическое изучение свойств и поведения системы, состоящей из проверяемого объекта и машины (среды);
b) определить местоположение проверяемого объекта в машине (среде).

Определение вируса основано на:
a) свойстве рекурсивной репликации;
b) методе сравнения образца с эталоном.

Еще раз подчеркнем существенную роль среды в процессе репликации. Например, сами по себе последовательности символов «SENDMAIL» (8 байт), «COPY» (4 байта) или «CP» (2 байта), которые могут содержаться в простейшем вирусе и которыми он может оперировать, не несут в себе ничего такого, что было бы специфично для процесса репликации (тем более — рекурсивной). Ничего подобного не содержит в себе и короткая байтовая последовательность, вызывающая функцию копирования из API операционной системы в машинном коде. В этой последовательности, если рассматривать ее вне среды, не содержится ни механизма репликации, ни его описания, ни даже намека на него.

Более того: в реальном вирусе может не содержаться даже этой информации — в буквальном смысле! Вместо нее вирус, например, может включать в себя сколь угодно сложный криптоалгоритм, а ключом к этому алгоритму может служить произвольная комбинация объектов среды, способная появиться в ней в неопределенном будущем. Это означает, что до некоторого неизвестного момента, до выполнения средой некоторого неизвестного при анализе условия принципиальное отсутствие в коде вируса каких-либо связей с понятиями как репликации, так и рекурсии можно гарантировать с точностью математического доказательства. Но даже в этом случае вирус, слившийся в свойствах со средой и образовавший с ее элементами сложную, распределенную в пространстве и времени систему, сохраняет возможность размножения кода.

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

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

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

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

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

P.S. Конечно, возможны и другие определения, кроме приведенных в статье. Их можно поискать в Сети или создать самостоятельно. Главное, что надо при этом помнить: по нормам формальной логики грамотное определение должно позволять, как минимум, определить искомый объект в ряду других :)

* * *

Читайте в следующем выпуске:
О вреде копирайта и пользе лицензионных программ.

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

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

Если Вы, напротив, уверены в корректности ядра именно для данной машины, смело декларируйте, что это эталон для данной машины. С этого момента — по правилам: бэкап, MD5, верификация и т.п. (детали зависят от того, какие именно Вы установили правила в Вашей корпоративной или домашней компьютерной системе). В серьезной организации MD5 файла записывается в журнал с подписью ответственного руководителя. Для бытового компьютера это не имеет смысла.

Вы меня не так поняли. Что нужно использовать нормальную систему управления пакетами я не возражаю.

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

Создание корпоративной среды разработки промышленного ПО — это очень сложная задача.

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

Если коротко, то ключ к решению поставленной Вами задачи — CIO с многолетним опытом. Самое главное — человеческий фактор. Хороший специалист разработает систему для небольшой программистской компании за 2-3 недели (т.е. в пересчете на зарплату CIO, эта работа стоит всего лишь порядка 1-1,5 дорогого ноутбука). Если, конечно, речь идет о производстве шутеров, веб-сайтов или офисного ПО, а не бортовых ПЛК для авиации. Если будет производиться что-то более серьезное, чем шутеры, то себестоимость разработки рабочей среды, конечно, будет намного больше. Очень важная деталь — инструкции для всех сотрудников и механизм координации их работы.

Позвольте и мне подкинуть пару строчек.

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

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

Лучший способ борьбы с вредоносными программами (при этом не уменьшая функциональности компьютера) — минимизировать наносимый пользователю вред, а имеенно:

— запретить полностью программам модифицировать компоненты ОС (верифицируемая загрузка + драйверы только с подписями производителя + отзыв драйверов, код которого выполняется до згрузки этих самых драйверов)
— запретить программам модифицировать любые файлы в системе, кроме своих собственных и явно указанных пользователем
— запретить возможность скрытого (без информирования об этом пользователя) запуска любых приложений. Также, запретить возможность программам скрытно выполняться в фоновом режиме без информирования пользвоателя. Сделать возможным надежное завершение пользователем программы и порожденных ей процесов в любой момент.
— Пользователь должен иметь возможност в любой момент надежно удалить любую программу
— установка в систему новых программ возможна только с явного согласия пользователя.

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

Атак через сетевые сервисы (вроде майкрософтовских дыр в самбах и подобных сервисах) не будет, так как у домашних пользователей нет необходимости открывать порты, а у корпоративных пользователей есть сисадмин.

Если отправку платных СМС и подписку на СМС-услуши сделать возможной толкьо через сайт оператора, мошенники (и опреаторы правда тоже) не смогут получать доходы путем непоного информирования пользвоателя о реальной стоимости и получателе услуги.

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

Ну а что касается спама, и ДДОС-атак, ну да, программы могут делать это скрытно, и что? Если они не замедляют и не нарушают работу системы, кому это мешает? Никому. Некоторые пользвоатели даже, возможно будут рады, например, нанести вред вражескому государству или какому-нибудь исламисткому сайту.

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

Ну а получатели СПАМа и жертвы ДДОС-атак смогут задуматься о переходе на более новые и проработанные сетевые протоколы, а не на митовское старье 40-летней давности. В любом случае, защищаться от сетевых атак и спама должен получатель и инфраструктура, а не обычный пользвоатель сети.

Ну а что будет с компаниями-паразитами, вроде лаборатории Касперского в этом прекрасном будущем?… ну не знаю, говорят дворников в стране не хватает, может заодно и улицы чище станут, хорошо же?

… а пока лучшие умы антивирусных компаний ломают голову над формально правильным определением вируса, их модные технологии эвристики и антивирусного краудсорсинга демонстрируют катастрофически низкое качество работы. «Какова вероятность что это вирус? 50/50 — либо вирус, либо нет.»

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

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

Наверное тон моего сообщения произвел неправильное впечатление :) Я в общем-то хочу указать на проблему, которая реально существует и чем больше антивирусные компании отходят от типичных сигнатурных срабатываний к эвристикам и краудсорсингу (для этого же вы пытаетесь в своем посте определить что есть суть вирус, не из чистой философии же? :)) — тем острее эта проблема становится.

Так вот. На самом деле вот эта проблема ложных краудсорсинг срабатываний по отношению к именно нашему софту — она есть практически у всех зарубежных антивирусов, которые пытаются (или не пытаются) войти на российский рынок. То есть идея простая — видят лсп и автозагрузку — вирус! Мы пытались одно время как-то это решать, но потом поняли, что собственное время дороже одного процента пользователей симантека, битдефендера и прочих. Опять таки этой проблемы нет у топ3 антивирусов российского рынка.

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

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



Источник: habrahabr.ru
Просмотров: 469 | Добавил: njectest | Рейтинг: 0.0/0
Всего комментариев: 0
Форма входа

Поиск

Календарь
«  Январь 2014  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright MyCorp © 2024Создать бесплатный сайт с uCoz