web-dev-qa-db-ja.com

パスワードを無視してfreeRADIUS経由の2FA

私はfreeRADIUSを設定してユーザーに2番目の認証要素(Google Authenticator OTPなど)を要求するように設定する必要がありますが、最初にユーザーのパスワードを確認する必要はありません。

RADIUSの経験がないため、この完全なブラインドに入ります。ユーザーにサインインを要求するwebappがあるため、パスワード認証はすでに行われています。次に、ユーザーにプロンプ​​トを表示する必要があります特定のアクションを実行するために2番目の認証要素を指定します。ユーザーにパスワードの入力を繰り返し要求したくないので(そして、ローカルでのキャッシュは明らかにノーです)、したがって、私たちがしたいのはfreeRADIUSを設定することですどういうわけかそれはそうするでしょう:

  • 最初のリクエストでパスワードに渡す値を無視します
  • ユーザーに2番目の認証要素(OTPなど)の入力を求めるチャレンジレスポンスを返す

これは実現可能ですか?私が言ったように、私は以前にRADIUSの経験がありませんので、これが馬鹿げた質問であるなら謝罪します。

5
Jeedee

私はこれを自分で理解しました。誰かが興味を持っている場合、それは/etc/pam.d/radiusdの設定に関連しています

最初に、次のいずれかのチュートリアルに従って、Google認証システムをfreeRADIUSサーバーの2番目の要素として設定します。
https://networkjutsu.com/freeradius-google-authenticator/https://www.supertechguy.com/help/security/freeradius-google-auth/

/etc/pam.d/radiusdを変更する場合は、次のいずれかの構成を使用します。

  1. パスワードとGoogle Auth OTPを要求するには:

    auth requisite pam_google_authenticator.so forward_pass
    auth required pam_unix.so use_first_pass
    アカウントに必要なpam_unix.so監査
    アカウントが必要ですpam_permit.so

  2. Google Auth OTPのJUSTを要求する(つまり、パスワードなし):

    auth必須pam_google_authenticator.so
    アカウントに必要なpam_unix.so監査
    アカウントが必要ですpam_permit.so

これはチャレンジレスポンスを送信しないことに注意してください。これは、最初にパスワードを入力する必要がないことを意味します。

2
Jeedee

Radiusは、ネットワーク認証/承認/アカウンティングプロトコルです。 OSIモデルのレイヤー3で動作します。

Webアプリケーションはレイヤー7で動作します。

そのため、ここでは少しの不一致があります。 WiFiやネットワークポートなどのネットワーク接続の認証にRadiusを使用する場合がありますが、Webアプリケーションにはhttpベースのものが必要です。

私はいくつかの前提を立てていますが、ネットワーク上のユーザーを認証するためのRadiusサーバーがあり、Webアプリケーションでユーザーを認証するために同じユーザーのデータベースを利用しているように思えます。ユーザーを認証するためにWebアプリがRadiusプロトコルを話すかどうかに関係なく、ユーザーはユーザーがWebページにユーザー名とパスワードを入力するときにRadiusを話さないので、Radiusはこれを支援することはありません。 Webアプリケーション。

WebアプリケーションがRADIUSサーバーにアクセスできる場合、認証されているユーザーを特定し、それに基づいて承認/ OTPプロンプトを許可することができますが、これはWebアプリケーションのロジックです。 FreeRadiusの設定でこれを実現することはできません。

したがって、私は一歩下がって、ユーザーデータが格納される場所を検討することをお勧めします。 freeRadiusサーバーに対して認証しているかもしれませんが、Radiusは単なるプロトコルであり、バックエンドにはユーザーのデータベースがあります。これは、LDAPサーバー、SQLデータベース、PAM、または単なるプレーンテキストファイルです。

共通のユーザーデータベースがあるとすると、各サービスの認証フローに、ある種のOauth/SAMLシングルサインオンアプリケーション(OktaとPingIDはいくつかの商用例です)を追加できるため、1つの場所でのサインオンが可能になります。別の効果。 SSOを使用すると、特定の時点で2番目の要素を要求するようにWebアプリを変更できます(ユーザーの既存のOTPシークレットを知っておく必要があります。または、この目的のために別のOTPシークレットをセットアップするよう要求することもできます)。または、ある種のポリシーと、使用するSSOテクノロジーがサポートしている場合は再認証します。

結論として、私はfreeRadiusだけでこれを行う方法を見つけることができません。セキュリティを完全に侵害する恐ろしいman-in-the-middleプロキシを実装しない限り、承認の部分を実行するには、常にアプリケーションを変更する必要があります。

1
Alex Forbes