Вниз по RogueAV і кролячій отвір Blackhat SEO (частина 2)
У цьому щоденнику я продовжую аналіз PHP-скрипта, який хлопці RogueAV використовують на своїх веб-серверах. Ви можете прочитати перший щоденник у http://isc.sans.edu/diary.html?storyid=9085 .
Тепер, коли ми розуміємо, як працює отруєння пошукових систем, ми бачимо деякі особливості PHP-скрипта, який використовують зловмисники. Як я вже сказав у першому питанні, сценарій був заплутаний, але все ще можна було зрозуміти, що вони роблять. Фрагменти коду, які я покажу у цьому та наступних щоденниках, насправді були "прикрашені" і мені стало легше читати.
Заражає весь сайт
Після того, як сайт був скомпрометований, зловмисники встановлюють свій скрипт у будь-який каталог, бажано в каталог, який не доступний безпосередньо з Інтернету, оскільки їм не потрібно мати доступ до нього безпосередньо.
Наступним кроком, який зробить зловмисник, є зараження всіх (а я маю на увазі всі!) PHP-файлів на скомпрометованому веб-сайті. Якщо це спільний веб-сайт, і дозволи не налаштовані правильно, вони насправді заражають абсолютно всі веб-сайти, розміщені на цій машині.
Інфекція складається з вставки одного рядка на початку кожного файлу PHP, як показано нижче:
Цей рядок (який я навмисно скоротив) містить невеликий PHP-скрипт, який просто кодується Base64. Отже, коли будь-яка веб-сторінка на веб-сайті з компрометованим доступом доступна, скрипт нападників на PHP буде виконаний першим! Нижче наведено розшифрований сценарій:
Розшифрована частина показує, що зловмисники роблять:
- Якщо глобальна змінна msfn не встановлена і існує функція ob_start (це стандартна функція PHP), виконується наступний код.
- Глобальна змінна встановлюється вказувати на головний скрипт PHP (той, про який ми говоримо - називається style.css.php у цьому прикладі). Зверніть увагу, що він може бути де-небудь на диску, доки процес Apache має доступ до нього.
- Якщо файл існує, він включений. Це змушує головний PHP-скрипт виконувати і виконувати основну обробку. Я розгляну цей процес виконання в наступних щоденниках.
- Якщо головний PHP-скрипт працював правильно, він буде визначати функції gml і dgobh, так що останній рядок може виконуватися. Це частина, яка фактично відображає оригінальні веб-сайти і, при необхідності, додає посилання на пошукові системи - це я розглянув у попередньому щоденнику.
Таким чином, зловмисники переконалися, що їх сценарій буде виконуватися кожного разу, коли буде доступний інший PHP-скрипт на скомпрометованому веб-сайті. Це дозволяє їм мати необмежену свободу у використанні різних URL-адрес для отруєння пошукових систем, а також для перенаправлення користувачів на сайти, що обслуговують RogueAV (або будь-який інший зловмисне програмне забезпечення). Очищення веб-сайту після такої інфекції не надто складно - все, що вам потрібно зробити, це видалити перший рядок, але, як і будь-яка інфекція або компроміс, я б рекомендував відновити файли з резервних копій (ви їх робите, правда?).
Якщо вам цікаво, як зловмисники вставляють цей рядок у кожен файл PHP, відповідь проста - спеціальна функція в майстер-PHP-скрипті опікується цим. Він рекурсивно обходить всі каталоги, знаходить будь-які файли PHP і, якщо він може змінювати їх, вставляє рядок на початку. Після того, як зловмисники встановлять головний скрипт PHP (style.css.php), все, що він повинен зробити, це викликати скрипт з правильним параметром, як ви можете бачити на скріншоті нижче:
Цей інтерфейс захищений паролем, тому ви не можете отримати доступ до нього безпосередньо, не пройшовши аутентифікацію. Для тих, хто цікавиться, існує також функція, яка очищає весь сайт (параметр dgr = 1, ймовірно, для видалення), але доступ до нього також захищений паролем.
Налякані інші нападники?
Майстер PHP скрипт складається з десятків функцій, які займаються різними завданнями. Сьогодні я охоплюю першу пару рядків, які виконуються, оскільки вони відносно цікаві. Нижче наведено код PHP:
Цей код робить щось цікаве. Він приймає вміст суперглобалів $ _GET, $ _POST і $ _COOKIE, які містять параметри запиту та (звичайно) вміст cookie. Потім код трохи перетасовує вміст, перетворює його на весь нижній регістр і виконує на ньому urldecode. Це дозволить нормалізувати будь-який вміст (наприклад,% 61 буде перетворено на нижній регістр a).
Нарешті, код порівнює цей вміст з будь-яким рядком у рядку 12: 'base64', 'user_pass', 'substring (', 'або id =', 'eval (', 'nutch', '_ users', 'union') \ t all ',' mid (').
Це цікаво, оскільки здається, що автор сценарію намагався реалізувати дуже просту систему виявлення вторгнень - зверніть увагу на те, як він містить рядки ін'єкції SQL або частини коду PHP. Це не має великого сенсу (особливо відповідність SQL-ін'єкції), оскільки, наприклад, майстер PHP-скрипт не використовує базу даних, тому мені цікаво, чи це була частина іншої програми, яку автор просто повторно використав.
І з цим ми підходимо до кінця другого щоденника. У наступному щоденнику я перейду до деяких просунутих функцій PHP скрипта, таких як автоматичне оновлення, а також інтерфейс адміністраторів. Звичайно, ви можете зв'язатися з нами, якщо у вас виникнуть питання.
-
Боян
INFIGO IS
Я буду навчати наступного: Тестування проникнення через веб-застосунок та етичний злом - SANS Ер-Ріяд, квітень 2019 року
Html?Ви їх робите, правда?
Налякані інші нападники?