アドホックコード署名にはどのような制限がありますか?


14

を使用して「アドホック」にコードまたはアプリに署名することが可能ですcodesign。manページは、アドホックコード署名について次のことを伝えています。

IDが1文字の「-」(ダッシュ)の場合、アドホック署名が実行されます。アドホック署名はIDをまったく使用せず、コードのインスタンスを1つだけ識別します。アドホック署名されたコードの使用には重大な制限が適用されます。これを使用する前にドキュメントを参照してください。

(私が追加したエンファシス)

詳細を知りたくて上記のドキュメントを見つけようとしましたが、詳細を見つけることができませんでした。「macOS Code Signing In Depth」と呼ばれるテクニカルノートを見つけましアドホック署名についてはまったく触れられていません。

これらの「重要な制限」とは何ですか?それらはどこに文書化されていますか?

回答:


9

基本的に、このコンテキストでのアドホック署名は、バイナリが暗号化された証明なしで署名されることを意味します。

本質的に、バイナリは通常、いわゆるCMS(暗号メッセージ)を追加することによって署名されます。CodeDirectoryのハッシュは、署名IDによって署名されたメッセージです。つまり、部外者はコードがそのIDの秘密鍵を保持している誰かによって実際に署名されたことを確認できます。

プログラムを実行するとき、macOSシステムはこれらの署名が有効であること、および署名IDを信頼していることを確認できます。信頼できる場合は、プログラムを実行します。これは、GateKeeper機能の基本です。

アドホック署名されたバイナリは、そのようなCMSを含まないため、大きく異なります。代わりに、CodeDirectoryのSHA-1ハッシュ値を保持し、その有効性を暗号で証明することなく、検証する証明書/ IDのパスを保持しません。

CodeDirectoryは、アプリケーションを構成するさまざまなコードのハッシュ値を持つことにより、静的コードの特定のインスタンスを記述するオブジェクトです。暗号署名を検証することでCodeDirectoryが改ざんされていないこと、およびアプリケーションのさまざまなコードビットがディレクトリに格納されているハッシュ値と一致していることを確認することで、コードが改ざんされていないことを確認できます。

暗号証明がないと、この「改ざんされていない」チェックは通常の方法では実行できません。

代わりに、アドホック署名されたバイナリは、SHA-1ハッシュ値をカーネル内の静的信頼キャッシュに格納されている「既知の正常な」ハッシュ値のリストと比較することによってチェックされます。

本質的に、これは、自分でその場で署名するアプリケーションに課される「重要な制限」は、いかなる種類の検証もどこにもパスしないことを意味します。基本的には、署名されていないバイナリと同じです。

ただし、Appleの場合は、通常の方法でコード署名されておらず、代わりにカーネルによって明示的に信頼されているアプリケーションを作成できます。つまり、たとえばAppleが、システムの起動の初期段階で完全な署名付きID検証が実行されていない(または利用できない)ときにアプリケーションが改ざんされていないことを確認したい場合は、アドホック署名を使用できます。これらのアプリケーションは、証明書リポジトリがホースされているかどうかに関係なく、常に静的信頼キャッシュによって検証できます。

実際には、その場限りの署名付きバイナリを作成することは、Apple開発者にとって実際的な価値があるだけです。

アドホック署名に関するマイナーなドキュメントは、Appleの開発者セクションにあります。例えば:

https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc

ただし、ドキュメントのスニペットは、codesignユーティリティ自体のソースコード、およびlibsecurityのソースコードにもあります。


ここで「Apple開発者にとって実用的な価値のみ」とは、「Appleで作業する開発者のみ」または「Appleプラットフォームで作業する開発者のみ」という意味ですか?名前が正しいのにキーチェーンがキーを見つけられないという新しい問題が発生し始めており、非リリースビルドをハイフンに切り替えることを検討しているため、純粋に興味があります。
Trejkaz

1
アップルで働く開発者のみを意味します。
jksoegaard 2018

iOSシミュレーターもアドホック署名を使用することに注意してください。アドホック署名は、Apple以外の開発者がアプリが資格を要求できるようにするために役立つ場合がありますが、コード署名なしでは不可能かどうかはわかりません(これまでに見たすべてのドキュメントで指摘されていません)。Macでは通常これは問題ではありませんが、iOSでは多くの機能が資格の背後にゲートされているため、これが正しく機能することをテストすることはiOS開発者にとって望ましいことです。
乳の

@milchあなたは2つの無関係な概念を混同しています-「アドホック署名」(これはこの質問についてでした)と「アドホック配布」(これはiOS開発者がよく使用し、資格などに関係します)
jksoegaard

シミュレーターのビルドはアドホック署名されている(配布されていない)と私は確信しています。シミュレータ用にビルドされたiOSアプリをで調べることで確認できcodesign -dv --verbose=4 /path/to/the.appます。あなたはラインのことわざ返されますSignature=adhocアドホック署名を示しているようです。Authorityand TeamIdentifier
not
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.