2014年10月17日金曜日

FedoraCore6のbashをShellshockに対応させる

Shellshockと呼ばれるbashの脆弱性が発表された。今年は、HeartbleedとPoodleのOpenSSLの脆弱性などたて続けにサーバー関連の脆弱性が世界中を駆け巡った。

その他、NASやネット接続電力計、ネット家電などコンピュータ以外の脆弱性もたくさん発表された。2014年は、ネット接続機器の脆弱性元年と言われるに違いない。

さて、bashのShellshockであるが、新しいOS、たとえばCentOS6などは、yum update bashで一発で完了するので、管理者の手間はほとんどかからない。

ところが、FedoraCore6になると、yumでアップデートできるパッチが用意されていない。バージョンアップアップをあきらめている管理者も多いと思う。


そのFedoraCore6のbash3.1をbash3.1.23にアップデートできる方法があるので紹介します。

1.影響を受けるバージョン(3.1はパッチの18までとしているページもある)
  Redhatは、日本のJPCERTと対策済みのバージョンが違う 3.1はここには出ていないけど。

2.bash3.1のパッチの場所。最新パッチをここで確認(2014/10/17現在23が最新)

3.基本的に下記の方法で3.1にパッチをあてて、bash3.1.23にバージョンアップする
(できれば、まずはテストサーバー機で実施してから本番サーバーで行ってください。自己責任)

(1)bash-3.1.tar.gzとパッチファイルをダウンロードする
wget http://ftp.gnu.org/gnu/bash/bash-3.1.tar.gz
wget http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-00{1..9} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{10..19} http://ftp.gnu.org/gnu/bash/bash-3.1-patches/bash31-0{20..23} (一行で続いています)

(2)解凍しパッチを適用する
tar -xvf bash-3.1.tar.gz
cd bash-3.1
find ../bash31-??? -exec /bin/sh -c 'patch -p0 <{}' \;

(3)Configし、 Make、Make Install
./configure --prefix /tmp/bash23 && make && make install

(4)インストールしたbashを起動してみる
/tmp/bash23/bin/bash と、コマンドラインから直接起動する
echo $SHELL を実行すると
/tmp/bash23/bin/bash と表示されるはず(以後、しばらくこのbashが使われる)

(5)bashのバージョンを確認する
echo $BASH $BASH_VERSION
このように表示される: /tmp/bash23/bin/bash 3.1.23(1)-release

(6)Shellshockのテストをしてみる
env X="() { :;} ; echo vulnerable" /bin/bash -c "echo this is a test"
たぶん下のように表示される(/bin/bashと古いままのbashなので)
vulnerable
this is a test

(7)bashを入れ替える
・ tcsh  #念のため、使うシェルを変えておく
・ cd /bin/
・ cp bash bash.old  #念のためバックアップしておく
・ cp /tmp/bash23/bin/bash ./bash
・ exit #これで、/tmp/bash23/bin/bashへ戻る
・ bash #これで、/bin/bashへ切り替わる (/bin/bashとすることになるかも)

覚:shellの切り替え方法
1.コマンドラインで、chsh -s /bin/tcsh等とすると、/etc/passwdの中身が書き換わる。
  書き換わるが、再ログインしないとshellは切り替わらない。
2.コマンドラインで、tcsh等とすると、その時点で使うshellが切り替わる。
  exitで元に戻る。
echo $SHELLを実行してみると、使っているshellがわかる。

注:下記の処理をすることもあるかも
/etc/shellsファイルに/tmp/bash_patched/bin/bashを追加する
echo $PATH パスを通す
PATH=$PATH:/tmp/bash23/bin
export PATH

(8)bashのバージョンを再度確認する
echo $BASH $BASH_VERSION
このように表示される: /bin/bash 3.1.23(1)-release

(9)再度Shellshockのテストをしてみる
env X="() { :;} ; echo vulnerable" /bin/bash -c "echo this is a test"
下のように表示されればOK
bash: warning: x: ignoring function definition attempt (この行はでない時も)
bash: error importing function definition for `x' (この行はでない時も)
this is a test


CentOS6にて、yumでPHPをupdateバージョンアップする方法

CentOS6にデフォルトで付属しているPHPはバージョンが古いのでバージョンアップしたい。が、しかし、yumでPHPをupdateしようとしてもうまくいかない時がある。その対処方法を記しておきます。

基本的には、remiレポジトリepelレポジトリを追加(場合によっては、rpmforgeレポジトリも追加。PHP5.5にはremi-php55レポジトリがあるようです。)して、yum --enablerepo=epel,remi update phpでバージョンアップできる。
しかし、MySQL関連のファイルなどとのバージョンの整合性で、バージョンアップできないとはねられる場合がある。

そのような時は、/etc/yum.repos.d/CentOS-Base.repoのpriority=1が原因の場合がよくある。各申す私もしばらく気づかず悩んだ。CentOS-Base.repoの中の[base][updates][extras]の3つに、priority=1が書かれていたものを、#priority=1とコメントアウトして、yum --enablerepo=epel,remi update phpを実行すると、魔法のごとくPHPがアップデートされた。


2014年10月16日木曜日

HDD完全消去のcipher.exeはWindows7でも使える

cipher.exeは、HDDの空き領域のデータを、復元ソフトで読めないように、完全消去してくれる。Windows2000の時は使っていたが、Windows7でも使えることを知った。しめしめ。
ファイルフォーマットはNTFSのみ。USBでもNTFSでフォーマットできれば、完全削除可能だと思う。

コマンドプロンプト上で、cipher /w:[drive]:\[folder]と打ち込んで行う。個人的には今まで、フォルダーを指定したことはない。(WでもwでもEでもeでもよい)
例としては、cipher /W:E:改行、のように使う。実行すると、下記のように進行していく。
(スタート ⇒ プログラムとファイルの検索、に記述しても実行できる場合あり)

C:\>cipher /W:E:
できるだけ多くのデータを削除するために、CIPHER /W の実行中
はほかのアプリケーションをすべて終了してください。
0x00 に書き込み中
...................... (中略) .............
0xFF に書き込み中
...................... (中略) .............
乱数 に書き込み中
...................... (中略) .............
C:\>

マクロの世界での磁気データパターンの完全消去のためには、このように異なったデータで3回は書き込む必要があるそうで、米国防総省(DOD)などで決められた消去手順になっている。

■完全消去のポイント:cipherは空領域に書き込むので、cipherの実行前に、HDDをNTFSでフォーマットして、HDD全体を空領域にしておく。それによってHDD全体を確実に消去できる。(これを行うには、完全消去したいHDDを外付けか何かにしておく必要がある。OSの入ったCドライブ全体を完全削除はできないから)


2014年10月15日水曜日

パソコン画面の動画キャプチャーソフト

パソコンの画面をいろいろ操作している状況を音声付の動画にしたくて、無料ソフトウェアを使った。いわゆる動画キャプチャーソフト。簡単に利用できるかと思いきや、以外に時間がかかった。

うまくいかなかったのは、説明音声の録音機能。特別難しい設定はなく、ごく常識的な設定で使った。

Bandicamはまったく録音されない。

AG-デスクトップレコーダーもまったく録音されない。

CamStudioは極短いものは録音されたが、役立つ長さの録画になると、最後に保存するときにエンコードができないようなメッセージを出してエラー終了する。

アマレココは、有料のシェアウェアを一緒に入れないと使えないように書いてあるので使わなかった。

4つ目に、BB FlashBack Expressを使った。やっと録音もできた。録画動画は普通に見られる品質だ。やれやれ、Blueberry Software Ltd.さん、タンダコンピュータさんありがとう。

BB FlashBack ExpressのVectorでのDownloadページ



2014年10月2日木曜日

PHPのmb_send_mailが使えなくなったが、QDmailのおかげで助かった

PHPで作った、結果をメール送信するようにしていたシステムで、社内の都合でmb_send_mail()が使えなくなった。困ってネットで探したらQDmailなる、すばらしいモジュールが作られていることがわかった。それを実際にPHPに書いて使ったので、見本として掲載しておきます。

$message =<<<EOM
管理者 または お客 様

問い合わせがありました。または
ありがとうございます。
EOM;


// QDmail使用 今年からメールサーバーがmb_send_mail()でアクセスできなくなったため
require_once('qdmail.php');
require_once('qdsmtp.php'); //こちらは必ずしもrequire_onceしなくてもよいが、この方が何も考え無くてもいいので、とりあえず両方ともrequire_onceしておいた。

$mail = & new Qdmail( 'UTF-8' , 'base64' );
$mail -> smtp(true);

$param = array(
    'host'=>'mail.xxxxx.gr.jp',
    'port'=>25,
    'from'=>'anata@xxxxx.gr.jp',
    'protocol'=>'SMTP',
    'user'=>'anatadesu',
    'pass' => 'pasuwaadodesu',
);

$mail -> smtpServer($param);

//$mail ->to($todata); // 顧客への場合
$mail ->to('kanrisya@xxxxx.gr.jp','赤谷 ゆい'); //管理者の場合
$mail ->subject('問い合わせがありました。');
$mail ->from('anata@xxxxx.gr.jp','株式会社です');
$mail ->text($message);
$return_flag = $mail ->send();


参考 http://qiita.com/tsunet111/items/0ba0e8fc61882c3905c0
他に、上記の各項目の正しい書式の解説ページもあるので探して読んでください。