본문 바로가기

카테고리 없음

DIVA 3단계

#1 문제 분석

가. 목적

민감정보가 어디에 어떻게 저장되고 취약점 코드가 어디에 있는지

나. 활용

소스코드, adb

 

#2 취약점 정보

가. 취약점

SharedPreferences에 string형으로 저장된다.

약한 암호화, 평문, 접근 권한 이슈 등의 문제로 시스템에 안전하지 못하게 저장되었을 때 발생

 

나. Insecure Data storage가 취약점인 이유

SharedPreference는 시스템 자원에서 쉽게 접근할 수 있다.

루팅된 기기에서는 사용자가 시스템의 루트권한을 갖고 있어서 모든 파일 및 디렉토리에 접근할 수 있다. 이때 SharedPreference도 쉽게 열람가능하다

스마트폰이 악성코드에 감염돼서 루트권한을 탈취 당한다면 SharedPreferences에 저장된 중요정보가 유출될 수 있다.

애플리케이션을 디버그 모드로 실행하면 개발자가 쉽게 앱 데이터에 접근할 수 있다.

다. SharedPreferences 쓰는 경우

   민감정보는 서버로 전송해 db에 암호화해 저장하는 게 자연스러움. 그러나 편의상 SharedPreference도 쓸 수 있음.

 

 #3 코드 분석(1과 다른 부분)

1. 

setContentView(R.layout.activity_insecure_data_storage1);

setContentView: android 애플리케이션에 화면을 설정하는 데 사용되는 메서드

activity_insecure_data_storage1.xml을 화면에 표시

 

12. 

SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);

 

사용자의 설정 값을 저장하고 관리하기 위한 SharedPreferences를 가져오는 코드

메서드 getDefaultSharedPreferences(this)는 현재 애플리케이션의 기본 SharedPreferences파일을 반환한다

가져와서 spref 변수에 할당한다.

 

13. 

SharedPreferences.Editor spedit = spref.edit();

 

spref.edit()가 SharedPreferences 객체를 수정할 수 있는 Editor 객체를 반환한다.

SharedPreferences를 직접 수정하는 것이 아니라 Editor를 통해 값을 수정해서 commit으로 적용한다.

 

14.

EditText usr = (EditText) findViewById(R.id.ids1Usr);

레이아웃 XML 파일에서 정의된 EditText요소를 Java 코드에서 사용하기 위해 해당 요소를 참조하는 코드

 

EditText :  사용자로부터 텍스트를 입력받을 수 있는 입력란 

findViewById() : XML 레이아웃 파일에서 지정된 ID(ids1Usr)를 가진 뷰를 찾아서 반환

(EditText) : 입력받은 내용이 담긴 view를 EditText로 형변환

 

그래서 usr변수에 할당

 

 

15.

spedit.putString("user", usr.getText().toString());

spedit는 SharedPreferences를 수정하기 위해 가져온 Editor객체, SharedPreferences에 값을 추가, 수정, 삭제할 수 있다.

putString :  Editor에 user라는 키에 해당하는 값을 usr EditText에서 가져온 문자열로 저장하도록 지시하는 메서드

user :  SharedPreferences에 저장된 값의 키

user.getText().toString() :  EditText에서 사용자가 입력한 텍스트를 문자열 형태로 가져온다

 

16.

spedit.commit();

 

SharedPreferences의 수정사항을 적용하고 저장하는 역할

spedit: SharedPreferences를 수정하기 위해 가져온 Editor 객체

commit 메서드: Editor에 적용된 변경 사항을 SharedPreferences에 적용하고 저장한다.

 

 

#4 취약점 예방

SharedPreferences에도 암호화하여 저장