--
    --.--

    スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加
    2014
    10.07

    Snow LeopardにBash 3.2(脆弱性対策版)を導入

    引き続きBash脆弱性ネタ(多分これが最終回)。

    前の記事ではShellshock脆弱性に対処するため、
    OS標準の/bin/bash (OS X 10.6では3.2.48、OS X 10.9では3.2.51)を
    Homebrewでインストールした/usr/local/bin/bash (4.3.29)に切り替え、
    これをログインシェルにする設定をしました。

    ただ、気になる点が2つ残っていました。
    /bin/bashだけでなく、/bin/shも対策版のbashに置き換えてる人が結構いる。
    ・Homebrewで入れたBashが新しすぎて互換性が心配


    そこで、この2点の疑問・不安を解消する方法をご紹介します。
    Xcodeが必要ですが、Homebrewは不要な方法になります。

    /bin/shにも対策が必要?

    OS X 10.6でshの情報を見てみたら…
    $ /bin/sh --version
    GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
    Copyright (C) 2007 Free Software Foundation, Inc.

    シェルスクリプト処理用のシンプルなshが使われていると思ったのに、
    実際の中身はbashなんですね^-^;

    Bashをshとして起動すると、shを模倣して処理するモードになります(=POSIXモード or shモード)。
    Macではこれを利用してBashをshに充てています。

    とはいえ、BashのPOSIXモードも万全ではないらしいので
    /bin/shとして使われているBashにも対策しといた方が良さそうですね。

    詳しい仕組みについては以下が参考になると思います。
    2014年9月26日号 14.10の開発・“shellshock”とその対応・UWN#384:Ubuntu Weekly Topics|gihyo.jp … 技術評論社

    Bash 3.2 → Bash 4.3に変わることへの不安

    Homebrewで入手できるBashはversion 4.3という最新版。
    一方、OS X 10.6で使用しているBashはversion 3.2。

    Bash 4.xに後方互換があるとはいえ、さすがに完全互換なのか不安
    できればシステムにはversion 3.2の対策版を入れておきたい

    2つの問題も脆弱性もこれで解決!


    そこで見つけたのが以下の方法!
    以下のリンクの内容の抜粋になります
    osx - How do I recompile Bash to avoid Shellshock (the remote exploit CVE-2014-6271 and CVE-2014-7169)? - Ask Different

    This procedure is an excerpt from "osx - How do I recompile Bash to avoid Shellshock (the remote exploit CVE-2014-6271 and CVE-2014-7169)? - Ask Different"

    ********* 抜粋ここから - from HERE *********

    方法:Xcodeが必要。OS X 10.9.5での報告です。
    (1) ターミナルを起動
    (2) pbpaste | cut -c 2- | shと入力(まだリターンキーは押さない
    (3) 以下のコードを(クリップボードに)コピー
    $ # If you want to disable auto-imported functions, uncomment the following
    $ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
    $ mkdir bash-fix
    $ cd bash-fix
    $ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
    $ cd bash-92/bash-3.2
    $ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0
    $ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
    $ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
    $ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
    $ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
    $ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
    $ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
    $ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
    $ cd ..
    $ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
    $ xcodebuild
    $ build/Release/bash --version # GNU bash, version 3.2.57-release
    $ build/Release/sh --version # GNU bash, version 3.2.57-release
    $ sudo cp /bin/bash /bin/bash.old
    $ sudo cp /bin/sh /bin/sh.old
    $ sudo cp build/Release/bash /bin
    $ sudo cp build/Release/sh /bin

    (4) ターミナルに戻ってリターンキーを押す(ペーストしない)

    インストールがうまくいけば、以下のような "** BUILD SUCCEEDED **"といった表示が出ます。
    たくさんテキストが出る(特にエラーは出ない)
    ** BUILD SUCCEEDED **

    GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin13)
    Copyright (C) 2007 Free Software Foundation, Inc.
    GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin13)
    Copyright (C) 2007 Free Software Foundation, Inc.
    Password:

    パスワードを入力すればインストール完了です。

    うまくいっていないと以下のような表示になります。
    たくさんテキストが出る(エラーがたくさん含まれる)
    The following build commands failed:

    CompileC build/bash.build/Release/sh.build/Objects-normal/x86_64/variables.o
    bash-3.2/variables.c normal x86_64 c com.apple.compilers.llvm.clang.1_0.compiler
    (1 failure)
    sh: line 18: build/Release/bash: No such file or directory
    sh: line 19: build/Release/sh: No such file or directory
    Password:

    この場合はcontrol + zを押して操作をキャンセルし、 ターミナルを終了、
    ~/bash-fixフォルダを捨てて再挑戦してみて下さい。


    (5) システム再起動。ターミナルでのチェックが済んだら、
    念のため、退避させた古いshやBashの実行権限をオフにしておきましょう。
    sudo chmod a-x /bin/bash.old /bin/sh.old

    ********* 抜粋ここまで - END *********

    なお、この方法を紹介しているご本人(Mr. Alex Blewitt) のブログ記事はこちら
    上記の方法の原形や、脆弱性検証用のコード等が掲載されています。

    (3)のスクリプトがやっていること

    Apple Open Sourceで公開されているBash-92 (=Bash 3.2, Patch 51)のソースを入手、
    一連の脆弱性対策パッチを順に当てた後、
    xcodebuildコマンドでBashをビルド(Bashとshという名前でそれぞれビルド)、
    使用中の/bin/bash/bin/bash.oldに、/bin/sh/bin/sh.oldにコピー、
    ビルドしたbashを/binにコピー、ビルドしたshを/binにコピー。

    OS X 10.6でも成功!

    全く同じ事をOS X 10.6.8 + Xcode 3.2.6でやってみました
    結果・・・ちゃんとインストールできました!!

    $ /bin/bash --version
    GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin13)
    Copyright (C) 2007 Free Software Foundation, Inc.
    $ /bin/sh --version
    GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin13)
    Copyright (C) 2007 Free Software Foundation, Inc.

    関連記事

    このエントリーをはてなブックマークに追加
    トラックバックURL
    http://w6o6n.blog.fc2.com/tb.php/135-60781c96
    トラックバック
    コメント
    管理者にだけ表示を許可する
     
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。