【悪用禁止】DHCPサーバを利用してshellshockの脆弱性を攻撃してみる

ShellShock

bash の脆弱性に関して、DHCPサーバを利用して脆弱性のある端末を操作する手段に関して実験してみたのでレポートします。

2014/9/30 21~22時頃一部追記/修正

はじめに

ここ数日、bash の脆弱性に関して問題ないか、環境の確認等を行っています。

弊社Webサーバに関しては、パッチの適用はもちろん、WAF を利用した不正アクセスの検知/ブロック 等も設定して、ある程度の対策は行ったところですが、この脆弱性が関わってくる問題の一つとして DHCP の問題があげられています。

実際にどのような形で DHCP が問題になるのか、検証を行ってみた結果に関して以下書いてみます。

環境

検証環境は以下になります。

DHCPサーバTftpd64 ( Windows8.1 )
DHCPクライアントCentOS6 ( 仮想マシン ( Virtual Box ))

DHCPサーバはWindowsで実行上できるDHCPサーバを利用(環境構築の手間を少なくするため)
クライアントは脆弱性のあるbashがインストールされているVirtual Boxの仮想マシンを利用しました。

shellshock dhcp検証環境

検証環境構築手順

検証環境構築手順を以下に示します。

DHCPサーバ

  1. Tftpd64 を取得
    TFTP server のダウンロードページ から tftpdをダウンロードします。
    私は ”tftpd64 standard edition (installer)” ( Tftpd64-4.50-setup.exe ) をダウンロードしました。
  2. 取得したインストーラーを実行してインストールします。

DHCPクライアント

脆弱性のあるbash を利用しているLinuxサーバあたりを用意すればよいでしょう。当然ですが、IPアドレスはstatic ではなく dhcpから取得するように設定して下さい。

その他

既に上記 サーバ/クライアントが接続されているネットワーク上にDHCPサーバが存在する場合、検証中はこれらDHCPサーバは一時停止する等してください。

検証手順

DHCPサーバの起動

  1. インストールした tftpd を起動します。
    ※管理者権限で起動してください。
  2. Tftpd が起動するので、以下設定を行います。
    Tftpd
  3. [ Settings ] ボタンをクリックし、[ GLOBAL ] タブを選択します。
    実行するサービスを選択する画面になるので、 "DHCP Server" をチェックし、他はチェックを外してください。
    Tftpd-GLOBAL Settings
  4. Settings の [DHCP] タブをクリックし、以下値を設定します。
    IP pool start addressDHCPの開始アドレス
    Size of poolDHCPアドレスの割り当て個数
    Def. router(Opt 3)ゲートウェイのアドレス
    Mask(Opt 1)サブネットマスク
    DNS Servers (Opt 6)DNS サーバ
    Additional Option113() { :;}; echo "vulnerable" > /tmp/shellshock.txt
    Tftpd-DHCP Settings

    キモになるのは "Additional Option" です。
    ここでは DHCPオプションの値を設定しています。 113 は DHCPオプションにおける "Netinfo Tag" になります。
    この値に、例の値を設定しています。

    今回の値については curl 等でHTTPリクエストを行う場合のように、出力結果を直接確認する事ができないため、実行結果を /tmp/shellshock.txt に出力するように設定しています。

    ※参考 : ISC DHCPv4 Options

    ※113, 114 あたりで今回の問題が発生。全てのオプションで発生するわけではない。( 全部は調べてない )

設定途中で、再起動を求められるかと思いますが、その際は再起動し、上記設定した値が反映されているかどうか確認しましょう。
( 反映されていない場合、管理者権限で起動していないと思われます )。

DHCPクライアントの起動

DHCPサーバの設定が完了したら、DHCPクライアントを起動します。
他にDHCPサーバがある場合は、これらを一時停止する等してから、クライアントを起動します。

確認

以下 DHCPクライアントに CentOS6 を利用している場合の手順になります。

  1. 先ず、DHCPクライアントが問題なく起動した事を確認し、
  2. DHCPクライアントのIPアドレスを確認します。
    ※ネットワークインターフェースが eth0 以外の場合適宜変更して下さい。
    $ ifconfig eth0
    eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
              inet addr:192.168.1.29  Bcast:192.168.1.255  Mask:255.255.255.0
              inet6 addr: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 Scope:Global
              inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:4330 errors:0 dropped:0 overruns:0 frame:0
              TX packets:339 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:540754 (528.0 KiB)  TX bytes:46705 (45.6 KiB)
    

    IPアドレスの値を覚えておきましょう。

  3. Tftpd で上記アドレスが払い出されているかを確認します。
    [ DHCP server ] タブにて、払い出されているアドレス一覧が表示されるので、先に控えたアドレスが払い出されていれば、( 恐らくは ) OKです。
    tftpd allocated ip

    ※Tftpd 上にDHCPクライアントのアドレスが表示されていない場合、DHCPサーバからのアドレス取得が正しく行われていない状態です。設定を見直す等して下さい。

  4. DHCP オプションで設定した値が実行されているかどうか確認します。
    $ cd /tmp
    $ ls -la
    ( 中略 )
    -rw-r--r--   1 root    root         13  9月 30 17:00 2014 shellshock.txt
    ( 中略 )
    

    /tmp/shellshock.txt が作成されている事が確認できました。

  5. ファイルの中身を確認してみます。
    $ cat shellshock.txt
    "vulnerable"
    

    検証OK! ... orz

動作を再検証したい場合、network を再起動する事で確認できます。
( DHCPサーバ側の設定を変更する場合、クライアント再起動前に行えばよいでしょう )
DHCPクライアント (CentOS) にて

$ sudo /etc/rc.d/init.d/network restart

その他

上記ではファイルの作成に関して確認できましたが、ファイル削除 ( 上記 shellshock.txt を削除してみた ) 等も行う事ができました。

まとめ

今回の bash の脆弱性に関して、サーバサイドの対応はある程度進んでいくと思いますが、上記のようにDHCPサーバが汚染されたり、あるいは悪意のあるDHCPサーバが建てられたりした場合、脆弱性のある bash が含まれている クライアントに影響が及ぶため、被害はより広範囲になるのではないかと懸念されます。

サーバじゃないから大丈夫と安心せずに、問題がある ( と思われる ) クライアント、機器に関しては何らかの対策を行ったほうがよいと思います。

P.S. 組込み機器等でも早めのパッチ提供をお願いしたいものです。