안티디버깅기법 (Anti-Debugging Technique)

정보보안학
한 줄 정의: 프로그램이 디버거로 분석되고 있는지를 스스로 탐지하여 분석을 방해하거나 동작을 바꾸는 기법입니다.

쉽게 풀면

안티디버깅은 마치 누군가 자신을 몰래 관찰하고 있다는 것을 눈치채면 평소와 다르게 행동하는 것과 비슷합니다. 악성코드는 자신이 디버거라는 분석 도구 위에서 한 줄씩 실행되고 있는지 여러 방법으로 확인하고, 만약 감시받고 있다고 판단되면 즉시 종료하거나 가짜 동작을 보여줘 분석가를 혼란스럽게 만듭니다. 이렇게 되면 분석가는 악성코드의 진짜 목적을 파악하기가 훨씬 어려워집니다.

왜 중요한가

안티디버깅은 분석가의 리버스엔지니어링 작업을 직접적으로 방해하는 기법이기 때문에 악성코드 분석 자동화와 분석 환경 설계 연구에서 중요하게 다뤄집니다. 이 기법을 우회하는 능력이 곧 분석 도구의 실효성을 좌우하기도 합니다.

논문에서는 이렇게 쓰입니다

"해당 샘플은 IsDebuggerPresent와 같은 API 호출을 통해 디버거 존재 여부를 확인하는 안티디버깅 루틴을 포함하고 있었다."

실제 안티디버깅 구현에서 흔히 쓰이는 API 확인 방식을 설명하는 문장입니다.

"본 연구는 다양한 안티디버깅 우회 기법을 적용한 동적 분석 환경을 구축하여 악성코드의 은닉 행위를 관찰하였다."

안티디버깅을 우회한 분석 환경 구축 연구를 소개하는 문장입니다.

조금 더 깊게 보면

안티디버깅 기법에는 운영체제가 제공하는 디버거 감지 API를 호출하는 방식, 실행 시간 간격을 측정해 비정상적으로 느리게 실행되는지 확인하는 타이밍 기반 방식, 예외 처리 루틴의 동작 차이를 이용하는 방식 등이 있습니다. 분석가는 이러한 탐지 로직을 무력화하기 위해 디버거의 흔적을 숨기는 플러그인이나 커널 수준의 후킹 기법을 함께 사용합니다.

주의할 점

안티디버깅은 정상 소프트웨어의 라이선스 보호나 역공학 방지 목적으로도 사용되는 기법이므로, 이 기법이 적용되어 있다는 사실만으로 악성코드라고 단정할 수는 없습니다.

관련 용어