
Intel SGXは、ハードウェアベースのメモリ暗号化を使用して、エンクレーブ内の隔離されたアプリケーションロジックと機密データを保護します。このようなハードウェアベースのセキュリティメカニズムを使用するには、メモリ使用に関する厳格なプログラミングモデルと、エンクレーブ境界の内外での複雑なAPIが必要です。エンクレーブ開発者は、エンクレーブのセキュリティを確保するために、特にエンクレーブの信頼境界を越えて流れるデータを扱う際には、注意深いプログラミング手法を適用する必要があります。信頼境界の違反はさらにメモリ破損を引き起こし、攻撃者によって保護されたデータの取得や操作に悪用される可能性があります。現在、実際のエンクレーブに対してこのような問題を効果的に検出できる公開ツールはありません。
SGXRayは、SMACK検証器に基づく自動推論ツールであり、信頼境界の違反に起因するSGXエンクレーブのバグを自動的に検出します。指定されたエンクレーブコードを再コンパイルし、ユーザーが指定したエンクレーブ関数エントリから分析を開始します。分析の後、エンクレーブ内の未チェックポインタの参照外し、無効なメモリ解放、TOCTOUバグなどのSGXソフトウェアスタック内の無効なポインタ処理を発見するか、ユーザー指定のループおよび再帰の限界までそのようなバグが存在しないことを証明します。
現在、SGXRayは2つのSGX SDK(Intel SGX SDKおよびopenenclave SDK)で構築されたSGXアプリケーションをサポートしています。ユーザーはより徹底的な分析のためにSDKコードを選択できます。
クイックスタートとして、デモ例の1つでSGXRayを使用するステップバイステップのチュートリアルはこちらをご覧ください。
次の図はSGXRayのワークフローを示しています。
SGXRayの実行は2ステップのプロセスです。最初のステップは、アプリケーションのLLVM IRファイルを取得することです。2番目のステップは、検証のためにSGXRay CLIを呼び出すことです。
最初のステップでは、各SDKに対応する2つのDockerイメージを提供しています。
docker pull baiduxlab/sgx-ray-frontend-intel
docker pull baiduxlab/sgx-ray-frontend-oe
最初のステップを実行するための詳細な手順はこちらにあります。
2番目のステップでは、Dockerイメージも提供しています。
docker pull baiduxlab/sgx-ray-distro:latest
2番目のステップを実行するための詳細な手順はこちらにあります。
検証ステップ用のイメージをビルドするDockerfileを提供しています。
git clone https://github.com/baiduxlab/sgxray.git && cd sgxray
docker build . -t sgx-ray-distro-local --build-arg hostuid=$UID -f Dockerfiles/Dockerfile-CLI
ビルドが成功すると、sgx-ray-distro-localという名前のイメージが生成され、ホストアカウントと同じユーザーIDを持つuserユーザーが含まれます。
SGXRayの詳細なドキュメントは以下の通りです。