효투의 세상 로딩중...
효투의 세상 로딩중...
반응형

 

디버깅 탐지 기능 여부 취약점은

앱이 동작할 때 동적 디버깅 도구로 디버깅이 가능하냐 안하냐만으로도 취약점이 될 수 있다.

 

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 신호가 발생되는데 그것을 무시하면서 동적 디버깅 도구가 붙지 못하게 된다.

 

 

반응형
  • hyotwo7658@gmail.com

복사 완료 👍