APP 모의해킹/Android

안드로이드 무결성 검증

Mr.robot 2 2023. 3. 28. 22:33

무결성 검증

앱에 보안을 테스트 할 때 중요한 것을 뽑으라고 한다면 아마 코드 변조를 탐지하는 위변조 탐지를 뽑을 수 있을 것이다.

위변조 탐지는 루팅 우회등 앱을 변조하여 악성 앱을 만들 수 있기 때문에 위변조 테스트가 필요하다.

이를 위해서는 가장 먼저 해볼 수 있는 부분은

앱 이름 변조 혹은 Toast 메세지를 띄우는 것이다.

앱 이름의 경우는 AndroidManifest.xml 내 label를 수정하거나 아니면 다른 곳에서 String을 가져올 경우 String 값을 변조하면 된다.

 

두번째는 Smali Code 변조이다

Smali Code 란 Smali는 dalvik에서 사용하는 dex 형식의 어셈블리어이다. 즉 Dex는 기계어로 구성되어 있기 때문에 이것을 쉽게 읽기 해주는 것이 Smali Code이다.

이를 아래와 같이 코드를 앱이 처음 실행되는 oncreate 부분을 찾아 삽입하게 되면 위변조 테스트가 가능하다.

const/4 v0, 0x1
 
const-string v1, "Integrity Check"
 
invoke-static {p0, v1, v0}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
 
move-result-object v0
 
invoke-virtual {v0}, Landroid/widget/Toast;->show()V

진단

MainActivity 뿐만 아니라 모든 실행 로직에서 무결성 검증을 실시 해야한다.

앱 내에서 함수 실행을 통한 무결성 검증은 변조가 가능함으로 고정된 hash 값 계산 및 서버의 값과 비교하는 것이

안전하다.

대응방안

코드 난독화, 암호화
Signing Key 확인, 런타임 시 Signing 인증서를 확인하여 위변조된 앱인지 확인
Apk 파일의 해쉬(hash) 계산하여 서버의 값과 비교로 확인
중요 로직 실행 전, 후 메소드 해쉬(hash) 비교로 확인