linux - ssh 登录服务器的指纹如何获取、验证,以及除了中间人攻击外什么操作会改变服务器指纹?
伊谢尔伦
伊谢尔伦 2017-04-17 17:08:33
0
3
781

事情由来:

登录自己的vps时提示REMOTE HOST IDENTIFICATION HAS CHANGED!
显示如下

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:sYNNR1L6T5cSEG4BndqtCDhJEI0eB9LamBTkuIue3+0.
Please contact your system administrator.
Add correct host key in /Users/xx/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/xx/.ssh/known_hosts:40
ECDSA host key for [xx.com] has changed and you have requested strict checking.
Host key verification failed.

提示有被中间人攻击的风险,那么除了被中间人攻击的情况下,还有那些变动会造成这样的变动?(ssh连接的加密方式变化了,比如我发现 known_hosts 文件中有的主机信息是 ssh-rsa 有的是 ecdsa-sha2-nistp256,那么软件升级会改变连接加密方式吗?我自己没有动过)

还有其中提到了指纹信息

The fingerprint for the ECDSA key sent by the remote host is
SHA256:sYNNR1L6T5cSEG4BndqtCDhJEI0eB9LamBTkuIue3+0.

这种指纹信息在第一次ssh登录服务器的时候也会提示

The authenticity of host [xx.com] can't be established.
ECDSA key fingerprint is SHA256:sYNNR1L6T5cSEG4BndqtCDhJEI0eB9LamBTkuIue3+0.
Are you sure you want to continue connecting (yes/no)?

那么这个指纹信息是要验证的,怎么验证?
(我猜有很大比例的人应该都会像安装软件下一步一样,并不清楚怎么对比,就直接信任了)

append:查找了一些资料,How to get ssh server fingerprint information,都提到了类似的内容,但是和上面显示的 fingerprint 不一样呀。

> ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 0d:df:2b:e4:ee:79:f2:98:ab:38:93:f3:44:1d:c5:4d  root@doceanm-xxx.localdomain (ECDSA)

那么他们之间的关系是什么?

还有生成私匙公钥的过程中也会提到一个指纹

> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xavier/.ssh/id_rsa): testxxx
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in testxxx.
Your public key has been saved in testxxx.pub.
The key fingerprint is:
SHA256:Bw1NuIXaa7h6tzCWDDOq0/esnqQiNJruFeNThfYffHY xavier@local
The key's randomart image is:
+---[RSA 2048]----+
|        .=.      |
|      . ooo      |
|     o +.o.      |
|    . + +.       |
|   o+. oS+.o E   |
| o..+=..+.+ .    |
|ooo+. *o .       |
|*.ooo+oo.        |
|==.o==o...       |
+----[SHA256]-----+
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(3)
迷茫

サーバー管理者はこのことをユーザーに通知します

いいねを押す +0
Peter_Zhu

はい、保証はありません。
ssh プロトコルを安全にする場合は、初めて取得するフィンガープリントが本物であることを確認する必要があります。

それを入手するには、別の安全な方法を使用する必要があります。たとえば、vps を購入する場合、販売者は SSH 接続方法だけでなく、https Web ページでサーバーの SSH フィンガープリントも提供する必要があります。これにより、ネットワーク汚染が防止されます。

これは暗号化の基礎です。秘密キーをネゴシエートする前に、通信が改ざんされないことを保証することはできません。

いいねを押す +0
洪涛

他の方法でサーバーにアクセスして指紋を検証したり、比較のために事前に指紋情報を取得したりするにはどうすればよいですか?

あなたは 2 つの質問をしていると仮定します。

比較のために事前に指紋情報を取得するにはどうすればよいですか?
回答: SSH クライアント (投稿したサーバー) がすでに比較を行っています。比較が失敗した場合、パスワードを使用できないようにするために、デフォルトでログインの続行が拒否されます (パスワードを使用している場合)。盗まれるから。

サーバーの実際のフィンガープリントを取得するにはどうすればよいですか?
答え: サーバーのフィンガープリントはデフォルトで /etc/ssh/ に保存されます。
あなたが私に提供した情報によると、SSH クライアントは /etc/ssh/ssh_host_ecdsa_key.pub の内容である ECDSA キーを使用します。
しかし、これを比較するのは無駄です。

その理由は非常に簡単です。仲介者はサーバーの公開鍵を取得できます。
その後、秘密鍵については、通常は検証されません。公開鍵をペアリングできるかどうか、つまり公開鍵を偽造できるかどうか。

しかし、仲介者は秘密鍵を取得できず、あなたとサーバーの間で送信されるデータを復号化することもできません。

これには、従来の暗号化、秘密鍵復号化、公開鍵復号化、秘密鍵暗号化などの非対称暗号化手段が含まれます。詳細については説明しません。

言い換えると、彼はサーバーの公開キーを取得し、(公開キーを渡すことができたにもかかわらず) サーバーを偽造しました (秘密キーがなければサーバーを起動できませんでしたが、特殊な状況については別途説明します)。
しかし、サーバーに送信するデータはサーバーの秘密鍵で復号化する必要があるため、復号化できず役に立ちません。

言い換えると:

初めてログインに成功し、ログインしているマシンが自分のマシンであることを確認する限り、SSH クライアントのデフォルトのセキュリティ ポリシーに従っている限り、セキュリティ上の問題はまったく発生しません。
初めてログインに成功し、ログインしているマシンが自分のマシンであることを確認する限り、SSH クライアントのデフォルトのセキュリティ ポリシーに従っている限り、セキュリティ上の問題はまったく発生しません。
初めてログインに成功し、ログインしているマシンが自分のマシンであることを確認する限り、SSH クライアントのデフォルトのセキュリティ ポリシーに従っている限り、セキュリティ上の問題はまったく発生しません。

自分のマシンであることを確認するのは非常に簡単です。ファイルが存在するかどうかを確認するだけです。

コメント欄でマシン全体がプロキシになっているのではないかという質問があったので、私も解決策を提供できます:

理論上、初回は絶対に安全ではありませんが、絶対というものはありません。
秘密鍵と公開鍵で常に暗号化について言及し、その後に鍵の暗号化について言及するのは良くありません。

キーの暗号化自体は安全ではありませんが、キー自体も十分な長さのキーで暗号化されているため、解読には非常に時間がかかります (数年かかります)。

それなら妥協するのは簡単です、

たとえ cat ssh 公開鍵の内容を乗っ取って vim を開くことはできても、ファイルの先頭に改行を追加するなどしてファイルを編集することは困難です。公開キーの途中に改行を追加します。

独自のスクリプトを書くために乗っ取られることはまったくありません

リーリー

cat_key.sh の内容は cat ssh_key.pub であるか、cat_key.sh は単なるバイナリ ファイルです。

コメントエリアでは、公開鍵と秘密鍵をプロキシによって直接置き換えることも提案されています。

マシンのインストールにはインストール スクリプトを使用する必要があり、インストール スクリプトの操作方法も問題になります。

  1. Bash は操作をリアルタイムで記録しませんが、すべての操作はロガーを通じてリアルタイムで記録できます。

  2. システム ログをカスタマイズし、ログイン後に監査します。

ルーターを直接ハッキングできるハッカーは多くはありません。それができるのはトップのブラックハット/ホワイトハット業界だけです。 NSAは作戦記録を秘密裏に消去する。

そうは言っても、神経質になって疑う必要がある場合は、
公開キーまたは指紋を提供できるのはマシンのプロバイダーだけです。

一般に、
サーバー側の弱いパスワードとパスワードブラストが最適です。
これらのハッカーは、さまざまなツールを使用して脆弱なパスワードをスキャンすることを好みます。
denyhosts をインストールして開始します。
ほとんどの悪意のある ssh リクエストはデフォルトでブロックされます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!