
Stenographer هو حل لالتقاط الحزم يهدف إلى تخزين جميع الحزم بسرعة على القرص، ثم توفير وصول بسيط وسريع إلى مجموعات فرعية من تلك الحزم. النقاشات/الإعلانات على [email protected]
Stenographer هي أداة لالتقاط الحزم بالكامل (full-packet-capture) لتخزين الحزم مؤقتاً على القرص لأغراض كشف الاختراقات والاستجابة للحوادث. توفر تنفيذاً عالي الأداء لكتابة الحزم من بطاقة الشبكة إلى القرص، وتتعامل مع حذف تلك الملفات عندما يمتلئ القرص، وتوفر طرقاً لقراءة مجموعات محددة من الحزم بسرعة وسهولة.
صُممت لتقوم بـ:
ليست مصممة لـ:
معالجة الحزم المعقدة (إعادة تجميع تدفق TCP، إلخ)
إنها سريعة لأنها لا تفعل ذلك. حتى مع المعالجة البسيطة جداً ذات المسار الواحد للحزم التي نقوم بها، فإن معالجة ~1 جيجابت/ثانية للفهرسة وحدها قد تستهلك >75% من نواة معالج واحدة.
معالجة البيانات بقراءتها مرة أخرى من القرص لا تعمل أيضاً: راجع النقطة التالية.
قراءة كميات كبيرة من الحزم (> 1% من الحزم المكتوبة)
المفهوم الأساسي هنا هو أن قراءة القرص تنافس كتابة القرص... يمكنك الكتابة بنسبة 90% من سرعة القرص، لكن ذلك يمنحك فقط 10% من وقت القرص للقراءة. أيضاً، نحن نكتب بيانات متسلسلة للغاية، وهو ما تجيده الأقراص بسرعة، ونقرأ عادةً بيانات متفرقة مع الكثير من عمليات البحث (seeks)، وهو ما تفعله الأقراص ببطء.
لمزيد من القراءة، راجع DESIGN.md لمناقشة تصميم stenographer، أو اقرأ INSTALL.md لكيفية تثبيت stenographer على جهاز.
يطلب المستخدم حزمًا من stenographer بتحديدها باستخدام لغة استعلام بسيطة جدًا. هذه اللغة هي مجموعة جزئية بسيطة من BPF، وتتضمن الأوليات:
host 8.8.8.8 # عنوان IP واحد (أسماء المضيفين غير مسموح بها)
net 1.0.0.0/8 # شبكة مع CIDR
net 1.0.0.0 mask 255.255.255.0 # شبكة مع قناع
port 80 # رقم المنفذ (UDP أو TCP)
ip proto 6 # رقم بروتوكول IP 6
icmp # يعادل 'ip proto 1'
tcp # يعادل 'ip proto 6'
udp # يعادل 'ip proto 17'
# إضافات الوقت الخاصة بـ Stenographer:
before 2012-11-03T11:05:00Z # حزم قبل وقت محدد (UTC)
after 2012-11-03T11:05:00-07:00 # حزم بعد وقت محدد (مع المنطقة الزمنية)
before 45m ago # حزم قبل وقت نسبي
after 3h ago # حزم بعد وقت نسبي
ملاحظة: يجب قياس الأوقات النسبية بقيم صحيحة من الساعات أو الدقائق كما هو موضح أعلاه.
يمكن دمج الأوليات باستخدام and/&& و or/||، والتي لها أولوية متساوية ويتم تقييمها من اليسار إلى اليمين. يمكن أيضًا استخدام الأقواس للتجميع.
(udp and port 514) or (tcp and port 8080)
يقوم سكريبت سطر الأوامر stenoread بأتمتة سحب الحزم من Stenographer وتقديمها في تنسيق قابل للاستخدام للمحللين. يطلب الحزم الخام من stenographer، ثم يمررها عبر tcpdump لتوفير تجربة تنسيق/تصفية أكثر اكتمالاً. الوسيطة الأولى لـ stenoread هي استعلام stenographer (انظر 'لغة الاستعلام' أعلاه). جميع الوسائط الأخرى تُمرّر إلى tcpdump. على سبيل المثال:
# Request all packets from IP 1.2.3.4 port 6543, then do extra filtering by
# TCP flag, which typical stenographer does not support.
$ stenoread 'host 1.2.3.4 and port 6543' 'tcp[tcpflags] & tcp-push != 0'
# Request packets on port 8765, disabling IP resolution (-n) and showing
# link-level headers (-e) when printing them out.
$ stenoread 'port 8765' -n -e
# Request packets for any IPs in the range 1.1.1.0-1.1.1.255, writing them
# out to a local PCAP file so they can be opened in Wireshark.
$ stenoread 'net 1.1.1.0/24' -w /tmp/output_for_wireshark.pcap
لتنزيل الكود المصدري، قم بتثبيت Go محلياً، ثم شغّل:
$ go get github.com/google/stenographer
سيتولى Go تنزيل وتثبيت جميع مكتبات Go التي يعتمد عليها stenographer. لبناء stenotype، انتقل إلى مجلد stenotype وشغّل make. قد تحتاج إلى تثبيت حزم Ubuntu التالية (أو ما يعادلها على توزيعات Linux الأخرى):
هذا ليس منتجًا رسميًا من Google (تجريبيًا أو غيره)، إنه مجرد كود يمتلكه Google بالصدفة.
هذا الكود ليس مخصصًا (أو مستخدمًا) لمراقبة مستخدمي Google. الغرض منه هو زيادة الأمان على شبكاتنا من خلال تعزيز قدرات المراقبة الداخلية لدينا.