45
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SplunkAdvent Calendar 2024

Day 18

Linuxサーバのセキュリティ監視プラクティス (概要編)

Last updated at Posted at 2024-12-17

はじめに

  • 近年Linux環境を狙った攻撃(ランサムウェアなど)も増えている

「ランサムウェア:Windowsに比べれば少ないものの、Linux向けのランサムウェアも存在します。2022年初旬から2023年までに、Linux向けランサムウェアの攻撃が62%増加したことが、2023年上半期セキュリティレポートで報告されています。例として、金融機関を対象としたKillDisk というランサムウェアがあります.」

引用元:増加するLinux向けランサムウェア攻撃:2022年年間のLinuxにおける脅威動向分析

  • MITRE ATT&CKの対応OSの中にもLinux環境の戦略と戦術が当然のようにある

  • Splunk Security ContentsにもLinux関連のルールが充実してきた
    スクリーンショット 2024-12-15 21.47.20.png

  • WindowsでおなじみのSysmonにLinux OS用のモジュールが出ている

    • 数年前はosqueryを使いましょうと言っていたが、windowsでも慣れているsysmonは統一して監視もしやすいと個人的には思っている
  • 以上の背景からLinuxサーバのセキュリティ監視ベストプラクティスをまとめていくシリーズを始める(まずは概要編)


Linux環境のセキュリティ監視代表ログソース

  • 監視に有用なログソース選別の方法として、Splunk Security ContentsからLinuxに関するAnalytics Storyを元に必要なデータおよびルールを見繕ってみた

  • というのもMITRE ATT&CKのLinuxにおけるDetection方法を見てみるとざっと以下の様なログソースが必要と出てくる

    • Chatgptに要約してもらったので全件網羅されているかは不明
      スクリーンショット 2024-12-15 22.01.59.png
  • この中でもsysmonauditdが比較的各ステップで出てくることに気づく

  • Splunk Security ContentsのLinux環境における検知ルールを見ても、sysmonauditdが大半を占めている事がわかる

  • 例:Compromised Linux HostルールパックはAuditdを使う
    スクリーンショット 2024-12-15 22.15.50.png

  • 例:Linux livong off the landルールパックはSysmonも使っている
    スクリーンショット 2024-12-15 22.17.21.png

  • 以上の事から、まず検知ルールが用意されているauditdとsysmonを中心に調査をしてみる

    • 取り込み方法、ログ量、検知テストなど

検証環境

スクリーンショット 2024-12-16 21.26.48.png

auth.log /secure.log

  • 概要

    • いきなり上記で全く触れていないデータソースの紹介だが、もっとも簡単に収集ができる定番ログとしてこの2種は紹介しておきたい
    • Authログは主にubuntu、SecureログはRHEL系で出力される
      スクリーンショット 2024-12-15 22.22.41.png
  • 取り込み方法

    • secure.logの場合
    • auth.logの場合
      • 専用のTAは無いが、secure.logと同じでsourcetype=linux_secureを利用すればパースしてくれる。データ構造は近い模様
        スクリーンショット 2024-12-16 18.14.06.png

- 容量: 1ホスト 数MB未満/day程度(※ラボ環境)
スクリーンショット 2024-12-16 15.58.21.png


Auditd

  • 概要
    • Linuxカーネルの監査フレームワーク(Audit Framework)の一部で、セキュリティ監査ログを収集・管理するデーモン
  • Auditdのインストールと設定は次回別記事で紹介します
  • 取り込み方法
  • 容量:
    • 1ホスト 2-3GB/day程度(※ラボ環境)
      • Splunk IndexerサーバのためSplunk関連の挙動を記録しすぎている可能性が高いので、後日Forwaderを入れたubuntuでテスト予定
        スクリーンショット 2024-12-16 18.23.16のコピー.png

Sysmon for Linux

  • 概要
    • Microsoftが開発した簡易EDRのLinux版です
  • Sysmon for Linuxの導入
    • githubからモジュールを手に入れてインストール
    • ロギング条件をまとめたConfigをインポート
      • schmaversionはインストール時に適用されたdefault値を利用してください
vi config.xml 

<Sysmon schemaversion="4.81">
<EventFiltering>
    <!-- Event ID 1 == ProcessCreate. Log all newly created processes -->
    <RuleGroup name="" groupRelation="or">
      <ProcessCreate onmatch="exclude"/>
    </RuleGroup>
    <!-- Event ID 3 == NetworkConnect Detected. Log all network connections -->
    <RuleGroup name="" groupRelation="or">
      <NetworkConnect onmatch="exclude"/>
    </RuleGroup>
    <!-- Event ID 5 == ProcessTerminate. Log all processes terminated -->
    <RuleGroup name="" groupRelation="or">
      <ProcessTerminate onmatch="exclude"/>
    </RuleGroup>
    <!-- Event ID 9 == RawAccessRead. Log all raw access read -->
    <RuleGroup name="" groupRelation="or">
      <RawAccessRead onmatch="exclude"/>
    </RuleGroup>
    <!-- Event ID 10 == ProcessAccess. Log all open process operations -->
    <RuleGroup name="" groupRelation="or">
      <ProcessAccess onmatch="exclude"/>
    </RuleGroup>
    <!-- Event ID 11 == FileCreate. Log every file creation -->
    <RuleGroup name="" groupRelation="or">
      <FileCreate onmatch="exclude">
            <TargetFilename condition="begin with">/opt/splunkforwarder/var/lib/splunk/modinputs/journald</TargetFilename> <!--Exclude Splunk Modinput Journal-->
      </FileCreate>
    </RuleGroup>
    <!--Event ID 23 == FileDelete. Log all files being deleted -->
    <RuleGroup name="" groupRelation="or">
      <FileDelete onmatch="exclude"/>
    </RuleGroup>
  </EventFiltering>
</Sysmon>
  • 取り込み方法
    • Splunk Add-on for Sysmon for Linuxを使うとCIMにもマッピングしてくれる
    • inputs設定はlinuxのjournaldをモニタリングする設定がdefaultで有効になっている
cat /opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/local/inputs.conf

[journald://sysmon]
index = linuxsysmon
  • btoolでinputs設定を確認してみると、30秒間隔でjournaldに書きがしていることが分かる
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/local# /opt/splunk/bin/splunk btool inputs list --debug --app=Splunk_TA_sysmon-for-linux

/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/local/inputs.conf   [journald://sysmon]
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/local/inputs.conf   index = linuxsysmon
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/default/inputs.conf interval = 30
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/default/inputs.conf journalctl-exclude-fields = __MONOTONIC_TIMESTAMP,__SOURCE_REALTIME_TIMESTAMP
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/default/inputs.conf journalctl-filter = _SYSTEMD_UNIT=sysmon.service
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/default/inputs.conf journalctl-include-fields = PRIORITY,_SYSTEMD_UNIT,_SYSTEMD_CGROUP,_TRANSPORT,_PID,_UID,_MACHINE_ID,_GID,_COMM,_EXE
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/default/inputs.conf journalctl-quiet = true
/opt/splunk/etc/apps/Splunk_TA_sysmon-for-linux/default/inputs.conf sourcetype = sysmon:linux
  • 容量

    • 1ホスト 3-4GB/day程度(※ラボ環境)
      • Splunk IndexerサーバのためSplunk関連の挙動を記録しすぎている可能性が高いので、後日Forwaderを入れたubuntuでテスト予定
        スクリーンショット 2024-12-16 18.23.16.png
  • TIPS: journaldから明示的にsyslog転送をNOにする

    • syslogファイルがsysmonログで溢れます。。。私のubuntu環境の場合、defaultでsyslogにも書き出してしまう設定になっていたため、syslog転送を無効にしました
sudo nano /etc/systemd/journald.conf
ForwardToSyslog=no

sudo systemctl restart systemd-journald

AuditdとSysmonの違い

  • Chatgptに「Linux環境のセキュリティ監視におけるauditd とsysmonの用途の違いは?」聞いた際の回答サマリ
    スクリーンショット 2024-12-16 19.00.20.png

  • 実際にMITRE ATT&CK のT1548.003で使われるsudoコマンドを叩いてどのように記録されるか検証してみた

スクリーンショット 2024-12-16 21.03.39.png

(Detection: Linux APT Privilege Escalationの解説)
Linux システム上で sudo を介して昇格した権限による Advanced Package Tool (APT) の使用を検出します。この分析では、EDR(Endpoint Detection and Response)テレメトリを活用して、APTコマンドがsudo権限で実行されるプロセスを特定します。このアクティビティは、ユーザがrootとしてシステムコマンドを実行できることを示しており、rootシェルへの不正アクセスにつながる可能性があるため、重要な意味を持ちます。悪意があると確認された場合、攻撃者は特権を昇格させ、任意のコマンドを実行し、影響を受けたシステムを完全に制御できるようになり、深刻なセキュリティリスクを引き起こす可能性があります。

  • ページ下段にテスト用のDatasetが公開されている
    スクリーンショット 2024-12-16 21.10.21.png
  • datasetのイベントを見てみるとコマンドサンプルがあるので試してみる
    スクリーンショット 2024-12-16 21.11.05.png
sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/sh
  • Security ContentsのSearchを実行
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process="*apt*" AND Processes.process="*APT::Update::Pre-Invoke::*" AND Processes.process="*sudo*" by Processes.dest Processes.user Processes.parent_process_name Processes.process_name Processes.process Processes.process_id Processes.parent_process_id Processes.process_guid 
| `drop_dm_object_name(Processes)` 
| `security_content_ctime(firstTime)` 
| `security_content_ctime(lastTime)` 
| `linux_apt_privilege_escalation_filter`
  • 結果、sysmonで記録されている捉えられることがわかりました
    スクリーンショット 2024-12-16 21.09.16.png

参考設定


次回の記事ネタ

  • Auditdの有効化及び設定方法
  • Sysmon for Linuxのチューニング方法 (2024.12.22リリース)
45
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
53

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?