Nullorm

Reversing 기초 | DreamHack | Background: Static Analysis vs. Dynamic Analysis 본문

study_SECURITY/Reversing

Reversing 기초 | DreamHack | Background: Static Analysis vs. Dynamic Analysis

Null0rm 2022. 6. 4. 20:49
반응형

1. 정적분석 vs 동적분석

정적분석(Static Analysis)는 외적인 관찰만을 통해 정보를 알아내는 것을 의미하고, 

동적분석(Dynamic Analysis)은 실행을 통해 동작을 분석하는 것을 의미함.

둘 중 어느 방법이 더 좋다고 할 수 있는지 말하기 힘들며, 두 방법을 모두 적절히 혼용하여야 대상을 효과적으로 분석할 수 있음. 동적인 방법만을 고수하면 큰 구조를 놓칠 수 있고, 반대로 정적인 방법만을 고수하면 실행을 통해 직관적으로 알 수 있는 부분을 분석하느라 시간을 허비할 수 있음. 

 

2. 정적분석

2-1. 정적분석의 장점

정적분석을 사용하면 프로그램의 전체적인 구조를 파악하기 쉬움. 

정적 분석 도구들은 프로그램이 어떤 함수로 구성되어있는지, 어떤 함수로 구성되었는지, 서로 어떤 호출 관계를 가지고 있는지 등을 종합적으로 살펴볼 수 있음.

또한 분석 환경의 제약에서도 비교적 자유로움. 실행을 전제로 하는 동적분석은 운영체제와 같은 환경의 영향을 많이 받지만 정적분석은 도구만 잘 갖추면 그러한 환경의 제약을 거의 받지 않는다고 할 수 있음.

마지막으로, 바이러스와 같은 악성프로그램의 위협으로부터 안전함. 실제로 실행을 하는 것이 아닌, 구조를 살피는 것이기 때문.

 

2-2. 정적분석의 단점

정적분석의 대상이 되는 프로그램에 만약 난독화(Obfuscation)이 적용되면 분석이 매우 어려워짐. 난독화가 적용되면 프로그램의 코드가 심하게 변형되어서 이를 읽고 흐름을 파악하는 과정이 매우 힘들어짐.

 

2-3. 정적 분석의 예

IDA를 이용하여 프로그램을 구성하는 코드를 살펴볼 수 있음. 디스어셈블된 코드와 디컴파일되어있는 코드를 모두 살펴볼 수 있음. 이들은 기계어를 사람이 이해하기 쉬운 언어로 나타내어 분석을 더욱 쉽게 해줌. 

또한 상호 참조기능이나 함수의 실행 흐름을 보기 쉽게 해주는 제어흐름 그래프 등을 통해 분석가가 프로그램을 쉽게 이해할 수 있도록 도움.

 

3. 동적분석

3-1. 동적분석의 장점

동적분석을 활용하면 코드를 자세히 분석해보지 않고도 프로그램의 개략적인 동작을 파악할 수 있음. 

프로그램은 다양한 함수가 복잡하게 영향을 주고받고있기 때문에 프로그램을 정적분석만으로 완벽히 이해하기는 매우 어려움. But 동적분석은 어떤 입력에 대한 개별 함수 또는 프로그램의 출력을 빠르게 확인할 수 있으므로 출력값들을 기반으로 동작을 추론해볼 수 있음. 

 

3-2. 동적분석의 단점

분석환경을 구축하기가 매우 어려움, 일단 실행 하는 것을 전제로 하기 때문에 실행 환경을 구축하지 못하면 동적 분석을 진행할 수 없음. 이 과정이 매우 번거롭고 어렵기도 함.

또한 정적분석에서의 '난독화'처럼 동적 분석에 대해서도 '안티 디버깅'과 같은 방해 기술이 존재함. 

안티디버깅을 사용하면 자신이 디버깅 당하고 있는지 검사하고, 디버깅중이면 프로그램을 강제로 종료시킬 수 있음.

 

3-3. 동적분석의 예

윈도우의 대표적인 동적분석 도구로 디버거 중 하나인 x64dbg가 있음. 디버거란 프로그램의 버그를 찾아내고 제거하기 위해 사용되는 도구인데, 이를 이용하영실행중인 어셈블리코드, 레지스터 상태, 메모리와 스택의 값을 확인하며 분석을 진행할 수 있음. 

 

반응형

'study_SECURITY > Reversing' 카테고리의 다른 글

Reversing 기초 | DreamHack | Background: Binary  (0) 2022.06.01