Anti-Malware Scan Interface (AMSI)

Anti-Malware Scan Interface (AMSI)

 

السلام عليكم ورحمة الله وبركاته ،

هذه المقالة تلقي نظرة بسيطة على الـAMSI

ماهو الـAMSI  :

هو Interface  مُطوّر من قبل Microsoft  لتمكين مُطوري مكافحات الفيروسات من الوصول الى الـ Applications/Services في نظام التشغيل بغرض فحصها أمنيًا.

وبحسب المذكور في موقع Microsoft فإن الـ AMSI موجّه بشكل أساسي لفئتين من المطورين :

-        المطورين الذين يريدون التعامل مع خدمات الـ Anti-Malware Products  ضمن البرامج التي يقومون بتطويرها ( إن صح التعبير الـ AMSI هنا عبارة عن وسيط بين برامج المطورين والـ Anti-Malware Products   المستخدمه في الـMachine  )

-        مُطوري الـ Anti-Malware Products ( الـ AMSI  هنا وسيط بين الـ Anti-Malware Products  والتطبيقات الخاصة بنظام التشغيل )

أيضًا الـ AMSI  يتيح للمطورين الوصول إلى الآتي ( في Windows 10 ) :

-        User Account Control

-        PowerShell

-        Windows Script Host

-        JavaScript and VBScript

-        Office VBA macros

الأن لنبدأ مُناقشة كيف يعمل الـ AMSI

 

كيف يعمل الـ AMSI :

الصورة التالية تُظهِر لنا في أي طبقة يعمل الـ AMSI وماهي التطبيقات التي يخدمها الـ AMSI أيضًا( قد تبدو عبارة "تطبيقات" غير صحيحة هنا، لكن لتقريب الصورة لنسمي أي عنصر يقوم بالاستفادة من الـ AMSI Interface بتطبيق، بغض النظر عن طبيعة عمل هذا العنصر)

AMSI Arch

التطبيقات التي يخدمها الـ AMSI :

-        في هذه الطبقة نجد تطبيقات المطورين الذين يريدون الوصول إلى خدمات مكافحات الفايروسات

-        نجد أيضًا الـ PowerShell والـ VBScript

-        وبقية التطبيقات الأخرى التي قد تقوم بنداء الـ AMSI APIs مثل الـ User Account Control

ولو أردنا التفصيل قليلًا في القائمة السابقة وإعطاء بعض الأمثلة على بعض الحالات :

-        تطبيقات المطورين:قد يقوم مطور ببناء تطبيق يعتمد في طبيعة عمله على تشغيل scripts ، لكن يريد التأكد من سلامة هذا الـ script  ، ففي هذه الحالة يستطيع المطور التعامل مع الـ AMSI APIs والتي ستقوم بدورها بتمرير هذا الـ script إلى الـ Anti-Malware Products لفحصه، وبعدما يتم الإنتهاء من فحص الـ script يستطيع المبرمج تمرير الـ script الى الـ scripting engine  في برنامجه لإستكمال سير البرنامج

-        PowerShell: التعليمات التي يتم كتابتها أو الـ PowerShell scripts ترسل جميعها الى الـ AMSI APIs قبل أن تتم عملية التنفيذ

 

AMSI APIs :

الأن سنفصّل في هذا الجزء و الذي قد يبدو مهمًا ليس فقط للمطورين، لكن أيضًا للـ Red-Teamers الذين يحرصون على تجاوز الحمايات لإستكمال مهماتهم.

يستخدم الـ AMSI الـ Enumerations الأتية :

-        AMSI_ATTRIBUTE

-        AMSI_RESULT : يحدد القيمة التي يتم إرجاعها كنتيجة لعملية الفحص، وهذه القيمة قد تكون:

o      AMSI_RESULT_CLEAN: نتيجة سليمة

o      AMSI_RESULT_NOT_DETECTED: نتيجة سليمة ( No Detection  ) لكن قد تتغير في المستقبل

o      AMSI_RESULT_BLOCKED_BY_ADMIN_START: المحتوى الذي يتم فحصه محجوب بحسب الـ Policy  المعرفة في الجهاز  AMSI_RESULT_BLOCKED_BY_ADMIN_END: المحتوى الذي يتم فحصه محجوب بحسب الـ Policy  المعرفة في الجهاز 

o      AMSI_RESULT_DETECTED: نتيجة غير سليمة

وهذه بعض الدوال الموجودة في الـ  AMSI API ( تستطيع الإطلاع على البقية هنا )  :

-        AmsiInitialize : كما يوحي الأسم ، تقوم بعمل Initialize للـ AMSI API

-        AmsiOpenSession : تقوم بفتح Session مع التطبيق لإستقبال طلبات الفحص ( أود الإشارة هنا بأن عملية الفحص لا تتم من قبل الـ AMSI إنما الـ Anti-Malware Product )

-        AmsiCloseSession : تقوم بإغلاق الـ Session مع التطبيق

-        AmsiScanBuffer : تقوم بفحص محتوى مخزّن في الـ Buffer وتقوم بإرجاع أحد القيم المذكورة في الـ AMSI_RESULT

-        AmsiScanString : تقوم بفحص String ومن ثم تقوم بإرجاع النتيجة كأحد القيم المذكورة في الـ AMSI_RESULT

-        AmsiResultIsMalware : تحدد هل يجب حجب المحتوى أو لا، بحسب القيمة المرجعة من AmsiScanBufferأو AmsiScanBuffer

 

ختامًا، أود الإشارة بأن هذه المقالة تمّت كتابتها خلال دراسة وفهم الـ AMSI ، فكل ما تم ذكره هنا قد يحتمل الخطأ، لكن بالإمكان العودة إلى المراجع التي إستندت عليها هذه المقالة

وإن أصبت فمن توفيق الله وحده، وإن أخطأت فمن نفسي والشيطان

 

مواضيع مُقترحة لفهم عمل الـ AMSI بشكل أكبر:

·       AMSI Functions Tracing (using Frida)

 

المراجع:

مقالات:

·       https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal

·       https://docs.microsoft.com/en-us/windows/win32/amsi/how-amsi-helps

دورات:

·       PTXv2 from eLearnSecurity