DNS トンネル: 出口を隠したデータ流出
DNS の問い合わせは必ずテキストを運びます。トンネルはこのテキストを出口経路に変えます。すると、ただの問い合わせの列に見えてしまいます。
トンネルはどう組みたてるか
端末から持ち出すデータは、符号化されて小分けにされます。一つ一つの切れはドメイン名になります。データの一部.トンネル.例 のような形です。リゾルバは普通に応答し、その応答が相手側の言いたいことを運んできます。
アドレスがふつうの名前の形をしているので、すべてが普通の問い合わせに見えます。データを受け取って応答を返すサーバーも、ごく普通のドメインに置かれています。トンネルが成り立つのは、DNS が両方向にテキストを運ぶことを許しているからです。そしてこの道を通るものを、ブロックする人はほとんどいません。
なぜ見分けられないのか
通信は DNS の形をしており、ポート 53 か、暗号化された DNS のサーバーアドレスへ向けられます。誰も気に留めません。問い合わせの中身を調べても、中に含まれているのは暗号化された文字列で、手軽に読めるものではありません。
量も隠れる手立てになります。持ち出すデータはたいてい小さく、数時間に分けて送られ、端末の通常の通信に混ざります。十秒に一回の問い合わせは、大きなデータを一度に送るのよりずっと目立ちません。
表面積をどう小さくするか
トンネルに使われるドメインの一覧で止める方法は、その一部をカバーします。ただし、その一覧は常に変わります。観察のほうが有効です。存在しない名前を大量に使う端末や、いつも同じドメインに妙な接頭辞をつけて問い合わせる端末は、いつもと違うことをしています。
設定で効くのは二つあります。DNS の出口を制限して、選んだリゾルバだけが答えられるようにすること。そして端末ごとの問い合わせ記録を残して、パターンを見えるようにすることです。出口を探すのは、フィルタではなく記録のほうが早く手がかりになります。