こんにちは、サーバー担当の山内一祥です。
GithubのFiloSottile/Heartbleed上に公開されているHeartbleed検証ツールを
EC2(Amazon Linux)にインストールして、脆弱性のチェックをしたときのメモです。
1. Go言語の実行環境を整える
yumでgolangをインストールした後、適当にディレクトリを作りパスを通します。
# yum install golang # mkdir /home/ec2-user/gocode # export GOPATH=/home/ec2-user/gocode/bin # export PATH=$PATH:$GOPATH
2. 検証ツールのインストール
# go get github.com/FiloSottile/Heartbleed # go install github.com/FiloSottile/Heartbleed
3. 脆弱性を調べる
ホストheartbre.akの脆弱性を調べる場合は、次のようにして実行します。
# Heartbleed heartbre.ak
脆弱性がある場合、次のような結果が返ります。
YELLOW SUBMARINEの文字が入っていることが確認できます。
2014/04/10 02:30:03 ([]uint8) { 00000000 02 00 79 68 65 61 72 74 62 6c 65 65 64 2e 66 69 |..yheartbleed.fi| 00000010 6c 69 70 70 6f 2e 69 6f 59 45 4c 4c 4f 57 20 53 |lippo.ioYELLOW S| 00000020 55 42 4d 41 52 49 4e 45 54 2a 89 d1 01 51 55 94 |UBMARINET*...QU.| 00000030 8c 8a 5a 4a 23 ab 88 27 08 24 0d 31 40 ba 9f c3 |..ZJ#..'.$.1@...| 00000040 ea a3 b5 8f 23 e4 91 da e9 1e a5 ff 63 90 81 d5 |....#.......c...| 00000050 ce 93 8e fb 72 74 91 21 f3 ba b8 28 88 fa 2d f2 |....rt.!...(..-.| 00000060 21 84 fc a7 82 d7 a0 11 a9 4e a8 9a e2 fd 51 d8 |!........N....Q.| 00000070 e2 cd 14 a0 79 78 c3 bb 4c 14 e6 9d 7e df 76 db |....yx..L...~.v.| 00000080 f1 68 67 74 9a 51 f7 46 70 a1 bd 8b |.hgt.Q.Fp...| } 2014/04/10 02:30:03 heartbre.ak - VULNERABLE
脆弱性がない場合、SAFEが返ります。
2014/04/10 02:38:38 heartbre.ak - SAFE
4. 複数のサーバーをまとめて検証する
BASHスクリプトを組み合わせて、複数のサーバーの脆弱性をまとめて検証してみます。
まず、/home/ec2-user/gocode/binにあるHeartbleedバイナリをコピーします。
# cd /home/ec2-user # mkdir heartbleed # cp /home/ec2-user/gocode/bin/Heartbleed /home/ec2-user/heartbleed/.
次に、脆弱性の有無を調査したいホストを記載したテキストファイルを用意します。
ホストは2014年4月13日現在で架空のものを例としていますが、
そのままコピーして実行しないように注意してください。
# vim hosts.txt heartbre.ak dogbleed.com warmheart.ed
次に、hosts.txtに書かれたホストを1行ずつ読み込んで,
Heartbleedバイナリを実行していくBASHスクリプトを用意します。
# vim heartbreak.sh
#!/bin/bash
clear
dir=/home/ec2-user/heartbleed
today=date +%F
path=$dir/logs
if [ ! -d $path ]; then
mkdir $path
fi
touch $path/$today
num=1
while read line
do
echo $num: $dir/Heartbleed $line
$dir/Heartbleed $line 2>&1 | tee -a $path/$today
num=$((++num))
done < $1
heartbreak.shにhosts.txtを渡して実行します。
# bash heartbreak.sh hosts.txt
次のような結果が返ります。
1: /home/ec2-user/heartbleed/Heartbleed heartbre.ak 2014/04/13 14:49:30 heartbre.ak - SAFE 2: /home/ec2-user/heartbleed/Heartbleed dogbleed.com 2014/04/13 14:49:33 dogbleed.com - SAFE 3: /home/ec2-user/heartbleed/Heartbleed warmheart.ed 2014/04/13 14:49:36 warmheart.ed - SAFE
今回は、検証ツールとBASHスクリプトを使ってHeartbleedバグの脆弱性のチェックをしました。