"파워쉘은 명령줄 쉘, 스크립팅 언어, 그리고 구성 관리 프레임워크로 구성된 플랫폼 간 작업 자동화 솔루션이다" - MSDN. 가끔 파워쉘 == powershell.exe
혹은 파워쉘은 스크립팅 언어다 하는 오해가 있지만, 사실 그 모든 것을 합한 것이 파워쉘이다. 또한, 파워쉘의 근본은 바로 System.Management.Automation.dll
이라는 DLL이다. powershell.exe
는 그 DLL을 감싸는 wrapper 일 뿐이다.
파워쉘은 .NET Framework (닷넷 프레임워크) 기반으로 개발되었기 때문에 닷넷 기반의 런타임, 다양한 프로그래밍 언어들과의 소통, 라이브러리, 그리고 개발자 툴을 모두 사용할 수 있는 솔루션이다. 때문에 시스어드민들과 개발자들은 파워쉘을 이용해 데스크탑 어플리케이션, 웹, 클라우드, 모바일, IoT, AI, 레지스트리, COM, WMI, 오피스 솔루션, XML/CSV/JSON, Hyper-V 들과 소통을 할 수 있다.
그리고 그것은 곧 공격자들 또한 파워쉘을 이용해 저 모든 것들과 소통할 수 있음을 의미한다.
2010년 데프콘에서 David Kennedy 와 Josh Kelly가 발표한 "Powershell... omfg" 토크 이후 파워쉘에 관련된 공격자들의 관심이 크게 증가했다. 공격자들에게 있어서 파워쉘의 매력은 다음과 같다:
- 강력함 - 닷넷 프레임워크와 윈도우API 와의 소통, Living off the Land 를 통한 횡적이동
- 접근성 - Win7 SPI1, Win2008 R2 SPI1 이후로 모든 워크스테이션과 서버 OS가 자동적으로 설치되어 있고 활성화 되어 있음
- 개발 난이도 - 스크립팅 언어이자 매니지드 (managed) 언어이기 때문에 개발에 용이함
- 인메모리 실행 - "Fileless Attack" 이라고도 불렸던, 2010년대 초 당시에는 획기적이였던 공격 방식
- 블루팀의 약한 인지도
- 시스어드민들 조차 2010년대 초반까지 대중적으로 사용하지 않았음
- 부족한 문서화, OOP 프로그래밍의 입문 난이도 - 파워쉘이 정식 출시된 2006년도 당시 시스어드민들의 프로그래밍 관련된 지식 부족
- 기본적인 파워쉘 로깅 (logging)의 부재 및 당시 AV들의 부족함
이 모든 것들이 어우러져 공격자들은 빠른 속도로 당시 PE바이너리 기반이였던 자신들의 툴링을 모두 파워쉘로 변환하기 시작했다. 이는 곧 2010년 ~ 2017년동안 이뤄진 공격자들의 파워쉘 전성기를 열게 된다.
2012년도 Matt Graeber의 "Why I choose Powershell as an attack platform" 블로그를 기반으로 공격자들의 파워쉘 툴링 시대가 시작됐다.
종류 | 프로젝트 | |
---|---|---|
C2 프레임워크 | Powershell Empire, PoshC2, FudgeC2 | |
정보 수집 | PowerView, Invoke-PortScan, Powershell-AD-Recon, PSRecon | |
계정 정보 탈취 | Invoke-Mimikatz, Get-Keystrokes, Get-MicrophoneAudio | |
코드 실행 | Invoke-DLLInjection, Invoke-Shellcode, PowerPick | |
Reflective PE Injection | Invoke-ReflectivePEInjection | |
파워쉘 난독화 | Invoke-Obfuscation, Chameleon | |
Post-Exploitation | PowerSpoit, PowerTools, Nishang, Powershell Suite |
공격자들의 파워쉘에 대한 관심도가 증가하면서 마이크로소프트사에서는 파워쉘 버전 5.0과 5.1에서 드디어 보안과 관련된 기능들을 업데이트 하기 시작했다.
- Powershell Language Mode - Constrained Lanaguge Mode 로 설정시 .NET 어셈블리 로드, WinAPI, 공격적 cmdlet 금지
- Transcript Logging - Over-the-Shoulder Transcription, 메타데이터 모두 로깅
- Deep Script Block Logging - 파워쉘 난독화 무력화 -> 메모리상에서 난독화가 풀린 파워쉘 코드를 로깅. 공격용으로 쓰이는 120개의 중요 함수/키워드 금지
- AMSI (Anti-Malware Scan Interface) - 윈도우 어플리케이션과 AV/EDR간의 API 제공. 악성 파워쉘 메모리상에서 탐지 후 제거
2022년도 기준으로 몇 몇 APT 그룹들, 랜섬웨어 갱들, 그리고 내부망 모의해커들은 여전히 파워쉘을 많이 사용하고 있는 중이다. 하지만 실력 좋은 (정부 배후/후원) APT 그룹들과 업계 내 레드팀들은 .NET, nimlang, golang, BOF, COFF 등의 트레이드 크래프트 (tradecraft)로 넘어갔다.
2010년 ~ 2017년 동안 이뤄진 공격자들의 파워쉘 전성기는 끝난지 5년이나 되었지만, 여전히 파워쉘은 공격에 꽤나 많이 쓰이고 있다.