Recent / LNK — 최근 문서와 바로가기
Windows는 열어 본 파일의 바로가기(LNK)와 점프리스트를 자동 생성한다. 원본이 삭제되어도 LNK의 대상 경로가 남는다. LNK는 삭제된 파일을 이름으로 기억한다.
왜 중요한가
치트 파일을 삭제해도 Windows 셸이 만든 LNK에 원본 경로·이름·볼륨 시리얼이 남을 수 있다. 점프리스트도 마찬가지이고, Recent 폴더에는 사용자가 열어 본 파일의 짧은 이력이 자동으로 쌓인다.
Prefetch가 실행을, USN이 파일 변경을 보여 준다면, LNK는 셸이 파일을 인지했다는 사실을 보여 준다. 세 축이 같은 이름을 가리킬 때 증거 강도가 높아진다. 반대로 이 축의 약점도 명확하다 — LNK는 "사용자가 파일을 열었다"는 기록이지 "실행했다"는 기록이 아니다. 실행 주장은 PF·BAM이 담당한다.
무엇인가
| 항목 | 설명 |
|---|---|
| Recent 경로 | %AppData%\Microsoft\Windows\Recent\ = C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Recent (Win+R → recent) |
| 점프리스트 | Recent 하위 AutomaticDestinations\(자동)·CustomDestinations\(고정). 파서는 JLECmd(GUI는 JumpList Explorer) |
| MRU 레지스트리 | RecentDocs, ComDlg32\OpenSavePidlMRU 등(버전 의존) |
| Office MRU | NTUSER.DAT의 Software\Microsoft\Office\<버전>\<앱> 아래 File MRU(최근 연 파일)·Place MRU(열기·저장에 쓴 폴더)·User MRU(온라인 Microsoft 계정으로 쓴 항목). 항목마다 마지막으로 연 시각이 있고, 이미 지워졌거나 이동식 드라이브에 있던 파일도 남는다 |
| ShellBags | 탐색기로 연 폴더의 보기 설정 기록. NTUSER.DAT의 Software\Microsoft\Windows\Shell\BagMRU·Bags와 UsrClass.dat의 Local Settings\Software\Microsoft\Windows\Shell\BagMRU·Bags에 있다. 삭제된 폴더, 이동식 장치와 네트워크 공유의 폴더도 남는다. 파서는 SBECmd(GUI는 ShellBags Explorer) |
| LNK 내부 필드 | 대상 경로, 대상 생성·수정·접근 시각, 볼륨 시리얼·드라이브 유형, 파일 크기·속성 |
| 한계 | 모든 실행이 LNK를 만들지는 않는다. 명령줄·스케줄·서비스 실행은 LNK가 없다 |
파일이 삭제돼 LNK가 "깨져" 있어도 이 필드들은 그대로 남아, 삭제된 파일의 이름·위치·크기·당시 시각을 복원할 수 있다.
SS에서 어떻게 쓰나
- T+22에 Recent 폴더를 날짜순 정렬로 연다.
- 스캐너 히트·PF 이름과 LNK 대상 경로를 대조한다.
- 의심 LNK가 있으면 파서(LECmd 등)로 상세를 추출한다. 대상 경로, 대상 타임스탬프, 볼륨 시리얼을 읽는다.
- 점프리스트를 JLECmd로 파싱해 사용자가 부정하는 도구의 흔적을 확인한다.
- ShellBags를 SBECmd로 뽑아 치트 폴더, 삭제된 폴더, USB 같은 이동식 장치의 경로를 탐색기로 연 적이 있는지 본다. 폴더를 연 기록이므로 실행 주장은 PF·BAM으로 교차한다.
- Office MRU에서 제보와 관련된 파일을 연 기록을 보조로 확인한다.
.jar.lnk처럼 비-exe 대상을 놓치지 않는다. JAR 계열 고스트 클라이언트는.exe중심 검사에서 놓치기 쉽다.- Recent가 와이프된 경우 R3-AF로 넘긴다.
우회 기법과 남는 흔적
| 기법 | 공격자가 하는 일 | 남는 흔적 |
|---|---|---|
| Recent·LNK 일괄 삭제 | 최근 항목 비우기 또는 클리너로 Recent를 정리한다 | 다른 활동은 계속됐는데 Recent만 비어 있으면 이상이다. USN에 .lnk FILE_DELETE가 남고, 클리너 자체의 .pf·BAM 기록이 남는다 |
| Recent 상위 폴더 ACL 거부 | %AppData%\Microsoft\Windows 폴더에 deny ACL을 걸거나 "최근 문서" 정책을 켜 shell:recent 기록 자체를 무력화한다 | 해당 폴더의 비정상 ACL(모든 사용자 접근 차단)과 정책 레지스트리 값이 남는다. 검사자는 Recent 상위 폴더의 보안 탭에서 Deny 항목을 확인하고, 기록이 끊긴 시점을 다른 축과 대조한다 |
| 활동 기록 설정 끄기 | Windows 설정의 개인정보·활동 기록 옵션을 꺼 LNK·최근 항목이 새로 쌓이지 않게 한다 | 꺼진 설정 상태(레지스트리)와 기록이 갑자기 끊긴 시점이 남는다. 검사자는 관련 정책·개인정보 값의 상태를 확인하고, 기록 공백의 시작 시각을 세션 타임라인과 대조한다 |
| 파일 교체 후 LNK 방치 | 치트를 지우고 같은 자리에 정상 파일을 두어도 기존 LNK는 그대로다 | 깨진 LNK가 삭제된 대상의 이름·경로·볼륨 시리얼을 그대로 보존한다. LNK의 대상 타임스탬프와 현재 파일의 타임스탬프가 어긋난다 |
| MRU 레지스트리 정리 | RecentDocs·OpenSavePidlMRU·RunMRU 값을 regedit·reg delete·클리너로 지운다 | reg.exe·regedit.exe의 실행 기록이 PF·BAM에 남고, Registry Explorer로 삭제 값 복원이 가능하다. 활동은 있었는데 RunMRU·RecentDocs가 비어 있거나 새것만 남은 패턴 자체가 리드다 |
| 동기화 폴더 경유 | OneDrive 같은 동기화 폴더에 두고 다른 기기에서 삭제해 로컬 흔적을 정리한다 | 동기화 폴더의 최근 변경 내역과 USN의 클라이언트 생성·삭제 레코드가 남는다 |
| LNK가 안 생기는 실행 | Start-Process·wmic·스케줄 작업·서비스로 실행해 셸 기록 자체를 만들지 않는다. wmic는 Windows 11 23H2·24H2에서 기본 비활성(선택 기능, 2024), 25H2로 업그레이드할 때 제거(2025), 2026-08 미리 보기 업데이트부터 지원 중인 Windows 11에서 제거돼 선택 기능으로도 받을 수 없다. 이런 빌드에서 wmic 실행 흔적이 나오면 따로 설치한 경위를 확인한다 | LNK는 없지만 Prefetch·BAM에는 실행이 남는다. "LNK 없음"은 "안 열었다"일 뿐 "안 실행했다"가 아니다 |
정상 vs 이상
| 구분 | 정상 | 이상 |
|---|---|---|
| LNK 대상 | 문서, 게임, 브라우저 다운로드 | 의심 경로, 치트 이름, 삭제된 대상 |
| 점프리스트 | 자주 쓰는 앱 | 사용자가 부정하는 도구 |
| Recent 상태 | 활동 이력에 비례 | 와이프됨(다른 활동은 계속) |
| 대상 파일 | 존재 | LNK는 있으나 대상이 삭제됨(깨진 LNK) |
| 시각 | LNK 생성이 대상 사용과 정합 | LNK는 제보 시간대인데 대상·실행 증거는 그 외 |
오탐
- 클라우드 싱크 플레이스홀더: OneDrive 등이 LNK를 생성한다.
- 게임 런처: Steam 등이 다수의 LNK를 만든다.
- 공유 계정: 다른 사용자의 활동일 수 있다.
- 설치·업데이트 과정이 만드는 LNK: 인스톨러가 바로가기를 뿌린다.
교차 검증
| 교차 카드 | 확인 내용 |
|---|---|
| R3-USN | 대상 경로의 삭제 기록, .lnk 자체의 삭제 기록 |
| R3-PF | 대상 exe의 실행 기록 |
| R3-BAM | 대상의 실행 시각 교차 |
| R3-AF | Recent 와이프 여부 |
브라우저 다운로드 이력은 약한 보조로만 쓰고, 과도하게 의미를 부여하지 않는다.
증거 캡처
- Recent 폴더 날짜순 정렬 스크린샷
- 의심 LNK의 파서 출력(대상 경로, 대상 타임스탬프, 볼륨 시리얼, 크기)
- 점프리스트 관련 엔트리(JLECmd 출력)
- 깨진 LNK 목록(대상이 없는 것)과 대응 USN 삭제 레코드
- ShellBags 파서 출력(SBECmd CSV)의 의심 폴더·삭제된 폴더·이동식 장치 경로
- Office MRU 의심 항목과 마지막으로 연 시각
모두 10-recent-lnk/에 둔다.
흔한 실수
- LNK 하나로 Confirmed를 내린다. 대상 경로의 실행 증거를 교차해야 한다.
- 깨진 LNK를 "대상이 없어 무의미"하다고 버린다. 깨진 LNK야말로 삭제된 파일의 이름을 기억한다.
- 브라우저 다운로드 이력만으로 판정에 넣는다.
- 공유 계정 가능성을 무시한다.
- "LNK가 없으니 열지도 실행도 안 했다"로 읽는다. 명령줄 실행은 LNK를 남기지 않는다.
Community. shell:recent를 무력화하려고 상위 폴더에 ACL을 거는 우회와, 개인정보 설정을 꺼 기록을 끊는 우회가 반복 보고된다. 둘 다 기록이 없어지는 대신 "기록이 끊긴 시점"과 비정상 ACL이라는 새 흔적을 남기므로, 검사자는 설정 상태와 폴더 보안 탭을 확인한다.
Sources
- MS 환경 변수 목록 —
CSIDL_RECENT=...\AppData\Roaming\Microsoft\Windows\Recent,APPDATA=...\AppData\Roaming - Magnet: Windows ShellBags 포렌식(BagMRU·Bags 위치, 삭제·이동식 장치 폴더)
- Cyber Triage: Office MRU 레지스트리 아티팩트
- Eric Zimmerman 도구 목록(JLECmd·SBECmd·ShellBags Explorer·LECmd)
- MS KB5067470: WMIC 제거 일정
Next
- 파일 신뢰 검증 → Signature / Path
- 프로세스 확인 → Process / Module
