こんにちは、Citrixコンサルタントの滝澤です。

働き方が変化している昨今、増加するリモートアクセス需要にシンプルに対応することが可能な二要素認証のご紹介です。

セキュリティ強化の為に当たり前になりつつある二要素認証、様々なSaaSアプリを利用する上で何がしかの認証を求められたことがある方が多いかと思います。一要素目でID/パスワードを入力し、一要素目と異なる二要素目の情報を合わせて入力することで、より高いセキュリティを担保します。

一言に二要素認証と言っても、生体認証、ハードウェアトークンやスマートフォンのauthenticatorアプリを利用したOTP認証、または”秘密の質問”に回答する知識認証など、多様な方法が利用可能であるためそれぞれの特徴を理解して要件に見合う実現方法を選択することが重要です。

今回ご紹介させていただくのはCitrix ADC (Citrix Gateway)とSMS送信サービスをAPI連携させるSMS-OTP (ワンタイムパスワード)認証です。

Citrix ADCを使用したSMS-OTP認証の特徴は以下です。

・Citrix ADCがOTPを生成する

・スマートフォン、携帯電話にてSMSを受信できれば利用可能

・ユーザーのスマートフォン等にOTP用アプリのインストールが不要 (MDMの考慮も必要なし)

・必要なコンポーネントが少ないため比較的短期間で導入可能

・API連携可能なSMS送信サービスの準備が必要

Citrix Virtual Apps and Desktopsへのリモートアクセス時の認証を説明します。

  1. ユーザーがCitrix ADC (Citrix Gateway)にアクセスしユーザー名とPWを入力します。
  2. Citrix ADCはActive Directory (AD)にLDAP認証を試みます。資格情報を検証するとともに、mobile属性からユーザーの携帯電話番号(SMS送信先)の取得を試みます。説明ではオンプレミスのADを想定していますが、Azure Active Directory及びAzure AD Domain Servicesを使用したLDAP認証と電話番号取得も可能です。いずれの認証においても予め電話番号を登録しておくことが必要になります。
  3. LDAP認証に成功すると、ADは電話番号をCitrix ADCに連携します。
  4. Citrix ADCはAppExpertのVariablesとAssignmentsを使用してOTPを生成します。
  5. ADから連携された電話番号は先頭に国番号(日本であれば+81)がついていることが望ましいですが、国番号なしで登録されている場合や、混在している場合も想定されます。Citrix ADCは、ADから取得する電話番号の国番号の有無を判別し、無しの場合には国番号を付与して後述のSMS送信サービスへAPI連携することが可能です。
  6. Citrix ADCがAuthentication PolicyのWebAuth Actionを使用して、SMS送信サービスにHTTP APIコールを送信します。使用するSMS送信サービスにも依りますが、含める情報はSMS送信元電話番号/送信先電話番号、OTPです。本構成ではSMS送信サービスにtwilioを使用しています。
  7. SMS送信サービスからユーザーの携帯電話にOTPを含んだSMSを送信します。
  8. ユーザーがSMSを受信後、OTPを要求しているCitrix Gatewayの画面に入力します。
  9. Citrix ADCが、入力されたOTPを検証します。Citrix ADCはOTP生成の過程において、NSC_TMASというCookieとOTPを紐づけています。(「4」にて実施)その紐づけを元に、ユーザーから提供されるOTPの検証を行います。
  10. 認証完了後、StoreFrontへ認証情報をパススルーします。

全体の流れをご覧いただいたところで、もう少しCitrix ADCの詳細設定にフォーカスして説明します。

一連の認証は、Citrix ADCのnFactor authenticationを使用しています。

ユーザーから見える部分は、1st Factorの認証画面、4th Factorの手持ちの端末で受信するSMS-OTP、それからそのOTPを入力する5th Factorの認証画面です。画面表示例を以下に示します。

今回のLogin Schemaはデフォルトを使用しています。環境に合わせて表示する文字などをカスタマイズすることもできます。

サンプルコンフィグと共に4th Factorを見ていきます。

add authentication webAuthAction SMS_API -serverIP xx.xx.xx.xx -serverPort 443
-fullReqExpr q{“POST /2010-04-01/Accounts/xxxxxxxxxxc31e0ki0792c45xxxxxxxxxx/Messages.json HTTP/”
+ http.req.version.major + “.” + http.req.version.major + “\r\nAccept:*/*\r\nHost: api.twilio.com
\r\nContent-Type: application/x-www-form-urlencoded\r\n” + “Content-Length: ” + length_post_data + ”
\r\nAuthorization: Basic xxxxxxxxxxYyMWM76WUwNWQwxxxxxxxxxxAxMmQ3OGRmhuo2ZDY3NDxxxxxxxxxxODQxYTY0ZDFlMjRlxxxxxxxxxx==
\r\nConnection: Keep-Alive\r\n\r\n” + “From=+1251xxxxxxx&To=” + aaa.user.attribute(1) + “&Body=”
+ otp_exp + ” is your OTP. From Citrix ADC”} -scheme https -successRule “http.res.status.eq(201)”

-serverIP

webAuthActionの構文は宛先がIPアドレス指定となってしまいます。そのため、別途仮想サーバーを立てて都度名前解決を行い仮想サーバー経由でSMS送信サービスと通信をさせることが推奨です。

aaa.user.attribute(1)

この値が、ADから取得しOTPをSMSで送信する電話番号です。

LDAP ActionのAttribute1に属性名mobileを入力することによって、ADのmobile属性値を入手します。

otp_exp

VariablesとAssignmentsで定義しているOTPとAAA.USER.SESSIONID(NSC_TMAS)の紐づけをwebAuthActionの構文内で引用できるようにExpressionに定義します。

問題なくAPI連携できれば、ユーザーのモバイル端末はSMSにてOTPを受信します。

もしOTPの受信方法にお困りの方がいらっしゃいましたら、選択肢の一つとしてCitrix ADCのSMS-OTPをご検討いただけると幸いです。なお今回のSMSの他、Emailを使用してOTPを受信する認証ソリューションもあります。

導入のご検討の際は、是非コンサルティングサービス部にご相談ください。