Боротьба з Ring0 троянами: оригінальний спосіб протидії шкідливі програмні забезпечення на робочих місцях

Одним із завдань для фахівця з IT-безпеки є вчасний пошук і виявлення троянських програм на комп'ютерах користувачів. У цій статті ми розглянемо оригінальний спосіб виявлення та видалення RING0 троянів без використання дорогих програмних комплексів і залучення сторонніх фахівців.


Тіньова IT-комерція


За даними експертів, в 2006 році тіньовий дохід, отриманий в результаті незаконної діяльності в сфері IT, перевищив аналогічні показники в сфері збуту наркотиків. Основними подвигами цієї галузі є незаконна реклама у вигляді розсилки спаму і атака певних мережевих ресурсів. Оскільки для вирішення цих завдань потрібні великі обчислювальні потужності, хакери придумали, яким чином можна нелегально брати в оренду чужі комп'ютери. Для цього створюються так звані бот-мережі (важко уявити, що всього 4-6 років тому про них знали тільки вибрані). Ця мережа складається з серверів і клієнтів (втім, і ті й інші являють собою комп'ютери користувачів, уражені відповідними зловредів).


Технологічна "ланцюжок



  1. Замовник платить гроші за оренду мережі під розсилку спаму або атаки на мережевий ресурс;
  2. Хакер встановлює на сервери завдання;
  3. Кожен клієнт періодично з'єднується з сервером, щоб отримати нову роботу або поновлення трояна.

Огляд


Щоб ефективно боротися з шкідливим програмним забезпеченням, потрібно небагато уявляти основні принципи їх роботи.


Всі зловредів діляться на дві великі групи – це ring3 і ring0 трояни, у вигляді програми або драйвера відповідно.


Про ring3 трояни ми говорити не будемо, оскільки вони вже давно переможені антивірусами, файрвол, проактивними захистами або просто умілими руками. Практичний же інтерес становлять трояни-драйвери (далі – Просто трояни), оскільки, працюючи на рівні ядра, вони мають найвищі привілеї. Антивіруси, файрволи та проактивні захисту теж мають свої драйвери, але хакер заздалегідь може знайти слабкі місця цих програмних продуктів і закласти відповідні алгоритми поведінки у свого зловредів.


В даний час ми є свідками постійної боротьби між хакерами, що відкривають дірки, і виробниками ОС або анти-троянського ПЗ.


Зараз існує величезна кількість анти-троянів (як платних, так і безкоштовних), але "віз і нині там". Логічно припустити, що рано чи пізно повинен був знайтися достатньо універсальний і надійний спосіб, і такий спосіб знайшовся!


Алгоритм дії


Потрапляючи в систему, шкідливий програмний продукт передусім має забезпечити свою завантаження при рестарт системи. Для цього він створює запис у спеціальному розділі реєстру – [HKEY_LOCAL_MACHINESYSTEMControlSet001Services].


Кожен запис має наступний формат:


DisplayName
Екранне ім'я, що відображається службовими програмами на екрані. Цей параметр необов'язковий. При його відсутності ім'ям вважається ім'я підрозділу.


ErrorControl
Визначає, яким чином реагувати на помилки.


ImagePath
Шлях до виконуваного файлу драйвера або служби.


Для драйверів не обов'язково вказувати значення цього параметра, але тоді файл драйвера повинен знаходитися в каталозі \% SystemRoot% System32Drivers.


Start
Вказує, як треба запускати драйвер.
Значення 2 – драйвер запускається автоматично на етапі завантаження системи.
Значення 3 – драйвер запускається на вимогу.


Type
Визначає тип служби.
Значення 1 означає драйвер.


Зрозуміло, троян, так спадщини при установці, обов'язково повинен приховати факт своєї присутності, сховавши запис реєстру і файл драйвера на диску. Для реалізації цього він перехоплює функції ядра і при кожному виклику цих функцій емулює відсутність приховуваних об'єктів. У сучасному уявленні трояна, технології приховування мають один з найважливіших аспектів. Ці технології носять назву rootkit. Виявивши дію руткіта, можна з 100% гарантією говорити і про наявність в системі трояна. Стереотипом виявлення руткітів в анти-троянського ПЗ є перевірка цілісності коду ядра системи і легальності стека викликів функцій. Ми ж підемо іншим шляхом! Ми будемо отримувати інформацію розділу реєстру опису драйверів за допомогою операційної системи і за допомогою утиліт, які не використовують функції ОС для роботи реєстру, а потім будемо порівнювати цю інформацію. Якщо вона різниться – ми знайшли руткіт!


Практика


Як ми вже говорили, найслабше місце трояна – це завантаження. Троян зобов'язаний прописати себе в реєстрі в розділі драйверів, інакше він просто не завантажиться при наступному старті системи. Саме тут ми і будемо його ловити, порівнюючи два дампа реєстру.


Перший дамп ми зробимо стандартними засобами ОС, а точніше, за допомогою вбудованого в Windows редактора реєстру regedit.


Другий дамп ми зробимо утилітою, яка читає реєстру безпосередньо з файлу, при цьому не звертаючись до функцій ОС. Якщо якийсь драйвер приховує свою присутність, при порівнянні вилізуть розбіжності, а кожне розходження – це прихований драйвер.


Технологія складається з наступних етапів:


1. За допомогою вбудованого в Windows редактора реєстру regedit ми експортуємо розділ реєстру [HKEY_LOCAL_MACHINESYSTEMControlSet001Services]


2. Копіюємо файл реєстру (% windir% system32configsystem). Оскільки всі файли реєстру заблоковані і недоступні для яких би то не було дій, ми будемо використовувати утиліту RegCopy.exe, яка зчитує файл реєстру по кластерах, звертаючись до диска безпосередньо, минаючи стандартні функції ОС.


3. За допомогою утиліти RegView ми відкриваємо цей файл і робимо ще один експорт цієї гілки реєстру.


4. Порівнюємо два файли. Оскільки порівнювати ці файли уручну дуже складно, я написав утиліту для їх порівняння – RegistryCompare.exe. Щоб скористатися їй, дампи П1 і П3 потрібно назвати orig.reg і raw.reg відповідно, і лежати вони повинні в папці з виконуваним файлом програми. Порівнювати ці файли вручну вкрай складно, я написав утиліту для їх порівняння – RegistryCompare.exe


Практикуватися ми будемо на руткіт Unreal.a (багато трояни використовують його модифікації для приховування в реєстрі і на диску).


Отже, запускаємо руткіт.


Далі копіюємо файл реєстру, запустивши RegCopy.exe. Тепер за допомогою RegView робимо експорт потрібної гілки, натиснувши F2 і не забувши назвати файл ім'ям raw.reg. Залишається зробити те ж саме за допомогою regedit і запустити RegistryCompare.exe.


Пошук завершено


Ось так, провівши кілька нескладних дій, ми можемо звести нанівець могутні зусилля висококваліфікованих rootkit-developer "ов. Досить імовірно, що з часом програмісти можуть багато придумати для обходу цього методу. Тим не менше, і наші дії у відповідь не обмежені представленим алгоритмом – наприклад, пункти 2-4 можна виконати на інший ОС (переставивши HDD на інший ПК) або завантажитися з паралельно встановленої ОС, а 1 пункт виконати на системі з трояном. Перевіряючи реєстр на іншій ОС, нам тепер не треба копіювати його за допомогою спеціальних утиліт, оскільки файл не заблокований – тобто 2 пункт виконуємо вручну.


ДУМКА РЕДАКЦІЇ


Лозовський Олександр, редактор рубрики "БЕЗПЕКА"


Читачеві, знайомому з ситуацією на антивірусному ринку зразка середини 90-х років цей спосіб напевно нагадає в чомусь аналогічну ситуацію з принципом роботи антивірусного ревізора ADInf:


Так як стелс-віруси перехоплюють звернення до дискової підсистеми комп'ютера і приховують присутність вірусу, ADinf зчитує інформацію з диска, минаючи операційну систему. Для читання диска ADinf звертається безпосередньо до відповідної функції BIOS, записаною в ПЗУ комп'ютера. У цьому випадку вірус не може перехопити звернення до диска, і ADinf отримує достовірну інформацію.


Як бачите, минуло вже більше 10 років, і шкідливий програмне забезпечення з якихось активно ховаються і протидіючих виявленню "творів мистецтва", що показують майстер-клас свого творця, перетворилося на потужний засіб для незаконного заробітку грошей, а принципи їх пошуку залишилися в чомусь схожими.


Думка експерта


Deeoni $, програміст у сфері IT-безпеки


На даний момент немає коштів, що дають 100% гарантію від проникнення руткітів в систему. Метод, описаний в даній статті, звичайно, дозволяє виявити більшість модулів, що завантажуються в ядро ОС, але, вдавшись до невеликої хитрості, завантаження драйвера вже не буде прописана в ключі HKEY_LOCAL_MACHINESYSTEMControlSet001Services. Наприклад, можна прописати програму-завантажувач драйвера в ключ HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun, якої буде створювати потрібний ключ для підвантаження драйвера, завантажувати його, а потім відразу ж видаляти цей ключ. Драйвер у свою чергу вже буде приховувати параметр в ключі Run. Є ще більш радикальний метод – зашифрувати файли реєстру і розшифровувати їх тільки при зверненні до них "довірених" додатків. Даний трюк виключає можливість доступу до реєстру з іншої ОС.


Крім документованого способу завантаження модулів режиму ядра (через реєстр), є безліч "хакерских" способів, доступних через помилки в коді Windows. Таким чином, запропонований у статті метод не панацея, і є лише однією з можливих частин комплексу з виявлення та протидії руткитам.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*