
मॉड्यूलर वितरित फिंगरप्रिंटिंग इंजन
Scannerl एक मॉड्यूलर वितरित फिंगरप्रिंटिंग इंजन है जिसे Kudelski Security द्वारा कार्यान्वित किया गया है। Scannerl एक एकल होस्ट पर हजारों लक्ष्यों को फिंगरप्रिंट कर सकता है, लेकिन इसे कई होस्टों में आसानी से वितरित भी किया जा सकता है। Scannerl फिंगरप्रिंटिंग के लिए वैसा ही है जैसा zmap पोर्ट स्कैनिंग के लिए है।
Scannerl Debian/Ubuntu/Arch पर काम करता है (लेकिन शायद अन्य वितरणों पर भी काम करेगा)। यह मास्टर/स्लेव आर्किटेक्चर का उपयोग करता है जहाँ मास्टर नोड अपने स्लेव (स्थानीय या रिमोट) को काम (फिंगरप्रिंट करने के लिए होस्ट) वितरित करेगा। संपूर्ण परिनियोजन उपयोगकर्ता के लिए पारदर्शी है।
जब पारंपरिक फिंगरप्रिंटिंग उपकरणों का उपयोग बड़े पैमाने पर विश्लेषण के लिए किया जाता है, तो सुरक्षा शोधकर्ता अक्सर दो सीमाओं से टकराते हैं: पहला, ये उपकरण आमतौर पर एक समय में अपेक्षाकृत कम होस्टों को स्कैन करने के लिए बनाए जाते हैं और आईपी पतों की बड़ी श्रेणियों के लिए अनुपयुक्त होते हैं। दूसरा, यदि IPS उपकरणों द्वारा संरक्षित आईपी पतों की बड़ी श्रेणी को फिंगरप्रिंट किया जा रहा है, तो ब्लैकलिस्ट किए जाने की संभावना अधिक होती है जो जानकारी के अधूरे सेट का कारण बन सकती है। Scannerl को इन सीमाओं को दूर करने के लिए डिज़ाइन किया गया है, न केवल एक साथ कई होस्टों को फिंगरप्रिंट करने की क्षमता प्रदान करके, बल्कि लोड को किसी भी संख्या में होस्टों पर वितरित करके भी। Scannerl इन कार्यों के वितरण को पूरी तरह से पारदर्शी बनाता है, जिससे बड़े पैमाने पर फिंगरप्रिंटिंग परियोजनाओं की स्थापना और रखरखाव सरल हो जाता है; यह फिंगरप्रिंटिंग प्रक्रियाओं को मैन्युअल रूप से प्रबंधित और वितरित करने के कठिन कार्य के बजाय विश्लेषण पर ध्यान केंद्रित करने की अनुमति देता है। गति कारक के अलावा, scannerl को कुछ पंक्तियों में विशिष्ट फिंगरप्रिंटिंग विश्लेषणों को आसानी से सेट करने की अनुमति देने के लिए डिज़ाइन किया गया है। न केवल फिंगरप्रिंटिंग क्लस्टर बनाना आसान है, बल्कि आपके फिंगरप्रिंटिंग अभियानों में बारीक-ट्यून किए गए स्कैन जोड़कर इसे समायोजित भी किया जा सकता है।
यह बड़े पैमाने पर फिंगरप्रिंटिंग अभियानों को चलाने के लिए सबसे तेज़ उपकरण है।
अधिक के लिए:
विषय सूची
अधिक के लिए wiki देखें।
wiki स्थापना पृष्ठ पर विभिन्न स्थापना विकल्प देखें
स्रोत से स्थापित करने के लिए, पहले अपने प्लेटफ़ॉर्म के लिए सही पैकेजिंग चुनकर Erlang (कम से कम v.18) स्थापित करें: Erlang डाउनलोड
आवश्यक पैकेज स्थापित करें:
# debian पर
$ sudo apt install erlang erlang-src rebar
# arch पर
$ sudo pacman -S erlang-nox rebar
फिर scannerl बनाएँ:
$ git clone https://github.com/kudelskisecurity/scannerl.git
$ cd scannerl
$ ./build.sh
चलाकर उपयोग प्राप्त करें:
$ ./scannerl -h
Arch Linux उपयोगकर्ताओं के लिए scannerl aur पर उपलब्ध है:
DEBs (Ubuntu, Debian) रिलीज़ में उपलब्ध हैं।
RPMs (Opensuse, Centos, Redhat) https://build.opensuse.org/package/show/home:chapeaurouge/scannerl पर उपलब्ध हैं।
वितरित स्कैन करने के लिए दो प्रकार के नोड्स की आवश्यकता होती है:
मास्टर नोड पर scannerl स्थापित और संकलित होना चाहिए जबकि स्लेव नोड पर केवल Erlang स्थापित होना चाहिए। संपूर्ण सेटअप पारदर्शी है और मास्टर नोड द्वारा स्वचालित रूप से किया जाता है।
वितरित स्कैन के लिए आवश्यकताएँ:
$ ./scannerl -h
____ ____ _ _ _ _ _ _____ ____ _
/ ___| / ___| / \ | \ | | \ | | ____| _ \| |
\___ \| | / _ \ | \| | \| | _| | |_) | |
___) | |___ / ___ \| |\ | |\ | |___| _ <| |___
|____/ \____/_/ \_\_| \_|_| \_|_____|_| \_\_____|
USAGE
scannerl MODULE TARGETS [NODES] [OPTIONS]
MODULE:
-m <mod> --module <mod>
mod: the fingerprinting module to use.
arguments are separated with a colon.
TARGETS:
-f <target> --target <target>
target: a list of target separated by a comma.
-F <path> --target-file <path>
path: the path of the file containing one target per line.
-d <domain> --domain <domain>
domain: a list of domains separated by a comma.
-D <path> --domain-file <path>
path: the path of the file containing one domain per line.
NODES:
-s <node> --slave <node>
node: a list of node (hostnames not IPs) separated by a comma.
-S <path> --slave-file <path>
path: the path of the file containing one node per line.
a node can also be supplied with a multiplier (<node>*<nb>).
OPTIONS:
-o <mod> --output <mod> comma separated list of output module(s) to use.
-p <port> --port <port> the port to fingerprint.
-t <sec> --timeout <sec> the fingerprinting process timeout.
-T <sec> --stimeout <sec> slave connection timeout (default: 10).
-j <nb> --max-pkt <nb> max pkt to receive (int or "infinity").
-r <nb> --retry <nb> retry counter (default: 0).
-c <cidr> --prefix <cidr> sub-divide range with prefix > cidr (default: 24).
-M <port> --message <port> port to listen for message (default: 57005).
-P <nb> --process <nb> max simultaneous process per node (default: 28232).
-Q <nb> --queue <nb> max nb unprocessed results in queue (default: infinity).
-C <path> --config <path> read arguments from file, one per line.
-O <mode> --outmode <mode> 0: on Master, 1: on slave, >1: on broker (default: 0).
-v <val> --verbose <val> be verbose (0 <= int <= 255).
-K <opt> --socket <opt> comma separated socket option (key[:value]).
-l --list-modules list available fp/out modules.
-V --list-debug list available debug options.
-A --print-args Output the args record.
-X --priv-ports use only source port between 1 and 1024.
-N --nosafe keep going even if some slaves fail to start.
-w --www DNS will try for www.<domain>.
-b --progress show progress.
-x --dryrun dry run.
अधिक जानकारी के लिए wiki देखें।
Scannerl का उपयोग बिना किसी अन्य होस्ट के स्थानीय होस्ट पर किया जा सकता है। हालांकि, यह अभी भी उसी होस्ट पर एक स्लेव नोड बनाएगा जिससे इसे चलाया जाता है। इसलिए, वितरित सेटअप में वर्णित आवश्यकताओं को भी पूरा करना होगा।
इसे करने का एक त्वरित तरीका यह सुनिश्चित करना है कि आपका होस्ट स्वयं को हल करने में सक्षम हो:
grep -q "127.0.1.1\s*`hostname`" /etc/hosts || echo "127.0.1.1 `hostname`" | sudo tee -a /etc/hosts
और एक SSH कुंजी बनाएँ (यदि अभी तक मौजूद नहीं है) और इसे authorized_keys में जोड़ें (आपके पास एक SSH सर्वर चल रहा होना चाहिए):
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
निम्न उदाहरण स्थानीय होस्ट से google.com पर HTTP बैनर ग्रैबिंग चलाता है:
./scannerl -m httpbg -d google.com
वितरित स्कैन करने के लिए, उन होस्टों को पहले से सेटअप करना होगा जिनका उपयोग scannerl काम वितरित करने के लिए करेगा। अधिक जानकारी के लिए वितरित सेटअप देखें।
Scannerl उपयोग करने के लिए स्लेव की एक सूची की अपेक्षा करता है (-s या -S स्विच द्वारा प्रदान की गई)।
./scannerl -m httpbg -d google.com -s host1,host2,host3
Scannerl -l स्विच के साथ उपलब्ध मॉड्यूल (आउटपुट मॉड्यूल और फिंगरप्रिंटिंग मॉड्यूल) को सूचीबद्ध करेगा:
$ ./scannerl -l
Fingerprinting modules available
================================
bacnet UDP/47808: Bacnet identification
chargen UDP/19: Chargen amplification factor identification
fox TCP/1911: FOX identification
httpbg TCP/80: HTTP Server header identification
- Arg1: [true|false] follow redirection [Default:false]
httpsbg SSL/443: HTTPS Server header identification
https_certif SSL/443: HTTPS certificate graber
imap_certif TCP/143: IMAP STARTTLS certificate graber
modbus TCP/502: Modbus identification
mqtt TCP/1883: MQTT identification
mqtts TCP/8883: MQTT over SSL identification
mysql_greeting TCP/3306: Mysql version identification
pop3_certif TCP/110: POP3 STARTTLS certificate graber
smtp_certif TCP/25: SMTP STARTTLS certificate graber
ssh_host_key TCP/22: SSH host key graber
Output modules available
========================
csv output to csv
- Arg1: [true|false] save everything [Default:true]
csvfile output to csv file
- Arg1: [true|false] save everything [Default:false]
- Arg2: File path
file output to file
- Arg1: File path
file_ip output to stdout (only ip)
- Arg1: File path
file_mini output to file (only ip and result)
- Arg1: File path
file_resultonly output to file (only result)
- Arg1: File path
stdout output to stdout
stdout_ip output to stdout (only IP)
stdout_mini output to stdout (only ip and result)
मॉड्यूल को कोलन के साथ तर्क प्रदान किए जा सकते हैं। उदाहरण के लिए file आउटपुट मॉड्यूल के लिए:
./scannerl -m httpbg -d google.com -o file:/tmp/result
Scannerl द्वारा आउटपुट मॉड्यूल को लौटाया गया परिणाम निम्न रूप में होता है:
{module, target, port, result}
जहाँ
module: उपयोग किया गया मॉड्यूल (Erlang atom)target: IP या होस्टनाम (string या IPv4 address)port: पोर्ट (integer)result: नीचे देखेंresult भाग निम्न रूप में होता है:
{{status, type},Value}
जहाँ {status, type} निम्न में से एक टुपल है:
{ok, result}: लक्ष्य को फिंगरप्रिंट करना सफल रहा{error, up}: फिंगरप्रिंटिंग सफल नहीं हुई लेकिन लक्ष्य ने प्रतिक्रिया दी{error, unknown}: फिंगरप्रिंटिंग विफल रहीValue लौटाया गया मान है - यह या तो एक atom है या तत्वों की एक सूची है
Scannerl को मॉड्यूलरिटी को ध्यान में रखकर डिज़ाइन और कार्यान्वित किया गया है। इसमें नए मॉड्यूल जोड़ना आसान है:
नए मॉड्यूल बनाने के लिए, बस व्यवहार (फिंगरप्रिंटिंग मॉड्यूल के लिए fp_module.erl और आउटपुट मॉड्यूल के लिए out_behavior.erl) का पालन करें और अपने मॉड्यूल को कार्यान्वित करें।
नए मॉड्यूल या तो संकलन समय पर या गतिशील रूप से एक बाहरी फ़ाइल के रूप में जोड़े जा सकते हैं।
अधिक जानकारी के लिए wiki पृष्ठ देखें।
बेझिझक एक issue या PR खोलें।
Copyright(c) 2017 Nagravision SA.
यह प्रोग्राम मुफ़्त सॉफ़्टवेयर है: आप इसे फ्री सॉफ़्टवेयर फाउंडेशन द्वारा प्रकाशित GNU जनरल पब्लिक लाइसेंस के संस्करण 3 की शर्तों के तहत पुनर्वितरित और/या संशोधित कर सकते हैं।
यह प्रोग्राम इस उम्मीद में वितरित किया जाता है कि यह उपयोगी होगा, लेकिन बिना किसी वारंटी के; व्यापारिकता या किसी विशेष उद्देश्य के लिए उपयुक्तता की निहित वारंटी के बिना भी। अधिक जानकारी के लिए GNU जनरल पब्लिक लाइसेंस देखें।
आपको इस प्रोग्राम के साथ GNU जनरल पब्लिक लाइसेंस की एक प्रति प्राप्त हुई होगी। यदि नहीं, तो http://www.gnu.org/licenses/ देखें।