coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

bashcheck シェルスクリプトの動作について

2014-10-15 23:56:45 | Bash
Shellshock 検証用に、bashcheck というシェルスクリプトが公開されています。

https://github.com/hannob/bashcheck/blob/master/bashcheck


使い方は、bashcheck ファイルを chmod で実行可能にして以下のように実行するだけです。

$ ./bashcheck [another_bash]

最初の引数で別の bash が指定できます。省略すると標準の bash で、こちらの環境では /usr/local/bin/bash です。

これを利用して、patch 25 から patch 30 までの bash 毎に実行してみました。

Bash version 4.3.0(1)-release

Variable function parser active, maybe vulnerable to unknown parser bugs
Vulnerable to CVE-2014-6271 (original shellshock)
Vulnerable to CVE-2014-7169 (taviso bug)
Vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Vulnerable to CVE-2014-6278 (lcamtuf bug #2)


Bash version 4.3.25(1)-release

Variable function parser active, maybe vulnerable to unknown parser bugs
Not vulnerable to CVE-2014-6271 (original shellshock)
Vulnerable to CVE-2014-7169 (taviso bug)
Vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Vulnerable to CVE-2014-6278 (lcamtuf bug #2)


Bash version 4.3.26(2)-release

Variable function parser active, maybe vulnerable to unknown parser bugs
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Vulnerable to CVE-2014-6278 (lcamtuf bug #2)


Bash version 4.3.27(3)-release

Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Found non-exploitable CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Found non-exploitable CVE-2014-6277 (lcamtuf bug #1)
Found non-exploitable CVE-2014-6278 (lcamtuf bug #2)


Bash version 4.3.28(2)-release

Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Found non-exploitable CVE-2014-6277 (lcamtuf bug #1)
Found non-exploitable CVE-2014-6278 (lcamtuf bug #2)


Bash version 4.3.29(3)-release

Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Not vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Found non-exploitable CVE-2014-6278 (lcamtuf bug #2)


Bash version 4.3.30(4)-release

Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Not vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Not vulnerable to CVE-2014-6278 (lcamtuf bug #2)


ちなみに、前回アップデートした pidora の /bin/bash はこのような結果です。


Bash version 4.2.48(1)-release

Variable function parser pre/suffixed [(), redhat], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Not vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Found non-exploitable CVE-2014-6278 (lcamtuf bug #2)


となって、4.3.29 とほぼ同じです。具体的には、以下のような別のテストでワーニングになっています。

(4.3.29)
# env BASH_FUNC_x%%='() { _;}>_[$($())] { echo x;}' /bad/bash43-29 -c :
x

(/bin/bash)
# env 'BASH_FUNC_x()'='() { _;}>_[$($())] { echo x;}' /bin/bash -c :
x

ちなみに、4.3.30 ではこのようになります。

# env BASH_FUNC_x%%='() { _;}>_[$($())] { echo x;}' bash -c :
bash: x: line 0: syntax error near unexpected token `{'
bash: x: line 0: `x () { _;}>_[$($())] { echo x;}'
bash: error importing function definition for `x'
#

# env 'BASH_FUNC_x()'='() { _;}>_[$($())] { echo x;}' bash -c :
#

shellshock を切っ掛けに bash の脆弱性のテストを Pidora で行ってきましたが、Raspberry Pi でも十分テストに利用できますね。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Bashの配列について

2009-09-12 09:45:44 | Bash
前回 bash 4.0をインストールしましたので、早速試してみます。

まずは、配列についてです。

もともと、シェルは変数の型を意識しなくて良かったので、変数の宣言は意識されていません。しかし、bash では、declare 組み込みコマンドが用意されていますので、積極的に使いたいと思います。以下で配列変数を Array とします。

◎配列の添え字 は、
    0から始まる整数 (zero-based indexing)

◎配列の宣言 は、
    declare -a Array

◎配列への値の代入 は、
    Array[2]='value'  (3番目の要素への代入)

    Array=(a b c d)   (一度に代入:複合代入)

    Array=([1]=a [0]=b [2]=c d) (複合代入は添え字もOK、
                 d は直前の添え字+1)

◎配列の参照 は、
    ${Array[2]}   (3番目の要素)

    ${Array}      (1番目(先頭${Array[0]})の要素)

◎配列の要素数 は、
    ${#Array[*]}  (${#Array}は先頭要素の文字数になります。)

bash は、配列のすべて要素を一度に参照することが可能です。

◎すべての要素を参照 するには、
    "${Array[*]}"  (各要素をIFS文字でつなげて、1つの文字列にして参照)

    "${Array[@]}"  (各要素を単語として参照)

この違いは、次のCプログラムを使うと明確になります。最初の引数だけを表示するプログラムです。
  #include <stdio.h>
  int main(int argc,char **argv) {
      if (argc > 1) {
         printf("%s\n",argv[1]);
      }
      return 0;
  }

コンパイルして a.out を作成し、次のシェルを実行します。
  $ cat test01.sh
  #!/usr/local/bin/bash
  declare -a Array
  Array=(a b c d)
  ./a.out "${Array[*]}"
  ./a.out "$[Array[@]}"

  $
  $ ./test01.sh
  a b c d
  a
  $

つまり、各要素を単語にという意味は、各要素をそれぞれ引数にしてコマンドに渡せるということですね。

ということで、複合代入と組み合わせると、

◎配列の全体をコピー 
    NewArray=("${Array[@]}")

ができます。更に、配列の追加や結合も1行でできますね。(Array1,Array2は配列)

◎要素の追加
    Array=("${Array[@]}" a b c d)             (複合代入で要素を追加)

◎2つの配列の結合
    NewArray=("${Array1[@]}" "${Array2[@]}")   (Array1とArray2を結合する)

応用で、2次元配列について考えてみます。

例えば、I行、J列の要素を Array(I,J)のように扱いたいわけです。これは、次のような関数を考えてみました。
    declare -i ld=4  (ld は列の数であらかじめ決めておきます。)
    readonly ld
    function idx2 () {
       echo $(( $1*ld+$2 ))
    }

これによって、

◎2次元配列  (もどき)
    Array[$(idx2 2 3)]='value'  (Array(2,3)への代入のつもり)

    ${Array[$(idx2 2 3)]}     (Array(2,3)の参照のつもり)


のようなことが一応できます。

さて、bash 4.0 の新機能として、連想配列(associative array)があります。

◎連想配列の宣言 は、
    declare -A  AArray

◎連想配列の代入 は、
    AArray[east]='one'

    AArray=([east]='one' [west]='two' [north]='three' [south]='four')
                           (複合代入は、この形式になると思われます。)

◎連想配列の参照 は、
    ${AArray[north]}

    ${AArray[$idx]}        (添え字が変数でも、もちろんOKです。)

最後の参照方法は、変換表を読み込んで、ある値から別の値に変換するときなどに使えそうですね。

ところで、配列の名前自身を変数にいれて展開して使うようなことはできないようです。つまり、配列を関数の引数にすることは難しいということです。

以上、bash の配列を見てきましたが、1次元配列という制限がありますが、bash でも配列は十分に活用できそうです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Bash 4.0 のインストール

2009-09-10 08:26:45 | Bash
今回から、Bashについて調べてみます。

たまにしかスクリプトを書かないので、Bashの仕様をよく忘れるのですが、Bashの man ページが少し長すぎて、なかなかほしい情報にたどりつけないことが良くありました。その辺を解消しよう(本人だけ)というのが目的です。

もともとの Fedora10 の bash のバージョンは、3.2.39 ですが、せっかくですから、最新版の bash 4.0 を使います。gnu のミラーサイトから取り寄せます。
$ wget "http://core.ring.gr.jp/pub/GNU/bash/bash-4.0.tar.gz"
$ wget "http://core.ring.gr.jp/pub/GNU/bash/bash-4.0.tar.gz.sig"
$ gpg --verify bash-4.0.tar.gz.sig
gpg: Signature made Fri Feb 20 07:23:17 2009 JST using DSA key ID 64EA74AB
gpg: Good signature from "Chet Ramey <chet@cwru.edu>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7C01 35FB 088A AF6C 66C6  50B9 BB58 69F0 64EA 74AB
$
$ tar xvzf bash-4.0.tar.gz
$ cd bash-4.0
$

早速コンパイルします。インストール先は、/usr/local/bin です。
$ ./configure
$ make
$
$ su 
# make install 2>&1 |tee Install.log
# exit
$
$ which bash
/usr/local/bin/bash
$ bash --version
GNU bash, version 4.0.0(1)-release (i686-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$

4.0はまだ一般的でないようなので、次回からは、4.0の新機能とかに関係なく、どこでも使えるものを中心に見ていきたいと思います。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする