
Mac OS Xでアプリのコード署名を表示・検証する方法
コード署名されたアプリケーションは、セキュリティ意識の高いユーザーが特定のアプリの作成者とハッシュを検証し、破損や改ざんがないか確認するのに役立ちます。これは、Mac App Storeなどの信頼できるソースからソフトウェアを入手する一般的なMacユーザー、特にアプリが認証済みであるため、滅多に必要ありません。しかし、サードパーティのソースからアプリを入手するユーザーにとっては、アプリのデジタル署名を検証することは非常に役立ちます。
コード署名の検証は、P2Pや分散ソース、例えばトレントサイトやニュースグループ、IRC、パブリックFTP、その他のネットワークリソースからソフトウェアやインストーラーを入手するユーザーにとって特に重要です。具体的な例として、ユーザーが何らかの理由でMac App Storeにアクセスできず、Mac OS Xインストーラーアプリケーションをダウンロードする必要があり、サードパーティのソースに依存しているとします。このような状況では、インストーラーが改ざんされておらず、Appleから正当に提供されていることを確認し、検証することが重要になります。sha1ハッシュを直接確認する以外に、最も簡単な方法は、該当するアプリのコード署名と暗号ハッシュを確認することです。
Macでアプリのコード署名を確認する方法
まず、/Applications/Utilities/ にあるターミナルを起動します。「codesign」という名のコマンドを使用し、-dv および –verbose=4 フラグを付与することで、ハッシュタイプ、ハッシュチェックサム、署名権限など、アプリケーションの識別情報を表示します。
基本的な構文は次のとおりです。
codesign -dv --verbose=4 /Path/To/Application.app
たとえば、/Applications/Utilities/にあるTerminal.appの署名を確認してみましょう。
codesign -dv --verbose=4 /Applications/Utilities/Terminal.app
Executable=/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
Identifier=com.apple.Terminal
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=5227 flags=0x0(none) hashes=255+3 location=embedded
Platform identifier=1
Hash type=sha1 size=20
CDHash=0941049019f9fa3499333fb5b52b53735b498aed6cde6a23
Signature size=4105
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
Info.plist entries=34
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=996
Internal requirements count=1 size=68
探しているのは、ハッシュタイプ、ハッシュ、そして署名認証局のエントリです。この場合、ハッシュタイプはsha1、署名認証局はAppleです。これは予想通りです。
はい、コマンド ラインを使用して、アプリケーションのインストーラーとダウンロードの sha1 または md5 ハッシュをチェックし、正当なソースと比較することもできますが、コード署名と証明書の詳細は明らかにされません。
権限のない第三者によって変更されたコード署名付きソフトウェアのほとんどは、Gatekeeper が無効にされているか、あるいは他の方法で回避されていない限り、Mac OS X の Gatekeeper によって拒否されることに留意してください。ただし、Gatekeeper をオンにしたままでも、理論的には、野心的な悪党が回避策を見つけることは可能です。また、身元の確認された開発者によって認定されていないソフトウェアは、いずれにしても Gatekeeper を回避してリリースされる可能性があります。
コード署名の詳細については、Wikipedia および Apple 開発者向けコード署名ガイド (こちら) をご覧ください。
アプリが署名されているかどうかを確認したことがありますか?署名は、プロセスやアプリの種類を特定する有効な手段であり、トラブルシューティングにも役立ちます。何かが何なのか、署名されているかどうかわからない時は、ぜひ試してみてください。