みなさんこんにちは、虎の穴ラボです。
今回は、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に登録します。
これで、鍵認証で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
で、ブラウザから結果を見てみると
これで、ブラウザ上から、日次のセキュティチェックの結果が確認できます。
Security Warningsがあるので、・・・・修正しないといけませんね・・・・
これで、SQLインジェクションや、XSSなどのセキュリティ脆弱性の対策を
5分程度のWebページの閲覧だけでチェックできるようになり、
管理コストの低減とセキュリティの向上の両立ができました。
最後に、虎の穴ではRubyエンジニアをはじめとして一緒に働く仲間を絶賛募集中です。
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
www.toranoana.jp