
Krawl v2.3.0
Krawlは、カスタマイズ可能で軽量なクラウドネイティブのWebデセプションサーバー兼アンチクローラーです。現実的でランダムに生成されたデコイデータとAI生成のHTMLテンプレートを使用して、低難易度の脆弱性を持つ偽のWebアプリケーションを作成します。
Krawl
目次
- デモ
- Krawlとは?
- Krawlダッシュボード
- デプロイモード
- Krawlバンリスト
- クイックスタート
- 設定
- 悪意のあるIPをBANする
- IPレピュテーション
- リバースプロキシまたはCDNの背後での実行
- メトリクスとモニタリング
- 追加ドキュメント
- AIによる欺瞞
- コントリビューション
デモ
ヒント: さらなるお楽しみとして robots.txt のパスをクロールしてみてください
Krawl URL: http://demo.krawlme.com
ダッシュボードを見る http://demo.krawlme.com/das_dashboard
Krawlとは?
Krawl は、悪意のある攻撃者、Webクローラー、自動スキャナーを検知し、遅延させ、分析するために設計されたクラウドネイティブな欺瞞サーバーです。
管理パネル、設定ファイル、露出した偽の認証情報など、手に入れやすい餌を詰め込んだリアルな偽のWebアプリケーションを作成し、疑わしい活動を引き寄せて特定します。

攻撃者のリソースを浪費することで、Krawlは悪意のある行為と正当なクローラーを明確に区別するのに役立ちます。
主な機能:
- AI生成の欺瞞ページ: 攻撃者に偽の脆弱な攻撃対象領域を生成させる
- スパイダートラップページ: spidertrapプロジェクトをベースにした、クローラーのリソースを浪費する無限のランダムリンク
- 偽のログインページ: WordPress、phpMyAdmin、管理パネル
- ハニーポットパス: スキャナーを捕まえるためにrobots.txtで宣伝
- 偽の認証情報: 本物そっくりのユーザー名、パスワード、APIキー
- カナリートークン連携: 外部アラートのトリガー
- ランダムなサーバーヘッダー: サーバーヘッダーとバージョンに基づく攻撃を混乱させる
- リアルタイムダッシュボード: 疑わしい活動を監視
- カスタマイズ可能なワードリスト: 簡単なJSONベースの設定
- ランダムなエラー注入: 実際のサーバー動作を模倣
リバースプロキシを使用することで、Krawlを他のサービスと並べて簡単に公開し、Webクローラーや悪意のあるユーザーからそれらを保護できます。詳細はリバースプロキシのドキュメントを参照してください。

Krawlダッシュボード
Krawlは、起動時に生成されるランダムなシークレットパス、または KRAWL_DASHBOARD_SECRET_PATH で設定されたカスタムパスからアクセスできる包括的なダッシュボードを提供します。これにより、ハニーポットをスキャンする攻撃者からダッシュボードを隠すことができます。
ダッシュボードは6つのタブで構成されています:
- Overview: 攻撃活動のハイレベルなビュー: IP発信元のインタラクティブマップ、最近の疑わしいリクエスト、上位のIP、User-Agent、パス。

- Attacks: キャプチャされた認証情報、ハニーポットのトリガー、検出された攻撃タイプ(SQLi、XSS、パストラバーサルなど)の詳細な内訳をチャートと表で表示。

-
Threats: TLSHファジーハッシュによってキャンペーンごとにグループ化されたペイロード。これにより、ウェブシェルとその編集された亜種が無関係なヒットではなく1つのキャンペーンとして扱われ、キャプチャされたすべてのファイルのインデックスも表示されます。
-
IP Insight: 選択したIPの詳細なフォレンジックビュー: 地理位置情報、ISP/ASN情報、レピュテーションフラグ、行動タイムライン、攻撃タイプの分布、リファラ履歴、キャプチャされたファイルと認証情報、完全なアクセス履歴。

さらに、ダッシュボードのパスワードで認証すると、保護されたタブが利用可能になります:
- Tracked IPs: 経時的に監視したいIPアドレスのウォッチリストを維持します。
- IP Banlist: IPのBANを管理し、検出された攻撃者を表示し、バンリストをrawまたはIPTables形式でエクスポートします。
- Timed Out IPs: 現在ターピットに保持されているIPを確認し、保持すべきでないものを除外します。
- Deception: AI生成ページを管理し、エクスポートしたり新しいものをインポートしたりします。
- Webhooks: BANをCloudFlareやその他のファイアウォールに転送します。
ヘッダーアイコンからは、APIドキュメント、バンリストのエクスポート、実行中の設定を表示する設定パネル、およびスケジュールされたタスクをオンデマンドで実行するためのメンテナンスページを開くことができます。
詳細はダッシュボードのドキュメントを参照してください。
デプロイモード
Krawlは2つのデプロイモードをサポートしており、config.yaml の mode 設定または KRAWL_MODE 環境変数で制御します。
| スタンドアロン | スケーラブル | |
|---|---|---|
| データベース | SQLite (WALモード) | PostgreSQL |
| キャッシュ | インメモリPython dict | Redis (マルチティアTTL) |
| レプリカ | 1 (単一インスタンス) | 1以上 (水平スケーリング) |
| 外部依存 | なし | PostgreSQL + Redis |
| 最適な用途 | 開発、ホームラボ、50万リクエスト未満 | 本番、HA、50万リクエスト超 |
スタンドアロン: 開発環境やリクエスト数が少ないホームラボに最適です。追加設定は不要で、Krawlを実行するだけで動作します。
- 外部依存のない単一コンテナデプロイ
- より低いRAMとリソース使用量
スケーラブル: 本番環境や高トラフィックのハニーポット向けに設計されています。Helmチャートはデフォルトでこのモードになります。
- Redisのマルチティアキャッシュにより、より高速で応答性の高いダッシュボード
- RedisがPostgreSQLの前段のホットパスキャッシュとして機能することで、ディスクI/Oを削減
- 水平スケーリングにより、ロードバランサーの背後でKrawlレプリカの数を増やす
詳細な設定、Docker Composeの例、Kubernetes/Helmのセットアップ、ステップバイステップの移行手順については、デプロイモードのドキュメントを参照してください。
Krawlバンリスト
Krawlは、ハニーポットトラップをトリガーした攻撃者のIPアドレスの定期的に更新されるbanlist.txtを維持しています。バンリストは毎週公開され、ダウンロード可能で、Krawlを使用していなくてもコミュニティが既知の悪意のあるアクターを事前にブロックするのに役立ちます。
バンリストは以下から直接取得することもできます: https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw。
インスタンス間でのバンリストの共有
Krawlインスタンスはバンリストをフェデレートできます: 各インスタンスは自身のリストを 認証不要のパスで公開し、他のインスタンス(または任意のプレーンテキストIPリスト)から リストを取り込むことができます。取得されたIPはローカルのBAN判定にマージされ、 ダッシュボードに表示されます。```yaml banlist:
Public, unauthenticated download path for this instance's banlist.
Supports the same ?categories= and ?fwtype= parameters as the main API.
Empty = disabled.
export_path: "/public_banlist.txt"
Upstream banlists to fetch and merge. Plain ".txt" lists work too.
sources: - "https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw" - "https://krawl.example.com/public_banlist.txt"
refresh_interval: 3600 # seconds between fetches
## クイックスタート
### Docker Run
最新のイメージを使用して、スタンドアロンモードで Krawl を実行します:```bash
docker run -d \
-p 5000:5000 \
-e KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard" \
-e KRAWL_DASHBOARD_PASSWORD="my-secret-password" \
-v krawl-data:/app/data \
--name krawl \
ghcr.io/blessedrebus/krawl:latest
http://localhost:5000 でサーバーにアクセスします
Docker Compose
2つのデプロイモードのいずれかで docker-compose.yaml を作成します。
スタンドアロン: Sqlite ストレージを使用する Krawl サーバーのみ:```yaml services: krawl: image: ghcr.io/blessedrebus/krawl:latest container_name: krawl-server ports: - "5000:5000" environment: - CONFIG_LOCATION=config.yaml # - KRAWL_DASHBOARD_PASSWORD=my-secret-password volumes: - ./config.yaml:/app/config.yaml:ro - krawl-data:/app/data restart: unless-stopped
volumes: krawl-data:
**スケーラブル**: PostgreSQL と Redis を使用: