0

SecCodeCheckValidityダイナミックコードの妥当性検査によってどのようなダイナミックコードの変更が保護されますか?

符号付きコードの動的検証を実行します。

SecStaticCodeCheckValidity

静的なコードオブジェクトを検証。

この関数は、コードオブジェクトによって指定されたコード の署名を取得して検証します。すべての封印されたコンポーネントの有効性を確認します。 にはリソース(存在する場合)が含まれています。コードが指定されている場合は、コード に照らしてそのコードを検証します。これらのすべての条件が満足すれば、呼び出しは成功します。このコールは、コードが で同時変更の対象外である場合にのみ安全です。コードが変更されない限り、結果は有効な になります。基盤となるファイルシステム にネットワークファイルシステム、ユニオン マウント、FUSEなどの動的特性がある場合は、検証後にコードが からどのように保護されているかを考慮する必要があります。

Appleからのドキュメントのコーディングについては、ここでは「動的特性」とは何かを明確にしていません。

答えて

0

SecStaticCodeCheckValidityオンディスクであるかどうかを確認します。対照的に、SecCodeCheckValidityは、アプリケーションの実行中に同じ要求に対してのメモリ内のアプリケーションを検証します。

これはハイジャック、インジェクション、またはメモリ内のコードを有効なシグネチャでコード署名しているかどうかをチェックする従来の他の伝統的な方法による変更を防ぎます。

私はWWDC '09の間にどこかの区別を聞いて覚えていますが、間違っていれば私を修正してください。あなたには、いくつかの実行中のコードは、プログラマによって指定されたいくつかの指定された要件を、アップルによって署名されていないかどうかを確認したい場合は

は、あなたがしたい:

SecRequirementCreateWithString(CFSTR("anchor apple"), ...) 

、その後はSecRequirementRefからSecCodeCheckValidityに結果を渡します。この場合、指定された要件と対話する必要はありません。これは、Appleが署名したものである、あなたがどのコードを受け入れるかをすでに決めているからです。

生産コードでは、csreq(1)を使用して、「アンカーリンゴ」のバイナリバージョンをコンパイルし、SecRequirementCreateWithStringの代わりにSecRequirementCreateWithDataを使用すると高速になります。

+0

「インメモリ」をチェックする頻度はどのくらいですか? – PnotNP

関連する問題