macOS ระบุสถานะการลงชื่อของแอพที่ดาวน์โหลดจากอินเทอร์เน็ตได้อย่างไร


8

ฉันดาวน์โหลดแอพจากอินเทอร์เน็ตโดยใช้ Safari เมื่อเรียกใช้งาน macOS จะแจ้งเตือนว่าแอปนั้นมาจากผู้พัฒนาที่ไม่ระบุชื่อ

macOS สามารถระบุข้อมูลนี้ได้อย่างไร? เมตาดาต้าการลงชื่อสำหรับแอพที่จัดเก็บอยู่ที่ไหน


หากฉันเข้าใจคำถามของคุณคุณจะได้รับการแจ้งเตือนนี้เนื่องจากแอปพลิเคชันที่คุณดาวน์โหลดใน Safari ไม่ได้ลงนามโดยนักพัฒนาซอฟต์แวร์ของ Apple คุณกำลังถามว่าโปรแกรม xyz ตั้งอยู่บนคอมพิวเตอร์ของคุณหรือไม่?
Jake3231

คำตอบ:


13

ข้อมูลจะถูกจัดเก็บภายในแอททริบิวต์เสริมโดยอาจมีข้อมูลเพิ่มเติมฝังอยู่ภายในแอปพลิเคชัน

คุณสมบัติเพิ่มเติม

ข้อมูลเหล่านี้จะถูกเก็บไว้กักกันเป็นแอตทริบิวต์ขยาย ใช้xattrเครื่องมือเพื่อดูคุณสมบัติที่เกี่ยวข้องกับไฟล์หรือแอปพลิเคชัน

com.apple.quarantineแอตทริบิวต์ที่ก่อให้เกิดข้อความนี้

ดูฉันจะลบ“ คุณสมบัติเพิ่มเติม” ในไฟล์ใน Mac OS X ได้อย่างไร และไม่สามารถเปิดแอปได้เนื่องจากมาจากผู้พัฒนาที่ไม่ระบุชื่อเพื่อดูรายละเอียดเพิ่มเติม

ผู้รักษาประตูและลายเซ็นรหัส

แอ็ตทริบิวต์ส่วนขยายถูกใช้โดยGatekeeperบน macOS และถูกกล่าวถึงในวิธีตั้งค่า (กู้คืน) แอ็ตทริบิวต์ com.apple.quarantine?

ลายเซ็นดิจิทัลที่เป็นตัวเลือกที่ฝังอยู่ภายในแอปพลิเคชันจะใช้เพื่อกำหนดผู้พัฒนาแอปพลิเคชัน หากไม่พบลายเซ็น macOS จะแสดงแอปพลิเคชันว่ามาจากผู้พัฒนาที่ไม่ระบุชื่อ


5
มันไม่ถูกต้องนัก ข้อมูลการกักเก็บนั้นใช้เพื่อติดตามแหล่งที่มาของไฟล์ที่ดาวน์โหลด แต่ลายเซ็นนั้นอยู่ที่อื่น
duskwuff -inactive-

1
@duskwuff ถูกต้อง การกักกันทำให้เกิดป๊อปอัป "XXX ถูกดาวน์โหลดจากอินเทอร์เน็ตคุณแน่ใจหรือไม่ว่าต้องการเปิด"
Barmar

1
ไฟล์และแอปพลิเคชั่นบางอย่างนั้นไม่ได้ลงนามในรหัส แอปพลิเคชันจำนวนมากไม่ได้ดังนั้นในกรณีเหล่านั้นไม่มีลายเซ็นฝังอยู่ นี่จะเป็นกรณีของข้อความ "นักพัฒนาที่ไม่ปรากฏชื่อ"
Graham Miln

7

ในความเป็นจริงข้อความ "นักพัฒนาที่ไม่ระบุชื่อ ... " เป็นผลมาจากการรวมกันของทั้งสองงาน: การตรวจสอบแอตทริบิวต์ 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

ที่นี่มีสามหน่วยงานที่แตกต่างกันสามารถมองเห็นได้:

  1. ใบรับรองหลัก: Apple Root CA
  2. ใบรับรองนักพัฒนาซอฟต์แวร์ระดับกลางของ Apple: Developer ID Certification Authority
  3. ใบรับรองผู้พัฒนา: Google, Inc. (EQHXZ8M8AV)

ซึ่งหมายความว่าแอพนี้ได้รับการลงนามด้วยใบรับรองนักพัฒนาซอฟต์แวร์ที่ตีพิมพ์และลงนามโดยผู้พัฒนาระดับกลางของ Apple ซึ่งตัวแอพเองนั้นได้รับการเผยแพร่และลงนามโดย Root CA ของ Apple

เชนนี้ผ่านการรับรองจาก Google (หรือมากกว่านั้น: ทีม / หน่วย Google, Inc. (EQHXZ8M8AV)) ในฐานะนักพัฒนาที่ Apple ระบุ

คุณยังสามารถกำหนดรหัสแอพด้วยตัวคุณเองหรือด้วยใบรับรองการลงรหัสจากผู้มีสิทธิ์ระดับกลาง / รูทคนอื่น แต่สิ่งนี้จะไม่สามารถเอาชนะผู้รักษาประตูได้

ขณะนี้มีการเปลี่ยนลำดับสี่ครั้งที่เป็นไปได้สมมติว่า Gatekeeper เปิดใช้งาน (แต่ไม่พิจารณาการลงนามด้วยตนเอง / การลงนามคนต่างด้าว):

  • ไม่มีแอตทริบิวต์ com.apple.quarantine / ไม่มีใบรับรองผู้พัฒนา Apple (ตัวอย่าง: brew cask ติดตั้ง Apache CouchDB )
  • ไม่มีแอตทริบิวต์ com.apple.quarantine / ใบรับรองผู้พัฒนา Apple (ตัวอย่าง: ติดตั้งถังข้อมูล Google Chrome )
  • แอตทริบิวต์ com.apple.quarantine / ไม่มีใบรับรอง Apple Developer (ตัวอย่าง: Apache CouchDB ติดตั้งโดยการดาวน์โหลด zip จากเว็บไซต์และคัดลอกแอปที่คลายซิปไปยัง / Applications / )
  • แอตทริบิวต์ com.apple.quarantine / ใบรับรองนักพัฒนา Apple (ตัวอย่าง: Google Chrome ติดตั้งโดยการดาวน์โหลด dmg จากเว็บไซต์และคัดลอกแอปภายในไปยัง / Applications / )

ในสองกรณีแรกแอปจะเปิดตัว ในกรณีที่สามคุณจะได้รับข้อความUnindentified Developer คุณสามารถแก้ไขปัญหานี้ได้โดยลบแอตทริบิวต์เพิ่มเติมxattr -d com.apple.quarantine *(= กรณีที่ 1) ในกรณีที่สี่คุณจะได้รับ"* ถูกดาวน์โหลดจากอินเทอร์เน็ตคุณแน่ใจหรือไม่ว่าต้องการเปิด"


5

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.