前回の記事で、Petya亜種に関するサイトをいくつか紹介しましたが、その最後の「CNET Japan」にはセキュリティパッチ適用以外の予防方法が載っています。
(本来は、セキュリティパッチ適用がベストな予防方法です。)
Active Directory ドメインに参加しているコンピューターは、起動時に必ずドメインコントローラーへ接続し、セッションを確立します。
このセッションは暗号化されており、「セキュアチャネル」と呼ばれます。
「セキュアチャネル」そのものついては、マイクロソフトの中の人が書かれているブログ「ドメインにログオンできない ~ セキュア チャネルの破損 ~」で詳しく解説されているので、ここでは割愛します。
ActiveDirectory ドメインの管理者権限を持たない標準ユーザーで、どんな情報を収集可能か試してみました。
ドメイン名は「test.local」で、ドメインコントローラーは、「DOMEKON」(OS: Windows Server 2003 R2 Service Pack 2)が一台だけという環境です。
このtest.localドメインに参加している Windows 8.1 Update に、ドメインの標準ユーザーとしてログオンした状態を想定しています。
<一> ドメインユーザーの一覧
net user /domain
<二> ドメインコントローラーの一覧
nltest /dclist:test.local
※ドメインコントローラーが複数台ある場合、どれがPDCエミュレーターの役割を担っているのかを特定できます。
また、各ドメインコントローラーが属しているサイト名も分かります。
<三> ドメインに参加しているコンピューターの一覧
netdom query workstation
※このコマンドは、Windows 8.1 に「リモート サーバー管理ツール」(KB2693643)をインストールすることで使えるようになります。
フォレストやドメインの機能レベルは、一度上げてしまったが最後、二度と下げる事はできない・・・
そう思ってました。
が、どちらも「2008R2以上のレベルから、2008まで」なら、下げられることを確認しました。
※Technetの下記ページによると、フォレストの機能レベルを下げる事ができるのは「Active Directory のごみ箱が有効になっていないとき」という条件付きだそうです。
上記ページには肝心の手段が書いていないのですが、PowerShellでできることが判明しました。
フォレストの機能レベルなら「Set-ADForestMode」、ドメインの機能レベルなら「Set-ADDomainMode」です。
※Windows Server2008R2の場合は、予め「ActiveDirectory」モジュールをインポートしておく必要があります。
これらのコマンドレットの必須パラメーターは二つだけです。
「-Identity」でドメイン名を、「-ForestMode(ないし-DomainMode)」で下げたいレベルを指定します。
フォレストのルートドメイン「test.com」でフォレストの機能レベルを2008にする場合は、
Set-ADForestMode -Identity test.com -ForestMode windows2008forest
と書きます。
この方法により、Windows Server 2012やWindows Server 2012R2のドメインコントローラーで、両機能レベルを「2012」や「2012R2」から「2008」まで下げることもできました。
※上げることもできました。
何気なく Windows 8.1 の「Windows の機能の有効化または無効化」を見ていると、Hyper-V の上に「Active Directory ライトウェイト ディレクトリ サービス」(AD LDS)を発見。
確認したところ、Windows 7 には無いものの、Windows 8 から搭載されていました。
(Enterprise や Professional といった業務用エディションのみ確認。もしかしたら家庭用エディションには無いかもしれません。)
クライアント OS でこの機能が使われるのは、どういうケースでしょうか。。。
ドメインに参加している端末は、起動時にドメインコントローラーに接続します。
起動後のユーザーログオン時の認証等は、基本的に起動時に接続したドメインコントローラーに認証してもらいます。
現在、端末がどのドメインコントローラーに接続しているのかを確認する、一番手っ取り早い方法は " net-user /domain " コマンドです。
これは本来、ドメインユーザーの一覧を表示するコマンドなのですが、「情報提供元」として「現在接続しているドメインコントローラー」が表示されるため、ソレを確認する用途にも使えます。
他に " nltest /sc_query:<domainname> " コマンドでも確認可能ですが、このコマンドは Windows Server 2003 では標準では使えません。(Support Tools に含まれています。)
なお、ドメイン内に複数のドメインコントローラーがある場合、端末が起動時に接続するドメインコントローラを指定する方法は、「サイトを切り分ける」以外に無いようです。
前回の While ステートメントに、実際にドメインユーザーを作成するコマンドレット" New-ADUser "を一行書き足すことで、「ドメインユーザー連続作成」ができるようになります。
ただドメインユーザーアカウントを一つ作成するだけでしたら、" new-aduser <ユーザー名> " だけでも可能です。
そのため、二つの変数 $L = import-csv samplelist.csv , $C = 0 を定義した直後に " new-aduser ($L[$C]).name " を実行した場合、「aaa」をユーザー名とするドメインユーザーが作成されます。
しかし、この状態ではパスワードが設定されていないのは当然として、ユーザーアカウント自体も「無効」となっています。
作成と同時にアカウントを「有効」とするためには、" -Enabled $true " というオプションが必要です。
" net user <ユーザー名> /add /domain " コマンドで作成したユーザーアカウントであれば、特にオプションを付けずとも最初から有効なのですが。
ドメインユーザーの作成と同時にパスワードも設定するには、" -AccountPassword " というオプションを用います。
しかし、" -AccountPassword ($L[$C]).password " という記述で CSV ファイルからパスワードを読み込もうとしても、失敗してしまいます。
どうやら、「ごく普通の文字列(プレーンテキスト)」はパスワードとして扱えず、「SecureString」というセキュリティ的に保護された文字列である必要があるようです。
CSV から読み込んだ文字列を「SecureString」に変換するためには " ConvertTo-SecureString " というコマンドレットも併用しなくてはいけないので、実際のドメインユーザー作成コマンドレットは下記のようになります。
" New-ADUser ($L[$C]).name -AccountPassword (ConvertTo-SecureString -asplaintext ($L[$C]).password -force) -Enabled $true"
この一行を While ステートメントに組み込んで繰り返し実行することで、CSV に記述された全ユーザーが作成され、同じく CSV に記述されたパスワードを用いてドメイン内のコンピューターにログオン出来るようになります。
なお、上記コマンドレットにより作成されたドメインユーザーは、「姓」「名」「表示名」「ユーザー ログオン名」が設定されておらず、「ユーザー ログオン名(Windows 2000 より前)」だけが、指定したユーザー名により設定されている状態です。
そのユーザー名でログオンすること自体に支障は無いのですが、必要に応じてオプションを付与し、適宜設定するようにしてください。
" new-aduser "、" ConvertTo-SecureString " コマンドレットについての詳細は、下記 URL を参照してください。
New-ADUser
http://technet.microsoft.com/ja-jp/library/ee617253(en-us).aspx
ConvertTo-SecureString
http://technet.microsoft.com/en-us/library/hh849818.aspx