2013-03-19 3 views
6

나는 새로운 작업에서 새로운 활동을 시작하기 위해 의도를 사용하고 있습니다. 이 인 텐트는 엑스트라에서 해당 액티비티가 필요로하는 개인 데이터를 가지고 있습니다. 이 데이터는 다른 응용 프로그램에서 읽을 수 없어야합니다. 이 데이터가 실제로 유출되지 않았는지 조사했습니다. 우리는 getRecentTasks()에서 RecentTaskInfo를 사용함으로써 GET_TASK 권한을 가진 임의의 응용 프로그램에서이 여분의 데이터를 읽을 수 있다는 것을 알았습니다. 이것은 안전하지 않습니다. 누출이 발견되면 검색을 중단했습니다. 이 데이터가 누출되는 다른 방법이 있습니까? 그리고 여분의 데이터를 다른 응용 프로그램에서 읽을 수 없도록하려면 어떻게해야합니까?Android 인 텐트에서 여분의 데이터 보호

답변

6

이 의도는 엑스트라

에서 그 활동에 필요한 일부 개인 데이터를 전달? 엑스트라의 개인 데이터에 식별자를 전달합니다. 식별자를 개인 데이터 (예 : 데이터베이스 쿼리)로 해석하는 작업은 해당 활동에서만 수행 할 수 있습니다.

우리는) ​​(getRecentTasks에서 RecentTaskInfo를 사용하여이 추가 데이터가

예, blogged about this 거의 2 년 전 GET_TASK 권한이 임의의 응용 프로그램에서 읽을 수 있음을 발견하고, 다른 사람은 아마 한 그것 앞에.

더 많은 데이터 유출이 있습니까?

다른 구성 요소를 시작하라는 모든 요청은 OS 프로세스를 거치므로 OS에 항상 유출됩니다.

Intent의 작업 내용에 따라 다른 방법으로 누출 될 수 있습니다 (예 : Intent 그 자체를 Parcelable으로 다른 앱에 전달).

그리고 여분의 데이터를 다른 응용 프로그램에서 읽을 수 없도록하려면 어떻게해야합니까?

수 없습니다. 다시 말하지만, 개인 데이터를 활동 엑스트라에 넣지 말고 대신 개인 데이터를 가져 오는 데 사용할 수있는 식별자를 사용하십시오.

+0

귀하의 솔루션을 사용할 수 있으며 (그렇지만 "모든"API 레벨에 적용 할 수 있음) 동의하지만, 최신 Android 버전이 블로그에 설명 된 문제를 실제로 수정 한 것으로 보입니다. 내 대답에 링크 된 커밋을 확인하십시오 .. – baske

+0

OS가 내 데이터를 읽을 수 있다는 것을 받아 들일 수 있습니다. 문제는 비 OS 응용 프로그램에 있습니다. 솔루션을 올바르게 해석하면 ContentProvider를 설정해야합니다. 그러면 보안 문제가 다른 위치로 옮겨집니다 : 의도 한 활동이 액세스 할 때 쿼리에서 응답 만 반환하도록하는 방법? 여러 응용 프로그램에서 보안 정보를 전송해야하지만 다른 사용자에게 정보를 볼 수 없으면 사용 가능한 솔루션으로 사용 권한이 표시되지 않습니다. – user2186703

+0

@ user2186703 : "솔루션을 올바르게 해석하면 ContentProvider를 설정해야합니다."- 아니요. 데이터베이스 테이블의 기본 키와 같은 식별자를 갖는 데이터의 개념은 수십 년 전부터있었습니다. 안드로이드는 수십 년 동안 존재하지 않았기 때문에, ContentProvider와 같은 안드로이드 특정 구조를 사용하지 않고 식별자를 사용하여 데이터를 찾는 방법이있었습니다. 따라서 "식별자"란 데이터베이스 테이블의 키 또는 HashMap의 키 또는 CSV 테이블의 행 번호 또는 JSON 객체의 키 등을 의미합니다. – CommonsWare

1

개인 저장 공간은 응용 프로그램에서만 읽을 수 있습니다. 루트가 아닌 기기에서는 앱에 저장 한 정보에만 액세스 할 수 있습니다.

SharedPreference을 사용하여 데이터를 저장할 수 있습니다. 데이터는 앱의 지정된 개인 저장소에 저장됩니다.

또는이 같은이 와이어 임의의 파일을 직접 개인 저장소를 사용할 수 있습니다 : 안드로이드에서 시작

FileOutputStream fos; 
try { 
    fos = openFileOutput (FILENAME, Context.MODE_PRIVATE); 
    fos.write (string.getBytes()); 
    fos.close(); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
7

은 추가 권한의 여분을 사용하여 타사 앱 읽고있는 것 지키기 위해 추가 된 4.1.1 RecentTaskInfo. 이 허가 (android.Manifest.permission.GET_DETAILED_TASKS)는 시스템에서만 수집 할 수 있습니다. 이 허가가 없으면 baseIntentRecentTaskInfo을 통해 반환되기 전에 여분이 스왑 아웃됩니다.http://androidxref.com/4.2.2_r1/history/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java#8238e717df4bc5eebf15f97172d68af3599a95bb 커밋의 코멘트에서

:

작업의 세부 사항을 얻을 수있는 새로운 서명 수준의 권한을 추가합니다.

타사 앱은 개인 데이터가 누출되지 않도록 작업과 관련된 인 텐트 의 추가 기능에 액세스 할 수 없습니다.

는 변경 ID :

I95af9e181ac42557bc8b981807e7ddd266a88d0e

는 그래서 그 노력이 민감한 정보를 전송하는 의도 여분의 안전 만들기에 투입되고있는 것으로 보인다. 나는이 여분이 누설 될 수있는 다른 방법이 있는지 모르지만 적어도 여분의 것은 JB에서 위로 OK 보인다.

+0

글쎄, 그건 확실히 멋지다. 나는 이것을 더 깊이 조사해야 할 것이다. 감사! – CommonsWare

관련 문제