2017年6月23日金曜日

Windows Defenderの定義ファイルを手動で適用するスクリプトを作った

自宅の検証環境にWindows Server 2016を評価版としてインストールして使っているのだが、Windows Defenderの定義ファイルがうまく更新できないという事象が発生している(WSUS環境なので、WSUS側の問題かもしれない)。

そのため、不定期に定義ファイルをダウンロードして、手動で適用していたのだが、それすらも面倒にもなってきたし、セキュリティ的にも可能な限り定義ファイルは最新にしておきたいと考え、スクリプトを組んで自動化することにした。

手作業でやる場合

Windows Defenderの定義ファイルをダウンロード元は、以下URLとなる。

・Updating your Microsoft antimalware and antispyware software
https://www.microsoft.com/en-us/security/portal/definitions/adl.aspx

「Antimalware and antispyware updates」の項目に、Microsoftの各セキュリティ製品の定義ファイルの最新リンクが記載されているので、該当するものをクリックしてダウンロードする。Windows Server 2016であれば、「Windows Defender in Windows 10 and Windows 8.1 - 64bit」を選べばよい。


「mpam-fe.exe」というexeファイルがダウンロードされる(2017年6月時点で124MB)。このexeファイルをダブルクリックで実行するだけで、定義ファイルが更新される。

スクリプトでやる場合

手作業でやっていた作業を単純にPowerShellで実行するスクリプト「update-windefender.ps1」を作成し、タスクスケジューラで1日1回実行するようにした。動作はPowerShell 3.0で確認している。


シンプルなスクリプトではあるが、Windows版wgetのようなInvoke-WebRequestコマンドの存在を知ることができたり、久しぶりにPowerShellに触れたこともあって、なかなか楽しく作ることができた。

参考

・Defender Cmdlets
https://technet.microsoft.com/ja-jp/library/dn433280.aspx



2017年6月17日土曜日

Zabbixを使ってWindowsとLinuxのログイン失敗を監視する

近年、セキュリティ上の問題から、不正アクセスへの対策は必要不可欠になっている。WindowsやLinuxであれば、ログイン失敗のログはOS標準機能にて出力されているので、そのログをZabbixにて監視させることで、予期しない不正ログインをリアルタイムに捉えることができる。

今回はWindowsとLinuxでログイン失敗した際に、Zabbixを使って検知する方法を記載する。動作確認は以下OSで実施した。

・Windows:Windows Server 2016 (他バージョンも同様に対応可能)
・Linux:CentOS 6、7 (RHELも同様に対応可能)

Windowsの場合

Windowsではログイン失敗時に、セキュリティイベントログに以下が記録される。

------------------------------
失敗の監査 2017/05/30 21:15:28 Microsoft Windows security auditing. 4625 ログオン
------------------------------

上記ログのイベントID 4625をZabbixで検知させる。アイテムとトリガーを以下のように設定すればよい。

◆アイテムを設定
・名前:Eventlog Security
・タイプ:Zabbixエージェント(アクティブ)
・キー:eventlog[Security,,,,4625,,skip]
・データ型:ログ
・更新間隔(秒):30
・ヒストリ保存期間(日):7
・アプリケーション:<任意>


◆トリガーを設定
・名前:Eventlog Security
・条件式:{Template OS Windows:eventlog[Security,,,,4625,,skip].strlen()}>0
・障害イベントを継続して生成:チェック
・深刻度:軽度の障害


Linuxの場合

Linuxではログイン失敗時に、/var/log/secureに以下が記録される。

------------------------------
May 30 21:53:28 t3023ce72 sshd[28426]: Failed password for root from 192.168.11.81 port 62145 ssh2
↑★sshログイン失敗

May 30 21:51:39 t3023ce72 login: FAILED LOGIN 1 FROM tty1 FOR root, Authentication failure
↑★コンソールログイン失敗
------------------------------

上記ログに出力される"Failed password"と"FAILED LOGIN"をZabbixで検知させる。アイテムとトリガーを以下のように設定すればよい。

◆アイテムを設定
・名前:secure
・タイプ:Zabbixエージェント(アクティブ)
・キー:log[/var/log/secure,"Failed password|FAILED LOGIN",,,skip]
・データ型:ログ
・更新間隔(秒):30
・ヒストリ保存期間(日):7
・アプリケーション:<任意>


◆トリガーを設定
・名前:secure
・条件式:{Template OS Linux:log[/var/log/secure,"Failed password|FAILED LOGIN",,,skip].strlen()}>0
・障害イベントを継続して生成:チェック
・深刻度:軽度の障害


実際に検知した結果

実際にログイン失敗をしてみると、Zabbixのダッシュボードに障害として上がることが確認できた。


2017年6月1日木曜日

ZabbixのMySQLのDBをバックアップして、リストアする方法

自宅の検証環境の監視用にZabbixを構築しており、DBはMySQLを選択しているが、たまにはDBのバックアップを取得したいと思い実施方法を調べてみた。

バックアップ方法

mysqldumpコマンドでバックアップは実行できるようだ。構文は以下の通り。

# mysqldump -u <ユーザー名> -p <DB名> > <出力ファイル名>.sql

試しに実行してみよう。

# mysqldump -u zabbix -p zabbix > mysqldump_zabbix_`date +"%Y%m%d"`.sql
------------------------------
Enter password:   ←★MySQLの"zabbix"ユーザーのパスワードを入力
------------------------------

ファイルを確認してみると、以下のようにファイルが出力されている。

# ls -l
------------------------------
-rw-r--r--  1 root root 1525531580  5月 28 21:33 2017 mysqldump_zabbix_20170528.sql
------------------------------

ちなみに、mysqldumpは、MySQLのDBの中身をひたすらSQL文としてテキスト出力するコマンドとなっており、出力ファイルの中身はテキストデータになっている。テキストデータなので、圧縮するとファイルサイズがだいぶ小さくなるので、容量効率の観点からは圧縮するのもおすすめとなる。

試しに私の環境のバックアップファイルをzipで圧縮したら、7割以上の容量が削減できた。

# zip mysqldump_zabbix_20170528.sql.zip mysqldump_zabbix_20170528.sql
------------------------------
  adding: mysqldump_zabbix_20170528.sql
 (deflated 73%)   ←★73%の容量が削減された、という意味
------------------------------

以上のように簡単に使えるmysqldumpであるが、1点問題があって、実行中はDBがロックされるため、バックアップ中はZabbixのGUI操作ができなくなり、監視にも影響がでるものと考えられる。

上記問題を回避するために、DBをロックさせないオプションとして、"--single-transaction"を付与することで、ロックを掛けずにバックアップを取得可能となる。

# mysqldump -u zabbix -p --single-transaction zabbix > mysqldump_zabbix_`date +"%Y%m%d"`.sql

上記コマンドであれば、バックアップ取得中であっても、ZabbixのGUI操作は継続して実施可能となる。

リストア方法

バックアップファイルからリストアを行う場合、mysqldumpはSQL文のテキストファイルなので、そのままSQL文としてMySQLに流してしまえばよい。

以下に簡単にリストアの手順を記載する。

1. zabbix-serverの停止

リストア中はDBが使えなくなるため、zabbix-serverを停止しておく。
# service zabbix-server stop
------------------------------
Shutting down zabbix server:                               [  OK  ]
------------------------------

2. ZabbixのDBを削除

MySQLにログインし、リストア対象のDBを削除する。

まずは、MySQLにログインする。

# mysql -u root -p

事前にDBの一覧を確認しておく。今回の削除対象は"zabbix"となる。

mysql> show databases ;
------------------------------
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| zabbix             |   ←★削除対象
+--------------------+
4 rows in set (0.00 sec)
------------------------------

DBを削除する。

mysql> drop database zabbix ;
------------------------------
Query OK, 108 rows affected (0.07 sec)
------------------------------

削除後のDB一覧を確認し、問題なく削除されていることを確認する。

mysql> show databases ;
------------------------------
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.00 sec)
------------------------------

MySQLからログオフする。

mysql> quit

3. MySQLを停止し不要ファイルを削除

DB削除後に不要なファイルの削除を行うため、一度MySQLを停止する。

# service mysqld stop
------------------------------
mysqld を停止中:                                           [  OK  ]
------------------------------

削除前にファイルを確認する。ib_logfile*とibdata1を削除する。これらはInnoDBの更新用のファイルらしいが、リストアしてMySQL起動時に再作成されるとのことなので、削除して問題ないようだ。

# ls -l /var/lib/mysql/
------------------------------
-rw-rw----  1 mysql mysql 268435456  5月 29 14:53 2017 ib_logfile0   ←★削除対象
-rw-rw----  1 mysql mysql 268435456  5月 28 21:33 2017 ib_logfile1   ←★削除対象
-rw-rw----  1 mysql mysql  35651584  5月 29 14:53 2017 ibdata1       ←★削除対象
drwx------. 2 mysql mysql      4096  3月 19 23:04 2016 mysql
drwx------. 2 mysql mysql      4096  3月 19 23:04 2016 test
------------------------------

以下コマンドで不要ファイルを削除する。

# rm -f /var/lib/mysql/ibdata1
# rm -f /var/lib/mysql/ib_logfile*

4. MySQLを起動

# service mysqld start
------------------------------
mysqld を起動中:                                           [  OK  ]
------------------------------

5. Zabbix用のDBを再作成

DBを作り直し、zabbixユーザーに権限を付与しておく。

mysql> create database zabbix ;
------------------------------
Query OK, 1 row affected (0.00 sec)
------------------------------

mysql> grant all privileges on zabbix.* to zabbix@localhost ;
------------------------------
Query OK, 0 rows affected (0.00 sec)
------------------------------

6. リストア実施

mysqldumpのバックアップファイルをSQL文として、DBに流し込む。

# mysql -u root -p zabbix < /root/mysqldump_zabbix_20170528.sql

7. zabbix-serverの起動

zabbix-serverを起動する。

# service zabbix-server start
------------------------------
Starting zabbix server:                                    [  OK  ]
------------------------------

以上でリストアは完了。問題なくZabbixのGUIにログインできるはず。

以下はリストア後のグラフの表示となる。当たり前だが、バックアップ取得からリストアまでのデータは失われてしまうが、グラフが描画が正常に再開していることがわかる。



人気の投稿