Qtの開発ツールを安全に利用する方法
Qt開発ツールを安全に実行するためのアドバイス。
概要
Qt フレームワークには、Qt アプリケーションを開発するための包括的なツールセットが付属しています。qmakeやqt-cmake などのビルドシステムのフロントエンド、Meta-Object Compiler (moc)、User Interface Compiler (uic)、Resource Compiler (rcc)などのコンパイラやジェネレータ、Qt Shader Baker (qsb)、およびQt Remote Objects コンパイラ (repc) やQt D-Bus XMLコンパイラ (qdbusxml2cpp) などのインターフェース記述用コードジェネレータ;qmllintや QML型コンパイラなどのQMLツール、アセットインポーター、およびwindeployqt、macdeployqt、androiddeployqtなどのデプロイメントツール。完全なリストについては、「ツールとユーティリティ」を参照してください。
ほとんどのツールは、入力ファイルを出力ファイルに変換するコマンドラインツールであり、プロジェクトのビルドシステムの一環として実行されます。その他のツールは、例えばIDEでのコード補完や構文チェックを提供するために、バックグラウンドで実行されます。
このページでは、提供されている開発者向けツールのセキュリティモデルと、それらを安全に利用する方法について説明します。これは「Qt 共有セキュリティモデル」の一部であり、アプリケーション開発者、Qt、および運用者やデバイスメーカーの間でセキュリティの責任がどのように分担されるかを説明しています。
開発者ツールのセキュリティモデル
これらのツールは、複雑な入力ファイルを効率的に処理するように設計されています。入力に対して一般的な妥当性チェックは行いますが、悪意を持って作成された入力に対する防御や処理を行うようには設計されていません。したがって、入力は信頼できるものとみなされます。
Qt共有セキュリティモデルの観点から、開発者ツールおよびそれらによって処理されるプロジェクトは、明確に開発者の責任範囲内に位置づけられます。Qtは、提供されるツールの完全性について責任を負いますが、開発者は信頼できる入力のみをツールに供給する責任を負います。
これが重要な理由
これらのツールは、入力を敵対的なものと見なすことなく処理を行うため、悪意のある、あるいは形式が不正なプロジェクトは、結果として生成されるアプリケーションが実行される前の開発、設定、またはビルドの段階で損害を引き起こす可能性があります。
特に、これらのツールは以下の動作を行います。
- ファイルを読み込みます。ビルドシステムは、絶対パスまたは相対パス(パストラバーサル)を介して、プロジェクトディレクトリ外のファイルも読み込む可能性があります。
- ファイルへの書き込み。出力パスは入力から導出されます。これにより、意図した出力ディレクトリ以外の場所にファイルが書き込まれたり、既存のファイルが上書きされたりする可能性があります。
- 外部プロセスの起動。ビルドフロントエンドや一部のジェネレータは、コンパイラ、スクリプト、その他の実行ファイルを起動します。信頼できない入力により、どのプログラムがどの引数で実行されるかが左右される可能性があります。
- 後でコンパイルおよび実行されるコードを生成する。多くのツールは、アプリケーションの一部となる C++、Qml、またはその他のソースコードを出力します。巧妙に作成された入力は、生成される出力に影響を与え、ひいては最終的に Qt アプリケーションやデバイスに組み込まれるコードに影響を与える可能性があります。
実際の問題として、信頼できないプロジェクトをビルドすると、ビルドマシン上で任意のコードが実行される可能性があります。その際、ビルダーの権限で実行され、資格情報、署名キー、ソースコードなど、その環境に含まれるあらゆる情報にアクセスできてしまいます。これにより、個人情報が漏洩したり、マシンが侵害されたり、最終的にはビルド中のアプリケーションやデバイスが侵害され、ひいてはすべてのユーザーが危険にさらされる可能性があります。
このリスクは、Qtツールに起因するものだけではありません。 C++で広く利用されているビルドシステムであるCMakeでプロジェクトを構成する際、プロジェクトが任意のパスにあるローカルプログラムを実行すること(execute_process() )や、追加のチェックなしにネットワークリソースを取得すること(FetchContent モジュール)を許可することになります。これが、IDEがプロジェクトの構成前に警告を表示することがある理由でもあります。例えば、Visual Studio Codeの「Workspace Trust」を参照してください。
推奨事項
- 信頼できるプロジェクトのみを開き、ビルドしてください。出所不明または信頼できないソースからのプロジェクトは、設定したりビルドしたりしないでください。これは、出所不明のスクリプトを実行しないのと同じ理屈です。
- 信頼できないビルドは隔離してください。完全に信頼できないプロジェクトで作業する必要がある場合は、コンテナや仮想マシンなどの隔離された環境で行ってください。ビルドは最小限の権限で実行し、シークレット、認証情報、署名鍵へのアクセスは許可しないでください。
- ビルド中のネットワークアクセスを制限してください。ビルドは完全にローカルで行うことを目指してください。プロジェクトのビルドにリモートリソースへのアクセスが必要な場合、可用性に関する問題(ビルドマシンがリクエストを集中させてリモートサーバーにブロックされるなど)を引き起こす可能性があるだけでなく、ビルド環境やビルド結果を侵害するための新たな攻撃経路にもなります。
- Qtは信頼できるソースから入手してください。Qtおよびそのツールは公式チャネルからのみインストールし、セキュリティ修正プログラムを受け取れるよう常に最新の状態に保ってください。「Qtのセキュリティ」を参照してください。
- ビルド環境の信頼性を維持してください。たとえば、
PATH内のディレクトリや、それらが参照するツールが信頼できるものであることを確認し、開発ツールが予期しない実行ファイルを実行しないようにしてください。
適用範囲
このページでは、自身のマシン上で実行されるビルド時の開発者ツールについて説明します。Qtフレームワークには、異なる脅威モデルを持つツールも同梱されています:
- エンドユーザーシステム上でユーザーがインストールおよび実行する可能性のある、ユーザー向けのツール。例: Qt Linguist、 Qt Widgets Designer および Qt Assistantなど。これらのツールに関するセキュリティ上の指針については、それぞれのマニュアルページを参照してください。
- ライブラリや他のツールによって間接的に起動されるヘルパーツール。ツール自体とその起動メカニズムの両方が攻撃対象領域の一部となるため、これらには特に注意が必要です。
実行時に信頼できないソースからのデータを処理する際の一般的な指針については、「信頼できないデータの取り扱い」を参照してください。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.