読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

OpenSSLの「Heartbleed」脆弱性の検証

AWS セキュリティ

こんにちは、サーバー担当の山内一祥です。

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バグの脆弱性のチェックをしました。