## 개요 Amcache는 개인적으로 가장 유용한 정보를 많이 담고 있다고 판단되는 아티팩트 중 하나이다. 개인적으로 필자도 수많은 아티팩트 중 하나만 사용해야 한다면 Amcache를 주저없이 고를 것이라 자부할 수 있다. 왜냐하면 다른 아티팩트들은 주 목적이 최적화에 맞추어져 있어 최대 저장 갯수를 초과하게 된다면 가장 오래된 레코드가 삭제되는 방식으로 운영되기 때문이다. 이에 반해 Amcache는 실질적으로 응용 프로그램의 실행에 대한 로그를 남기기 위해 Windows 8 부터 적용된 기능이며 이전 버전에서는 `RecentFileCahce.bcf` 라는 파일이 그 기능을 대체하고 있었다. 로그에 초점이 맞춰져 있는 기능이기 때문에 아티팩트로써 확인할 수 있는 대부분의 요소들을 확인해볼 수 있다. 자세한 내용은 데이터 절에서 자세히 다루겠다. 이러한 특성 때문에 Amcache는 단순히 하나의 아티팩트로 사용되기 보다는 여러 아티팩트를 연결짓는 가교 역할을 하는데 중점을 두어 분석하게 되고, 최종적으로는 사건 전체의 타임라인을 그려내는 데 기여하게 된다. 이런 특성들 때문에 디지털 포렌식 논문 중에서는 Amcache에 관련된 논문이 많다. 하나쯤 읽어보는걸 추천한다! (하단에 넣어놓겠다) ## 경로 경로는 다행스럽게도 Amcache가 출시된 이후인 Windows 8 이상의 모든 윈도우 버전에서 일치한다. 혹여나 경로가 일치하지 않는다면 [“커뮤니티”](https://discord.gg/CDtc5kWWA8)를 통해 문의를 남겨준다면 빠르게 확인한 후 수정하도록 하겠다. ```bash C:\Windows\Appcompat\Programs\Amcache.hve ``` AmCache이전 버전인 RecentFileCache.bcc의 경로는 다음과 같다. ```bash C:\Windows\AppCompat\Programs\Amcache.hve ``` ## 구조 및 데이터 AMcache 에 대해 이야기하기 전에 왜 AMcache(한국어로는 암캐시, 앰캐시 등등…)라 불리는지 알아보도록 하자. AMcache의 AM은 Amorphous Cache의 줄임말이다. 번역하면 무정형 캐시라는 것이다. 무정형이라는 단어 뜻이 생소한 이들을 위해 조금 더 설명하자면, 정해진 틀이 없는 캐시라는 것이다. 이렇게만 이해하면 저장되는 틀이 고정된 구조체나, 형식을 따르지 않겠다고 이해하면 되겠다. 이름에 대한 가벼운 이해만 했는데 벌써 AMcache가 어떤 구조로 데이터를 저장하는지 궁금해 지는 대목이다. 추가로, 개요에서 필자는 분명히 Amcache 아티팩트의 Sub-Category로 레지스트리를 지정해 놓았다. 하지만 일반적인 레지스트리 하이브 파일 (SAM, NTUSER.DAT, SECURITY, SYSTEM)이 아닌 별도의 AMcache.hve 파일 형태로 존재하는데 어떻게 레지스트리로 분류하였는가에 대한 의문일 것이다. 눈치가 빠른 사람이라면 확장자가 `.hve` 임을 통해 유사한 하이브 파일 형태를 가지기 때문이다 라고 대답할 수 있을 것이다. 실제로 레지스트리 하이브 파일과 그 저장 방식이 동일하기 때문에 데이터 구조는 하이브 파일을 다루는 것과 동일하다. 한번 Amcache.hve 파일을 분석하며 자세히 알아보도록 하자. > [!Question] **Amcache.hve를 직접 분석하고 싶은데 파일을 열 수 없어요!** > Amcache.hve 파일을 시스템 권한의 파일이다. 그 이전에 시스템이 수시로 로그를 기록하며 사용하는 파일이므로 일반적으로 파일을 열려고 하는 경우 읽기/쓰기 스레드를 시스템이 보유하고 있어 정상적으로 파일을 복사할 수 없을 것이다. > > 그렇기 때문에 소프트웨어 단이 아닌 하드웨어 단에서 복사하는 프로그램을 통해 복사하거나, WinApi와 같은 low-level 기능을 통해 파일을 복사해야 한다(코딩하라는 뜻이다) > > 여러 방법이 있는데, > - 부팅 중 시스템이 해당 파일을 열고 있지 않을 때 “예약 작업”을 통해 파일을 복사하는 방법 > - 다른 운영체제 시스템에 마운트하여 복사하는 방법 > - Safe Mode로 부팅하여 복사하는 방법 > - 시중에 공개된 코드를 이용하는 방법 > 이 존재한다. > > 개인적으로는 공개된 코드를 이용하는 편이 깔끔하다고 여겨진다. 나머지는 너무 번거롭다. > FTK Imager나 Encase를 이용해서도 복사할 수 있으니 이 방법을 이용하자! > ### 구조 앞서 이야기했듯, Amcache 파일은 레지스트리 하이브 파일 양식을 따른다. 평소에 파일의 구조에 대해 설명할 때는 주로 파일 오프 셋에 따른 Hex 값을 이야기했었는데 Amcache를 비롯한 Registry 파일은 그 Key-Value의 트리 구조에 대해 설명할 예정이다. #### 도구 Registry 하이브 파일에 대한 정확한 이해 없이 하이브 파일 내 구조를 시각화하기 위해서는 파싱/시각화 도구를 이용해야 한다. Amcache의 구조를 파악하는데 있어서 사용할 도구는 REGA이다. 자세한 REGA 사용법은 별도로 숙지한 채로 오도록 하자. ![[Untitled 233.png]] 사진과 같이, 굉장히 많은 키값들이 있다. 오늘은 이들 중 중요한 내용들을 골라서 그 내용을 알아볼 것이다. ### DeviceCensus category : [[OS info]] 펌웨어 정보, 메인보드 제조사 버전 등 여러 하드웨어 정보들을 얻을 수 있는 항목이다. PC의 경우 해당사항이 없겠지만 휴대형 기기인 노트북같은 기기에는 배터리 성능 역시 확인해 볼 수 있다. 확인할 수 있는 정보를 요약해 보았다. - 펌웨어 (메인보드) - 배터리 - 네트워크 어댑터 - 운영체제 - 사용 시간 대역 (e.g. KST) - CPU 정보 - 각종 보안 옵션 (e.g. Shadow Stack, TPM .. ) ### InventoryApplication\[%TYPE%] Category : [[File Execution]] , [[Installed Programs]] 이 유형은 여러 종류가 있다. InventoryApplication 뒤에 여러 타입 값이 오면 다른 종류의 데이터가 존재한다. 하지만 궁극적으로는 특정 실행파일에 대한 정보들을 담고 있기 때문에 종합하게 된다면 그 실행파일에 대한 거의 모든 정보를 얻을 수 있다. `AppV`, `Driver, File`, `Framwork`,`Shortcut` 같은 타입이 존재한다. 우리가 Amcache를 분석하는 가장 큰 이유가 바로 InventoryApplication과 그 유사 항목들이다. 실행한 파일의 시각과, 프로그램의 설치 일자를 확인해 볼 수 있기 때문이다. 그만큼 파일 실행이나 설치에 대한 정보는 디지털 포렌식 분석에 있어서 중대한 사안이다. 각 타입들을 종합하게 되면 다음 리스트와 같은 정보를 얻어낼 수 있다. * 저장된 파일 경로 * 단축 경로 (ShortCut) * File Reference Key * 파일 이름 * 파일 크기 * 파일 처음 실행 시간 * 생성 시간 (C-Time) * 버전 정보 > [!NOTE] Windows 10 version 20H2 (19042.928 build) > 해당 빌드 버전 이후로 AmCache 저장 방식이 변경되었다. 지금 소개하는 방식은 20H2 이후의 방식이고, 그 이전에 나오는 방식은 File, Generic, Orphan, Programs 4가지의 경로로 카테고리를 나누어 내용을 저장했다 간단하게 각 디렉토리에 저장되는 내용을 요약해 보겠다. > > - **File Key** : 볼륨 GUID로 구성, 그 하위의 File ReferenceID를 저장. > 파일 실행 흔적에 대한 정보를 찾아볼 수 있음 > 파일 해시값을 저장해놓고 있음 (sha1) > - **Generic** : ?? > - **Programs** : 설치된 프로그램에 대한 데이터 > - **Orphan** : 볼륨 GUID와 File Reference ID로 구성 ## 결론 Amcache에 대해서 알아보는 시간이었다. 실행 프로그램에 대한 정보로 많이 알려져 있는데, 그것 이외에도 운영체제 및 하드웨어 정보와 이번 글에서는 따로 언급하지 않은 [[LNK file]] 의 내용이 조금씩 녹아들어 있다. 데이터의 양이 그렇게 많지 않으니 직접 Rega나 Amcacheparser 같은 무료 도구들을 이용하여 데이터를 하나하나 살펴보면 느낌이 바로 올 것이다. 프로그램 실행과 관련된 정보는 하나만 알고 있으면 해당 내용이 없을 때 그 단서를 찾기가 힘들기 때문에 반드시 여러개 (3개 이상) 알고 있어야만 한다. [[File Execution]] 값을 확인해서 더 많은 아티팩트를 숙지하길 바란다. ## 참고 자료 1. "[AmCache: The Continuing Evolution of a Key Windows Artifact](https://www.sans.org/reading-room/whitepapers/forensics/amcache-continuing-evolution-key-windows-artifact-37107)" by Harlan Carvey (2016) 2. "[[]]" by Mari DeGrazia (2017) 3. "[Amcache.hve – The New Artifact on the Block](https://www.hecfblog.com/2015/08/amcachehve-new-artifact-on-block.html)" by David Cowen (2015) 4. "[AmCache, SRUM, and SQLite: Windows 10 Forensic Trifecta](https://www.sans.org/reading-room/whitepapers/forensics/amcache-srum-sqlite-windows-10-forensic-trifecta-38392)" by Jared Atkinson and Matt Graeber (2017) 5. "[The Analysis of AmCache.hve: Beyond the Limitations of Windows RECmd](https://www.sciencedirect.com/science/article/pii/S1742287616301185)" by Igor Mikhaylov and Brian Moran (2016)