Windows Transactional NTFS(TxF), Registry(TxR) 기능 연구 유 병 영, 방 제 완, 이 상 진 고려대학교 디지털포렌식연구센터 Analysis of Windows Transactional NTFS(TxF) and Transactional Registry(TxR) Byeongyeong Yoo, Jewan Bang, Sangjing Lee Center for Information Security Technologies, Korea University 요 약 Transaction은 하나의 작업을 원자(atomic)단위로 수행하여 작업을 완료(commit) 하기 전까지 원본의 데이터를 보존하는 것을 말한다. Transactional NTFS(TxF)는 NTFS에 Transaction을 적용한 것으로 윈도우 비스타에서 처음 도입된 기능이다. Transactional Registry(TxR)는 Transactional NTFS와 마찬가지로 레지스트리에 Transaction 기능을 적용한 것이다. Transaction이 적용된 작업을 수행할 경우, 해당 작업에 대한 로그가 기록된다. 이 러한 로그를 통해 사용자의 작업 내역을 확인할 수 있다. 본 논문에서는 Transactional NTFS와 Transactional Registry을 소개하고, 디지털 포렌식 관점에서 로그를 분석한다. 그리고 Transaction 로그 파일을 분석하는 도구 를 구현한다. ABSTRACT Transaction indicates that the reservation of original data before committing works by executing a single work as an atomic unit. Transactional NTFS (TxF) is the thing that applies Transaction into on NTFS and is the first introduced in the Windows Vista. As Transactional NTFS, Transactional Registry (TxR) is that applies Transaction functions into Registry. When working on the task that Transaction is applied, the log relating to the work is recorded. Throughout the log, user can check work information. This paper introduces Transactional NTFS and Transactional Registry and analysis logs in the point view of digital forensics. Furthermore, this paper simulates the implement that analyze the Transaction log file. Keywords : Transaction, NTFS, Registry, Digital forensic 교신저자 : sangjin@korea.ac.kr
1. 서 론 트랜잭션은 데이터베이스, ATM 등의 시스템에서 사용되는 것으로, 하나의 작업을 원자 단위로 수행하여 작업을 완료하기 전까지 원본의 데이터를 보존하는 것을 말한다. 만약 작 업을 완료하기 전에 오류로 인하여 작업이 중단될 경우 원본의 상태로 복구 한다[6]. 예를 들어, ATM에서 인출 거래를 할 경우 사용자로부터 필요한 정보를 입력 받고, 사용 자의 계좌를 조회하여 현금을 지급하는 일련의 절차이다. 정전이나 통신망 장애 등으로 인 해 작업이 도중에 중단되면 인출 거래 전의 상태로 복구 된다. 또한, 데이터베이스에서 여러 개의 질의(Query)를 하나의 트랜잭션으로 묶어 놓는 경우도 마찬가지이다. Transactional NTFS와 Transactional Registry는 윈도우 비스타에서 처음 도입된 기능으로 파일, 레지스트리와 관련된 작업에 트랜잭션을 적용하여 작업이 중단될 경우 언제든지 처 음으로 회귀(roll back)하도록 하여, 작업이 중단될 때 발생할 수 있는 오류를 방지 한다. 트 랜잭션의 적용으로 작업에 대해 원자성, 일관성, 격리성 및 지속성을 갖는 작업을 수행할 수 있다[3]. 응용 프로그램의 소프트웨어 업데이트가 A 파일에 대한 작업을 수행하는 상황에서, 다른 응용 프로그램의 소프트웨어 업데이트가 같은 A 파일을 액세스할 경우 해당 작업이 거부되 는 경우가 발생 할 수 있다. 이 경우 응용 프로그램을 일관성 없는 상태로 남겨두지 않기 위 해 변경 내용을 모두 추적하여 실행을 취소해야 한다. 트랜잭션을 적용을 할 경우 위와 같은 상황에서 어려움 없이 원본의 상태로 회귀(roll back)할 수 있다. 트랜잭션을 이용하여 작업을 할 경우 이에 대한 로그가 저장된다. 로그에 작업 내용이 순 차적으로 저장되며, 이를 통해 작업 내용을 분석 할 수 있다. 그러나 Transactional NTFS와 Transactional Registry를 디지털 포렌식 관점에서 분석한 결과는 발표되지 않았다. 본 논문에서는 Transactional NTFS와 Transactional Registry을 소개하고, 디지털 포렌식 관점에서 로그를 분석한다. 그리고 Transaction 로그 파일을 분석하는 도구를 구현한다. 2. Transactional NTFS (TxF) 2.1 소 개 Transaction이란 어떠한 작업의 시작점에 들어간 후 정해진 순서대로 일을 처리하다가 오류가 발생하게 되면 초기 시점으로 회귀 하여 작업 결과를 전혀 반영하지 않는 방식이다 [1][3]. TxF로 불리는 Transactional NTFS는 NTFS에서 Transaction을 적용한 것으로 Window Vista에 처음 도입된 기능이다. 파일의 생성, 삭제, 수정 등이 하나의 Transaction을 이루게 되고, 파일 작업이 성공적으로 완료 되었는지 여부를 확인한 후에 작업을 완료할 수 있다. 응용 프로그램은 모든 작업을 완료하기 이전이라면 언제라도 Transaction을 초기 시점 으로 회기(roll back) 하여 해당 작업을 취소할 수 있다. TxF는 Transaction NTFS API를 사용한다. 기존Win32 API에 대응하는 Transactional NTFS API가 존재한다. 예를 들어 Win32 API CreateFile, DeleteFile에 대응하는
디지털 포렌식 관점의 Windows Transactional NTFS(TxF), Transactional Registry(TxR) 기능 연구 3 Transactional NTFS API는 CreateFileTransacted, DeleteFile Trasacted이다. 대표적인 Transactional NTFS API는 표 1과 같다[4]. 표 1 Tr ansaction NTFS API Non-Transaction API CreateFile CopyFileEx MoveFileWithProgress DeleteFile CreateHardLink CreateSymbolicLink Transaction API CreateFileTransacted CopyFileTransacted MoveFileTransacted DeleteFileTransacted CreateHardLinktransacted CreateSymbolicLinkTransacted CreateDirectoryEx RemoveDirectory CreateDirectoryTransacted RemoveDirectoryTransacted 2.2 Forensic Features TxF를 사용하여 파일의 생성, 삭제, 수정과 같은 작업을 수행할 경우, 수행 내용이 특정 파일에 저장된다. 이 파일은 운영체제가 설치된 볼륨에 \$Extend\$RMMetaData라는 숨겨 진 폴더에 저장된다. 그림 1과 같이 $RMMetaData\$TxfLog 폴더의 $TxfLogContainer 파일 에 TxF 작업에 대한 로그가 저장된다. 하나의 $TxfLogContainer 파일은 10MB의 고정된 크기를 갖는다. 로그는 파일의 시작부터 순차적으로 저장되고, 로그 기록이 중단 되었다가 다시 기록될 경우 마지막으로 저장된 위 치 다음부터 이어서 로그가 작성된다. 저장된 로그가 10MB를 초과할 경우 인덱스를 증가시 킨 $TxfLogContainer을 새로 생성하여 그곳에 로그를 작성한다.(그림1 참조) 그림 1 Tr ansactional NTFS 파일 로그는 TxF 작업에 대한 시간정보와 작업 내용, 수행한 파일의 경로와 이름이 저장된다. 시간 정보는 8 Bytes의 FILETIME 포맷으로 저장되며, TxF 작업 완료 시 파일의 Created Time, Last Written Time, Last Accessed Time, Entry Modified Time이 저장된다. 작업 내 용은 파일 삭제, 파일 생성, 폴더 삭제, 폴더 생성 등의 내용에 따라 고유한 값이 저장된다. 예를 들어, My Document 폴더에 TestTransaction.txt 파일을 CreateFileTransacted API를 이 용하여 생성 할 경우, TestTransaction.txt 파일의 시간정보와 파일 경로
(\Users\[Account]\Document\TestTransaction.txt) 그리고 파일 생성을 나타내는 고유한 값 이 저장된다. 그림 2의 (A)는 TxF 작업시의 파일 시간정보(FILETIME 형식)를 나타내고, (B) 는 경로와 파일 이름을 나타낸다. 그림 2 Tr ansactional NTFS 로그 TxF는 파일의 작업시간, 경로와 이름 및 파일의 속성이 로그에 순차적으로 저장되기 때문 에 파일작업에 대한 증거를 획득하는데 유용하게 사용될 수 있다. 2.3 Transactional NTFS 로그 포맷 분석 그림 3 Tr ansaction Log 구조 TxF로그는 트랜잭션 작업 단위로 저장된다. 즉 트랜잭션을 생성한 후 작업을 완료 (commit)하기까지 수행한 내용을 하나의 Log block 에 저장된다. Log block은 그림 3과 같
디지털 포렌식 관점의 Windows Transactional NTFS(TxF), Transactional Registry(TxR) 기능 연구 5 이 하나의 헤더블록과 다수의 데이터블록으로 구성되는데, 이러한 Log block의 집합이 TxF 로그파일이다. Log block은 512Bytes의 배수의 크기로 저장되는데, 트랜잭션 생성 후 완료하 기까지 작업한 내용의 횟수에 비례하여 크기가 결정된다. 헤더 블록에는 데이터 블록의 정 보를 저장하고, 하나의 데이터 블록에 파일 생성, 삭제와 같은 하나의 작업 내용을 저장한다. 만약 트랜잭션 생성 후 파일 생성을 3차례 수행하였다면 헤더 블록과 3개의 데이터 블록이 생성되어 하나의 Log block을 구성한다. 그림 4 Tr ansactional NTFS 로그: 헤더 블록 헤더블록은 그림 4와 같이 112Bytes로 구성된다. (A)는 헤더블록의 signature로 0x150001 의 값을 갖는다. (B)는 헤더블록과 데이터블록의 총 사이즈로 헤더블록의 시작위치로부터 offset 0x04에 위치한다. (B)의 값과 512Bytes를 곱하여 크기를 계산 한다. 그림 4의 값은 0x02로 1024Bytes 크기이다. (C)는 data block identifier 으로 헤더블록의 시작위치로부터 offset 0x19에 위치한다. data block identifier는 Log block내에 데이터블록의 시작위치를 구 분하는 값으로 사용된다. 그림 5 Tr ansactional NTFS 로그: 데이터블록
데이터 블록은 그림 5와 같이 구성된다. (A)는 데이터 블록의 인덱스이며, 0x00부터 순차 적으로 증가한다. (B)는 data block identifier로 헤더블록에 저장되어있던 값을 사용하여 데 이터블록의 시작 위치를 구분한다. (C)는 작업의 행위를 구분하는 값이다. (C)의 값이 0x0300000001000000이면 파일 생성을 나타내고, 0x0200000007000000이면 파일 삭제를 나타 낸다. (D)는 파일의 속성을 구분하는 값이다. (D)의 값이 0x9800000006000000, 0xB000000006000000이면 파일을 나타내고, 0x9800000007000000, 0x00000000FFFF4401이면 폴더를 나타낸다. (E)는 트랜잭션이 완료되었을 때의 파일 시간이다. 시간 정보는 8Bytes의 FILETIME 포맷으로 저장되고, Created Time, Last Written Time, Last Accessed Time, Entry Modified Time이 순서대로 저장된다. (F)는 유니코드로 저장된 파일의 경로와 이름이 다. (G)는 파일 이름의 종료를 나타내는 signature로 파일 생성에 관한 트랜잭션일 경우에만 존재한다. 파일 삭제일 경우에는 파일 이름이 끝나고 data block identifier가 오게 된다. Descriptions Offset Size(byte) Value Remarks (A) data block index 0x00 1 variable (B) data block identifier 0x01 7 data block identifier stated in Header block (C) classification of file create, delete 표 2 Tr ansactional NTFS 로그: 데이터 포맷 0x28 8 0x0300000001000000 Create 0x0200000007000000 (D) file attribute 0x98 8 0x9800000006000000 file 0xB000000006000000 0x9800000007000000 folder 0x00000000FFFF4401 (E) file time information 0xA 24 Variable 0 (F) file path and name 0xF0 variable Variable (G) File name footer varia ble 8 0x0100148C90000000 3. Transactional Registry (TxR) 3.1 소 개 TxR는 TxF와 마찬가지로 레지스트리에 Transaction 기능을 적용한 것이다[1]. 이는 레지 스트리 생성, 변경 등과 같은 레지스트리 작업에 관하여, Transaction의 개념을 적용하였다. 그리고 TxR도 Win32API에 대응하는 Transactional Registry API가 존재한다. 예를 들어 Win32 API RegCreateKey, RegDeleteKey에 대응하는 Transactional Registry API는 RegCreate KeyTransacted, RegDeleteKeyTrasacted 이다. 대표적인 Transactional Registry API는 표2과 같다[5].
디지털 포렌식 관점의 Windows Transactional NTFS(TxF), Transactional Registry(TxR) 기능 연구 7 표 3 Tr ansactional Registr y API Non-Transaction API RegOpenKey RegCreateKey RegDeleteKey Transaction API RegOpenKeyTransacted RegCreateKeyTransacted RegDeleteKeyTransacted 3.2 Forensic Features TxR 역시 레지스트리 작업에 관한 수행 내용이 특정 파일에 저장된다. 이 파일은 운영체 제가 설치된 볼륨의 \window\system32\config \TxR 폴더에 저장된다. 그림 6과 같이TxR 폴더의 TxR.x.regtrans-ms 파일에 TxR 작업에 대한 로그가 저장된다. 그림 6 Tr ansactional Registr y 파일 하나의 TxR.x.regtrans-ms 파일은 5MB의 고정된 크기를 갖는다. 로그는 파일의 시작부터 순차적으로 저장되고, 로그 기록이 중단 되었다가 다시 기록될 경우 마지막으로 저장된 위 치 다음부터 이어서 로그가 작성된다. 저장된 로그가 5MB를 초과할 경우 인덱스를 증가시 킨 TxR.x.regtrans-ms 을 새로 생성하여 그곳에 로그를 작성한다. 그림 7 Tr ansactional Registr y 로그 로그는 TxR 작업에 대한 키의 경로와 키 생성, 키 삭제 등의 작업 내용을 저장한다. 예를 들어, LOCAL_MACHIN/SOFTWARE/TestTransaction 키를 RegDeleteKeyTransacted API 를 이용하여 삭제할 경우, TxR.x.regtrans-ms 파일에 키 삭제를 나타내는 고유한 값과 키의
경로인 LOCAL_MACHIN/SOFTWARE/TestTransaction이 저장된다. 그림 7의 (A)는 삭제 된 키의 경로를 나타낸다. TxR의 레지스트리 키의 접근 여부와 생성, 삭제 정보를 이용하여 레지스트리 조작에 대한 증거 획득에 이용될 수 있다. 3.3 Transactional Registry 로그 포멧 분석 TxR 로그는 TxF와 마찬가지로 트랜잭션 생성후의 작업을 완료(commit)하기까지 수행한 내용을 하나의 단위로 묶어서 Log block저장한다. Log block이 512Bytes의 배수의 크기로 저장되고 하나의 헤더블록과 여러 개의 데이터 블록에 정보를 저장하는 방식은 TxF 와 동일 하다. 그림 8 Tr ansactional Registy 로그: 헤더블록 헤더블록은 그림 8과 같이 112Bytes로 구성된다. (A)는 헤더블록의 signature, (B)는 헤더 블록과 데이터블록의 총 사이즈, (C)는 data block identifier로 TxF와 동일한 구조를 가진다. 그림 9 Tr ansactional Registr y 로그: 데이터블록 데이터블록은 그림9와 같이 구성된다. (A)는 데이터 블록의 인덱스이며, 0x00부터 순차적 으로 증가한다. (B)는 data block identifier로 헤더블록에 저장되어있던 값을 사용하여 데이 터블록의 시작 위치를 구분한다. (C)는 작업의 행위를 구분하는 값이다. (C)의 값이 0xAFF5 이면 레지스트리 키 생성을 나타내고, 그 외의 값을 가지면 레지스트리 키 삭제를 나타낸다.
디지털 포렌식 관점의 Windows Transactional NTFS(TxF), Transactional Registry(TxR) 기능 연구 9 (D)는 유니코드로 저장된 레지스트리 키의 경로와 이름이다. (E)는 레지스트리 키 이름의 종 료를 나타내는 signature 0x01000484의 고정 값을 가진다. Descriptions Offset Size(byte) Value Remarks (A) data block index 0x00 1 Variable (B) data block identifier 0x01 7 data block identifier stated in Header block (C) classification of registry key create, delete 표 4 Tr ansactional Registr y 로그: 데이터 포맷 0x28 2 0xAFF5 create variable delete (D) registry key path and name 0x5C Variable variable (E) registry key name footer varia 4 0x010000484 ble 4. Transaction Log Analyzer Transaction Log Analyzer는 Transactional NTFS, Transactional Registry의 로그파일을 분 석하여 리스트로 출력한다. 리스트는 파일 이름, 파일 경로, 파일 시간 (Created Time, Last Written Time, Last Accessed Time, Entry Modified Time), 파일 속성(파일, 폴더), 작업 내 용(생성, 삭제)을 담고 있다. Transaction Log Analyzer를 이용하여 TxF, TxR 로그파일로부터 정보를 빠르게 획득할 수 있다. 이는 디지털 포렌식 수사 시 Transaction을 이용한 파일과 레지스트리 조작을 분석 하는데 용이하게 사용될 수 있다. 5. 결 론 그림 10 Tr ansaction Log Analyzer 본 논문에서는 Transactional NTFS, Transactional Registry를 소개하고 디지털 포렌식 관 점에서 로그를 분석하였다. 그리고 Transaction로그를 분석하는 도구를 구현하여 로그의 내 용을 확인하였다. Transactional NTFS, Transactional Registry의 로그로부터 파일의 경로와 이름, Created
Time, Last Written Time, Last Accessed Time, Entry Modified Time, 파일 속성, 작업 내용 에 대한 정보를 획득할 수 있다. 이를 통해 사용자의 파일, 레지스트리 조작에 관한 행동을 분석할 수 있다. 앞으로 트랜잭션 로그 정보를 추가적으로 분석하여 본 논문에서 분석한 정보 외에 다른 유용한 정보가 저장되어 있는지를 분석할 계획이다. 또한 어떤 프로그램으로부터의 로그인 지 판단할 수 있는 방법에 대한 연구를 진행할 것이다.
디지털 포렌식 관점의 Windows Transactional NTFS(TxF), Transactional Registry(TxR) 기능 연구 11 참고문헌 1. Window Vista TxR http://bartdesmet.net/blogs/bart/archive/2006/12/15 /Windows-Vista-_2D00_-Introducing-TxR-in-C_2300_-_2800_Part-2_2900_.aspx 2. MicroSoft MSDN, Transactional NTFS, http://msdn.microsoft.com /ko-kr/magazine/cc163388.aspx 3. MicroSoft MSDN, Kernel Transaction Manager Functions, http://msdn. microsoft.com/en-us/library/aa366273(vs.85).aspx 4. MicroSoft MSDN, File Management Functions, http://msdn.microsoft.com /en-us/library/aa364232(vs.85).aspx 5. MicroSoft MSDN, Registry http://msdn.microsoft.com/en-us/library/ms724875 (VS.85).aspx 6. Wikipedia, Transaction, http://en.wikipedia.org/wiki/database_transaction
著 者 紹 介 유 병 영(Byeongyeong Yoo) 2009년 2월: 상명대학교 컴퓨터과학 학사 2009년 3월~현재: 고려대학교 정보경영공학전문대학원 석사과정 <관심분야> 디지털 포렌식, 보안 USB 방 제 완(Jewan Bang) 2007년 2월: 한세대학교 정보통신공학 학사 2007년 3월~현재: 고려대학교 정보경영공학전문대학원 석박사통합과정 <관심분야> 디지털 포렌식, 소프트웨어 역공학 분석, 임베디드 시스템 이 상 진(Sangjin Lee) 1987년 2월: 고려대학교 학사 졸업 1989년 2월: 고려대학교 석사 졸업 1994년 8월: 고려대학교 박사 졸업 1989년 10월~1999년 2월: ETRI 연구원 역임 1999년 10월~현재: 고려대학교 정교수 1997년 12월: 국가안전기획부장 표창 <관심분야> 디지털 포렌식, 모바일 포렌식, 심층 암호, 해쉬 함수