Android SharedPreference 보안


118

공유 기본 설정 보안에 대해 궁금합니다.

공유 기본 설정이 MODE_PRIV (0)에서 생성 된 경우에도 액세스 할 수 있습니까?
사용 가능한 모든 공유 환경 설정을 나열한 다음 다른 앱에서 모든 설정을 가져올 수 있습니까?
sharedpreferences는 비밀번호 또는 인증 토큰과 같은 민감한 데이터를 저장하기에 좋은 장소입니까?

감사



좋은 답변으로 볼 가치가 있습니다. 공유 선호도는 개발자의 프로그래밍 스타일에 대해 많은 것을 알려줍니다.
Vishwa Ratna

답변:


232

공유 기본 설정은 장치의 파일 시스템에 파일로 저장됩니다. 기본적으로 특정 애플리케이션이 실행하는 UID 만 액세스 할 수 있도록 허용하는 파일 시스템 권한 세트와 함께 앱의 데이터 디렉토리에 저장됩니다. 따라서 Linux / Unix 시스템에서와 마찬가지로 Linux 파일 권한이 액세스를 제한하는만큼 비공개입니다.

루트가 파일 시스템의 모든 것에 액세스 할 수 있기 때문에 장치에 대한 루트 수준 액세스 권한이있는 사람은 누구나 볼 수 있습니다. 또한 생성 앱과 동일한 UID로 실행되는 모든 애플리케이션이 액세스 할 수 있습니다 (일반적으로 수행되지 않으며 두 앱이 동일한 UID로 실행되도록하려면 특정 작업을 수행해야하므로 크지 않을 것입니다.) 관심사). 마지막으로 누군가 설치된 Android OS를 사용하지 않고 기기의 파일 시스템을 마운트 할 수 있다면 액세스를 제한하는 권한을 우회 할 수도 있습니다.

기본 설정 (또는 응용 프로그램에서 작성한 데이터)에 대한 이러한 액세스가 염려되는 경우 암호화하는 것이 좋습니다. 당신이 그들에 대해 그렇게 염려한다면, 당신이 보는 위험 수준에 대해 얼마나 많은 보호가 필요한지 정확히 알아 내야 할 것입니다. 2011 년 12 월에 출판 된 Android 플랫폼 용 애플리케이션 보안 에서 이에 대한 매우 광범위한 논의가 있습니다 (면책 조항 :이 책의 저자입니다).


2
이에 대해 설명하는 공식 문서가 있습니까? 참고 문헌이 있습니까?
clu

26

SharedPreferences는 전화기 / data / data / 폴더의 XML 파일 일 뿐이므로, 루트 장치에서 수퍼 유저 권한을 가진 모든 응용 프로그램이나 사용자는 MODE_PRIV로 생성 된 경우에도 SharedPreferences에 액세스 할 수 있습니다.

여전히 모든 사람으로부터 보호 할 수있는 방법 이 있습니다 ...이 링크를 확인하세요. 여기에서 암호화를 사용하여 데이터를 pref에 저장할 수 있으며 클래스는 설명이 필요 없으며 사용하기 매우 쉽습니다.

https://github.com/sveinungkb/encrypted-userprefs

다른 사람들이 말했듯이 누구나 액세스 할 수 있지만이 경우 암호화 된 데이터를 읽을 수 없습니다. 그 secure.For 그래서 최대한도 보안 나의 제안은 실행 시간보다는 열심히 코딩에서 암호화에 사용되는 키를 생성하는 것입니다. 이를 수행하는 방법에는 여러 가지가 있습니다. :)


8
그러면 생성 된 키를 어떻게 저장합니까?
Olayinka 2015

3
@Olayinka 또 다른 키로 암호화하고 SharedPref. 하지만 다른 키로 무엇을할까요? 하지만 가장 좋은 시나리오는 SSL을 사용하여 암호화 된 키와 장치 UID를 서버에 보내 저장하고 필요에 따라 검색하는 것입니다. 연결이 필요하지만 장치를 블랙리스트에 추가하고 갑자기 모든 데이터를 폐기 할 수 있습니다. 지속적인 인터넷 연결 없이는 데이터 암호화 시도가 100 % 안전하지 않습니다.
Paulo Avelar

위의 솔루션을 사용했습니다 ... 10 번 중 9 번 작동합니다.하지만 오류 : 1e06b065 : Cipher functions : EVP_DecryptFinal_ex : BAD_DECRYPT "가 가끔 발생합니다 .. 누구나 아이디어가 있습니까?
Raj Trivedi

3
@PauloAvelar 장기 저장 및 암호화 키 검색을 위해 Android KeyStore를 사용합니다. 키는 애플리케이션 내에 저장되지 않으므로 손상 될 수 없습니다. 제공된 라이브러리는 사용하지 않습니다. 코드에 비밀을 저장하므로 안전하지 않습니다.
apex39

13

일반적으로 아니요, 다른 앱에서 액세스 할 수 없습니다. 그러나 SharedPreferences는 /data/data/디렉토리에 XML 파일로 저장됩니다. 즉, 기본적 으로 루팅 된 기기 에서 수퍼 유저 권한 을 가진 모든 애플리케이션이 s에 액세스 할 있음을 의미합니다. 생성SharedPreferenceMODE_PRIV


3

공유 기본 설정이 MODE_PRIV (0)에서 생성 된 경우에도 액세스 할 수 있습니까?

코드 번호로. 그러나 수퍼 유저 권한이있는 경우 응용 프로그램 파일을 검색 할 수 있습니다.

사용 가능한 모든 공유 환경 설정을 나열한 다음 다른 앱에서 모든 설정을 가져올 수 있습니까?

슈퍼 유저 (루팅 된 기기) 인 경우 앱의 모든 비공개 파일을 가져올 수 있습니다.

sharedpreferences는 비밀번호 또는 인증 토큰과 같은 민감한 데이터를 저장하기에 좋은 장소입니까?

아니요. 쉽게 해킹 할 수 있습니다. 중요한 데이터를 공유 우선 순위 파일에 넣으려면 데이터를 암호화하고 저장할 수 있습니다. NDK / 서버에 암호화 키를 저장할 수 있습니다.


어떻게 쉽게 해킹 할 수 있습니까?
John Sardinha

예, 질문 양식 @Jo
Cuong Vo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.