Windows7 응용프로그램실행흔적분석 공지훈 201354002
순 서 1. UserAssist ------------------------ 1p 2. Prefetch / Superfetch ------------- 4p 3. Shim ---------------------------- 5p 4. LNK ---------------------------- 12p 5. Jump List ----------------------- 16p
1. UserAssist UserAssist는 explorer를통해사용자가사용한프로그램을 counting 하여자주사용하는프로그램을 [ 그림 1] 과시작목록에나타내준다. 또한실행시킨프로그램에대한경로와실행횟수, 마지막실행시간정보가 ROT13으로기록되어있다. 각운영체제에서 UserAssist 경로는다음과같다. HKU\{USER}\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer \UserAssist 2000/XP/Vista {5E6AB780-7743-11CF-A12B-00AA004AE837}\Count {75048700-EF1F-11D0-9888-006097DEACF9}\Count 7 {CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}\Count // 실행파일실행기록 {F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}\Count // 바로가기실행기록 [ 그림 1] 자주사용하는프로그램 - 1 -
UserAssist 확인시내용이 [ 그림 3] 과같은 ROT13 으로인코딩되었음을확인할 수있다. [ 그림 2] UserAssist [ 그림 3] ROT13 encoding Windows7 에서 UserAssist 키의 0 ~ 3 값은세션번호를나타내고 4 ~ 7 은실행 횟수, 60 ~ 67 은마지막실행시간을뜻한다. [ 그림 4] UserAssist 키내용 - 2 -
[ 그림 5] REGA 를이용한분석 [ 그림 5] 는 REGA를이용해 UserAssist를분석하는화면이다. GUID와실행프로그램명, 실행시간등의정보를확인할수있다. 추가적으로 Windows7/Vista 이후부터생겨난 UAC로인해일반사용자가특정경로에파일이나레지스트리를쓰게되면파일, 레지스트리가상화가이루어지는데이때가상화를통해쓰여진데이터는 NTUSER.dat가아닌 UsrClass.dat에저장되기때문에정확한분석을위해 UsrClass.dat도추가적으로수집및분석해야한다. [ 그림 6] REGA 수집항목 - 3 -
2. Prefetch / Superfetch 프리패치는실행파일이사용하는특정자원을파일로미리저장하는것으로실행 속도를향상시키기위함에목적이있으며부트프리패칭과응용프로그램프리패칭으 로나뉜다. 부트프리패칭시스템부팅시다양한파일을사용하게되는데이때부팅과관련한파일이흩어져있거나단편화되어부팅속도가저하될수있다. 프리패처는부팅시작후최대 120초간사용되는코드와데이터를모니터링하고그결과를파일로저장하여다음부팅시부터향상된속도를제공한다. 응용프로그램프리패칭실행프로그램실행시초기 10초간메모리에로드되는코드와데이터의일부또는전부를파일로생성하는데이때생성되는파일이프리패치파일이다. 프리패칭된응용프로그램실행시프리패치파일을이용해초기실행속도를향상시킬수있다. 프리패치파일은최대 128개의파일로제한되며초과되면제일오래된프리패치파일부터삭제된다. 하지만제한된용량을가진메모리로인해다른응용프로그램이메모리를필요로할경우프리패치데이터를페이징파일로이동시킨다. 때문에이데이터가필요하다면페이징파일로부터메모리로다시로딩하는과정을거쳐야하기때문에성능저하의원인이된다. 이러한문제점을해결하기위해슈퍼패치는프리패치데이터가메모리에서페이징파일로스와핑된경우이를감지하여페이징을야기한응용프로그램이종료된경우에다시페이징된데이터를메모리로이동시킨다. 때문에자주사용하는프로그램일경우지속적으로메모리에로드되어성능이향상된다. 추가적으로슈퍼패치는맵파일에사용자의프로그램사용패턴 ( 얼마나자주, 언제, 얼마동안 ) 을기록한다. 프리패치는 %SystemRoot%Prefetch 경로에저장되며부트프리패치파일은 NTOSBOOT-B00DFAAD.pf 이고이외는응용프로그램프리패치파일이다. 슈퍼패치 는 Ag 로시작하며.db 확장자를가진파일이다. - 4 -
[ 그림 7] 프리패치저장경로 Windows7 의프리패치 / 슈퍼패치설정과레벨에따른동작은아래와같다. [ 그림 8] 프리 / 슈퍼패치설정 프리패치파일은응용프로그램의이름, 실행횟수, 마지막실행시간과더불어프 로그램실행시참조목록등의정보를담고있어포렌식관점에서중요하게활용가능하다. [ 그림 9] WinPrefetchView 를이용한분석 [ 그림 9] 는 WinPrefetchView를이용해프리패치파일들을분석하는화면이다. 프리패치생성시간과더불어수정시간, 경로및참조정보등많은정보를담고있음을볼수있다. 응용프로그램을실행한후 10초간의모니터링과정에서실행한파일이로드되어참조목록에기록되는데종종남아있지않는경우도존재한다. - 5 -
3. Shim Shim캐시를이해하기위해먼저응용프로그램호환성데이터베이스에대한이해가필요하다. 운영체제는버전이업데이트될때마다응용프로그램의호환성문제를겪게되는데이를윈도우에서는응용프로그램호환성데이터베이스가해결해준다. 호환성처리모듈과데이터베이스는 C:\Windows\AppPatch\ 경로에서확인할수있다. [ 그림 10] 호환성데이터베이스파일 DLL 파일은호환성처리모듈이며.sdb 파일은호환성데이터베이스파일로해당파 일들은 sb2xml 로확인이가능하다. SDB 파일에는호환성문제가있는프로그램목 록과함께기존프로그램을계속사용할수있도록하는설정정보를가지고있다. [ 그림 11] pcamain.sdb xml SDB 에서해결하는호환성문제는프로그램바이너리가아닌 API 와관련된호환성 문제이다. 운영체제는업그레이드될때마다새로생겨나는 API 는물론이고없어지는 - 6 -
API, 이를대체하기위한 API가존재하는데 SDB에는각응용프로그램별관련정보가모두저장되어있다. 응용프로그램은윈도우 API접근을위해 IAT를사용하고이때 shim은 IAT 호출사이에끼어들어 SDB를참고하여호환성해결방안으로호출흐름을바꾼다. [ 그림 12] shim 구조 이처럼호환성문제를겪은프로그램은호환성캐시에저장이된다. 따라서응용프로그램실행시 kernel32.dll의 CreateProcessInternalW 함수가시작되고해당함수는내부적으로 BasepCheckBadApp 함수를호출하게된다. 이함수는호환성체크를담당하는함수로서 SDB정보를확인하기전캐시데이터를확인한다. 만일캐시에서호환성문제를발견하지못한다면 SDB를탐색한다. 호환성캐시가정보가저장되는경로는아래와같다. [ 그림 13] shim 캐시저장경로 - 7 -
[ 그림 14] shim 캐시정보 [ 그림 15] win7 shim 캐시구조 shim 캐시는 [ 그림 15] 와같이프로그램경로, 크기, 마지막수정시간등이저장된다. 프리패치를이용해서실행정보를알수있지만프리패치개수가한정되어있어오래된흔적을찾기어렵고, 악성코드가프리패치와같이잘알려진흔적을모두삭제하는경향이있어 shim 캐시정보는포렌식관점에서유용하게사용될수있다. shim 캐시는맨디언트社의 ShimCacheParser를통해분석이가능하다. [ 그림 16] ShimCacheParser [ 그림 17] ShimCacheParser 출력 - 8 -
[ 그림 18] 프로그램호환성관리자 호환성에대해적절한해결책을찾지못한경우위처럼프로그램호환성관리자가 출력된다. 이때 이프로그램이제대로설치되었습니다. 를선택한경우에는아래와 같은레지스트리키에별도로관리된다. [ 그림 19] 프로그램호환성관리자레지스트리키 - 9 -
호환성해결을위해 [ 그림 20] 의호환모드, 설정또는권한수준을설정한경우레 지스트리에저장되고특정사용자만적용하였는지또는시스템전체적으로설정되었 는지여부에따라 HKLM 이나 HKCU 에저장된다. HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers [ 그림 20] 호환성속성 호환성아티팩트와관련해서는추가적으로 RecentFileCache.bcf 가존재하는데이 는 C:\Windows\AppCompat\Programs\ 경로에존재한다. [ 그림 21] RecentFileCache.bcf - 10 -
RecentFileCache.bcf 파일에는단순히실행파일의전체경로가유니코드형식으로저장되어있다. 이파일은프로세스생성시프로그램경로를임시로저장하기위해사용하는것으로최근실행한프로그램에관한정보만저장되어있다. http://journeyintoir.blogspot.kr/p/about.html 에서언급된바에의하면실행한모든프로세스정보가저장되는것이아닌드롭퍼와같이실행파일에서또다른실행파일이파생되거나다른볼륨, 시스템에서복사된프로그램을실행한경우에만기록된다고한다. 기록되는특성에의해악성코드분석시매우유용하게이용할수있지만 RecentFileCache.bcf 파일은 1일 1회초기화가이루어진다. - 11 -
4. LNK 바로가기파일인링크파일은사용자가의도적으로생성하는경우도있지만의도치않게생성되는경우도존재한다. 그중하나가최근문서폴더인데, 이폴더에는사용자가최근에실행했던파일및폴더에대한링크파일이저장된다. WFA를사용해최근에사용된링크파일들의시간과경로정보및 ObjectID, 볼륨ID 등을정보를확인할수있다. [ 그림 23] 최근문서 [ 그림 24] WFA 를이용한링크파일분석 - 12 -
[ 그림 25] LNK 파일생성경로 링크파일은 [ 그림 26] 과같이 ShellLinkHeader, LinkTargerIDList, LinkInfo, StringData, ExtraData 로구성되어있으며 ShellLinkHeader 만이기본헤더로내 부플래그의설정에따라옵션헤더가구성된다. [ 그림 26] LNK 파일구조 각헤더에저장되는정보는아래와같다. ShellLinkHeader(default) : 기본적인헤더로식별정보, 시간정보, 대상 파일크기, 대상파일특성등의정보가저장된다. - 13 -
LinkTargetIDList(optional) : ShellLinkHeader의 HasLinkTargetIDList 플래그가설정되어있을때만존재하는구조로, 링크된대상의다양한정보를리스트형태로구성해놓은구조이다. LinkInfo(optional) : ShellLinkHeader의 HasLinkInfo 플래그가설정되어있을때만존재하는구조로링크대상을참조하기위한정보를가진구조이다. StringData(optional) : 역시나링크대상의문자열정보 ( 이름, 상대경로, 작업디렉터리등 ) 를저장하는구조로 ShellLinkHeader에관련된플래그가설정되어있을때만존재한다. ExtraData(optional) : 링크대상의화면표시정보, 문자열코드페이지, 환경변수와같은추가적인정보저장을위한구조이다. 포렌식관점에서중요한헤더는 ShellLinkHeader(FileAttributes, CreationTime, AccessTime, WriteTime, FileSize) 와 LinkInfo(VolumeID) 이다. [ 그림 27] FileAttributes [ 그림 28] Time, Size ShellLinkHeader 의 FileAttributes 헤더에서는해당링크파일에대한속성정보를 확인할수있고링크대상의생성시간및링크대상의접근시간, 쓰기시간과크기 에대한정보를분석할수있다. - 14 -
LinkInfo 의 VolumeID 헤더에선 DriveType 을통해링크대상이위치한드라이브의 형식과 DriveSerialNumber 그리고링크대상경로를파악할수있다. [ 그림 29] VolumeID - 15 -
5. Jump List Jump List 는윈도우 7 에서새롭게추가된기능으로사용자가최근에열어본파일 및자주열람한파일등사용자의편의를제공하기위해윈도우설치시기본으로설 정되는기능이다. [ 그림 30] 자주사용하는목록 포렌식관점에서 Jump List는사용자의응용프로그램사용흔적및패턴을파악할수있고윈도우설치시부터자동설정되기때문에의도적으로삭제하는경우가아닌이상지속적으로로그가저장이된다. 만약삭제될경우에도볼륨에그대로유지되어복구가가능하다. Jump List 의설정은작업표시줄우클릭 - 속성또는제어판 - 작업표시줄및시작 메뉴에서 [ 그림 31] 과같은설정이가능하다. - 16 -
[ 그림 31] Jump List 설정 Jump List 의설정은작업표시줄우클릭 - 속성또는제어판 - 작업표시줄및시작 메뉴에서 [ 그림 31] 처럼설정이가능하고 Jump List 저장경로는 [ 그림 32] 와같다. [ 그림 32] Jump List 저장겨로 각폴더에저장되는아이템의종류는다음과같다. AutomaticDestinations 운영체제가자동으로남기는항목 MRU/MFU CustomDestinations 응용프로그램이자체적으로관리하는항목 task 목록 - 17 -
각 Jump List 폴더안에는 OLE Compound 파일구조를가진 *Destination-ms 파일이존재한다. 각파일들의이름은 16 바이트크기의 AppID 를나타내고있으며파 일내부에는 Jump List Item 과 Item 의정보를요약하는 DestList 로구성되어있다. [ 그림 33] Jump List 파일 [ 그림 33] 의 automaticdestination-ms 파일의 AppID 는 918e0ecb43d17e23 로메 모장프로그램의아이템임을알수있다. * http://www.forensicswiki.org/wiki/list_ of_jump_list_ids (AppID 확인 ) - 18 -
Jump List 아이템을 LNK 파일과동일한포맷을가지고있어 [ 그림 34] 와같이아 이템의경로와링크대상의시간정보등의확인이가능하다. [ 그림 34 ] Jump List 파일내용 - 19 -
또, JumpLister 툴을사용하면각아이템을불러와해당아이템을 LNK 파일형식 으로파싱해출력해준다. [ 그림 35] Jump Lister 를이용한분석 - 20 -
참 고 1. http://forensic-proof.com/archives/2154 2. http://forensic-proof.com/archives/6103 3. http://www.technipages.com/win7-vista-enabledisable-superfetch 4. http://blogs.technet.com/b/koalra/archive/2009/05/14/windows-7-perfo rmance-responsiveness-superfetch.aspx 5. http://forensic-proof.com/archives/3397 6. http://forensic-proof.com/archives/5819 7. http://forensic-proof.com/archives/607 8. http://maj3sty.tistory.com/1034 9. http://forensic.korea.ac.kr/ 10. http://nirsoft.net/utils/win_prefetch_view.html 11. https://www.mandiant.com/blog/leveraging-application-compatibilitycache-forensic-investigations/ 12. http://blogs.msdn.com/b/heaths/archive/2007/11/02/sdb2xml.aspx 13. http://www.mitec.cz/wfa.html 14. FP-레지스트리-포렌식과-보안.pdf 15. FP-프리슈퍼-패치-포렌식-Pre-Superfetch-Forensics.pdf 16. FP-윈도우-7-점프-목록-Windows7-Jump-List.pdf 17. http://forensic-proof.com/archives/1904 18. http://www.woanware.co.uk/?p=265-21 -