Step 15. ★ 프로젝트: 부팅 후 무슨 일이? — 자동 실행 지점 총조사
Level 0 — 컴퓨터 조작과 구조의 이해 | 난이도 ★★★☆☆ | 예상 소요 시간 3~4시간
전제: Step 14 완료. 윈도우 파워쉘에서 진행합니다. Step 11~13에서 배운 조사 기술의 종합 프로젝트입니다. 오늘도 조회만 합니다 — 발견한 것을 삭제하거나 변경하지 않습니다.
- 준비물: 윈도우 PC, 파워쉘, 메모장. 새로 설치하는 것은 없습니다.
- 주의: 오늘의 규칙은 단 하나, 보기만 하기입니다. 수상해 보이는 항목을 발견해도 삭제하지 않습니다 — 이유는 벽 5에서 다룹니다. 결과물은 "내 컴퓨터의 자동 실행 지점 목록"이라는 문서 하나로, 실제 보안 감사의 산출물과 같은 종류입니다.
컴퓨터 전원을 누르고 화면이 뜰 때까지의 몇 분 사이, 컴퓨터 안에서는 수십 개의 프로그램이 자동으로 출근합니다. 백신, 클라우드 동기화, 사운드 드라이버… 전부 "부팅 시 자동 실행" 명단에 등록된 것들입니다. 그런데 이 명단에 초대받지 않은 손님이 끼어 있을 수 있습니다. 악성코드가 재부팅을 살아남으려면 어딘가에 등록해야 하고, 그 등록 장소는 정해져 있습니다. 오늘은 그 장소들을 4종 세트로 전부 돌아보는 총조사입니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 영속성(persistence)이 무엇인지, 공격자가 왜 "원래 있는 문"을 이용하는지 설명한다
- 자동 실행 지점 4종(Run 키, 시작 폴드, 예약 작업, 자동 서비스)을 열거하고 각각 조회한다
- 수상한 항목의 외형적 특징 3가지로 1차 감별을 한다
- 조회 결과를 스크립트로 모아 하나의 보고서 문서로 만든다
- 이 문서를 "베이스라인"으로 써서 나중 비교의 기준점으로 삼는 방법을 안다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 파워쉘 5.1 + 실행 창(Win + R) + 메모장 |
| 오늘의 명령어 | shell:startup(시작 폴드 열기), Get-ScheduledTask(예약 작업), 복습: Get-ItemProperty ...\Run, Get-Service, Out-File -Append |
| 필요한 개념 | 영속성(Persistence), 자동 실행 지점 4종, 베이스라인 문서, 수상한 외형 3대 특징 |
| 오늘의 산출물 | autoruns-report.txt — 내 컴퓨터의 자동 실행 명단 문서 |
2-1. 영속성(Persistence) — 살아남기의 기술
공격자가 컴퓨터를 한 번 장악한 뒤, 재부팅해도 다시 실행되도록 심어 두는 장치들을 통틀어 영속성(persistence) 기법이라 합니다. Step 11에서 "지속성"으로 만났던 것의 정식 이름입니다.
여기서 중요한 통찰 하나: 공격자는 새로운 문을 만들지 않고, 원래 있는 문을 이용합니다. 윈도우에는 정당한 자동 실행 장치가 원래 여러 개 있고(업데이트, 백신 등이 쓰려고), 악성코드는 그 정당한 문에 섞여 들어갑니다. 숨기 가장 좋은 곳이 "정상인 척할 수 있는 곳"이기 때문입니다.
그래서 수비의 논리도 단순합니다: 모든 문의 명단을 뽑고, 각 항목에게 "너 누구니?"라고 묻는다. 오늘 그걸 합니다.
2-2. 네 개의 문 — 오늘의 조사 지도
| # | 지점 | 역할 | 조회 방법 |
|---|---|---|---|
| 1 | 레지스트리 Run 키 | 로그인 시 프로그램 실행 | Get-ItemProperty (Step 11) |
| 2 | 시작 폴드 | 이 폴드의 파일이 로그인 시 실행 | shell:startup |
| 3 | 예약 작업 | 정해진 조건(시간/부팅)에 실행 | Get-ScheduledTask |
| 4 | 자동 시작 서비스 | 부팅 시 백그라운드 상주 | Get-Service (Step 13) |
1번과 4번은 이미 배웠습니다. 오늘 새로운 것은 2번(시작 폴드)과 3번(예약 작업)이고, 마지막에 넷을 하나의 문서로 합칩니다.
2-3. 수상한 것의 생김새 — 미리 배우는 감별법
조사 전에 "뭘 수상하게 여기는가"를 정해 둡시다:
- 이름이 무작위 (
xkqj2.exe,a7f.tmp) — 정상 프로그램은 이름이 있습니다 - 경로가 임시 폴드 (
Temp,AppData\Local\Temp) — 정상 설치는 Program Files로 갑니다 - 아는 프로그램인데 위치가 다름 (
C:\Windows\Temp\chrome.exe) — 이름 도용 의심
지금 여러분 컴퓨터에서는 아마 하나도 안 나올 겁니다. 좋은 겁니다 — "전부 정상"인 목록을 한 번 만들어 두면, 그게 평생 쓸 비교 기준(베이스라인)이 됩니다.
3. 따라 하기
3-1. 첫 번째 문 — Run 키 (복습 + 확장)
Step 11에서 배운 것을 이번엔 두 영역 모두로:
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"
복습 포인트: 위는 현재 사용자, 아래는 컴퓨터 전체의 로그인 자동 실행입니다. 악성코드는 관리자 권한을 얻으면 아래쪽을 선호합니다. 결과를 메모하세요 — 오늘 문서의 첫 페이지입니다.
3-2. 두 번째 문 — 시작 폴드
이번엔 파일 탐색기로 가는 물리적 장소입니다:
Win + R(실행 창 열기)shell:startup입력 → 확인- 폴드가 열립니다 — 여기 있는 파일/바로가기는 로그인할 때 자동 실행됩니다
파워쉘로도 확인할 수 있습니다:
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
Name
----
Python Viewer Keeper.lnk
Python Viewer.lnk
Synology Drive Client.lnk
(2026-09-09 실측. 비어 있는 컴퓨터도 많습니다 — 비어 있으면 그게 정상입니다. 실측 컴퓨터에는 NAS 동기화 프로그램과 개발 도구의 바로가기가 있었습니다.)
왜 공격자가 좋아하는가: 레지스트리를 안 건드리고 파일 하나만 복사해 넣으면 끝이라서. 간단한 만큼 오래된 수법이지만 지금도 씁니다.
예측해 보기: 이 폴드에 메모장 바로가기를 넣으면 어떻게 될까요? (정답: 다음 로그인 때 메모장이 저절로 열립니다. 이건 안전한 실험이니 해보고 싶다면 — 메모장 바로가기를 복사해 넣고, 로그오프했다 다시 로그인해 보세요. 확인 후에는 다시 꺼내 두면 됩니다. "등록하면 자동 실행된다"를 온몸으로 이해하는 1분 실험입니다.)
3-3. 세 번째 문 — 예약 작업
윈도우에는 작업 스케줄러가 있습니다 — "매주 화요일에", "부팅 때", "유휴 상태가 되면" 같은 조건으로 프로그램을 실행하는 알람 시계 시스템입니다:
Get-ScheduledTask | Where-Object State -eq 'Ready' |
Where-Object TaskPath -eq '\' | Select-Object TaskName
TaskName
--------
Anyang52911-HomeNAS-Backup-4h
Codex Restore AnYang Share
Codex-HomeNAS-Root-Hygiene
NVIDIA app SelfUpdate_{B2FE1952-0186-46C3-BAEC-A80AA35AC5B8}
ODIS Cache Auto Cleanup
OneDrive Reporting Task-S-1-5-21-1312351761-2503608414-2748900299-1001
OneDrive Standalone Update Task-S-1-5-21-1312351761-2503608414-2748900299-1001
OneDrive Startup Task-S-1-5-21-1312351761-2503608414-2748900299-1001
Run LG Live Wallpaper
(2026-09-09 실측. Ready 상태 전체는 171개였는데, 그중 최상층(\) 작업만 추린 것입니다.)
출력 읽는 법: Ready = 조건이 되면 실행될 예정으로 대기 중. TaskPath가 \Microsoft\Windows\...인 것들(실측에서 171개 중 대부분)은 윈도우 기본 작업으로 대부분 정상이라, 최상층(\)의 것들부터 봅니다.
실측 목록으로 감별 연습을 해 봅시다. NAS 백업과 개발 도구 작업은 이름이 읽히니 정상 판별이 쉽습니다. 그런데 NVIDIA app SelfUpdate_{B2FE1952-...}는 어떻습니까? 무작위처럼 보이는 괄호 문자열 — 2-3절의 의심 기준에 걸립니다. 검색해 보면 NVIDIA 그래픽 드라이버의 자동 업데이트 작업으로 판명됩니다. "수상한 외형 = 악성"이 아니라 "수상한 외형 = 확인 대상" — 실제 컴퓨터에서 이 원칙이 바로 증명됐습니다.
왜 하는가: 예약 작업은 Run 키보다 덜 알려져서, 공격자가 "조금 더 숨고 싶을 때" 쓰는 장소입니다. 요즘 침해 보고서에 자주 등장하는 지점입니다.
3-4. 네 번째 문 — 자동 시작 서비스
Step 13 복습:
Get-Service | Where-Object StartType -eq Automatic | Measure-Object | Select-Object Count
Count
-----
105
(2026-09-09 실측.)
부팅 때 자동으로 켜지는 서비스가 105개입니다. 앞부분을 보면:
Get-Service | Where-Object StartType -eq Automatic | Select-Object Name, DisplayName -First 8
Name DisplayName
---- -----------
AdskLicensingService Autodesk Desktop Licensing Service
ALUpdateService ESTsoft ALTools Update Service
AppXSvc AppX Deployment Service (AppXSVC)
AudioEndpointBuilder Windows Audio Endpoint Builder
Audiosrv Windows Audio
BFE Base Filtering Engine
BITS Background Intelligent Transfer Service
...
읽는 법: 대부분 윈도우 구성 요소와 설치한 프로그램의 도우미들입니다. ALUpdateService처럼 이름만 봐서는 모르는 것은 DisplayName(보기용 이름)으로 힌트를 얻고, 그래도 모르면 검색합니다.
수상한 것의 모습: DisplayName은 그럴듯한데 Name이 이상하거나, 정체를 검색해도 안 나오는 것. 서비스는 사용자 눈에 안 보이고 상주하므로 숨기 좋은 장소입니다.
3-5. 네 개의 문을 하나의 문서로
이제 수집물을 합칩니다. 아래 스크립트를 메모장에 붙여 넣고 autoruns-report.ps1로 저장하세요 — 인코딩은 반드시 "UTF-8(BOM 포함)"입니다 (한글이 들어간 스크립트의 필수 조건, Step 9 복습):
# 내 컴퓨터 자동 실행 지점 총조사
$out = "autoruns-report.txt"
"=== 자동 실행 지점 조사 보고서 ===" | Out-File $out
"조사 시각: $(Get-Date)" | Out-File $out -Append
"`n[1] 레지스트리 Run 키 (현재 사용자)" | Out-File $out -Append
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" |
Out-File $out -Append
"`n[2] 시작 폴드" | Out-File $out -Append
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup" |
Out-File $out -Append
"`n[3] 예약 작업 (Ready 상태)" | Out-File $out -Append
Get-ScheduledTask | Where-Object State -eq 'Ready' |
Select-Object TaskName, TaskPath | Out-File $out -Append
"`n[4] 자동 시작 서비스" | Out-File $out -Append
Get-Service | Where-Object StartType -eq Automatic |
Select-Object Name, DisplayName, Status | Out-File $out -Append
"보고서 완성: $out"
실행합니다:
.\autoruns-report.ps1
보고서 완성: autoruns-report.txt
(2026-09-09 실측. 생성된 보고서는 332줄이었습니다.)
구조 읽기: 전부 아는 조각들입니다 — 변수, Get-Date, Out-File -Append(Step 5), 필터링(Step 8), 오늘의 조회 명령 넷. "`n"은 "빈 줄 하나 넣어 줘"라는 특수 문자입니다.
왜 이게 보안과 관련되는가: 이 보고서가 바로 베이스라인 문서입니다. 한 달 뒤에 다시 뽑아 오늘 것과 비교해 보세요. 새로 생긴 줄은 "그동안 내 컴퓨터에 설치된 것"의 목록이고 — 여러분이 설치한 기억이 없는 줄이 있다면, 그것이 조사의 시작점입니다. 비교 대상이 없으면 "이상한 것"도 평범해 보이는 법입니다. 오늘 문서가 그 기준점입니다.
4. 미션과 연습문제
미션 — 보고서에 감별 코멘트 달기
완성된 보고서를 업그레이드합시다:
autoruns-report.txt를 메모장으로 열기- 각 섹션의 항목을 훑으며, 본인이 아는 것에는 줄 끝에
← 정상(앎)표시 - 모르는 것에는
← 확인 필요표시 후, 이름을 검색해 정체를 조사 (대부분 윈도우 기본 구성이나 설치한 프로그램으로 판명될 겁니다 — 그게 정상입니다) - 마지막 줄에 소감 한 줄: "총 N개 지점 중 모르는 것 M개, 조사 결과 전부 정상 판명" 같은 식으로
연습문제
문제 1. 영속성(persistence)이란 무엇이며, 공격자가 새로운 장치를 만들지 않고 윈도우 기본 장치를 이용하는 이유는?
문제 2. 자동 실행 지점 4종을 열거하고, 각각이 "언제" 실행되는지 말해 보세요.
문제 3. 예약 작업 171개 중 어디서부터 보는 것이 효율적인가요? 그 이유는?
문제 4. 한 달 전과 지금의 보고서를 비교했더니 모르는 줄이 하나 새로 생겼습니다. 다음 행동 순서를 말해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
메모장 작업의 예 (실측 컴퓨터의 시작 폴드 섹션):
[2] 시작 폴드
Python Viewer Keeper.lnk ← 정상(앎): 개발 도구
Synology Drive Client.lnk ← 정상(앎): NAS 동기화, 내가 설치
예약 작업 섹션:
NVIDIA app SelfUpdate_{...} ← 확인 필요 → 검색 결과 NVIDIA 업데이터로 판명, 정상
OneDrive Startup Task-S-1-5-… ← 정상(앎): OneDrive. 긴 숫자는 내 계정의 고유 번호(SID)
Run LG Live Wallpaper ← 정상(앎): 모니터 부속 프로그램
마지막 줄 소감의 예: "총 4개 지점 280여 개 항목 중 모르는 것 12개, 조사 결과 전부 정상 판명."
검증하는 법: "확인 필요"가 전부 정체 판명되면 완료입니다. 하나라도 정체를 알 수 없는 것이 남으면, 그 이름 + "무엇"으로 검색하는 것까지가 실제 조사 절차입니다. 모르는 것이 많아도 좌절하지 마세요 — 171개의 예약 작업을 전부 아는 사람은 윈도우 개발자도 아닙니다. "모르는 것에 표시하고, 확인하는 절차를 돌렸다"는 사실 자체가 감사의 산출물입니다.
연습문제 해답
문제 1 해답. 영속성은 공격자가 장악한 컴퓨터에서 재부팅 후에도 다시 실행되도록 심어 두는 장치들을 말합니다. 윈도우 기본 장치를 이용하는 이유는 "정상인 척할 수 있는 곳"이 숨기에 가장 좋기 때문입니다 — 새로운 장치는 그 존재 자체가 흔적이 되지만, 기본 장치에 섞이면 정상 항목들 사이에 묻힙니다.
문제 2 해답. ① 레지스트리 Run 키 — 로그인 시, ② 시작 폴드 — 로그인 시, ③ 예약 작업 — 정해진 조건(시간, 부팅, 유휴 상태 등)이 충족될 때, ④ 자동 시작 서비스 — 부팅 시 백그라운드 상주.
문제 3 해답. 최상층(TaskPath가 \)의 작업부터 봅니다. \Microsoft\Windows\... 아래의 작업들은 윈도우 기본 구성으로 대부분 정상이라 우선순위가 낮고, 최상층은 사용자나 프로그램이 등록한 것들이라 "누가 등록했나"를 물어볼 가치가 큽니다. 실측에서도 171개 중 최상층은 9개뿐이라 양이 확 줄었습니다.
문제 4 해답. "발견 → 삭제"가 아니라 "발견 → 조사 → 판단" 순서입니다. ① 이름과 경로를 기록하고, ② 경로가 Temp 계열 등 이상한 위치인지 확인, ③ 이름으로 검색해 정체 조사, ④ Step 13의 부모 추적으로 누가 실행시키는지 확인, ⑤ 그래도 의심스러우면 백신 전체 검사. 설명 가능하면 정상으로 기록하고, 설명 불가능하면 그때 대응을 시작합니다.
완료 기준 체크리스트
- [ ] 영속성(persistence)이 무엇인지 설명할 수 있다
- [ ] 자동 실행 지점 4종을 열거할 수 있다
- [ ] 시작 폴드를
shell:startup으로 열 수 있다 - [ ] 예약 작업을 조회하고 최상층부터 보는 우선순위를 안다
- [ ] 수상한 항목의 외형적 특징 3가지를 말할 수 있다
- [ ] 수상한 외형이 곧 악성은 아님을(NVIDIA 사례) 설명할 수 있다
- [ ] 미션: autoruns-report.txt에 감별 코멘트까지 완성했다
6. 흔한 실수와 해결
벽 1. 결과가 너무 많아서 어디서 손대야 할지 모르겠다
증상: 예약 작업만 171개, 서비스도 105개 (2026-09-09 실측).
원인: 정상입니다 — 윈도우는 원래 많은 자동 작업이 등록되어 있습니다.
해결: 전부 이해하는 게 아니라 지점이 어디 어디 있는지 아는 것이 목표입니다. \Microsoft\ 아래 것들은 일단 정상 취급하고, 최상층의 낯선 것부터 보는 식으로 우선순위를 매기면 양이 확 줍니다.
벽 2. Get-ScheduledTask에서 오류가 난다
증상: 빨간 오류 메시지.
원인: 일부 시스템 작업은 일반 권한으로 조회가 제한될 수 있습니다.
해결: 관리자 파워쉘(Step 12)에서 실행하세요. 그래도 일부가 안 보일 수 있는데, 그건 권한의 문제지 여러분의 실수가 아닙니다.
벽 3. 시작 폴드 경로를 외우기 어렵다
증상: 긴 경로(AppData\Roaming\...)를 치기 어렵습니다.
원인: 외울 필요가 없습니다.
해결: Win + R → shell:startup이 공식 단축키입니다. 스크립트 안에서는 $env:APPDATA가 사용자 이름과 무관하게 경로를 알아서 채워 줍니다 — 3-5절 스크립트가 다른 컴퓨터에서도 그대로 동작하는 비결입니다.
벽 4. 스크립트를 실행했더니 파싱 오류가 난다
증상: 문자열에 " 종결자가 없습니다 같은 오류.
원인: 한글이 들어간 스크립트를 BOM 없는 UTF-8로 저장했을 때의 전형적 증상입니다 (Step 9 벽 5와 동일한 문제, 2026-09-09 실측 확인).
해결: 메모장에서 다른 이름으로 저장 → 인코딩 "UTF-8(BOM 포함)"으로 다시 저장하세요.
벽 5. "수상한 것"을 발견한 것 같아 불안하다
증상: 모르는 이름의 항목이 있고, 검색해도 정보가 애매합니다.
원인: 이름만으로는 판별이 어려운 경우가 실제로 있습니다.
해결: 삭제하지 마세요. 오늘의 규칙은 조회만입니다. 순서는 ① 파일 경로 확인(Temp·이상한 위치인가) → ② Step 13의 부모 추적으로 누가 실행시키는지 확인 → ③ 그래도 의심스러우면 백신 전체 검사. "발견 → 삭제"가 아니라 "발견 → 조사 → 판단"이 조사관의 순서입니다. 정상 시스템 파일을 지우는 사고가 악성코드보다 컴퓨터를 더 많이 고장 냅니다.
7. 정리
오늘의 핵심 개념
| 개념 | 한 줄 설명 |
|---|---|
| 영속성(persistence) | 재부팅 후에도 살아남기 위한 등록 장치들 |
| 자동 실행 지점 4종 | Run 키 / 시작 폴드 / 예약 작업 / 자동 서비스 |
| 베이스라인 문서 | 평소의 목록 — 나중 비교를 위한 기준점 |
조사 명령 요약
| 지점 | 명령 |
|---|---|
| Run 키 | Get-ItemProperty "HKCU(HKLM):\...\Run" |
| 시작 폴드 | shell:startup / Get-ChildItem ...\Startup |
| 예약 작업 | Get-ScheduledTask | Where-Object State -eq 'Ready' |
| 자동 서비스 | Get-Service | Where-Object StartType -eq Automatic |
명령어보다 중요한 감각
수상한 것의 3대 외형 — ① 이름이 무작위 ② 경로가 Temp 계열 ③ 아는 이름인데 위치가 이상 — 만 기억해도 대부분의 초기 감별이 됩니다. 그리고 오늘 NVIDIA 사례에서 봤듯, 외형은 "확인 대상"을 고를 뿐 판결은 확인 절차가 내립니다.
두 가지를 더 기억해 두세요. 첫째, 보안 업계에는 MITRE ATT&CK라는 유명한 공격 기법 분류표가 있습니다. 그 "영속성(Persistence)" 챕터를 열면 오늘 우리가 돌아본 지점들이 항목 번호와 함께 정리되어 있습니다 — 오늘 여러분은 그 분류표의 한 챕터를 직접 손으로 실습한 겁니다. 둘째, 오늘 조사한 네 곳 말고도 자동 실행 지점은 더 있고, 마이크로소프트의 무료 도구 Autoruns가 전부를 한 화면에 모아 줍니다. 새로운 숨는 장소가 발견되면 공격자가 먼저 쓰고 수비자는 점검 목록에 추가하는 무기 경쟁 속에서, 여러분이 오늘 한 일 — 지점 목록화와 베이스라인 문서 — 이 그 격차를 좁히는 정공법입니다.
보안 일의 절반은 조사이고 나머지 절반은 기록입니다. 오늘 만든 문서를 잘 보관해 두세요. 다음 달에 같은 스크립트를 다시 돌려 비교하는 순간, 이 문서는 베이스라인으로 진짜 일을 시작합니다.
전부 체크되면 Step 15 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.