gem BrakemanでRails製アプリケーションの脆弱性を検知する

この記事は GMOアドマーケティング Advent Calendar 2021 6日目の記事です。

はじめに

こんにちは。
GMOアドマーケティングの石丸(@thomi40)です。
これまで弊社のテックブログではOWASP ZAPやBurp Suiteを用いた脆弱性診断に関する記事を紹介してきました。  

この記事は GMOアドマーケティング Advent Calendar 2020 14日目の記事です。はじめにこんにちは、GMOアドマーケティングのR.Yです。今回はタイトルの通り、Railsで作った脆弱性をOWASP ZAPで診断してみたいと思います。自分は主にRailsを使ったWebアプリの開発やWebアプリの脆弱性診断を行うことが多いので、この記事を書くことによってRailsのセキュリティ周りや脆弱性診断を行うツールについての理解をより深められたら良いなと思います。1.用意するものRuby On Rails 5.2.3OWASP ZAP 2.9.02.調べる脆弱性SQLインジェクション2-1.SQ...
 
こんにちは、GMOアドマーケティングのR.Yです。今回はBurp Suiteによる脆弱性診断をしていきます。前回OWASP ZAPを使って自動でテスト用のサイトを診断し、複数の脆弱性を確認することができました。そして、今回はそこで検出された「SQLインジェクション」の脆弱性についてBurp Suiteを使って詳しく確認していきます。このブログは前回投稿したこちら↓の続きになります。ご覧になっていない方はこちらを見てから読むことをお勧めします!1. Burp SuiteとはBurp SuiteはローカルプロキシツールでWebサーバとブラウザ間の通信内容を確認...

今回はOWASP ZAPやBurp Suiteとは違ったアプローチの脆弱性診断として、Ruby on Railsアプリ用の静的解析脆弱性診断ツール「Brakeman」について紹介します。

検証用アプリの環境構築

今回はDocker環境で、Ruby: 2.4.4, Rails: 6.1.4.1, Brakeman: 5.1.2 のバージョンを指定しました。
まずは検証用に scaffold で雛形を作成します。
Brakemanの導入方法はいくつかありますが、今回は以下のようにGemfileに追加しました。
環境に合わせて bundle install を実行すれば導入完了です。

Brakemanの使い方

Brakemanの導入方法によって変わりますが、使い方は非常にシンプルで、実行したいRailsアプリケーションのディレクトリ上で brakeman コマンドの実行を行うだけで診断結果が表示されます。
今回はdocker環境でRailsアプリケーションを構築したため、以下のコマンドを実行してみます。
scaffoldで雛形を作ったアプリケーションに対して実行を行うと、以下のように脆弱性が検知されなかったことが確認できます。
脆弱性を検知した際の出力を確認したいため、試しにSQLインジェクションが発生する可能性がある以下のコードをControllerに挿入してみます。
brakeman コマンドを実行すると、期待通りSQLインジェクションが検知されたことが確認できます。

Brakemanのオプション

Brakemanには以下のように様々なオプションが用意されています。
brakeman/OPTIONS.md at main · presidentbeef/brakeman (参照: 2021年11月24日)

今回は2つのオプションについて紹介します。

1. brakeman -A: すべてのチェック項目を実施

Brakemanはデフォルトでは検証しない項目があるため、すべての項目に対してチェックを行いたい場合は -A オプションを指定します。
scaffoldで雛形を作ったアプリケーションに対して実行すると、新たに2件のWarningが検知されました。
HTTPSプロトコルに関する設定 config.force_ssl が有効化されていないことと、スコープされてないfind(利用者が任意のデータにアクセスできてしまう可能性)に関する出力が確認できました。

2. brakeman -o: 実行結果をファイルに出力する

実行結果をjsonやhtml, csvなどの様々な形式でファイル出力することが可能です。
docker-compose run --rm web brakeman -o output.html を実行すると、以下のようなhtmlファイルが出力されます。

まとめ

今回はRuby on Railsの脆弱性検知gem「Brakeman」について紹介しました。

Brakemanはアプリを動かさずに診断できることから、セキュリティ対策の第一歩としてもおすすめです。

静的解析としてソースコードから診断を行うBrakeman、動的解析として実際に動作しているアプリケーションに対してリクエストを行うことで脆弱性を検知するOWASP ZAPの両方を組み合わせることで、よりセキュリティを担保することが期待できます。

Brakemanの解析対象やオプションの詳細、Railsのセキュリティについては以下の参考リンクからご確認ください。

参考リンク

告知

明日はR.Aさんによる「UiPathでスプレッドシートの更新・書き込みを行う。」です。
引き続き、GMOアドマーケティング Advent Calendar 2021 をお楽しみください!

■エンジニア採用ページ ~福利厚生や各種制度のご案内はこちら~
https://note.gmo-ap.jp/n/n02cbeb6edb0d

■noteページ ~ブログや採用、イベント情報を公開中!~
https://note.gmo-ap.jp/