HTTPS và VPN không xác thực gói bạn cài đặt
Phân phối được mã hóa bảo vệ một đường đi, không bảo vệ nhà phát hành. Hãy so sánh điều apt và dnf5 thực sự kiểm tra, rồi tìm ra ranh giới nào đã thất bại trước khi động đến khóa.
Một bản cập nhật thất bại, và gợi ý trong luồng đi theo lối quen thuộc: lưu lượng đi qua VPN, nên bản tải xuống phải đáng tin, và việc kiểm tra chữ ký được nới lỏng để vượt qua lỗi. Hai ý tưởng riêng biệt đã bị gộp vào một câu. Mã hóa bảo vệ một đường đi giữa hai đầu; xác thực quyết định liệu các byte có đến từ nhà phát hành mà bạn định dùng hay không. Đường hầm cung cấp điều thứ nhất và không nói gì về điều thứ hai.
Triệu chứng thường là lỗi xác minh trên một máy chủ, trong một kho, trong khi mọi thứ khác cập nhật bình thường. Hình dạng đó đã nói rằng đường mạng đang hoạt động và bất đồng là về sự tin cậy.
Hai cơ chế kiểm soát trả lời hai câu hỏi khác nhau
Bảo mật truyền tải trả lời ai ở đầu bên kia của kết nối này và liệu ai đó trên đường đi có thể đọc hay sửa nó. Xác thực gói trả lời liệu hiện vật này có được phát hành bởi cơ quan bạn đã cấu hình hay không, và nó phải chịu được việc tải xuống qua một gương mà bạn không kiểm soát.
Những câu hỏi đó chỉ trùng nhau ở các mép. Một chứng chỉ đúng trên gương chứng minh gương là gương; nó không chứng minh gương chứa nội dung nhà phát hành không bị sửa đổi. Một gói đã ký chứng minh nhà phát hành đã ký nó; nó không cho bạn biết mạng đã giao phiên bản mới nhất hay kho bạn chỉ định là kho mà tổ chức của bạn đã phê duyệt.
Chế độ thất bại mà người ta tạo ra bằng cách tắt các kiểm tra là mất vĩnh viễn bảo đảm thứ hai, đổi lấy một lần tải xuống thành công. Sự đánh đổi đó vô hình cho đến ngày nó quan trọng.
apt thực sự xác thực điều gì
Mô hình của APT là một chuỗi kho lưu trữ được xác thực. Siêu dữ liệu phát hành đã ký dẫn qua tổng kiểm tra đến các chỉ mục gói, và các chỉ mục đó dẫn qua tổng kiểm tra đến từng tệp gói. Chính việc xác minh chuỗi làm cho một gương không đáng tin nhưng vẫn dùng được: gương có thể phục vụ bất cứ thứ gì nó muốn, và chữ ký của siêu dữ liệu quyết định liệu APT có chấp nhận hay không.
Điều này cố ý không giống với việc kiểm tra chữ ký của người bảo trì trên mọi gói đã cài, và sự khác biệt đó giải thích vì sao «gói đã được ký» và «kho đã được xác thực» được dùng thay thế cho nhau trong báo cáo lỗi khi chúng có nghĩa khác nhau.
apt-get update
apt-cache policy
apt-config dump | grep -iE 'AllowInsecure|AllowDowngrade'
Hãy đọc đầu ra của bản cập nhật, không chỉ mã thoát. APT nêu tên kho có siêu dữ liệu thất bại, và tên đó là ranh giới cần điều tra. Một kho được đánh dấu là tin cậy mà không xác minh chữ ký, hoặc một ghi đè cho kho không an toàn, là quyết định cấu hình mà ai đó đã đưa ra và nên có thể giải thích.
Độ mới lại là một thuộc tính riêng. Một tệp siêu dữ liệu được ký hợp lệ có thể cũ hơn tệp bạn thấy tuần trước, vì thế siêu dữ liệu phát hành có ngày hết hạn và vì thế sự cố đồng hồ trên máy khách có thể tạo ra lỗi xác minh trông như sự cố khóa.
dnf5 kiểm tra riêng điều gì
Phía RPM phơi ra hai công tắc khác nhau, và trộn lẫn chúng tạo ra cùng lớp lỗi theo hướng ngược lại. Một cái kiểm soát việc tệp gói có phải mang chữ ký hợp lệ hay không; cái kia kiểm soát việc siêu dữ liệu kho có phải được ký hay không. Chúng có thể được đặt độc lập, và một hệ thống có thể nghiêm khắc với cái này và dễ dãi với cái kia.
dnf5 config-manager --dump 2>/dev/null | grep -iE 'gpgcheck|repo_gpgcheck'
rpm -q --qf '%{NAME} %{SIGPGP:pgpsig}\n' bash
Truy vấn gói cho thấy siêu dữ liệu chữ ký của bản sao đã cài trông thế nào, đây là một kiểm tra thực tế hữu ích đối chiếu với tệp cấu hình tự nhận là nghiêm ngặt. Điều nó không cho bạn biết là chính sách được hỗ trợ của bản phân phối, và đó là điều bạn nên tuân theo thay vì một chỉ dẫn chung «bật GPG» từ diễn đàn.
Ở nơi hai trình quản lý khác nhau, sự khác biệt là về kiến trúc chứ không phải dấu hiệu một bên yếu hơn. Cả hai đều xác thực nội dung nhà phát hành; chúng đặt chữ ký ở những điểm khác nhau trong chuỗi.
Đường hầm thêm gì và không thêm gì
VPN có thể cung cấp một tuyến đường cần thiết, giữ lưu lượng cập nhật ra ngoài một mạng truy cập không đáng tin, và giảm những gì một quan sát viên cục bộ nhìn thấy. Đó là những lợi ích vận hành thực sự, và không cái nào là xác thực nhà phát hành.
HTTPS thêm bảo đảm riêng của nó, và bảo đảm đó hẹp hơn cảm giác. Nó xác thực điểm cuối TLS mà bạn đã kết nối. Nếu điểm cuối đó là một gương, bạn đã xác thực gương, không phải nội dung kho lưu trữ mà nó phục vụ. Đây chính là trường hợp mà chuỗi siêu dữ liệu đã ký tồn tại để xử lý.
Không cơ chế nào hứa hẹn tính sẵn sàng. Mạng có thể từ chối giao hàng, và một đối tượng đã xác thực không tự động là mới nhất. Hãy dùng chính sách độ mới của trình quản lý gói thay vì suy ra từ sự hiện diện của biểu tượng ổ khóa.
Chẩn đoán ranh giới đã thất bại
Hãy gọi tên giai đoạn trước khi thay đổi bất cứ điều gì: phân giải DNS, proxy hoặc tuyến đường, danh tính điểm cuối TLS, xác thực kho lưu trữ, các kiểm tra chữ ký gói, hoặc cài đặt. Mỗi giai đoạn có một hình dạng lỗi và một chủ sở hữu riêng.
Việc sửa một đường mạng không bao giờ nên bao gồm tuyên bố một khóa ký không xác định là đáng tin, bỏ qua chứng chỉ, hoặc chấp nhận một cấu hình kho mà bạn không yêu cầu. Nếu một khóa thực sự đã được luân chuyển, bản phân phối hoặc chủ kho công bố khóa mới qua một kênh bạn có thể xác minh, và đó là bản sửa cần áp dụng.
Hãy ghi lại ranh giới nào đã thất bại và ai sở hữu nó. Lần thất bại cập nhật tiếp theo sẽ ở một ranh giới khác, và có danh sách biến nó thành chẩn đoán năm phút thay vì một cuộc tranh luận nữa về việc đường hầm có làm cho cập nhật an toàn hay không.