Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
community-id-spec — معيار مفتوح لتجزئة تدفقات الشبكة إلى معرّفات، يُعرف أيضًا باسم "Community IDs". | Kitploit
أدوات/GitHubGitHub/corelight/community-id-spec
أمن الشبكاتالتحاليل الرقمية الجنائيةالأدوات والمكوناتاستخبارات التهديداتكشف التسللالاستجابة للحوادثتحليل السجلات
GitHubcorelight/community-id-spec

community-id-spec

معيار مفتوح لتجزئة تدفقات الشبكة إلى معرّفات، يُعرف أيضًا باسم "Community IDs".

عرض المستودع
19625منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

تجزئة تدفقات Community ID

عند معالجة بيانات التدفقات الواردة من مجموعة متنوعة من تطبيقات المراقبة (مثل Zeek وSuricata)، غالبًا ما يكون من المرغوب التنقّل بسرعة من مجموعة بيانات إلى أخرى. وفي حين تكون معلومات مُجمَّعة التدفق المطلوبة متوفرة عادةً في مجموعات البيانات، فإن تفاصيل عمليات «الربط» هذه قد تكون مملة، ولا سيما في الحالات الحدّية. تصف هذه المواصفة تجزئة تدفقات «Community ID»، إذ توحّد إنتاج معرّف نصّي يمثّل تدفق شبكة معيّنًا، بحيث يُختزل التنقّل إلى مجرد مقارنة نصوص بسيطة.

شبه الكود

root@kitploit:~
function community_id_v1(ipaddr saddr, ipaddr daddr, port sport, port dport, int proto, int seed=0)
{
    # Get seed and all tuple parts into network byte order
    seed = pack_to_nbo(seed); # 2 bytes
    saddr = pack_to_nbo(saddr); # 4 or 16 bytes
    daddr = pack_to_nbo(daddr); # 4 or 16 bytes
    sport = pack_to_nbo(sport); # 2 bytes
    dport = pack_to_nbo(dport); # 2 bytes

    # Abstract away directionality: flip the endpoints as needed
    # so the smaller IP:port tuple comes first.
    saddr, daddr, sport, dport = order_endpoints(saddr, daddr, sport, dport);

    # Produce 20-byte SHA1 digest. "." means concatenation. The
    # proto value is one byte in length and followed by a 0 byte
    # for padding.
    sha1_digest = sha1(seed . saddr . daddr . proto . 0 . sport . dport)

    # Prepend version string to base64 rendering of the digest.
    # v1 is currently the only one available.
    return "1:" + base64(sha1_digest)
}

function community_id_icmp(ipaddr saddr, ipaddr daddr, int type, int code, int seed=0)
{
    port sport, dport;

    # ICMP / ICMPv6 endpoint mapping directly inspired by Zeek
    sport, dport = map_icmp_to_ports(type, code);

    # ICMP is IP protocol 1, ICMPv6 would be 58
    return community_id_v1(saddr, daddr, sport, dport, 1, seed); 
}

التفاصيل التقنية

  • إنّ Community ID هو معرّف تدفق إضافي ولا يلزم أن يحل محل آليات تعريف التدفق الموجودة التي تدعمها أدوات المراقبة. ومع ذلك، لا بأس في ضبط أداة مراقبة بحيث تسجّل Community ID فقط، إذا كان ذلك مرغوبًا.

  • يمكن حساب Community ID في الوقت الذي تُنتج فيه أداة المراقبة التدفقات، أو يمكن أيضًا إضافته إلى سجلات التدفق الموجودة في مرحلة لاحقة، بافتراض أن تلك السجلات تتضمّن جميع معلومات نقاط نهاية التدفق المطلوبة.

  • التصادمات في Community ID، وإن كانت غير مرغوبة، لا تُعتبر قاتلة؛ إذ ينبغي أن تظل بحوزة المستخدم معلومات توقيت التدفق، وربما آلية المعرّف الأصلية لأداة المراقبة (والأمل أن تكون أقوى من Community ID) لإزالة الالتباس.

  • تعتمد آلية التجزئة على البذر (seeding) لإتاحة تحكّم إضافي في «نطاقات» استخدام Community ID. القيمة الافتراضية للبذرة هي 0، وبالتالي تبقى هذه الآلية بمعزل عن العملية، فلا تؤثر على المشغّلين غير المهتمين بها.

  • في الإصدار 1 من المعرّف، تكون خوارزمية التجزئة هي SHA1. وقد تغيّرها إصدارات تجزئة مستقبلية أو تتيح إعدادات إضافية.

  • تُرمَّز النتيجة الثنائية لحجم 20 بايت من SHA1 بترميز base64 لتقليل حجم المخرجات مقارنة بالتمثيل المعتاد لـSHA1 القائم على ASCII. يفترض ذلك أن المساحة هي الشاغل الأساسي، لا زمن الحساب، وقد يصبح هذا الخيار قابلاً للضبط في إصدار لاحق.

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

    يقتصر مخطط الإصدارات حاليًا على إضافة البادئة «:» إلى قيمة التجزئة، منتجًا ما يشبه هذا في الإصدار الحالي 1:

    1:hO+sN4H+MG5MY/8hIrXPqc4ZQz0=

  • تتم محاذاة مدخلات التجزئة على حدود 32-بت. تستخدم مكوّنات مُجمَّعة التدفق ترتيب بايتات الشبكة (big-endian) لتوحيد الترتيب بغض النظر عن عتاد المضيف.

  • تُرتَّب مدخلات التجزئة لإزالة الاتجاهية من مُجمَّعة التدفق: قم بتبديل نقاط النهاية، عند الحاجة، بحيث تأتي مُجمَّعة IP:port الأصغر عدديًا أولاً. إذا تساوت عناوين IP، تحسم المنافذ الأمر. على سبيل المثال، تُنتج مُجمَّعات netflow الخماسية التالية تجزئات Community ID متطابقة، لأن كلتيهما تُرتَّبان في التسلسل 10.0.0.1، 127.0.0.1، 1234، 80.

    • Proto: TCP; SRC IP: 10.0.0.1; DST IP: 127.0.0.1; SRC Port: 1234; DST Port: 80
    • Proto: TCP; SRC IP: 127.0.0.1; DST IP: 10.0.0.1; SRC Port: 80; DST Port: 1234
  • يتضمّن هذا الإصدار البروتوكولات والحقول التالية:

التنفيذ المرجعي

يتوفر تنفيذ كامل في حزمة pycommunityid. تتضمّن مجموعة من الاختبارات للتحقق من صحة الحساب لمختلف البروتوكولات. ونوصي بها دليلًا للتنفيذات الجديدة.

يتوفر تنفيذ أصغر أيضًا عبر سكربت community-id.py في هذا المستودع، بما في ذلك تخطيط البايتات للقيم المجزَّأة (انظر packet_get_comm_id()). راجع --help وmake.sh للبدء:

root@kitploit:~
  $ ./community-id.py --help
  usage: community-id.py [-h] [--seed NUM] PCAP [PCAP ...]

  Community flow ID reference

  positional arguments:
    PCAP         PCAP packet capture files

  optional arguments:
    -h, --help   show this help message and exit
    --seed NUM   Seed value for hash operations
    --no-base64  Don't base64-encode the SHA1 binary value
    --verbose    Show verbose output on stderr

للاستكشاف وإصلاح الأخطاء، يدعم التنفيذ إمكانية حذف عملية base64، ويمكنه تقديم تفاصيل إضافية حول التسلسل الدقيق للبايتات التي تدخل في حساب تجزئة SHA1.

البيانات المرجعية

يحتوي دليل baseline في هذا المستودع على مجموعات بيانات تساعدك في التحقق من أن تنفيذك لـCommunity ID يعمل بشكل صحيح.

وحدات/مكتبات قابلة لإعادة الاستخدام

  • C
    • https://github.com/corelight/c-community-id
    • https://github.com/ntop/nDPI (3.2+، التفاصيل هنا)
  • C#: https://github.com/decompile/community-id-dotnet-core
  • Golang: https://github.com/satta/gommunityid
  • Java: https://github.com/rapid7/community-id-java
  • JavaScript: https://github.com/corelight/communityid-js
  • Python: https://github.com/corelight/pycommunityid
  • Rust: https://crates.io/crates/communityid

تنفيذات الإنتاج

  • Arkime (1.7.0+): https://github.com/arkime/arkime/issues/966
  • Elastic Beats: مثل https://www.elastic.co/guide/en/beats/packetbeat/master/community-id.html
  • Elastic Common Schema: https://github.com/elastic/ecs/blob/master/schemas/network.yml
  • Elasticsearch (7.12.0+): https://www.elastic.co/guide/en/elasticsearch/reference/master/community-id-processor.html
  • HELK: https://github.com/Cyb3rWard0g/HELK (مع تنفيذ Ruby)
  • LogScale/Humio: https://library.humio.com/falcon-logscale/functions-communityid.html
  • MISP: https://www.misp-project.org/2019/07/19/MISP.2.4.111.released.html
  • MISP-wireshark: https://github.com/MISP/misp-wireshark
  • Osquery (4.2.0+): https://osquery.readthedocs.io/en/latest/introduction/sql/#sql-additions, تدوينة
  • Qosmos ixEngine: https://www.qosmos.com/wp-content/uploads/Enea-Qosmos-ixEngine-Suricata-Solution-Brief-20211202.pdf
  • Security Onion (2.0+): https://docs.securityonion.net/en/2.3/community-id.html
  • Suricata (4.1+): https://suricata.readthedocs.io/en/suricata-4.1.2/output/eve/eve-json-output.html#community-flow-id
  • VAST: https://github.com/vast-io/vast/pull/525

طلبات ميزات في مشاريع أخرى

  • https://github.com/MicrosoftDocs/sysinternals/issues/219

محاضرات

  • SuriCon 2018
  • FOSDEM 2021

تدوينات وموارد أخرى

  • نماذج التقاط لبروتوكولات QUIC وDoH وCommunityID وWPA3 وغيرها في CloudShark 3.10, qacafe.com
  • ربط اتصالات الشبكة مع Community ID في osquery, fleetdm.com
  • توليد Community IDs باستخدام Sysmon وWinlogbeat, holdmybeersecurity.com

النقاش

لا تتردد في مناقشة جوانب Community ID عبر GitHub هنا: https://github.com/corelight/community-id-spec/issues

تنزيل الأداة
  • TCP / UDP / SCTP:

    IP src / IP dst / IP proto / source port / dest port

  • ICMPv4 / ICMPv6:

    IP src / IP dst / IP proto / ICMP type + "counter-type" or code

    إنّ المعالجة الدقيقة لنوع ICMP ورمزه (code) مأخوذة من Zeek؛ انظر التنفيذات هنا:

    • https://github.com/corelight/pycommunityid/blob/master/communityid/icmp.py
    • https://github.com/corelight/pycommunityid/blob/master/communityid/icmp6.py
    • https://github.com/zeek/zeek/blob/master/src/analyzer/protocol/icmp/ICMP.cc#L860
  • بروتوكولات أخرى محمولة عبر IP:

    IP src / IP dst / IP proto

  • لا يغطي ما سبق حاليًا كيفية التعامل مع التداخل (IP داخل IP، وv6 فوق v4، وما إلى ذلك)، وكذلك التغليفات مثل VLAN وMPLS.

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

  • اعتبروا v1 نموذجًا أوليًا. آراء المجتمع، ولا سيما المنفِّذين والمستخدمين التشغيليين للمعرّف، محل تقدير بالغ. يرجى إنشاء issues مباشرةً في مشروع GitHub على https://github.com/corelight/community-id-spec، أو التواصل مع Christian Kreibich ([email protected]).

  • شكر جزيل على النقاش المفيد والملاحظات لكل من Victor Julien وJohanna Amann وRobin Sommer، وكذلك لجميع المنفِّذين والداعمين.

  • Wireshark (3.3.1+): https://www.wireshark.org/news/20201001.html
  • حزمة Zeek (2.5+): https://github.com/corelight/zeek-community-id
  • ntopng: https://github.com/ntop/ntopng