반응형
디버깅 탐지 기능 여부 취약점은
앱이 동작할 때 동적 디버깅 도구로 디버깅이 가능하냐 안하냐만으로도 취약점이 될 수 있다.
LLDB나 GDB, IDA와 같은 동적 디버깅 도구로 앱에 붙었을 때
디버깅이 가능하다면 취약이다.
안드로이드 시스템에서 대응방안은 크게 3가지로 제시해줄 수 있을 것같다.
1. 디버깅 비활성화
2. 디버깅 시 사용되는 ptrace 시스템 호출 차단 및 선점
3. 디버깅 시 발생되는 SIGTRAP 시그널 무시
1번은 예제 코드는 아래와같다.
public class DebugProtection {
private static final String DEBUG_FLAG_PROPERTY = "debug.enable";
public static void disableDebug() {
System.setProperty(DEBUG_FLAG_PROPERTY, "false");
}
}
실제로 해보지않아서 모르겠지만 위 코드는 디버깅 모드를 비활성화 하는 거라
동적 디버깅 도구를 사용해서 attach 하는 것과는 관련이 없을 것 같기도 하다
2. ptrace 차단 및 attach 차단
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
//디버깅 탐지
void detect_debugger() {
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
exit(1);
}
}
// SIGTRAP 시그널 핸들러
void sigtrap_handler(int signum) {
printf("SIGTRAP signal received.\n");
}
int main() {
// 디버깅 탐지 함수 호출
detect_debugger();
// SIGTRAP 시그널 핸들러
struct sigaction sa;
sa.sa_handler = sigtrap_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGTRAP, &sa, NULL);
while (1) {
// ...
// ...
}
return 0;
}
위 코드는 동적 디버깅 도구를 이용하여 앱에 attach시 ptrace 시스템을 호출해서 attach 하게 되는데
그 ptace를 차단함으로 써 attach되는 것을 막는 원리이다.
또한 동적 디버깅 도구에서 attach시 디버깅 시 사용되는 대표적인 SIGTRAP 신호가 발생되는데 그것을 무시하면서 동적 디버깅 도구가 붙지 못하게 된다.
반응형
'보안가이드' 카테고리의 다른 글
[Android] 백그라운드 화면 보호 취약점 보안가이드 (0) | 2023.05.22 |
---|---|
[Android] 메모리 내 중요정보 노출 취약점 보안가이드 (0) | 2023.05.18 |