フレクトのクラウドblog re:newal

http://blog.flect.co.jp/cloud/からさらに引っ越しています

Heroku のアドオン「Sqreen」で簡単にWAF!

こんにちは。エンジニアのヤス・コバヤシです。

Heroku Advent Calendar 2019 5日目を担当させていただきます!

qiita.com

Webアプリケーションを開発するにあたって気をつけなければいけないのはセキュリティ対策ですよね。

OWASPトップ10とかブルートフォース攻撃(総当たり攻撃)とかアカウント乗っ取りとか、脆弱性を悪用した攻撃にどう対処していくかは悩みどころです。

いくらWEB APIREST APIの仕様に沿ってガチガチにガードしたと言っても、それはその攻撃自体をWebアプリケーションの中で受け止めてチェックすることになるので、フレームワークやライブラリに脆弱性があったらひとたまりもありません。

ですのでWebアプリケーションに届く前にガードする必要があるわけですね。

それが皆さんご存知のWAF(ウェブアプリケーションファイアウォール)になります。

ところでこのWAFですが、AWS には AWS WAF 、Azure には Azure Web アプリケーション ファイアウォールと言うものがありますが。。。

HerokuにはWAFがあるの?

あります!

それが「Sqreen」です。 elements.heroku.com

と言う事で今回は Heroku のAddOn「Sqreen」のご紹介をしたいと思います。

「Sqreen」ってどんな感じ?

構築する前に「これはどんなアドオンなの?どんな機能があるの?」と気になる事かと思います。

画面をお見せしながらご紹介しますね。

f:id:yasuyuki-kobayashi-flect:20191203165038p:plain
Monitoring画面

「Sqreen」はリアルタイムで攻撃をブロックし、セキュリティ状況を可視化してくれます。 これがメイン画面とも言えるMonitoring画面です。

f:id:yasuyuki-kobayashi-flect:20191203165325p:plain
Settings画面

設定画面では攻撃があった時にどんなHttp Statusで返すかと言う設定ができたり、IPアドレスによるガードや受け入れを設定できるブラックリストホワイトリストの設定もできたり、

f:id:yasuyuki-kobayashi-flect:20191203170055p:plain
Integrarion画面

攻撃があったりした時に通知する先も設定できて、先日Heroku NewRelic APMを始めよう!でお伝えしたNewRelicやSlackへの通知、WebhookでPOST先を指定する事もできます。

f:id:yasuyuki-kobayashi-flect:20191203170720p:plain
Alertモード画面

もちろんメールでの送信も可能。

また緊急度(高/中/低)によって通知も「直ちに」「1日のダイジェスト」「1週間のダイジェスト」と設定できます。

このように「Sqreen」はフレキシブルに設定できるので、アプリケーション運用時には頻繁にSqreenコンソールに確認に行かなくても良いし、大したことのないセキュリティアラートで深夜に起こされる、呼び出される事もないです(笑)。

f:id:yasuyuki-kobayashi-flect:20191203171739p:plain
WAFルール画面

そしてWAFですが、デフォルトで50ものルールがすでに設置されています。

「Sqreen」を構築しただけですぐにWAFが機能するのは嬉しいですね。

もちろん御自身のルールを追加する事も可能ですし、既存のルールをどのように扱うか(”何もしない”とかも)をコントロール可能です。

f:id:yasuyuki-kobayashi-flect:20191203171649p:plain
WAF画面

またいくつかのルールに引っかかるようなアクセスをしたIPは「15分間遮断する」と言った、攻撃者を諦めさせる嬉しい機能も!

その他の機能

「Sqreen」はWAFだけの機能じゃないです。

f:id:yasuyuki-kobayashi-flect:20191203173927p:plain
Protections

「クリックジャッキング」「クロスサイトスクリプティング」「MIME Sniffing」と言ったクライアント側のセキュリティ保護対策、そして自身のアプリケーションの脆弱性までチェックして教えてくれます。

Webアプリケーションの中も外もしっかり保護してくれる、もう至れり尽くせりですね。

そしてWebアプリケーションに「Sqreen」を搭載した成果が!

「で、このSqreenってやつは本当にガードしてくれるの?」と半信半疑な方もいらっしゃるのではないでしょうか。

我々が構築したWebアプリケーションに「Sqreen」を搭載したんですが、

f:id:yasuyuki-kobayashi-flect:20191204112759p:plain
インシデント画面
なんとウクライナ(またはウクライナ経由)の攻撃を見事にガードしてくれました!!

「Sqreen」は攻撃者の位置をIPアドレスから逆探知もしてくれるんですよ。

すごくないですか。

構築方法は?

皆さんいかがでしたか? 「Sqreen」なかなかの高機能でしょ。 プランは無料からもありますのでこれをアドオンしない理由はありませんよね。

さて最後に「Sqreen」の構築方法ですが、

f:id:yasuyuki-kobayashi-flect:20191204093758p:plain
AddOn
アドオンしただけではすぐには動きません。 Webアプリケーションを守るために「Sqreen」を関連づける(dynoの中で「Sqreen」監視プログラムを動かし「Sqreen」本体に認識させる)ことが必要です。

この設定方法に関しては皆さん様々な言語でWebアプリケーションを構築していると思いますので、私が説明するよりこちらをご覧ください。

devcenter.heroku.com

英語ですけどブラウザの翻訳機能(最近はかなりいい感じに翻訳してくれるようになりましたよね)を使えば簡単に読んで理解できますよ。

それではみなさん、「Sqreen」を搭載して"ハッピーHerokuライフ"をお過ごしください!