
تصنيف أجهزة الشبكة القائم على الذكاء الاصطناعي والموجه بالسياق

الباطية هي وعاء ضحل كبير من الخشب أو الحديد استخدمه تقليديًا المنقبون عن الذهب لغسل الرمل والحصى لاستخراج شذرات الذهب.
Batea هو إطار عمل لترتيب أجهزة الشبكة مدفوع بالسياق يعتمد على عائلة خوارزميات تعلم الآلة لاكتشاف الشذوذ. الهدف من Batea هو تمكين فرق الأمن من تصفية الأصول الشبكية المهمة تلقائيًا في الشبكات الكبيرة باستخدام تقارير فحص nmap. نحن نطلق على هذه شذرات الذهب.
لمزيد من المعلومات حول "Gold Nuggeting" والعلم وراء Batea، راجع ورقتنا البحثية هنا
يعمل Batea عن طريق بناء تمثيل رقمي (numpy) لجميع الأجهزة من تقارير nmap الخاصة بك (XML)، ثم تطبيق طرق اكتشاف الشذوذ للكشف عن شذرات الذهب. يمكن توسيعه بسهولة عن طريق إضافة ميزات محددة، أو خصائص مثيرة للاهتمام، إلى التمثيل الرقمي لعناصر الشبكة.
يتم بناء التمثيل الرقمي للشبكة باستخدام ميزات مستوحاة من خبرة مجتمع الأمن. تعمل الميزات كعناصر حدس، وتسمح طرق اكتشاف الشذوذ غير الخاضعة للإشراف باستخدام سياق أصل الشبكة، أو الوصف الكامل للشبكة، كعنصر أساسي في خوارزمية الترتيب. الخوارزمية المستخدمة هي Isolation Forest (https://en.wikipedia.org/wiki/Isolation_forest)
النماذج هي قلب Batea. النماذج هي خوارزميات مدربة على مجموعة البيانات بأكملها وتستخدم للتنبؤ بنتيجة على نفس نقاط البيانات (والنقاط الأخرى) (أجهزة الشبكة). يسمح Batea أيضًا باستمرارية النموذج. أي أنه يمكنك إعادة استخدام نماذج مدربة مسبقًا وتصدير نماذج مدربة على مجموعات بيانات كبيرة لاستخدامها لاحقًا.
# معلومات كاملة
$ sudo nmap -A 192.168.0.0/16 -oX output.xml
# معلومات جزئية
$ sudo nmap -O -sV 192.168.0.0/16 -oX output.xml
$ batea -v output.xml
$ git clone [email protected]:delvelabs/batea.git
$ cd batea
$ python3 setup.py sdist
$ pip3 install -r requirements.txt
$ pip3 install -e .
$ git clone [email protected]:delvelabs/batea.git
$ cd batea
$ python3 -m venv batea/
$ source batea/bin/activate
$ python3 setup.py sdist
$ pip3 install -r requirements-dev.txt
$ pip3 install -e .
$ pytest
# استخدام بسيط (إخراج أفضل 5 شذرات ذهب بالتنسيق الافتراضي)
$ batea nmap_report.xml
# إخراج أفضل 3
$ batea -n 3 nmap_report.xml
# إخراج جميع الأصول
$ batea -A nmap_report.xml
# استخدام ملفات إدخال متعددة
$ batea -A nmap_report1.xml nmap_report2.xml
# استخدام أحرف البدل (xsl افتراضيًا)
$ batea ./nmap*.xml
$ batea -f csv ./assets*.csv
# يمكنك استخدام batea على نماذج مدربة مسبقًا وتصدير النماذج المدربة.
# التدريب والإخراج وتفريغ النموذج للاستمرارية
$ batea -D mymodel.batea nmap_report.xml
# استخدام نموذج مدرب مسبقًا
$ batea -L mymodel.batea nmap_report.xml
# استخدام csv منسق مسبقًا مع ملفات xml
$ batea -x nmap_report.xml -c portscan_data.csv
# ضبط مستوى التفاصيل
$ batea -vv nmap_report.xml
يعمل Batea عن طريق تعيين ميزات رقمية لكل مضيف في التقرير (أو سلسلة من التقارير).
المضيفون هم كائنات بايثون مشتقة من تقرير nmap. تتكون من قائمة السمات التالية: [ipv4, hostname, os_info, ports] حيث ports هي قائمة كائنات منفذ. يحتوي كل منفذ على قائمة السمات التالية: [port, protocol, state, service, software, version, cpe, scripts]، وكلها افتراضيًا None.
الميزات هي كائنات موروثة من فئة FeatureBase تقوم بإنشاء طريقة _transform محددة. تأخذ هذه الطريقة دائمًا قائمة جميع المضيفين كمدخل وتعيد دالة لامبدا (lambda function) تقوم بتعيين كل مضيف إلى عمود numpy من القيم الرقمية (يتم الحفاظ على ترتيب المضيفين). ثم يتم إلحاق العمود بالتمثيل المصفوفي للتقرير. يجب أن تخرج الميزات قيمًا رقمية صحيحة (أعداد صحيحة أو أعداد كسرية) ولا شيء غير ذلك.
يتم تنفيذ معظم تحويلات الميزات باستخدام دالة لامبدا بسيطة. فقط تأكد من تعيين قيمة رقمية افتراضية لكل مضيف لتوافق النموذج.
مثال:
class CustomInterestingPorts(FeatureBase):
def __init__(self):
super().__init__(name="some_custom_interesting_ports")
def _transform(self, hosts):
"""This method takes a list of hosts and returns a function that counts the number
of host ports member from a predefined list of "interesting" ports, defaulting to 0.
Parameters
----------
hosts : list
The list of all hosts
Returns
-------
f : lambda function
Counts the number of ports in the defined list.
"""
member_ports = [21, 22, 25, 8080, 8081, 1234]
f = lambda host: len([port for port in host.ports if port.port in member_ports])
return f
يمكنك بعد ذلك إضافة الميزة إلى التقرير باستخدام طريقة NmapReport.add_feature في batea/__init__.py
from .features.basic_features import CustomInterestingPorts
def build_report():
report = NmapReport()
#[...]
report.add_feature(CustomInterestingPorts())
return report
من الممكن استخدام بيانات معالجة مسبقًا لتدريب النموذج أو للتنبؤ.
يجب فهرسة البيانات باستخدام (ipv4, port) مع مجموعة فريدة واحدة لكل صف. يجب أن يكون نوع البيانات مشابهًا لما تتوقعه من إصدار XML لتقرير nmap.
يجب أن يستخدم عمود واحدًا من الأسماء التالية، لكن ليس عليك استخدامها جميعًا. يقوم المحلل الافتراضي بتعيين قيم فارغة إذا كان العمود غائبًا.
'ipv4',
'hostname',
'os_name',
'port',
'state',
'protocol',
'service',
'software_banner',
'version',
'cpe',
'other_info'
مثال:
ipv4,hostname,os_name,port,state,protocol,service,software_banner
10.251.53.100,internal.delvesecurity.com,Linux,110,open,tcp,rpcbind,"program version port/proto service100000 2,3,4 111/tcp rpcbind100000 2,3,4 "
10.251.53.100,internal.delvesecurity.com,Linux,111,open,tcp,rpcbind,
10.251.53.188,serious.delvesecurity.com,Linux,6000,open,tcp,X11,"X11Probe: CentOS"
بالنسبة لعالم البيانات في داخلك، أو فقط من أجل المتعة والربح، يمكنك إخراج المصفوفة الرقمية مع عمود النتيجة بدلاً من الإخراج العادي. يمكن أن يكون هذا مفيدًا لمزيد من تحليل البيانات وأغراض التصحيح.
$ batea -oM network_matrix nmap_report.xml