Windowsログオン、リモートデスクトップ接続時の発報、監視、プログラム実行

ホーム / Software

更新:19/02/10 | Windowsログオン、リモートデスクトップ接続時の監視 | Windows Logon Audit

ログオン監視とは、セッション接続時の監視とは

業務や個人でWindowsを利用している場合で、複数の家族や社員がログオン(ログイン)する環境があった場合、いつ、誰がログオンしたかを検知して確認することで、不正ログインを即座に察知して対応を取ることが出来るようになります。

特にISMSなどの企業内でのセキュリティ資格取得を考えた場合、Audit(監査)の一環としていつ、誰が、どこにログインしたかを発報、記録することは必須の設定と言えます。ここでは、どのようにして設定をするのが良いのか、楽なのかをベストプラクティスとして紹介いたします。

前提条件

前提条件として、以下のような環境にしておく必要があります。

  1. 正しい時刻を記録するため、NTP(ネットワーク時刻同期)などによって正しい時計情報となっていること。
  2. ログイン用のIDを各員にIDが振られていること。IDを共有してしまっていると、不正アクセスに気づきづらくなります。

発報方法

ログインや、リモートデスクトップ接続時に管理者やログインした人に発報をすることで、「自分はログインしていないのにおかしい」とか、「こんな時間にログインしているのはおかしい」とか、「何度もログインをしていて不自然」といったことに気づくところに目的があります。

そのため、以下のような方法で気づきを得る必要があります。

  1. メールでログイン者に知らせる(SMTPを叩くなどして実現)
  2. SMSでログイン者に知らせる(TwilioなどでSMS送信する)
  3. 電話でログイン者に知らせる(Twilioなどで電話発信する)
  4. Google Spreadsheetなどに記録を残す(APIを叩くか、POST/GETを受けるGASを書く事で可能)

ログオン時のプログラム実行

ユーザーがWindowsログオンした際にプログラムを実行するには、グループポリシーを使うのが簡単です。又は、タスクを利用することでもバッチを実行することが出来ます。ここは、どちらを選んでも得られる効果は同じになります。

ログオン時の発報を設定しても、リモートデスクトップ接続が一度切断されて再接続される場合には実行されないという問題があります。ここについては、後述の別の設定を設ける必要がありますが設定を揃えるという意味では「タスクスケジューラ」で統一して設定しておくのが良いかもしれません。

グループポリシーを使う場合

  1. 「ファイル名を指定して実行」にて「gpedit.msc」と入力して実行します。
  2. グループポリシーの設定で、[ローカルグループポリシー]-[コンピュータの構成]-[管理用テンプレート]-[システム]-[グループ ポリシー]にある「ログオン スクリプトの遅延を構成する」を『未構成』⇒『無効』に変更します。
  3. ”未構成”⇒”無効”にチェックして「OK」を押下します。(これは、ログオンスクリプトが遅延して実行されることを避けるための設定です)
  4. グループポリシーの設定で、[ユーザの構成]-[Windowsの設定]-[スクリプト(ログオン/ログオフ)]にてログオンをダブルクリックします。
  5. バッチの場合は「スクリプト」タブ、PowerShellの場合は「PowerShell スクリプト」タブにそれぞれ設定していきます。
    6. ログオン時に実行したい「バッチ」をフルパスで登録します。(実際のスクリプトについては後述する共通のものです)

タスクスケジューラを利用する場合

  1. [すべてのプログラム]→[アクセサリ]→[システムツール]→[タスクスケジューラ]を選択します。
  2. [トリガー]タブで新規をクリックし、タスクの開始をログオン時とします。
  3. [操作]タブで操作をプログラムの開始とし、プログラム/スクリプトに起動するプログラムを設定します。(実際のスクリプトについては後述する共通のものです)

リモートデスクトップ接続の再接続時にプログラム実行

ログオン時の発報を設定しても、リモートデスクトップ接続が一度切断されて再接続される場合には実行されないという問題があります。そのため、タスクスケジューラを使って再接続時のプログラム実行を設定します。

  1. [すべてのプログラム]→[アクセサリ]→[システムツール]→[タスクスケジューラ]を選択します。
  2. [トリガー]タブで新規をクリックし、タスクの開始をセッション接続時とします。
  3. [操作]タブで操作をプログラムの開始とし、プログラム/スクリプトに起動するプログラムを設定します。(実際のスクリプトについては後述する共通のものです)

メール発報スクリプト

ここでは、各設定にて実行するプログラム(スクリプト)について説明します。PowerShellを使った方法を紹介します。タスクスケジューラでは、PowerShellスクリプトを直接指定出来ないため、PowerShellスクリプトを実行する間接的なバッチファイルを作成してこれを指定するようにします。

$type = "新規ログオン";
$uname = $env:USERNAME;
switch ($uname) {
"computer" {$mailto = "admin"}
"administrator" {$mailto = "admin"}
default {$mailto = $uname}
}
$AccountName = "sender@test.com"
$Password = "passwordOfMail"

# connect gmail
$SMTPClient = New-Object Net.Mail.SmtpClient("smtp.gmail.com", 587)
$SMTPClient.EnableSsl = $True
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("$AccountName","$Password");

# Header
$MailFrom = "$AccountName"
$Subject = "【Audit】" + $uname + "(" + $type + ")リモートデスクトップ利用の自動お知らせ"
$Body = "本メールは、システムから自動送信されています。 "

# message object
$mailto = $mailto + "@test.com"
$Message = New-Object Net.Mail.MailMessage($MailFrom, $mailto, $Subject, $Body)

# send mail
$SMTPClient.Send($Message)

まず、$typeにて新規ログオンがあったことを通知するようにしています。つまり、ログオン用のプログラムはこれで良いのですが、セッション再接続時のプログラムには「セッション再接続」などの文字列を指定するようにします。それ以外の部分は全く同じで構いません。

$AccountName/$PasswordはSMTPサーバーのID/PWDとなっています。

基本的にはログインIDにドメイン名を付加したメールアドレスに発報するようになっていますが、特定のID(例ではcomputer, administrator)についてはadmin@test.comに送るよう指定も可能です。

メールアドレスは、ユーザーIDにドメイン名@test.comを付加して自動的に決めているため、ユーザーIDがそのままメールアドレスにはならないような場合にはSwitch文の条件を増やして対応するメールアドレスを指定する必要があります。

あとは、メールのタイトルや内容を適宜調整すれば独自の設定にすることも可能です。これによって、リモートデスクトップ接続時にログイン時にはログインを意味する発報が、リモートデスクトップ接続を切断しているところに再接続した場合には、再接続を意味する発報が可能となるため、自信の操作による発報かどうかを各員が確認すれば良いことになります。

メール発報部分を変更する事で、SMS送信や電話連絡、Spreadsheet記録などに切り替えたり併用したりすることも可能となります。

 

 
お勧めリンク
ダウンロード
ストリーミング関連
Macintosh関連
Windows関連
メディアなど
 
ハードウェア
ソフトウェア/サービス/開発SDK
デジタル一眼レフカメラ
テクニカル記事
趣味関連
ゲーム 〜楽しいゲームの紹介や攻略法
RoverMNI(ローバーミニ) 
雑記
その他
コメント・フィードバック
©1998 CNXGROUP. このページの全部あるいは一部を無断で利用(コピー)することを禁じます。
>