ฉันดาวน์โหลดแอพจากอินเทอร์เน็ตโดยใช้ Safari เมื่อเรียกใช้งาน macOS จะแจ้งเตือนว่าแอปนั้นมาจากผู้พัฒนาที่ไม่ระบุชื่อ
macOS สามารถระบุข้อมูลนี้ได้อย่างไร? เมตาดาต้าการลงชื่อสำหรับแอพที่จัดเก็บอยู่ที่ไหน
ฉันดาวน์โหลดแอพจากอินเทอร์เน็ตโดยใช้ Safari เมื่อเรียกใช้งาน macOS จะแจ้งเตือนว่าแอปนั้นมาจากผู้พัฒนาที่ไม่ระบุชื่อ
macOS สามารถระบุข้อมูลนี้ได้อย่างไร? เมตาดาต้าการลงชื่อสำหรับแอพที่จัดเก็บอยู่ที่ไหน
คำตอบ:
ข้อมูลจะถูกจัดเก็บภายในแอททริบิวต์เสริมโดยอาจมีข้อมูลเพิ่มเติมฝังอยู่ภายในแอปพลิเคชัน
ข้อมูลเหล่านี้จะถูกเก็บไว้กักกันเป็นแอตทริบิวต์ขยาย ใช้xattr
เครื่องมือเพื่อดูคุณสมบัติที่เกี่ยวข้องกับไฟล์หรือแอปพลิเคชัน
com.apple.quarantine
แอตทริบิวต์ที่ก่อให้เกิดข้อความนี้
ดูฉันจะลบ“ คุณสมบัติเพิ่มเติม” ในไฟล์ใน Mac OS X ได้อย่างไร และไม่สามารถเปิดแอปได้เนื่องจากมาจากผู้พัฒนาที่ไม่ระบุชื่อเพื่อดูรายละเอียดเพิ่มเติม
แอ็ตทริบิวต์ส่วนขยายถูกใช้โดยGatekeeperบน macOS และถูกกล่าวถึงในวิธีตั้งค่า (กู้คืน) แอ็ตทริบิวต์ com.apple.quarantine?
ลายเซ็นดิจิทัลที่เป็นตัวเลือกที่ฝังอยู่ภายในแอปพลิเคชันจะใช้เพื่อกำหนดผู้พัฒนาแอปพลิเคชัน หากไม่พบลายเซ็น macOS จะแสดงแอปพลิเคชันว่ามาจากผู้พัฒนาที่ไม่ระบุชื่อ
ในความเป็นจริงข้อความ "นักพัฒนาที่ไม่ระบุชื่อ ... " เป็นผลมาจากการรวมกันของทั้งสองงาน: การตรวจสอบแอตทริบิวต์ com.apple.quarantine และทรัพยากรการลงนามรหัส (ใน * / Contents / _CodeSignature / CodeResources) ในขณะที่สถานะการลงนามจริง กำหนดโดย* / CodeResourcesเท่านั้น
คุณสามารถรับแอ็ตทริบิวต์ส่วนขยายได้โดยป้อน:
$ xattr -p com.apple.quarantine /Applications/*.app
ข้อมูลการเซ็นชื่อรหัสสามารถเข้าถึงได้โดยการป้อน:
$ codesign -dvvv /Applications/*.app
ตัวอย่าง:
$ codesign -dvvvv /Applications/Google\ Chrome.app/
Executable=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Identifier=com.google.Chrome
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=273 flags=0x800(restrict) hashes=3+3 location=embedded
OSPlatform=36
OSSDKVersion=658432
OSVersionMin=657664
Hash type=sha256 size=32
CandidateCDHash sha1=bc8e3dffe7d9d5242e09ea80a220ed365d46fdf2
CandidateCDHash sha256=d7ae6211906bb17d593ce9c215d190a81f37e658
Hash choices=sha1,sha256
Page size=4096
CDHash=d7ae6211906bb17d593ce9c215d190a81f37e658
Signature size=8949
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=20. Mar 2018 at 07:23:20
Info.plist entries=36
TeamIdentifier=EQHXZ8M8AV
Sealed Resources version=2 rules=7 files=203
Internal requirements count=1 size=240
ส่วนที่สำคัญที่สุดคือห่วงโซ่ใบรับรอง (และห่วงโซ่แห่งความไว้วางใจ):
Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
ที่นี่มีสามหน่วยงานที่แตกต่างกันสามารถมองเห็นได้:
ซึ่งหมายความว่าแอพนี้ได้รับการลงนามด้วยใบรับรองนักพัฒนาซอฟต์แวร์ที่ตีพิมพ์และลงนามโดยผู้พัฒนาระดับกลางของ Apple ซึ่งตัวแอพเองนั้นได้รับการเผยแพร่และลงนามโดย Root CA ของ Apple
เชนนี้ผ่านการรับรองจาก Google (หรือมากกว่านั้น: ทีม / หน่วย Google, Inc. (EQHXZ8M8AV)) ในฐานะนักพัฒนาที่ Apple ระบุ
คุณยังสามารถกำหนดรหัสแอพด้วยตัวคุณเองหรือด้วยใบรับรองการลงรหัสจากผู้มีสิทธิ์ระดับกลาง / รูทคนอื่น แต่สิ่งนี้จะไม่สามารถเอาชนะผู้รักษาประตูได้
ขณะนี้มีการเปลี่ยนลำดับสี่ครั้งที่เป็นไปได้สมมติว่า Gatekeeper เปิดใช้งาน (แต่ไม่พิจารณาการลงนามด้วยตนเอง / การลงนามคนต่างด้าว):
ในสองกรณีแรกแอปจะเปิดตัว ในกรณีที่สามคุณจะได้รับข้อความUnindentified Developer คุณสามารถแก้ไขปัญหานี้ได้โดยลบแอตทริบิวต์เพิ่มเติมxattr -d com.apple.quarantine *
(= กรณีที่ 1) ในกรณีที่สี่คุณจะได้รับ"* ถูกดาวน์โหลดจากอินเทอร์เน็ตคุณแน่ใจหรือไม่ว่าต้องการเปิด"
macOS สามารถระบุข้อมูลนี้ได้อย่างไร? เมตาดาต้าการลงชื่อสำหรับแอพที่จัดเก็บอยู่ที่ไหน
ลายเซ็นจะถูกเก็บไว้ในไบนารีแอปพลิเคชันเองพร้อมกับข้อมูลเพิ่มเติมบางอย่างในแอปพลิเคชันบันเดิล (ในไฟล์Contents/_CodeSignature/CodeResources
)
คุณสามารถรับข้อมูลเกี่ยวกับลายเซ็นได้โดยใช้ยูทิลิตีบรรทัดคำสั่งcodesign
- ตัวอย่างเช่น
# codesign -dv /Applications/Preview.app
Executable=/Applications/Preview.app/Contents/MacOS/Preview
Identifier=com.apple.Preview
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=21314 flags=0x0(none) hashes=659+5 location=embedded
Platform identifier=4
Signature size=4485
Info.plist entries=35
TeamIdentifier=not set
Sealed Resources version=2 rules=13 files=2077
Internal requirements count=1 size=68