Из-за небезопасной обработки загруженных файлов злоумышленник смог запустить php-код на моем сервере (CentOS 5.4). Эта проблема была устранена, но пока он был подключен, он, похоже, изменил файл, принадлежащий пользователю root (файл perms 644 ), заменив его на принадлежащий пользователю apache. Существуют ли эксплойты apache или php, которые могли бы это сделать?
В ответ на первые комментарии, которые запрашивают дополнительную информацию, для злоумышленника было бы достаточно плохо иметь возможность загружать файлы на мой сервер и, возможно, отправлять пользователей на вредоносный контент в моем домене. Однако он / она также мог редактировать файлы. В результате мой веб-сайт был изменен таким образом, чтобы вся информация о регистрации новых пользователей отправлялась по электронной почте на адрес Gmail.
Я не уверен, с чего начать, и прошу помощи в этом. Помимо очевидных разрешений для каталогов (не разрешать загрузку файлов в каталоги, где может выполняться php-код; не выполнять php-код в пользовательских каталогах загрузки), я не знаю, что изменить, чтобы этого не произошло снова. Насколько я понимаю, если файл принадлежит пользователю root, другой пользователь не может его изменить. Очевидно, это было неправдой.
Если бы это был ваш сервер, где бы вы смотрели?
Насколько я понимаю, если файл принадлежит пользователю root, другой пользователь не может его изменить. Очевидно, это было неправдой.
Если права доступа к этому файлу доступны для записи «группе» или «другому», то любой в этой группе (например, если это был «apache») или любой пользователь (в случае «другой») может перезаписать его и / или изменить владение.
Еще я бы поискал, поскольку это инъекция файла, это файлы php, которых там не должно быть, или файлы, которые вы не создавали. Их можно было бы назвать как-нибудь относительно безобидным, например, index.php или help.php, но если вы посмотрите на код, вы увидите большие скопления данных в кодировке base64 (чтобы понять, что он на самом деле делает). Также ищите "wsh.php".
Иногда эти файлы представляют собой «веб-оболочки», написанные на php, которые предоставляют доступ к файловой системе, подобный оболочке, с использованием разрешений процесса php / apache. Они смогут редактировать / удалять / загружать / копировать / перемещать файлы, включая те, которые принадлежали пользователю root, но с плохими разрешениями (см. Первый абзац).
Эти файлы могут выглядеть так:
<?PHP
//Authentication
$login = ""; //Login
$pass = ""; //Pass
$md5_pass = ""; //If no pass then hash
eval(gzinflate(base64_decode('7b17f9vG0TD6d/v75TusEaYmE5KiZOcmWXJkSY59alt+JLlpXtmH
// etc etc
Может быть, ты сможешь сделать что-нибудь вроде:
find www_root -name '*.php' -exec grep -l 'eval' {} \;
И посмотрите на эти файлы и убедитесь, что они законны.
Просто общий совет, как этого избежать в будущем:
Патчите свой сервер. CentOS 5.4 уже довольно давно является EoL. Сейчас мы на CentOS 5.7!
Обратите внимание, что в CentOS 5.5.
Это обновление PHP содержало множество исправлений безопасности.
Для веб-сервера вы должны использовать (как минимум) трех пользователей и одну группу:
корень - Владелец основного процесса (не обязательно, если вы используете непривилегированный порт)
wwwrun - пользователь, от имени которого запускаются подпроцессы httpd, группа www
wwwadmin - пользователь, у которого есть доступ на запись к файлам веб-серверов (обычно htdocs или в вашем случае - php-base-dir), а также группа www.
В группа www должен иметь доступ для чтения, но не для записи в htdocs.
Выбирайте свои собственные имена пользователей / групп по желанию, это всего лишь пример.
Вы также можете усилить httpd, запретив TRACE, TRACK, PUT и DELETE (если ваше приложение это позволяет). Этого можно достичь с помощью mod_rewrite.