Для початку - пара ввідних зауважень. Зауваження перше: у зв'язку із заштопаною правою рукою друкувати мені незручно, тому помилки можуть бути. Зауваження друге: для когось все ниженаписане може не бути в новинку, але що вже вдіяти! Зате іншим, сподіваюся, буде цікаво. Поїхали!
Багато користувачів вважають файрволли і фільтри трафіку надійним захистом від вірусів. Загалом, налаштувати ці кошти можна так, щоб суттєво ускладнити життя вірусам, але це буде досить непростою проблемою. Про пару моментів, з якими доведеться зіткнутися я і розповім. Під палачами, як завжди, багато технічних подробиць, коду і місцями незв'язних думок.
На розтині - Trojan.DownLoad.921 по нашій, DrWeb'івській термінології.
Файл має розмір 20992 байти, упакований UPX. Є DLL з двома експортованими функціями: ClearAV и DoWork. Написаний, за інформацією від PEiD, на VC 6-й версії.
Відбиток лапи
Цікава особливість трояна в коді, що знаходиться на початку деяких функцій:
.text:10004490
.text:10004490 ; BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
.text:10004490 _DllMain@12: ; CODE XREF: DllEntryPoint+4Bp
.text:10004490 push ebp
.text:10004491 mov ebp, esp
.text:10004493 sub esp, 108h
.text:10004499 push esi
.text:1000449A push edi
.text:1000449B nop
.text:1000449C nop
.text:1000449D clc
.text:1000449E jnb short near ptr loc_100044A0+1
.text:100044A0
.text:100044A0 loc_100044A0: ; CODE XREF: .text:1000449Ej
.text:100044A0 call near ptr loc_1000468C+1
.text:100044A5 add cl, ch
.text:100044A7 pop edx
Або більш зрозумілим чином:
.text:10004490
.text:10004490 ; BOOL __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
.text:10004490 _DllMain@12: ; CODE XREF: DllEntryPoint+4Bp
.text:10004490 push ebp
.text:10004491 mov ebp, esp
.text:10004493 sub esp, 108h
.text:10004499 push esi
.text:1000449A push edi
.text:1000449B nop
.text:1000449C nop
.text:1000449D clc
.text:1000449E jnb short loc_100044A1
.text:1000449E ; — .text:100044A0 db 0E8h ; ш
.text:100044A1 ; — .text:100044A1
.text:100044A1 loc_100044A1: ; CODE XREF: .text:1000449Ej
.text:100044A1 call loc_100044A7
.text:100044A1 ; — .text:100044A6 db 0E9h ; щ
.text:100044A7 ; — .text:100044A7
.text:100044A7 loc_100044A7: ; CODE XREF: .text:loc_100044A1j
.text:100044A7 pop edx
Умовний перехід (у даному випадку за адресою 1000449E) завжди виконується, тобто замість call маємо jnb + call. Досить характерний «відбиток пальця», який, думаю, служить для ускладнення аналізу. Але IDA дозволяє легко працювати з таким кодом.
Жертви
Після виконання startup-коду, троян перевіряє, який же процес його завантажив. Задовольнять трояна тільки процеси з іменами flashget.exe, Thunder.exe, QQMusic.exe, QQLive.exe, QQDownload.exe, svchost.exe, explorer.exe. За іменами програм зрозуміло, що троян націлений, в першу чергу, на китайських користувачів. Якщо програма, що завантажила DLL, задовольняє трояна, створює новий потік програми, що містить корисне навантаження. Подальші дії виконуються вже в новому потоці.
Payload
Активна дієвість трояна починається з розшифровки URLa (алгоритм розшифровки не розбирав) і завантаження файла з адреси server.com/logo1.gif у файл з ім'ям package.tmp у тимчасовому каталозі поточного користувача. Завантажений файл дійсно є gif-малюнком, але при перегляді його в Hiew всередині видно EXE-файл! Має місце стеганографія - приховування самого факту передачі чогось зайвого. Спроба звантажити файл (як і всі інші файли, що скачуються) проводиться 5 разів з паузами в 20 секунд. У завантаженому файлі останні 4 байти - зсув «троянівської» інформації від початку файлу, яка включає довжину EXE файлу. Вилучає вбудований файл у тимчасовий каталог поточного користувача. Після успішного вилучення файлу викликається DeleteUrlCacheEntry, думаю, для приховування того факту, що завантажувався файл. Подібним чином завантажуються файли server.com/logo2.gif, server.com/logo3.gif і server.com/logo4.gif. Сумарний обсяг - близько 860 Кб!
Після того, як файли будуть завантажені, проводиться абсолютно незрозуміла операція: проводиться отримання MAC-адреси мережевої карти і порівняння його з 2 жорстко зашитими адресами. Причому порівнюється адреса цілком, а не тільки виробник. І зашиті адреси не VMWare-карт. Єдина логічна думка - захист авторів від свого дітища. Отримання ж MAC-адреси проводиться звірячим шляхом - через виклик ipconfig/all з розбором відповіді! Як би там не було, навіть якщо MAC-адреси співпадуть, троян не завершить роботи, він просто пропустить шматок коду.
Якщо MAC-адреси не збігаються, шукають вікно. Судячи з усього, шукається вікно QQ2006 - китайського аналога ICQ. Щоправда, пошук ведеться за повним заголовком (вклюячим і номер білда), що, можливо, є помилкою авторів. Якщо вікно знайдено, керування передається на той же код, що і при збігу MAC-адрес. Інакше виконується завантаження і збереження файла server2.cn/logo.gif (процес аналогічний вищеописаному).
Після цього проводиться спроба запуску витягнутих з GIF-файлів фрагментів, витягнутий з server2.cn/logo.gif файл не запускається. Успішно не перевіряється, але при невдачі спроб буде досить багато.
Вірусний апгрейд
Потім виконується завантаження файлу server.com/xin/version.gif, що представляє собою ini-файл. У ньому міститься номер версії, яка зчитується і порівнюється з версією трояна, жорстко зашитої в його тілі. Якщо INI-файл успішно завантажений і версія в ньому більше, ніж у трояна, буде завантажено файл server.com/xin/update.gif (а ось це вже нормальний EXE-файл).
Наприкінці роботи проводиться звернення до пристрою MAYASYS. Імовірно, завантажений у процедурі оновлення файл має до цього пристрою безпосереднє відношення.
Інші функції
ClearAV, імовірно, приховує якісь процеси, одночасно взаємодіючи з пристроєм MAYASYS (якого у мене, зрозуміло справа, в системі небуло). Які саме процеси повинні бути приховані - не зрозуміло, тому що троян запускався не в тих умовах, на які він розрахований.
Подальші дії функції зрозумілі з її назви: вона вбиває антивіруси, що працюють: каспера, Rising Personal FireWall, Symantec (здається його) і ще абсолютно незрозумілий антивірус (а може і вірус:-).
Функція DoWork викликає ClearAV, а потім виробляє Inject в процес explorer.exe
Протистояння файрволлам
Найбільш очевидний спосіб захисту від троянів - заборона на передачу даних всім додаткам, крім явно зазначених. Але тут він не спрацює: троян є DLL і розрахований на завантаження з svchost і explorer. І якщо заборона на мережеву активність для explorer - це ще можна зрозуміти, то ось svchost забороняти - погана справа. Настає черга фільтрації по портах: троян хоче 80-й, а svchost зазвичай може без нього обійтися. Залишається ще QQ, яка також може завантажити трояна в пам'ять. Особливостей мережевої роботи цього софту я не знаю, але сміливо припущу, що використовує він 80-й порт. заборону на порт і додаток вже не поставити. А якщо дивитися на запитувані файли, все буде досить нешкідливо - gif-картинки. Потрібна фільтрація вмісту, та й то непроста. Простим способом фільтр обійдено, що і потрібно було показати. Більш серйозні способи обходу фільтрів описані в одній зі статей Кріса Касперські. Настійно, до речі, рекомендую читати всі статті його авторства; -)
Ув'язнення
На аналіз потрапив троян, який є частиною комплексу шкідливих програм. У нього, я вважаю, повинні входити як мінімум драйвер пристрою MAYASYS і дроппер, який скидає аналізовану DLL на диск і прописує її в систему. Надалі, саме драйвер і дроппер були знайдені. Досить простим і безхитрісним способом троян обходить файрволли, які захистити можуть далеко не від всякої зарази.
Неясні моменти: чи дійсно функція ClearAV виконує функції руткіту? Навіщо перевіряються MAC-адреси? Яке саме вікно шукає троян? Навіщо завантажуються файли, які ніколи не запускаються?
