Stratoshark を利用して Linux のシステムコール解析をやってみる
はじめに
本記事では、Stratosharkというツールを使ってシステムコールを解析してみたいと思います。前半はStratosharkの紹介と使い方、後半は、Stratosharkを利用した解析のイメージを載せています。
本記事の対象者
システムコールの解析に興味がある方
動作環境
本記事ではWindows 11にStratosharkをインストールし、Ubuntu上のnginxのシステムコールを解析しています。動作環境については以下の通りです。
ホストOS(Windows 11)
- OS:Windows 11 Pro 64bit 24H2
- 仮想化ソフト:Oracle VM VirtualBox 7.0.18
- Sysdig解析ツール:Stratoshark 0.9.1
ゲストOS(Ubuntu)
- OS:Ubuntu 24.04.2 LTS(64bit)
- Sysdig:sysdig 0.40.1-rc2
- カーネル:6.8.0-60-generic
- nginx:1.24.0
1.Stratosharkについて
1.1 Stratoshark とは
Stratosharkは、クラウドネイティブ環境におけるシステムコールやログの解析、トラブルシューティングを行うことを目的としたオープンソースツールです。Wiresharkの創始者であるGerald CombsとFalcoの作成者であるLoris Degioanniによって開発され、2025年1月にSysdig社よりリリースが発表されました。Wiresharkのユーザーインターフェースと解析エンジンを活用していることが特徴となっています。
1.2 Stratoshark 登場の背景
Wiresharkは長年にわたってネットワークトラフィックの分析において標準的なツールとして利用されてきましたが、ワークロードがコンテナや分散システムへ移行し、クラウドネイティブ環境が普及するにつれて、従来のパケットキャプチャだけではシステム全体の深いランタイム可視化やセキュリティ監視が不十分になりました。そのような背景を受けて、オープンソースのSysdigやFalcoといったツールが登場しました。StratosharkはSysdigやFalcoのコミュニティをさらに拡張し、Wiresharkの使い慣れたUIでシステムコールを分析するツールとして登場しました。歴史的な背景の詳細については、開発者であるGerald CombsによるSharkFest'24 EUROPEでのKeynoteが参考になるかと思います。
1.3 Stratoshark の分析対象
Linuxマシンのシステムコールアクティビティをキャプチャし、分析することができます。ファイルI/O、コマンド実行、ネットワークアクティビティ、プロセス間通信などがこれに含まれます。また、Falcoのプラグインを利用することで、AWSのCloudTrailのログや、GCPのAuditのログを解析することもできます。
なお、2025/6 時点では、Linuxのシステムコールのキャプチャのみ対応しています。
1.4 Stratoshark の動作環境
MacおよびWindows用のパッケージが用意されているため、これらの環境でStratosharkを利用する場合は、こちらからインストーラーをダウンロードして実行できます。LinuxでStratosharkを利用する場合は、ソースコードからビルドする必要があります。詳細はこちらをご確認ください。
1.5 Sysdigのインストール方法
Linuxシステム上で発生するシステムコールをキャプチャするためにはSysdigのOSS版をインストールする必要があります。次のドキュメントを参照してUbuntuへSysdigをインストールします。
$ curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
Sysdigがインストールされていることを確認します。
$ sysdig --version
1.6 Sysdigを利用したscapファイルの取得方法
次のコマンドを実行するとコンピュータ上のすべてのシステムコールがキャプチャされ、指定されたファイルに保存されます。ただし、このままではすぐにファイルが肥大化するため、必要に応じて、フィルタを利用して出力を制限できます。
$ sysdig -w capture.scap
Sysdigのフィルタ例:
$ sysdig –n 100 –w capture.scap
$ sysdig -w capture.scap proc.name=nginx
$ sysdig -w capture.scap evt.type=open
$ sysdig proc.name=cat and evt.type=open
利用可能なすべてのフィルタを確認する場合は、sysdig -l
を実行します。
Stratosharkを利用したnginxの解析
本章では、実際にStratosharkを利用して、nginxがクライアントからの接続を受け入れてからクライアントに応答を返すまでの内部動作を確認します。プロセス名をnginxに絞るため、以下のフィルタを適用します。Dir列に表示されている大なり記号(>)はアプリケーションからOSへの呼び出し(リクエスト)を示し、小なり記号(<)はOSからの応答を示しています。Stratosharkを利用した解析のイメージをつかんでいただくために、ここではnginxの主要なシステムコールに絞って解析しています。
proc.name == "nginx"
accept4
のシステムコールのイベントを確認してみると、nginxのワーカープロセスがクライアントからの接続を受け入れていることが分かります。Wiresharkと同様、特定のイベントをクリックすることでそのイベントの詳細を確認することができます。
続くrecvfrom
のシステムコールのイベントでクライアントのGETリクエストを受け取っています。
その後、nginxがindex.nginx-debian.html
ファイルを開き(openat)、ファイルを取得し(fstat)、その内容をソケットに書き込んでいます(writev)。
writev
のイベントの詳細を確認してみると、304の応答になっていることを確認できます。
nginxはクライアントに応答を返した後で、アクセスログ(/var/log/nginx/access.log)にログを書き込み(write)、index.nginx-debian.html
ファイルを閉じています(close)。
イベントを右クリックし、[Follow] > [File Descriptor Stream] をクリックすることで、実際にaccess.logに書き込まれたログを確認することができます。
クライアント側の応答をブラウザで確認してみます。nginxのデフォルトページが表示されており、304の応答が返っていることが確認できます。
非常に簡単な解析ですが、Stratosharkを利用したイメージをお伝え出来たかと思います。
さいごに
実際にStratosharkを利用してみて、Wiresharkを使い慣れたエンジニアにとっては非常に使いやすいツールだと感じました。トラブルシューティングはもちろん、教育用途にも幅広く適用できるツールなので、興味があればぜひ使ってみてください。
参考