# فريق Google Project Zero يطلق أداة MAccConc لكشف حالات السباق في نواة لينكس

> تعرف على كيفية استخدام أداة MAccConc الجديدة من Google Project Zero لاستكشاف حالات السباق في نواة لينكس باستخدام تتبعات KCOV والاختبار الآلي.

- Canonical URL: https://coreiten.com/article/فريق-google-project-zero-يطلق-أداة-maccconc-لكشف-حالات-السباق-في-نواة-لينكس
- Language: ar
- Section: لينكس
- Author: Sami
- Published: 2026-10-09T12:02:34+03:00
- Modified: 2026-10-09T12:02:34+03:00
- Publisher: CoreITen (https://coreiten.com)
- Keywords: MAccConc, KCOV, Google Project Zero, LLVM, نواة لينكس, حالات السباق

## ملخص

أطلق فريق Google Project Zero أداة MAccConc التجريبية لمساعدة مطوري نواة لينكس والباحثين على كشف وإدارة حالات السباق المعقدة باستخدام تتبعات KCOV.

- توفر أداة MAccConc واجهات رسومية وطرفية لتصور تداخلات الوصول إلى الذاكرة وإجراء اختبار آلي لترتيبات التنفيذ من نوع A-B-A.
- تتطلب الأداة تجميع نواة مخصصة عبر إصدار LLVM برقم 23 أو أحدث، وسحب شجرة النواة من فرع kcov-tracing-full عبر مستودع thejh/linux.
- يُعد تثبيت أداة kvmtool هو النهج الموصى به لإقلاع النواة المخصصة بدلاً من استخدام جهاز QEMU الافتراضي القياسي.
- تُكتب حالات الاختبار بلغة C وتتطلب تعريف أربع دوال محددة هي test_setup و test_thread1 و test_thread2 و test_end.
- تتيح أداة kcov-terminal للباحثين تحديد قواعد ترتيب يدوية لإثبات العمليات غير الذرية مثل قراءة UID و GID.

**لماذا يهم:** تنقل هذه الأداة عملية اكتشاف ثغرات التزامن في نواة لينكس من التخمين الاحتمالي إلى منهجية حتمية منظمة.

---

يمتلك الآن مطورو نواة لينكس (Linux Kernel) وباحثو الأمن السيبراني الذين يواجهون صعوبة في عزل حالات السباق (Race Conditions) المعقدة أداة قوية جديدة. فقد أصدر فريق Google Project Zero مجموعة أدوات MAccConc المتخصصة في كشف ثغرات التنفيذ المتزامن وتداخلات الوصول إلى الذاكرة باستخدام تتبعات KCOV. وتُعد حالات السباق من أصعب المشكلات التي يمكن إعادة إنتاجها وتصحيحها، حيث تتطلب غالباً إعدادات معقدة لفرض ترتيب تنفيذ محدد.

وتعالج أداة MAccConc هذه المشكلة من خلال توفير واجهات رسومية وطرفية لتصور هذه التداخلات، إلى جانب الاختبار الآلي لترتيبات التنفيذ من نوع A-B-A. وتجدر الإشارة إلى أن هذه الأداة تجريبية ولا تتأهل لبرنامج مكافآت ثغرات البرمجيات مفتوحة المصدر التابع لشركة Google ([Google Open Source Software Vulnerability Rewards Program](https://bughunters.google.com/open-source-security)).

### متطلبات النواة والمترجم

لاستخدام أداة MAccConc، يجب على الباحثين تجميع نواة مخصصة. ويتطلب ذلك إصداراً من بيئة LLVM برقم 23 أو أحدث، أو بناءً يتضمن التزام dc5c6d008f48. وتتوفر هذه البناءات عبر موقع [apt.llvm.org](https://apt.llvm.org/). كما يجب سحب شجرة النواة من فرع kcov-tracing-full عبر مستودع [thejh/linux](https://github.com/thejh/linux).

وعند تكوين وبناء النواة، يجب تعيين متغيرات محددة كما هو موثق في موقع [kernel.org](https://docs.kernel.org/kbuild/llvm.html) لضمان استخدام سلسلة الأدوات الصحيحة. قم بتعيين متغير البيئة التالي لتوضيح الكتل الأساسية المنفذة وتجنب التباس مكدسات الاستدعاء بسبب تحسين الاستدعاء النهائي:

```bash
export KCFLAGS="-fno-optimize-sibling-calls -mllvm -sanitizer-coverage-prune-blocks=false"
```

تأكد من تعيين علامات تكوين النواة التالية، إما من خلال واجهة التكوين ncurses أو عن طريق لصقها في أسفل ملف.config:

```bash
# for core functionality
CONFIG_SMP=y
CONFIG_NR_CPUS=4
CONFIG_KASAN=y
CONFIG_KASAN_OUTLINE=y
CONFIG_KCOV=y
CONFIG_KCOV_EXT_RECORDS=y
CONFIG_KCOV_MEMORY=y
CONFIG_KALLSYMS_ALL=y

# to give the GUI information about source lines and inlining
CONFIG_DEBUG_INFO_DWARF5=y

# for communicating with the GUI
CONFIG_VSOCKETS=y
CONFIG_VIRTIO_VSOCKETS=y
CONFIG_VIRTIO_PCI=y

# for maximizing the potential for race conditions
CONFIG_PREEMPT=y

# for making virtual addresses at runtime the same as in vmlinux
CONFIG_RANDOMIZE_BASE=n

# needed for several samples
CONFIG_TMPFS=y
```

يمكنك أيضاً تمكين العلامات التالية لاختبار حالات السباق التي تتضمن RCU، على الرغم من أن ذلك سيؤدي إلى تباطؤ كبير ولا يعمل حالياً بشكل صحيح إلا مع واجهة المستخدم الرسومية (**GUI**):

```bash
CONFIG_RCU_EXPERT=y
CONFIG_RCU_STRICT_GRACE_PERIOD=y
```

### إعداد البيئة والإقلاع

صُممت مجموعة الأدوات لتشغيل واجهة المستخدم الرسومية على الجهاز المضيف، بينما تُقلع النواة المخصصة في بيئة ضيف. ويُعد تثبيت أداة kvmtool هو النهج الموصى به بدلاً من استخدام جهاز QEMU الافتراضي القياسي.

```bash
git clone https://git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool.git
cd kvmtool
make
make install
```

بمجرد التثبيت، يمكنك إقلاع النواة المبنية باستخدام الأمر التالي، والذي يوفر واجهة سطر الأوامر (**CLI**) مع عرض للقراءة فقط لنظام ملفات المضيف المثبت في مسار /host:

```bash
lkvm run --kernel [path to kernel tree]/arch/x86/boot/bzImage --vsock 5 --console virtio
```

بعد كل عملية إقلاع، يجب عليك تثبيت debugfs و tmpfs يدوياً في بيئة الضيف:

```bash
sh-5.3# mount -t debugfs none /sys/kernel/debug
sh-5.3# mount -t tmpfs none /tmp
sh-5.3#
```

### كتابة واختبار حالات السباق

تُكتب حالات الاختبار بلغة C ويجب أن تُعرّف أربع دوال محددة لهيكلة مسار التنفيذ. وفي كل عملية تنفيذ، تعمل دالة test_setup() أولاً، تليها دالة test_thread1() ودالة test_thread2() بالتوازي، وتُختتم بدالة test_end().

```c
void test_setup(void) { [...] }
void test_thread1(void) { [...] }
void test_thread2(void) { [...] }
void test_end(void) { [...] }
```

يجب بناء حالات الاختبار هذه كمكتبات مشتركة على الجهاز المضيف:

```bash
$ cc -shared -o [name].so [name].c -fPIC
```

يمكن أيضاً بناء حالات الاختبار النموذجية المتوفرة في مجلد testcase الخاص بالمستودع عبر أداة make:

```bash
$ make testcase/demo-dup-vs-close.so
cc -shared -o testcase/demo-dup-vs-close.so testcase/demo-dup-vs-close.c -Wall
```

### الاختبار الآلي لترتيب A-B-A

تعمل أداة kcov-autorace على أتمتة استكشاف ترتيبات التنفيذ من نوع A-B-A. وفي هذه السيناريوهات، يعمل خيط المعالجة A حتى نقطة محددة، ثم يُنفذ خيط المعالجة B بالكامل، وبعد ذلك ينهي خيط المعالجة A تنفيذه.

```bash
sh-5.3# cd /host/{path to checkout on the host}
sh-5.3# ./kcov-autorace testcase/demo-dup-vs-close.so
loading kallsyms
RCU state (excluded): base=ffffffff82770100 len=500
loading testcase
initializing kcov
collecting A-B coverage
dup(5) = 6 (success)
testing candidates
dup(5) = -1 (Bad file descriptor)
dup(5) = -1 (Bad file descriptor)
dup(5) = -1 (Bad file descriptor)
dup(5) = 5 (success)
dup(5) = 6 (success)
dup(5) = 6 (success)
dup(5) = 6 (success)
dup(5) = 6 (success)
dup(5) = 6 (success)
dup(5) = 6 (success)
dup(5) = 6 (success)
stats:  injection-failed:0  wait-timeout:7  reordered:4
sh-5.3#
```

بالنسبة لقيود الترتيب اليدوية، تتيح أداة kcov-terminal للباحثين تحديد قواعد "يجب أن يحدث A قبل B". ويُعد هذا مفيداً لإثبات العمليات غير الذرية، مثل قراءة UID و GID عبر دالة fstat() مقابل دالة fchown().

```bash
sh-5.3# ./kcov-terminal testcase/demo-inode-attr-change.so
uid=0 gid=0
=====  filtered to interference set, no RCU core  =====
LEGEND:
  type: R=read  W=write  M=modify(read+write)  F=free  A=atomic
```

### أتمتة اكتشاف ثغرات التزامن

ينقل إطلاق أداة MAccConc من فريق Google Project Zero عملية تصحيح أخطاء النواة من نهج يدوي يعتمد على الحدس إلى منهجية حتمية تعتمد على الأدوات. ومن خلال فرض ترتيبات تنفيذ محددة من نوع A-B-A وتصور تداخلات الوصول إلى الذاكرة عبر تتبعات KCOV، يمكن للباحثين الآن إثبات حالات السباق بشكل منهجي بعد أن كانت تعتمد سابقاً على الاحتمالات الإحصائية لتنشيطها.

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

## المصادر

- [kitploit.com](https://kitploit.com/en/tools/github/googleprojectzero/maccconc)

## مواضيع ذات صلة

- [نواة لينكس](https://coreiten.com/topic/%D9%86%D9%88%D8%A7%D8%A9-%D9%84%D9%8A%D9%86%D9%83%D8%B3)
