コンテンツにスキップ

ログと検知

ログの保存先と記録内容は、ディストリビューション、systemd、auditd、EDR、コンテナ設定によって変わる。writeup では、記録され得る場所と、実際に確認した場所を区別する。

調査中に対象の状態を変えた場合は、このページの記録欄を使う。権限境界の調べ方はLinux の概要から各ページを参照する。

追加確認例:

ターミナルウィンドウ
journalctl -u <service> --no-pager
journalctl _COMM=sudo --no-pager
grep -RniE 'sudo|session opened|authentication failure' /var/log/auth.log /var/log/secure 2>/dev/null
grep -RniE '<suspicious-path>|<payload-marker>' /var/log /var/www 2>/dev/null
ausearch -x sudo
ausearch -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 と一時ファイルを通常時にも生成する。
  • auditd が導入されていることと、該当イベントを見たことは別である。ausearch と journalctl で、chmod、実行、接続を取る。
  • Web のアクセスログには、管理画面や localhost の UI へのリクエスト、../ を含むパス、アップロードが残る場合がある。モデルファイルの作成は、アプリのログやファイルの状態でも確認する。
  • daemon が検知語で隔離アーカイブを作る場合、そのログ行とアーカイブが副作用の記録になる。
  • 誰でも書けるディレクトリに作った SUID root binary は、ファイル権限の変化として残る。

共有マウントとアップロードで作成したファイルは、後片付け後の stat 結果まで記録する。パケットを取得した場合は、実行ユーザーとネットワーク名前空間も記録する。

操作の前に、戻し方を書く。

対象:
変更内容:
元の状態:
実行ユーザー:
復旧コマンド:
復旧確認:
未確認:
  • 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 ドメインソケットへの接続を監視する。