Linux Audit Daemon ログを収集する
このドキュメントでは、Bindplane を使用して Linux Audit Daemon(auditd)ログを Google Security Operations に取り込む方法について説明します。
Linux Audit Daemon は、Linux 監査システムのユーザー空間コンポーネントです。ファイル アクセス、システムコール、認証イベント、SELinux 拒否など、システム上のセキュリティ関連のイベントを記録します。Auditd ログは、Linux ホストでのコンプライアンス モニタリング、侵入検知、フォレンジック分析に不可欠です。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス。
- Windows Server 2016 以降、または
systemdを使用する Linux ホスト。 - プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
- auditd を実行している Linux ホストに対する root または sudo アクセス権。
- ソース Linux ホストに
auditdパッケージがインストールされ、実行されている。 - 移行元の Linux ホストにインストールされた
audispd-pluginsパッケージ(audisp-syslogプラグインを提供します)。
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
- 取り込み認証ファイル をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows のインストール
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
その他のインストール リソース
その他のインストール オプションについては、Bindplane エージェントのインストール ガイドをご覧ください。
syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルにアクセスします。
- Linux:
/status observiq-otel-collector/config.yaml - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- Linux:
config.yamlファイルを次のように編集します。receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: '<your_customer_id>' endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'AUDITD' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- 自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。
<your_customer_id>は、実際の顧客 ID に置き換えます。/path/to/ingestion-authentication-file.jsonの値を、取り込み認証ファイルを取得するの手順で認証ファイルを保存したファイルパスに更新します。
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには:
次のコマンドを実行します。
sudo systemctl restart observiq-otel-collectorサービスが実行されていることを確認します。
sudo systemctl status observiq-otel-collectorログでエラーを確認します。
sudo journalctl -u observiq-otel-collector -f
Windows で Bindplane エージェントを再起動するには:
次のいずれかのオプションを選択します。
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
net stop observiq-otel-collector && net start observiq-otel-collector- サービス コンソール:
Win+Rキーを押して「services.msc」と入力し、Enter キーを押します。- observIQ OpenTelemetry Collector を見つけます。
- 右クリックして [再起動] を選択します。
サービスが実行されていることを確認します。
sc query observiq-otel-collectorログでエラーを確認します。
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
syslog 経由でログを転送するように auditd を構成する
audisp syslog プラグインは監査イベントを syslog に転送し、syslog は Bindplane エージェントに転送します。これは、auditd ログの転送に推奨される方法です。
audisp syslog プラグインをインストールする
- root 権限または sudo 権限で auditd を実行している Linux ホストにログインします。
次の方法で、
audispd-pluginsパッケージをインストールします。- RHEL/CentOS/Fedora:
sudo yum install audispd-plugins- Debian/Ubuntu:
sudo apt install audispd-plugins
syslog プラグインを構成する
syslog プラグインの構成ファイルを編集します。
sudo nano /etc/audit/plugins.d/syslog.confファイルに次の値を設定します。
active = yes direction = out path = /sbin/audisp-syslog type = always args = LOG_LOCAL6 format = string- active:
yesに設定すると、プラグインが有効になります。 - path:
audisp-syslogバイナリのパス。 - type: プラグインを外部プログラムとして実行するには、
alwaysに設定します。 - args: 使用する syslog ファシリティ。監査ログを他の syslog メッセージと分離するには、
LOG_LOCAL6を使用することをおすすめします。 - format: syslog に適したテキスト形式でイベントを渡すには、
stringに設定します。
- active:
監査ルールを構成する(省略可)
監査ルール ファイルを編集して、キャプチャするイベントを定義します。
sudo nano /etc/audit/rules.d/audit.rulesモニタリング要件に基づいてルールを追加します。次に例を示します。
## Delete all existing rules -D ## Set buffer size (increase for high-volume systems) -b 8192 ## Set failure mode (1 = printk, 2 = panic) -f 1 ## Monitor authentication-related files -w /etc/passwd -p wa -k identity -w /etc/group -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/sudoers -p wa -k sudoers ## Monitor login events -w /var/log/faillog -p wa -k logins -w /var/log/lastlog -p wa -k logins ## Monitor process execution -a always,exit -F arch=b64 -S execve -k exec ## Monitor network configuration changes -a always,exit -F arch=b64 -S sethostname -S setdomainname -k network ## Make the configuration immutable (must be the last rule) -e 2新しい監査ルールを読み込みます。
sudo augenrules --load
auditd を再起動する
auditd サービスを再起動して、プラグインとルールの変更を適用します。
sudo service auditd restart
監査ログを Bindplane に転送するように rsyslog を構成する
監査ログ転送用の新しい rsyslog 構成ファイルを作成します。
sudo nano /etc/rsyslog.d/audit-forward.conf次の行を追加して、UDP 経由で Bindplane エージェントにログを転送します。
local6.* @<BINDPLANE_IP>:514rsyslog を再起動して変更を適用します。
sudo systemctl restart rsyslog
ログ転送を確認する
ソース Linux ホストで、テスト監査イベントを生成します。
sudo auditctl -w /tmp/test_audit -p wa -k test_chronicleファイルをタップしてウォッチをトリガーします。
touch /tmp/test_auditBindplane エージェント ホストで、ログが受信されていることを確認します。
sudo journalctl -u observiq-otel-collector -f
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
acct |
target.user.userid |
値は acct フィールドから取得されます。 |
addr |
principal.ip |
有効な IP アドレスの場合、値は addr フィールドから取得されます。 |
arch |
additional.fields |
キー「arch」で Key-Value ペアとして追加されます。 |
auid |
principal.user.userid |
値は auid フィールドから取得されます。監査ユーザー ID として使用されます。 |
comm |
target.process.command_line |
値は comm フィールドから取得されます。 |
cwd |
additional.fields |
キー「cwd」で Key-Value ペアとして追加されます。 |
exe |
target.process.file.full_path |
値は exe フィールドから取得されます。 |
exit |
additional.fields |
キー「exit」で Key-Value ペアとして追加されます。 |
gid |
principal.user.group_identifiers |
値は gid フィールドから取得されます。 |
hostname |
principal.hostname |
値は hostname フィールドから取得されます。 |
key |
security_result.detection_fields |
キー「audit_key」で Key-Value ペアとして追加されます。 |
msg |
metadata.description |
msg フィールドから解析されます。監査イベント メッセージが含まれます。 |
name |
target.file.full_path |
該当する場合は、name フィールドから値を取得します。 |
node |
principal.hostname |
hostname が存在しない場合は、node フィールドから値が取得されます。 |
op |
metadata.product_event_type |
op フィールド(オペレーション タイプ)から取得された値。 |
pid |
principal.process.pid |
値は pid フィールドから取得されます。 |
ppid |
principal.process.parent_process.pid |
値は ppid フィールドから取得されます。 |
res |
security_result.action |
res が「success」または「1」の場合は「ALLOW」に設定されます。res が「failed」または「0」の場合、「BLOCK」に設定します。 |
ses |
network.session_id |
値は ses フィールド(セッション ID)から取得されます。 |
subj |
principal.process.file.full_path |
subj フィールド(SELinux サブジェクト コンテキスト)から取得された値。 |
syscall |
additional.fields |
キー「syscall」で Key-Value ペアとして追加されます。 |
terminal |
additional.fields |
キー「terminal」で Key-Value ペアとして追加されます。 |
type |
metadata.product_event_type |
type フィールドから取得された値(監査レコード タイプ(SYSCALL、USER_LOGIN、EXECVE など))。 |
uid |
principal.user.userid |
値は uid フィールドから取得されます。 |
metadata.event_type |
監査レコード タイプから派生します。ログイン イベントの場合は「USER_LOGIN」、ログアウト イベントの場合は「USER_LOGOUT」、実行イベントの場合は「PROCESS_LAUNCH」、ファイル イベントの場合は「FILE_MODIFICATION」に設定します。デフォルトは「GENERIC_EVENT」です。 | |
metadata.product_name |
「auditd」に設定します。 | |
metadata.vendor_name |
「Linux」に設定します。 | |
home |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
shell |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
name |
event.idm.read_only_udm.target.user.userid |
変更履歴からマッピング |
name |
event.idm.read_only_udm.target.group.group_display_name |
変更履歴からマッピング |
UID |
event.idm.read_only_udm.target.user.product_object_id |
変更履歴からマッピング |
GID |
event.idm.read_only_udm.target.user.group_identifiers |
変更履歴からマッピング |
GID |
event.idm.read_only_udm.target.group.product_object_id |
変更履歴からマッピング |
key_type |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
hash |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
key_fingerprint |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
user |
event.idm.read_only_udm.target.user.userid |
変更履歴からマッピング |
error_detail1 |
event.idm.read_only_udm.security_result.summary |
変更履歴からマッピング |
service_name |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
ssh_disconnect_code |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
labels.bp_csoc |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
labels.bp_env_id |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
labels.log.file.name |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
resource.labels.node_id |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
intermediary_host |
event.idm.read_only_udm.intermediary.hostname |
変更履歴からマッピング |
PWD |
event.idm.read_only_udm.target.file.full_path |
変更履歴からマッピング |
log_details |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
indicator.SUID |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.UID |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.AUID |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
type_crypto_props.msg |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
usr |
event.idm.read_only_udm.principal.user.userid |
変更履歴からマッピング |
pi |
event.idm.read_only_udm.principal.process.pid |
変更履歴からマッピング |
cmnd |
event.idm.read_only_udm.target.process.command_line |
変更履歴からマッピング |
proctitle_value |
event.idm.read_only_udm.principal.process.file.full_path |
変更履歴からマッピング |
filename |
event.idm.read_only_udm.principal.process.file.names |
変更履歴からマッピング |
filepath |
event.idm.read_only_udm.target.file.full_path |
変更履歴からマッピング |
uid |
event.idm.read_only_udm.principal.user.userid |
変更履歴からマッピング |
acct |
event.idm.read_only_udm.principal.user.user_display_name |
変更履歴からマッピング |
exe |
event.idm.read_only_udm.target.process.file.full_path |
変更履歴からマッピング |
pid |
event.idm.read_only_udm.principal.process.pid |
変更履歴からマッピング |
auid |
event.idm.read_only_udm.about.user.userid |
変更履歴からマッピング |
ses |
event.idm.read_only_udm.network.session_id |
変更履歴からマッピング |
addr |
event.idm.read_only_udm.principal.ip と event.idm.read_only_udm.principal.asset.ip |
変更履歴からマッピング |
subj |
event.idm.read_only_udm.additional.fields |
変更履歴からマッピング |
res |
event.idm.read_only_udm.security_result.summary |
変更履歴からマッピング |
op |
event.idm.read_only_udm.security_result.summary |
変更履歴からマッピング |
msg_value |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
grantors_value |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.msg |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.grantors |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
terminal |
event.idm.read_only_udm.principal.application |
変更履歴からマッピング |
sec_result |
event.idm.read_only_udm.security_result |
変更履歴からマッピング |
hostname |
event.idm.read_only_udm.principal.hostname |
変更履歴からマッピング |
indicator.mode |
event.idm.read_only_udm.src.user.attribute.permissions |
変更履歴からマッピング |
indicator.nametype |
event.idm.read_only_udm.security_result.rule_name |
変更履歴からマッピング |
indicator.cap_frootid |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.cap_fver |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.cap_fi |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.cap_fp |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
indicator.cap_fe |
event.idm.read_only_udm.security_result.detection_fields |
変更履歴からマッピング |
OUID |
event.idm.read_only_udm.principal.user.userid |
変更履歴からマッピング |
OGID |
event.idm.read_only_udm.principal.group.group_display_name |
変更履歴からマッピング |
action_data |
event.idm.read_only_udm.security_result.action_details |
変更履歴からマッピング |
target_email |
event.idm.ready_only_udm.target.user.email_addresses |
変更履歴からマッピング |
target_port |
event.idm.ready_only_udm.target.port |
変更履歴からマッピング |
status |
event.idm.ready_only_udm.security_result.action_details |
変更履歴からマッピング |
to_email |
event.idm.ready_only_udm.network.email.to |
変更履歴からマッピング |
target_hostname |
event.idm.ready_only_udm.target.hostname |
変更履歴からマッピング |
"relay_data" |
event.idm.ready_only_udm.additional.fields |
変更履歴からマッピング |
"delays_data" |
event.idm.ready_only_udm.additional.fields |
変更履歴からマッピング |
"delay_data" |
event.idm.ready_only_udm.additional.fields |
変更履歴からマッピング |
and "dns_data" |
event.idm.ready_only_udm.additional.fields |
変更履歴からマッピング |
bytes_sent |
event.idm.ready_only_udm.network.sent_bytes |
変更履歴からマッピング |
bytes_received |
event.idm.ready_only_udm.network.received_bytes |
変更履歴からマッピング |
response_code |
event.idm.ready_only_udm.network.http.response_code |
変更履歴からマッピング |
principal_user_name |
principal.user.userid |
変更履歴からマッピング |
remote |
principal.ip |
変更履歴からマッピング |
method |
network.http.method |
変更履歴からマッピング |
path |
principal.file.full_path |
変更履歴からマッピング |
code |
additional.fields |
変更履歴からマッピング |
size |
principal.file.size |
変更履歴からマッピング |
agent |
network.http.user_agent |
変更履歴からマッピング |
az |
principal.location.name |
変更履歴からマッピング |
ec2_instance_id |
principal.asset.product_object_id |
変更履歴からマッピング |
private_ip |
principal.ip |
変更履歴からマッピング |
ProviderName |
additional.fields |
変更履歴からマッピング |
Version |
additional.fields |
変更履歴からマッピング |
Task |
additional.fields |
変更履歴からマッピング |
EventRecordID |
additional.fields |
変更履歴からマッピング |
ThreadID |
additional.fields |
変更履歴からマッピング |
messageType |
target.resource.attribute.labels |
変更履歴からマッピング |
owner |
principal.user.userid |
変更履歴からマッピング |
logevent.id |
metadata.product_log_id |
変更履歴からマッピング |
logGroup |
secu_result.about.resource.name |
変更履歴からマッピング |
logStream |
secu_result.about.resource.attribute.labels |
変更履歴からマッピング |
ip_addr |
principal.ip |
変更履歴からマッピング |
gd |
secu_result.description |
変更履歴からマッピング |
process |
target.application |
変更履歴からマッピング |
pid |
target.process.pid |
変更履歴からマッピング |
status_code |
network.http.response_code |
変更履歴からマッピング |
url |
network.http.referral_url |
変更履歴からマッピング |
useragent |
network.http.user_agent |
変更履歴からマッピング |
request |
additional.fields |
変更履歴からマッピング |
tls_version |
network.tls.version |
変更履歴からマッピング |
hostname_is |
principal.hostname |
変更履歴からマッピング |
referrer |
network.http.referral_url |
変更履歴からマッピング |
metadata.event_type |
USER_LOGIN |
変更履歴からマッピング |
metadata.event_type |
PROCESS_UNCATEGORIZED |
変更履歴からマッピング |
srcIP |
principal.ip |
変更履歴からマッピング |
username |
principal.user.user_display_name |
変更履歴からマッピング |
type_syscall_props.msg |
additional.fields |
変更履歴からマッピング |
sw", "sw_type", and "subj |
security_result.detection_fields |
変更履歴からマッピング |
indicator.SYSCALL |
security_result.detection_fields |
変更履歴からマッピング |
exe |
principal.process.file.full_path |
変更履歴からマッピング |
target.user.userid |
principal.user.userid |
変更履歴からマッピング |
target_user_name |
target.user.userid |
変更履歴からマッピング |
field |
field33 |
変更履歴からマッピング |
fp |
network.tls.client.certificate.sha256 |
変更履歴からマッピング |
pid |
principal.process.pid |
変更履歴からマッピング |
syslog-tag |
security_result.detection_fields |
変更履歴からマッピング |
inter_ip |
intermediary.ip |
変更履歴からマッピング |
inter_hostname |
intermediary.hostname |
変更履歴からマッピング |
grp |
target.group.group_display_name |
変更履歴からマッピング |
id |
about.user.userid |
変更履歴からマッピング |
acct |
target.user.user_display_name |
変更履歴からマッピング |
uid |
principal.user.userid |
変更履歴からマッピング |
auid |
about.user.userid |
変更履歴からマッピング |
auid |
target.user.userid |
変更履歴からマッピング |
op" and "id |
security_result.summary |
変更履歴からマッピング |
op" and "acct |
security_result.summary |
変更履歴からマッピング |
labels.compute.googleapis.com/resource_name","jsonPayload._HOSTNAME" , "CollectorHostName", "HOSTNAME", and "Computer |
principal.hostname |
変更履歴からマッピング |
HostIP |
principal.ip |
変更履歴からマッピング |
ProcessID" and "jsonPayload._PID |
principal.process.pid |
変更履歴からマッピング |
SyslogMessage |
metadata.description |
変更履歴からマッピング |
TenantId", "_ItemId", "_Internal_WorkspaceResourceId", "_ResourceId", and "Facility |
additional.fields |
変更履歴からマッピング |
SeverityLevel |
security_result.severity |
変更履歴からマッピング |
SourceSystem |
principal.platform |
変更履歴からマッピング |
jsonPayload._COMM |
principal.application |
変更履歴からマッピング |
jsonPayload._EXE |
target.process.file.full_path |
変更履歴からマッピング |
jsonPayload._AUDIT_FIELD_FILE |
target.file.full_path |
変更履歴からマッピング |
jsonPayload._AUDIT_FIELD_HASH |
target.file.hash |
変更履歴からマッピング |
jsonPayload._AUDIT_SESSION |
network.session_id |
変更履歴からマッピング |
jsonPayload._PPID |
principal.process.parent_process.pid |
変更履歴からマッピング |
jsonPayload._AUDIT_FIELD_A0", "jsonPayload._AUDIT_FIELD_A1", "jsonPayload._AUDIT_FIELD_A2", "jsonPayload._AUDIT_FIELD_A3", "jsonPayload._BOOT_ID", and "jsonPayload._AUDIT_FIELD_EXIT |
security_result.detection_fields |
変更履歴からマッピング |
id |
target.user.userid |
変更履歴からマッピング |
ID |
target.user.user_display_name |
変更履歴からマッピング |
user_name |
principal.user.userid |
変更履歴からマッピング |
principal_user_userid |
principal.user.userid |
変更履歴からマッピング |
vendor_name |
Linux |
変更履歴からマッピング |
product_name |
AuditD |
変更履歴からマッピング |
ip |
target.ip |
変更履歴からマッピング |
success |
security_result.summary |
変更履歴からマッピング |
syscall", "exit", "tty", "a0", "a1", "a2", "a3 |
security_result.about.labels |
変更履歴からマッピング |
変更履歴
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。