랜섬웨어 전달하는 파워쉘 악성코드
올해 들어 랜섬웨어를 다운로드하는 악성코드에 파워쉘(PowerShell)을 이용한 형태가 대거 등장하고 있다.
파워쉘은 윈도우(Windows)와 응용 프로그램의 관리를 쉽게 해주는 스크립트 언어로 윈도우 비스타 이상 기본 포함되어 있다. 특히, 윈도우 7과 윈도우 10의 사용자가 증가하면서 파워쉘도 대부분의 윈도우에 기본 탑재되었다. 악성코드 제작자들도 기본 탑재된 파워쉘을 이용한 악성코드 제작에 관심을 가지기 시작했다. 현재 파워쉘로 작성된 악성코드는 주로 다운로더 역할을 하지만 파워쉘만으로도 원하는 기능을 가진 악성코드를 제작할 수 있다. 또한 수적 증가뿐만 아니라 파워쉘을 이용한 다양한 기법을 가진 악성코드가 등장할 위험이 크다.
이 글에서는 악성코드 제작자가 파워쉘을 어떻게 활용하는지, 감염 기법에 대해 자세히 소개한다.
파워쉘은 마이크로소프트사(Microsoft)의 시스템 관리용으로 특별히 설계된 작업 기반 명령줄 쉘 및 스크립트 언어이다. 파워쉘을 사용하여 윈도우와 응용 프로그램의 관리를 쉽게 제어하고 자동화할 수 있다. 2006년 정식 공개되었고 윈도우 비스타 이후 출시된 윈도우에 기본 탑재되어 있다. 파워쉘은 윈도우 관리 체계인 WMI(Windows Management Instrumentation)도 쉽게 사용할 수 있다.

파워쉘을 이용한 악성코드의 등장
파워쉘과 관련된 주요 악성코드의 타임라인은 [그림 2]와 같다.

파워쉘 악성코드에 대해 알아보기 전에 유사한 형태의 배치, 매크로, 스크립트 형태의 악성코드를 살펴보면, 1993년 향상된 배치 파일 바이러스가 등장했다. 1994년에는 문서 내 매크로 기능으로 악성코드의 개념이 증명된 후 매크로 바이러스가 1995년부터 확산되었다. 본격적인 비주얼 베이직 스크립트(Visual Basic Script) 악성코드는 1998년 처음 등장하고 2000년 5월 러브레터 바이러스(Loveletter virus)가 전세계를 강타하고 이후 유사 스크립트 악성코드가 대거 등장한다. 하지만 마이크로소프트사는 오피스 2000 이후 기본적으로 매크로 기능을 제한하면서 이후 매크로 악성코드는 급속히 사라지고 스크립트 악성코드도 소강 상태를 보인다.
마이크로소프트사는 새로운 스크립트 언어 개발을 목표로 하고 2004년 모나드(Monad)라는 프로젝트명으로 마이크로소프트 쉘(Microsoft Shell, MSH)을 발표한다. 당시 보안 연구원 중에는 새로운 스크립트의 등장을 우려하는 목소리도 있었으며, 악성코드 제작자들도 개념 증명 수준의 악성코드를 제작하기도 했다.
마이크로소프트사는 2006년 마이크로소프트 쉘(MSH)에서 파워쉘(PowerShell)로 이름을 바꾸고 정식 버전을 발표한다. 윈도우 비스타 이후 파워쉘을 기본적으로 포함했지만, 2010년 이후 윈도우 XP를 대체한 윈도우 7과 윈도우 10의 사용자가 증가하면서 파워쉘도 대부분 윈도우에서 기본 탑재된다. 악성코드 제작자도 기본 탑재된 파워쉘을 이용한 악성코드 제작 방법을 고민하고, 파워쉘을 이용해 강력하지만 쉽게 원하는 기능을 작성할 수 있음을 알게 된다.
2013년 러시아에서 파워쉘로 제작된 랜섬웨어가 나타났지만, 본격적인 파워쉘 악성코드의 등장은 이로부터 몇 년이 지난 시점으로 볼 수 있다.
파워쉘은 감염 이후 파일로 존재하지 않는 무파일(Fileless) 악성코드 제작에도 이용된다. 2014년 발견된 Poweliks, Phase, 2015년 발견된 Bedep, Kolver가 대표적이다.
2015년 후반부터 오피스 문서 매크로에 파워쉘을 실행해 다른 악성코드를 다운로드하는 악성코드가 등장하고, 2016년부터 주로 랜섬웨어를 다운로드하는 악성코드에 파워쉘을 이용한 형태의 악성코드가 대거 등장한다.
파워쉘 악성코드 감염 방식
파워쉘을 이용하는 악성코드도 다른 일반적인 악성코드와 동일하게 일반적으로 메일의 첨부 파일이나 링크, 웹사이트를 해킹해 웹브라우저 취약점을 이용해 악성코드가 실행되게 하는 방법을 많이 이용한다. 또한 파워쉘 파일이 아닌 자바 스크립트나 문서 파일 내 매크로 파일에서 파워쉘을 실행하는 방식을 이용한다.

파워쉘 악성코드 감염 방식
1) 실행 권한
2) 파워쉘 명령을 포함한 파일 종류
파워쉘 악성코드는 기본 권한 문제로 파워쉘 단독 형태보다는 다른 파일 내에서 파워쉘을 실행하는 유형으로 존재한다. 가장 많은 형태는 자바 스크립트(Java Script, JS)와 오피스 내 매크로가 최종적으로는 파워쉘을 실행하는 경우다. 과거에는 Wscript.exe 등을 통해 자바 스크립트나 비주얼 베이직 스크립트(Visual Basic Script, VBS)를 실행하는 경우가 많았지만 최근에는 파워쉘 실행 파일인 Powershell.exe를 실행해 스크립트를 실행하는 사례도 점차 증가하고 있다.

[그림 5] 파워쉘을 실행시키는 파일 종류
■ 자바 스크립트와 비주얼 베이직 스크립트
현재 가장 많은 형태로 존재하는 자바 스크립트는 ‘JS’, ‘JSE’ 등의 확장자를 가지고 있으며 비주얼 베이직 스크립트는 ‘VBS’, ‘VBE’ 등의 확장자를 가지고 있다. 자바 스크립트는 보통 난독화되어 있어 이를 해제하기 전에는 실제 코드를 확인하기 어렵다.
■ 윈도우 스크립트 파일(Windows Script File)과 HTA
윈도우 스크립트 파일(Windows Script File)은 확장자가 ‘WSF’이며 HTML 애플리케이션(HTML Application)은 확장자가 ‘HTA’이다. 이들 파일도 다른 스크립트 코드를 포함할 수 있지만 대부분 자바 스크립트로 작성되어 있다.
■ 오피스(Office) 문서
파워쉘을 이용하는 악성코드는 오피스 문서 내 매크로 기능으로 존재하기도 한다. 매크로 기능을 통해 다른 악성코드를 다운로드하는 방식도 있지만 자바 스크립트 등의 스크립트 언어를 실행해 파일을 다운로드하기도 한다. 이 때 직접 파일을 다운로드하는 경우도 있지만 명령을 베이스64(Base64)로 인코딩하기도 한다.

[그림 6] 주요 명령어를 인코딩한 파워쉘 코드
악성코드 제작자는 매크로를 포함한 문서가 열릴 때 이런 파워쉘 코드가 자동 실행되도록 AutoOpen이나 Document_Open 등의 함수를 사용하기도 한다.
■ 바로가기(Shortcut)
바로가기는 다른 파일의 위치를 포함하며 ‘LNK’ 확장자를 가지고 있다. 대상에서 Wscript.exe나 PowerShell.exe를 실행해 스크립트 내용을 실행할 수 있다.
예를 들어 문서, 사진, 동영상 파일 아이콘을 가지고 있지만 대상에서 wscript.exe나 powershell.exe를 실행하는 명령을 포함하고 있다면 악성코드로 의심해 볼 수 있다.

■ 파워쉘 스크립트
일반적인 윈도우에서는 파워쉘에서 스크립트를 기본적으로 실행할 수 없어 파워쉘 스크립트로 작성된 악성코드는 많지 않다. 보통 파워쉘로 작성된 악성코드는 다른 악성코드를 다운로드하는 다운로더나 다른 악성코드를 감염시키는 드롭퍼(Dropper) 역할을 했다. 하지만 파워쉘만으로도 원하는 기능을 가진 악성코드를 제작할 수 있다. 실제로 [그림 8]과 같이 파워쉘로 작성된 랜섬웨어도 존재한다.

3) 무파일(Fileless) 기법
악성코드 제작자들은 윈도우에서 제공하는 스크립트와 레지스트리를 이용해 감염 후 파일로 존재하지 않는 기법을 개발한다. 그러나 무파일 기법이라고 해서 항상 파일이 존재하지 않는 형태는 아니다. 최초 감염 때는 실행 파일이지만, 일단 실행 후 레지스트리에 암호화된 악성코드 데이터를 저장하고 스크립트 명령어로 암호화된 데이터를 실행하는 기법을 이용한다.
대표적인 악성코드는 Poweliks, Phase, Bedep, Kovter 등이 존재하며 현재도 비슷한 기법을 사용하는 악성코드가 꾸준히 발견되고 있다.
무파일 기법을 사용하는 일부 악성코드는 버그로 정상 실행되지 않을 수 있다. 갑자기 파워쉘 오류가 발생한다면 악성코드 감염을 의심해 볼 수 있다.

현재 대부분의 윈도우 사용자 시스템에는 파워쉘이 기본 탑재되어 있다. 악성코드 제작자들도 파워쉘을 이용한 악성코드 제작에 관심을 가지
기 시작했다. 특히 파워쉘은 오픈소스로도 공개되어 리눅스와 맥 OS(Mac OS) 등에서도 사용될 수 있다.

파워쉘을 이용한 악성코드는 수적으로 증가할 뿐 아니라 파워쉘을 이용한 다양한 기법을 가진 악성코드도 등장할 수 있다. 파이썬(Python)의 경우 많은 리눅스, 맥에서 기본 탑재되어 있어 멀티 플랫폼 악성코드 제작이 가능한 것처럼, 파워쉘도 보편화되어 윈도우뿐만 아니라 리눅스, 맥 OS에서도 널리 사용되면 파워쉘로 제작된 멀티 플랫폼 악성코드의 등장 가능성도 있다.
파워쉘 악성코드에 의한 피해를 줄이기 위해서는 지능적으로 변화하는 파워쉘 악성코드에 대한 심층 분석과 지속적인 모니터링 등의 노력이 필요하다. 또한 파워쉘에 대한 실행 통제 기능이나 스크립트 악성코드의 행위에 대비할 수 있는 보안 제품을 선택하는 것이 바람직하다.
- AhnLab분석팀 차민석 책임