МЕТОДИ БОРОТЬБИ
з вірусом b> p>
У цій главі описані наиб-
леї ефективні методи
боротьби з вірусами, захисту
від проникнення і лікування.
Наведено алгоритми необ-
ходимо дій при подо-
зорі на наявність вірусу
в комп'ютері. Описані заходи
по запобіганню "епідеміо-
ми Академії "шляхом створення про-грами
-блокувальника. p>
Розглянуто приклад створення
програми-антивіруса.
Представлені вихідні тек-
сти програм з докладними коментарями
. p>
У попередніх розділах відбулося знайомство з комп'ютерними вірусу-
ми, що вражають Flash BIOS, документи текстового процесора
Microsoft Word 6.0 for Windows, файли різних операційних систем
та інші. Прийшов час розглянути різні способи боротьби з ними. p>
Отже, що ж таке антивірус? Відразу ж розвіємо одну часто виникають-
щую ілюзію. Чомусь багато хто вважає, що антивірус може вияв-
жити будь-який вірус, тобто, запустивши антивірусну програму або моні-
тор, можна бути абсолютно впевненим у їх надійності. Така точка
зору не зовсім вірна. Справа в тому, що антивірус - це теж програм-
ма, звичайно, написана професіоналом. Але ці програми здатні
розпізнавати і знищувати лише відомі віруси. Тобто антивірус
проти конкретного вірусу може бути написаний лише в тому випадку, ко-
та у програміста є хоча б один екземпляр цього вірусу.
От і йде ця нескінченна війна між авторами вірусів і антівіру-
сов, щоправда, першого в нашій країні чомусь завжди більше, ніж друге.
Але і у творців антивірусів є перевага! Справа в тому, що су-
суспільством велика кількість вірусів, алгоритм яких практично
скопійований з алгоритму інших вірусів. Як правило, такі варіації
створюють непрофесійні програмісти, які з якихось причи-
нам вирішили написати вірус. Для боротьби з такими "копіями" придумуйте-
але нова зброя - евристичні аналізатори. З їх допомогою антивірус
здатний знаходити подібні аналоги відомих вірусів, повідомляючи
користувачеві, що в нього, схоже, завівся вірус. Природно, надійність
евристичного аналізатора не 100%, але все ж його коефіцієнт поліз-
ного дії більше 0,5. Таким чином, в цій інформаційній вої-
не, як, втім, і в будь-який інший, залишаються найсильніші. Віруси, кото-
рие не розпізнаються антивірусними детекторами, здатні написати
тільки найбільш досвідчені й кваліфіковані програмісти. p>
Таким чином, на 100% захиститися від вірусів практично невозмож-
але (мається на увазі, що користувач змінюється дискетами з друзями
і грає в ігри, а також отримує інформацію з інших джерел,
наприклад з мереж). Якщо ж не вносити інформацію в комп'ютер через
поза, заразитися вірусом неможливо - сам він не народиться. p>
Отже, що ж можна порадити, щоб стикатися з вірусами як
можна менше або, принаймні, тільки стикатися, не допускаючи
їх на жорсткий диск свого вінчестера. У першу чергу - самі еле-
ментарние правила "комп'ютерної гігієни": перевірка дискет на наяв-
чіе вірусу найнадійнішими антивірусними програмами, такими, p>
наприклад, як AVP або DrWeb. Дуже добре, якщо на жорсткому диску
встановлений ревізор Adinf. Багато користувачів додають стрічку по-
пуску ревізорів, антивірусів, антивірусних моніторів в конфігур-
ційних файл AUTOEXEC.BAT - теж дуже дієво. p>
Є певні способи боротьби і з завантажувальними вірусами.
В установках (SETUP) комп'ютера передбачений захист від запису
в MBR. Коли запис починається, BIOS відразу ж її зупиняє
і запитує підтвердження на дозвіл запису. Природно,
слід заборонити запис, а потім завантажиться зі своєю, заздалегідь підго-
лення, системної дискети. У більшості комп'ютерних користу-
Ватель такий дискети немає - а треба б завести. І це ще не все.
Віруси постійно удосконалюються, і все їхнє різноманіття охопити,
звичайно, неможливо. Тому треба бути готовим, що рано чи по-
здно вірус все-таки потрапить на жорсткий диск, і зустріти його потрібно
у всеозброєнні. p>
Стандартні програми захисту b> p>
У більшості випадків вірус, що заразив комп'ютер, допоможуть вияв-
жити вже розроблені програми-детектори. Вони перевіряють, має-
ся чи у файлах на вказаному користувачем диску специфічна для
даного вірусу послідовність байт. При виявленні вірусу про-
грама виводить на екран відповідне повідомлення. p>
Варто також зазначити, що програми-детектори не надто універ-
сальних, оскільки здатні виявити тільки відомі віруси. Не-
яким таким програмам можна повідомити спеціальну послідовно-
ність байт, характерну для якогось вірусу, і вони зможуть
виявити інфіковані їм файли - наприклад, це вміє Notron
AntiVirus або AVSP. p>
Програма Aidstest застаріла і зараз вже практично не використовує-
ся. Найбільш широке поширення одержали програми DrWeb
і AVP. Завдяки своїм новітнім детекторів, вони можуть виявити
будь-які віруси - як самі старі, так і тільки що з'явилися. Ще
потрібно згадати детектор Adinf. Ця антивірусна програма вияв-
жива всі віруси, що не змінюють довжину файлів, невидимі віруси,
та багато інших. Таким чином, ці три програми забезпечать потужніше-
шую захист проти вірусів. До речі, на заході теж віддають перевагу
користуватися російськими програмами DrWeb і AVP. p>
Рятуючись від вірусів, потрібно створити потужний захист проти них. Встановіть
на своєму диску AVP, DrWeb та Adinf. Кожна програма хороша по-сво-
йому - нехай захист буде багаторівневою. Всі ці програми можна
вписати в файл AUTOEXEC.BAT, тоді при завантаженні комп'ютера про-
верка на зараження вірусом буде здійснюватися автоматично. p>
Завжди перевіряйте файли, що потрапляють на ваш комп'ютер. Будь-який з
них може бути заражений вірусом, це треба пам'ятати. Ніколи не по-
зволяйте стороннім працювати на вашому комп'ютері - саме вони
найчастіше приносять віруси. Особливу увагу слід приділяти іграм -
найчастіше віруси розповсюджуються саме так. Нові ігри і про-грами
завжди потрібно перевіряти на вірус. p>
Пошук вірусу b> p>
Коли під час роботи комп'ютер починає вести себе як-то незвичайний-
але, перша думка, що приходить на думку будь-якому користувачеві - вже не ви-
рус чи це так. У такій ситуації важливо правильно оцінити свої підозр-
ня і зробити висновки. p>
Як правило, людина, що володіє деяким досвідом та володіє з-
Відповідаю програмним інструментарієм, справляється з цим заду-
чий без особливих ускладнень. Найбільш складна ситуація - коли дей-
ствовать доводиться в "польових" умовах, наприклад, на чужій машині. p>
Типовий варіант: стандартна PC (286, 386 ... Pentium), як мінімум
1Мбайт ОЗУ, як мінімум 400Мбайт HDD; можлива наявність прин-
тера, звукової карти, CDD і іншої периферії. Програмне забезпе-чення
: Windows 95, можливо Windows 3.1x, але працюють все одно під
DOS. Джентльменський набір: Norton Commander 3.0-5.0, Norton Utility
6.0-8.0, свіжі антивіруси: AidsTest та DrWeb, русифікатори, архівато-
ри, резидентні програми та інше. Як обов'язковий усло-
вия - наявність завідомо "чистої" захищеної від запису завантажувального
дискети, що містить (хоча б у скороченому вигляді) вищезгаданий
комплект програм. p>
Отже, на думку господаря комп'ютер поводиться дивно. Наприклад,
програми, які раніше працювали правильно, починають збоїти або
взагалі перестають запускатися, комп'ютер періодично "висне", ек-
ран і динамік відтворюють незвичайні відео-і аудіоеффекти. Що
будемо робити? p>
1. Садовить перед собою господаря комп'ютера і детально расспраші-
ваем його про події, що передували виникнення збоїв. Вияс-
нитка потрібно наступне. p>
Ким і як використовується машина? Якщо співробітники або господар годину-
то приносять дрібні іграшки, гороскопи, встановлюють і перуть
різні бухгалтерські програми, то ймовірність наявності виру-
са в машині дуже висока. Великі іграшки, які насилу
вміщаються навіть у упакованому вигляді в коробку дискет, переносяться
з машини на машину рідко. При цьому вони, частіше за все, ретельно
перевіряються на наявність вірусів. p>
а) Коли вперше помічені симптоми вірусу? Деякі віруси
люблять пристосовувати свою діяльність до певної дати або
часу: 1 травня, 7 листопада, 13-те число, п'ятниця, п'ятій годині вечора,
а також 6 марта, 15 листопада, 11-а хвилина кожної години. p>
б) Не чи пов'язані зміни в роботі комп'ютера з перших запус-
ком будь-якої програми? Якщо так, то ця програма - перший
в черзі на "медкомісію". p>
в) не пов'язано поява симптомів зараження з розпаковуванням
будь-якого старого архіву і запуском програм з нього? Неко-
торие сучасні антивіруси (AVP, DrWeb) вміють перевіряти
архіви найбільш популярних форматів. Але ж зрідка ще
зустрічаються архіви. ice,. arc,. zoo,. bsa,. uc2,. ha,. pak,. chz,. eli
та інші - їх антивіруси діагностувати не можуть. p>
г) Чи не має господар (господиня) комп'ютера звичку залишати
дискети в дисководі при перезавантаженні? Завантажувальний вірус мо-
жет роками жити на дискеті, ніяк себе не виявляючи. p>
2. У присутності господаря (господині) вмикаємо комп'ютер. Уважний-
але стежимо за процесом завантаження. Спочатку запускається програма
POST, записана в ПЗП BIOS. Вона тестує пам'ять, тестує і
ініціалізує інші компоненти комп'ютера і завершується ко-
Ротко поодиноким гудком. Якщо "вірус" проявляє себе вже на
цьому етапі - він тут ні до чого. Теоретично вірус може суще-
ствовать і в BIOS: передбачається, що перший віруси на терито-
рію СРСР "приїхали" усередині болгарських ПЗУ (сучасні ПЗУ
часто не є "постійними пристроями, що запам'ятовують",
вони передбачають можливість перезапису BIOS). p>
3. У присутності господаря (господині) намагаємося викликати незвичайне по-
ведення комп'ютера. p>
а) Ідеально, якщо вірус (якщо це дійсно він) оригінали та
але сповіщає всіх про свою присутність, наприклад, виводить на ек-
ран повідомлення типу "I am VIRUS!". p>
Віруси проявляють себе різними способами: програють ме-
лодії, виводять на екран сторонні малюнки і написи, що імі-
руют апаратні збої, змушуючи тремтіти екран. Але, на жаль,
найчастіше віруси спеціально себе не виявляють. До антіві-
вірусні програмами додаються каталоги з описами вірусів
(для AidsTest вони зберігаються у файлі aidsvir.txt, для DrWeb -
у файлі virlist.web). Найбільш повним є гіпертекстовий
каталог avpve, що входить до складу антивірусного пакета Е. Каспер -
ського. У ньому можна не тільки прочитати достатньо докладний
опис будь-якого вірусу, але й спостерігати його прояви. p>
Від цих вірусів слід відрізняти так звані "студен-
орієн жарти", особливо широко поширені на комп'ютерах
терах ВНЗ та шкіл. Як правило, це резидентні програми,
які періодично проводять нагадують роботу виру-
сов відео-і аудіоеффекти. На відміну від справжніх вірусів,
ці програми не вміють розмножуватися. Наявність такого роду
програм на "бухгалтерських" комп'ютерах малоймовірно. p>
б) Дуже часто збої викликаються вірусами не навмисно,
а лише в силу їх несумісності з програмним середовищем, метушні-
кається через наявність в алгоритмі вірусу помилок і неточнос-
тей. Якщо будь-яка програма "зависає" при спробі запуску,
існує дуже велика ймовірність, що саме вона і заражений-
на вірусом. Якщо комп'ютер "висне" в процесі завантаження (пос-
ле успішного завершення програми POST), то за допомогою по-
крокової виконання файлів config.sys і autoexec.bat (клавіша
F8 в DOS 6.x) можна легко визначити джерело збоїв. p>
4. Не переобтяжуючи комп'ютер, запускаємо (можна прямо з вінчестера)
антивірус, найкраще DrWeb з ключем/hal. Вірус (якщо він є)
спробує негайно заразити DrWeb. Останній достатньо на-
Дежнев детектує цілісність свого коду і в разі чого виведе
повідомлення "Я заражений невідомим вірусом!" Якщо так і вироби
дет, то наявність вірусу в системі доведено. Уважно дивимося на
діагностичні повідомлення типу "Файл такий-то ВОЗМОЖНО за-
ражен вірусом такого-то класу" (СОМ, EXE, TSR, BOOT, MACRO
і т.п.). Підозри на ВООТ-вірус в 99% бувають виправдані. p>
Одного разу DrWeb 3.20 "лаявся" на ВООТ-сектор дискети, "вилікувано-
ної "AidsTest від вірусу LzExe, тому антивірусним програмам
теж не завжди можна довіряти. Наявність великої кількості фай-
лов, імовірно заражених вірусом одного і того ж клас-
са, з великою вірогідністю вказує на присутність в компьюте-
ре невідомого вірусу. Але можуть бути і виключення - DrWeb
версії 3.15 і нижче активно "лаявся" на стандартні DOC-компо-
нентов WinWord 2.0. p>
Крім того, DrWeb визначає наявність в пам'яті комп'ютера неіз-
Вестн резидентних вірусів і Stealth-вірусів. Помилки при їх
визначенні (в останніх версіях антивіруса) досить рідкісні.
Версія 3.15, не вміє лікувати вірус Kaczor, справно запідозрив-
ла наявність агресивного резидента в пам'яті. Версія ж 3.18, вмію-
щая його лікувати, в інфікованої системі взагалі нічого не заме-
Тіла, а детектувала і вилікувала вірус лише при завантаженні з чистим
дискети. При цьому треба мати на увазі, що попередження типу
"Дивна дата файлу", поодинокі підозри на СОМ-, ЕХЕ-ві-
руси та інше навряд чи можуть бути розцінені як безперечний доку-
зательство наявності вірусу. p>
MACRO-віруси живуть виключно в Windows і ніякого нега-
тивного впливу на DOS-програми зробити не можуть, за ви-
ням того випадку, коли вони що-небудь стерли в Windows-сеансі. p>
5. Нерідко збої бувають викликані природними причинами, ніяк-
го відношення до вірусів не мають. p>
а) Апаратні збої. Виключити цю можливість допоможе завантаження
з чистим дискети і запуск (з неї) діагностичної програми
ndiags. Тестуємо пам'ять, основну плату, порти і все Залишився-
ве. Іноді достатньо простий зовнішній огляд комп'ютера -
може бути, щось неправильно підключено. p>
б) Порушення в логічній структурі диска. Завантажується з чистою
дискети і запускаємо (з неї) ndd. Спочатку просто відзначаємо наявність
помилок (перехресних ланцюжків, втрачених кластерів і так далі).
Якщо помилок дуже багато і переважна їх числа відноситься
до СОМ-і ЕХЕ-файлів, то ні в якому разі не можна виконувати опе-
рацію виправлення помилок: це може бути DIR-подібний вірус,
і таке "лікування" диска може стати для багатьох програм фатальний-
вим. Якщо помилки є і їх відносно небагато, ризикуємо і ле-
чим диск. Знову завантажується з вінчестера. Збої пропали? p>
в) Конфлікти між різними компонентами операційної си-
СТЕМ та прикладними програмами. Особливо "шкідливими"
є дискові драйвери-обманщики, активно видозмінюють-
щие (нехай і з благородними цілями) інформацію, що зчитує-
мую або записувану на диск: p>
- дискові кеш (SMARTDRV, NC_CASHE); p>
- пакувальники дисків (DblSpace, DrvSpace, Stacker); p>
- системи безпеки (антивірусні монітори типу PROTECT,
HDPROT, ADM та інші, системи розмежування доступу
DISKMON, DISKREET). Нерідко дають збій застарілі прістиковоч-
ные системи захисту від несанкціонованого копіювання, типу
NOTA або CERBERUS. p>
6. Нарешті, самий цікавий випадок - вірус явно не виявлений,
але підозри на його наявність 'як і раніше залишаються. Досить
докладно цю тему виклав Е. Касперський у своїй книзі "Комп-
терни віруси в MS-DOS", обрані фрагменти якої можна
знайти в гіпертекстовому каталозі avpve того ж автора. Залишається
тільки привести короткий виклад цих голів з уточненнями і за-
мечаніямі (може бути, досить спірними). p>
а) Виявлення завантажувального вірусу. Завантажується з чистою дискети
і, запустивши DiskEditor, заглядаємо в сектор 0/0/1 вінчестера.
Якщо вінчестер розділений (за допомогою fdisk) на логічні диски,
то код займає приблизно половину сектора і починається
з байт FAh 33h COh (замість 33h іноді може бути 2Bh). Зака-
Чіван код повинен текстовими рядками типу "Missing operating
system ". Наприкінці сектора розміщуються зовні розрізнені бай-
ти таблиці розділів. Потрібно звернути увагу на розміщення
активний розділ в таблиці розділів. Якщо операційна система
розташована на диску С, а активний 2, 3 або 4 розділ, то вірус міг
змінити точку старту, сам розмістившись на початку другого логи-
чеського диска (заодно потрібно подивитися і там). Але також це мо-
жет говорити про наявність на машині декількох операційних си-
стем і будь-якого boot-менеджера, що забезпечує вибіркову
завантаження. Перевіряємо всю нульову доріжку. Якщо вона чиста,
тобто її сектора містять тільки байт-заповнювач, все в поряд-
ке. Наявність сміття, копій сектора 0/0/1 і іншого може гово-
вірить про присутність завантажувального вірусу. ?? іншому, антивіруси при
лікуванні завантажувальних вірусів лише "обезголовлювали" супротивника p>
(відновлюють початкове значення сектора 0/0/1), залишаючи тіло
"догнивала" на нульовій доріжці. Перевіряємо boot-сектор MS-DOS,
він зазвичай розташований в секторі в 0/1/1. Його зовнішній вигляд для
порівняння можна знайти як у вищезгаданій книзі Е. Касперс -
кого, так і на будь-який "чистої" машині. Отже, якщо вірус вияв-
дружин, за допомогою DiskEditor переписуємо у файл заражений
об'єкт: MBR 0/0/1 (а краще всю нульову доріжку), boot 0/1/1
і все інше. Бажано відправити цей комплект вірусоло-
гам. Копію, за бажання, залишаємо собі - для дослідів. p>
б) Виявлення файлового вірусу. Нерезидентні файлові виру-
си спеціально не приховують свого наявності в системі. Тому
основною ознакою зараження файлу є збільшення його
довжини, що легко помітити навіть у інфікованої операци-
онной системі. Резидентні віруси можуть приховувати зміна
довжини файлу (та й взагалі наявність свого коду всередині файлу-
жертви), якщо вони написані Stealth-технології. Але при заг-
Рузком з "чистою" дискети це можна побачити. Деякі віруси
не змінюють довжину заражаємо програм, використовуючи "порожні"
ділянки всередині файлу програми або кластерний "хвіст" фай-
ла, розташований після останнього заповненого сектора. p>
У цьому випадку основна ознака зараження - зміна конт-
рольний суми байт файлу. Це легко виявляють антівіру-
си-інспектора типу Adinf. Як крайній захід можна рас-
сматрівать пряме вивчення коду програм, підозрілих
з точки зору наявності в них вірусу. Один з кращих програм-
них засобiв для оперативного вивчення коду вірусів - програм-
ма HackerView (hiew.exe by SEN). Але, оскільки "за промовчу-
нію" комп'ютер чужий, hiew, td, softice, ida і подібних
програм на ньому може просто не виявитися. Зате стандартний
відладчик debug присутній точно. Завантажуємо підозрювану
на наявність вірусу програму (у чистій операційній системі)
в пам'ять за допомогою команди debug <назва програми>. Коман-
та й дозволяє дизасемблювати фрагмент коду, команда d -
переглядати його в шістнадцятковому форматі, команда g <ад-
рес> запускає програму на виконання з зупинкою в зазначений-
ної точці, команда t забезпечує покрокову трасування коду,
команда г відображає поточний вміст регістрів. Щоб ви-
зуально розпізнати наявність вірусу за кодом, звичайно, необхідний
певний досвід. Ось на що треба звертати особливу увагу: p>
- Наявність на початку програми послідовності команд подоб-
ного типу вкрай підозріло: p>
Start: p>
call Metka
Metka: pop p>
- Наявність на початку файлу рядків типу "PkLite", "Ь291" або "diet"
має на увазі обробку програми відповідним пакувальником; p>
якщо початок програми не містить послідовності команд, ха-
рактерних для пакувальника, не виключений факт її зараження. p>
- Програми, написані на мовах високого рівня, що часто содер-
жат у своєму початку сегмент коду, потім сегмент даних. Наявність
ще одного сегмента коду, що розташовується в кінці файлу
про-грами, досить підозріло. p>
- Підозра викликають розташовані на початку програми, напи-
санній на мові високого рівня, фрагменти видозміни соб-
ного коду, виклики DOS-або BIOS-переривань та інше. Же-
лательно візуально пам'ятати характерні початку програм,
скомпільованих в тій чи іншій системі програмування (на-
приклад, почала програм, написаних на Turbo Pascal, містять
велика кількість дальніх викликів підпрограм call xxxx: xxxx). p>
- Нарешті, про наявність вірусу можуть свідчити "сторонні-
ние" рядки типу "Eddie lives." всередині файлу. p>
7. Ловля вірусу "на живця". Отже, припустимо, що наявність вірусу в си-
стеми доведено одним із запропонованих вище методів, і заражений-
ные вірусом об'єкти визначені. Тепер можна почати вивчення
вірусу і, слідом за цим, спробувати видалити його з машини. Бажаю-
тельно надіслати зразок вірусу професійним вірусологам.
А для цього необхідно виділити вірус у чистому вигляді. p>
а) Виділення завантажувального вірусу. Як вже говорилося вище, якщо
вірус уразив вінчестер, необхідно за допомогою програми
DiskEditor зберегти у файлі образ зараженого об'єкта (наприклад
заходів, сектору 0/0/1 або всієї нульової доріжки). Але, як відомо,
завантажувальні віруси тільки "живуть" в системних областях вин-
честера, розмножуються ж вони, заражаючи системні області дис-
кет. Тому дивимося на лицьову панель комп'ютера. Якщо
в наявності дисководи обох типів (3.5 "і 5.25"), то доведеться p>
/• p>
відформатувати 4 дискети на 4 стандартних формату: 360Кбайт,
720Кбайт, 1.2Мбайт і 1.44Мбайт. Потім за допомогою програми
DiskEditor уважно розглянемо і постараємося запам'ятати
зовнішній вигляд boot-секторів цих дискет (0/0/1), хоча б перші
байти (природно, все це робиться на чистій машині). Встав-
ляем не захищені від запису дискети по черзі в дисководи
"хворий" машини і (обов'язково) звертаємося до них: намагаємося
прочитати теку, записати, прочитати і видалити які-небудь
файли. Нарешті, на чистій машині за допомогою DiskEditor
знову переглядаємо сектор 0/0/1. Якщо на який-небудь дискеті
він змінився, за допомогою того ж DiskEditor знімаємо образ
всій дискети у файл. Вірус спійманий. Можна упакувати файл ка-
ким-небудь архіватором і послати його вірусологи. Деякі
хитрі віруси зберігають своє тіло на додатковій, спеціально
відформатованої доріжці, так званому інженерному ци-
ліндре дискети. У цьому випадку без пакету копіювання ключових
дискет типу fda, teledisk або copymaster не обійтися. p>
б) Виділення резидентного вірусу. Як відомо, резидентний ви-
рус постійно знаходиться в пам'яті ПЕОМ, вибираючи жертву для
зараження. Найчастіше в якості жертв виступають запуску-
емие програми. Однак файли програм можуть заражатися при
відкриття, копіювання на дискету або з неї (вірус OneHalf), у
час пошуку за допомогою DOS-функцій FindFirst або FindNext.
Необхідно підібрати підходящого претендента на "конт-
рольне" зараження - невелику програму простої структури,
приманку. Деякі віруси намагаються розпізнати приманку
і відмовляються від її зараження. Не підходять для таких цілей
занадто короткі програми або такі, більша частина яких
складається з повторюваних байт (наприклад, 90h - код команди
NOP). В якості приманки з великим успіхом можна вико-
вать програми test.com і test.exe. Ось їх вихідні тексти
на мові Assembler. p>
test.com b> p>
cseg segment p>
assume cs: cseg, ds: cseg, ss: cseg p>
org-lOOh
Start: p>
db 1249 dup (OFAh, 90h, OFBh, OF8h) p>
1 60 Методи боротьби з вірусами p>
mov ah, 4Ch p>
int 21h p>
cseg ends p>
End Start p>
test.exe b> p>
cseg segment p>
assume cs: cseg, ds: cseg
Start: p>
db 1000 dup (OFAh, 90h, OFBh, OF8h) p>
mov ah, 4Ch p>
int 21h p>
cseg ends p>
sseg segment stack p>
assume ss: sseg p>
db 118 dup (OFAh, 90h, OFBh, OF8h) p>
sseg ends p>
End Start p>
скопіюємо принади на заражену машину. Виконаємо над ними як
якомога більше операцій: запустимо, скопіюємо в інше місце вінчесте-
ра і на дискету, перемістити, переглянемо їх у NC і DOS (командою
dir). При цьому бажано кілька разів поміняти системний час
і дату, тому що віруси нерідко активні не кожен день і не круг-
круглі добу. Щоб виключити Stealth-, Online з чистим дис-
кети і розглянемо уважно ці файли. Як правило, достатньо
буває проконтролювати розмір файлів і переглянути їх код при
допомоги F3 - наявність вірусу визначити нескладно. p>
в) Виділення нерезидентного файлу. Самий неприємний випадок.
Крім того, що вірус нерідко вередує, розпізнаючи
приманку, і як і раніше відмовляється працювати "без вихідних
і відпусток", так ще й заражаемость програм сильно залежить від
їх розташування на вінчестері. Одні нерезидентні віруси за-
ражают тільки в поточному каталозі, інші - тільки в подкатало-
Гах 1-го рівня, третє - в каталогах, зазначених у рядку path
системної середовища (Vienna), четверті - взагалі в усіх каталогах
вінчестера. Тому скористаємося програмою типу it, щоб
скопіювати приманки у всі каталоги диска (запускаємо з кор-
невого каталогу): p>
rt copy a: test .*. p>
Точка "." в кінці - символ поточного каталогу. Потім їх можна буде
видалити: p>
rt del test * p>
Тепер вибираємо свідомо заражену програму і запускаємо її N раз,
постійно змінюючи час та дату. Проконтролювати зміна довжини
допоможе та ж програма rt: p>
rt dir test .*> test.txt p>
Отримуємо файл test.txt, що містить список файлів test .* із зазначенням
їх довжини. Вибираємо той файл приманки, який змінив довжину.
Ось вірус і спійманий. p>
Як досліджувати алгоритм роботи вірусу b> p>
Ситуація, коли комп'ютер виявився заражений невідомим вірусом,
зустрічається не дуже часто, але повністю відкидати таку
можливість не можна. Вище розглядалися способи виявлення ви-
руса і виділення його в чистому вигляді. Зараз переходимо до дослідження
алгоритму роботи файлових вірусів для успішної боротьби з ними. p>
1. Перш ніж перейти до розгляду цього питання, згадаємо неко-
торие принципи функціонування MS DOS. p>
Структура СОМ-і ЕХЕ-програм. Взагалі кажучи, слід отли-
чать СОМ-і ЕХЕ-програми від СОМ-і ЕХЕ-файлів. Справа в тому,
що в даний час розширення СОМ або ЕХЕ є просто
ознакою (до речі, необов'язковим) запускається програми. Спо-
соб завантаження програми в пам'ять і її запуску визначається опера-
ционной системою по внутрішньому формату програми. Цей факт
часто не враховували автори першого вірусів, що призводило до Уніч-
тоженію деяких програм замість їх зараження. p>
СОМ-програма являє собою частину коду і даних, яка
починається з виконуваної команди і займає не більше 64Кбайт.
Наприклад, таку структуру має командний процесор
COMMAND.СОМ операційної системи MSDOS до версії 6.22
включно. p>
Структура ЕХЕ-програми набагато складніше. На початку файлу
ЕХЕ-програми розташовується заголовок (див. додаток). Поля
ReloCS і ExelP визначають розташування точки входу в програму,
поля ExeSP і ReloSS - розташування стека, поля PartPag
і PageCnt - розмір кореневого сегмента програми. Розмір деяких p>
6-1436 p>
програм, обчислений по полях PartPag і PageCnt, може не з-
впадати з реальним розміром файлу. Такі програми називаються
"сегментованим" або "містять внутрішні оверлеї".
Досвідчені автори вірусів уникають заражати такі програми. Пос-
ле заголовка може розміщуватися спеціальна таблиця,
точне місце розташування якої визначається полем TablOff, а розмір - по-
лем ReloCnt. У цій таблиці зберігаються адреси тих слів в коді
про-грами, які модифікуються операційною системою під час
завантаження програми. Наприклад, переглядаючи файл програми при
допомогою утиліти HackerView, можна бачити команду call
0000:1234 h. У процесі завантаження програми MS-DOS підставить вме-
сто нулів потрібний сегментний адресу, і все буде працювати коректив-
але. До речі, якщо в полі TablOff вказано число 40h або більше,
то, швидше за все, це програма у форматі Windows. Подібний
формат має, наприклад, командний процесор Windows 95
COMMAND.COM. Незважаючи на своє розширення, він має на нача-
ле знамениті символи "MZ" і довжину 95Кбайт. p>
2. Приступаємо до дослідження конкретного файлового вірусу і розрив-
лення алгоритму його лікування. В якості жертви "показового
розтину "візьмемо широко відомий на початку 90-х років вірус
SVC-1740. Вибір визначився наступними обставинами: p>
- це дуже простий вірус з чіткою структурою; p>
- він не містить деструктивних функцій; p>
- не містить грубих помилок в алгоритмі; p>
- він стандартно заражає СОМ-і ЕХЕ-програми.
Запустивши SVC вірус на своїй машині, можна спостерігати наступних
щие його прояви. p>
а) У MS-DOS встигли заразитися файли ARCVIEW.EXE,
HIEW.EXE і LEX.EXE. У результаті HackerView, перевіряючий
цілісність свого коду, відмовився працювати, повідомивши: "HIEW
bad, work is aborted". p>
6) Windows 3.11 та Windows 95 спочатку запустилися коректно, але
потім продемонстрували різнокольорові горизонтальні смуги
в відеорежимі 800х600х256 (вірус не заражав будь-які драй-
віра, просто в момент старту Windows в пам'яті знаходився ви-
вірусні обробник переривання INT 21h). p>
Вилікування прийшло після використання антивірусів: p>
DrWeb з:/сир/а1
і
AidsTest з:/f/g/q p>
3. За допомогою раніше описаних методів уразив дві принади: p>
TEST.COM і TEST.EXE. Збільшення їх довжини на 1740 байт мож-
але побачити тільки на "чистої" машині (Stealth-ефект). Несколь-
до слів про інструментарії. Взагалі кажучи, вибір дизассемблер
досить широкий. Свого часу була широко відома програма
DisDoc. За визнанням Е. Касперського, він активно користується інте-
рактівним дизассемблер IDA. Швидко переглянути код програм-
ми дозволяє утиліта HackerView. Також можливе використання
будь-якого відладчика. У даному випадку для вивчення коду заражених
приманок використовувався дизассемблер Sourcer v5.04. Незважаючи на
відсутність деяких корисних опцій і помилки при дізассемблі-
рованії (досить рідкісні), користуватися програмою зручно -
упакована PkLite, вона займає на дискеті всього 48Кбайт. p>
Отже, запускаємо дизассемблер командою sr test-сом. На екрані появи-
лась темно-синя лицьова сторінка. Натиснувши клавішу "а", можна пе-
Рейти на сторінку опцій. Рекомендується встановити опцію "а" -
обов'язково дизасемблювати фрагмент програми, маю-
щійся після команд jmp/ret/iret - це дозволяє отримати ассемб-
лерний код тих фрагментів програм, до яких немає явного перех-
так (процедури обробки переривань, приховані підпрограми
і так далі). Натиснувши Enter, повернемося на першу сторінку. Запустимо процес
дізассемблірованія натисканням клавіші "g". Залежно від про-
ізводітельності комп'ютера, процес дізассемблірованія триває від
кількох секунд до кількох хвилин. Для грубої оцінки розміру
лістингу можна прийняти, що один кілобайт коду відповідає десять-
ти-п'ятнадцяти кілобайтам тексту. 6740 байт зараженої приманки
дають 96Кбайт тексту + фото test.sdf. Цей дуже цікавий файл хра-
нит в текстовому вигляді як опції, використані при дізассембліро-
вання, так і параметри отриманого тексту (розміщення фрагментів
коду і даних, місце розташування символічних імен та інше).
Якщо змінити ці параметри, перейменувати файл у test.def і пере-
дати його Sourcer в командному рядку як параметр, то дізас-
семблер буде працювати у відповідності з новими інструкціями. Ана-
логічну операцію проробимо для файлу testexe. p>
б * p>
4. Займемося аналізом отриманого лістингу. Поверхнево вивчаючи за-
раженние приманки, бачимо: p>
- файли збільшили свою довжину на 1740 байт; p>
- в їх кінці явно видно сторонні коди; p>
- змінився час створення файлів, точніше, змінилося кількістю-
ство секунд - воно стало рівним 60; p>
- на початку файлу test.coM з'явилася команда jmp; p>
- у заголовку файлу test.exe змінилися значення полів ReloCS,
ExelP, ExeSP, ReloSS, PartPag і PageCnt. p>
Отже. p>
а) На початку вірусного коду міститься послідовність команд
виду: p>
call sub_1
sub_1: pop si
sub si, 3 p>
Подібна послідовність символів характерна для дуже мно-
гих вірусів. Команда call поміщає в стек зміщення наступної за
ній команди. Це значення витягується вірусом за допомогою ко-
мих фахівців pop si (у той час як зазвичай це робиться командою ret)
і поміщається в регістр si. Скорегувавши цю величину на довжину
команди call (3 байти), вірус отримує можливість коректного
звернення до комірок пам'яті щодо кодового сегмента: p>
mov cs: Data [si], xxxx. p>
Не випадково DrWeb завжди реагує на подібні команди в на-
Чале програм, видаючи попередження. Втім,
це не є обов'язковою ознакою присутності вірусу. На-приклад
, застаріла прістиковочная захист від несанкціонований-
ного копіювання (НСК) "Nota" також користується цим прийомом. p>
б) Важливим елементом алгоритму вірусу є визначення на-
лічія власного резидента в ОЗУ. Викликаючи переривання DOS
з "секретної" функцією 83h, вірус чекає реакції системи. "Здо-
світовий" система не зреагує на провокацію, а "хвора" поме-
стіт в регістр dx число 1990h (рік створення вірусу?), чим і з-
вести про наявність вірусу в пам'яті. Ось відповідний
фрагмент вірусного обробника переривання INT 21h: p>
cmp ah, 83h
je loc_9 p>
loc_9: p>
mov dx, 1990h
iret p>
Наявність такої перевірки використовує антивірус-фаг під час детектив-
вання вірусного коду в оперативній пам'яті. Також антивірус-бло-
кіровщік може імітувати присутність вірусу в пам'яті, запобігання-
обертаючи його впровадження в програмне забезпечення комп'ютера. p>
в) У разі відсутності вірусного обробника INT 21h в пам'яті,
вірус намагається встановити його і залишитися в пам'яті резидентної.
Алгоритм резидентної запису коду вірусу в пам'ять заснований
на прямій модифікації заголовка блоку пам'яті (МСВ). Під-
робное опис цього алгоритму і методів боротьби з вірусами,
використовують подібний метод інсталяції, можна знайти
в одному з номерів журналу "Монітор" за 1993 р. p>
г) Встановивши свою резидентну копію в ОЗП (або виявивши на-
відмінність такої копії), вірус передає управління оригінальній
програмі. Вивчення цього моменту надзвичайно важливо для ана-
лізу. У процесі зараження (цей фрагмент з лістингу уда-
льон) вірус зчитує (в data_15) 24 байти початку програми
і аналізує перші два байти з них. Залежно від содер-
жімого перші слова ( "MZ" чи ні), вірус виконує заражений-
ня жертви або по СОМ-, або по ЕХЕ-алгоритму, дописуючи
фрагмент пам'яті зі своїм кодом до її кінця. Природно, вва-
танние 24 байти також дописуються в файл-жертву. Тому
для визначення способу передачі управління оригінального
коду програми цілком достатньо повторно порівняти збережений-
ний фрагмент початку з ознакою "MZ": p>
cmp cs: data_15 [si], 5A4Dh
je lt_Was_EXE p>
Якщо програма була заражена по СОМ-алгоритму, вірус
просто витягує перші 3 байти з комірки пам'яті за адресою
data_15, копіює їх у старе початок оригінального коду (по адре-су
cs: 100h) і передає туди управління. Адресу data_15 відпо-
ствует 80-ий (якщо рахувати від кінця) байт зараженої програми. p>
Якщо програма була заражена з ЕХЕ-алгоритму, вірус
обчислює стару точку входу по збереженим в data_20 і data_21
значень полів ReloCS і ExelP, відновлює розташування
стека по збереженим в data_18 і data_19 значень полів ReloSS
і ExeSP і передає управління на ReloCS + ES 10 h: ExeIP (ES -
сегмент PSP; ES + lOh - сегмент початку програми; ES + ReloCS +
10h - повний сегмент точки входу). Розташування цих адрес
в зараженому файлі (від кінця файлу): p>
data_20 - 60
data_21 - 58
data_18 - 66
data_19 - 64 p>
Ще можуть стати в нагоді збережені значення полів PartPag
і PageCnt (від кінця файлу): p>
data_16 1 - 78
data_16 3 - 76 p>
Для лікування зараженого файлу достатньо відновити вимірюв-
ненние значення комірок, адреси яких тільки що вирахували,
і відсікти 1740 вірусних байт від кінця файлу. p>
5. Ще кілька особливостей, з якими іноді можна зустріти-
ся при дізассемблірованіі коду вірусу і вивченні лістингу. Код
вірусу може бути зашифрований. У цьому випадку на початку вірусного
коду повинен розташовуватися розшифровувача. Взагалі кажучи, рас-
шіфровщіков може бути багато, але перші завжди існує.
Якщо розшифровувача змінюється від одного зараженого файлу до дру-
гому, значить маємо справу з поліморфним вірусом. Вироджених
випадок - зашифровуються тільки збережені в тілі вірусу бай-
ти. Для СОМ-файлу цілком досить покроково пройти расшіф-
ровщік в відладчик, дочекатися його завершення і зберегти на вин-
честер розшифрувати код вірусу. Отриманий файл можна
розбирання. Для ЕХЕ-файла таке не підходить, тому що в
пам'яті після завантаження не має назви, і отриманий файл
не може бути дізассе