Self-Improvement
로컬 암호화 취약점 본문
■ 로컬 암호화 취약점
안드로이드 애플리케이션은 실행되는 도중에 특정 정보들을 저장해야 할 때가 있다. 개인 정보와 같이 민감한 정보를 저장해야 할 경우에는 어떠한 방법으로 저장해야 할 것인지 고민해 보며 만약 평문으로 저장하면 정보가 공격자에게 노출이 될 것이다.
drozer로 InsecureBankv2의 데이터 디렉터리 경로를 확인해본다.
dz> run app.package.info –a com.android.insecurebankv2
데이터 디렉터리 경로는 “/data/user/0/com.android.insecurebankv2”을 확인할 수 있다.
adb 도구를 이용하여 데이터 디렉터리 경로의 간단한 값을 저장하기위한 shared_prefs 폴더에 존재하는 파일들을 모두 확인을 한다.
SharedPreferences는 초기 설정값, 자동 로그인 등 간단한 환경 변수를 애플리케이션의 저장 공간 안에 파일 형태로 저장하게 되며 별도의 삭제하지 않는 이상 재부팅 되더라도 값이 유지가 된다. 이중에서 mySharedPreferences.xml파일을 해보니 “superSecurePassword”, “EncryptedUsername”의 string값이 존재하며 쉽게 아이디와 비밀번호라는걸 추측해볼 수 가 있다.
InsecureBankv2 애플리케이션에서 해당 파일에 아이디와 패스워드 정보가 언제 입력되는지 확인을 해본다.
Dologin.java 파일을 확인해보니 아이디는 base64로 인코딩 되어지며 비밀번호는 AES암호화 되어지는 것을 확인할 수 있다.
base64디코딩을 통해 jack이라는 유저이름을 쉽게 알아낼 수 있는 취약점이다.
다음으론 AES암호화가 이루어지는 클래스를 찾아서 사용되는 대칭키가 존재하는지 확인을 해본다.
cryptoClass.java을 확인해보니 고유키로 추정되는 키가 평문그대로 노출되어있음을 확인할 수 있었다.
노출된 고유키를 통해 비밀번호 또한 쉽게 복호화가 가능하다는 취약점이 존재한다.
■ 대응방안
사용자 아이디에 대해 base64 인코딩보다는 암호화를 해야한다. 또한 대칭키를 사용하여 암호화하는 경우에는 고유키에 대해 관리하는 서버를 별도로 주고, 주기적으로 바꿔줘야 한다.
[사용자 아이디 암호화]
'AOS' 카테고리의 다른 글
취약한 웹 뷰 구현 (0) | 2018.10.22 |
---|---|
안전하지 않은 콘텐츠 프로바이더 취약점 (0) | 2018.10.22 |
액티비티 컴포넌트 취약점 (0) | 2018.10.22 |
브로드캐스트 리시버 취약점 (0) | 2018.10.22 |
모바일 2016년 OWASP TOP10 (0) | 2018.10.20 |