🐡

[Django] BREACH攻撃対策を導入する

2022/07/17に公開

概要

ウェブサービスにおいてはBREACH(Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext) 攻撃と呼ばれる攻撃が存在しています。

攻撃手法自体の解説につきましては、専門の記事にお任せいたします。

基本的には圧縮されたレスポンスの長さから秘密鍵などを推測する攻撃になります。

以上は攻撃の概要になります。これを読めば単にレスポンスの長さを可変にすれば解決が可能な攻撃であることを見て取れます。。

今回はDjangoでBREACH攻撃に対する対策を容易に実施可能なdjango-debreachの導入方法について解説します。

django-debreachの公式サイトには、Django Ratelimit等と併用し、機械的に探索されることを防止することにより、ほとんどのパターンのBREACH攻撃を防げることが記されています。

本ライブラリの導入と同時に、検討を進めるとより強固なセキュリティでサービスを守ることができます。

導入方法

インストール

pipでインストールできます。

pip install django-debreach

Djangoへの有効化

基本的にはsettings.pyを少しいじるだけで導入は完了します。

ミドルウェアに追加

基本的には全てのミドルウェアの先頭にdebreach.middleware.RandomCommentMiddlewareを追加します。
ただし、GzipMiddleware 等によって圧縮している場合、その後ろに追加してください。

MIDDLEWARE_CLASSES = (
+   'debreach.middleware.RandomCommentMiddleware',
    ...
)

基本的にはたったこれだけでBREACH攻撃対策が導入できます。

動作確認

導入後のDjangoにおいて、任意のウェブページを表示してみます。

その状態でHTMLのbodyの末尾を見てみると末尾に何やら怪しげな文字列が付与されているのを確認できます。

<!-- VnVoQcNblzi0E3uCnebtZS -->

また何度かリロードしてみるとこのランダムな文字列の長さが可変であることも確認できます。

まとめ

以上がdjango-debreachの導入と確認方法でした。
簡単に導入可能ですので良ければ導入してセキュリティ向上をはかってみてください。

GitHubで編集を提案

Discussion