web-dev-qa-db-ja.com

ポートノッキングは良いアイデアですか?

通常、私は特定のIPアドレスからのみアクセスできるように、SSHや他の非公開サービスをロックダウンしたいサーバーについてです。ただし、ビジネスに静的IPアドレスがない場合、または外部の開発者がアクセスする必要がある場合、これは必ずしも実用的ではありません。

先ほどポートノッキングについて聞いたことがありますが、ようやく上記の問題の解決策として検討する機会がありました。この結果、私はたくさんの質問をしました。人々が私を助けてくれることを願っています。

  • 誰かが自分のビジネス/組織内でそれを展開し、アドバイスを提供できますか?
  • Linuxで実行するのに最適なノッキングデーモンは何ですか?
  • Linux、Windows、OSXに最適なクライアントは何ですか?
  • ノックシーケンスの推奨の長さはどのくらいですか?TCP、UDP、またはその両方を使用するのが最適ですか?
  • 関連する欠点とそれを使用する際の問題は何ですか?
  • あいまいさによるセキュリティだけですか?
  • ポートノッキングアプローチに代わるものはありますか?
41
Mark Davidson

まだデプロイしていませんが、デプロイした人はたくさんいます。そのすべてが、結果としてSSHブルートフォース攻撃などによって消費される帯域幅の量の大幅な削減に気づきました。

しかし、それは欠点がないということではありません。私の知る限り、カーネルベースのポートノッキング実装はありません。ポートノッキングデーモンは、ファイアウォールシステムからの失敗した(およびフィルタリング/禁止された)ログファイルエントリの読み取りに依存しています。これで問題はなくなりましたが、ファイルシステムがいっぱいになるとどうなりますか?暴走したプロセスがシステムのRAMを交換してスワップしたためにデーモンが強制終了された場合はどうなりますか?これらの2つのうちどちらかが依存しているだけで動作が停止するとどうなりますか?おそらく、物理的にアクセスする必要のあるサーバーになってしまいます。特に、サーバーから数十マイル以上離れていて、呼び出すことができる人がいない場合は、合理的ではなくコストがかかる可能性があります。急いでそこに着く。

私が言えることは、それは「あいまいさによるセキュリティ」ではないということです。ポートノッキングは認証の一形態であり、他の認証システムと同様に、必要に応じて単純または複雑にすることができます。 「ポート10,000 + realPortNumberのノック」のような単純なものを実行できます。これは簡単な中断に相当します。または、ポートノッキング自体が何らかの形式の実際の認証の送信に使用される場合があります(たとえば、他の方法で導出されたキー)。ただし、ポートノッキングを使用して大量のデータを送信することはできません。これは、単一のパケットを送信するよりも大幅に時間がかかり、パケットがオーバーした場合TCP少なくとも正常に受信されたか、何らかのエラーが発生したかを知ることができます。

ただし、これがもたらす興味深い質問の1つは、ログファイルの管理方法です。ユーザーランドの実装では、ノックが正常に送信されたかどうかを判断するためにログファイルが必要であり、ログがリークされた場合はどうなりますか?認証データが知られるようになり、それは明らかにあまり良いことではありません。

セットアップでポートノッキングを使用するかどうかはわかりません。私はまだです、そして私が今までにあることを100%確信していません。強力な暗号化(PKIインフラストラクチャなど)に基づく強力な認証システムを使用する方が、ポートノッキングを妨害するよりも理にかなっています。また、重要なインフラストラクチャへのアクセスに単一障害点を追加することは、とにかく私には悪い考えのようであり、あらゆる種類の保証で適切にサポートすることはさらに困難です。ただし、これも、ポートノッキングソフトウェアがファイアウォールとオペレーティングシステムのカーネルレベルで統合されていないという概念に基づいています。それが変わった場合、私はそれを使うことに対する私の感じ方も変えるかもしれません。

34
Michael Trausch

ポートノッキングは単なるプレーンテキストパスワードではありません-少なくとも、SSHのようにTCPポートでリッスンするサービスを保護するために使用される場合。ポートノッキングは、nmapによるサービス検出が不可能であることを意味します。デフォルトドロップファイアウォールポリシーの使用。SSHDにもリモートで悪用可能な脆弱性があり、これらは脆弱なパスワードとは何の関係もありません。nmapを起動して、私がSSHDをリッスンしているのを見ることができるようにしたくありません。

また、「シングルパケット認証」と呼ばれるポートノッキングのより強力なバリアントがありますが、これは完全にパッシブな認証方式であるため、ポートノッキングの利点を保持しながら、その制限を解決します(リプレイ攻撃が簡単、DoS攻撃が簡単など) 。)。

13
Michael Rash

SSHやOpenSSLなどのサービスが比較的頻繁にセキュリティの脆弱性を持っていることは、簡単に確認できる事実です。これらの攻撃は、適切なオープンポートを持つシステムを対象として、インターネット上で一斉に試行されます。

私の考えでは、ポートノッキングは、一般的な脆弱性を探しているこれらのランダムな攻撃者をインターネットから遠ざけることを目的としています。つまり、専用の攻撃者を遠ざけたり、サービスの実際のセキュリティの一部を形成することは想定されていません。ポートノッキングの利点は、実際には非常に単純であり、悪用可能なバグが存在する可能性が低いことです。

この使用法は、攻撃者のmajorityを遠ざけている限り、ポートノッキングが可能な限り緩やかであることを意味します。それはmay曖昧さによる単なるセキュリティですが、より良い方法は、それを「パスワード」認証の弱い形式として持つことです。

したがって、「最善の」ポートノッキングサービスは、攻撃を想像することは考えられないものですが、正当なユーザーがあらゆる種類のクライアントマシンから使用できるほど簡単なものです。

9
Nakedible

ポートノッキングは、あいまいであることによるセキュリティではありません。多層防御です。これは、車をより盗みやすい車の隣に駐車するようなものです。標的を絞った攻撃を防ぐのにはあまり効果はありませんが、日和見主義者を別の方向に向かわせるだけです。

8
jl6

他の場所での私のコメントのとおり、ノックに応答するためにあらゆる種類の特別なトリックを使用する多くの実装がありますが、Linuxシステムでは実装できます 完全にiptablesを使用 。つまり、これは事実上カーネルベースのポートノッキング実装です

ノックはネットワーク上で可視であるため、3ノックを超えるシーケンスを使用してもほとんどメリットがありません。 TCPを使用することをお勧めします-速度は遅くなりますが、ノックが配信されたことをよりよく保証します。

ただし、ユーザースペースプログラムに依存していますが、接続には追加の手順やソフトウェアは必要なく、確実に実行され、失敗してもサーバーへのアクセスを妨げないため、 fail2ban が優先されます。 。

暗号化されたIDの採用がほとんどないことは、私を驚かせます。RFC1413は、プロトコルの動作方法を定義するのではなく、プロトコルを使用して可能なアプローチに言及しているだけです。

しかしもちろん、これとは関係なく、可能な限りアクセスを制限するようにしてください(つまり、rootログインなし、指定したグループへのアクセスを制限します(実際には、キーペアが必要です)。 SSHは安全であるように設計されており、歴史的にはメインストリームの実装における脆弱性は比較的少数でした。攻撃が成功する理由は通常、推測可能なユーザー名、単純なパスワード、ブルートフォース攻撃またはソーシャルエンジニアリングの組み合わせにあります。複雑なパスフレーズの検証(最小長以外)を強制することも、ユーザーにパスワードを変更し続けるように要求することも私が主張しているわけではないことに注意してください。

7
symcbean

私は長年ポートノッキングを実装していませんが、原則として大きく変わっていないと思います。他のコメントには多くの有効なポイントが含まれているので、ここでそれらを単に繰り返すことはしません。

もちろん、私が常に実装しているポートノッキングの1つの側面は、ノックシーケンスを、現在の日付や時刻などの疑似ランダムであるが反復可能な値に基づくことです。この戦略は、リプレイ攻撃の危険を完全に排除するものではありませんが、特定のノックシーケンスの露出を制限します。明らかに、これが同期された時間で成功するためには、私の例では、整合性のためにソースが必要になります。

4
Tok

ポートノッキングは、もう1つのプレーンテキストパスワードです。他の平文のパスワードと同様に、総当たり、発見、キャプチャ、再生が可能です。 Telnetログインを再発明する理由

あなたは何かを信頼する必要があります。したがって、遅延圧縮、特権分離で実行し、合理的な形式の2要素認証(たとえば、キーベース)のみを許可する場合、OSネットワークスタックを信頼し、sshdを信頼すると仮定しましょう。

Authpfを呼び出すsshdのような「単純な」サービスを使用して、より複雑で脆弱なサービスを保護できます。

authpfを使用すると、sshdに対する認証に成功したユーザーに基づいてファイアウォールルールセットを変更できるため、sshゲートウェイへのログインを管理するIPアドレスのみが、コンパイル/計算/データベースファームへの接続を許可されます。

2
Alex Holst