Tính xác thực của các gói Debian được đảm bảo như thế nào?


8

Những hệ thống và quy trình bảo mật nào được áp dụng để ngăn chặn các bên thứ ba độc hại hack / xâm phạm tính bảo mật của mã trong các máy nhân bản Debian hoặc để xác minh rằng các gói chúng tôi nhận được trên thực tế là các gói mà các nhà bảo trì nghĩ là chúng?

Câu trả lời:


14

Xác minh gói

Nội dung của các gương được ký bằng khóa PGP, trực tiếp hoặc gián tiếp. Bắt đầu từ "gốc" của bản phân phối Debian:

  • Release, được ký với một chữ ký tách rời Release.gpg, chứa các giá trị băm (MD5, SHA1, SHA256) của tất cả các chỉ mục gói và băm cài đặt ( InReleasebây giờ kết hợp cả hai);
  • các chỉ số gói ( ví dụ , binary-amd64) chứa băm (MD5 và SHA256) của các gói.

Băm và chữ ký được kiểm tra bằng các công cụ như apt-getsử dụng khóa PGP được lưu trữ trên hệ thống (được quản lý bởi apt-key). Vì vậy, miễn là hệ thống nhận là âm thanh, theo mặc định, không có gói nào có thể được cài đặt từ kho lưu trữ Debian nếu nó không được ký (gián tiếp) bởi khóa PGP lưu trữ. Bất kỳ kẻ xâm nhập nào trên gương sẽ không thể thay thế nhị phân nếu chúng cũng không có quyền kiểm soát khóa PGP có liên quan.

Điều khiển gương

Điều này có nghĩa là việc thỏa hiệp kho lưu trữ không đủ để thực sự thỏa hiệp các hệ thống người dùng cuối; bạn cũng cần thỏa hiệp khóa PGP mà các hệ thống đó đã tin tưởng. (Một hệ quả của điều này là việc thêm một khóa vào hệ thống Debian không phải là điều gì đó nhẹ nhàng.) Điều đó giải quyết câu hỏi đầu tiên của bạn ở một mức độ nào đó, vì tính bảo mật của kho lưu trữ không quan trọng lắm. Tuy nhiên, các hệ thống quan trọng (nơi ký kết xảy ra) được giám sát và giám sát chặt chẽ, và rất ít người có quyền truy cập vào chúng.

Bảo trì kỳ vọng

Đảm bảo rằng các gói "trên thực tế là các gói mà người bảo trì nghĩ rằng chúng" có liên quan nhiều hơn một chút. Đây là đường dẫn được thực hiện bởi một gói:

  • gói được chuẩn bị bởi một người bảo trì và được ký bằng một khóa trong khóa Debian ( tức là một khóa thuộc về Nhà phát triển Debian đang tải lên hoặc Trình bảo trì Debian, được tải lên máy chủ khóa Debian và được nhóm bảo trì khóa nhập vào);
  • gói đã ký được tải lên kho lưu trữ, nơi nó được xác minh (trong số những thứ khác, các khóa được sử dụng phải nằm trong khóa hiện tại và không được hết hạn, chữ ký phải hợp lệ và nếu gói được ký bởi DM, thì đó là DM phải có các quyền liên quan cho gói);
  • mọi nhị phân được tải lên đều được đẩy đến kho lưu trữ cuối cùng (tôi đang đơn giản hóa một chút ở đây, nhưng đó là hiệu quả);
  • mọi tệp nhị phân bị thiếu được tạo bởi một buildd và được ký bởi khóa PGP của buildd, và được đẩy đến kho lưu trữ cuối cùng (trong đó biết khóa buildd nào là hợp lệ và xác minh các tệp chống lại các tệp đó);
  • tất cả các cập nhật này cuối cùng được đẩy ra mạng gương, với các cập nhật chỉ mục thích hợp (được ký như mô tả ở trên).

Nếu nhà bảo trì tải lên các tệp nhị phân cùng với nguồn gói, thì đây là các tệp cuối cùng được phục vụ (trong thời điểm hiện tại). Vì việc tải lên các tệp nhị phân bây giờ là tùy chọn, nên việc bỏ qua chúng ngày càng phổ biến và cuối cùng các tệp nhị phân được tải lên sẽ bị loại bỏ. (Điều này luôn luôn là trường hợp trong Ubuntu.) Việc các nhị phân khác có khớp với mong đợi của người bảo trì hay không phụ thuộc vào mạng buildd; vì vậy buildds cũng là những hệ thống quan trọng, dưới sự giám sát chặt chẽ và ít có sự tiếp cận của con người. Vì tất cả các tạo phẩm đã được ký, nên luôn có thể xác minh tính toàn vẹn của các tệp: đầu tiên là dựa vào khóa của người bảo trì, sau đó là khóa của buildds và cuối cùng là khóa của kho lưu trữ.

Như được chỉ ra bởi plugwash , chữ ký gốc không có sẵn trên gương và bất kỳ DD nào cũng có thể tải lên một tệp nhị phân bị thiếu. Chữ ký gốc có thể được lấy từ kho lưu trữ thay đổi debian-devel-thay đổi .

Tóm lại , trong khi hệ thống hiện tại không hoàn hảo, nó cung cấp khả năng truy nguyên nguồn gốc cho tất cả các tệp bạn có thể tải xuống từ các máy nhân bản. Có một số nỗ lực để cải thiện tình hình: các bản dựng có thể tái tạo (sẽ cho phép xác minh độc lập các thư từ của nhị phân với nguồn được xuất bản), bỏ các nhị phân do người bảo trì cung cấp ...


Đáng ngưỡng mộ toàn diện, nhưng bạn cũng có thể đã nói với người đăng một cách hợp lý để đi và đọc tài liệu. :-)
Faheem Mitha

@FaheemMitha Tôi lưỡng lự, nhưng tài liệu gì? Có wiki.debian.org/SecureApt nhưng nó không bao gồm mọi thứ ... Việc ghép tất cả lại với nhau khá phức tạp, trừ khi có một số tài liệu khác mà tôi không biết!
Stephen Kitt

Vì vậy, các hệ điều hành debian mà người dùng chạy có các khóa PGP công khai được nhúng trước - được ghép nối với các khóa riêng trên các hệ thống quan trọng (nơi ký kết xảy ra) - và apt-getxác minh các gói bằng các khóa được nhúng trước cục bộ này, vì nó có tin tưởng chúng không?
the_velour_fog

1
@the_velour_fog vâng, điều đó (gần như) đúng; các khóa công khai được vận chuyển trong debian-archive-keyringgói. apt-getxác minh Releasecác tệp bằng các khóa đó và các gói bằng cách sử dụng các giá trị băm có trong tệp ReleasePackages.
Stephen Kitt
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.