ข้อ จำกัด ของการเซ็นรหัส ad-hoc คืออะไร?


12

มันเป็นไปได้ที่จะลงนามรหัสหรือปพลิเคชัน "เฉพาะกิจ" codesignโดยใช้ หน้าคนบอกเราเกี่ยวกับการเซ็นชื่อรหัสเฉพาะกิจต่อไปนี้:

หาก identity เป็นตัวอักษรเดียว "-" (เส้นประ) ระบบจะทำการเซ็นชื่อแบบเฉพาะกิจ การลงชื่อ Ad-hoc ไม่ได้ใช้ข้อมูลประจำตัวเลยและระบุรหัสเดียวอย่างแน่นอน ข้อ จำกัด ที่สำคัญนำไปใช้กับการใช้รหัสลงนามแบบเฉพาะกิจ; ศึกษาเอกสารก่อนใช้งาน

(เน้นที่เพิ่มโดยฉัน)

ฉันต้องการทราบข้อมูลเพิ่มเติมและพยายามค้นหาเอกสารดังกล่าว แต่ฉันไม่สามารถหารายละเอียดใด ๆ ได้ ฉันพบบันทึกทางเทคนิคที่เรียกว่า "macOS Code Signing In In Depth"แต่ไม่ได้กล่าวถึงการลงโฆษณาแบบเฉพาะกิจเลย

"ข้อ จำกัด ที่สำคัญ" เหล่านี้คืออะไรและมีการจัดทำเอกสารไว้ที่ใด

คำตอบ:


6

โดยทั่วไปการเซ็นชื่อแบบเฉพาะกิจในบริบทนี้หมายความว่าไบนารีได้รับการลงชื่อโดยไม่มีการพิสูจน์การเข้ารหัสใด ๆ เลย

ในสาระสำคัญโดยปกติไบนารีมีการลงนามโดยเพิ่ม CMS ที่เรียกว่า (ข้อความเข้ารหัสลับ) ที่แฮชของ CodeDirectory เป็นข้อความที่ลงนามโดยเอกลักษณ์การลงนาม ซึ่งหมายความว่าบุคคลภายนอกสามารถตรวจสอบได้ว่ามีการเซ็นรหัสโดยผู้ที่ถือกุญแจส่วนตัวสำหรับตัวตนนั้นจริงๆ

เมื่อเรียกใช้โปรแกรมระบบ macOS สามารถตรวจสอบว่าลายเซ็นเหล่านี้ถูกต้องและเชื่อถือได้ในการเซ็นชื่อ - และถ้าเป็นเช่นนั้นให้เรียกใช้โปรแกรม นี่คือพื้นฐานของการทำงานของ GateKeeper

ไบนารีที่เซ็นชื่อแบบเฉพาะกิจมีความแตกต่างกันอย่างมากเนื่องจากไม่มี CMS ดังกล่าว แต่มันก็เก็บค่าแฮช SHA-1 ของ CodeDirectory โดยไม่มีการพิสูจน์การเข้ารหัสที่ถูกต้องและไม่มีเส้นทางของใบรับรอง / ข้อมูลประจำตัวเพื่อตรวจสอบ

CodeDirectory เป็นวัตถุที่อธิบายถึงอินสแตนซ์เฉพาะของรหัสคงที่โดยมีค่าแฮชสำหรับส่วนต่าง ๆ ของรหัสที่ทำจากแอปพลิเคชัน โดยการทำให้มั่นใจว่า CodeDirectory ไม่ได้รับการแก้ไขโดยการตรวจสอบลายเซ็นการเข้ารหัสลับและบิตรหัสต่างๆของแอปพลิเคชันตรงกับค่าแฮชที่เก็บไว้ในไดเรกทอรีคุณสามารถตรวจสอบได้ว่ารหัสนั้นไม่ได้ถูกดัดแปลง

หากไม่มีหลักฐานการเข้ารหัสลับการตรวจสอบ "ไม่ได้แก้ไข" นี้จะไม่สามารถดำเนินการตามปกติ

แทนไบนารีที่เซ็นชื่อแบบเฉพาะกิจแล้วจะถูกตรวจสอบโดยการเปรียบเทียบค่าแฮช SHA-1 กับรายการของค่าแฮช "รู้จักดี" ที่เก็บไว้ในแคชความน่าเชื่อถือแบบคงที่ภายในเคอร์เนล

ในสาระสำคัญซึ่งหมายความว่า "ข้อ จำกัด ที่สำคัญ" ที่วางไว้ในแอปพลิเคชันใด ๆ ที่คุณเฉพาะกิจลงชื่อด้วยตัวคุณเองก็คือมันจะไม่ผ่านการตรวจสอบใด ๆ โดยทั่วไปมันจะเหมือนกับไบนารีที่ไม่ได้ลงชื่อ

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

ในทางปฏิบัติการสร้างไบนารีที่เซ็นชื่อแบบ ad-hoc นั้นมีคุณค่าสำหรับผู้พัฒนา Apple เท่านั้น

คุณสามารถค้นหาเอกสารย่อยได้ที่การลงโฆษณาแบบเฉพาะกิจในส่วนนักพัฒนาของ Apple ตัวอย่างเช่น:

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

แต่คุณยังสามารถค้นหาตัวอย่างของเอกสารในซอร์สโค้ดสำหรับยูทิลิตี้ Codeign เองและในซอร์สโค้ดสำหรับ libsecurity


"เฉพาะค่าจริงสำหรับนักพัฒนา Apple" ที่นี่หมายถึง "สำหรับนักพัฒนาที่ทำงานกับ Apple" หรือ "เฉพาะสำหรับนักพัฒนาที่ทำงานบนแพลตฟอร์ม Apple" หรือไม่? อยากรู้อยากเห็นอย่างแท้จริงในขณะที่เราเริ่มได้รับปัญหาใหม่ที่พวงกุญแจไม่สามารถหากุญแจแม้ว่าชื่อจะถูกต้องและเรากำลังพิจารณาเปลี่ยนเป็นเครื่องหมายยัติภังค์สำหรับการสร้างที่ไม่ได้เผยแพร่
Trejkaz

1
หมายถึงเฉพาะสำหรับนักพัฒนาซอฟต์แวร์ที่ทำงานกับ Apple
jksoegaard

โปรดทราบว่าตัวจำลอง iOS ใช้การลงชื่อแบบ adhoc ด้วย การลงชื่อ Adhoc อาจใช้สำหรับนักพัฒนานอก Apple เพื่อเปิดใช้งานแอพเพื่อขอสิทธิ์ซึ่งฉันไม่แน่ใจว่าเป็นไปได้โดยไม่ต้องมีรหัสลายเซ็นต์ (เอกสารทั้งหมดที่ฉันเคยเห็นไม่มี) บน Mac นี่ไม่ใช่ปัญหา แต่บน iOS มีฟีเจอร์มากมายที่ได้รับการคุ้มครองดังนั้นการทดสอบว่าการทำงานนี้อย่างถูกต้องเป็นสิ่งที่ผู้พัฒนา iOS ต้องการ
นม

@milch คุณกำลังรวมแนวคิดที่ไม่เกี่ยวข้องสองอย่าง - "การลงชื่อ adhoc" (ซึ่งเป็นคำถามนี้เกี่ยวกับ) และ "การกระจาย adhoc" (ซึ่งเป็นสิ่งที่นักพัฒนา iOS ใช้บ่อยและกังวลเรื่องสิทธิ ฯลฯ )
jksoegaard

ฉันค่อนข้างแน่ใจว่างานสร้างตัวจำลองนั้นได้รับการเซ็นชื่อแบบ Adhoc แล้ว (ยังไม่กระจาย) คุณสามารถตรวจสอบโดยการตรวจสอบแอป iOS codesign -dv --verbose=4 /path/to/the.appของคุณสร้างขึ้นเพื่อจำลองด้วย คุณจะได้รับการพูดกลับบรรทัดSignature=adhocซึ่งดูเหมือนจะระบุลายเซ็น adhoc โดยเฉพาะอย่างยิ่งที่ขาดหายไปเป็นปุ่มอื่น ๆ ที่มักจะปรากฏในแอปพลิเคชั่น iOS ที่มีการลงชื่อเป็นประจำเช่นAuthorityและTeamIdentifier
milch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.