Step 12. 이벤트 로그 — 윈도우의 블랙박스 읽기
Level 0 — 컴퓨터 조작과 구조의 이해 | 난이도 ★★★☆☆ | 예상 소요 시간 2~3시간
전제: Step 11 완료. 윈도우 파워쉘에서 진행합니다. 오늘은 관리자 권한 파워쉘이 필요합니다 — 여는 법을 챕터 안에서 배웁니다.
- 준비물: 윈도우 PC, 파워쉘(관리자). 3-1절에서 여는 법을 안내합니다.
- 주의: 오늘 실습은 전부 읽기입니다. 로그를 지우거나 바꾸는 명령은 나오지 않습니다. 다만 관리자 권한 창을 처음 쓰는 날이니, "이 권한을 왜 조심해야 하는가"를 함께 배우는 것이 오늘의 숨은 주제입니다.
비행기 사고가 나면 조사관이 제일 먼저 찾는 것이 블랙박스입니다. 윈도우에도 블랙박스가 있습니다 — 이벤트 로그(event log). 로그인, 로그인 실패, 프로그램 실행, 시스템 시작… 윈도우에서 벌어지는 사건이 시간 순으로 기록되는 곳입니다. 침해 사고 조사 보고서의 첫 장에는 거의 항상 "로그인 이벤트 분석"이 나옵니다. 오늘 우리는 그 첫 장을 직접 씁니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 관리자 파워쉘을 열고, 이 권한을 "필요할 때만" 쓰는 이유를 설명한다
Get-WinEvent로 윈도우의 로그 목록과 내용을 조회한다-FilterHashtable로 이벤트 ID 기준 필터링을 한다- 4624(로그인 성공)와 4625(로그인 실패) 기록을 조회하고 그 의미를 해석한다
- 조회 결과를 파일로 저장해 "증거 확보"의 첫 형태를 경험한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 파워쉘 5.1 관리자 모드 (Security 로그는 관리자만 읽을 수 있음) |
| 오늘의 명령어 | Get-WinEvent -LogName ... -MaxEvents N, -FilterHashtable @{LogName='...'; Id=숫자}, | Format-List(한 건 자세히) |
| 필요한 개념 | 로그(log)와 로깅, 이벤트 ID, 감사(audit), 관리자 권한의 의미 |
2-1. 로그 — 윈도우가 자동으로 쓰는 일지
배의 선장은 항해일지를 씁니다: "09:00 출항, 12:00 풍랑, 15:00 입항." 사고가 나면 이 일지로 타임라인을 재구성합니다. 윈도우는 이 일지를 자동으로 씁니다. 우리가 시키지 않아도, 중요한 사건이 일어날 때마다 한 줄씩 기록합니다. 이 시스템을 로깅(logging)이라 하고, 기록 한 줄 한 줄을 이벤트(event)라 합니다.
로그는 종류별로 나뉘는데, 대표적인 것은:
| 로그 이름 | 기록하는 것 |
|---|---|
| Security | 로그인/로그오프, 권한 사용 — 보안의 핵심 (관리자 필요) |
| System | 윈도우 자체 부품(드라이버, 업데이트 등)의 상태 |
| Application | 프로그램들이 남기는 기록 |
이 외에도 수백 개의 전용 로그가 있습니다. 오늘 우리가 볼 것은 Security — "누가 언제 이 문을 통과했나"가 적힌 출입 기록부입니다.
2-2. 이벤트 ID — 사건의 종류 번호
이벤트마다 종류 번호가 붙습니다. 이게 이벤트 ID입니다. 전부 외울 필요는 없고, 오늘은 두 개만 기억하세요:
| 이벤트 ID | 의미 |
|---|---|
| 4624 | 로그인 성공 |
| 4625 | 로그인 실패 |
이 두 숫자가 그리는 그림을 생각해 보세요: 밤 11시부터 4625가 수십 건 찍히다가 11시 20분에 4624 한 건 — 누군가 비밀번호를 계속 틀리다가 결국 들어왔다. 침해 조사의 가장 고전적인 패턴입니다. 숫자 두 개로 이런 이야기를 읽어낼 수 있습니다.
2-3. 왜 관리자 권한인가 — 로그의 자기 방어
Security 로그는 일반 사용자가 못 읽게 잠겨 있습니다. 이유는 두 가지입니다:
- 로그 내용 자체가 민감 정보 — 누가 언제 로그인했는지는 침입자에게도 유용한 정보입니다
- 공격자가 가장 지우고 싶어하는 것이 로그 — 침입 성공 후 흔적 지우기 1순위이므로, 접근 자체를 높은 권한으로 보호합니다
"가장 중요한 기록일수록 가장 높은 권한으로 지킨다" — 보안의 기본 설계입니다. 오늘 우리는 그 보호를 통과할 정당한 권한(내 컴퓨터의 관리자)을 씁니다.
2-4. 로그는 영원하지 않다 — 보관과 덮어쓰기
로그는 무한정 쌓이지 않습니다. 용량 한계가 있어서 가득 차면 오래된 것부터 덮어씁니다. 개인 컴퓨터는 보통 몇 주치가 남는 정도이고, 회사는 규정에 따라 따로 보관합니다(법적 보관 의무가 있는 업종도 있습니다).
그래서 침해 조사는 "빨리 시작할수록 유리"합니다 — 시간이 지나면 증거가 스스로 지워지니까요. 실제 사고 대응 매뉴얼의 첫 지시 중 하나가 "로그를 즉시 별도 위치에 복사해 확보하라"입니다. 오늘 배우는 Out-File 저장이 그 행동의 축소판입니다. 그리고 포렌식의 대원칙도 기억해 두세요: 증거는 원본을 건드리지 않고 복사본으로 다룬다.
2-5. 감사(audit)라는 관점
"누가 무엇을 했는지 기록하고, 나중에 검토할 수 있게 하는 것"을 감사(audit)라 합니다. 회계 감사처럼, 기록이 있어야 나중에 경위와 책임을 밝힐 수 있습니다. 이벤트 로그는 윈도우의 감사 시스템이고, 오늘 배우는 조회는 그 검토의 첫걸음입니다.
3. 따라 하기
3-1. 관리자 파워쉘 열기
지금까지의 파워쉘과 다른 창을 엽니다:
- 시작 버튼을 우클릭 (또는
Win + X) - 메뉴에서 "터미널(관리자)" 또는 "Windows PowerShell(관리자)" 클릭
- "이 앱이 디바이스를 변경할 수 있도록 허용하시겠어요?" 묻으면 예
확인 방법: 창 제목에 "관리자"가 붙어 있으면 성공입니다.
이 권한에 대하여: 관리자 권한은 "무엇이든 할 수 있는" 힘입니다. 그래서 평소엔 일반 권한으로 쓰다가, 필요할 때만(지금처럼) 여는 것이 원칙입니다. 악성코드가 관리자 권한을 얻으려 발버둥치는 이유도 이 힘 때문입니다. 권한은 필요한 순간에만, 목적을 알고 — 이 습관 자체가 보안입니다.
3-2. 먼저 실패해 보기 — 일반 창에서 Security 로그
관리자 창을 열기 전에, 일반 파워쉘 창에서 이걸 쳐 보세요:
Get-WinEvent -LogName Security -MaxEvents 2
Get-WinEvent : 권한이 없는 작업을 수행하려고 했습니다.
(2026-09-09 일반 권한 창에서 실측. 오류 종류는 UnauthorizedAccessException — 권한 없음 예외입니다.)
왜 일부러 실패하는가: 2-3절의 "로그의 자기 방어"를 문장이 아니라 빨간 오류로 확인하는 것입니다. 같은 명령이 관리자 창에서는 되고 일반 창에서는 막힌다 — 이 대비가 권한의 실체입니다.
3-3. 로그의 전체 풍경 — 어떤 로그가 얼마나 쌓여 있나
관리자 창에서:
Get-WinEvent -ListLog * | Where-Object { $_.RecordCount -gt 0 } |
Sort-Object RecordCount -Descending | Select-Object -First 8 LogName, RecordCount
LogName RecordCount
------- -----------
Microsoft-Windows-Hyper-V-VmSwitch-Operational 49952
System 43607
Microsoft-Windows-Store/Operational 24591
Application 21405
Microsoft-Windows-StorageManagement/Operational 16793
Microsoft-Windows-StateRepository/Operational 12309
Microsoft-Windows-Storage-ClassPnP/Operational 11851
Intel-Gfx-Display-External/GfxDisplayExEventViewer 21788
(2026-09-09 실측. 컴퓨터마다 순위와 건수는 다릅니다.)
출력 읽는 법: 로그 이름과 쌓인 건수입니다. 실측 컴퓨터에는 System 로그만 43,607건 — 로그가 얼마나 빨리 쌓이는지가 숫자로 보입니다. 이것이 다음 절의 -MaxEvents가 필수인 이유입니다. 조건 없이 전체를 읽으라고 하면 수만 건을 다 훑느라 한참 걸립니다.
3-4. Security 로그 엿보기
이제 관리자 창에서 본론입니다:
Get-WinEvent -LogName Security -MaxEvents 20
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
2026-09-09 오전 9:... 4624 Information 계정이 성공적으로 로그온했습니다...
2026-09-09 오전 9:... 4672 Information 새 로그온에 특수 권한이 할당...
2026-09-09 오전 8:... 4634 Information 계정이 로그오프되었습니다...
...
(출력 예시 — 관리자 창에서 직접 실행해 여러분 컴퓨터의 기록을 확인하세요.)
출력 읽는 법: 왼쪽부터 시간(TimeCreated), 이벤트 ID(Id), 심각도(Level), 요약(Message). 최신 사건이 위에 옵니다. 대부분은 시스템 계정들의 정상 활동입니다 — 지금은 "로그가 이렇게 생겼구나"를 익히는 단계입니다.
3-5. 필터링 — 로그인 성공만 (4624)
수만 건 중에서 원하는 종류만 뽑습니다:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 5
새 문법 — -FilterHashtable @{...}: "로그 이름은 Security, ID는 4624인 것만"이라는 조건 묶음입니다. @{조건1; 조건2} 모양으로 쓰고, 조건 사이는 세미콜론(;)으로 구분합니다. Step 4의 Select-String이 "글자로 거르기"였다면, 이건 "속성으로 거르기" — 로그 시스템이 미리 거르고 결과만 보내 주는 방식이라 훨씬 빠릅니다.
한 건을 자세히 보고 싶으면:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 1 | Format-List
Format-List는 결과를 세로 목록으로 펼쳐 줍니다. Message 전문을 읽어 보세요 — 어떤 계정이, 어떤 방식(로그온 유형)으로 로그인했는지가 적혀 있습니다. 처음엔 용어가 낯설어도 괜찮습니다. "계정 이름"과 "시간" 정도만 찾을 수 있으면 됩니다.
3-6. 조사의 묘미 — 로그인 실패 찾기 (4625)
이제 진짜 조사관처럼:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 10
결과가 없으면: 오류 없이 아무것도 안 나오거나 "일치하는 이벤트를 찾을 수 없습니다"라는 안내가 뜹니다 — 실패 기록이 없다는 뜻이고, 그게 정상이며 좋은 신호입니다. (원격 접속이 열려 있는 컴퓨터라면 모르는 실패가 종종 찍히기도 합니다.)
결과가 있으면: 각각을 봅니다. 본인이 비밀번호를 틀린 기억과 맞아떨어지면 정상입니다. 모르는 시간의 모르는 실패가 있다면 — 그것이 "수상한 신호"의 모습입니다. 지금 단계에서 깊이 파지는 않되, "이런 게 보이는구나"를 체험하는 게 목적입니다.
오늘의 하이라이트 실험: 컴퓨터를 잠갔다가(
Win + L), 비밀번호를 일부러 한 번 틀리고 정상 로그인한 뒤, 위의 4625 조회를 다시 실행해 보세요. 방금의 실패가 최신 기록으로 찍혀 있습니다. "내 행동이 로그가 된다"는 걸 눈으로 확인하는 순간, 로그가 뭔지 몸으로 이해하게 됩니다.
3-7. 보고서 형태로 정리하기 — 증거 확보
조사는 정리가 반입니다. Step 5의 표 만들기를 응용합니다:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 5 |
Select-Object TimeCreated, Id, Message |
Out-File login-report.txt
한 줄씩 해설: 4624 이벤트 5건을 → 필요한 세 열(시간, ID, 요약)만 골라 → 파일로 저장. login-report.txt를 메모장으로 열어 확인하세요.
왜 하는가: 조회에서 끝나지 않고 증거를 파일로 남기는 것까지가 조사입니다. 2-4절의 "로그를 즉시 복사해 확보하라"가 바로 이 행동입니다.
4. 미션과 연습문제
미션 — 오늘의 로그인 타임라인
내 컴퓨터의 오늘 하루를 재구성해 봅시다:
- 관리자 파워쉘에서 4624(로그인 성공) 최근 10건을 조회하세요
- 각 기록의 시간을 종이에 적어 보세요 — 컴퓨터를 켠 시각, 절전에서 깬 시각과 맞아떨어지나요?
- 4625(실패)가 있으면 시간을 함께 적고, 본인 행동이었는지 대조하세요
- 이 타임라인을
timeline.txt에 정리하세요 (형식 자유 — 예: "09:12 로그인 (컴퓨터 켬)")
연습문제
문제 1. Security 로그를 일반 창에서 읽으면 어떤 일이 일어나며, 왜 그렇게 설계되어 있을까요?
문제 2. Get-WinEvent에서 -MaxEvents를 빼먹으면 어떻게 되나요? 로그 조회의 철칙 한 줄을 말해 보세요.
문제 3. -FilterHashtable @{LogName='Security', Id=4624}를 쳤더니 필터 오류가 났습니다. 무엇이 틀렸을까요?
문제 4. 어떤 컴퓨터의 Security 로그에서 특정 기간의 기록이 통째로 비어 있었습니다. "그 기간엔 아무 일도 없었던 것"이 유일한 해석일까요? 조사관은 왜 이걸 수상하게 여길까요?
5. 모범 답안과 완료 기준
미션 모범 답안
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624} -MaxEvents 10 |
Select-Object TimeCreated, Id | Out-File timeline.txt
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 10 -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Id | Out-File timeline.txt -Append
notepad timeline.txt
메모장에서 시간들을 본인의 행동과 대조해 주석을 답니다:
오전 8:53 로그인 성공 — 아침에 컴퓨터 켠 시간과 일치
오전 9:27 로그인 성공 — 절전 모드에서 깨어난 시간
오전 10:18 로그인 성공 — (절전 해제?)
...
검증하는 법: 로그 속 시간들이 본인의 실제 행동과 대체로 일치하면 조회가 정확한 겁니다. 하나라도 설명 안 되는 시간이 있으면, 그 시간에 컴퓨터가 무엇을 하고 있었는지(절전 해제, 자동 업데이트 등) 생각해 보세요 — "설명 안 되는 기록을 설명하는 과정"이 곧 조사 훈련입니다. Step 11에서 시작프로그램의 정체를 확인한 것과 정확히 같은 감각입니다.
심화: 들어온 기록(4624)과 나간 기록(4634, 로그오프)을 시간으로 짝지으면 "그 계정이 얼마나 머물렀는가"가 계산됩니다. 침해 분석가들이 "침입자는 23시 04분에 들어와 47분간 머물렀다"처럼 정확한 진술을 하는 것이 이 짝짓기 덕분입니다. 시간이 나면 오늘 조회한 데이터로 직접 해 보세요.
연습문제 해답
문제 1 해답. "권한이 없는 작업을 수행하려고 했습니다"(UnauthorizedAccessException) 오류가 납니다 (2026-09-09 실측). 로그는 그 내용 자체가 민감 정보이고, 공격자가 흔적 지우기 1순위로 노리는 대상이라 접근을 높은 권한으로 보호하기 때문입니다.
문제 2 해답. 해당 로그의 모든 기록(수만~수십만 건)을 전부 읽으려 해서 명령이 한참 안 끝납니다. 3-3절 실측에서 System 로그만 43,607건이었습니다. 철칙: 로그 조회는 항상 개수 제한(-MaxEvents)부터.
문제 3 해답. 조건 사이를 쉼표(,)로 썼기 때문입니다. FilterHashtable 안의 조건 구분은 세미콜론(;)입니다: @{LogName='Security'; Id=4624}.
문제 4 해답. 아닙니다. 공격자가 제일 먼저 지우고 싶어하는 것이 로그이므로, 기록이 없는 것 자체가 누군가 지웠다는 흔적일 수 있습니다. "일이 없었다"와 "기록이 지워졌다"를 구분하는 것은 조사의 영역이고, 그래서 조직은 로그를 별도 시스템에 복사해 둡니다(정리 절의 로그 중앙화 참고).
완료 기준 체크리스트
- [ ] 관리자 파워쉘을 열 수 있다
- [ ] 관리자 권한을 "필요할 때만" 쓰는 이유를 설명할 수 있다
- [ ]
Get-WinEvent로 로그 목록과 내용을 조회할 수 있다 - [ ]
-FilterHashtable로 이벤트 ID 필터링을 할 수 있다 - [ ] 4624와 4625의 의미를 알고, "실패 다발 후 성공" 패턴이 왜 수상한지 설명할 수 있다
- [ ] 조회 결과를
Out-File로 저장할 수 있다 - [ ] 미션: timeline.txt를 완성했다
6. 흔한 실수와 해결
벽 1. Security 로그에서 권한 오류가 난다
증상: 빨간 오류가 뜹니다 (2026-09-09 실측):
Get-WinEvent : 권한이 없는 작업을 수행하려고 했습니다.
원인: 일반(비관리자) 파워쉘에서 실행했습니다. Security 로그는 관리자만 읽을 수 있습니다.
해결: 창 제목에 "관리자"가 있는지 확인하고, 3-1절대로 관리자 창을 여세요. 참고로 Application/System 로그는 일반 창에서도 읽히는 경우가 많으니, "Security만 관리자 창에서"라고 기억해도 됩니다.
벽 2. 명령이 한참 동안 안 끝난다
증상: 결과가 안 나오고 커서만 깜빡입니다.
원인: -MaxEvents를 빼먹으면 수만 건을 다 읽습니다. 실측 컴퓨터의 System 로그는 43,607건, 큰 로그는 수십만 건도 있습니다.
해결: Ctrl + C로 중단하고 -MaxEvents 20을 붙여 다시 실행하세요. 항상 개수 제한부터가 로그 조회의 철칙입니다.
벽 3. FilterHashtable에서 오류가 난다
증상: 필터 조건이 올바르지 않다는 류의 오류.
원인: @{ } 안의 문법 문제가 대부분입니다. 조건 구분은 세미콜론(;)이어야 하는데 쉼표로 쓰면 안 됩니다. 키 이름(LogName, Id)의 철자도 확인하세요.
해결: @{LogName='Security'; Id=4624} 형태를 그대로 베끼고 값만 바꾸세요.
벽 4. 4625가 하나도 없어서 "명령이 고장 났나" 싶다
증상: 조회해도 텅 비어 있거나 "지정한 선택 조건과 일치하는 이벤트를 찾을 수 없습니다"라는 안내가 뜹니다 (2026-09-09 실측).
원인: 고장이 아니라 실패 기록이 0건인 것 — 좋은 소식입니다.
해결: 빈 결과는 "0건"으로 해석하세요. 확실히 확인하고 싶으면 3-6절의 "일부러 틀리기" 실험을 해 보면 됩니다. 방금 만든 실패 기록이 보이면 명령도 로그도 정상입니다.
벽 5. Message가 길고 어려워서 읽기 힘들다
증상: 요약이 길고 전문 용어투성이입니다.
원인: 로그 메시지는 원래 개발자·조사관용이라 친절하지 않습니다.
해결: 처음엔 TimeCreated와 Id 두 열만 봐도 충분합니다. "언제, 무슨 종류"가 타임라인의 뼈대입니다. 상세 해석은 익숙해진 뒤 Format-List로 천천히 하세요.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 이벤트 로그 | 윈도우의 블랙박스 — 사건이 시간 순으로 기록됨 |
| Security 로그 | 로그인 등 보안 사건의 출입 기록부 (관리자 필요) |
| 이벤트 ID | 사건의 종류 번호 — 4624 성공 / 4625 실패 |
| 감사(audit) | 기록하고 나중에 검토할 수 있게 하는 체계 |
| 덮어쓰기 | 용량 한계로 오래된 로그가 지워지는 것 — 증거 확보가 급한 이유 |
오늘의 명령어
| 명령 | 하는 일 |
|---|---|
Get-WinEvent -LogName Security -MaxEvents N |
최근 N건 보기 |
-FilterHashtable @{LogName='Security'; Id=4624} |
ID로 필터링 (구분자는 ;) |
| Format-List |
한 건을 자세히 보기 |
| Select-Object ... | Out-File |
필요한 열만 정리해 증거 저장 |
명령어보다 중요한 감각
오늘 여러분은 포렌식 조사의 첫 동작 — 로그를 열고, 종류별로 거르고, 타임라인을 읽는다 — 을 직접 했습니다. 그리고 동시에 공격자의 시선도 배웠습니다: 이 로그가 두렵기에 공격자는 지우려 하고, 그래서 수비자는 권한으로 지키고 사본을 모읍니다. 기록을 둘러싼 공방 — 이 그림이 침해 대응의 본질입니다.
두 가지만 더 짚고 갑니다. 첫째, 오늘의 4624/4625 외에 조사관들이 즐겨 보는 번호들이 있습니다: 4634(로그오프), 4672(관리자급 권한 부여 — 민감!), 4688(프로그램 실행), 4720(새 계정 생성 — 공격자가 계정을 만들면 찍힘). 침해 조사 치트시트는 전부 이 번호들의 조합이니, 지금은 "이런 것들이 있다"만 기억해 두세요. 둘째, 회사에서는 각 컴퓨터의 로그를 한곳(SIEM이라 부르는 시스템)에 모읍니다. 한눈에 비교하려고, 그리고 공격자가 한 컴퓨터의 로그를 지워도 사본이 남게 하려고. 오늘 여러분이 한 대에서 한 일을 조직은 수만 대 규모로 자동화하지만, 원리는 오늘과 같습니다 — 수집 → 필터 → 패턴 감지.
전부 체크되면 Step 12 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.