Як хакери змінюють файли з атрибутами – тільки для читання – (read-only)
+7 (495) 799-19-50
Як хакери змінюють файли з атрибутами "тільки для читання" (read-only)
При зломі сайту з метою заробітку або розповсюдження шкідливого програмного забезпечення у файлах скриптів та шаблонів розміщується шкідливий код, такий як вірусні вставки, хакерські шелли, бекдори тощо. Хакери модифікують файли скриптів, шаблонів та налаштувань, а власники сайту, як вміють, намагаються захистити свій сайт. Наприклад, заборонити запис в ті файли, в які хакери додають шкідливий код, роблячи їх лише для читання. Особливо кмітливі адміністратори та веб-майстри змінюють у файла власника на root, що точно має гарантувати захист від зміни. Але через деякий час виявляють, що у файлі знову додано шкідливий код, при цьому файл зберігає дату, час і атрибути "тільки для читання". Тобто сталася магія.

Дуже часто подібна картина спостерігається у файлів .htaccess та індексних (index.php, index.html). Насправді жодної магії немає. Просто є маса способів змінювати вміст read-only файлу і тільки зміна атрибутів на 400 або 444 не дає потрібного ефекту. Розглянемо варіанти зміни read-only файлу всіма доступними на хостингу засобами, включаючи скрипти php:
- Просто дозволити запис : найочевидніший спосіб – прочитати поточні атрибути, поміняти їх за допомогою chmod(“…”), system(“chmod …”) тощо, після чого дописати у файл код і знову змінити атрибути на старі. Якщо включити сюди збереження та відновлення дати та часу файлу, то взагалі важко буде помітити якісь зміни. За певних умов можна навіть зберігати розмір файлу.
- По FTP : підключитися, дозволити запис у файл, змінити файл, потім знову поміняти права на readonly
- По SSH : підключитися, дозволити запис у файл, змінити файл, потім знову поміняти права на readonly
- Перетворити файл : прочитати вміст файлу, видалити файл у каталозі, створити файл з тим самим ім'ям, записати в нього старий вміст + новий. Відновити атрибути, дату та час до смаку.
- Від рута : отримати доступ суперкористувача (наприклад, на "рутованому" сервері) і внести зміни в read-only файл.
Гарантовано захистити read-only файл від змін можна лише за дотриманням наступних умов (всіх до одного):
- На файл встановлені атрибути лише для читання (наприклад, 400 або 440)
- На каталог, в якому розміщено файл, встановлені атрибути лише для читання (наприклад, 500 або 550)
- У хакера немає доступів по FTP (можна закрити через .ftpaccess на запис або IP) і SSH (вимкнути його)
- На хостингу заборонені всі можливі варіанти зміни власника та атрибутів файлу (chmod, chown, system, popen, shell_exec, passthru тощо)
- Сервер не зламаний, хакер не має доступу з правами суперкористувача (root)
Якщо хоч один пункт не виконано, гарантувати захист файлу від модифікацій не можна.
До речі, під Linux можна використовувати розширені атрибути, встановивши файл "readonly" командою chattr +i file.txt
Цей підхід захисту файлів від модифікацій використовується у процедурі cms hardening ("цементування сайту"), яку ми виконуємо під час встановлення захисту.