Làm thế nào để macOS xác định trạng thái ký của một ứng dụng được tải xuống từ Internet?


8

Tôi đã tải xuống một ứng dụng từ Internet bằng Safari. Khi thực hiện nó, macOS thông báo rằng ứng dụng đến từ một nhà phát triển không xác định.

Làm thế nào là macOS có thể xác định thông tin này? Trường hợp siêu dữ liệu ký cho một ứng dụng được lưu trữ?


Nếu tôi hiểu câu hỏi của bạn, bạn sẽ nhận được thông báo này vì một ứng dụng bạn đã tải xuống trong Safari không được ký bởi nhà phát triển được biết đến bởi Apple. Bạn đang hỏi chương trình xyz nằm ở đâu trên máy tính của bạn?
Jake3231

Câu trả lời:


13

Thông tin được lưu trữ trong các thuộc tính mở rộng, với thông tin bổ sung có khả năng được nhúng trong một ứng dụng.

Thuộc tính mở rộng

Thông tin kiểm dịch này được lưu trữ như một thuộc tính mở rộng . Sử dụng xattrcông cụ để xem các thuộc tính được liên kết với một tệp hoặc ứng dụng.

Thuộc tính gây ra thông báo này là com.apple.quarantine.

Xem Làm cách nào để xóa các thuộc tính mở rộng của Viking trên một tệp trong Mac OS X? Ứng dụng không thể được mở vì đó là từ một nhà phát triển không xác định để biết thêm chi tiết.

Người gác cổng và chữ ký mã

Thuộc tính mở rộng được Gatekeeper sử dụng trên macOS và được thảo luận trong phần Cách đặt (khôi phục) thuộc tính com.apple.quarantine?

Chữ ký số tùy chọn được nhúng trong ứng dụng được sử dụng để xác định nhà phát triển ứng dụng. Nếu không tìm thấy chữ ký, macOS trình bày ứng dụng là của một nhà phát triển không xác định.


5
Điều này không hoàn toàn chính xác. Dữ liệu kiểm dịch được sử dụng để theo dõi nguồn của tệp đã tải xuống, nhưng chữ ký ở nơi khác.
duskwuff -inactive-

1
@duskwuff là đúng. Cách ly gây ra cửa sổ bật lên "XXX đã được tải xuống từ Internet, bạn có chắc chắn muốn mở nó không?"
Barmar

1
Không phải tất cả các tập tin và ứng dụng là mã đã ký. Nhiều ứng dụng thì không, vì vậy trong những trường hợp đó không có chữ ký nhúng nào tồn tại. Đây sẽ là trường hợp cho các tin nhắn "nhà phát triển không xác định".
Graham Miln

7

Trong thực tế, thông báo "Nhà phát triển không xác định ..." là kết quả của sự kết hợp của cả hai tác vụ: kiểm tra thuộc tính com.apple.quarantine tài nguyên ký mã (trong * / Nội dung / _CodeSignature / CodeResource) trong khi trạng thái ký thực tế là chỉ được xác định bởi * / CodeResource .

Bạn có thể có được thuộc tính mở rộng bằng cách nhập:

$ xattr -p com.apple.quarantine /Applications/*.app

Thông tin ký mã được truy cập bằng cách nhập:

$ codesign -dvvv /Applications/*.app

Thí dụ:

$ 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

Phần quan trọng nhất là chuỗi chứng chỉ (và chuỗi tin cậy):

Authority=Developer ID Application: Google, Inc. (EQHXZ8M8AV)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

Ở đây có ba cơ quan khác nhau có thể nhìn thấy:

  1. Chứng chỉ gốc: Apple Root CA
  2. Chứng chỉ nhà phát triển trung cấp của Apple: Cơ quan chứng nhận ID nhà phát triển
  3. Chứng chỉ dành cho nhà phát triển: Google, Inc. (EQHXZ8M8AV)

Điều này có nghĩa là ứng dụng được ký với chứng chỉ dành cho nhà phát triển, được xuất bản và ký bởi cơ quan phát triển trung gian của Apple, chính nó được xuất bản và ký bởi Root CA.

Chuỗi này đủ điều kiện Google (hoặc chính xác hơn: nhóm / đơn vị Google, Inc. (EQHXZ8M8AV)) là nhà phát triển được Apple xác định.

Bạn cũng có thể tự mã hóa ứng dụng hoặc với chứng chỉ mã hóa từ một cơ quan trung gian / gốc khác nhưng điều này sẽ không vượt qua Gatekeeper.

Bây giờ có bốn hoán vị có thể giả sử Gatekeeper được bật (nhưng không xem xét tự ký / ký người ngoài hành tinh):

  • Không có thuộc tính com.apple.quarantine / không có chứng chỉ Nhà phát triển của Apple (Ví dụ: thùng bia đã cài đặt Apache CouchDB )
  • Không có thuộc tính com.apple.quarantine / chứng chỉ Nhà phát triển của Apple (Ví dụ: thùng bia đã cài đặt Google Chrome )
  • Thuộc tính com.apple.quarantine / không có chứng chỉ Nhà phát triển của Apple (Ví dụ: Apache CouchDB được cài đặt bằng cách tải xuống zip từ trang web và sao chép ứng dụng đã giải nén vào / Ứng dụng / )
  • Thuộc tính com.apple.quarantine / chứng chỉ Nhà phát triển của Apple (Ví dụ: Google Chrome được cài đặt bằng cách tải xuống dmg từ trang web và sao chép ứng dụng bên trong vào / Ứng dụng / )

Trong hai trường hợp đầu tiên, ứng dụng sẽ đơn giản khởi chạy. Trong trường hợp thứ ba, bạn sẽ nhận được thông báo Nhà phát triển chưa xác định . Bạn có thể giải quyết điều này bằng cách xóa thuộc tính mở rộng xattr -d com.apple.quarantine *(= trường hợp 1). Trong trường hợp thứ tư, bạn sẽ nhận được "* đã được tải xuống từ Internet, bạn có chắc chắn muốn mở nó không?"


5

Làm thế nào là macOS có thể xác định thông tin này? Trường hợp siêu dữ liệu ký cho một ứng dụng được lưu trữ?

Chữ ký được lưu trữ trong chính nhị phân của ứng dụng, với một số dữ liệu bổ sung trong gói ứng dụng (trong tệp Contents/_CodeSignature/CodeResources).

Bạn có thể lấy một số thông tin về chữ ký bằng tiện ích dòng lệnh codesign- ví dụ:

# 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
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.