私はポート1234でリッスンしているサーバーを持っているとしましょう。私はこのポートに接続する必要があるいくつかのクライアントソフトウェアを持っています。しかし、私は、悪意のあるユーザーがクライアントソフトウェアをバイパスし、他の手段(コンソールや別のソフトウェアなど)でポートに接続しないようにしたい。安全な方法でクライアント接続を認証するにはどうすればよいですか?
信頼できるクライアントソフトウェアとサーバは、必要に応じて秘密鍵を共有することができます。私は平文でこのようなキーを送信したくないが、認証後のデータは平文である可能性がある。具体的には、悪意のあるユーザーが信頼できるクライアントソフトウェアを使用してサーバー攻撃に対する正しい応答を計算している中間者攻撃を回避する方法を見つけようとしています。
ここからアクセスできますか?
サーバのリスンポートはlocalhostにのみバインドでき、クライアントはまずssh経由でマシンにアクセスする必要があります。次に、クライアントソフトウェアはsshライブラリを使用して、ローカルポートに接続するサーバ上でコマンドを実行できます(このシナリオでは、悪意のあるユーザはパスワードを持たないため、マシンにアクセスするためにsshを使用できません)。しかし、すべてのトラフィックは暗号化されており、これは追加のオーバーヘッドです。おそらく、認証を行うだけのsshに似たプログラムがありますが、そのあとにプレーンテキストでチャネルを残しますか?
更新:
私はすべてのトラフィックを暗号化に関連するオーバーヘッドを決定するためにテストを実行しました。
spew.rbは100万行を出力します。
CONTROL:
[email protected]> time ssh localhost /home/fantius/spew.rb > /dev/null
real 0m40.704s
user 0m19.981s
sys 0m1.400s
トップ45%のCPU使用率(ほぼ二を示す:
[email protected]> time /home/fantius/spew.rb > /dev/null
real 0m35.015s
user 0m34.934s
sys 0m0.084s
トップ
TEST(4つのコアの完全な一個のコア)25%のCPU使用率を示しフルコア)
私はすべての暗号化のコスト最小です。確かに、これはデータ重視のテストです。
バイナリから秘密鍵を抽出することができれば、完全なアクセス権が得られます。sshは、中間者攻撃に多少なりとも抵抗力があると私は理解しています。少なくとも、クライアントがサーバーから発行されたチャレンジを解決することを要求するシンプルなシステム以上のものです。しかし、私はその追加の抵抗の性質を知らない。 – Fantius
侵入者がユーザのシステム上にいる場合、侵入者は自分自身をTCPスタックに挿入し、SSL層に到達する前にデータストリームを取得できます。 「ミドル」は正確な中間を意味するものではなく、2つのエンドポイント間のどこかを意味します。あなたのサーバー上に侵入者がいるため、同人は行く。 SSL層から出てくるデータをキャプチャできます。 –
http://en.wikipedia.org/wiki/Secure_Shell#Security_issuesによれば、古いSSHは新しいSSHよりMITMの方が脆弱です。私が理解しようとしているのはMITMに対するこの新しい抵抗です。 – Fantius