У нотатці, опублікованій у січні 2012 року, я навів серію підозрілих HTTP-запитів до нашого сервера. Самі записи датовано 30 серпня 2011 року. Усі вони звертаються до різних можливих каталогів phpMyAdmin та файла scripts/setup.php.
Фрагмент журналу
Нижче збережено всі 45 записів із початкової публікації. Вони охоплюють проміжок від 08:44:26 до 08:44:49 за вказаним у журналі часовим поясом +0300.
72.55.148.21 - - [30/Aug/2011:08:44:26 +0300] "GET //admdb/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:26 +0300] "GET //!mysql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:27 +0300] "GET //phpma1/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:27 +0300] "GET //adminsql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:27 +0300] "GET //madm/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:28 +0300] "GET //ladminadminl/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:29 +0300] "GET //myad/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:32 +0300] "GET //PmA/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpMyAdmin-2.11.5.1-all-languages/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpmyadmin_2.10/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpmyadmin2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:33 +0300] "GET //phpmyadmin211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:37 +0300] "GET //phpMyAdmin211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:37 +0300] "GET //pma2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:37 +0300] "GET //pma211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:38 +0300] "GET //db2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:38 +0300] "GET //db211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:38 +0300] "GET //dbadmin2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:41 +0300] "GET //php2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:42 +0300] "GET //php211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:42 +0300] "GET //_sql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:42 +0300] "GET //sql2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //sql211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //phpadmin2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //phpadmin211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:43 +0300] "GET //mysql2011/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:44 +0300] "GET //mysql211/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:44 +0300] "GET //phpM/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:44 +0300] "GET //phpMyAdmin.life/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //pma_2/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //phpMyAdmini/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //phpmysql/sql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:45 +0300] "GET //pma_ai/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:46 +0300] "GET //mygoodadmin/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:46 +0300] "GET //wp-pma-mod/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:46 +0300] "GET //phpMyAdmin-old/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //phpma/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //madm/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //php_jibin/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:47 +0300] "GET //db_my/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //data_admin/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //phpMyAdmin-2.11.1/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //rootsql/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:48 +0300] "GET //rcsu_mydb/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
72.55.148.21 - - [30/Aug/2011:08:44:49 +0300] "GET //phpMyAdmin-2.11.9.6/scripts/setup.php HTTP/1.1" 403 169 "-" "-"
Що можна встановити
Видно послідовні GET-запити з однієї записаної IP-адреси до багатьох варіантів шляху інсталяційного скрипта. Така послідовність схожа на автоматизований пошук доступного phpMyAdmin. Це висновок із наведеного фрагмента, а не встановлення особи чи намірів власника адреси.
В усіх записах сервер повернув 403. За HTTP-семантикою це відмова виконати запит. Вона не доводить ані існування конкретного файла, ані успішного доступу до нього. Поля журналу залежать від налаштованого формату access_log Nginx.
Чому «брутфорс» був неточною назвою
Початковий заголовок називав подію спробою злому брутфорсом. Однак у цьому фрагменті немає доказів перебору паролів: видно перебір URL. Також ці записи самі собою не підтверджують злам, виконання шкідливого коду чи відмову сервера.
Великий потік запитів може створювати навантаження, але для оцінки наслідків потрібні ширший журнал, частота запитів, час обробки та метрики ресурсів. З наведених 45 рядків не можна зробити висновок, що база даних або вебсервер припинили роботу.
Практичний висновок для адміністратора
Перевірте, які адміністративні й інсталяційні інтерфейси справді доступні з мережі та кому вони потрібні. Перегляньте суміжні записи, налаштування доступу й актуальність установлених компонентів. Історична IP-адреса не є підставою для висновків про її поточного користувача.
Команда phpMyAdmin радить стежити за оновленнями безпеки, використовувати HTTPS і обмежувати доступ до службових ресурсів. Реальний захист визначають налаштування сервера та застосунку; robots.txt не є механізмом авторизації.