2016-08-28 13 views
17

Tôi cần nhận chữ ký gói. Vì vậy, tôi nhận được nó sử dụng mã này:Cảnh báo Android Studio khi sử dụng PackageManager.GET_SIGNATURES

Signature[] sigs = c.getPackageManager().getPackageInfo(c.getPackageName(), 
    PackageManager.GET_SIGNATURES).signatures; 

Nhưng Android Studio mang lại cho tôi cảnh báo này:


Đọc chữ ký ứng dụng từ getPackageInfo: Chữ ký ứng dụng có thể được khai thác nếu không xác nhận đúng; xem giải thích vấn đề để biết chi tiết. ít hơn ... (Ctrl + F1) Xác thực chữ ký ứng dụng không đúng cách có thể dẫn đến các sự cố khi ứng dụng độc hại gửi tới Cửa hàng Play bằng cả chứng chỉ thực và chứng chỉ giả và truy cập vào chức năng hoặc thông tin mà nó không cần do một ứng dụng khác chỉ kiểm tra giấy chứng nhận giả mạo và bỏ qua phần còn lại. Vui lòng đảm bảo xác thực tất cả chữ ký được trả về bằng phương thức này.


có nghĩa là gì để xác nhận chữ ký trong trường hợp này? Tôi sẽ kiểm tra các chữ ký chống lại một máy chủ để đảm bảo rằng chúng khớp với nhau, đó là ý nghĩa của chúng?

Khi thử nghiệm cục bộ, tất cả các kết quả đầu ra đó là một đơn âm Integer và không phải là array vì mã sẽ có nó.

+2

Tôi đã gửi [vấn đề] (http://code.google.com/p/android/issues/detail?id=221143) yêu cầu các tài liệu thực sự cho loại điều này. Tôi sẽ giả định rằng miễn là thuật toán của bạn cho "kiểm tra chữ ký" là phong nha, rằng bạn nên được OK. Nhưng, vì tôi không rõ họ đang cảnh báo gì, tôi không thể chắc chắn. – CommonsWare

+2

Vì vậy, không ai thực sự biết cảnh báo nghĩa là gì? – Zoe

Trả lời

11

Theo dõi văn bản bật lên dẫn đến this source code fragment của Android Studio.
Trong cùng một tệp, có a line chứa liên kết đến tài nguyên bên ngoài.
Theo dõi thêm dẫn đến this presentation về lỗ hổng "ID giả mạo".

Description of a problem:

Vấn đề là khi Android được xây dựng chuỗi-of-tin tưởng, quá trình xác minh chỉ so sánh 'chủ đề' chứ không phải là so sánh phím thực tế với một cung cấp trong các chi tiết của người ký chứng chỉ. Kết quả là, một kẻ tấn công có thể tinker với chuỗi tin tưởng và yêu cầu được ký bởi một bên - mà không có bên thực sự ký kết.

Do lỗi này, chuỗi chứng chỉ sai được tạo và có thể bao gồm chứng chỉ hợp pháp được nhúng trong APK nhưng không được sử dụng để thực sự ký ứng dụng.

Dưới đây là the commit để mã nguồn Android, ngăn chặn việc sử dụng lỗ hổng này. Điều đó có nghĩa là nếu thiết bị có Android 4.4 vấn đề không xảy ra. Khi chạy các thiết bị Android API thấp hơn, nó có thể gây hại.

+2

Vì vậy, nó là một lỗi đã biết có thể khiến chứng chỉ bị xâm phạm. Là "tự động" cố định hoặc là có thêm mã mà phải được thêm vào để giải quyết/bảo vệ chống lại nó? – Zoe

+0

Kể từ khi KitKat, không có vấn đề với chuỗi chứng chỉ thay thế hoặc sửa đổi nên phát sinh. Nhưng nếu bạn thực sự muốn kiểm tra dấu vân tay chứng chỉ của một gói có một cái nhìn [this] (http: // stackoverflow.com/a/22506133/6507689) (có thể hữu ích trên các thiết bị API thấp hơn). –

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