كيف يقوم برنامج Ryuk Ransomware بالهجوم على المؤسسات



Ryuk هو أحد خيارات برامج الفدية الأكثر شهرة في السنوات القليلة الماضية. منذ ظهوره لأول مرة في صيف عام 2018 ، قام بتجميع قائمة رائعة من الضحايا ، خاصة في بيئة الأعمال ، التي تعد الهدف الرئيسي لهجماته.

1. معلومات عامة


يحتوي هذا المستند على تحليل لخيار Ryuk ransomware ، بالإضافة إلى برنامج تحميل التشغيل المسؤول عن تنزيل البرامج الضارة إلى النظام.

ظهرت Ryuk Ransomware لأول مرة في صيف عام 2018. أحد الاختلافات بين Ryuk وبرامج الفدية الأخرى هو أنه يهدف إلى مهاجمة بيئات الشركات.

في منتصف عام 2019 ، هاجمت مجموعات الجرائم الإلكترونية عددًا كبيرًا من الشركات الإسبانية بمساعدة هذا التشفير.


تين.


الشكل
1: مقتطفات من مجلة Confidencial بخصوص هجوم Ryuk Ransomware [1] 2: مقتطفات من El País حول هجوم شنه Ryuk Ransomware [2]
هذا العام ، هاجم Ryuk عددًا كبيرًا من الشركات في بلدان مختلفة. كما ترون في الأرقام أدناه ، عانت ألمانيا والصين والجزائر والهند أكثر من غيرها.

بمقارنة عدد الهجمات السيبرانية ، يمكننا أن نرى أن ملايين المستخدمين قد تأثروا بـ Ryuk وأن الكمية الضخمة من البيانات قد تعرضت للخطر ، مما أدى إلى أضرار اقتصادية خطيرة.


تين. 3: توضيح لنشاط ريوك العالمي.


تين. 4: 16 دولة الأكثر تأثراً بـ Ryuk


Fig. 5: عدد المستخدمين الذين هاجمهم برنامج Ryuk ransomware (بالملايين)

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

تم تغيير هذا البرنامج الضار منذ ظهوره لأول مرة.
تم اكتشاف نوع مختلف من هذا التهديد الذي تم تحليله في هذا المستند أثناء محاولة شن هجوم في يناير 2020.

نظرًا لتعقيدها ، غالبًا ما تُنسب هذه البرامج الضارة إلى مجرمي الإنترنت المنظمين ، والمعروفين أيضًا باسم مجموعات APT.

يشبه جزء من كود Ryuk تشابهًا ملحوظًا مع كود وبنية مصور آخر مشفر لهيرميس ، والذي لديه عدد من الوظائف المتطابقة. هذا هو السبب في أن ريوك كان مرتبطا في البداية بمجموعة كوريا الشمالية لازاروس ، التي كان يشتبه في ذلك الوقت بأنها وراء برنامج Hermes Ransomware.

في وقت لاحق ، لاحظت شركة Falcon X من CrowdStrike أن Ryuk تم إنشاؤها بالفعل بواسطة WIZARD SPIDER [4].

هناك بعض الأدلة لدعم هذا الافتراض. أولاً ، تم الإعلان عن برنامج الفدية هذا على موقع exploit.in ، وهو سوق برمجيات خبيثة روسي معروف ومرتبط سابقًا ببعض مجموعات APT الروسية.
هذه الحقيقة تستبعد النظرية القائلة بأن Ryuk يمكن تطويرها من قبل مجموعة Lazarus APT ، مثل هذا لا يتطابق مع الطريقة التي تتصرف بها المجموعة.

بالإضافة إلى ذلك ، تم وصف ريوك كمشفر لن يعمل على الأنظمة الروسية والأوكرانية والبيلاروسية. يتم تحديد هذا السلوك من خلال الوظيفة الموجودة في بعض إصدارات Ryuk ، حيث يتحقق من لغة النظام الذي يعمل به هذا التشفير ويوقف تشغيله إذا كان النظام يحتوي على الروسية أو الأوكرانية أو البيلاروسية. أخيرًا ، عند إجراء تحليل خبير لآلة تم اختراقها بواسطة مجموعة WIZARD SPIDER ، تم اكتشاف العديد من "القطع الأثرية" التي يُفترض أنها تم استخدامها في تطوير Ryuk كمتغير من برنامج Hermes ransomware.

من ناحية أخرى ، اقترح الخبراء غابرييلا نيكولاو ولوسيانو مارتينز أنه ربما تم تطوير برنامج التشفير بواسطة فريق CryptoTech APT [5].
هذا يأتي من حقيقة أنه قبل ظهور ريوك ببضعة أشهر ، نشرت هذه المجموعة معلومات على منتدى نفس الموقع الذي طوروا فيه نسخة جديدة من Hermes ransomware.

تساءل العديد من مستخدمي المنتدى عما إذا كانت CryptoTech قد أنشأت Ryuk بالفعل. بعد ذلك ، دافعت هذه المجموعة عن نفسها وذكرت أن لديها أدلة على أنها طورت 100 ٪ من هذا التشفير.

2. الخصائص


نبدأ باستخدام أداة تحميل التشغيل ، التي تتمثل مهمتها في تحديد النظام الذي توجد فيه ، بحيث يمكنك تشغيل الإصدار "الصحيح" من برنامج تشفير Ryuk.
تجزئة أداة تحميل التشغيل هي كما يلي:

MD5 A73130B0E379A989CBA3D695A157A495
SHA256 EF231EE1A2481B7E627921468E79BB4369CCFAEB19A575748DD2B664ABC4F469

واحدة من ميزات هذا البرنامج لا تحتوي على أي بيانات - لم يتضمن منشئو هذا البرنامج الضار أي معلومات فيه.

في بعض الأحيان ، تتضمن بيانات خاطئة لجعل المستخدم يعتقد أنه يطلق تطبيقًا شرعيًا. ومع ذلك ، كما سنرى لاحقًا ، في حالة عدم اشتمال الإصابة على تفاعل مع المستخدم (كما هو الحال مع هذا المشفر) ، فإن المهاجمين لا يعتبرون أنه من الضروري استخدام البيانات الوصفية.


تين. 6:

عينة بيانات التعريف تم تجميع العينة بتنسيق 32 بت بحيث يمكن تشغيلها على أنظمة 32 بت و 64 بت.

3. ناقلات الاختراق


دخلت العينة التي تقوم بتنزيل وتشغيل Ryuk نظامنا من خلال اتصال بعيد ، وتم الحصول على معلمات الوصول بفضل هجوم RDP الأولي.


تين. 7: تسجيل

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


تين. 8: حجب عينة



الشكل. 9: قفل العينة

عندما تم حظر ملف ضار ، حاول المهاجم تنزيل نسخة مشفرة من الملف القابل للتنفيذ ، والتي تم حظرها أيضًا.


تين. 10: مجموعة من العينات حاول مهاجم تشغيلها

أخيرًا ، حاول تنزيل ملف ضار آخر من خلال وحدة تحكم مشفرة
PowerShell من أجل تجاوز الحماية من الفيروسات. ولكن تم حظره أيضًا.


تين. 11: PowerShell مع المحتوى الضار المحظور


الشكل. 12: PowerShell بمحتوى ضار محظور

4. Bootloader


عند تنفيذه ، يكتب الملف التمهيدي إلى المجلد ٪ temp٪ ، وهو نموذجي في Ryuk. هذا الملف - طلب فدية ، يحتوي على مجال بريد إلكتروني عنوان protonmail ، وهو أمر شائع جدًا في هذه المجموعة من البرامج الضارة: msifelabem1981@protonmail.com




الشكل. 13: متطلبات الاسترداد

أثناء تنفيذ برنامج bootloader ، يمكنك أن ترى أنه يشغل عدة ملفات قابلة للتنفيذ بأسماء عشوائية. يتم تخزينها في مجلد PUBLIC مخفي ، ولكن إذا كان الخيار "إظهار الملفات والمجلدات المخفية" غير نشط في نظام التشغيل ، فسيظل مخفيًا. علاوة على ذلك ، فإن هذه الملفات هي 64 بت على عكس الملف الأصلي ، وهو 32 بت.




تين. 14: الملفات القابلة للتنفيذ التي أطلقتها العينة

كما ترى في الشكل أعلاه ، يطلق Ryuk الملف icacls.exe ، والذي سيتم استخدامه لتعديل جميع قوائم التحكم بالوصول (قائمة التحكم في الوصول) ، وبالتالي ضمان الوصول وتغيير العلامات.

يحصل على وصول كامل لجميع المستخدمين على جميع الملفات الموجودة على الجهاز (/ T) بغض النظر عن الأخطاء (/ C) ودون إظهار أي رسائل (/ Q).


تين. الشكل 15: خيارات تنفيذ الملف icacls.exe التي أطلقتها العينة

، من المهم ملاحظة أن Ryuk يتحقق من إصدار Windows قيد التشغيل. للقيام بذلك ،
يتحقق من الإصدار باستخدام GetVersionExW ، حيث يتحقق من قيمة علامة lpVersionInformationتبين ما إذا كان الإصدار الحالي من Windows أحدث من Windows XP .





بناءً على ما إذا كنت تقوم بتشغيل إصدار أحدث من Windows XP ، ستكتب أداة تحميل التشغيل إلى مجلد المستخدم المحلي - في هذه الحالة ، المجلد ٪ Public٪ .


تين. 17: التحقق من إصدار نظام التشغيل

الملف المسجل هو Ryuk. ثم يطلقها ، ويمرر عنوانها الخاص كمعلمة.


تين. 18: تشغيل Ryuk من خلال ShellExecute

أول شيء يفعله Ryuk هو الحصول على معلمات الإدخال. هذه المرة هناك معلمتان للإدخال (الملف القابل للتنفيذ نفسه وعنوان القطارة) ، والتي يتم استخدامها لإزالة آثارها الخاصة.




تين. 19: إنشاء عملية

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


تين. 20: حذف الملف

5. RYUK


5.1 التواجد
يحاول Ryuk ، مثل البرامج الضارة الأخرى ، البقاء على النظام لأطول فترة ممكنة. كما هو موضح أعلاه ، إحدى الطرق لتحقيق هذا الهدف هي إنشاء الملفات القابلة للتنفيذ وتشغيلها سراً. لهذا ، الممارسة الأكثر شيوعًا هي تعديل مفتاح التسجيل CurrentVersion \ Run .
في هذه الحالة ، يمكنك أن ترى أنه لهذا الغرض ، يقوم الملف القابل للتنفيذ الأول VWjRF.exe
(يتم إنشاء اسم الملف بشكل عشوائي) بتشغيل cmd.exe .




تين. 21: تنفيذ ملف VWjRF.exe

ثم يتم إدخال أمر RUN باسم " svchos"وبالتالي ، إذا كنت تريد التحقق من مفاتيح التسجيل في أي وقت ، فلا يمكنك بسهولة ملاحظة هذا التغيير ، نظرًا لتشابه هذا الاسم مع svchost. وبفضل هذا المفتاح ، يضمن Ryuk وجوده في النظام. إذا لم يكن النظام مصابًا بعد ثم عند إعادة تشغيل النظام ، سيحاول الملف القابل للتنفيذ مرة أخرى


الشكل 22: يضمن النموذج وجود مفتاح التسجيل

يمكننا أيضًا أن نرى أن هذا الملف القابل للتنفيذ يوقف الخدمتين:
" audioendpointbuilder " ، والذي ، كما يوحي اسمه ، يطابق النظام الصوت و


الشكل 23: مثال لتوقف الصوت النظام

و خدمة samss، وهي خدمة إدارة حساب. يعتبر إيقاف هاتين الخدمتين من سمات Ryuk. في هذه الحالة ، إذا كان النظام متصلاً بنظام SIEM ، يحاول المشفر التوقف عن إرسال أي تحذيرات إلى SIEM . وبالتالي ، يدافع عن خطواته التالية ، حيث لن تتمكن بعض خدمات SAM من بدء عملها بشكل صحيح بعد تنفيذ Ryuk.


تين. 24: توقف العينة خدمة Samss

5.2 الامتيازات

بشكل عام ، يبدأ Ryuk بحركة أفقية داخل الشبكة أو يتم إطلاقه بواسطة برنامج ضار آخر ، مثل Emotet أو Trickbot ، والذي في حالة تصعيد الامتياز ينقل هذه الحقوق المرتفعة إلى المشفر.

مقدمًا ، كمقدمة لعملية التنفيذ ، نرى أنها تدير عملية ImpersonateSelf ، مما يعني أنه سيتم نقل محتوى الأمان الخاص برمز الوصول إلى الدفق ، حيث سيتم استلامه على الفور باستخدام GetCurrentThread .


تين. 25: استدعاء ImpersonateSelf

ثم نرى أنه سيربط رمز الدخول مع الدفق. نرى أيضًا أن أحد العلامات هو DesiredAccess ، والذي يمكن استخدامه للتحكم في الوصول الذي سيحصل عليه الدفق. في هذه الحالة ، يجب أن تكون القيمة التي سيحصل عليها edx هي TOKEN_ALL_ACESS ، أو TOKEN_WRITE .




تين. 26: إنشاء رمز دفق

ثم سيتم استخدامهسيقوم SeDebugPrivilege بإجراء مكالمة للحصول على حقوق تصحيح أخطاء Debug فيما يتعلق بالدفق ، ونتيجة لذلك ، من خلال تحديد PROCESS_ALL_ACCESS ، سيتمكن من الوصول إلى أي عملية مطلوبة. الآن ، بالنظر إلى أن التشفير لديه بالفعل تيار جاهز ، يبقى فقط للمتابعة إلى المرحلة النهائية.


تين. 27: استدعاء SeDebugPrivilege ووظيفة تصعيد الحقوق

من ناحية ، لدينا LookupPrivilegeValueW ، الذي يزودنا بالمعلومات اللازمة حول الامتيازات التي نريد رفعها.


تين. 28: طلب معلومات حول الامتيازات لتصعيدها

من ناحية أخرى ، لدينا AdjustTokenPrivileges ، مما يسمح لنا بالحصول على الحقوق اللازمة لتيارنا. في هذه الحالة ، الأهم هو NewState.الذي يمنح علمه امتيازات.




تين. الشكل 29: تحديد حقوق الرمز المميز

5.3

للنشر في هذا القسم ، سنوضح كيف تقوم العينة بعملية النشر المذكورة سابقاً في هذا التقرير.

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

كما هو الحال عادة مع هذا النوع من البرامج الضارة ، فإنه يستخدم CreateToolHelp32Snapshot لإكمال التنفيذ، لذا فإنه يأخذ لقطة من العمليات الجارية حاليًا ويحاول الوصول إلى هذه العمليات باستخدام OpenProcess . بمجرد أن يتمكن من الوصول إلى العملية ، يفتح أيضًا رمزًا مميزًا بمعلوماته للحصول على معلمات العملية.


تين.

الشكل 30: تلقي العمليات من جهاز كمبيوتر يمكننا أن نرى ديناميكيًا كيف يتلقى قائمة بالعمليات الجارية في روتين 140002D9C باستخدام CreateToolhelp32Snapshot. بعد استلامها ، يتصفح القائمة ، محاولًا فتح العمليات واحدة تلو الأخرى باستخدام OpenProcess حتى يتمكن من القيام بذلك. في هذه الحالة ، كانت العملية الأولى التي تمكن من فتحها هي "taskhost.exe" .


تين. 31: التنفيذ الديناميكي لإجراء للحصول على عملية

يمكننا أن نرى أنه يقرأ رمز العملية في وقت لاحق ، لذلك فهو OpenProcessToken مع الشكل " 20008 "


. 32: معلومات الرمز المميز لعملية القراءة

يتحقق أيضًا من أن العملية التي سيتم تضمينها ليست csrss.exe أو explorer.exe أو lsaas.exe أو أن لديها مجموعة من أذونات سلطة NT .


تين. الشكل 33: العمليات المستبعدة.

يمكننا أن نرى ديناميكيًا كيف يتحقق أولاً باستخدام معلومات الرمز المميز للعملية في 140002D9C لمعرفة ما إذا كان الحساب الذي تُستخدم حقوقه في تنفيذ العملية هو حساب NT AUTHORITY .


تين. 34: التحقق من سلطة NT

وبعد ذلك ، خارج الإجراء ، يتحقق من أنه ليس csrss.exe أو explorer.exe أو lsaas.exe .


تين. 35: التحقق من NT NTTHORITY

بعد أن أخذ لقطة للعمليات ، وفتح العمليات والتحقق من عدم استبعاد أي منها ، فهو مستعد لتدوين العمليات التي سيتم تنفيذها في الذاكرة.

للقيام بذلك ، يقوم أولاً بحجز منطقة في الذاكرة ( VirtualAllocEx ) ، ويكتب إليها ( WriteProcessmemory ) ويقوم بإنشاء دفق ( CreateRemoteThread ). للعمل مع هذه الوظائف ، يستخدم PIDs للعمليات المحددة ، التي حصل عليها مسبقًا باستخدام CreateToolhelp32Snapshot .


تين. 36: كود التضمين

هنا يمكننا أن نلاحظ ديناميكيًا كيف يستخدم العملية PID لاستدعاء وظيفة VirtualAllocEx.


تين. الشكل 37: استدعاء

التشفير VirtualAllocEx 5.4
في هذا القسم ، سنلقي نظرة على جزء من هذه العينة المتعلقة بالتشفير. في الشكل التالي ، يمكنك رؤية روتينين يسمى " LoadLibrary_EncodeString " و " Encode_Func " ، وهما مسؤولان عن تنفيذ إجراء التشفير.


تين. 38: إجراءات التشفير

في البداية ، يمكننا أن نرى كيف يتم تحميل سلسلة سيتم استخدامها لاحقًا لإلغاء تشويش كل ما هو مطلوب: عمليات الاستيراد ، DLLs ، الأوامر ، الملفات ، و CSPs.


تين. 39: سلسلة إزالة التعتيم

يوضح الشكل التالي أول استيراد يقوم بإزالته في سجل R4 ، LoadLibrary . سيتم استخدام هذا لاحقًا لتحميل ملفات DLL الضرورية. يمكننا أيضًا رؤية سطر آخر في السجل R12 ، والذي يُستخدم مع السطر السابق لإجراء إزالة التعتيم.


تين. 40: إلغاء التعتيم الديناميكي:

يواصل تحميل الأوامر التي سيقوم بتنفيذها لاحقًا لتعطيل النسخ الاحتياطية ، واستعادة النقاط ، وأوضاع التمهيد الآمن.


تين. 41: تنزيل الأوامر

ثم يقوم بتحميل الموقع الذي سيتم فيه إسقاط 3 ملفات: Windows.bat و run.sct و start.bat .








تين. 42: مواقع الملفات

تُستخدم هذه الملفات الثلاثة للتحقق من الامتيازات التي يمتلكها كل موقع. إذا لم تتوفر الامتيازات المطلوبة ، يتوقف Ryuk عن التنفيذ.

وتستمر في تحميل الخطوط المقابلة لثلاثة ملفات. الأول ، DECRYPT_INFORMATION.html ، يحتوي على المعلومات اللازمة لاستعادة الملفات. يحتوي الثاني ، PUBLIC ، على المفتاح العام RSA.


تين. 43: سلسلة DECRYPT INFORMATION.html

الثالثة ، UNIQUE_ID_DO_NOT_REMOVE ، تحتوي على المفتاح المشفر الذي سيتم استخدامه في الروتين التالي لأداء التشفير.


تين. 44: معرف فريد لا يزيل السلسلة

أخيرًا ، يتم تحميل المكتبات المطلوبة جنبًا إلى جنب مع عمليات الاستيراد المطلوبة و CSP ( Microsoft Enhanced RSAو AES مزود التشفير ).


تين. 45: تنزيل المكتبات

بعد اكتمال عملية إزالة التعتيم ، يواصل تنفيذ الإجراءات المطلوبة للتشفير: التكرار على جميع محركات الأقراص المنطقية ، وتنفيذ ما تم تحميله في الروتين الفرعي السابق ، وتعزيز التواجد في النظام ، وإسقاط ملف RyukReadMe.html ، وتشفير ، وتعداد جميع محركات أقراص الشبكة ، والتحول إلى الأجهزة المكتشفة وتشفيرها.
يبدأ كل شيء بتنزيل " cmd.exe " وكتابة مفتاح RSA العام.


تين. 46: التحضير للتشفير يقوم

بعد ذلك باسترداد كافة محركات الأقراص المنطقية باستخدام GetLogicalDrives وتعطيل كافة النسخ الاحتياطية ونقاط الاسترداد وأوضاع التمهيد الآمن.


تين. 47: إلغاء تنشيط أدوات الاسترداد

بعد ذلك ، يعزز وجوده في النظام ، كما رأينا أعلاه ، ويكتب أول ملف RyukReadMe.html إلى TEMP .


تين.

شكل 48: نشر إشعار إعادة الشراء ، في الشكل التالي ، يمكنك أن ترى كيف يقوم بإنشاء ملف وتنزيل المحتويات وكتابته:


الشكل. شكل 49: تنزيل وتسجيل محتويات الملف ،

لكي يتمكن من تنفيذ نفس الإجراءات على جميع الأجهزة ، يستخدم
" icacls.exe " كما أظهرنا أعلاه.


تين. 50: استخدام icalcls.exe

وأخيرًا ، يبدأ في تشفير الملفات باستثناء ملفات "* .exe" و "* .dll" وملفات النظام والمواقع الأخرى المحددة كقائمة بيضاء مشفرة. لهذا ، فإنه يستخدم عمليات الاستيراد: CryptAcquireContextW (حيث يشار إلى استخدام AES و RSA) ، CryptDeriveKey ، CryptGenKey ، CryptDestroyKey ، إلخ. يتم أيضًا محاولة توسيع تأثيره على أجهزة الشبكة المكتشفة باستخدام WNetEnumResourceW ثم تشفيرها.


تين. 51: تشفير ملفات النظام

6. الواردات والأعلام ذات الصلة


فيما يلي جدول يسرد أهم الواردات والأعلام التي تستخدمها العينة:



7. IOC




المراجع
  • المستخدمين \ العامة \ run.sct
  • قائمة ابدأ \ البرامج \ بدء التشغيل \ ابدأ.بات AppData \ Roaming \ Microsoft \ Windows \ Start
  • Menu \ ProgramsStartup \ start.bat




تقرير Ryuk Ransomware الفني الذي جمعه خبراء مختبر مكافحة الفيروسات PandaLabs.

8. المراجع


1. "Everis y Prisa Radio sufren un خطير ciberataque que secuestra sus sistemas." المتشعب: // شبكة الاتصالات العالمية. elconfidencial.com/tecnologia/2019-11-04/ everis-la-ser-ciberataque-ransomware-15_2312019 /، Publicada el 04/11/2019.

2. "Un virus de origen ruso ataca a importantes empresas españolas." المتشعب: //elpais.com/ tecnologia / 2019/11/04 / activeidad / 1572897654_ 251312.html، Publicada el 04/11/2019.

3. "ورقة VB2019: انتقام شينيجامي: الذيل الطويل لبرمجيات ريوك الخبيثة." Https://securelist.com/ story-of-the-the-the-the-Year-2019-Cities-under-ransomware-siege / 95456 /، Publicada el 11 /

12/2019 4. "لعبة الصيد الكبيرة مع Ryuk: برنامج Ransomware المربح الآخر القائم على الربح". crowdstrike.com/blog/big-game-hunting-with-ryuk-another-lucrative-targeted-ransomware/ ، Publicada el 01/10/2019.

5. "ورقة VB2019: انتقام شينيجامي: الذيل الطويل لبرمجيات ريوك الخبيثة". virusbulletin.com/virusbulletin/2019/10/ vb2019-paper-shinigamis-revenge-long-tail-r

All Articles