
AI-आधारित, संदर्भ-संचालित नेटवर्क डिवाइस रैंकिंग

बाटिया एक बड़ा उथला बर्तन होता है, जो लकड़ी या लोहे का बना होता है और पारंपरिक रूप से सोने की खोज करने वालों द्वारा रेत और बजरी धोने के लिए उपयोग किया जाता है ताकि सोने के डले निकाले जा सकें।
Batea एक संदर्भ-चालित नेटवर्क उपकरण रैंकिंग ढाँचा है जो मशीन लर्निंग एल्गोरिदम के असामान्यता पहचान (anomaly detection) परिवार पर आधारित है। Batea का उद्देश्य सुरक्षा टीमों को nmap स्कैन रिपोर्ट का उपयोग करके बड़े नेटवर्क में स्वचालित रूप से दिलचस्प नेटवर्क संपत्तियों को फ़िल्टर करने की अनुमति देना है। हम इन्हें Gold Nuggets कहते हैं।
गोल्ड नगेटिंग और Batea के पीछे के विज्ञान के बारे में अधिक जानकारी के लिए, हमारी श्वेतपत्रिका यहाँ देखें।
Batea आपके nmap रिपोर्ट (XML) से सभी उपकरणों का एक संख्यात्मक निरूपण (numpy) बनाकर और फिर गोल्ड नगेट्स को उजागर करने के लिए असामान्यता पहचान विधियों को लागू करके काम करता है। यह नेटवर्क तत्वों के संख्यात्मक निरूपण में विशिष्ट सुविधाओं या दिलचस्प विशेषताओं को जोड़कर आसानी से विस्तार योग्य है।
नेटवर्क का संख्यात्मक निरूपण सुविधाओं का उपयोग करके बनाया गया है, जो सुरक्षा समुदाय की विशेषज्ञता से प्रेरित हैं। ये सुविधाएँ अंतर्ज्ञान के तत्वों के रूप में कार्य करती हैं, और अप्रशिक्षित असामान्यता पहचान विधियाँ नेटवर्क संपत्ति के संदर्भ, या नेटवर्क के पूर्ण विवरण को रैंकिंग एल्गोरिदम के केंद्रीय निर्माण खंड के रूप में उपयोग करने की अनुमति देती हैं। उपयोग किया गया सटीक एल्गोरिदम Isolation Forest (https://en.wikipedia.org/wiki/Isolation_forest) है।
मशीन लर्निंग मॉडल Batea का हृदय हैं। मॉडल ऐसे एल्गोरिदम हैं जो पूरे डेटासेट पर प्रशिक्षित होते हैं और उसी (और अन्य) डेटा बिंदुओं (नेटवर्क उपकरणों) पर स्कोर की भविष्यवाणी करने के लिए उपयोग किए जाते हैं। Batea मॉडल की स्थायित्व (persistence) की भी अनुमति देता है। अर्थात, आप पूर्व-प्रशिक्षित मॉडल का पुन: उपयोग कर सकते हैं और बड़े डेटासेट पर प्रशिक्षित मॉडल को आगे के उपयोग के लिए निर्यात कर सकते हैं।
# Complete info
$ sudo nmap -A 192.168.0.0/16 -oX output.xml
# Partial info
$ 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
# simple use (output top 5 gold nuggets with default format)
$ batea nmap_report.xml
# Output top 3
$ batea -n 3 nmap_report.xml
# Output all assets
$ batea -A nmap_report.xml
# Using multiple input files
$ batea -A nmap_report1.xml nmap_report2.xml
# Using wildcards (default xsl)
$ batea ./nmap*.xml
$ batea -f csv ./assets*.csv
# You can use batea on pretrained models and export trained models.
# Training, output and dumping model for persistence
$ batea -D mymodel.batea nmap_report.xml
# Using pretrained model
$ batea -L mymodel.batea nmap_report.xml
# Using preformatted csv along with xml files
$ batea -x nmap_report.xml -c portscan_data.csv
# Adjust verbosity
$ batea -vv nmap_report.xml
Batea रिपोर्ट (या रिपोर्टों की श्रृंखला) में प्रत्येक होस्ट को संख्यात्मक सुविधाएँ निर्दिष्ट करके काम करता है।
होस्ट nmap रिपोर्ट से प्राप्त पायथन ऑब्जेक्ट हैं। इनमें निम्नलिखित विशेषताओं की सूची होती है: [ipv4, hostname, os_info, ports] जहाँ ports पोर्ट ऑब्जेक्ट्स की सूची है। प्रत्येक पोर्ट में निम्नलिखित विशेषताएँ होती हैं: [port, protocol, state, service, software, version, cpe, scripts], सभी डिफ़ॉल्ट None पर सेट होते हैं।
सुविधाएँ FeatureBase वर्ग से विरासत में प्राप्त ऑब्जेक्ट हैं जो एक विशिष्ट _transform विधि को तुरंत लागू करते हैं। यह विधि हमेशा सभी होस्टों की सूची को इनपुट के रूप में लेती है और एक लैम्ब्डा फ़ंक्शन लौटाती है जो प्रत्येक होस्ट को संख्यात्मक मानों के 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
फिर आप batea/__init__.py में NmapReport.add_feature विधि का उपयोग करके सुविधा को रिपोर्ट में जोड़ सकते हैं।
from .features.basic_features import CustomInterestingPorts
def build_report():
report = NmapReport()
#[...]
report.add_feature(CustomInterestingPorts())
return report
मॉडल को प्रशिक्षित करने या भविष्यवाणी के लिए पूर्व-संसाधित डेटा का उपयोग करना संभव है।
डेटा को (ipv4, port) द्वारा अनुक्रमित किया जाना चाहिए, जिसमें प्रति पंक्ति एक अद्वितीय संयोजन हो। डेटा का प्रकार nmap रिपोर्ट के XML संस्करण से अपेक्षा के करीब होना चाहिए।
एक कॉलम को निम्नलिखित नामों में से एक का उपयोग करना होगा, लेकिन आपको उन सभी का उपयोग करने की आवश्यकता नहीं है। यदि कोई कॉलम अनुपस्थित है तो पार्सर डिफ़ॉल्ट रूप से शून्य मान सेट करता है।
'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