
ioc2rpzは、脅威インテリジェンスとDNSが出会う場所です。
ioc2rpz™: DNSセキュリティソリューション - ioc2rpz™ は、脅威インディケータを実用的なレスポンスポリシーゾーン (RPZ) フィードに変換する強力なDNSサーバーです。更新プロセスを自動化し、悪意のあるドメインやIPアドレスを含む最新の脅威からネットワークを保護します。IOCフィードをRPZに変換することで、ioc2rpz™ は脅威インテリジェンスとDNSセキュリティの間の重要な橋渡し役となり、ISC BindやPowerDNSなどのRPZ対応DNSサーバーと互換性があります。
DNSはインターネットのコントロールプレーンです。通常、DNSは良い目的で使用されますが、以下のような問題があります:

ISC Bindは、ネームサーバーの事実上の標準です。ISC BIND 9.8でのレスポンスポリシーゾーンの導入により、DNS層でマルウェアを監視および封じ込めることは簡単な作業になりました。RPZはPowerDNS recursor 4.0.0以降のリリースでサポートされています。Knot DNSもRPZを部分的にサポートしています。
従来のネットワーク保護ソリューションと比較して、DNSサーバーはパフォーマンスに影響を与えずに数百万のインディケータを処理できますが、プライマリDNSサーバー上でレスポンスポリシーゾーンを自動的かつ効率的に維持する方法はありませんでした。
通常、侵害指標 (IOC) はプレーンテキストで配布されますが、形式はさまざまで、IOCプロバイダーのうちRPZ経由で利用可能にしているのはごく一部です。
ioc2rpz™ は、さまざまなソースからのインディケータ (例: 悪意のあるFQDN、IP) をRPZフィードに自動的に変換し、それらを自動的に維持/更新するカスタムDNSサーバーです。フィードは、RPZをサポートするオープンソースおよび/または商用DNSサーバー (例: ISC Bind、PowerDNS) に配布できます。ルーター、デスクトップ、サーバー、さらにはRaspberry Pi上でも、RPZフィルタリングを備えた独自のDNSサーバーを実行できます。唯一の制限はシステムメモリです。
ioc2rpz™ を使用すると、独自のフィードやアクションを定義し、望ましくない通信を防ぐことができます。
ioc2rpz™ はIOCフィードをレスポンスポリシーゾーン (RPZ) に変換します。フィードを組み合わせて単一のRPZまたは複数のRPZを生成できます。信頼できるドメインとIPはホワイトリストに登録できます。ioc2rpz™ はインディケータの有効期限をサポートし、それに応じてゾーンを再構築します。
現在のリリースは、ローカルファイル、http/https/ftp経由のファイル/リクエスト、および他のリソースタイプにアクセスするためのシェルスクリプトをサポートしています。インディケータを抽出するためのREGEXを記述でき、インディケータが改行または/および復帰文字 (/n, /r, /r/n) で区切られている場合は、任意のファイル形式を使用できます。
ioc2rpz は Erlang/OTP 上に構築されており、フォールトトレランスと自動リカバリを保証するスーパーバイザツリーを備えています。詳細は docs/architecture.md を参照してください。``` ioc2rpz_app (application) └── ioc2rpz_sup (supervisor) ├── ioc2rpz_db_sup — ETS table heir process ├── ioc2rpz_tcp_sup — TCP listener pool (5 workers) ├── ioc2rpz_udp_sup — UDP listener ├── ioc2rpz_tls_sup — TLS/DoT listener pool (5 workers) [if cert configured] └── ioc2rpz_rest_sup — Cowboy HTTPS (REST API + DoH) [if cert configured]
Key modules:
| Module | Responsibility |
|--------|---------------|
| `ioc2rpz.erl` | TCP/TLS DNS worker — accept, parse, validate, respond |
| `ioc2rpz_udp.erl` | UDP DNS listener — SOA queries |
| `ioc2rpz_conn.erl` | IOC source fetching (HTTP/HTTPS/file/shell) |
| `ioc2rpz_db.erl` | ETS-based zone and packet cache |
| `ioc2rpz_sup.erl` | Main supervisor, configuration loading, zone scheduling |
| `ioc2rpz_rest.erl` | REST management API (Cowboy) |
| `ioc2rpz_doh.erl` | DNS-over-HTTPS handler |
## ioc2rpz™の使い方
ioc2rpz™は、Response Policy Zonesをサポートする任意のDNSサーバー(例: 最近のバージョンのISC BIND、PowerDNS、およびこれらの製品をベースにした商用DNSサーバー(例: Infoblox、Blue Cat、Efficient IP))で使用できます。サンプルのbind設定ファイル(named.conf)はcfgフォルダに提供されています。
<p align="center"><a href="http://www.youtube.com/watch?feature=player_embedded&v=bvhyMFa_mBM" target="_blank"><img src="https://raw.githubusercontent.com/Homas/ioc2rpz/master/ioc2rpz_demo.png"></a></p>
## ioc2rpz™ Webインターフェース
[ioc2rpz.gui](https://github.com/Homas/ioc2rpz.gui) は、独立したプロジェクトとして開発されている管理Webインターフェースです。ioc2rpz™を実行するために必須ではありません。
## プロトコルサポート
ioc2rpz™は複数のトランスポートプロトコルで待ち受けます。すべてのトランスポートは同じクエリ処理パイプライン(レート制限、TSIG検証、ゾーン検索、応答生成)を共有します。完全なプロトコルドキュメントについては [docs/protocols.md](https://github.com/homas/ioc2rpz/blob/master/docs/protocols.md) を参照してください。
### ポート概要
| Port | Protocol | Service | Condition |
|------|----------|---------|-----------|
| 53 | UDP | DNS queries (SOA only) | Always |
| 53 | TCP | DNS queries, AXFR/IXFR zone transfers, management | Always |
| 853 | TCP+TLS | DoT — same as TCP but encrypted | Requires `cert` config |
| 443/8443 | TCP+TLS | DoH (`/dns-query`) and REST API | Requires `cert` config |
### UDP(ポート53)
UDPは、軽量なDNSクエリ、主にSOAルックアップに使用されます。512バイト(またはEDNS0でアドバタイズされたバッファサイズ)を超える応答は、RFC 1035 §4.2.1に従ってTC(トランケーション)ビットを設定し、クライアントにTCPでの再試行を促します。管理コマンドはUDPではサポートされていません。```bash
dig @127.0.0.1 zone.ioc2rpz SOA -y hmac-sha256:keyname:base64key
TCPはゾーン転送(AXFR/IXFR)、SOAクエリ、および管理コマンドを処理します。5つの事前生成されたacceptワーカーのプールが着信接続を処理します。```bash
dig @127.0.0.1 zone.ioc2rpz AXFR +tcp -y hmac-sha256:keyname:base64key
dig @127.0.0.1 zone.ioc2rpz IXFR=12345 +tcp -y hmac-sha256:keyname:base64key
### DNS over TLS / DoT(ポート853)
ioc2rpz™ は、DoT による RPZ 配布をサポートしています。設定に `cert` レコードが存在する場合、TLS リスナーはポート853で自動的に起動します。DoT は TCP と同じ操作(AXFR、IXFR、SOA、管理)をサポートします。
- サポートされる TLS バージョン: 1.2 および 1.3(`?TLSVersion = 'tlsv1.2-1.3'`)
- RFC 7858 §3.4 に準拠した接続再利用をサポート(TLS セッションごとに複数クエリ、30秒のアイドルタイムアウト)
- TLS PIN はサポートされていません
- DNS NOTIFY メッセージは暗号化されずに送信されます(プレーン UDP)
- ディスク上のファイルが置き換えられると、証明書は自動的に更新されます(Erlang SSL キャッシュにより最大約2分の遅延)
証明書の設定については、[証明書の設定](#certificate-setup) を参照してください。```bash
# SOA query over DoT
kdig @127.0.0.1 -p 853 zone.ioc2rpz SOA +tls -y hmac-sha256:keyname:base64key
# AXFR over DoT
dig @127.0.0.1 -p 853 zone.ioc2rpz AXFR +tls +tcp -y hmac-sha256:keyname:base64key
DoH は /dns-query エンドポイントを介して HTTPS 上で DNS 解決を提供します。サポートされるメソッド:
?dns= クエリパラメータに base64url エンコードされた DNS メッセージを使用Content-Type: application/dns-message ボディを使用(最大 4096 バイト。それより大きいペイロードは HTTP 413 を受信)レスポンスは Content-Type: application/dns-message を使用します。DoH は DNS ワイヤーフォーマットの完全なメッセージを運び、Do53/DoT と同じ経路で処理されるため、同じ TSIG 認証を継承します。ゾーン転送(AXFR/IXFR)は TCP のみに限定され、DoH では提供されません。```bash
curl -H "Accept: application/dns-message"
"https://127.0.0.1:443/dns-query?dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" -k