今回はSysmon(プロセス作成、ネットワーク作成、ファイル操作等のWindowsイベントを監視してログ記録するツール)のLinux版となる
SysmonForLinuxを使用して、LinuxデバイスからSysmonが取得するログを弊社製品LogStare Collectorで収集してみます。
目次
SysmonForLinuxについて
SysmonForLinuxを起動しておくと、発生したイベントが/var/log/syslogに書き込まれます。
また、内部でSysinternalsEBPFライブラリを使用しているため、これもインストールが必要となります。
SysinternalsEBPFは、ファイルディスクリプタやソケットから情報を取得して、SysmonForLinuxに提供しています。
※詳しい技術内容に関しては、LinuxカーネルドキュメントのBPF項目や、eBPF(Extended Berkeley Packet Filter)を参照してください。
サーバ構成と構成図
- 監視対象デバイス1(Ubuntu)
- 監視対象デバイス2(AlmaLinux)
- ログ収集監視サーバLogStare Collector
Ubuntu 20.04 または 18.04
実際に使ったのはUbuntu Server 20.04.3 LTSです。Ubuntu 18.04.6 LTSでも同様の手順で出来ました。
イメージファイルのUbuntu-20.04.3-live-server-amd64.isoはhttps://jp.ubuntu.com/downloadからダウンロードできます。
SysmonForLinuxのインストール
debファイルをダウンロードして登録するコマンドを実行します。
$ wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb $ sudo dpkg -i packages-microsoft-prod.deb
SysinternalsEBPFライブラリとSysmonForLinuxをインストールします。
$ sudo apt-get update $ sudo apt-get install sysinternalsebpf $ sudo apt-get install sysmonforlinux
SysmonForLinuxの実行
SysmonForLinuxを次のコマンドでインストールして実行します。-iオプションの後にXMLコンフィグファイル(詳細は後述)は、指定しなくてもデフォルト設定のフィルタなしで全イベントログ取得状態になります。
$ sudo sysmon -accepteula -i
ログが書き込まれていることを確認します。
$ sudo tail -f /var/log/syslog
Syslogの転送
LogStare Collectorへログを転送するため、/etc/rsyslog.confに下記の設定を追記します。
*.* @192.168.56.122:514
※192.168.56.122は転送先LogStare CollectorサーバのIPアドレスです。環境に合わせて変更してください。
rsyslog.serviceを再起動します。
$ sudo systemctl restart rsyslog.service
AlmaLinux8.5
AlmaLinux8.5の場合、カーネルのバージョンが対応していないのか、正しく拾えなかったのか、SysmonForLinuxが古いカーネル用のオブジェクトを呼び出そうとしてしまうため、カーネルのバージョンアップも必要になります。
Syslogの設定
AlmaLinux8.5インストール直後の状態は、/var/log/syslogに書き込む設定が何もされていません。
また、LogStare Collectorへログを転送もするため、/etc/rsyslog.confに/var/log/syslogの書き込みと転送の設定を追記します。
*.*;auth,authpriv.none -/var/log/syslog *.* @192.168.56.122:514
rsyslog.serviceを再起動します。
$ sudo systemctl restart rsyslog.service
SysmonForLinuxのインストール
AlmaLinux用が存在しないため、CentOS用で代用してみます。
$ sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm $ sudo yum install sysinternalsebpf $ sudo yum install sysmonforlinux
SysmonForLinuxの実行
SysmonForLinuxを次のコマンドでインストールして実行します。-iオプションの後にXMLコンフィグファイル(詳細は後述)は、指定しなくてもデフォルト設定のフィルタなしで全イベントログ取得状態になります。
$ sudo sysmon -accepteula -i
ログには、Sysmonが参照するオブジェクトが異なるバージョンのため、エラーが出力されます。
$ sudo tail -f /var/log/syslog
カーネルのバージョンアップ
リポジトリを登録してインストールします。
$ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org $ sudo yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
今回はカーネル5.4.177-1を選択してインストールして、再起動します。
$ sudo yum --enablerepo=elrepo-kernel install kernel-lt kernel-lt-devel kernel-lt-headers reboot
カーネルがバージョンアップされていることを確認します。
$ sudo uname -a Linux ubuntu 5.4.0-97-generic #110-Ubuntu SMP Thu Jan 13 18:22:13 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
改めてSysmonのログが録されているか確認します。
$ sudo tail -f /var/log/syslog
SysmonForLinuxのXML設定ファイルについて
設定ファイルは、/opt/sysmon/config.xmlにあり、設定を変更するとこのファイルが更新されます。
イベントログは26種類+エラー1種類の計27種類あり、デフォルトではファイル作成のログは出力されませんでした。
今回はファイル作成も監視したいため、以下のconfig.xml設定ファイルを作成します。
<Sysmon schemaversion="4.81"> <EventFiltering> <RuleGroup name="" groupRelation="or"> <FileCreate onmatch="exclude"> </FileCreate> </RuleGroup> </EventFiltering> </Sysmon>
以下のコマンドを使用して、先ほど作成したxmlファイルの内容に更新し、ファイル作成のイベントログも取得できるようにします。
$ sudo sysmon -c config.xml
尚、設定をデフォルトに戻したいときは、以下のコマンドを使用して初期化することができます。
$ sudo sysmon -c --
SysmonForLinuxのイベントログ一覧です。
ID | イベント名 | イベントの内容 |
255 | SYSMONEVENT_ERROR | エラー |
1 | SYSMONEVENT_CREATE_PROCESS | プロセスの作成 |
2 | SYSMONEVENT_FILE_TIME | プロセスによってファイル作成時刻が変更されました |
3 | SYSMONEVENT_NETWORK_CONNECT | ネットワーク接続 |
4 | SYSMONEVENT_SERVICE_STATE_CHANGE | Sysmon サービスの状態が変更されました |
5 | SYSMONEVENT_PROCESS_TERMINATE | プロセスが終了しました |
6 | SYSMONEVENT_DRIVER_LOAD | ドライバーが読み込まれました |
7 | SYSMONEVENT_IMAGE_LOAD | イメージが読み込まれました |
8 | SYSMONEVENT_CREATE_REMOTE_THREAD | CreateRemoteThread |
9 | SYSMONEVENT_RAWACCESS_READ | RawAccessRead |
10 | SYSMONEVENT_ACCESS_PROCESS | ProcessAccess |
11 | SYSMONEVENT_FILE_CREATE | FileCreate |
12 | SYSMONEVENT_REG_KEY | RegistryEvent (オブジェクトの作成と削除) |
13 | SYSMONEVENT_REG_SETVALUE | RegistryEvent (値セット) |
14 | SYSMONEVENT_REG_NAME | RegistryEvent (キーと値の名前変更) |
15 | SYSMONEVENT_FILE_CREATE_STREAM_HASH | FileCreateStreamHash |
16 | SYSMONEVENT_SERVICE_CONFIGURATION_CHANGE | ServiceConfigurationChange |
17 | SYSMONEVENT_CREATE_NAMEDPIPE | PipeEvent (作成されたパイプ) |
18 | SYSMONEVENT_CONNECT_NAMEDPIPE | PipeEvent (パイプ接続済み) |
19 | SYSMONEVENT_WMI_FILTER | WmiEvent (WmiEventFilter アクティビティが検出されました) |
20 | SYSMONEVENT_WMI_CONSUMER | WmiEvent (WmiEventConsumer アクティビティが検出されました) |
21 | SYSMONEVENT_WMI_BINDING | WmiEvent (WmiEventConsumerToFilter アクティビティが検出されました) |
22 | SYSMONEVENT_DNS_QUERY | DNSEvent (DNS クエリ) |
23 | SYSMONEVENT_FILE_DELETE | FileDelete (アーカイブされたファイルの削除) |
24 | SYSMONEVENT_CLIPBOARD | ClipboardChange (クリップボードの新しいコンテンツ) |
25 | SYSMONEVENT_PROCESS_IMAGE_TAMPERING | ProcessTampering (プロセス イメージの変更) |
26 | SYSMONEVENT_FILE_DELETE_DETECTED | FileDeleteDetected (ファイルの削除がログに記録されました) |
使用可能なイベントログは次のコマンドで確認できます。
$ sudo sysmon -s
event nameのみ拾ってみたものです。
$ sudo sysmon -s | grep 'event name' | sed 's/.*event name=\"\(.*\)\" value=\"\([0-9]*\)[^0-9].*/\2\t\1/'
255 SYSMONEVENT_ERROR |
※設定に関しての詳細は、マニュアル等で確認してください。
Microsoft:Sysmon v 13.33
LogStare Collectorの設定
LogStare Collectorのインストール方法につきましては下記のマニュアルをご覧ください。
Linux版インストール方法
Windows版インストール方法
LogStare CollectorにSysmonForLinuxのログを受信できるように設定します。
514ポートのUDP受信できて、監視対象のデバイスからSyslogの転送が行われている状態とします。Firewalldでブロックされている場合、514ポートのUDP受信を可能にするには以下のコマンドを入力します。
$ sudo firewall-cmd –-add-port=514/udp –-permanent $ sudo firewall-cmd –-reload
タイムゾーンの確認
画面左上のギアアイコンをクリックして、メニューの「環境設定」をクリックします。
環境設定画面のタイムゾーンが、「(UTC+09:00) Japan Standard Time」となっていることを確認します。
日本時間に設定されていない場合は、LogStare Collectorサーバで以下のコマンドを実行して、タイムゾーンを変更してください。
$ sudo timedatectl set-timezone Asia/Tokyo
監視対象デバイスの追加
画面左上メニューのスパナアイコンをクリックして、「デバイス・グループ」をクリックします。
監視・ログ収集設定のデバイス・グループ画面が開いたら、
デバイス一覧の右上の+ボタンをクリックします。
デバイスの追加ダイアログが表示され、任意の「デバイス名」と、監視対象の「IPアドレス」を入力して、下部の追加ボタンをクリックすると、監視対象のデバイスが追加されます。
監視対象デバイスのSYSLOG収集をできるようにする
デバイスが追加されたら、①「監視・収集」をクリックして、追加したデバイスを②「SysmonOnAlmaLinux」クリックして選択します。③「+」ボタンをクリックして、監視・収集追加ダイアログを開きます。
ラジオボタンの収集をクリックして、ログ収集方式を選択してくださいセレクタから「SYSLOG収集」を選択します。
SYSLOG収集用の入力項目が追加されますので、「デバイス・アプリケーション種類」に任意の名前を入力します。
次に「ファシリティ」と「プライオリティ」の「全て選択/解除」ボタンをクリックして項目すべてをチェック状態にします。
下部の追加ボタンをクリックすると、監視対象デバイスのSYSLOGを収集するようになります。
LogStare Collectorからのログ取得例
よくあるバッチ処理の仕様は以下のとおりとします。
|
バッチ処理の起動を確認する
左上メニューアイコンの虫眼鏡の下にある紙を重ねたアイコンをクリックして、「検索・タウンロード」をクリックします。
監視対象のデバイスをクリックして展開し、フォルダアイコンの「SYSLOG-sysmon」をクリックして検索対象に設定します。(※設定したデバイス・アプリケーション種類名によって変わります)
画面上部の検索期間をクリックすると、日付入力ポップアップが表示されます。バッチ処理なので、「今日」や「昨日」を設定するか、数日前であれば「自分で設定」で検索したい期間に設定してください。
検索期間横にある、検索キーワードを適切なもの(今回はcalc.awk)に設定し、検索ボタンをクリックします。
該当するログの検索結果が表示されます。
実際は以下のコマンドを入力しましたが、ワイルドカードは展開されて記録されています。
# nohup awk -f clac.awk input_*.txt &
SysmonForLinuxのログ内容はUTCで打刻されていますので、左部に表示されているLogStare Collectorが受信した赤丸の日時で確認した方が確認しやすいです。
SysmonForLinuxのイベントIDが1となっていて、バッチプログラムの起動でプロセスが作成されたことが確認できました。
エラーファイルが出力されていないか確認する
検索キーワードにエラーファイルの接頭辞「error_」を入力して検索します。
「データがありません」と表示され、検索結果にヒットしていないので、エラーはなかったと判断できました。
バッチ実行後に結果ファイルが出力されているか確認する
検索キーワードに集計ファイルの接頭辞「summary_」を入力して検索します。
約2時間後にイベントIDが11のファイル作成されたときに記録されるログを検索できたので、無事にファイル作成できていることが確認できました。
LogStare Collectorとの組み合わせで強力なツールに
LogStare Collectorは、SysmonForLinuxと組み合わせて、いつプロセスが実行され、いつファイル生成されたか等を後からログ検索ができる強力なツールにもなります。有償版と同じ機能を1か月使える試用版(1か月後も一部制限付きですが、そのままご使用できます)なら、開発サーバやステージング環境のログ収集にも十分な機能を持っています。是非ダウンロードしてお使いください。
ダウンロードはこちら↓
試用版ダウンロード
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。