Ticket #46471

SSH 認証ダイアログが閉じるまで、認証バナーが VTWindow に表示されない

Open Date: 2023-01-07 08:55 Last Update: 2023-01-23 22:58

Reporter:
Owner:
(None)
Type:
Status:
Open
Component:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

認証バナーを VTWindow に表示する設定になっていると、受け取った SSH_MSG_USERAUTH_BANNER は認証ダイアログを閉じるまで描画されません。

RFC は認証前に表示されることを想定しているように思います。

RFC 4252 5.4 Banner Message

In some jurisdictions, sending a warning message before authentication may be relevant for getting legal protection.

Many UNIX machines, for example, normally display text from /etc/issue, use TCP wrappers, or similar software to display a banner before issuing a login prompt.

もしかしたら #40995 はこれと関連があるかも?

Ticket History (3/6 Histories)

2023-01-07 08:55 Updated by: nmaya
  • New Ticket "SSH 認証ダイアログが閉じるまで、認証バナーが VTWindow に表示されない" created
2023-01-07 17:29 Updated by: doda
Comment

記憶に頼って書いてます。

認証処理は以下の順番でパケットが送られます。

  1. C: SSH_MSG_SERVICE_REQUEST
  2. S: SSH_MSG_SERVICE_ACCEPT
  3. S: SSH_MSG_USERAUTH_BANNER (Optional)
  4. C SSH_MSG_USERAUTH_REQUEST
  5. S: SSH_MSG_USERAUTH_SUCCESS/FAILURE
  6. -以下略-

ttsshでは、認証方式が決まってSSH_MSG_USERAUTH_REQUESTを送る際の前処理としてSSH_MSG_SERVICE_REQUESTを送る(ただし送信済みの場合はスキップする)という実装だったと思います。

なので認証ダイアログが開いた段階ではSSH_MSG_SERVICE_REQUESTが送られていない為サーバーは認証処理がまだ開始していないと認識しているので、SSH_MSG_USERAUTH_BANNERもまだ送られてきていないとういう状態だったはずです。

ただ、CheckAuthListFIrst=1ならば一度SSH_MSG_USERAUTH_REQUESTを送信するので、状況が変わるかも。 CheckAuthListFIrst=1でも起きるならば、他にも原因があるかもしれません。

2023-01-08 01:24 Updated by: nmaya
  • Details Updated
Comment

ブレークポイントを設定しながらログを取って確認しました。

CheckAuthListFirst=0 だと認証前に表示されているので、正確ではありませんでした。CheckAuthListFirst=1 だと遅れて表示されているように見えます。

CheckAuthListFirst=0 だと、このように動いているようです。これは期待通りです。

認証ダイアログが開く
ユーザ名を入力する
パスワードを入力する
認証ダイアログのOKボタンを押す
認証ダイアログが消える
C: SSH_MSG_SERVICE_REQUEST
S: SSH_MSG_SERVICE_ACCEPT
C SSH_MSG_USERAUTH_REQUEST("none")
S: SSH_MSG_USERAUTH_BANNER
バナーが表示される
S: SSH_MSG_USERAUTH_FAILURE ("none" は必ず FAILURE になる)
C: SSH_MSG_USERAUTH_REQUEST (本当の認証)
S: SSH_MSG_USERAUTH_SUCCESS

CheckAuthListFirst=1 だと、このように動いているようです。

認証ダイアログが開く
ユーザ名を入力して、フォーカスアウトする
C: SSH_MSG_SERVICE_REQUEST
S: SSH_MSG_SERVICE_ACCEPT
C SSH_MSG_USERAUTH_REQUEST("none")
S: SSH_MSG_USERAUTH_BANNER ... ログされているので、ここで受信はしている
バナーが表示されない ... このあたりからおかしい
handle_SSH2_userauth_failure() に来ない ... S: SSH_MSG_USERAUTH_FAILURE ("none" は必ず FAILURE になる) が送られてきているはずだが...

-> 認証ダイアログのOKボタンを押す
   何も起こらない ... ログインできない ticket #40995
-> 認証ダイアログのDisconnectボタンを押す
   C: SSH_MSG_DISCONNECT
   バナーが表示される ... 「ここまでバナーが表示されない」ということでこの ticket を切った
   S: SSH_MSG_USERAUTH_FAILURE

CheckAuthListFirst=1 のときの期待する動き

認証ダイアログが開く
ユーザ名を入力して、フォーカスアウトする
C: SSH_MSG_SERVICE_REQUEST
S: SSH_MSG_SERVICE_ACCEPT
C SSH_MSG_USERAUTH_REQUEST("none")
S: SSH_MSG_USERAUTH_BANNER
バナーが表示される
S: SSH_MSG_USERAUTH_FAILURE ("none" は必ず FAILURE になる)

パスワードを入力する
認証ダイアログのOKボタンを押す
C: SSH_MSG_USERAUTH_REQUEST (本当の認証)
S: SSH_MSG_USERAUTH_SUCCESS
2023-01-08 15:21 Updated by: nmaya
Comment

# wireshark と KeyKey.log を使ってパケットの中身まで見たかったのですが、手元でうまくいきません(ログファイルを指定しても復号されない)。

しかし、やりとりとパケットサイズを見た感じでは、以下のことが起こっているようです。

CheckAuthListFirst=1 で、認証ダイアログを出したまま(ユーザ名のフォーカスアウトで)送った SSH_MSG_USERAUTH_REQUEST の返事(SSH_MSG_USERAUTH_FAILURE)が返ってきません。

C: SSH_MSG_SERVICE_REQUEST
S: SSH_MSG_SERVICE_ACCEPT
C: SSH_MSG_USERAUTH_REQUEST("none")
S: SSH_MSG_USERAUTH_BANNER
S: SSH_MSG_USERAUTH_FAILURE ("none" は必ず FAILURE になる) <- これが来ていない
  • 問題1
    • サーバから SSH_MSG_USERAUTH_FAILURE が返ってこない(ような変な送り方をしている?)
  • 問題2?
    • DISCONNECT に対する FAILURE が返ってくると。バナーが VTWinodw に表示されている様子
    • 「SUCCESS/FAILURE が返ってくるまでバナーが VTWinodw に表示されない」という問題?
(Edited, 2023-01-10 23:06 Updated by: nmaya)
2023-01-10 23:10 Updated by: nmaya
2023-01-23 22:58 Updated by: nmaya
Comment

サーバから SSH_MSG_USERAUTH_FAILURE が返ってこない(ような変な送り方をしている?)

SSH のパケットを見ると SSH_MSG_USERAUTH_FAILURE が返ってきていました。

ですので、サーバは同じレスポンスを返しているのに、TTSSH 側が受信する動きに違いがあります。

CheckAuthListFIrst が 0 でも 1 でも SSH_MSG_USERAUTH_REQUEST("none") は送られます。認証ダイアログが生きた状態かどうか?の違いかもしれません。

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login