AMSI(Anti Malware Scan Interface)
AMSI(Anti Malware Scan Interface)
AMSI는 애플리케이션 및 서비스가 컴퓨터에 있는 모든 AntiVirus 제품과 통합할 수 있는 다용도 인터페이스 표준이다.
다양한 프로그램 이나 AV 제품에서 AMSI를 호출하여 Malware 검사 및 보호할 수 있으며, 파일 및 메모리 검사, 콘텐츠 원본 URL/IP 신뢰도 검사 및 기타 기술을 허용하는 호출 구조로 동작한다.
AMSI는 특히 Fileless Malware
에 대처하기 위해 설계되었다.
AMSI Architecture
위 구조처럼 Powershell, VBScript, 3rd Party Application에서 Win32 API 또는 COM을 통해 AMSI의 기능을 사용할 수 있다.
AMSI를 사용하는 예시로 아래는 반디집에서 AMSI를 통해 압축 파일 내부의 Malware를 스캔할 수 있다.
또한 반디집의 하위 프로세스로 Amsiman.x64.exe
프로세스가 실행되고있고, 해당 프로세스에서는 amsi.dll
을 로드한다.
amsi.dll에서 AMSI Provider에게 Scan 요청을 하게되고 AMSI Provider는 Scan 결과를 반환해준다.
AMSI Provider는 Default로 Windows Defender로 설정되어 있고, Endpoint에서 AMSI를 지원하는 다른 AV 제품을 설치하여 사용 중이라면 해당 AV가 AMSI Provider로써 요청을 받아 결과를 반환하게 된다.
AMSI 실습
AMSI Test Script
https://www.blackhillsinfosec.com/is-this-thing-on/
PowerShell에서 AMSI Test Script를 실행해보면 아래 화면 처럼 Malicious Content로 Block이 되었다는 오류가 발생한다.
AMSI를 통해 악성 스크립트를 차단한 결과이다.
아래 Github의 AMSI Sample 코드를 통해 AMSI Scan을 직접 확인해보자.
https://github.com/geun-yeong/amsi-example/tree/main
AMSI Client를 다운로드 받아 입력 파라미터를 AMSI Test Sample: 7e72c3ce-861b-4339-8740-0ac1484c1386
로 설정하고 return 값이 출력되도록 한 후 빌드를 진행하고 실행해본다.
AMSI Scan으로 인해 Return 값이 32768로 나오게 되고 해당 Return 값은 amsi.h에 정의된 AMSI_RESULT에서 AMSI_RESULT_DETECTED로 정의되어 있어 MALICIOUS로 출력이 된다.
# amsi.h
typedef enum AMSI_RESULT
{
AMSI_RESULT_CLEAN = 0,
AMSI_RESULT_NOT_DETECTED = 1,
AMSI_RESULT_BLOCKED_BY_ADMIN_START = 0x4000,
AMSI_RESULT_BLOCKED_BY_ADMIN_END = 0x4fff,
AMSI_RESULT_DETECTED = 32768
} AMSI_RESULT;
AMSI를 통해 Fileless 및 스크립트 기반 공격을 차단하기에 좋은것 같다. 다양한 AV 제품에서도 AMSI Provider에 등록되어 제공하고 있어 혹시 윈도우에서 실행되는 앱을 개발할 일이 있다면 적용하기 좋을것같다.
다만 AMSI Provider를 호출하는 과정에서나 DLL Hijacking 등의 방법으로 Bypass 하는 방법도 여러가지가 있는것으로 보여 유의해야할거같다.
AMSI Bypass Techniques
https://www.trendmicro.com/ko_kr/research/22/l/detecting-windows-amsi-bypass-techniques.html
참고
- https://learn.microsoft.com/en-us/windows/win32/api/_amsi/
- https://geun-yeong.tistory.com/44
- https://www.blackhillsinfosec.com/is-this-thing-on/
- https://suspected.tistory.com/272