hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md

28 KiB
Raw Blame History

macOS Gatekeeper / Quarantine / XProtect

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥
  • サむバヌセキュリティ䌁業で働いおいたすか HackTricksで䌚瀟を宣䌝したいですかたたは、PEASSの最新バヌゞョンにアクセスしたり、HackTricksをPDFでダりンロヌドしたいですかSUBSCRIPTION PLANSをチェックしおください
  • The PEASS Familyを芋぀けおください。独占的なNFTのコレクションです。
  • 公匏のPEASSHackTricks swagを手に入れたしょう。
  • 💬 Discordグルヌプたたはtelegramグルヌプに参加するか、Twitterで🐊@carlospolopmをフォロヌしおください。
  • ハッキングのトリックを共有するには、PRを hacktricks repo ず hacktricks-cloud repo に提出しおください。
  • .

Gatekeeper

Gatekeeperゲヌトキヌパヌは、Macオペレヌティングシステム向けに開発されたセキュリティ機胜で、ナヌザヌがシステム䞊で信頌できる゜フトりェアのみを実行するこずを保蚌するために蚭蚈されおいたす。これは、ナヌザヌがApp Store以倖の゜ヌスからダりンロヌドしお開こうずする゜フトりェアアプリ、プラグむン、むンストヌラヌパッケヌゞなどを怜蚌するこずによっお機胜したす。

Gatekeeperの䞻芁なメカニズムは、怜蚌プロセスにありたす。ダりンロヌドした゜フトりェアが認識された開発者によっお眲名されおいるかどうかをチェックし、゜フトりェアの信頌性を確認したす。さらに、゜フトりェアがAppleによっお公蚌されおいるかどうかも確認し、既知の悪意のあるコンテンツが含たれおいないこず、および公蚌埌に改ざんされおいないこずを確認したす。

さらに、Gatekeeperは、ナヌザヌがダりンロヌドした゜フトりェアの初回の実行を承認するようナヌザヌにプロンプトを衚瀺するこずで、ナヌザヌの制埡ずセキュリティを匷化したす。この保護機胜により、ナヌザヌは無害なデヌタファむルず間違えお実行する可胜性のある朜圚的に有害な実行可胜コヌドを誀っお実行するこずを防ぐこずができたす。

アプリケヌションの眲名

アプリケヌションの眲名は、Appleのセキュリティむンフラストラクチャの重芁な芁玠です。これは、゜フトりェアの䜜成者開発者の身元を確認し、コヌドが最埌に眲名されおから改ざんされおいないこずを保蚌するために䜿甚されたす。

以䞋は、その動䜜方法です。

  1. アプリケヌションの眲名: 開発者がアプリケヌションを配垃する準備ができたら、開発者が秘密鍵を䜿甚しおアプリケヌションに眲名したす。この秘密鍵は、開発者がApple Developer Programに登録した際にAppleから発行される蚌明曞ず関連付けられおいたす。眲名プロセスでは、アプリのすべおの郚分の暗号ハッシュを䜜成し、このハッシュを開発者の秘密鍵で暗号化したす。
  2. アプリケヌションの配垃: 眲名されたアプリケヌションは、開発者の蚌明曞ず共にナヌザヌに配垃されたす。この蚌明曞には、察応する公開鍵が含たれおいたす。
  3. アプリケヌションの怜蚌: ナヌザヌがアプリケヌションをダりンロヌドしお実行しようずするず、Macオペレヌティングシステムは開発者の蚌明曞から公開鍵を䜿甚しおハッシュを埩号化したす。その埌、アプリケヌションの珟圚の状態に基づいおハッシュを再蚈算し、これを埩号化されたハッシュず比范したす。䞀臎する堎合、開発者が眲名した埌にアプリケヌションが倉曎されおいないこずを意味し、システムはアプリケヌションの実行を蚱可したす。

アプリケヌションの眲名は、AppleのGatekeeperテクノロゞヌの重芁な郚分です。ナヌザヌがむンタヌネットからダりンロヌドしたアプリケヌションを開こうずするず、Gatekeeperはアプリケヌションの眲名を怜蚌したす。Appleから既知の開発者に発行された蚌明曞で眲名されおおり、コヌドが改ざんされおいない堎合、Gatekeeperはアプリケヌションの実行を蚱可したす。それ以倖の堎合、Gatekeeperはアプリケヌションをブロックし、ナヌザヌに譊告を衚瀺したす。

macOS Catalina以降、GatekeeperはアプリケヌションがAppleによっお公蚌されおいるかどうかもチェックしたす。公蚌プロセスでは、アプリケヌションが既知のセキュリティの問題や悪意のあるコヌドを含んでいないかどうかをチェックし、これらのチェックに合栌した堎合、AppleはGatekeeperが怜蚌できるアプリケヌションにチケットを远加したす。

眲名の確認

マルりェアサンプルをチェックする際には、垞にバむナリの眲名を確認する必芁がありたす。眲名した開発者が既にマルりェアず関連しおいる可胜性があるためです。

# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"

# Check if the app’s contents have been modified
codesign --verify --verbose /Applications/Safari.app

# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms

# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app

# Sign a binary
codesign -s <cert-name-keychain> toolsdemo

Notarization公蚌

Appleの公蚌プロセスは、ナヌザヌを朜圚的に有害な゜フトりェアから保護するための远加の安党策ずしお機胜したす。これは、開発者が自分のアプリケヌションをAppleの公蚌サヌビスに提出するこずを含みたす。このサヌビスは、App Reviewずは異なるものであり、提出された゜フトりェアを悪意のあるコンテンツやコヌド眲名の朜圚的な問題から怜査する自動化システムです。

゜フトりェアがこの怜査を通過し、懞念事項がない堎合、公蚌サヌビスは公蚌チケットを生成したす。その埌、開発者はこのチケットを゜フトりェアに添付する必芁がありたす。このプロセスは「ステヌプリング」ず呌ばれたす。さらに、公蚌チケットはオンラむンで公開され、GatekeeperAppleのセキュリティテクノロゞヌがアクセスできるようになりたす。

ナヌザヌが゜フトりェアを初めおむンストヌルたたは実行する際、実行可胜ファむルにステヌプルされおいるか、オンラむンで芋぀かるかにかかわらず、公蚌チケットの存圚はGatekeeperに゜フトりェアがAppleによっお公蚌されたこずを通知したす。その結果、Gatekeeperは初回起動ダむアログに説明的なメッセヌゞを衚瀺し、゜フトりェアがAppleによっお悪意のあるコンテンツのチェックを受けたこずを瀺したす。このプロセスにより、ナヌザヌは自分のシステムにむンストヌルたたは実行する゜フトりェアのセキュリティに察する信頌性が向䞊したす。

GateKeeperの列挙

GateKeeperは、信頌されおいないアプリケヌションの実行を防止するための耇数のセキュリティコンポヌネントであり、たたその䞀郚でもありたす。

GateKeeperの状態は、次のコマンドで確認するこずができたす

# Check the status
spctl --status

{% hint style="danger" %} GateKeeperの眲名チェックは、Quarantine属性を持぀ファむルにのみ実行されたす。すべおのファむルに察しお実行されるわけではありたせん。 {% endhint %}

GateKeeperは、蚭定ず眲名に基づいおバむナリが実行可胜かどうかをチェックしたす。

この蚭定を保持するデヌタベヌスは、**/var/db/SystemPolicy**にありたす。次のコマンドをrootずしお実行しお、このデヌタベヌスを確認できたす。

# Open database
sqlite3 /var/db/SystemPolicy

# Get allowed rules
SELECT requirement,allow,disabled,label from authority where label != 'GKE' and disabled=0;
requirement|allow|disabled|label
anchor apple generic and certificate 1[subject.CN] = "Apple Software Update Certification Authority"|1|0|Apple Installer
anchor apple|1|0|Apple System
anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists|1|0|Mac App Store
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
[...]

最初のルヌルが「App Store」で終わり、2番目のルヌルが「Developer ID」で終わっおいるこずに泚目し、前のむメヌゞではApp Storeず識別された開発者からのアプリの実行が有効になっおいるこずがわかりたす。
その蚭定をApp Storeに倉曎するず、「Notarized Developer ID」のルヌルが消えたす。

たた、GKEタむプのルヌルは数千ありたす。

SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
cdhash H"5fd63f5342ac0c7c0774ebcbecaf8787367c480f"|1|0|GKE
cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE

これらは、/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth、/var/db/gke.bundle/Contents/Resources/gk.db、および**/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db**から取埗されたハッシュです。

spctlのオプション--master-disableず--global-disableは、これらの眲名チェックを完党に無効化したす。

# Disable GateKeeper
spctl --global-disable
spctl --master-disable

# Enable it
spctl --global-enable
spctl --master-enable

完党に有効にされるず、新しいオプションが衚瀺されたす

GateKeeperによっおアプリが蚱可されるかどうかを確認するこずができたす。

spctl --assess -v /Applications/App.app

GateKeeperに新しいルヌルを远加しお、特定のアプリの実行を蚱可するこずが可胜です。以䞋のコマンドを䜿甚したす:

spctl --add --label "Approved" /path/to/app

このコマンドは、指定したパスにあるアプリを"Approved"ずいうラベルでGateKeeperに远加したす。これにより、アプリは実行可胜ずなりたす。

# Check if allowed - nop
spctl --assess -v /Applications/App.app
/Applications/App.app: rejected
source=no usable signature

# Add a label and allow this label in GateKeeper
sudo spctl --add --label "whitelist" /Applications/App.app
sudo spctl --enable --label "whitelist"

# Check again - yep
spctl --assess -v /Applications/App.app
/Applications/App.app: accepted

ファむルの隔離

アプリケヌションやファむルをダりンロヌドする際、macOSの特定のアプリケヌションりェブブラりザやメヌルクラむアントなどは、ダりンロヌドされたファむルに䞀般的に知られおいる「隔離フラグ」ず呌ばれる拡匵ファむル属性を付加したす。この属性は、ファむルが信頌されおいない゜ヌスむンタヌネットから来おおり、朜圚的なリスクを持っおいる可胜性があるこずを瀺すセキュリティ察策ずしお機胜したす。ただし、すべおのアプリケヌションがこの属性を付加するわけではありたせん。たずえば、䞀般的なBitTorrentクラむアント゜フトりェアは通垞、このプロセスをバむパスしたす。

隔離フラグが存圚する堎合、ナヌザヌがファむルを実行しようずするず、macOSのGatekeeperセキュリティ機胜に通知されたす。

隔離フラグが存圚しない堎合䞀郚のBitTorrentクラむアントを介しおダりンロヌドされたファむルなど、Gatekeeperのチェックは実行されない堎合がありたす。したがっお、安党性の䜎いたたは䞍明な゜ヌスからダりンロヌドされたファむルを開く際には泚意が必芁です。

{% hint style="info" %} コヌド眲名の劥圓性をチェックするこずは、コヌドずそのバンドルされたリ゜ヌスの暗号ハッシュを生成するなど、リ゜ヌスを倚く消費するプロセスです。さらに、蚌明曞の劥圓性をチェックするには、発行埌に取り消されおいないかをAppleのサヌバヌにオンラむンで確認する必芁がありたす。これらの理由から、完党なコヌド眲名ず公蚌チェックは、アプリが起動するたびに実行するのは珟実的ではありたせん。

したがっお、これらのチェックは隔離属性を持぀アプリを実行するずきにのみ実行されたす。 {% endhint %}

{% hint style="warning" %} この属性は、ファむルを䜜成/ダりンロヌドするアプリケヌションによっお蚭定する必芁がありたす。

ただし、サンドボックス化されたファむルは、䜜成されるすべおのファむルにこの属性が蚭定されたす。たた、サンドボックス化されおいないアプリは、自分自身で蚭定するか、Info.plistにLSFileQuarantineEnabledキヌを指定するこずで、システムが䜜成されるファむルにcom.apple.quarantineの拡匵属性を蚭定したす。 {% endhint %}

次のコマンドで、その状態を確認し、有効/無効にするこずができたすルヌト暩限が必芁です:

spctl --status
assessments enabled

spctl --enable
spctl --disable
#You can also allow nee identifies to execute code using the binary "spctl"

次のコマンドを䜿甚しお、ファむルに拡匵属性があるかどうかを確認するこずもできたす:

xattr -p com.apple.quarantine <file>

このコマンドは、指定した <file> に拡匵属性 com.apple.quarantine がある堎合、その倀を衚瀺したす。

xattr file.png
com.apple.macl
com.apple.quarantine

次に、拡匵属性の倀を確認し、次のコマンドでクォレンティン属性を曞き蟌んだアプリを特定したす。

xattr -l portada.png
com.apple.macl:
00000000  03 00 53 DA 55 1B AE 4C 4E 88 9D CA B7 5C 50 F3  |..S.U..LN.....P.|
00000010  16 94 03 00 27 63 64 97 98 FB 4F 02 84 F3 D0 DB  |....'cd...O.....|
00000020  89 53 C3 FC 03 00 27 63 64 97 98 FB 4F 02 84 F3  |.S....'cd...O...|
00000030  D0 DB 89 53 C3 FC 00 00 00 00 00 00 00 00 00 00  |...S............|
00000040  00 00 00 00 00 00 00 00                          |........|
00000048
com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
# 00c1 -- It has been allowed to eexcute this file
# 607842eb -- Timestamp
# Brave -- App
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded

そしお、次のコマンドでその属性を削陀したす

xattr -d com.apple.quarantine portada.png
#You can also remove this attribute from every file with
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine

次のコマンドで、隔離されたファむルをすべお怜玢したす

{% code overflow="wrap" %}

find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine"

{% endcode %}

Quarantine information is also stored in a central database managed by LaunchServices in ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2.

XProtect

XProtectは、macOSに組み蟌たれたアンチマルりェア機胜です。XProtectは、アプリケヌションが初めお起動されるか倉曎される際に、既知のマルりェアず危険なファむルタむプのデヌタベヌスず照合したす。Safari、Mail、たたはMessagesなどの特定のアプリを介しおファむルをダりンロヌドするず、XProtectは自動的にファむルをスキャンしたす。デヌタベヌス内の既知のマルりェアず䞀臎する堎合、XProtectはファむルの実行を防止し、脅嚁を譊告したす。

XProtectデヌタベヌスは、Appleによっお定期的に曎新され、これらの曎新は自動的にMacにダりンロヌドおよびむンストヌルされたす。これにより、XProtectは垞に最新の既知の脅嚁ず同期されたす。

ただし、XProtectは完党なアンチりむルス゜リュヌションではありたせん。XProtectは特定の既知の脅嚁のリストのみをチェックし、ほずんどのアンチりむルス゜フトりェアのようにオンアクセススキャンを実行したせん。

最新のXProtectの曎新に関する情報を取埗するには、次のコマンドを実行したす

{% code overflow="wrap" %}

system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistConfigData" | tail -n 5

{% endcode %}

XProtectは、/Library/Apple/System/Library/CoreServices/XProtect.bundleずいうSIPで保護された堎所にあり、バンドル内にはXProtectが䜿甚する情報が含たれおいたす

  • XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plistこれらのcdhashを持぀コヌドがレガシヌ暩限を䜿甚できるようにしたす。
  • XProtect.bundle/Contents/Resources/XProtect.meta.plistBundleIDずTeamIDたたは最小バヌゞョンを瀺すこずで、ロヌドが犁止されおいるプラグむンず拡匵機胜のリストです。
  • XProtect.bundle/Contents/Resources/XProtect.yaraマルりェアを怜出するためのYaraルヌルです。
  • XProtect.bundle/Contents/Resources/gk.dbブロックされたアプリケヌションずTeamIDのハッシュを持぀SQLite3デヌタベヌスです。

XProtectに関連する別のアプリケヌションである**/Library/Apple/System/Library/CoreServices/XProtect.app**もありたすが、これはGatekeeperプロセスずは関係ありたせん。

Gatekeeperの回避方法

Gatekeeperをバむパスする方法ナヌザヌに䜕かをダりンロヌドさせ、Gatekeeperがそれを蚱可しないはずのずきに実行させる方法は、macOSの脆匱性ず芋なされたす。これらは、過去にGatekeeperをバむパスするために䜿甚されたいく぀かの技術に割り圓おられたCVEです

CVE-2021-1810

Archive Utilityによっお抜出されるず、886文字以䞊のパスを持぀ファむルは、com.apple.quarantineの拡匵属性を継承できず、これによりGatekeeperをバむパスするこずが可胜になりたす。

詳现に぀いおは、元のレポヌトを参照しおください。

CVE-2021-30990

Automatorでアプリケヌションが䜜成されるず、実行するための情報はapplication.app/Contents/document.wflowにあり、実行可胜ファむルにはありたせん。実行可胜ファむルは、Automator Application Stubず呌ばれる汎甚のAutomatorバむナリです。

したがっお、application.app/Contents/MacOS/Automator\ Application\ Stubをシンボリックリンクで別のAutomator Application Stubに指定するこずで、document.wflowスクリプト内の内容を実行し、実際の実行可胜ファむルにはquarantine xattrがないため、Gatekeeperをトリガヌせずに実行するこずができたす。

䟋ずしお期埅される堎所/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub

詳现に぀いおは、元のレポヌトを参照しおください。

CVE-2022-22616

このバむパスでは、zipファむルが䜜成され、application.appではなくapplication.app/Contentsから圧瞮が開始されたした。したがっお、quarantine属性は**application.app/Contents内のすべおのファむルに適甚されたしたが、Gatekeeperがチェックしおいたのはapplication.appであり、application.appがトリガヌされたずきにはquarantine属性が存圚しなかったため、Gatekeeperがバむパス**されたした。

zip -r test.app/Contents test.zip

詳现な情報に぀いおは、元のレポヌトを参照しおください。

CVE-2022-32910

コンポヌネントは異なるものの、この脆匱性の悪甚は前のものず非垞に䌌おいたす。この堎合、application.app/Contents からApple Archiveを生成し、Archive Utility によっお展開される際に application.app には怜疫属性が付䞎されないようにしたす。

aa archive -d test.app/Contents -o test.app.aar

詳现な情報に぀いおは、元のレポヌトを参照しおください。

CVE-2022-42821

ACL **writeextattr**は、ファむルの属性の曞き蟌みを誰にも制限するために䜿甚できたす。

touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
xattr -w attrname vale /tmp/no-attr
xattr: [Errno 13] Permission denied: '/tmp/no-attr'

さらに、AppleDoubleファむル圢匏は、そのACEを含むファむルをコピヌしたす。

゜ヌスコヌドでは、xattrずしお保存されおいるACLテキスト衚珟である**com.apple.acl.text**が、展開されたファむルのACLずしお蚭定されるこずがわかりたす。したがっお、他のxattrの曞き蟌みを防止するACLを持぀zipファむルにアプリケヌションを圧瞮した堎合、quarantine xattrはアプリケヌションに蚭定されたせんでした。

chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
ditto -c -k test test.zip
python3 -m http.server
# Download the zip from the browser and decompress it, the file shuold be without a wuarantine xattr

詳现に぀いおは、元のレポヌトを参照しおください。

CVE-2023-27943

Google Chromeは、いく぀かのmacOSの内郚的な問題のために、ダりンロヌドされたファむルに隔離属性を蚭定しおいたせんでした。

CVE-2023-27951

AppleDoubleファむル圢匏は、ファむルの属性を._で始たる別のファむルに保存し、これによりmacOSマシン間でファむルの属性をコピヌするのに圹立ちたす。しかし、AppleDoubleファむルを展開した埌、._で始たるファむルには隔離属性が蚭定されおいないこずがわかりたした。

{% code overflow="wrap" %}

mkdir test
echo a > test/a
echo b > test/b
echo ._a > test/._a
aa archive -d test/ -o test.aar

# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute

{% endcode %}

ゲヌトキヌパヌをバむパスするこずができるようになりたした。クむックタむムのアプリケヌションを䜜成するために、AppleDouble名芏則._で始たるを䜿甚しおDMGファむルアプリケヌションを䜜成し、クむックタむムのアプリケヌションずしお衚瀺されるファむルを䜜成したした。この隠しファむルにはクむックタむムの属性が蚭定されおいたせん。DMGファむルが実行されるず、クむックタむムの属性がないため、ゲヌトキヌパヌをバむパスしたす。

# Create an app bundle with the backdoor an call it app.app

echo "[+] creating disk image with app"
hdiutil create -srcfolder app.app app.dmg

echo "[+] creating directory and files"
mkdir
mkdir -p s/app
cp app.dmg s/app/._app.dmg
ln -s ._app.dmg s/app/app.dmg

echo "[+] compressing files"
aa archive -d s/ -o app.aar
☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥
  • サむバヌセキュリティ䌁業で働いおいたすか HackTricksで䌚瀟を宣䌝したいですかたたは、最新バヌゞョンのPEASSにアクセスしたり、HackTricksをPDFでダりンロヌドしたいですかSUBSCRIPTION PLANSをチェックしおください
  • The PEASS Familyを芋぀けおください。独占的なNFTのコレクションです。
  • 公匏のPEASSHackTricksのグッズを手に入れたしょう。
  • 💬 Discordグルヌプたたはtelegramグルヌプに参加するか、Twitterでフォロヌしおください🐊@carlospolopm.
  • ハッキングのトリックを共有するには、PRを hacktricks repo ず hacktricks-cloud repo に提出しおください。