SysmonForLinuxをUbuntuとAlmaLinuxに入れてログ取得

Windows/Linux

SysmonForLinuxをUbuntuとAlmaLinuxに入れてログ取ってみた

この記事は投稿日から3年以上経過しています。

今回は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

SysmonLinux-Ubuntu-AlmaLinux構成図

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
1 SYSMONEVENT_CREATE_PROCESS
2 SYSMONEVENT_FILE_TIME
3 SYSMONEVENT_NETWORK_CONNECT
4 SYSMONEVENT_SERVICE_STATE_CHANGE
5 SYSMONEVENT_PROCESS_TERMINATE
6 SYSMONEVENT_DRIVER_LOAD
7 SYSMONEVENT_IMAGE_LOAD
8 SYSMONEVENT_CREATE_REMOTE_THREAD
9 SYSMONEVENT_RAWACCESS_READ
10 SYSMONEVENT_ACCESS_PROCESS
11 SYSMONEVENT_FILE_CREATE
12 SYSMONEVENT_REG_KEY
13 SYSMONEVENT_REG_SETVALUE
14 SYSMONEVENT_REG_NAME
15 SYSMONEVENT_FILE_CREATE_STREAM_HASH
16 SYSMONEVENT_SERVICE_CONFIGURATION_CHANGE
17 SYSMONEVENT_CREATE_NAMEDPIPE
18 SYSMONEVENT_CONNECT_NAMEDPIPE
19 SYSMONEVENT_WMI_FILTER
20 SYSMONEVENT_WMI_CONSUMER
21 SYSMONEVENT_WMI_BINDING
22 SYSMONEVENT_DNS_QUERY
23 SYSMONEVENT_FILE_DELETE
24 SYSMONEVENT_CLIPBOARD
25 SYSMONEVENT_PROCESS_IMAGE_TAMPERING
26 SYSMONEVENT_FILE_DELETE_DETECTED

※設定に関しての詳細は、マニュアル等で確認してください。
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からのログ取得例

よくあるバッチ処理の仕様は以下のとおりとします。

  • バッチ処理を行うawkファイル名はcalc.awk
  • input_YYYYMMDD.csvファイルに対して、集計計算を行い、結果をsummary_YYYYMMDD.csvを出力する。ただし、実行日以外の日付は無視する。
  • 既知のエラーが発生した場合は、error_YYYYMMDD.logファイルにメッセージを書き込み、処理を中断して終了する。
  • 実行処理に2時間程度かかる。

バッチ処理の起動を確認する

左上メニューアイコンの虫眼鏡の下にある紙を重ねたアイコンをクリックして、「検索・タウンロード」をクリックします。

監視対象のデバイスをクリックして展開し、フォルダアイコンの「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か月後も一部制限付きですが、そのままご使用できます)なら、開発サーバやステージング環境のログ収集にも十分な機能を持っています。是非ダウンロードしてお使いください。

ダウンロードはこちら↓
試用版ダウンロード

若手エンジニア志望者を募集!支度金あり

LogStare Collector 無償版

記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。

当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。

SNMPを触ってみたSNMPとは?新入社員が生まれてはじめて触ってみた!前のページ

【2022/04/07更新】Spring Frameworkの脆弱性(CVE-2022-22965)に対する各UTM/IPS/WAFの対応状況について次のページ

ピックアップ記事

  1. 自社製品をAMIにしてAWSマーケットプレイスへ出品
  2. Zabbixヒストリデータのレポート生成について
  3. ログフォワーダー「okurun.jar」について
  4. IoT機器「Raspberry pi」とLogStare Collectorで温…

関連記事

  1. Windows/Linux

    Windowsファイアーウォールの設定方法|アウトバウンドを設定する

    Windowsファイアーウォールは、外部ネットワークからの通信を監視し…

  2. Windows/Linux

    Windows Server DNSのデバッグログをLogStare Collectorにて収集する…

    当記事では、Windows Server DNSのデバッグログをLog…

  3. Windows/Linux

    Windows Server 2016 (2019,2012) /Windows 10,11 にて、…

    当記事では、WMI における各種監査ログを出力するまでの設定方法を記載…

  4. Windows/Linux

    WindowsServerにaws cliバージョン2をインストールする方法について

    当記事では、WindowsServerにaws cliバージョン2をイ…

  5. Windows/Linux

    snmpd.confに関する個人的まとめ

    当記事は、新人研修の一環でLinuxのnet-snmpの設定ファイルs…

  6. Windows/Linux

    Windows Server (2019,2016, 2012 R2)にSNMP (v1, v2c)…

    当記事では、Windows Server にSNMP の設定を投入する…

若手エンジニア志望者を募集!
LogStare Collector 無償版
クラウド活用の「困った」「焦った」事例
月額200円でM356の監査ログの運用レベルUP LogStare M365
AWSのログ分析・モニタリングに 次世代のマネージド・セキュリティ・プラットフォーム LogStare

  1. NW機器

    SonicWall UTMにSyslog送信設定を追加する方法について
  2. SNMPを触ってみた

    ログ分析・監視テクニック

    SNMPとは?新入社員が生まれてはじめて触ってみた!
  3. AWS/Azure

    AWSマーケットプレイス上から無償版のLogStare Collectorを試す…
  4. NW機器

    Nutanix Prism ElementにおけるSNMP監視/REST API…
  5. 実践記事

    DNSキャッシュポイズニングやってみた
PAGE TOP