Những hạn chế của việc ký mã ad-hoc là gì?


14

Có thể ký mã hoặc ứng dụng "ad-hoc" bằng cách sử dụng codesign. Trang người đàn ông cho chúng tôi biết những điều sau đây về việc ký mã ad-hoc:

Nếu danh tính là một chữ cái "-" (dấu gạch ngang), ký đặc biệt được thực hiện. Ký đặc biệt hoàn toàn không sử dụng một danh tính và xác định chính xác một trường hợp mã. Những hạn chế đáng kể áp dụng cho việc sử dụng mã được ký đặc biệt; tham khảo tài liệu trước khi sử dụng này.

(Nhấn mạnh thêm bởi tôi)

Tôi muốn biết thêm và cố gắng tìm tài liệu nói, nhưng tôi không thể tìm thấy bất kỳ chi tiết nào. Tôi đã tìm thấy một ghi chú kỹ thuật gọi là "Độ sâu đăng nhập mã macOS" , nhưng nó không đề cập đến việc ký đặc biệt.

Những "hạn chế đáng kể" này là gì và chúng được ghi nhận ở đâu?

Câu trả lời:


9

Về cơ bản ký ad-hoc trong bối cảnh này có nghĩa là nhị phân được ký mà không có bất kỳ bằng chứng mật mã nào cả.

Về bản chất, thông thường các tệp nhị phân được ký bằng cách thêm một cái gọi là CMS (một thông điệp mật mã) trong đó hàm băm của CodeDirectory là thông điệp được ký bởi danh tính ký. Điều này có nghĩa là người ngoài có thể xác minh rằng mã thực sự đã được ký bởi ai đó đang giữ khóa riêng cho danh tính đó.

Khi chạy các chương trình, hệ thống macOS có thể xác minh rằng các chữ ký này là hợp lệ và nó tin tưởng vào danh tính ký - và nếu có, hãy chạy chương trình. Đây là những điều cơ bản của chức năng GateKeeper.

Các tệp nhị phân có chữ ký đặc biệt khác nhau rất nhiều vì chúng không chứa CMS như vậy. Thay vào đó, nó chỉ đơn giản giữ giá trị băm SHA-1 của CodeDirectory mà không có bất kỳ bằng chứng mật mã nào về tính hợp lệ của nó và không có đường dẫn chứng nhận / danh tính để xác minh.

CodeDirectory là một đối tượng mô tả một thể hiện cụ thể của mã tĩnh bằng cách có các giá trị băm cho các đoạn mã khác nhau mà ứng dụng được tạo từ đó. Bằng cách đảm bảo rằng CodeDirectory không bị làm phiền bằng cách xác minh chữ ký mã hóa và các bit mã khác nhau của ứng dụng khớp với các giá trị băm được lưu trữ trong thư mục, bạn có thể xác định rằng mã không bị giả mạo.

Nếu không có bằng chứng mật mã, việc kiểm tra "không bị làm phiền" này không thể được thực hiện theo cách thông thường.

Thay vào đó, các nhị phân có chữ ký đặc biệt được kiểm tra bằng cách so sánh giá trị băm SHA-1 với danh sách các giá trị băm "đã biết" được lưu trữ trong bộ đệm tin cậy tĩnh bên trong kernel.

Về bản chất, điều này có nghĩa là "những hạn chế đáng kể" được đặt trên bất kỳ ứng dụng nào bạn tự ký là nó sẽ không vượt qua bất kỳ loại xác minh nào ở bất cứ đâu. Về cơ bản nó giống như một nhị phân không ký.

Tuy nhiên, nếu bạn là Apple, bạn có thể tạo các ứng dụng không được mã hóa theo cách thông thường và thay vào đó được hạt nhân tin cậy rõ ràng. Ví dụ, nếu Apple muốn đảm bảo rằng ứng dụng không bị xáo trộn khi chạy ở giai đoạn đầu khi khởi động hệ thống, nơi xác minh nhận dạng ký đầy đủ không hoạt động (hoặc không khả dụng) thì họ có thể sử dụng ký quảng cáo. Các ứng dụng này luôn có thể được xác minh bằng bộ đệm tin cậy tĩnh, bất kể kho lưu trữ chứng chỉ của bạn có bị hos hay bất cứ thứ gì tương tự không.

Trong thực tế, việc tạo các tệp nhị phân có chữ ký đặc biệt chỉ có giá trị thực tế cho các nhà phát triển của Apple.

Bạn có thể tìm thấy tài liệu nhỏ về việc đăng nhập đặc biệt trong phần nhà phát triển của Apple. Ví dụ:

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

Nhưng bạn cũng có thể tìm thấy các đoạn tài liệu trong mã nguồn cho chính tiện ích Codeign và trong mã nguồn cho libsecurance.


"Chỉ có giá trị thực tế cho các nhà phát triển Apple" ở đây có nghĩa là "chỉ dành cho các nhà phát triển làm việc tại Apple" hay "chỉ dành cho các nhà phát triển làm việc trên nền tảng của Apple"? Thực sự tò mò, vì chúng tôi đã bắt đầu gặp một số vấn đề mới trong đó móc khóa không thể tìm thấy khóa ngay cả khi tên chính xác và chúng tôi đang xem xét chuyển sang dấu gạch nối cho các bản dựng không phát hành.
Trejkaz

1
Phương tiện chỉ dành cho các nhà phát triển làm việc tại Apple.
jksoegaard

Lưu ý rằng trình giả lập iOS cũng sử dụng ký adhoc. Việc ký Adhoc có thể được sử dụng cho các nhà phát triển bên ngoài Apple để cho phép ứng dụng yêu cầu quyền lợi, điều mà tôi không chắc là không có chữ ký mã (tất cả các tài liệu tôi thấy đều không có). Trên Mac, điều này thường không phải là một vấn đề nhưng trên iOS, nhiều tính năng được đặt sau các quyền lợi, vì vậy việc kiểm tra xem điều này có hoạt động chính xác là điều mong muốn đối với các nhà phát triển iOS.
vắt sữa

@milch Bạn đang trộn lẫn hai khái niệm không liên quan - "ký adhoc" (đó là câu hỏi này là gì) và "phân phối adhoc" (đó là những gì nhà phát triển iOS thường sử dụng và quan tâm đến quyền lợi, v.v.)
jksoegaard

Tôi khá chắc chắn các bản dựng giả lập được ký tên (không được phân phối). Bạn có thể kiểm tra bằng cách kiểm tra một ứng dụng iOS được xây dựng cho trình giả lập codesign -dv --verbose=4 /path/to/the.app. Bạn sẽ nhận lại được một dòng nói Signature=adhoc, dường như chỉ ra một chữ ký adhoc. Sự vắng mặt đáng chú ý là các khóa khác thường có trong một ứng dụng iOS được ký thường xuyên, chẳng hạn như AuthorityTeamIdentifier
sữa vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.