Development/Windows

#4 AMSI - AMSI Provider 등록하기

geunyeong 2021. 11. 9. 20:48

Table of Contents

    Abstract

    AMSI Provider는 Windows의 레지스트리에 AMSI Provider의 프로필과 AMSI DLL 경로를 저장함으로써 AMSI Provider 로 등록된다. 위치는 아래와 같다.

    • AMSI Provider Registry
    HKLM\SOFTWARE\Microsoft\AMSI\Providers\{<GUID>}
    HKLM\SOFTWARE\Classes\CLSID\{<GUID>}
    • AMSI Provider WoW64 Registry
    HKLM\SOFTWARE\WOW6432Node\Microsoft\AMSI\Providers\{<GUID>}
    HKLM\SOFTWARE\WOW6432Node\Classes\CLSID\{<GUID>}

    How to register DLL as AMSI Provider

    AMSI Registry

    Windows 시스템에 AMSI Provider를 등록하는 방법은 레지스트리에 AMSI 관련 키와 값을 만들어 추가하기만 하면 된다. 32비트 윈도우라면 32비트 AMSI DLL을, 64비트 윈도우라면 64비트 AMSI DLL을 아래 레지스트리에 적절히 추가하면 된다. 이 때 GUID는 AMSI DLL을 작성할 때 사용했던 GUID를 사용하면 된다.

    • Key: HKLM\SOFTWARE\Microsoft\AMSI\Providers
    SubKey: {00000000-0000-0000-0000-000000000000}
    Value: (Default)
    Data: "AMSI Provider"
    • Key: HKLM\SOFTWARE\Classes\CLSID
    SubKey: {00000000-0000-0000-0000-000000000000}
    Value: (Default)
    Data: "AMSI Provider"

    SubKey: {00000000-0000-0000-0000-000000000000}\InProcServer32
    Value: (Default)
    Data: "C:\...\amsiprovider.dll"

    SubKey: {00000000-0000-0000-0000-000000000000}\InProcServer32
    Value: ThreadingModel
    Data: "Both"

    만약 64비트 Windows에서 32비트 프로그램에 대한 AMSI 스캔 기능도 지원하고자 한다면 WoW64 레지스트리에도 위와 같이 키와 값을 적절히 만들어주면 된다. AMSI DLL의 경로는 32비트 AMSI DLL을 가리켜야 한다.

    • Key: HKLM\SOFTWAR\WOW6432Node\Microsoft\AMSI\Providers
    SubKey: {00000000-0000-0000-0000-000000000000}
    Value: (Default)
    Data: "AMSI Provider"
    • Key: HKLM\SOFTWARE\WOW6432Node\Classes\CLSID
    SubKey: {00000000-0000-0000-0000-000000000000}
    Value: (Default)
    Data: "AMSI Provider"

    SubKey: {00000000-0000-0000-0000-000000000000}\InProcServer32
    Value: (Default)
    Data: "C:\...\amsiprovider32.dll"

    SubKey: {00000000-0000-0000-0000-000000000000}\InProcServer32
    Value: ThreadingModel
    Data: "Both"

    AMSI Provider를 등록하면 아래 그림처럼 된다.

     

    AMSI Provider 프로필 레지스트리
    AMSI 구성 정보 레지스트리

    Run AMSI Provider

    레지스트리에 등록하면 즉시 AMSI Provider로 동작하게 된다. AMSI를 사용하는 PowerShell을 하나 띄우고 아무 명령이나 입력하면 PowerShell에서 입력한 명령을 DebugView로 볼 수 있다.

     

    DebugView로 확인한 AMSI DLL 동작 모습

     

    PowerShell 프로세스가 로드한 모듈 목록을 살펴보면 AMSI 레지스트리에 등록한 amsiprovider.dll이 로드된 것을 볼 수 있다.

     

    amsiprovider.dll을 로드한 PowerShell 프로세스

    Easy way to register

    편하게 등록하고 싶다면 .reg 파일을 만들어 실행시키는 방법도 있다. 다만 AMSI DLL 경로가 고정된다는 단점이 있으므로 regsvr32를 이용한 방법이나 혹은 직접 레지스트리에 추가하는 프로그램을 작성해 실행하는 방법이 좋을 수 있다.

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AMSI\Providers\{00000000-0000-0000-0000-000000000000}]
    @=<AMSI Provider Name>

    [HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}\InProcServer32]
    @=<AMSI DLL Path>
    "ThreadingModel"="Both"

    삭제하고 싶다면 아래 .reg 파일을 실행시키면 된다.

    Windows Registry Editor Version 5.00

    [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AMSI\Providers\{00000000-0000-0000-0000-000000000000}]

    [-HKEY_CLASSES_ROOT\CLSID\{00000000-0000-0000-0000-000000000000}]

    'Development > Windows' 카테고리의 다른 글

    Windows I/O Manager  (0) 2021.11.19
    #5 AMSI - Regsvr32로 AMSI Provider 등록하기  (0) 2021.11.11
    #3 AMSI - AMSI Provider 작성하기  (0) 2021.11.08
    #2 AMSI - AMSI 스캔 기능 사용하기  (0) 2021.11.06
    #1 AMSI - 개요  (0) 2021.11.05