-->

[인시큐어뱅크] 안드로이드 SD 카드 저장 취약점

안드로이드 내부저장소/외부저장소

안드로이드 저장소는 내부저장소/외부저장소로 나뉘는데 여기서 외부저장소는 SD카드와 같은 이동식 저장소를 의미한다. 앱자체가 지나지케 클 경우 외부저장소에 앱을 설치하기도 하고 접근제한이 필요치 않거나 다른 앱과 공유하고 싶은 파일이 있을 경우 해당 파일을 외부저장소에 저장하기도 한다. 

 

내부저장소는 다른 앱이 접근하지 못하지만 SD카드는 설정에 따라 외부에서도 접근할 수 있는 저장소이기 때문에 SD카드에 중요정보가 노출될 수 있는 가능성이 존재한다. SD카드 저장소는 /sdcard 에서 확인할 수 있다.

 

 

 

 

안드로이드 SD 카드 저장 취약점 진단

AndrioidManifest.xml 을 확인하면, "WRITE_EXTERNAL_STORAGE" 와 "READ_EXTERNAL_STORAGE" 권한이 설정되어있다.

 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
    <!--
     To retrieve OAuth 2.0 tokens or invalidate tokens to disconnect a user. This disconnect
     option is required to comply with the Google+ Sign-In developer policies
    -->
 
    <android:uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

 

 

그리고 apk 디컴파일을 수행한 후 DoTransfer 클래스를 살펴보면, "Message: ~" 문자열을 구성한 뒤 getExternalStorageDirectory()로 SD카드 저장소 경로를 구하고 + /Statements_[유저네임].html에 저장하고 있다. Transfer에 실패한 경우와 성공한 경우 둘다에 대해 Transfer 내역을 SD 카드 저장소에 저장하고 있다.

 

String str1 = new String("\nMessage:Failure From:" + DoTransfer.this.from.getText().toString() + " To:" + DoTransfer.this.to.getText().toString() + " Amount:" + DoTransfer.this.amount.getText().toString() + "\n");
String str2 = Environment.getExternalStorageDirectory() + "/Statements_" + DoTransfer.this.usernameBase64ByteString + ".html";
try {
	BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(str2, true));
	bufferedWriter.write(str1);
	bufferedWriter.write("<hr>");
	bufferedWriter.close();
	return;
} catch (IOException iOException) {
	iOException.toString();
	return;

 

 

/sdcard/Statements_jack.html을 보면 다음과 같이 Transfer 내역을 확인할 수 있다.

 

 

 

안드로이드 SD 카드 저장 취약점 진단결과 및 대응방안

  • 인시큐어뱅크(InsecureBankv2) 앱은 중요한 거래정보를 SD카드에 암호화하지 않은 채로 저장하고 있다.
  • SD카드에 중요정보 저장 시 유출될 가능성이 있으므로 해당 정보를 내부저장소에 저장하거나 외부저장소에 저장 시 암호화해서 저장하는 대응방안이 필요하다.

 

댓글

Designed by JB FACTORY