
أفاست شل جافاسكريبت التفاعلي
ملاحظة: في 03/11/2020 أعلنت Avast عبر تويتر أنها قررت تعطيل هذا المترجم عالميًا!
العملية الرئيسية لمضاد الفيروسات Avast تُسمى AvastSvc.exe، والتي تعمل كـ SYSTEM.

تلك الخدمة تحمل محرك مضاد الفيروسات منخفض المستوى، وتحلل البيانات غير الموثوقة المستلمة من مصادر مثل مرشح نظام الملفات الصغير أو حركة المرور الشبكية المعترضة.
على الرغم من كونها ذات امتيازات عالية وتعالج مدخلات غير موثوقة حسب التصميم، إلا أنها غير معزولة ولديها تغطية تخفيف ضعيفة. أي ثغرات في هذه العملية تعتبر حرجة ويمكن للمهاجمين عن بُعد الوصول إليها بسهولة.
إذن.. ربما ليس من الجيد أنها تحتوي على مترجم جافا سكريبت مخصص....???? 🙃

يحتوي هذا المستودع على واجهة تفاعلية تسمح لك باختبار المترجم على لينكس لأغراض البحث عن الثغرات.
إليك كيفية تجربته، قم أولاً بتثبيت التبعيات.
$ sudo apt install libreadline-dev:i386 libc6-dev-i386 gcc-multilib
$ sudo yum install readline-devel.i686 glibc-devel.i686 libgcc.i686
الآن يمكنك استنساخ هذا المستودع.
$ git clone https://github.com/taviso/avscript.git
$ cd avscript
$ git submodule update --init --recursive
إذا بدا كل شيء على ما يرام، قم ببنائه وسيكون avscript جاهزًا.
$ make
لأسباب تتعلق بالأداء، لا تقوم Avast بتفسير كل ملف جافا سكريبت تواجهه، بل تستخدم استدلالًا لتحديد ما إذا كان ذلك ضروريًا. لقد وجدت أن إلحاق ملف javascript.txt المضمن في هذا المستودع يكفي دائمًا لتفعيل الاستدلال.
على سبيل المثال، إذا وجدت ثغرة وتريد إعادة إنتاجها على ويندوز، قم أولاً بهذا:
$ cat yourtestcase.js javascript.txt > ReproForWindows.js
الآن تحقق من أنها لا تزال تفعل ما تتوقعه، مثال:
$ ./avscript ReproForWindows.js
main(): File ReproForWindows.js` loaded, about to initialize interpreter...
Segmentation fault (core dumped)
ثم تحقق من تعطل (crash) أعيد إنتاجه على ويندوز.
خدمة Avast هي عملية محمية، مما يعني أن تصحيحها من مساحة المستخدم (userspace) أمر صعب. إذا كان لديك kd مهيئًا، يمكنك ببساطة إلغاء ذلك ثم يعمل التصحيح في مساحة المستخدم بشكل جيد.
حل سريع وسهل يعمل على 32 بت هو القيام بذلك (لاحظ أن PatchGuard لن يسمح بذلك على x64، ولكن يمكنك فعل شيء مشابه باستخدام أوامر نقاط التوقف).

يوجد أيضًا إعداد تحت "استكشاف الأخطاء وإصلاحها" يسمى "تمكين الدفاع الذاتي" يجب تعطيله. أعتقد أن هذا الإعداد يعطيل ربط OpenProcess() في SSDT، حيث يقومون عادةً بإدراج عمليتهم الخاصة في القائمة السوداء.
قد تحتاج إلى تعطيل "الدروع" مؤقتًا في واجهة Avast أثناء الاتصال حتى لا تتسبب عمليات نظام الملفات في توقف تام (deadlock) بينما الخدمة معلقة.
لا تنشر Avast أي رموز (symbols) لمحركها، ولكن التصحيح باستخدام IDA أو gdb لا يزال ممكنًا. هناك بعض الملاحظات حول تصحيح كود ويندوز من لينكس في وثائق loadlibrary.
إذا كنت ترغب في استخدام IDA، أوصي باستخدام خلفية gdbserver.
ببساطة استخدم شيئًا كهذا، قد تحتاج إلى تثبيت حزمة gdbserver أولاً:
$ gdbserver 0.0.0.0:23946 ./avscript
يعمل هذا بشكل جيد بشكل مدهش، حتى نقاط التوقف الزائفة (pseudocode breakpoints) تعمل.

إذا وجدت ثغرة، فمن المحتمل أن تكون حرجة وقابلة للانتشار كدودة.
🔥 يرجى الإبلاغ عنها بشكل عاجل. 🔥