トレースの取得
Takumi Runner は、ワークフロー実行中に発生するプロセス・ネットワーク・ファイル操作を eBPF で網羅的にキャプチャします。このページでは、取得されるイベントの種類、データ形式、および生データへのアクセス方法を説明します。
取得の仕組み
Takumi Runner のトレース取得は、Linux カーネルの eBPF(extended Berkeley Packet Filter)テクノロジーを基盤としています。eBPF を利用することで、ワークフロー内で実行されるユーザーコードに一切の変更を加えることなく、カーネルレイヤで VM 内での動作をキャプチャできます。
キャプチャされるイベント
Takumi Runner の eBPF トレーサーは、以下のシステムコールレベルのイベントを記録します。
| イベント種別 | 説明 | 記録されるフィールド |
|---|---|---|
process_exec | プロセスの実行 | PID、コマンド名、ファイルパス、引数 |
net_connect | ネットワーク接続 | PID、接続先アドレス、ポート、プロトコル |
dns_query | DNS ルックアップ | PID、ホスト名 |
file_open | ファイルのオープン | PID、パス、フラグ |
file_write | ファイルへの書き込み | PID、パス、書き込みバイト数 |
1 回のジョブ実行で、数千から数万件のイベントが記録されます。
トレースの用途
収集されたトレースは、以下のようなセキュリティ分析に活用できます。
- サプライチェーン攻撃の検知 として、
npm installやpip install中に不審な外部ホストへの通信が発生していないかを確認する - インシデント調査 として、特定のジョブ実行中に
curlやwgetが実行されたか、~/.netrcなどの認証情報を含むファイルにアクセスがあったかを追跡する - ベースライン分析 として、正常なビルドのトレースと異常なビルドのトレースを比較し、差分を特定する
トレースのデータ形式
トレースデータは JSONL(改行区切り JSON) 形式で保存されます。1 行が 1 イベントに対応し、各行は独立した JSON オブジェクトです。すべてのイベントには共通フィールドとして type(イベント種別)と timestamp(発生時刻、ISO 8601 形式)が含まれます。
警告
以下に示すフィールド定義は、現時点での実装に基づく参考情報です。フィールドの追加・変更・削除が事前の通知なく行われる場合があります。
process_exec
プロセスの実行を記録します。
| フィールド | 型 | 説明 |
|---|---|---|
pid | number | プロセス ID |
comm | string | コマンド名 |
filename | string | 実行ファイルのパス |
args | string[] | コマンドライン引数 |
{
"type": "process_exec",
"timestamp": "2025-01-15T10:30:01Z",
"pid": 1234,
"comm": "npm",
"filename": "/usr/bin/npm",
"args": ["npm", "install"]
}
net_connect
ネットワーク接続を記録します。
| フィールド | 型 | 説明 |
|---|---|---|
pid | number | プロセス ID |
dst_addr | string | 接続先 IP アドレス |
dst_port | number | 接続先ポート番号 |
protocol | string | プロトコル(tcp / udp) |
{
"type": "net_connect",
"timestamp": "2025-01-15T10:30:02Z",
"pid": 1235,
"dst_addr": "104.16.23.35",
"dst_port": 443,
"protocol": "tcp"
}
dns_query
DNS ルックアップを記録します。
| フィールド | 型 | 説明 |
|---|---|---|
pid | number | プロセス ID |
hostname | string | 問い合わせたホスト名 |
{
"type": "dns_query",
"timestamp": "2025-01-15T10:30:02Z",
"pid": 1235,
"hostname": "registry.npmjs.org"
}