증거와 해석¶
디지털 포렌식은 단순히 필드를 읽는 작업이 아닙니다. 해당 필드가 어떤 관찰을 뒷받침하는지, 그 뒷받침이 얼마나 강력한지, 그리고 무엇이 악의 없이 같은 관찰 결과를 만들어 낼 수 있는지를 판단하는 작업입니다.
유용한 네 가지 증거 범주¶
| 범주 | 의미 | 예시 |
|---|---|---|
| 존재 | Windows가 해당 경로나 파일을 알고 있었음 | Amcache 파일 레코드, ShimCache 항목, $MFT 레코드 |
| 실행 | Windows가 프로그램 실행 또는 실행 상태를 기록함 | Prefetch 실행 시간, 지원되는 ShimCache 실행 플래그 |
| 사용자 상호 작용 | 사용자 또는 애플리케이션이 항목을 참조하거나 열었음 | RecentDocs, Jump List, Recent 폴더의 LNK |
| 시스템 활동 | Windows가 리소스 사용 또는 구성을 기록함 | SRUM 카운터, 서비스 구성, TaskCache 동작 |
하나의 아티팩트가 둘 이상의 범주를 뒷받침할 수 있지만, 절대로 자동으로 상위 범주로 격상해서는 안 됩니다.
예를 들어 의심스러운 경로를 가진 Amcache 항목은 존재를 뒷받침합니다. 일치하는 Prefetch 실행 시간이
있으면 더 강력한 실행 증거가 추가됩니다. USN 생성 레코드와 $MFT 경로는 파일이 디스크에 있었음을
보여 줄 수 있으며, Defender 격리 데이터는 파일이 사라진 이유를 설명할 수 있습니다.
타임스탬프는 진술일 뿐, 보편적인 진실이 아닙니다¶
각 타임스탬프가 무엇에 의해 생겼는지 확인하십시오.
$STANDARD_INFORMATION과$FILE_NAME의 시간은 NTFS 메타데이터를 나타내며 서로 다를 수 있습니다.- Prefetch 실행 시간은 기록된 실행을 나타내지만, 최근 실행 시간만 남아 있습니다.
- ShimCache의 시간은 일반적으로 캐시된 파일의 마지막 수정 시간이며, 실행 시간이 아닙니다.
- 레지스트리 키의 마지막 쓰기 시간은 개별 값이 아니라 키 전체에 적용됩니다.
- RecentDocs는 키의 시간을 가장 최근 항목에 부여합니다. 오래된 항목에는 순서는 있지만 대개 열린 시간이 없습니다.
- SRUM 타임스탬프는 정확한 네트워크 작업이 아니라 집계 구간을 나타내는 경우가 많습니다.
분석 중에는 UTC를 사용하고, 가능하면 원래 값을 보존하며, 모든 변환 내용을 문서화하십시오.
긍정적 증거와 부정적 증거¶
잘 알려진 레코드가 존재한다는 것은 강력한 긍정적 증거가 될 수 있습니다. 반면 부재는 대개 더 약한 증거입니다. 아티팩트는 순환되어 덮어쓰이고, 캐시에는 상한이 있으며, 수집이 불완전할 수 있고, 설정이 다양하며, 정리 도구도 존재하기 때문입니다. "발생하지 않았다" 대신 "수집된 아티팩트에서 관찰되지 않았다"라고 표현하십시오.
확증 단계¶
- 원본 파일과 수집 경로를 검증하십시오.
- 파서가 관련 손상이나 적용되지 않은 트랜잭션 로그를 보고하지 않았는지 확인하십시오.
- 아티팩트 페이지에 따라 필드를 해석하십시오.
- 같은 행위를 뒷받침하는 독립적인 아티팩트를 찾으십시오.
- 가능하면 이벤트 로그, 네트워크 텔레메트리, 메모리 또는 파일 내용을 확인하십시오.
- 정확한 Juntei 버전, 명령어, 필터 및 원본 해시를 기록하십시오.
증거의 강도에 맞게 결론을 작성하십시오
"공격자가 정확히 10:02:11Z에 악성 코드를 실행했다"보다 "Prefetch는 tool.exe가 10:02:11Z에
실행되었음을 기록하고 있다"라고 표현하십시오. 앞의 진술은 Prefetch만으로는 입증할 수 없는
신원과 의도를 덧붙이고 있습니다.