Як хакери змінюють файли з атрибутами – тільки для читання – (read-only)

+7 (495) 799-19-50

Як хакери змінюють файли з атрибутами "тільки для читання" (read-only)

При зломі сайту з метою заробітку або розповсюдження шкідливого програмного забезпечення у файлах скриптів та шаблонів розміщується шкідливий код, такий як вірусні вставки, хакерські шелли, бекдори тощо. Хакери модифікують файли скриптів, шаблонів та налаштувань, а власники сайту, як вміють, намагаються захистити свій сайт. Наприклад, заборонити запис в ті файли, в які хакери додають шкідливий код, роблячи їх лише для читання. Особливо кмітливі адміністратори та веб-майстри змінюють у файла власника на root, що точно має гарантувати захист від зміни. Але через деякий час виявляють, що у файлі знову додано шкідливий код, при цьому файл зберігає дату, час і атрибути "тільки для читання". Тобто сталася магія.

тільки

Дуже часто подібна картина спостерігається у файлів .htaccess та індексних (index.php, index.html). Насправді жодної магії немає. Просто є маса способів змінювати вміст read-only файлу і тільки зміна атрибутів на 400 або 444 не дає потрібного ефекту. Розглянемо варіанти зміни read-only файлу всіма доступними на хостингу засобами, включаючи скрипти php:

  1. Просто дозволити запис : найочевидніший спосіб – прочитати поточні атрибути, поміняти їх за допомогою chmod(“…”), system(“chmod …”) тощо, після чого дописати у файл код і знову змінити атрибути на старі. Якщо включити сюди збереження та відновлення дати та часу файлу, то взагалі важко буде помітити якісь зміни. За певних умов можна навіть зберігати розмір файлу.
  2. По FTP : підключитися, дозволити запис у файл, змінити файл, потім знову поміняти права на readonly
  3. По SSH : підключитися, дозволити запис у файл, змінити файл, потім знову поміняти права на readonly
  4. Перетворити файл : прочитати вміст файлу, видалити файл у каталозі, створити файл з тим самим ім'ям, записати в нього старий вміст + новий. Відновити атрибути, дату та час до смаку.
  5. Від рута : отримати доступ суперкористувача (наприклад, на "рутованому" сервері) і внести зміни в read-only файл.

Гарантовано захистити read-only файл від змін можна лише за дотриманням наступних умов (всіх до одного):

  1. На файл встановлені атрибути лише для читання (наприклад, 400 або 440)
  2. На каталог, в якому розміщено файл, встановлені атрибути лише для читання (наприклад, 500 або 550)
  3. У хакера немає доступів по FTP (можна закрити через .ftpaccess на запис або IP) і SSH (вимкнути його)
  4. На хостингу заборонені всі можливі варіанти зміни власника та атрибутів файлу (chmod, chown, system, popen, shell_exec, passthru тощо)
  5. Сервер не зламаний, хакер не має доступу з правами суперкористувача (root)

Якщо хоч один пункт не виконано, гарантувати захист файлу від модифікацій не можна.

До речі, під Linux можна використовувати розширені атрибути, встановивши файл "readonly" командою chattr +i file.txt

Цей підхід захисту файлів від модифікацій використовується у процедурі cms hardening ("цементування сайту"), яку ми виконуємо під час встановлення захисту.