SHARE THE PERSPECTIVE
Giá trị kiểm tra đối chiếu các byte với một giá trị tham chiếu. Chữ ký gắn tính toàn vẹn với một khóa. Không yếu tố nào tự nó chứng minh phần mềm an toàn.

Trước khi cài đặt một tệp APK Android, hãy phân biệt ba phép kiểm tra: Tệp này có khớp với bản phát hành mong đợi không? Tệp có được ký bằng khóa mong đợi không? Những bên độc lập có thể tái tạo tệp từ mã nguồn đã nêu không? Giá trị kiểm tra SHA-256, chữ ký APK và bản dựng có thể tái lập trả lời những câu hỏi đó theo các cách khác nhau.

Không phép kiểm tra nào tự nó kết luận được một chương trình có phải phần mềm độc hại hay không. Một chương trình được ký hợp lệ và có thể tái lập vẫn có thể chứa lỗ hổng bảo mật hoặc hành vi gây hại có chủ đích.

Mỗi phương pháp xác minh chứng minh điều gì

Phép kiểm tra Kết quả hữu ích Giới hạn quan trọng
Giá trị băm SHA-256 của tệp Các byte của bạn khớp với một giá trị băm cụ thể đáng tin cậy Kẻ tấn công thay thế cả tệp lẫn giá trị băm có thể qua mặt phép so sánh này
Xác minh chữ ký APK Chữ ký của gói hợp lệ khi được kiểm tra bằng chứng chỉ ký của gói Bạn phải xác định khóa ký nào là khóa mong đợi; tính hợp lệ tự nó không chứng minh danh tính nhà phát hành
So sánh bản dựng có thể tái lập Có thể tạo lại sản phẩm đầu ra đã chỉ định từ các đầu vào được ghi rõ trong tài liệu Mã nguồn và tệp nhị phân khớp nhau không chứng minh mã nguồn an toàn
Rà soát bảo mật Các vấn đề cụ thể về thiết kế hoặc triển khai đã được đánh giá Phạm vi, phiên bản, phát hiện và các vấn đề chưa được giải quyết đều quan trọng

Android yêu cầu APK phải được ký để cài đặt và cập nhật. Với Play App Signing, Google có thể quản lý khóa ký ứng dụng và tạo các APK để phân phối từ một app bundle. Đây là những cơ chế đặt niềm tin đã được ghi rõ trong tài liệu, không phải bằng chứng rằng bất kỳ bên trung gian nào cũng có thể âm thầm sửa đổi một gói mà vẫn giữ được chữ ký hợp lệ của gói đó. Xem hướng dẫn ký ứng dụng của Android.

Bước 1: xác định chính xác sản phẩm đầu ra cần kiểm tra

Ghi lại phiên bản ứng dụng, kênh phát hành, tên tệp và biến thể nền tảng mà tệp dành cho. Sử dụng trang phân phối chính thức của nhà phát hành, không dùng giá trị kiểm tra được sao chép từ chính tin nhắn không được yêu cầu đã gửi APK cho bạn.

APK được tải trực tiếp từ nhà phát hành có thể khác APK do một cửa hàng ứng dụng tạo riêng cho thiết bị. Sự khác biệt về phiên bản, kiến trúc, cách đóng gói hoặc cơ chế ký có thể tạo ra những giá trị băm tệp khác nhau một cách hợp lệ. Hãy so sánh các sản phẩm đầu ra tương đương trước khi coi sự không khớp là bằng chứng tệp đã bị can thiệp.

Câu hỏi thực tế là: Giá trị mong đợi đến từ đâu, và tại sao tôi tin nguồn đó? Việc tính giá trị băm ngoại tuyến không giải quyết được vấn đề tin cậy đối với một giá trị băm tham chiếu lấy từ nguồn trực tuyến.

Bước 2: tính SHA-256 ngay trên máy

Thay messenger.apk bằng tên tệp bạn đã tải xuống. Các ví dụ này chỉ đọc tệp, không cài đặt tệp.

Linux:

sha256sum messenger.apk

macOS:

shasum -a 256 messenger.apk

Command Prompt trên Windows:

certutil -hashfile messenger.apk SHA256

So sánh toàn bộ giá trị băm, chỉ bỏ qua khoảng trắng trong cách hiển thị và sự khác biệt giữa chữ hoa với chữ thường. Đừng chỉ so sánh vài ký tự đầu hoặc cuối. Lưu giá trị băm mong đợi cùng thông tin bản phát hành và phiên bản để có thể lặp lại phép so sánh.

Nếu các giá trị khác nhau, hãy dừng lại trước khi cài đặt. Kiểm tra sản phẩm đầu ra và phiên bản, tải lại từ nguồn đáng tin cậy nếu phù hợp, và hỏi nhà phát hành về sự không khớp chưa có lời giải thích. Đừng “sửa” giá trị kiểm tra mong đợi cho khớp với tệp bạn tình cờ nhận được.

Bước 3: kiểm tra chữ ký APK

Với người dùng có Android SDK Build Tools, tài liệu apksigner của Google mô tả cách xác minh chữ ký và xuất thông tin chứng chỉ:

apksigner verify --verbose --print-certs messenger.apk

Việc xác minh phải thành công đối với các nền tảng mà APK hỗ trợ. So sánh thông tin chứng chỉ của bên ký với hồ sơ bản phát hành đáng tin cậy hoặc chuỗi kế thừa khóa ký được nhà phát hành ghi rõ trong tài liệu. Một chữ ký tạo bằng khóa lạ không trở nên đáng tin chỉ nhờ dòng chữ “đã xác minh”. Việc thay đổi khóa ký hợp lệ cũng cần có bằng chứng, chứ không phải một chỉ dẫn bảo bạn bỏ qua sự không khớp.

Giá trị băm SHA-256 của tệp APK và dấu vân tay SHA-256 của chứng chỉ ký là hai giá trị khác nhau. Đừng đem giá trị này so sánh với giá trị kia.

Bước 4: tìm bằng chứng về bản dựng có thể tái lập

Một tuyên bố về khả năng tái lập bản dựng cần nêu rõ bản sửa đổi mã nguồn, môi trường dựng, hướng dẫn và sản phẩm đầu ra mục tiêu. Các bên độc lập phải có thể tạo lại sản phẩm đầu ra đó và so sánh kết quả. Định nghĩa của dự án Reproducible Builds coi những đầu vào này là một phần của tuyên bố.

Đối với ứng dụng nhắn tin, bằng chứng hữu ích về bản phát hành bao gồm thẻ mã nguồn, phiên bản cố định của các thành phần phụ thuộc và bộ công cụ dựng, hướng dẫn dựng cùng kết quả so sánh độc lập. Hãy hỏi chính xác thứ gì đã được so sánh: một sản phẩm đầu ra chưa ký, một APK đã ký, hay một số phần nội dung được chọn trong gói. Đừng suy ra khả năng tái lập chỉ vì mã nguồn và giá trị băm của tệp tải xuống đã được công bố.

Khả năng tái lập củng cố mối liên hệ giữa mã nguồn đã được rà soát và mã được phân phối. Nó không biến một bản triển khai chưa được rà soát thành giao thức an toàn, cũng không chứng minh rằng điện thoại đang hoạt động chưa bị xâm phạm.

Vai trò của Proof Lab của Livara

Proof Lab của Livara cho phép tính giá trị băm APK ngay trên máy để đối chiếu với giá trị băm đã công bố. Các minh họa mật mã của công cụ có phạm vi hẹp hơn một cuộc kiểm toán toàn bộ giao thức nhắn tin. Hãy dùng phép kiểm tra băm đúng với mục đích được nêu, cùng thông tin mong đợi về bản phát hành và chữ ký; đừng coi đây là bằng chứng độc lập về khả năng tái lập bản dựng hay việc không có cửa hậu.

Mô hình mối đe dọa nêu rõ giới hạn khi cả APK lẫn giá trị băm được hiển thị của nó đều có thể bị thay thế. Vì vậy, nguồn gốc của giá trị tham chiếu cũng quan trọng như việc thực hiện phép tính đúng cách.

Câu hỏi thường gặp

Giá trị kiểm tra khớp nhau có chứng minh APK an toàn không?

Không. Nó xác nhận sự trùng khớp với giá trị băm tham chiếu, với giả định rằng giá trị tham chiếu đáng tin cậy và các thuộc tính bảo mật của hàm băm được bảo đảm. Nó không đánh giá hành vi của chương trình.

Xác minh chữ ký có thừa nếu giá trị kiểm tra đã khớp không?

Không. Các phép kiểm tra cung cấp những bằng chứng khác nhau. Chữ ký gắn tính toàn vẹn của gói với một khóa; giá trị băm của tệp xác định một chuỗi byte cụ thể.

Tệp tải từ cửa hàng có bắt buộc khớp với giá trị băm APK trên trang web không?

Chỉ khi chúng được dự kiến là cùng một sản phẩm đầu ra. Trước hết, hãy kiểm tra kênh phát hành, phiên bản và cách đóng gói. Sự không khớp chưa được giải thích cần được điều tra, không phải tự động quy kết hay tự động chấp thuận.

Các phép kiểm tra này có thể phát hiện phần mềm gián điệp đã có trên điện thoại của tôi không?

Không. Chúng đánh giá một sản phẩm đầu ra dùng để cài đặt, chứ không đánh giá mọi thành phần trong trạng thái hoạt động hiện tại của thiết bị.

Xác minh bản dựng của bạn trong Proof Lab
CONTINUE THE THREADAndroid & device security ↗
YOU’VE REACHED THE ENDBack to the reading room ↗