Table of Contents
Abstract
AMSI는 Windows가 서드 파티 AV 프로그램들이 Fileless 악성코드를 탐지하고 차단할 수 있도록 제공하는 스캔 인터페이스다. PowerShell, CScript, WScript 등이 스크립트를 실행하기 전에 AMSI를 사용해 서드 파티 AV 프로그램들에게 스크립트의 악성 여부 검사를 요청할 수 있으며, 서드 파티 AV 프로그램들은 스크립트를 진단해 악성 여부를 판단한 뒤 이를 반환해 스크립트 실행을 차단할 수 있다.
본 AMSI 편에서는 AMSI에 대한 개요와 이용법, 작성법, 등록법을 알아보도록 하겠다.
Overview
AMSI
AMSI(Anti-Malware Scan Interface)는 Windows 10부터 제공하는 다목적 스캔 인터페이스다. 특히 Fileless Malware를 방지하도록 설계되었기 때문에 스크립트 파일 형태로 실행되는 것 뿐만 아니라 PowerShell 프로세스의 Command Parameters나 Interactive Shell에서 실행하는 모든 파워쉘 명령을 모니터링 할 수 있다.
서드 파티 AV 제공자(Provider)들은 Windows 레지스트리에 자신을 AMSI 제공자(Provider)로 등록하고 일반 응용 프로그램들이 AMSI 서비스를 이용하기 위해 필요한 여러 구성 정보들(AMSI DLL 경로 등)을 저장한다. AMSI를 이용하는 일반 응용 프로그램들은 Windows의 레지스트리에서 AMSI 구성 정보를 읽어온 후 AMSI로 등록된 서드 파티 AV 프로그램의 AMSI DLL을 로드한다. 그리고 서드 파티 AV 프로그램의 AMSI DLL이 Export 하는 Scan 함수를 호출하는 방법으로 서드 파티 AV 프로그램의 멀웨어 스캔 기능을 이용할 수 있다.
응용 프로그램이나 서비스가 시스템에 설치된 서드 파티 AV 프로그램의 스캔 인터페이스를 사용할 수 있도록 함으로써 향상된 멀웨어 보호 기능 제공을 목적으로 하기 때문에 윈도우의 몇몇 프로그램만이 AMSI를 사용해 AV 프로그램의 멀웨어 스캔 기능을 사용할 수 있는 것이 아니라 지금 당장 내가 개발한 프로그램도 AMSI를 이용하면 V3 같은 AV 프로그램이 제공하는 멀웨어 스캔 기능을 사용할 수 있다. amsi.h의 AmsiScan* API를 호출하기만 하면 되는데, 자세한 사용법은 AMSI 기능을 이용해보는 글에서 다루겠다.
AMSI 기능
Windows는 아래 항목에 대해 AMSI 기능을 자동으로 사용하도록 되어 있다.
- UAC (EXE, COM, MSI 또는 ActiveX 설치)
- PowerShell (스크립트, 대화형 사용 및 동적 코드 계산)
- Windows 스크립트 호스트 (wscript.exe, cscript.exe)
- JavaScript, VBScript
- Office VBA 매크로
AMSI 구조는 스캔 기능을 제공하는 AMSI Provider와 스캔 기능을 이용하는 일반 응용 프로그램들로 이루어진다. AMSI Provider는 AMSI DLL의 경로를 레지스트리에 추가함으로써 AMSI Provider로 등록될 수 있다. AMSI Provider로 등록한다는 것은 AMSI DLL의 경로를 AMSI 레지스트리에 추가한다는 의미와 일맥상통 하다. AMSI 레지스트리 경로는 아래와 같다. 각 경로에 대한 자세한 설명은 추후 AMSI Provider를 직접 만들어 보는 글에서 설명하겠다.
- HKLM\SOFTWARE\Microsoft\AMSI\Providers\{<GUID>}
- HKLM\SOFTWARE\Classes\CLSID\{<GUID>}
- HKLM\SOFTWARE\WOW6432Node\Microsoft\AMSI\Providers\{<GUID>}
- HKLM\SOFTWARE\WOW6432Node\Classes\CLSID\{<GUID>}
AMSI 사용 예시
powershell.exe, wscript.exe, cscript.exe 등 AMSI 기능을 이용하는 응용 프로그램들은 AmsiScanBuffer나 AmsiScanString을 호출해 자신이 실행할 스크립트같은 데이터를 AMSI Provider에게 전달하고, AMSI Provider는 자신에게 넘어온 문자열, 버퍼 데이터의 악성 여부를 판단하여 응용 프로그램에게 결과를 전달한다. 응용 프로그램은 AMSI Provider가 반환한 결과값을 기반으로 스크립트를 실행할지 말지를 결정하거나 데이터를 처리할지 말지를 결정할 수 있다.
아래 그림은 powershell.exe가 AMSI 기능을 이용하기 위해 amsi.dll을 Import한 모습이다.
'Development > Windows' 카테고리의 다른 글
Windows I/O Manager (0) | 2021.11.19 |
---|---|
#5 AMSI - Regsvr32로 AMSI Provider 등록하기 (0) | 2021.11.11 |
#4 AMSI - AMSI Provider 등록하기 (0) | 2021.11.09 |
#3 AMSI - AMSI Provider 작성하기 (0) | 2021.11.08 |
#2 AMSI - AMSI 스캔 기능 사용하기 (0) | 2021.11.06 |