2011-02-01 29 views
5

Ký bằng tên mạnh (cặp khóa được lưu trữ trong tệp .snk) là (trong số các công dụng khác) có nghĩa là protect against forging assemblies. Ví dụ: Tôi gửi bản lắp ráp của tôi được ký với tên mạnh, sau đó một số nhà phát triển khác sử dụng lắp ráp của tôi và do đó, hội đồng của ông hiện có chứa một tham chiếu đến tôi, đề cập đến khóa công khai của cặp khóa của tôi. Một số người dùng cài đặt nhà phát triển lắp ráp và lắp ráp của tôi và vui vẻ sử dụng mã của nhà phát triển đó. Nếu bất kỳ ai khác cố gắng sản xuất một hội đồng trông giống như một phiên bản của tôi và thuyết phục người dùng rằng đó là "bản cập nhật đáng giá" mà lắp ráp giả mạo sẽ không tải vì tôi kiểm soát cặp khóa của tôi và cụm lắp ráp đó không được ký với cùng một cặp khóa . Được, tuyệt đấy.Làm thế nào để ký tên với một tên mạnh mẽ bảo vệ chống giả mạo một tập hợp các hội đồng?

Nhưng điều gì ngăn cản một bên độc hại giả mạo cả hội đồng của tôi và hội đồng phụ thuộc của nhà phát triển khác và "giao hàng" cả hai? Họ lấy hội đồng của tôi và hội đồng của nhà phát triển, làm xáo trộn cả hai, ký phiên bản giả mạo của hội đồng của tôi với bất kỳ chìa khóa nào, sau đó thêm một tham chiếu đến nó vào phiên bản giả mạo của hội đồng phụ thuộc, ký tên nó và sau đó gửi cả hai. Tôi có nghĩa là độc hại "vận chuyển" hai hội đồng không nên khó khăn hơn nhiều so với "vận chuyển" một hội đồng.

Làm cách nào để ký tên với tên mạnh mẽ bảo vệ chống giả mạo nhiều hội đồng?

+0

Vâng, cũng có tên mạnh mẽ trong quá trình lắp ráp. Tiếp tục kéo chuỗi đó và bạn sẽ kết thúc tại EXE. Nếu kẻ tấn công có thể thay thế nó thì không còn điểm nào trong việc sử dụng tên mạnh. –

+0

@Hans Passant: Tôi đoán bạn nói đúng.Bạn có thể thêm câu trả lời này làm câu trả lời không? – sharptooth

Trả lời

5

Đặt tên mạnh một hội đồng thực sự không có nghĩa là bảo vệ hội đồng đã ký. Nó là để bảo vệ các hội đồng khác đang tải lắp ráp đã ký kết. Ví dụ, nếu một EXE được tin cậy và muốn tải một DLL đã biết từ một vị trí đã biết (như GAC, chia sẻ mạng, internet, v.v.), nó có thể làm như vậy bằng cách sử dụng tên mạnh với một mức nào đó tin tưởng rằng hội đồng không bị giả mạo.

Nhưng, nếu toàn bộ tập hợp được tháo rời sau đó lắp ráp lại và ký lại, thì có, bạn đúng, họ chỉ có thể viết lại các dòng mã tải phần còn lại của hội đồng sao cho nó tải chúng bằng khóa mới (giả).

Nhưng loại giả mạo này sẽ hiển nhiên. Nói cách khác, ký tên mạnh mẽ cung cấp bằng chứng rõ ràng về giả mạo, nhưng không ngăn chặn nó trong mọi trường hợp. Thêm vào đó thực tế là một quản trị viên cục bộ có thể tắt hoàn toàn việc xác minh tên mạnh (cho mục đích "phát triển") và rõ ràng là việc ký tên mạnh không phải là một cơ chế bảo mật chống đạn.

Tương tự như vậy đối với Authenticode và ký trình điều khiển. Tất cả chúng ta đã thấy một sản phẩm ngoài đó hướng dẫn người dùng "bỏ qua cảnh báo bảo mật". Đó là cơ bản những gì EXE sẽ làm nếu xác minh tên mạnh bị vô hiệu hóa hoặc toàn bộ tập hợp các chữ ký của họ bị tước bỏ - nó sẽ bỏ qua cảnh báo.

0

Đặt tên mạnh là tất cả về, ... "đặt tên". Tôi trích dẫn từ đây: Using Strong Name Signatures

"Tên mạnh cung cấp cơ chế mạnh mẽ để cung cấp cho .NET Framework lắp ráp danh tính duy nhất".

Đó là tất cả những gì bạn sẽ nhận được từ cơ chế này. Nó có nghĩa là tôi có thể rèn lắp ráp của bạn và tất cả các bộ phận nó tham chiếu, nhưng tôi sẽ không thể giả vờ "bạn đã làm nó". Tôi sẽ không thể giả vờ bạn là nhà xuất bản của các hội đồng này.

+0

Vấn đề tôi thấy là toàn bộ cơ sở hạ tầng đó không bao gồm xuất bản khóa công khai. Giả sử tôi tải về một hội đồng và muốn tìm hiểu xem nó từ bạn. Làm thế nào để làm điều đó? – sharptooth

+0

@sharptooh - Có một số điều bạn có thể làm với giao diện ICLRStrongName mới (http://msdn.microsoft.com/en-us/library/dd409349.aspx), ví dụ: StrongNameCompareAssemblies, nhưng nếu bạn thêm loại kiểm tra đó trong ứng dụng của bạn, các cuộc gọi cũng có thể được giả mạo :-) –

+0

Có, chính xác và vấn đề là không có cách nào để bạn có thể xuất bản khóa công khai của mình. Đó là bởi vì toàn bộ cơ chế không phải là để xác minh rằng lắp ráp là từ bạn - nó chỉ để xác minh rằng tất cả các phiên bản tiếp theo là từ cùng một nhà xuất bản như phiên bản ban đầu. – sharptooth

Các vấn đề liên quan