[Reversing] 2. 정적분석과 동적분석

Wonder_Land🛕·2022년 8월 23일
0

[Reversing]

목록 보기
2/6
post-thumbnail

[Reference] : 위 글은 다음 내용을 제가 공부한 후, 인용∙참고∙정리하여 만들어진 게시글입니다.


  1. 서론
  2. 정적 분석(Static Analysis)
  3. 동적 분석(Dynamic Analysis)
  4. Q&A
  5. 마치며

1. 서론

소프트웨어를 분석할 때는,
일반적으로 큰 구조를 먼저 관찰합니다.

하지만 이것만으로는 모든 실제 동작을 알 수 없기 때문에,
프로그램을 실제로 실행시켜보면서 동작을 관찰할 수 있습니다.

나아가, 더 자세한 분석을 할 때는
여러 수단을 동원해 특정 부분을 세밀하게 관찰할 수 있습니다.

리버싱 엔지니어링에서 소프트웨어를 분석하는 방법은 크게

  1. 정적 분석(Static Analysis)
  2. 동적 분석(Dynamic Analysis)

로 구분됩니다.

정적 분석은 외적인 관찰만을 통해 정보를 알아내는 것을 말하며,
동적 분석은 실행을 통해 동작을 분석하는 것을 말합니다.

우리는 이 두 방법을 적절히 사용하여 프로그램을 분석할 수 있어야 합니다.


2. 정적 분석(Static Analysis)

  • 정적 분석(Static Analysis)
    : 프로그램을 실행시키지 않고 분석하는 방법

1) 장점

(1) 전체구조를 파악하기 쉽다.

정적 분석 도구들은 프로그램의 여러 정보를 살필 수 있게끔 도와줍니다.

프로그램이 어떤 함수로 구성되었는지, 함수들은 어떤 호출 관계를 갖는지, 어떤 API를 사용하고, 어떤 문자열을 포함하는지 등등 말이죠.

이를 통해, 분석가들은 프로그램을 큰 관점에서 이해할 수 있습니다.

(2) 분석 환경의 제약에서 비교적 자유롭다.

예를 들어, 안드로이드의 apk파일은 별도의 소프트웨어를 사용하지 않는 한,
안드로이드에서는 실행할 수 없습니다.

따라서, 실행을 해야하는 동적 분석 방법으로는 해당 파일을 분석하기가 어렵습니다.

하지만, 정적 분석은 실행을 할 필요가 없으므로 비교적 자유롭죠.

(3) 바이러스와 같은 악성 프로그램의 위협으로부터 안전하다.

만약 바이러스를 동적 분석한다고 했을 때,
바이러스를 실행해야 하므로 감염의 위험이 있습니다.

하지만 정적 분석은 그렇지 않죠.


2) 단점

(1) 난독화(Obfuscation)가 적용되면 분석이 매우 어려워진다.

최근에는 많은 개발자가 자신의 소프트웨어를 리버스 엔지니어링으로부터 보호받기 위해,
난독화 기법을 적용합니다.

난독화가 적용되면 코드가 심하게 변형되기 때문에,
분석하기가 까다로워집니다.

이를 해제(Deobfuscation)하기 위한 여러 연구가 진행되고 있지만,
상용 난독화 서비스를 무력화하는 방법은 아직 없습니다.

(2) 다양한 동적 요소를 고려하기 어렵다.

프로그램은 실행중에 영향을 주고 받는 여러 함수들로 구성됩니다.

따라서 어떤 함수가 특정 시점에 정확히 어떤 인자와 전역 변수를 가지고 실행되는지를 정적 분석만으로는 파악하기 힘듭니다.


3. 동적 분석(Dynamic Analysis)

  • 동적 분석(Dynamic Analysis)
    : 프로그램을 실행시키면서 분석하는 방법

1) 장점

(1) 코드를 자세히 분석하지 않고도 개략적인 동작을 파악할 수 있다.

대부분의 프로그램은 많은 함수로 구성되어 있으며,
각각의 함수들은 복잡하게 상호작용하고 있습니다.

따라서, 정적 분석만으로 프로그램을 완전히 이해하기에는 매우 어렵습니다.

또한, 동적 분석은 어떠한 입력에 대한 개별 함수 또는 프로그램의 출력을 빠르게 파악할 수 있습니다.
그리고 이 출력값들을 기반으로 동작을 추론할 수도 있습니다.


2) 단점

(1) 분석 환경을 구축하기 어렵다.

동적 분석은 기본적으로 프로그램을 실행시키면서 분석하는 방법입니다.

그래서 다른 환경의 프로그램을 동적 분석할 때는 가상 머신을 구축하거나,
프로그램을 실행할 수 있는 장치를 구매해야 하는데,
이 과정이 대상에 따라 매우 번거롭고 어려울 수 있습니다.

또한, 정적 분석에서 '난독화'와 같이,
동적 분석을 어렵게 하는 여러 기법도 개발되고 있습니다.

그 중 동적 분석의 일종인 디버깅을 방해하는 '안티 디버깅(Anti-Debugging)'이 있습니다.
이는, 해당 프로그램이 디버깅 당하고 있는지 검사하고, 만약 디버깅 중이면 프로그램을 강제 종료시킵니다.


4. Q&A

-


5. 마치며

-

[Reference] : 위 글은 다음 내용을 제가 공부한 후, 인용∙참고∙정리하여 만들어진 게시글입니다.

profile
아무것도 모르는 컴공 학생의 Wonder_Land

0개의 댓글