Step 14. 원격 관리 — 네트워크 너머의 컴퓨터에 명령하기
Level 0 — 컴퓨터 조작과 구조의 이해 | 난이도 ★★★☆☆ | 예상 소요 시간 2시간
전제: Step 13 완료. 윈도우 파워쉘에서 진행합니다. 오늘은 개념 이해 챕터입니다 — 실제 원격 접속 실습은 랩 환경이 갖춰지는 Level 2에서 합니다.
- 준비물: 윈도우 PC, 파워쉘, 메모장(3-6절의 글쓰기 실습용).
- 주의: 오늘 실습은 내 컴퓨터의 상태 조회뿐이라 100% 안전합니다. 한 가지만 새기세요 — 원격 관리는 자기 랩의 자기 컴퓨터들 사이에서만 실습하는 것이 이 책의 절대 규칙입니다. 남의 컴퓨터에 무단으로 접속하는 것은 설정과 무관하게 범죄입니다.
회사 침해 사고 조사에서 흔한 반전이 있습니다. 피해 서버의 로그를 보면, 악성 행위를 한 세션이 네트워크 너머 다른 컴퓨터에서 접속한 것으로 기록되어 있습니다. 침입자는 그 서버 앞에 앉은 적이 없는 겁니다. 어떻게? 답은 간단합니다 — 관리자들이 매일 쓰는 원격 관리 기능을 공격자도 똑같이 쓴 겁니다. 오늘은 그 "문"의 구조를 이해하는 날입니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 원격 세션이 무엇인지, WinRM/PSRemoting의 역할과 포트 번호를 설명한다
Enter-PSSession과Invoke-Command의 차이를 말할 수 있다Test-NetConnection으로 포트(문)가 열려 있는지 시험하고 결과를 해석한다- 측면 이동(lateral movement)이 무엇이며, 왜 정상 관리 도구가 그 수단이 되는지 설명한다
- 내 컴퓨터에서 기다리고 있는(LISTENING) 포트 목록을 만들 수 있다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 파워쉘 5.1 (일반 권한으로 충분) |
| 오늘의 명령어 | Get-Help 명령어(내장 설명서), Test-NetConnection 주소 -Port 번호(포트 시험), Get-Service WinRM(상태 확인), netstat -an(열린 문 목록) |
| 필요한 개념 | 원격 세션, WinRM/PSRemoting과 포트 5985/5986, 자격 증명, 측면 이동(Lateral Movement) |
| 오늘 만나지만 실습은 미루는 명령 | Enter-PSSession(한 대와 대화), Invoke-Command(여러 대에 동시 명령) — Level 2 랩에서 실습 |
2-1. 원격 세션이란
지금까지 우리의 파워쉘은 "내 컴퓨터 안의 창"이었습니다. 원격 세션은 이 창의 케이블을 네트워크로 늘려서, 다른 컴퓨터의 파워쉘에 연결하는 것입니다. 내 화면은 그대로인데, 명령이 실행되는 곳은 저쪽 컴퓨터입니다.
집에 앉아 회사 컴퓨터에 전화해 "서류 좀 출력해 줘"라고 시키는 격입니다. 손은 여기, 일은 저쪽에서 일어납니다.
2-2. WinRM과 PSRemoting — 윈도우의 공식 문
윈도우에서 이걸 가능하게 하는 공식 시스템이 WinRM(Windows Remote Management)이고, 파워쉘용 기능 이름은 PSRemoting입니다. 리눅스의 SSH(Step 29에서 배웁니다)와 같은 역할입니다.
중요한 사실 세 가지:
- WinRM은 문(포트)을 열고 기다립니다 — 5985번(일반)과 5986번(암호화). Step 6에서 배운 "주소:포트"의 실례입니다
- 이 문은 기본적으로 닫혀 있고, 쓰려면 받는 쪽 컴퓨터에서 켜 줘야 합니다
- 연결하려면 상대 컴퓨터의 계정(아이디/비밀번호)이 필요합니다 — 아무나 들어올 수 없게
2-3. 측면 이동(Lateral Movement) — 공격자의 옆걸음
공격자가 회사 내부망에 처음 침입할 때는 보통 가장 약한 한 대(예: 피싱 메일을 연 직원 PC)를 먹습니다. 그런데 목표물(중요 서버)은 따로 있죠. 어떻게 갈까요?
장악한 PC에서 → 옆 PC로 → 또 옆으로 → 목표 서버로. 이 옆걸음을 측면 이동이라 합니다. 그리고 이 이동에 제일 자주 쓰이는 수단이 바로 원격 관리 기능들입니다 — 굳이 해킹 도구를 가져올 필요 없이 윈도우에 원래 있는 정식 기능을 쓰니까 탐지도 어렵습니다.
그래서 수비 쪽의 대응도 정해져 있습니다: "원격 접속은 누가, 어디서, 어디로 했는가"를 기록하고 감시한다. Step 12의 로그가 여기서 다시 등장합니다 — 원격 로그인도 전부 이벤트로 남거든요.
2-4. 자격 증명 — 문을 여는 열쇠
원격 접속에 필요한 것은 결국 계정입니다. 그래서 공격자는 문을 부수는 대신 열쇠(계정 정보)를 훔칩니다. 실제 침해 사고는 "비밀번호 유출 → 정상 계정으로 원격 접속 → 로그에는 정상 로그인으로 기록"의 순서로 진행되는 경우가 많습니다.
이것이 비밀번호 관리가 강조되는 이유이고, 회사에서 관리자 전용 계정을 따로 쓰는 이유이기도 합니다 — 일상 계정이 피싱에 뚫려도 관리 권한까지는 안 넘어가게 하는 격리벽입니다. "권한은 분리한다" — 반복되는 보안 설계 원칙입니다.
2-5. 왜 지금 실습하지 않는가
실제 원격 접속을 해 보려면 컴퓨터가 두 대 필요합니다. 하나는 명령하는 쪽, 하나는 받는 쪽. 그게 "랩"이 필요한 이유이고, Level 2에서 가상머신 여러 대를 띄워 그때 직접 합니다. 오늘은 "이런 문이 있고, 이렇게 동작하고, 이래서 위험하다"를 머리에 새기는 날입니다.
3. 따라 하기
3-1. 도움말로 만나는 Enter-PSSession
파워쉘에는 내장 설명서가 있습니다. 오늘의 주인공 명령을 도움말로 만나 봅시다:
Get-Help Enter-PSSession
이름
Enter-PSSession
개요
Starts an interactive session with a remote computer.
구문
Enter-PSSession [-ComputerName] <string> [-Credential <pscredential>] [-Port <int>] ...
Enter-PSSession [[-Session] <PSSession>] ...
...
(2026-09-09 실측, 일부 발췌. "원격 컴퓨터와 대화형 세션을 시작한다"는 개요와 여러 사용 형태가 보입니다.)
읽는 법: 핵심 형태는 이겁니다 —
Enter-PSSession -ComputerName Server01 -Credential 도메인\사용자
"Server01이라는 컴퓨터에, 이 자격(계정)으로 원격 세션을 연다." 실행하면 프롬프트가 [Server01]: PS>처럼 바뀌고, 그때부터 치는 명령이 전부 저쪽 컴퓨터에서 실행됩니다.
왜 하는가: Get-Help는 앞으로 낯선 명령을 만날 때마다 쓰는 도구입니다. 인터넷 검색보다 정확한 1차 설명서가 컴퓨터 안에 이미 있습니다. -Examples 옵션을 붙이면 실용 예시만 모아 보여 줍니다.
3-2. Invoke-Command — 한 번에 여러 대에게
사촌 명령도 봅시다:
Get-Help Invoke-Command -Examples
Enter-PSSession이 "한 대와 대화"라면, Invoke-Command는 "여러 대에 같은 명령을 한꺼번에" 뿌리는 명령입니다:
Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock { Get-Service }
읽는 법: "S1, S2, S3 세 대에서 Get-Service를 실행하고 결과를 모아 줘." 관리자가 수백 대의 패치 상태를 점검할 때 쓰는 방식입니다.
공격자 시선으로 다시 읽기: 이 편리함이 공격자 손에 들어가면? "내부망 여러 컴퓨터에 동시에 악성 명령 배포"가 됩니다. 도구는 같고 의도만 다릅니다 — 이 문장이 오늘의 핵심입니다.
3-3. 문이 열려 있는지 시험하기 — Test-NetConnection
내 컴퓨터의 WinRM 문(5985번)이 열려 있는지 시험해 봅니다:
Test-NetConnection localhost -Port 5985
ComputerName : localhost
RemoteAddress : ::1
RemotePort : 5985
TcpTestSucceeded : False
(2026-09-09 실측.)
출력 읽는 법: TcpTestSucceeded: False — "그 포트로의 연결 시험이 실패했다 = 문이 닫혀 있다." 대부분의 개인 PC에서는 WinRM이 꺼져 있어서 False가 정상입니다. True가 나온다면 누군가(또는 무언가가) 이 문을 열어 둔 것 — "왜 열려 있지?"를 묻는 게 보안 감각입니다. (localhost는 "이 컴퓨터 자신"을 가리키는 약속된 이름입니다.)
예측해 보기:
Test-NetConnection localhost -Port 443(웹 문)은 True일까요? (정답: 대부분 False입니다. 실측에서도 False였습니다. 443은 다른 집의 웹 서버에 접속할 때 쓰는 상대방의 문이지, 내 컴퓨터가 열어 두는 문이 아니기 때문입니다. "내가 나가는 문"과 "내가 열어 둔 문"은 다르다 — 이 구분이 포트 이해의 핵심입니다.)
3-4. 내 컴퓨터의 WinRM 상태 보기
Get-Service WinRM | Select-Object Name, Status, StartType
Name Status StartType
---- ------ ---------
WinRM Stopped Manual
(2026-09-09 실측.)
읽는 법: WinRM은 이름 그대로의 서비스로 동작합니다(Step 5, 13 복습). Stopped + Manual — 꺼져 있고 필요할 때만 켜지는 상태. 개인 PC의 기본값입니다.
보안 감각 문제: 원격 관리를 설정한 적이 없는데 이 서비스가 Running + Automatic이라면? "누가, 왜 켰는가"를 확인해야 할 조사 포인트입니다. 회사 PC라면 관리 부서가 켰을 수 있고, 그게 아니면 의심 사유입니다. 설정의 이력을 아는 것이 보안의 시작입니다.
3-5. 우리 집 문 목록 — LISTENING 포트
Step 6의 netstat을 다시 꺼냅니다. 이번엔 "기다리는 중(LISTENING)"인 포트만 봅니다:
netstat -an | Select-String LISTENING | Select-Object -First 10
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3450 0.0.0.0:0 LISTENING
...
(2026-09-09 실측.)
출력 읽는 법: 0.0.0.0:포트번호 + LISTENING은 "모든 네트워크 카드에서 이 번호로 오는 연결을 받아들이는 중"이라는 뜻입니다. 실측 컴퓨터의 해석 예: 135번과 445번은 윈도우 기본 구성(RPC와 파일 공유), 2869번은 장치 검색(UPnP). 그런데 22번이 보이네요 — SSH의 문입니다. 이 컴퓨터에는 OpenSSH 서버가 설치되어 켜져 있는 것입니다. 내가 설치한 기억이 있다면 정상, 없다면 조사 포인트. 3450~3453처럼 모르는 번호가 보이면 Step 13의 기술로 "어느 프로세스가 열었나"를 추적할 수 있습니다(심화: Get-NetTCPConnection -State Listen | Select-Object LocalPort, OwningProcess).
왜 하는가: 목표는 전부 이해하는 게 아니라 "우리 집에 문이 몇 개고 어디에 있는지 목록화하는 습관"입니다. 이 목록이 있어야 "평소와 다른 문"이 보입니다.
3-6. 생각 정리 — 한 문단 쓰기
오늘의 마지막 실습은 명령이 아니라 글쓰기입니다. 메모장을 열고 아래 질문에 답하는 한 문단을 직접 써 보세요:
"원격 관리 기능(WinRM/PSRemoting)은 왜 공격자에게 매력적인가?"
힌트: ① 추가 도구 설치 없이 윈도우 기본 기능 사용(탐지 어려움), ② 한 대 장악 후 훔친 계정으로 옆으로 이동 가능, ③ 관리자의 정상 활동과 구별이 어려움.
왜 글로 쓰는가: 이해했는지의 최종 검증은 실행이 아니라 설명이기 때문입니다. 면접에서도, 보고서에서도, 이 문장이 그대로 쓰입니다.
4. 미션과 연습문제
미션 — 내 컴퓨터의 열린 문 점검표
오늘 배운 것을 조합해 점검표를 만드세요:
Get-Service WinRM결과를 확인하고 "켜져 있나/꺼져 있나" 기록하세요Test-NetConnection localhost -Port 5985와5986둘 다 시험해 결과를 기록하세요netstat -an | Select-String LISTENING으로 기다리는 포트들을 확인하세요- 셋을 모아
open-doors.txt에 정리하고, 마지막 줄에 "내가 모르는 열린 문이 있는가?"에 대한 답을 쓰세요
연습문제
문제 1. WinRM이 기다리는 포트 두 개는 몇 번이며, 이 문의 기본 상태는 열림인가 닫힘인가?
문제 2. Enter-PSSession과 Invoke-Command의 차이를 "사용 상황"과 함께 설명해 보세요.
문제 3. 공격자가 굳이 해킹 도구를 가져오지 않고 WinRM 같은 정식 기능을 쓰는 이유를 두 가지 이상 말해 보세요.
문제 4. "원격 관리가 위험하다면 전부 끄면 되지 않나요?"라는 질문에 실무적인 답을 해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
Get-Service WinRM | Select-Object Name, Status, StartType | Out-File open-doors.txt
Test-NetConnection localhost -Port 5985 -WarningAction SilentlyContinue |
Format-List ComputerName, RemotePort, TcpTestSucceeded | Out-File open-doors.txt -Append
Test-NetConnection localhost -Port 5986 -WarningAction SilentlyContinue |
Format-List ComputerName, RemotePort, TcpTestSucceeded | Out-File open-doors.txt -Append
netstat -an | Select-String LISTENING | Out-File open-doors.txt -Append
notepad open-doors.txt
메모장에서 마지막 줄에 답을 씁니다. 실측 컴퓨터의 예:
WinRM: Stopped / Manual — 꺼져 있음. 내가 설정한 적 없으므로 정상
5985: False / 5986: False — 원격 관리 문 닫혀 있음
LISTENING: 22(SSH — 내가 아는가?), 135·445·2869(윈도우 기본), 3450~3453(확인 필요)
답: 22번과 3450번대는 내가 설치한 프로그램의 것인지 확인이 필요하다
검증하는 법: LISTENING 포트가 보여도 대부분은 윈도우 정상 구성 요소입니다. 지금 목표는 "문의 목록이 있고, 모르는 문은 확인 표시를 해 뒀다"는 상태입니다. 모르는 포트의 주인이 궁금하면 Get-NetTCPConnection -State Listen의 OwningProcess 번호를 Step 13의 PID 추적으로 연결해 보세요.
연습문제 해답
문제 1 해답. 5985번(일반)과 5986번(암호화)이며, 기본 상태는 닫힘입니다. 쓰려면 받는 쪽 컴퓨터에서 명시적으로 켜야 하고, 접속에는 그 컴퓨터의 계정이 필요합니다.
문제 2 해답. Enter-PSSession은 한 대와 대화형 세션을 열어 그 안에서 계속 작업할 때(원격 서버 하나에 접속해 이것저것 점검), Invoke-Command는 여러 대에 같은 명령을 한꺼번에 실행하고 결과를 모을 때(수백 대의 패치 상태 점검) 씁니다.
문제 3 해답. ① 도구를 새로 가져올 필요가 없어 백신의 "알려진 악성 파일" 탐지를 피한다. ② 훔친 정상 계정으로 쓰면 로그에도 정상 관리 활동처럼 기록되어 구별이 어렵다. ③ 이미 열려 있는 관리 통로를 그대로 쓸 수 있어 추가 흔적을 남기지 않는다. (두 가지 이상이면 정답)
문제 4 해답. 끄면 일을 못 합니다 — 관리자 없이 수백 대를 운영할 수는 없으니 기능 자체는 필요합니다. 실무의 답은 "끄기"가 아니라 통제입니다: 필요한 곳에만 열고, 접속을 기록하고, 이상 접속에 경보를 겁니다. "편의와 안전의 균형을 설계한다"는 것이 보안 엔지니어링의 본질입니다.
완료 기준 체크리스트
- [ ] 원격 세션이 무엇인지 설명할 수 있다
- [ ] WinRM과 PSRemoting의 관계, 포트 5985/5986을 안다
- [ ] Enter-PSSession과 Invoke-Command의 차이를 안다
- [ ] Test-NetConnection으로 포트를 시험하고 결과를 해석할 수 있다
- [ ] 측면 이동이 무엇인지 설명할 수 있다
- [ ] 원격 관리가 공격자에게 매력적인 이유를 한 문단으로 쓸 수 있다
- [ ] 미션: open-doors.txt를 완성했다
6. 흔한 실수와 해결
벽 1. "지금 당장 원격 접속 실습이 안 돼요"
증상: 집에 컴퓨터가 한 대뿐이라 Enter-PSSession을 시험할 상대가 없습니다.
원인: 원격 실습은 최소 두 대가 필요합니다 — 정상적인 상황입니다.
해결: 오늘은 개념 챕터이므로 실습이 없는 게 맞습니다. Level 2에서 가상머신을 여러 대 띄우면 그때 마음껏 합니다. 지금은 3-6절의 한 문단 설명이 실습 대신입니다.
벽 2. Get-Help 결과가 너무 길다
증상: 도움말이 수십 스크롤 나옵니다.
원인: 정식 설명서라 전부 담고 있습니다.
해결: -Examples만 보거나, Get-Help 명령어 -Parameter ComputerName처럼 궁금한 매개변수 하나만 콕 집어 보세요. 설명서는 처음부터 끝까지 읽는 책이 아니라 찾아보는 사전입니다.
벽 3. Test-NetConnection 결과가 교재와 다르다
증상: 책엔 False라는데 내 컴퓨터는 True입니다.
원인: 어떤 프로그램이 WinRM을 켰거나, 회사 PC라면 관리 정책으로 켜져 있을 수 있습니다.
해결: 이상 현상이 아니라 발견입니다. "누가 켰나"를 추적해 보세요 — 회사 PC면 관리 부서 문의, 개인 PC인데 기억이 없으면 Step 11~13의 기술로 언제 켜졌는지 조사하는 연습이 됩니다.
벽 4. 포트 번호가 외워지지 않는다
증상: 5985인지 5895인지 헷갈립니다.
원인: 외우려 해서 그렇습니다. 포트 번호는 암기 과목이 아닙니다.
해결: 실무자도 포트 번호는 검색합니다. 중요한 건 번호가 아니라 "서비스마다 정해진 문이 있고, 열린 문은 점검 대상"이라는 구조입니다. 번호는 쓰다 보면 저절로 외워집니다.
벽 5. LISTENING 포트가 너무 많아서 불안하다
증상: netstat 결과에 모르는 번호가 줄줄이 나옵니다.
원인: 윈도우는 기본적으로도 여러 포트를 열고 있고(135, 445 등), 설치된 프로그램들도 저마다 엽니다. 실측 컴퓨터에도 10개가 넘게 있었습니다.
해결: 불안해하지 말고 목록화하세요. "전부 정상인지 지금 판별"이 아니라 "평소 목록을 확보해 두고, 달라진 것을 알아채는 것"이 목표입니다. 모르는 포트는 OwningProcess → PID 추적으로 정체를 확인하면 됩니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 원격 세션 | 네트워크 너머 컴퓨터의 셸에 연결하는 것 |
| WinRM / PSRemoting | 윈도우의 공식 원격 관리 시스템 (포트 5985/5986) |
| Enter-PSSession / Invoke-Command | 한 대와 대화 / 여러 대에 동시 명령 |
| 측면 이동 | 장악한 컴퓨터에서 옆 컴퓨터로 퍼져 가는 공격 동선 |
| 자격 증명 | 문을 여는 열쇠(계정) — 훔치면 정당한 관리자와 같은 모습 |
오늘의 명령어
| 명령 | 하는 일 |
|---|---|
Get-Help 명령어 -Examples |
내장 설명서의 실용 예시 보기 |
Test-NetConnection 주소 -Port 번호 |
포트가 열려 있는지 시험 |
Get-Service WinRM |
원격 관리 서비스 상태 확인 |
netstat -an | Select-String LISTENING |
기다리는 포트 목록 |
명령어보다 중요한 감각
관리자의 편리한 문은, 훔친 자격을 든 공격자에게도 같은 모양으로 열린다. 그래서 "누가 이 문을 썼는가"의 기록과 감시가 방어의 핵심이다.
보안 업계에는 "Living off the Land(그 땅에서 나는 것으로 산다)"는 표현이 있습니다 — 악성 파일을 가져오지 않고 그 컴퓨터에 원래 있는 정상 도구(파워쉘, WinRM)만으로 공격하는 기법입니다. 정상 파일의 비정상 사용은 "파일" 기반 백신이 잡기 어렵고, 그래서 최신 방어는 행위를 봅니다 — 누가, 언제, 어디서, 무엇을 실행했나. Step 12~13에서 배운 로그와 계보 추적이 바로 그 행위 기반 방어의 재료입니다.
그리고 원격 관리는 이 책에서 처음 만나는 "완전한 양날의 검"입니다. 끄자니 일을 못 하고, 열자니 공격자의 길이 되는. 방화벽, 암호화, 접근 통제… 앞으로 수많은 주제에서 이 딜레마가 반복되고, 그때마다 정답은 "끄기/켜기"가 아니라 "누가, 언제, 어떻게 쓰는지 통제하기"입니다. 오늘 쓴 한 문단이 바로 보안 담당자가 매일 쓰는 판단의 언어입니다.
전부 체크되면 Step 14 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.