مؤتمر DEFCON 27. الاستفادة من منتجات القرصنة لنظام التشغيل MacOS. الجزء 1

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

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



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

في الختام ، نحن نبحث عن طرق ارشادية جديدة لا يزال بإمكانها اكتشاف مثل هذه التهديدات لحماية مستخدمي Mac حتى من هذه التهديدات المعدلة. لماذا هذا مطلوب؟ لأن هذه دورة طبيعية للتنمية البشرية ، ونحن ببساطة لا ندرك أن التدمير الذي نراه يعني إدخال تكنولوجيا جديدة ، والتي ، قبل إنشاء وظائف جديدة ، تدمر القديمة.
تحياتي للجميع ، سنناقش اليوم موضوع إنشاء "أسلحة الدمار الشامل" على أساس منتجات اختراق نظام ماكنتوش. اسمي باتريك ، أنا محلل Synack في Digital Security ، وأنا أيضًا منشئ موقع الويب الخاص بأمان Mac ومجموعة الأمان Objective-See المجانية لنظام التشغيل macOS.

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

لنبدأ بمخطط يشرح مفهومًا عملية إعادة استخدام البرامج الضارة لاحتياجاتك الخاصة.



تخيل أن المتسلل A قد طور بعناية برامج ضارة متطورة ومكتملة المزايا وأصابها بأنظمة كمبيوتر مختلفة في جميع أنحاء العالم. تمكنت Hacker B من الحصول على هذه البرامج الضارة عن طريق الصدفة أو عن طريق استخراجها من بعض النظام المصاب. يضع هذا القراصنة عينة من هذا المنتج في مختبره و reprofiles. عندما نتحدث عن إعادة التوصيف ، فإننا نعني إعادة تصميم أو إعادة تكوين بعض البرامج الضارة الموجودة وفقًا لاحتياجاتك.

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



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

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

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

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



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



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

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

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

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

يجب إعادة التعامل مع الملفات الشخصية بمسؤولية كبيرة إذا كنا لا نريد حدوث أشياء سيئة حقًا.



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

الآن دعنا نتحدث على وجه التحديد عن إعادة إنشاء البرامج الضارة لنظام التشغيل Mac ، والغرض منها هو إنشاء برنامج اختراق خاص بشخص آخر.



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



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

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



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

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



توضح هذه الشريحة أننا وجدنا عنوان خادم C&C الأصلي مضمنًا في الكود ويمكنه استبداله بالعنوان الذي نحتاجه في محرر HEX. هذا يعني أنه بعد التعديل ، سيتمكن هذا البرنامج من الاتصال بخادمنا واستقبال المهام من هناك.

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



لا ينبغي أن يكون خادم C&C المخصص معقدًا جدًا ، فما عليك سوى كتابة برنامج نصي Python مؤهل ، ولكن إذا كنت تخطط لاستخدام البرنامج مقابل العديد من الأهداف ، فقد تحتاج إلى شيء أكثر خطورة. تحدث DefCon السابق حول كيفية إنشاء أحد خوادم C&C هذه لتحليل عينات البرامج. من المحتمل أن تكون كل عينة من العينات التي ستحللها مختلفة عن العينات الأخرى التي تستخدم بروتوكولًا مختلفًا ، لذلك ستحتاج إلى خادم C&C منفصل لكل من عينات البرنامج المحول.

إعادة صنع مستتر FruitFly


دعونا نلقي نظرة على عينة حقيقية من إعادة تصميم البرامج الضارة لنظام التشغيل Mac. تم إنشاء هذا الباب الخلفي الذي أنشأه خبراء أمان Mac قبل 15 عامًا باسم FruitFly أو Fruit Fly.

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



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



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

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



ومع ذلك ، لاستخدام هذا الباب الخلفي ، يجب تثبيته على كمبيوتر المستخدم. والخبر السار هو أنني كتبت بالفعل مثل هذا المثبت ، والذي يتوفر على pastebin.com. هناك بضعة سطور من التعليمات البرمجية التي تقوم بتثبيت البرامج الضارة بالطريقة نفسها تمامًا مثل الباب الخلفي الأصلي. نظرًا لأنني سبق أن كتبت خادم C&C لتحليل هذه العينة ، يمكننا أن نبدأ في إظهار عملها.

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

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



يوضح تنفيذ الأمر رقم 13 مكان تثبيت هذه البرامج الضارة في الدليل / Users / Patrick / fpsaud. باستخدام الأمر رقم 2 ، يمكنك التقاط لقطة شاشة ، ويتيح لك استخدام المعلمة 0 التقاط لقطة شاشة بملء الشاشة.



سأحاول الآن التقاط لقطة شاشة وإرسالها إلى خادم C&C. كما ترون ، كل شيء يعمل كما ينبغي. هذه هي الطريقة التي يعمل بها مستتر FruitFly المعاد تصميمها.

تغيير عامل التعدين CreativeUpdate


بعد ذلك ، سنتحدث عن إعادة إنشاء CreativeUpdate cryptocurrency miner لأغراضنا. يعد هذا مفيدًا إذا كنت تريد استخدام أجهزة الكمبيوتر الخاصة بالأشخاص الآخرين لاستخراج التشفير ، ولكن في الوقت نفسه لا يتوفر لديك الوقت والمهارات والموارد.



يدمج عامل تشفير هذا في أحصنة طروادة ويتم توزيعه من خلال تطبيقات الطرف الثالث الشائعة من MacUpdate.com. تعرض الشريحة مثالًا على تثبيت مستعرض Firefox Quantum ، الذي لا يحمل توقيع مطور Mozila الأصلي ويقوم بتنزيل عامل تشفير من أحد خوادم Adobe Creative Cloud إلى كمبيوتر المستخدم.



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



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



نرى أيضًا وسيطات سطر الأوامر التي يتم تمريرها إلى هذا الثنائي. إذا قمت بتنفيذ هذا الملف الثنائي mdworker ، يمكنك أن ترى أنه منجم عملات تشفير قانوني بالكامل مملوك لشركة التعدين Miner Gate.

تشير وسيطات سطر الأوامر أيضًا إلى حساب عامل المناجم الذي سترسل إليه نتائج التعدين ونوع العملة المشفرة للتعدين.

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

بعد ذلك ، نقوم بإعادة تكوين البرنامج النصي بحيث يعمل مع الأرشيف الذي أضفناه. أخيرًا ، نقوم بإعادة حزم كل شيء في صورة Firefox.dmg ويمكننا العمل.



أود أن ألفت انتباهكم التجريبي الثاني. في نافذة الملف ، ترى مكونات التطبيق ، بما في ذلك البرنامج النصي الضار وأرشيف mdworker.zip وملف إعدادات التطبيق AppSettings.plist ومتصفح Firefox الأصلي.



في النافذة الرئيسية ، نرى كيف يبدو المحتوى الذي تم تنزيله من قِبل المستخدم.



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

لمعرفة ما يحدث بالفعل على النظام بعد بدء هذا التطبيق ، أدعو نافذة محطة ماك إلى الشاشة. , mdworker, , patrick@objective-see.com.

- ransomware


, , , - ransomware, .



, KeRanger. , macOS. Bit-Torrent, -. , , .

, General.rtf. , , macOS. , C&C- .



, , , «» . -.

. -, , .



, , HEX- , «», C&C-, 127.0.0.1. RSA , RSA- , NetCat.

. , , KeRanger. NetCat , .



, .



README_FOR_DECRIPT.txt. , : « wardle@objective-see.com!».



Windtall


Windtall. , , APT-. , .



malware. macOS, , URL-.

, . , , , macOS Custom URL, , .

, , , - URL, macOS .

Java . , URL, Mac. Java-, URL, .
, , , , .



, , . , , , , C&C- .

. SPF, , C&C-, , , C&C-.



24:00

DEFCON 27. macOS. الجزء 2


قليلا من الإعلان :)


شكرا لك على البقاء معنا. هل تحب مقالاتنا؟ تريد أن ترى المزيد من المواد المثيرة للاهتمام؟ ادعمنا عن طريق تقديم طلب أو التوصية لأصدقائك ، سحابة VPS للمطورين من 4.99 دولار ، خصم 30 ٪ لمستخدمي Habr على تناظرية فريدة من الخوادم على مستوى الدخول التي اخترعناها لك: الحقيقة الكاملة حول VPS (KVM) E5-2650 v4 (6 النوى) 10GB DDR4 240GB SSD 1Gbps من 20 دولار أو كيفية مشاركة خادم؟ (تتوفر خيارات مع RAID1 و RAID10 ، ما يصل إلى 24 مركزًا وما يصل إلى 40 جيجابايت من ذاكرة DDR4).

ديل R730xd 2 مرات أرخص؟ فقط لدينا 2 من Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6 جيجا هرتز 14 جيجا بايت 64 جيجا بايت DDR4 4 × 960 جيجا بايت SSD 1 جيجابت في الثانية 100 TV من 199 دولار في هولندا! Dell R420 - 2x E5-2430 سعة 2 جيجا هرتز 6 جيجا بايت 128 جيجا بايت ذاكرة DDR3 2x960GB SSD بسرعة 1 جيجابت في الثانية 100 تيرابايت - من 99 دولارًا! اقرأ عن كيفية بناء البنية التحتية فئة باستخدام خوادم V4 R730xd E5-2650d تكلف 9000 يورو عن بنس واحد؟

Source: https://habr.com/ru/post/ar474418/


All Articles