ログと検知
ログの保存先と記録内容は、ディストリビューション、systemd、auditd、EDR、コンテナ設定によって変わる。writeup では、記録され得る場所と、実際に確認した場所を区別する。
調査中に対象の状態を変えた場合は、このページの記録欄を使う。権限境界の調べ方はLinux の概要から各ページを参照する。
追加確認例:
journalctl -u <service> --no-pagerjournalctl _COMM=sudo --no-pagergrep -RniE 'sudo|session opened|authentication failure' /var/log/auth.log /var/log/secure 2>/dev/nullgrep -RniE '<suspicious-path>|<payload-marker>' /var/log /var/www 2>/dev/nullausearch -x sudoausearch -f <path>ausearch は auditd がある場合の確認例である。監査設定がない環境では結果が出ない。
一般論 で残しやすい箇所:
- sudo 実行は
/var/log/auth.log、/var/log/secure、journald に残ることが多い。 - systemd サービスは
journalctl -u <service>で、標準出力、標準エラー出力、再起動を確認できる場合がある。 - auditd で必要な監査ルールが有効なら、chmod、chown、execve、ファイルへの書き込み、ネットワーク接続を追える場合がある。
- Web アクセスログ: アップロード、
../、.pickle.gz、.pt、.php、管理画面への POST。 - sudo と認証ログ:
sudo -l、NOPASSWDでの実行、su root、SSH ログイン。 - systemd のジャーナル: サービスの再起動、oneshot と timer、root 権限のスクリプトの実行。
- auditd: プロセスの実行、ファイルの作成、chmod、chown、ネットワーク接続。
- EDR: リバースシェル、
/dev/tcp、python -c、bash -c、通常と異なる子プロセス。 - Unix ドメインソケット: 接続、権限変更、想定外のクライアント。
- ファイルの変化: SUID ビット、シンボリックリンクの作成、書き込み可能なプラグインやチェックポイント、root 所有の一時ファイル。
- コンテナ: Docker ソケットへのアクセス、特権コンテナ、capability、bind mount の権限変更。
誤って異常に見えやすいもの:
- 正規のバックアップ、監視、学習ジョブが大量のログやモデル、チェックポイントを作る。
- 開発サーバや HMR が
/@hmrやベンダーのアセットを多く返す。 - 管理 UI の
systemctl statusは、正常運用でも呼ばれる。 - PDF、OCR、ML の処理は、高い CPU と一時ファイルを通常時にも生成する。
残りやすい痕跡
Section titled “残りやすい痕跡”- auditd が導入されていることと、該当イベントを見たことは別である。
ausearchとjournalctlで、chmod、実行、接続を取る。 - Web のアクセスログには、管理画面や localhost の UI へのリクエスト、
../を含むパス、アップロードが残る場合がある。モデルファイルの作成は、アプリのログやファイルの状態でも確認する。 - daemon が検知語で隔離アーカイブを作る場合、そのログ行とアーカイブが副作用の記録になる。
- 誰でも書けるディレクトリに作った SUID root binary は、ファイル権限の変化として残る。
共有マウントとアップロードで作成したファイルは、後片付け後の stat 結果まで記録する。パケットを取得した場合は、実行ユーザーとネットワーク名前空間も記録する。
状態変更の記録
Section titled “状態変更の記録”操作の前に、戻し方を書く。
対象:変更内容:元の状態:実行ユーザー:復旧コマンド:復旧確認:未確認:防御側の対策
Section titled “防御側の対策”- root 権限のサービスは、低権限ユーザーが書けるディレクトリを読まない構成にする。必要なら、所有者、アクセス権、inode を使用直前に再確認する。
- Web の公開ディレクトリと、解析ワーカーの入力を分ける。
- unsafe deserialization を使うファイル形式を、信頼境界の外から受け取らない。
- localhost のサービスにも認証と権限制御を設ける。
- Unix ドメインソケットは接続できるユーザーを絞り、接続時に相手の資格情報を検証する。
- sudo で実行するスクリプトは、絶対パスを使い、許可する入力を限定し、環境変数と root が読むパスを管理する。
- systemd unit に
NoNewPrivileges、PrivateTmp、ProtectSystem、ReadWritePaths、専用のUserを設定する。 - bind mount は必要最小限にし、コンテナ内のユーザーからホスト側の権限を緩められないようにする。
- auditd や EDR では、SUID ビットの追加、想定外の
.pth、.pt、シンボリックリンク、/dev/tcp、python -c、sudo 実行、Unix ドメインソケットへの接続を監視する。

