[Dynamic-Link Library Redirection]
위 기술은 시스템에서 기본적으로 지원하는 DLL 파일을 사용하지 않기 위해 사용하는 기술로 사용방법에는 두가지가 있다.
1. 실행파일 전체 이름 뒤(확장자 뒤)에 .local 확장자를 붙인 파일과 필요한 DLL 파일을 같은 폴더에 넣는 방법
2. 실행파일 전체 이름 뒤(확장자 뒤)에 .local 확장자를 붙인 폴더를 생성하여 폴더아래에 필요한 DLL 파일을 넣는 방법
Dynamic-Link Library Redirection 이 기법은 Live Response에서 중요한 의미를 갖는다.
Live Response 수행 시 도구가 시스템에서 지원하는 DLL을 사용하는데 해당 DLL이 해커나 악성프로그램에 의해 변조되었다면
도구의 동작이나 결과등이 정확하게 이루어지지 않을 수 있다.
또, DLL을 사용하지 않고 모든 함수등의 라이브러리를 프로그램에 추가하면 그만큼 프로그램의 크기가 증가되어 메모리에
그만큼의 영향을 주게 된다.
그렇기에 위 기법을 사용하면 DLL 파일의 변조를 막을 수 있고 프로그램의 크기또한 DLL을 사용하는 것 보다 크기가
증가하지 않아 여러모로 이득을 볼 수 있다.
또, 위 기법은 DLL 검색순서에서도 두번째 순서에 해당한다.
다음은 DLL검색순서이다.(SafeDllSearchMode가 비활성화 일 경우)
[DLL 검색순서]
1. SxS(Side By Side Assembly) 파일에서 지정된 폴더 안의 DLL 파일
2. Dynamic-Link Library Redirection에 의해 지정된 폴더에 있는 DLL 파일
3. lpPathName이 가리키고 있는 폴더의 DLL 파일
4. 알려진 DLL 파일(Known-DLL File)
5. 실행 파일이 있는 폴더에 있는 DLL 파일
6. 현재 폴더에 있는 DLL 파일
7. 시스템 폴더에 있는 DLL 파일
8. 윈도우 폴더에 있는 DLL 파일
9. 윈도우 환경설정 정보에 있는 기본경로 중에 있는 DLL 파일
위 순서를 보면 시스템 폴더에 있는 DLL 파일보다 위 기법의 DLL 파일이 우선순위가 더 높기 때문에 OS를 위 기법의 DLL
파일을 먼저 검색하여 있으면 위 기법의 DLL 파일을 사용 할 것이다.
아래에는 위 기법의 두번째 방법을 수행하는 과정이다.
처음에 프로그램을 실행하면 아래에 이미지와 같이 system32라는 시스템폴더에서 DLL 파일을 불러와 사용한다.
[그림 1 - system32 폴더에 있는 DLL 파일을 사용하는 화면]
평상시처럼 프로그램을 실행시켰을 시 위와 같이 system32라는 폴더에서 DLL 파일을 검색해 사용한다.
하지만 아래와 같이 Dynamic-Link Library Redirection 기술을 적용해 프로그램을 실행시키면 아래와 같다.
[그림 2 - local 폴더 안에 필요 DLL 파일을 넣은 모습]
위 이미지에서 한가지 문제점이 있다. 그림 1을 보면 ntdll.dll 파일이 있는데 그 파일이 그림 2에서는 빠져있다.
ntdll.dll과 같은 시스템DLL 파일은 다른곳에서 실행하게 되면 응용프로그램 오류가 생겨 프로그램 실행이 되지 않아
목록에서 제외 되었다.
[그림 3 - 적용 후 프로그램 실행되어 불려진 DLL 파일의 경로]
그림 3을 보면 system32 폴더가 아닌 .local 폴더에서 불려온 것을 확인 할 수 있다.
그러나 해당 기법으로는 DLL 변조나 위조등을 100% 막지는 못한다.(세상에 완벽이 없듯이)
작은 노력으로 큰 퍼포먼스를 얻는 기법이니 이정도에서 만족하는 것이 좋을 듯 하다.
'[+] Forensic' 카테고리의 다른 글
휘발성 정보 수집 (2) (2) | 2011.12.20 |
---|---|
휘발성 정보 수집 (1) (0) | 2011.12.20 |
Live Response ?(2) (0) | 2011.12.19 |
Live Response ?(1) (0) | 2011.12.18 |