説明
PoW Shield は、バックエンドサービスとエンドユーザー間でプルーフ・オブ・ワークを利用するプロキシとして動作することで、OSI アプリケーション層における DDoS 防御を提供します。このプロジェクトは、Google の ReCaptcha のように常に面倒な一般的なアンチ DDoS 手法に代わるものを提供することを目的としています。PoW Shield で保護されたウェブサービスへのアクセスはこれまでになく簡単で、URL にアクセスするだけで、ブラウザが残りの検証を自動的に行います。
PoW Shield は、以下のサービスを単一のウェブアプリ / Docker イメージにバンドルして提供します。
- プルーフ・オブ・ワーク認証
- レート制限と IP ブラックリスト
- Web アプリケーションファイアウォール
(新着) LinkedIn の記事
Pentester Academy TV で紹介
Medium の記事
特徴
- Web サービス構造
- プロキシ機能
- PoW 実装
- Docker 化
- IP ブラックリスト
- レート制限
- 単体テスト
- WAF 実装
- マルチインスタンス同期 (Redis)
- SSL サポート
以下は PoW Phalanx コントローラで対応:
- マルチインスタンス管理
- ホワイトリストトークン
- IP ブラックリスト同期
- 動的難易度制御
- ダッシュボード
Go による代替実装 PoW-Shield-Go(作業中)。ストレステストと将来の最適化されたプロダクション版のため。
しくみ
基本的に PoW Shield は実際の Web アプリ/サービスの前段でプロキシとして動作します。プルーフ・オブ・ワークによる検証を行い、認証されたトラフィックだけを実際のサーバに転送します。プロキシは簡単にインストール可能で、WAF によってセキュリティの低いアプリケーションも保護できます。
ユーザーが PoW Shield で保護された Web サービスを閲覧するときの内部処理は次のとおりです。
- サーバはランダムな 16 進エンコードされた "prefix" を生成し、PoW Shield ページとともにクライアントに送信します。
- クライアント側のブラウザ JavaScript は、prefix に付加することで SHA256 ハッシュの先頭にサーバ指定の "difficulty" D よりも多くのゼロビットが生じるような "nonce" を総当たりで探索します。すなわち
SHA256(prefix + nonce) = 0...0xxxx(2 進数で D より多くの先頭ゼロを持つ)。
- クライアント側 JavaScript は計算した nonce をサーバに送信し検証を受けます。検証に成功すると、サーバはクライアントに認証用の Cookie を発行します。
- サーバは認証済みクライアントのトラフィックを WAF フィルタリングを有効にしてサーバに転送し始めます。
設定
PoW Shield は以下の方法で設定できます。
- nodejs: .env(例: .env.example)
- docker-compose: docker-compose.yaml(例: docker-compose.example.yaml)
- docker run: -e パラメータ
環境変数