
स्वतंत्रता सेनानी मोड: ओपन सोर्स हैकिंग हार्नेस
FFM एक हैकिंग हार्नेस है जिसका उपयोग आप रेड-टीमिंग अभियान के पोस्ट-एक्सप्लॉइटेशन चरण के दौरान कर सकते हैं। इस उपकरण का विचार 2007 सम्मेलन @thegrugq से प्राप्त किया गया था।
इसे SSTIC 2018 (वीडियो) में प्रस्तुत किया गया था और संबंधित स्लाइड डेक इस यूआरएल पर उपलब्ध है। यदि आप इस प्रकार के उपकरणों से परिचित नहीं हैं, तो यह दृढ़ता से अनुशंसा की जाती है कि आप उन पर एक नज़र डालें ताकि यह समझा जा सके कि एक हैकिंग हार्नेस का उद्देश्य क्या है। सभी टिप्पणियाँ स्लाइड्स में शामिल हैं।
यह प्रोजेक्ट GPL v3 लाइसेंस की शर्तों के तहत वितरित किया जाता है।
प्राथमिक दस्तावेज़ीकरण इस README और commands/ के अंतर्गत कमांड मॉड्यूल में रहता है।
ऊपर दिए गए SSTIC टॉक लिंक हार्नेस के उपयोग के तरीके के लिए सर्वोत्तम उच्च-स्तरीय पृष्ठभूमि बने हुए हैं।
अतिरिक्त वॉकथ्रू सामग्री यहाँ उपलब्ध है:
ice-wzl ने प्रोजेक्ट इतिहास के दौरान कमांड, दस्तावेज़ीकरण और रीफ़ैक्टर का योगदान दिया।docker का उपयोग करने की अत्यधिक अनुशंसा करते हैं।Dockerfile का उपयोग करने से संभावित त्रुटियों में काफी कमी आएगी।Docker स्थापित हैgit clone https://github.com/JusticeRage/FFM.git
cd /FFM
docker build Docker_Install/ -t ffm:ffm
docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/ffm ffm fb6dd17e3b91 9 minutes ago 614 MB
docker.io/library/ubuntu 22.04 3b418d7b466a 2 weeks ago 80.3 MB
#run your new container and drop into a /bin/bash prompt as root
docker run -it --entrypoint /bin/bash -u 0 fb6dd17e3b91
root और neo के लिए passwd सेट करेंsu neo और अब आप तैयार हैं git clone https://github.com/JusticeRage/FFM.git
cd /FFM
pip install -r requirements.txt
एक हैकिंग हार्नेस का लक्ष्य एक सहायक के रूप में कार्य करना है जो पोस्ट-एक्सप्लॉइटेशन चरण के दौरान सामान्य कार्यों को स्वचालित करता है, लेकिन उपयोगकर्ता को उन गलतियों से भी बचाता है जो वे कर सकते हैं।
यह शेल का एक इंस्ट्रुमेंटेशन है। इसे सक्रिय करने के लिए ./ffm.py चलाएँ और आप तुरंत काम करना शुरू कर सकते हैं।
कमांड commands/ के अंतर्गत छोटे मॉड्यूल में विभाजित हैं, जिनमें
commands/command_manager.py डिस्कवरी और पंजीकरण को संभालता है। मुख्य समूह हैं
गणना, सहायता, गुप्तता, स्थानांतरण, और निष्पादन।
दो कमांड हैं जिनके बारे में आपको जानना आवश्यक है:
!list टाइप करें।!list tags टाइप करें जिनमें कमांड को वर्गीकृत किया जा सकता है!list tags
List of commands available:
enumeration
execution
help
stealth
transfer
!list enumeration (या अन्य टैग में से एक) टाइप कर सकते हैं।!list enumeration
List of commands available:
!backup-hunter: Hunts for backup files
!info: Returns CPU(s), Architecture, Memory, and Kernel Verison for the current machine.
!log: Toggles logging the harness' input and output to a file.
!mtime: Returns files modified in the last X minutes
!os: Prints the distribution of the current machine.
!db-hunter: Hunts for .sqlite, .sqlite3, and .db files
!sshkeys: Hunts for Private and Public SSH keys on the current machine.
!suid: Finds SUID, SGID binaries on the current machine.
--snip--
SHIFT+TAB दबाएं। यह उपयोगी हो सकता है यदि आप
SSH के माध्यम से एक रिमोट कंप्यूटर में लॉग इन हैं लेकिन आपको अपने बॉक्स पर स्थित फ़ाइल को संदर्भित करने की आवश्यकता है।यह हैकिंग हार्नेस कुछ सुविधाएँ प्रदान करता है जिनका वर्णन नीचे किया गया है। जैसे-जैसे उनका वर्णन किया जाएगा, उपकरण के पीछे डिज़ाइन दर्शन भी प्रस्तुत किया जाएगा। यह अपेक्षित नहीं है कि FFM में लागू सभी कमांड आपको सूट करेंगे। हर किसी के पास काम करने का अपना तरीका होता है, और हार्नेस को आपकी विशिष्ट आवश्यकता के अनुसार ट्यून करने के लिए संभवतः आपको कुछ कोड संशोधित करने हो सकते हैं और/या कुछ प्लगइन लिखने होंगे। यह सुनिश्चित करने के लिए काफी प्रयास किया गया है कि यह एक दर्द रहित कार्य हो।
!os एक अत्यंत सरल कमांड है जो यह दिखाने के लिए केवल cat /etc/*release* चलाता है कि वर्तमान मशीन किस OS
पर चल रही है। यह संभवतः एक प्रदर्शन के रूप में सबसे मूल्यवान है कि हैकिंग हार्नेस के संदर्भ में,
आप उपनामों को परिभाषित कर सकते हैं जो मशीन सीमाओं के पार काम करते हैं।
किसी भी कंप्यूटर में SSH करें, !os टाइप करें और कमांड चल जाएगा। गणना कमांड
commands/enumeration_commands.py में, सहायता कमांड commands/help_commands.py में, और
गुप्तता-संबंधित कमांड commands/stealth_commands.py,
commands/notty_sudo.py, और commands/log_control.py में विभाजित हैं।!backup-hunter बैकअप फ़ाइलों की खोज करता है!info वर्तमान मशीन के लिए CPU(s), आर्किटेक्चर, मेमोरी, और कर्नेल संस्करण लौटाता है।!log हार्नेस के इनपुट और आउटपुट को एक फ़ाइल में लॉग करने को टॉगल करता है। commands/log_control.py में कार्यान्वित किया गया है।!download [remote file] [local path] रिमोट मशीन से एक फ़ाइल प्राप्त करता है और उसे स्थानीय रूप से कॉपी करता है
टर्मिनल के माध्यम से। यह कमांड थोड़ा अधिक जटिल है क्योंकि अधिक कठोर त्रुटि जाँच आवश्यक है लेकिन यह एक और कमांड है जिसे आप आसानी से पढ़ सकते हैं। यह commands/download_file.py में रहता है। ध्यान दें कि इसके ठीक से काम करने के लिए रिमोट मशीन पर xxd या od की आवश्यकता होती है।!download-dir [remote directory] [local destination] एक रिमोट निर्देशिका के tar संग्रह को टर्मिनल के माध्यम से स्ट्रीम करता है और इसे रिमोट फ़ाइल सिस्टम को छुए बिना स्थानीय रूप से निकालता है। यह commands/download_directory.py में रहता है। इसे रिमोट मशीन पर tar और base64 की आवश्यकता होती है, और उपलब्ध होने पर gzip का भी उपयोग करता है।!upload [local file] [remote path] बिल्कुल पिछले कमांड की तरह काम करता है, सिवाय इसके कि एक स्थानीय फ़ाइल रिमोट मशीन पर रखी जाती है। यह commands/upload_file.py में रहता है।!sh [local script] स्थानीय मशीन से एक शेल स्क्रिप्ट को मेमोरी में चलाता है। यह commands/remote_script.py में रहता है।!py [local script] रिमोट मशीन पर एक स्थानीय Python स्क्रिप्ट को निष्पादित करता है, और वह भी पूरी तरह से मेमोरी में। यह commands/remote_script.py में रहता है। उन स्क्रिप्ट्स के लिए मेरा अन्य रिपॉजिटरी देखें जिनका आप उपयोग करना चाह सकते हैं। यह कमांड << के साथ एक मल्टीलाइन सिंटैक्स का उपयोग करता है, जिसका अर्थ है कि जो स्यूडो-शेल इसका समर्थन नहीं करते हैं (Weevely इसका एक अच्छा उदाहरण है) वे इस कमांड को काफी बुरी तरह से तोड़ देंगे।!py3 [local script] python3 वाले सिस्टम के लिए बिल्कुल वही काम करता है। यह वही मॉड्यूल, commands/remote_script.py का उपयोग करता है।!elf [local script] रिमोट मशीन पर उपलब्ध किसी भी संगत Python इंटरप्रेटर का उपयोग करके स्थानीय मशीन से एक निष्पादन योग्य को मेमोरी में चलाता है। यह commands/remote_elf.py में रहता है।!pty एक TTY को जन्म देता है, जो कि आप ज्यादातर मामलों में नहीं चाहते क्योंकि यह फोरेंसिक सबूत छोड़ता है। हालाँकि, कुछ कमांड (sudo) या एक्सप्लॉइट को चलाने के लिए एक TTY की आवश्यकता होती है इसलिए इसे सुविधा के रूप में प्रदान किया गया है। इसके जन्म के साथ ही UNSET HISTFILE HISTFILESIZE HISTSIZE PROMPT_COMMAND पास किया जाता है, साथ ही export TERM=xterm!sudo बिना TTY के sudo का आह्वान करता है। यह commands/notty_sudo.py में रहता है।प्लगइन को ffm.conf संपादित करके आगे कॉन्फ़िगर किया जा सकता है।
सैद्धांतिक रूप से, ऊपर वर्णित कमांड का उपयोग कुछ bash उत्पन्न करने के लिए किया जाता है जिसे शेल को अग्रेषित किया जाता है।
वे शेल के आउटपुट को कैप्चर करके और लौटाई गई चीज़ों के आधार पर अतिरिक्त निर्देश उत्पन्न करके अधिक जटिल संचालन कर सकते हैं।
प्रोसेसर थोड़े अलग होते हैं क्योंकि उनका उपयोग उपयोगकर्ता और अंतर्निहित bash प्रक्रिया के बीच परिसंचारी डेटा को फिर से लिखने के लिए किया जाता है। जबकि यह सच है कि किसी भी प्रोसेसर को एक कमांड के रूप में फिर से लिखा जा सकता है, दोनों को अलग करना थोड़ा साफ लगा। इनपुट प्रोसेसर उस पर काम करते हैं जो उपयोगकर्ता द्वारा ENTER कुंजी दबाने पर टाइप किया जाता है, और आउटपुट प्रोसेसर शेल द्वारा लौटाई गई किसी भी चीज़ को संशोधित कर सकते हैं।
processors/ssh_command_line.py में पाया जा सकता है। यह किसी भी SSH कमांड में -T विकल्प जोड़ता है यदि वह गायब है। यदि आप एक प्रोसेसर लिखने में रुचि रखते हैं तो इसका सरल कोड देखना सुनिश्चित करें।processors/assert_torify.py, में नेटवर्किंग कमांड (ssh, nc) की एक ब्लैकलिस्ट होती है और यदि वे torify जैसे उपकरण के माध्यम से प्रॉक्सी नहीं होते हैं तो उन्हें ब्लॉक कर देता है। हार्नेस केवल उपयोगकर्ता को परेशान करने की पूरी कोशिश करता है यदि ऐसा लगता है कि कमांड स्थानीय मशीन पर चलाया जा रहा है। जाहिर है, आपके होम IP पते के लीक होने से बचाने के लिए यह आपकी एकमात्र सुरक्षा नहीं होनी चाहिए।processors/sample_output_processor.py एक बहुत ही सरल आउटपुट प्रोसेसर है जो "password" शब्द की किसी भी घटना को लाल रंग में हाइलाइट करता है। चूँकि यह काफी बेकार है, यह फ्रेमवर्क में सक्षम नहीं है लेकिन यदि आप कुछ अधिक परिष्कृत करना चाहते हैं तो आप इसे एक प्रारंभिक बिंदु के रूप में उपयोग कर सकते हैं।CTRL+R अभी तक लागू नहीं किया गया है और हम सभी इसे बहुत याद करते हैं।
अधिक समस्याग्रस्त यह तथ्य है कि फ्रेमवर्क समय-समय पर हैंग हो जाता है। 99% मामलों में, ऐसा तब होता है जब यह पता लगाने में विफल रहता है कि उसने जो कमांड लॉन्च किया है वह चलना समाप्त हो गया है। आमतौर पर, इसका मतलब है कि जिस मशीन में आप लॉग इन हैं उसका कमांड प्रॉम्प्ट इस रूप में पहचाना नहीं जा सका। उस स्थिति में, आप फ़ाइल ffm.py की शुरुआत में स्थित रेगुलर एक्सप्रेशन को बेहतर बनाने का प्रयास कर सकते हैं, या उसी मशीन में ssh -T के साथ लॉग इन कर सकते हैं क्योंकि तब कोई समस्याग्रस्त प्रॉम्प्ट नहीं रहेगा।
डिफ़ॉल्ट रूप से, FFM 5 मिनट के बाद एक कमांड के आउटपुट को पढ़ने का प्रयास छोड़ देगा (कुछ प्लगइन अलग टाइमआउट लागू कर सकते हैं); इसलिए यदि फ्रेमवर्क हैंग होता है, तो आपको एक त्रुटि संदेश दिखाई देने तक प्रतीक्षा करनी होगी (हालाँकि यदि अंतर्निहित प्रक्रिया अभी भी चल रही है, तो हो सकता है कि आप अभी भी कमांड टाइप न कर पाएं)।
मुझे लगता है कि मैंने इस उपकरण के बारे में सब कुछ कवर कर लिया है। फिर से, यह मेरे द्वारा आमतौर पर जारी की जाने वाली चीज़ों से थोड़ा अलग है क्योंकि ज्यादातर लोगों को इसे अपने लिए मूल्यवान बनाने से पहले इसे संशोधित करने की आवश्यकता होगी।
कई प्लगइन अभी तक लिखे जाने बाकी हैं, इसलिए FFM में आपके द्वारा किए गए किसी भी सुधार को साझा करना सुनिश्चित करें। न केवल बग के लिए, बल्कि यदि आप कुछ करने की कोशिश कर रहे हैं और पता नहीं लगा पा रहे हैं तो भी समस्याएं खोलने में संकोच न करें; इस तरह मैं सभी के लिए दस्तावेज़ीकरण में सुधार कर पाऊँगा।
!mtime पिछले X मिनटों में संशोधित फ़ाइलें लौटाता है। उदाहरण के लिए !mtime 5 स्थानीय मशीन पर उन सभी फ़ाइलों को प्राप्त करेगा (जिन्हें देखने का आपके पास अधिकार है) जो पिछले 5 मिनटों में संशोधित की गई हैं।!db-hunter .sqlite, .sqlite3, और .db फ़ाइलों और अन्य डेटाबेस फ़ाइलों की खोज करता है!sshkeys वर्तमान मशीन पर निजी और सार्वजनिक SSH कुंजियों की खोज करता है।!suid वर्तमान मशीन पर SUID, SGID बाइनरी ढूँढता है।!strange-dirs एक होस्ट पर अजीब निर्देशिकाओं के लिए उपयोगकर्ता द्वारा निर्दिष्ट पथ से शुरू होने वाले उपकरण की जाँच करता है!sudo-version एक कमजोर sudo संस्करण की जाँच करता है!vm जाँचता है कि उपकरण एक वर्चुअल मशीन है या नहीं