2016-08-28 2 views
17

패키지 서명을 받아야합니다. 그래서 나는이 코드를 사용하여 얻을 :PackageManager.GET_SIGNATURES 사용시 Android Studio 경고

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

을하지만 안드로이드 스튜디오 나에게이 경고 제공 : getPackageInfo에서


읽기 응용 프로그램 서명 : 제대로 확인하지 않으면 응용 프로그램의 서명이 악용 될 수를; 자세한 내용은 문제 설명을 참조하십시오. 덜 ... (Ctrl + F1) 앱 서명을 부적절하게 검증하면 악성 앱이 실제 인증서와 가짜 인증서를 모두 사용하여 Play 스토어에 제출되어서는 안되는 기능이나 정보에 액세스 할 수있는 문제가 발생할 수 있습니다. 다른 응용 프로그램은 가짜 인증서를 확인하고 나머지는 무시하기 때문입니다. 이 메서드가 반환 한 모든 서명의 유효성을 확인하십시오.


가이 경우에 서명을 검증하기 위해 의미 하는가 무엇

? 서버와의 서명을 확인하여 일치하는지 확인합니다. 그 의미는 무엇입니까?

로컬 테스트시 출력은 모두 Integer 인 단일 음수이고 코드는 array이 아닙니다.

+2

나는이 문제에 대한 진정한 문서를 요구하는 [문제] (http://code.google.com/p/android/issues/detail?id=221143)를 제출했습니다. 나는 "서명 확인"알고리즘이 괜찮 으면 오랫동안 OK라고 생각합니다. 그러나 나는 그들이 경고하는 것을 분명히 알지 못하기 때문에 확신 할 수 없다. – CommonsWare

+2

그래서 아무도 경고의 의미를 실제로 알지 못합니까? – Zoe

답변

11

팝업 텍스트를 추적하면 Android Studio의 this source code fragment이됩니다.
같은 파일에 outern 리소스에 대한 링크가 포함 된 a line이 있습니다.
"가짜 ID"취약점에 대한 추가 추적은 this presentation으로 이어진다.

Description of a problem :

문제는 안드로이드가 체인의 신뢰를 구축 할 때, 검증 과정 만 '대상'이 아닌의 세부 내에서 제공되는 하나의 실제 키를 비교하는 비교한다는 것입니다 인증서의 서명자. 결과적으로 공격자는 신뢰할 수있는 사슬을 고수하고 실제로 서명 한 당사자없이 당사자가 서명하도록 요구할 수 있습니다.

이 버그로 인해 잘못된 인증서 체인이 생성되며 APK에 포함되어 있지만 실제로 응용 프로그램에 서명하는 데 사용되지 않은 합법적 인 인증서가 포함될 수 있습니다.

여기에이 취약점을 사용하지 못하도록하는 Android 소스 코드에 the commit이 있습니다. 즉, 기기에 Android 4.4이있는 경우 문제가 발생하지 않습니다. 더 낮은 Android API 기기를 사용하면 위험 할 수 있습니다.

+2

따라서 인증서가 손상 될 수있는 알려진 버그입니다. 자동으로 수정 되었습니까? 아니면 해결/보호를 위해 추가해야하는 코드가 있습니까? – Zoe

+0

KitKat 이후로 인증서 체인 교체 또는 수정시 문제가 발생하지 않아야합니다. 그러나 정말로 패키지의 인증서 지문을 확인하려면 [this] (http : // stackoverflow.co.kr/a/22506133/6507689) (낮은 API 장치에 도움이 될 수 있음). –