요약: 실행파일에 대한 정적인 분석을 통한 역공학 과정은 소프트웨어 보안에서 필수적인 단계이다. 역공학은 크게 소프트웨어가 사용하는 데이터 구조와 제어 구조에 대하여 수행된다. 특히 데이터 역공학은 소프트웨어를 이해하기 위해 필수적이지만 기존의 VSA기법은 단편화된 실행파일에 대한 한계를 가지고 있다. 본 논문에서는 동적인 영역할당을 통해 이러한 문제점을 해결하고 데이터 구조 역공학의 성능을 향상시킨다.
I. 서론 및 배경지식
단편화된 실행파일이란?
Fragmentation binary code → 함수가 여러개로 쪼개진 형태를 가지고 있는 파일
역공학(reverse engineering)이란?
실행파일만을 가지고 주어진 실행 파일이 어떠한 데이터 구조와 값을 사용하며 어떠한 작업을 수행하는지 알아내는 과정
determines whether or not separate memory references point to the same area in memory
determines if a storage location may be accessed in more than one way
determines what variables in the program will be affected by a statement
예시상식적으로는 i는 4라는 생각이 들지만, i가 나올 수 있는 값은 총 3가지 경우가 있다.
p와 q는 alias 불가능 (can’t point to the same memory location)
최적화 진행 가능
i = p.foo + 3 → i = 4
p와 q는 무조건 alias
최적화 진행 가능
i = p.foo + 3 → i = 5 ( ∵ (p.foo) + 3 = (q.foo) + 3 )
컴파일 시 p와 q가 alias 인지 아닌지 알 수 없음
최적화를 진행할 수 없고 결과를 알기 위해서 전체 코드를 실행해야 함.
☝ [예시]
p.foo = 1;
q.foo = 2;
i = p.foo + 3;
Value Analysis
value range analysis
tracks the range(intervals) of values that a numeric variable can take on at each point of a program’s execution
the resulting information can be used in optimizations such as redundancy elimination, dead code elimination, instruction selection 등… but also to improve program safety such as detection of buffer overruns
VSA와 한계점
VSA(Value-Set Analysis): 프로그램을 구성하는 각 영역(region)마다 SI로 표현되는 값을 하나식 가지는 value set을 구성하여 프로그램에서 사용하는 변수드을 찾아내는 작업 수행
한계점: ‘정의되지 않은(undefined)’변수를 단순히 전범위 값([- ∞ , ∞])으로 치환 → 정확도가 크게 떨어짐
본 논문의 내용
정의되지 않은 값들의 변화를 유추하는 방법을 제공 → 프로그램의 데이터 구조 역공학 방법을 향상
II. 소프트웨어 역공학과 기존 기법의 문제점
2.1 소프트웨어 공학의 변수 탐색 및 복원
컴파일 과정
소스코드 → (컴파일) → 어셈블리 언어 → 인코딩한 기계어 코드
역공학 과정
기계어 → 어셈블리 언어
소스코드가 주어지지 않았기 때문에 실행파일을 분석해야함
실행파일에서는 소스코드에 있던 변수 정보는 사라지고 저수준의 메모리 접근 연산으로 단순화 ∴ 실제 데이터 구조를 찾을 수 없음