Brakemanを使用した各サービスの定時セキュリティチェック

みなさんこんにちは、虎の穴ラボです。

今回は、Ruby on Railsのソース上のセキュリティチェックを行うBrakemanの導入と定時セキュリティチェックを行います。

導入の経緯

弊社のサービスは、KEEPERなどの様々なサービスがあります。
ただ、各サービスのセキュリティチェックを手動で行うには、管理コストがかかります。
そこで、セキュリティの向上と管理コストの軽減を削減したいと思い、Brakemanの導入を決定しました。

Gitからソースを取得する

Gitからソースを取得するときに、認証方法はいろいろありますが、
コミット権限のないDeploy鍵を使用してプログラムソースを取得していきます。

 
ただ、Deploy鍵は鍵1つに対してリポジトリ1つが必要となり、複数のセキュリティチェックを行いたい場合は、
以下のように、リポジトリの数だけの鍵生成と、鍵とリポジトリを関連付けを行います。

鍵作成

リポジトリごとに鍵を生成していきます。

ssh-keygen -f ~/.ssh/keeper
・・・・

 

鍵とリポジトリの関連付け

生成した鍵と、リポジトリの関連付けを行っていきます。

vi ~/.ssh/config

 

Host github-keeper
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/keeper
  TCPKeepAlive yes
  IdentitiesOnly yes

・・・・・


作成した鍵をgithubのリポジトリのDelpoy Keyに登録します。
f:id:toranoana-lab:20180831114839p:plain
これで、鍵認証でgit cloneが利用可能になるので、ソースを落とします。

mkdir ~/project
cd ~/project
git clone git@github-keeper:toratora/keeper.git
・・・

brakemanの導入

以下のコマンドでbrakemanをインストール

gem install brakeman


↓のコマンドを実行すると、セキュリティチェックができます。

brakeman -A ~/project/keeper/

 

チェックの自動化

毎回チェックコマンドを打つ手間なので、cronで日次でチェックするようにしました。
また、brakemanはhtml出力ができるので、ブラウザ上から結果を確認できるようにします。


gitで最新のソースを取得しつつ、チェック処理をシェルに書います。

vi ~/brakeman.sh

 

#!/bin/bash
cd /root/project/keeper/ && git checkout .  && git pull
・・・・・・

/root/.rbenv/shims/brakeman -a /root/project/keeper -o /var/www/brakeman/html/keeper.html
・・・・・・

cronに登録します。

crontab -e
0 0 * * * /bin/bash /root/brakeman.sh >>/root/log/brakeman.log 2>>/root/log/brakeman-err.log

 

実行結果をブラウザ上で確認するため、nginxの設定をします。

vi /etc/nginx/conf.d/default.conf
server {
    listen 80;
    server_name 127.0.0.1;

    location /brakeman/ {
       alias /var/www/brakeman/html/;
   ・・・・・
    }
}
・・・・・

nginxの設定反映

nginx -s reload

IPアドレス/brakeman/keeper.html
で、ブラウザから結果を見てみると

f:id:toranoana-lab:20180831121753p:plain

 
これで、ブラウザ上から、日次のセキュティチェックの結果が確認できます。
Security Warningsがあるので、・・・・修正しないといけませんね・・・・

これで、SQLインジェクションや、XSSなどのセキュリティ脆弱性の対策を
5分程度のWebページの閲覧だけでチェックできるようになり、
管理コストの低減とセキュリティの向上の両立ができました。


最後に、虎の穴ではRubyエンジニアをはじめとして一緒に働く仲間を絶賛募集中です。
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
www.toranoana.jp