تستمر حملة سلسلة التوريد المرتبطة بـ TeamPCP مع اختراق durabletask v1.4.1, v1.4.2، و v1.4.3. يعتبر DubrableTask هو عميل Microsoft Python الرسمي لإطار عمل سير عمل Permanent Task.
تم عزل هذه الحزم بواسطة PyPi، بعد تحليل Wiz.
السبب الجذري
هناك صلة مباشرة بين ما ورد سابقا @antv موجة وهذه الحزمة للخطر.
تم التعرف على حساب مستخدم مخترق بناءً على نشر المستودعات المتورطة في تلك الموجة. ويمكن ملاحظة نفس الحساب الذي يستهدف microsoft/durabletask-python بين الساعة 15:08 بالتوقيت العالمي و15:16 بالتوقيت العالمي:
يمكننا أن نلاحظ أن المهاجم قام بنسخ أحدث رسالة التزام من الملف الرئيسي، ويتطابق السلوك مع الأمثلة السابقة للاستفادة من بيانات الاعتماد المخترقة لتفريغ الأسرار من GitHub. تشير مسارات العمل في المستودع إلى أن رمز PyPi كان موجودًا ضمن أسرار GitHub.
لذلك يمكننا أن نستنتج أن المهاجم قام باختراق حساب GitHub من خلال هجوم سابق، وألقى أسرار GitHub من مستودع كان للمستخدم حق الوصول إليه، ومن هناك كان لديه حق الوصول إلى رمز PyPi للنشر مباشرة.
الحمولة
الحمولة هي تطور طفيف لتلك التي تم نشرها سابقًا في حل وسط guardrails-ai الحزمة في 11 مايو.
| يصف | المحولات.pyz v2 | مهمة دائمة v1.4.1 | مهمة دائمة v1.4.2 | مهمة دائمة v1.4.3 |
|---|---|---|---|---|
| حالة | حمولة البرامج الضارة | مساومة | مساومة | مساومة |
| المجال C2 | 83.142.209.194 |
check.git-service.com |
check.git-service.com |
check.git-service.com |
| النسخ الاحتياطي C2 | – | t.m-kosche.com |
t.m-kosche.com |
t.m-kosche.com |
| الحمولة | transformers.pyz |
rope.pyz |
rope.pyz |
حبل.pyz |
| نقاط الحقن | __init__.py |
__init__.py |
task.py |
entities/__init__.py, extensions/__init__.py, payload/__init__.py |
| نظام التشغيل المستهدف | لينكس | لينكس | لينكس | لينكس |
| سرقة أوراق الاعتماد | AWS وAzure وGCP وK8s وVault ونظام الملفات وكلمات المرور | نعم (موروث) | نعم (موروث) | نعم (موروث) |
| نشر AWS SSM | لا | نعم | نعم | نعم |
| الحركة الجانبية K8s | لا | نعم | نعم | نعم |
| مدير كلمة المرور Bruteforce | لا | نعم (Bitwarden، 1Password، GPG) | نعم (Bitwarden، 1Password، GPG) | نعم (Bitwarden، 1Password، GPG) |
| تجريف التاريخ | لا | نعم (.bash_history, .zsh_history) |
نعم | نعم |
| حد الانتشار | – | 5 أهداف/مضيف | 5 أهداف/مضيف | 5 أهداف/مضيف |
| علامة العدوى | – | ~/.cache/.sys-update-check |
~/.cache/.sys-update-check |
~/.cache/.sys-update-check |
| مفتاح آر إس إيه | المفتاح أ | المفتاح ب (جديد) | المفتاح ب (جديد) | المفتاح ب (جديد) |
| التحقق من طبقة المقابس الآمنة | عاجز | ممكّن | ممكّن | ممكّن |
ما هي الخطوات التي يجب على فرق الأمن اتخاذها؟
يجب على عملاء Wiz الرجوع إلى مركز Wiz Threat Intelligence Center الاستشاري بشأن هذه الحادثة.
-
تحديد التعرض على الفور: ابحث في ملفات القفل وسجلات CI عن إصدارات Permanenttask 1.4.1 أو 1.4.2 أو 1.4.3. بحث
/tmp/managed.pyzأو/tmp/rope-*.pyzعلى أنظمة لينكس. -
تحقق من الثبات: ابحث عن علامة الإصابة
~/.cache/.sys-update-check(AWS/عام) و~/.cache/.sys-update-check-k8s(Kubernetes) على الأنظمة المتأثرة. يؤكد التواجد تنفيذ الحمولة. تحقق من تشغيل python3/tmp/managed.pyzالعمليات. -
تدوير كافة بيانات الاعتماد: في حالة الاشتباه في التعرض، قم بتدوير بيانات اعتماد AWS (خاصة بيانات اعتماد مستخدم IAM)، وبيانات اعتماد Azure، وحسابات خدمة GCP، وحسابات خدمة Kubernetes، ورموز Vault المميزة، وأي كلمات مرور مخزنة في Bitwarden، أو 1Password، أو pass/gopass. افترض أن تاريخ الصدفة (.bash_history، .zsh_history) قد تم استخلاصه.
-
تدقيق AWS SSM وKubernetes: تحقق من CloudTrail لاستدعاءات SSM:SendCommand وSSM:DescribeInstanceInformation من المثيلات المخترقة. قم بمراجعة سجلات تدقيق Kubernetes بحثًا عن نشاط kubectl exec غير المتوقع. تنتشر الدودة إلى ما يصل إلى 5 أهداف لكل مضيف مصاب.
-
تحقق من جلسات مدير كلمة المرور: قم بمراجعة استخدام Bitwarden (bw) و1Password (op) لواجهة سطر الأوامر (CLI). تحاول الحمولة إلغاء القفل باستخدام القوة الغاشمة باستخدام كلمات المرور المحصودة من متغيرات البيئة وسجل الصدفة.
-
البنية التحتية بلوك C2: حاجز
check.git-service.comوt.m-kosche.comعلى مستوى DNS/الوكيل. حظر الاتصالات الصادرة إلى نقاط نهاية exfil/v1/models,/audio.mp3، و/api/public/version.
للحصول على إرشادات التصلب على المدى الطويل، قام Wiz بتطوير:
مؤشرات التسوية
| ملف | التجزئة |
|---|---|
| حبل.pyz | 069ac1dc7f7649b76bc72a11ac700f373804bfd81dab7e561157b703999f44ce |
| متينة -1.4.1-py3-none-any.whl | 7d80b3ef74ad7992b93c31966962612e4e2ceb93e7727cdbd1d2a9af47d44ba8 |
| متينة -1.4.2-py3-none-any.whl | aeaf583e20347bf850e2fabdcd6f4982996ba023f8c2cd56bbd299cfd56516f5 |
| متينة -1.4.3-py3-none-any.whl | 877ff2531a63393c4cb9c3c86908b62d9c4fc3db971bc231c48537faae6cb3ec |
مؤشرات الشبكة
| يكتب | مؤشر |
|---|---|
| المجال C2 (الابتدائي) | check.git-service.com |
| مجال C2 (ثانوي) | t.m-kosche.com |
| عنوان URL للحمولة | https://check.git-service[.]com/rope.pyz |
| عنوان URL للحمولة (النسخ الاحتياطي) | https://t.m-kosche[.]com/rope.pyz |
| Killswitch/نقطة نهاية الأمر | /v1/models |
| مسح الصوت (إسرائيل/إيران فقط) | /audio.mp3 |
| نقطة النهاية إكسفيل | /api/public/version |
| تراث C2 IP | 83.142.209.194 |
مؤشرات وقت التشغيل
| يكتب | مؤشر |
|---|---|
| الحمولة التي تم تنزيلها | /tmp/managed.pyz |
| الحمولة التي تم تنزيلها | /tmp/rope-*.pyz |
| علامة العدوى (عام) | ~/.cache/.sys-update-check |
| علامة الإصابة (Kubernetes) | ~/.cache/.sys-update-check-k8s |
| ملف حالة SSM | /tmp/.rope_state/ssm_instances.json |
