목 차
안티 디버깅(Anti-Debugging)
앱 안티 디버깅은 특정 모바일 앱의 디버깅을 감지하고 방지하기 위한 기술 및 메커니즘의 사용을 의미합니다. 앱을 디버깅하면 실행 중 동작을 분석하고 이해할 수 있으므로 문제 해결, 테스트 및 리버스 엔지니어링 목적에 도움이 될 수 있습니다. 그러나 공격자가 앱의 코드와 동작을 분석하여 취약성을 발견하거나 중요한 데이터를 훔치거나 익스플로잇을 개발하는 데 사용할 수도 있습니다.
앱 디버깅을 방지하기 위해 앱 개발자는 코드 난독화, 함수 포인터 조작, 중단점 감지 및 제어 흐름 난독화와 같은 다양한 디버깅 방지 기술을 구현할 수 있습니다. 이러한 기술은 공격자가 앱의 코드와 동작을 이해하기 어렵게 만들 수 있으므로 성공적인 공격을 개발하는 데 필요한 시간과 노력이 증가합니다.
모바일 앱 개발에 사용되는 몇 가지 일반적인 안티 디버깅 기술에는 디버거 또는 디버거 관련 시스템 기능의 존재 여부 확인, 디버깅이 감지될 때 충돌 또는 예측할 수 없는 동작을 유발하도록 앱 코드 수정, 민감한 코드 및 데이터 암호화 등이 포함됩니다. 리버스 엔지니어링이 더 어렵습니다.
앱 안티 디버깅은 모바일 앱의 보안을 강화하는 데 도움이 될 수 있지만 어떤 단일 기술도 완벽하지 않으며 숙련된 공격자가 고급 방법을 사용하여 우회할 수 있다는 점에 유의해야 합니다. 따라서 앱 개발자는 모바일 앱의 보안을 보장하기 위해 코드 검토, 위협 모델링 및 보안 코딩 관행과 같은 여러 계층의 보안 조치를 구현해야 합니다.
안티 디버깅 코드
private static boolean isDebuggable(Context context) {
boolean isDebuggerAttached = false;
try {
// 현재 디버깅 중인지 확인
if(android.os.Debug.isDebuggerConnected())
isDebuggerAttached = true;
// android:debuggable 속성 가져오기
if ((context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0)
isDebuggerAttached = true;
} catch (Exception e) {
}
return isDebuggerAttached;
}
isDebuggerConnected() 함수는 현재 디버깅 중인지 확인하는 함수이며, ApplicationInfo.FLAG_DEBUGGABLE의 경우 android:debuggable 속성이 true인지 확인하여 둘 중 한 가지라도 true이면 true를 반환합니다.
안티 디버깅 코드는 쓰레드를 통해 계속 확인하여 확인 시 앱을 종료합니다.
최근 앱 점검에서 자주 쓰이는 Frida(후킹)의 경우 탐지 로직이 별도로 존재합니다.
2023.05.15 - [보안/모바일 취약점 점검] - [Android, iOS] OS변조(루팅/탈옥), 무결성 검증, 디버깅 탐지 프로젝트 파일
'모바일 취약점 점검 > Android' 카테고리의 다른 글
[Android] 안드로이드 12 이상 루팅 및 초기화 (갤럭시 S10) (0) | 2024.05.08 |
---|---|
[Android] 안드로이드 루팅 & 순정 펌웨어 복구 (0) | 2023.05.31 |
[Android, iOS] OS변조(루팅/탈옥), 무결성 검증, 디버깅 탐지 프로젝트 파일 (0) | 2023.05.15 |
[Android] 무결성(앱 위변조) 검증 코드 (0) | 2023.05.15 |
[Android] OS변조(루팅) 탐지 코드 (0) | 2023.05.15 |