2018年7月6日金曜日

Active Directoryのパスワードに特定の文字の利用を禁止する

こんにちは、富士榮です。

先日紹介したAzure ADの新機能「Azure AD Password Protection for Windows Server Active Directory」を使うとブラックリストに載っているパスワードを使うことを禁止することは出来る様になりますが、特定の文字だけを禁止することは今のところ出来なさそうです。

エンタープライズのレガシーなID管理のシナリオだと未だにCSV万能説な文化なので、パスワードに特定の文字を使えなくしたい、というニーズがそこそこあります。
例えば、「,」(カンマ)とか「”」(ダブルクォート)とか「’」(シングルクォート)とかですね。なぜなら、平文パスワードをCSVに載せてFTPで送りつける、ということをしようとすると、この辺りの記号が邪魔をするんですよね・・・。

この辺りに起因する不具合を防止するために、CTRL+ALT+DELを使ったパスワード変更をグループポリシーで禁止して、ID管理パッケージの持つパスワード管理画面からしかパスワードを変更させない様に構成、ID管理システムではパスワードに利用できない文字を定義する、というのが従来の王道パターンでした。

しかし、やはりWindowsの標準の仕組みでパスワード変更を許可したい、というニーズは根強く、各社パスワード・フック用のモジュールをリリースしていたり、という状況です。

当ブログでもほぼ10年前に紹介した「Active Directoryのパスワード変更をフックする」という記事へのアクセスが以外と息が長く、今でもアクセス数トップ3くらいには入っていたりして、何とかしてADのパスワードを引っこ抜いてやろう、という人々が数多く存在するんだな~(違)と感じている今日この頃です。


最近も某所でCSVにパスワードを出力したいからカンマを使えない様にしたい、と言う雑談をしていたりしたので、良し悪しはおいておいてちょっと書いてみました。

この辺りにおいてあります。
 https://github.com/fujie/pwdpol

Visual Studio 2017でC++のDLLを書く、というのも最近は中々無い経験なので新鮮な感じです。

ちゃちゃっと書いたので、エラーハンドリングやログ出力などもありませんし、Visual Studio 2017 on Windows 10 Proで作って、Windows Server 2012 R2で動作確認をしたので、VC++のランタイムのバージョンを合わせるのが面倒だったので、必要なDLL(msvcp140d.dll、vcruntime140d.dll、ucrtbased.dllの3つ)をC:\Windows\System32へコピーするとか強引なことをしてますが、皆さんはちゃんと必要なランタイムの再配布用パッケージをダウンロードして使ってください。

使い方は、ドメインコントローラ上で
・必要なDLLをC:\Windows\System32へ配置
・レジストリへの登録
・再起動
という3ステップですが、こちらは昔の記事と何も変わらないので、こちらをご参照ください。
https://idmlab.eidentity.jp/2018/06/azure-ad-ngad.html

こんなコードです。
<本体:pwdpol.cpp>

#include "stdafx.h"
#include <ntsecapi.h>
#include <regex>

#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif

using namespace std;

// initialize
BOOLEAN NTAPI InitializeChangeNotify(void) {
    return TRUE;
}

// evaluate filter
BOOLEAN NTAPI PasswordFilter(
    PUNICODE_STRING AccountName,
    PUNICODE_STRING FullName,
    PUNICODE_STRING Password,
    BOOLEAN SetOperation) {

    BOOLEAN ret;

    // filter in regular expression
    const wchar_t* pattern = LR"([\"\',])";

    // convert PUNICODE_STRING to wstring
    std::wstring pwd(Password->Buffer, Password->Length / sizeof(WCHAR));
    
    // search filtered charactors
    regex_search(pwd, wregex(pattern)) ? ret = FALSE : ret = TRUE;

    // clear buffer
    SecureZeroMemory((PVOID)pwd.c_str(), pwd.size());

    return ret;
}

// notify change
NTSTATUS NTAPI PasswordChangeNotify(
    PUNICODE_STRING UserName,
    ULONG RelativeId,
    PUNICODE_STRING NewPassword) {

    // nop
    return STATUS_SUCCESS;
}
<定義:pwdpol.def>

LIBRARY "pwdpol"
EXPORTS
    InitializeChangeNotify
    PasswordFilter
    PasswordChangeNotify


DLLの配置をして再起動すると上手くいけばポリシーが有効になります。
管理者がカンマを含むパスワードでリセットしようとしても

ユーザが自分でしようとしても、

ダメです。弾かれます。

これでパスワードをCSVに出力し放題です。何も気にすることはありません。どんどん出力してFTPでばらまきましょう。ファイルサーバにおいてCIFSで共有するのもいいアイデアです。

良い子はマネしちゃいけませんよ。



2018年7月2日月曜日

MVP Renewal 9th!!

こんにちは、富士榮です。

昨年からMVPの更新サイクルが7月~に一本化されたので、9度目かつ9年半目というよくわからないことになっていますが、今年もEnterprise Mobilityです。

前回のポストを見ていると英語版Blogを頑張ります的な宣言をしていますが、全然できてないですね。その代わり5月~6月のEuropean Identity & Cloud ConferenceとIdentiverseでの登壇をしたので、まぁ良いかな。。。(昨晩、というか数時間前にIdentiverseから帰国したのでヘロヘロです・・・)

今年も色々と活動していきたいと思いますので、今後ともよろしくお願いいたします!


2018年6月16日土曜日

[Azure AD/パスワード保護] NGワードの登録、オンプレADへのポリシー適用

(6/20 更新:モジュールのダウンロードが復活したのでリンクを張りました)
こんにちは、富士榮です。

現状のAzure Active Directory(Azure AD)におけるクラウド・ユーザのパスワード・ポリシーは有効期限と期限切れ通知に関する設定の2点だけしかカスタマイズすることが出来ません。(しかも、Office365のポータルもしくはPowershellコマンドレットで変更するしか方法がありません)

基本的な考え方として、単純なパスワードや漏えいの恐れのあるパスワードや使いまわされているパスワードなどはAzure ADが自動的にブロックしてくれているので、オンプレミスのADに比べてかなり強力な保護が実装されており、そのまま任せておくのがベターというポリシーに基づいているものと思われます。

※Azure AD Connectで同期をしているユーザはオンプレミスのActive Directoryのパスワードポリシーに準拠しますので、グループポリシーで複雑性要件をカスタマイズすることが可能です。
※ちなみにAzure AD B2Cでは複雑性ポリシーなどをカスタマイズすることが可能です。

参考)Azure Active Directory のパスワード ポリシーと制限
https://docs.microsoft.com/ja-jp/azure/active-directory/authentication/concept-sspr-policy


しかし、一方でせっかくAzure ADが強力なパスワード保護機能を持っているので、この機能をオンプレミスにも適用したり、更にNGワードを追加したり(例えば会社名など組織内では一般的な用語など)することで全体としてパスワード保護を強化したくもなってきます。(オンプレとクラウドでポリシーがバラバラになることで利用者の混乱を招く可能性も大きいと思いますし)

今回Preview公開されたAzure ADのパスワード保護機能では、以下の機能が実装されています。

  • ロックアウトまでのログイン試行回数の設定
  • ロックアウトが自動的に解除されるまでの時間(秒数)
  • 利用できない文字列の設定
  • オンプレミスADへのポリシーの適用

(2018/06/16時点)
ちなみに昨晩まではオンプレミスADへのポリシー適用に使うためのエージェントモジュールのダウンロードが出来たんですが、本日はリンクが切れています。
おそらく何らかの不具合がありモジュールを引っ込めたと思うので、再公開を待ちましょう。

ということで、オンプレミスADへのポリシー適用については試せていませんので、他の機能を紹介していきます。
6/20更新)以下のページからダウンロードができるようになりました。
 https://www.microsoft.com/en-ie/download/details.aspx?id=57071
オンプレミスADへのポリシー統合に関するドキュメントも合わせて公開されています。
 https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-password-ban-bad-on-premises

手順は確認したら別途紹介したいと思います。

◆パスワード保護設定

Azure PortalよりActive Directoryを開くと[Authentication Methods]というメニューが表示されていますので開くと、[Password Protection(Preview)]という設定項目が出てきます。


この画面で先に紹介したロックアウト関連、NGワード登録、オンプレADへの適用に関する設定を行います。
ちなみにオンプレADへの適用についてはAzure ADのライセンス適用状況によってはグレーアウトされます。(おそらくPremium P1かP2のどちらかが必要そう。確認中)
6/20)ドキュメントを見るとやはりAzure AD Premiumが必要とのことです。

◆ロックアウトポリシーを変更する

まずはロックアウトされるまでの認証失敗回数を変更してみます。初期値は10ですので、既に上記の画面ショットでは2回に変更してあります。
つまり、上記の画面の設定だと、2回パスワードを間違えると60秒間ロックされます。

というわけで2回間違えるとこんなメッセージが表示されます。




◆NGワードの登録

Custom banned password listという項目に最大1000個までNGワードを登録できます。
ちなみに、大文字・小文字の判別は無く、oと0、aと@などの代替文字の読み替えも自動的にやってくれます。


ちなみに今回は試しに「hogehage」というNGワードを登録しておき、「H0geh@ge」というパスワードを設定しようとすると以下のように弾かれました。

何度も使っている訳ではないので、メッセージは微妙ですが実際に設定が出来なくなりました。中々便利です。

後はオンプレADへこれらのポリシーを含むAzure ADのパスワード保護が適用できるとかなり便利になると思うので、ダウンロードが回復したら試してみようと思います。

2018年5月25日金曜日

[Azure AD B2C]VS Code Extensionでカスタムポリシーを簡単編集

こんにちは、富士榮です。

de:codeのセッションの中で軽く紹介したんですが、資料にURLなど載せていなかったので紹介しておきます。

カスタムポリシーってポータルからダウンロードして、XMLファイルをゴリゴリ編集して再度アップロードして、、という作業を経て構成するので中々とっつきにくい、と思って敬遠している方へ朗報です。

Visual Studio Code用のAzure AD B2C用のExtension(ベータ版)が公開されています。

Azure AD B2C Tools
https://marketplace.visualstudio.com/items?itemName=AzureADB2CTools.aadb2c


主な機能と出来ることは以下の通りです。

  • カスタムポリシーエクスプローラー
    • ポリシー内の各エレメント一覧を参照、ジャンプ
  • アイテムの定義の参照
    • Shift+F12を押すことでアイテムの定義箇所へジャンプ
  • XMLエレメントの追加
    • ClaimとかTechnicalProfileなどのエレメントを追加
  • ヘルプと関連情報の表示
    • 関連するドキュメントの表示
  • XMLスキーマの簡易ヘルプ
    • XMLタグにマウスオーバーすると説明がポップアップ


こんな感じです。



かなり生産性が上がると思うので、カスタムポリシーを書く方は是非!

2018年5月18日金曜日

[Azure AD] Azure AD ConnectでPingFederateとのSSO構成が可能に!

こんにちは、富士榮です。

ちょうど1年近く前に正式リリースされたAzure AD Web Application ProxyとPingIdentityのPingAccess連携の話に引き続き、今度はAzure AD Connectを経由したPingFederateの構成が発表されました。(現状Public Previewです)

 [Azure AD] PingAccess連携が正式リリース
 https://idmlab.eidentity.jp/2017/06/azure-ad-pingaccess.html

対応したのは最新バージョンのAzure AD Connect(1.1.819.0)からです。

Office365、Azure ADとのID連携先としてPingFederateは早い段階から認定されていましたが、より深くインテグレーションされてきました。

関連ドキュメントはこの辺りから。



簡単に言うと、自動的にやってくれることは、

  • PingFederate側に何を設定すれば良いかを教えてくれる(Azure ADのEntityIDとかエンドポイントのURIとか)
  • Azure AD側のFederationの構成してくれる

ということです。

今、手元にPingFederateの環境がないので、インストーラの途中までですが、こんな感じで設定を行います。

User sign-inの設定で「Federation with PingFederate」が選択できるようになっています。

連携するAzure ADのドメインを選択します。

Federationの設定を行うところでは、PingFederateに何を設定するかExportしてくれるのと、PingFederateのURLを指定します。

ちなみにExportした構成情報は結構丁寧にPingFederateに何を設定したらいいのか記載されています。


まぁ正直、手動で構成するのもそれほど手間ではないのですが、最初から選択肢として組み込まれてくるとグッときますね。
皆さんも自宅に転がっているPingFederateを使って是非試してみてください。

2018年5月12日土曜日

[FIDO]Firefox 60の正式版がリリースされたのでWebAuthnを試してみる

こんにちは、富士榮です。

先月WebAuthnがW3Cの勧告候補になってブラウザ各社が対応を表明したり、Windows 10 April Update 2018からWindows HelloでFIDO2 Security Keyが使えるようになったり(まだTAPなど一部ユーザにしか提供されていませんが)と、にわかにFIDO周りがにぎやかになってきました。

ということでWebAuthnに対応したFirefox 60.0が正式にリリースされたので手元のYubikeyで試してみます。
左から、Security Key By Yubico、Yubikey 4、Yubikey NEOです。
なんだか増殖してます。
Yubikeyの各エディション毎の比較は以下のページから。
https://www.yubico.com/products/yubikey-hardware/compare-yubikeys/


まずは、Firefoxのバージョンを確認しましょう。


ちゃんと更新されてます。

次にWebAuthnがちゃんと有効になっているか確認します。about:configを開きwebauthn関係の設定を検索し、「security.webauth.webauthn」がTrueであることを確認します。

これも大丈夫です。


ということで、テストしてみます。
今回テストに使ったのは、
https://webauthn.io/
https://webauthn.bin.coffee/
の2つのサイトです。

まずはhttps://webauthn.io/です。

ユーザ名を入れて、Register a User/Credentialをクリックします。

セキュリティ・トークンを求められるので、Yubikeyを差し込んでタップします。

登録とログインが成功しました!
ちなみにFIDO2にも対応しているSecurity Key by Yubico(青い奴)とYubikey 4はうまく動きますが、一番古いYubikey NEOだとダメでした。


同じように、https://webauthn.bin.coffee/でも試してみます。

Create Credentialをクリックすると同じようにキーを求められるので、Yubikeyを差し込んでタップします。

こちらも無事に登録が出来ました。


あくまでテストツールでブラウザの対応を確認しただけなので、面白味には欠けますが、これで実際にWebAuthnに対応したWebアプリケーションを作る環境はそろったことになるので、パスワードレスのWebサイトが登場してくるのも近いかもしれません。楽しみですね。

2018年5月8日火曜日

[Azure AD] Build 2018( #msbuild )に合わせてAzure AD PIMとTerm of UseがGA

こんにちは、富士栄です。

事前にアナウンスが合った通り、昨日より開催されているBuild 2018に合わせてAzure AD関係の以下の機能が一般リリース(GA)されました。


  • Privileged Identity Management(PIM)
  • Conditional Access - Term of Use(ToU)


公式Blogでのアナウンス
https://cloudblogs.microsoft.com/enterprisemobility/2018/04/17/password-less-sign-in-to-windows-10-azure-ad-using-fido2-is-coming-soon-plus-other-cool-news/
※主題はFIDO2の話ですが、しれっとBuildでGAされるよ!という話が書いてあります。


PIMはいわゆる特権管理ですね。Azure AD上の特権を承認を得て一時的に取得するための機能で、Azure AD Premium P2で使えます。


ToUは条件付きアクセスの条件の一つとして設定ができるもので、使用条件に同意をしないとアプリケーションを使わせない、というような条件を設定することが可能です。

こちらは以前、Azure AD B2Bのゲストユーザへの同意を求める、というシナリオで紹介しましたね。
https://idmlab.eidentity.jp/2017/12/azure-ad-b2bterms-of-use.html



他にもIdentity関連のセッションが色々と用意されているようなので、期間中に良い情報が出てくれば紹介したいと思います。