
रेड टीम C2 के लिए रिडायरेक्टर्स कॉन्फ़िगर करने हेतु Ansible role
Ansible role जो mod_rewrite प्रॉक्सी नियमों के साथ किसी मौजूदा सर्वर पर एक redirector को शीघ्रता से तैनात करने की अनुमति देता है,
Debian और Ubuntu का समर्थन करता है, Digital ocean और Azure में परीक्षण किया गया
Redirectors, Ansible, और इस role पर एक गहन जानकारी के लिए ब्लॉग threat.tevora.com/automating-redirector-deployment-with-ansible देखें।
आरंभ करने के लिए, इस repo को क्लोन करें, ansible इंस्टॉल करें, और इस repo को अपनी roles फ़ोल्डर में रखें। अपनी redirector instance config बनाने के उदाहरण के लिए नीचे दिया गया नमूना playbook देखें।
Instance Playbook Sample provision_redirector_example.yml
- hosts: EnigmaticEmu
gather_facts: False
user: root
pre_tasks:
- name: Install python for Ansible
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
changed_when: False
- setup: # aka gather_facts
tasks:
- include_role:
name: redirectors
vars:
le_email: '[email protected]'
hop_dir: hops/empire_hop
vhosts: [
{
servername: 'fakeamazon.com',
http_port: 80,
https_port: 443,
c2filters: [
{
rewritefilter: '^/orders/track/?$',
host: '123.124.125.126'
}
],
configs: [
'RewriteRule !\.php$ https://www.amazon.com/%{REQUEST_URI} [L,R=302]'
]
},
{
servername: 'fakegoogle.com',
http_port: 80,
https_port: 443,
config_files: [
"redirectors.txt",
"apache_tweaks.conf"
],
}
]
उदाहरण का विवरण:
- hosts: EnigmaticEmu
यह उन होस्ट्स को निर्दिष्ट करता है जिन पर playbook निष्पादित होगी।
इस playbook को सही ढंग से निष्पादित करने के लिए, एक inventory फ़ाइल का उपयोग engigmatic emu के hostname या ip के साथ परिभाषित किया जाना चाहिए।
gather_facts: False
नए ubuntu संस्करणों पर जिनमें python 2 स्थापित नहीं है, ansible gather facts कार्य विफल हो जाता है।
हम gather facts अक्षम करते हैं, ताकि हम पहले python 2 स्थापित करना सुनिश्चित कर सकें। यह केवल कुछ संगतता बूटस्ट्रैप सामग्री है।
user: root
यह निर्दिष्ट करता है कि रिमोट सर्वर पर किस उपयोगकर्ता से लॉगिन करना है; ansible अपनी सभी कॉन्फ़िगरेशन ssh पर करता है।
इसे अपनी इच्छानुसार किसी भी उपयोगकर्ता में बदलें।
*यदि आपको sudo की आवश्यकता है, तो become: true जोड़ना और ansible-playbook को --ask-become-pass के साथ कॉल करना आवश्यक हो सकता है।
pre_tasks:
tasks: अब हम अच्छे हिस्से पर पहुँच गए हैं, हमारे playbook कार्य!- include_role:
जैसा कि आप कल्पना कर सकते हैं, यह शामिल करने के लिए एक role निर्दिष्ट करता है, और अगली पंक्ति name: redirectors हमारे redirectors role को शामिल करने के लिए निर्दिष्ट करती है।
हमने इस config को अधिकतर JSON में स्वरूपित किया है (YAML, JSON का एक सुपरसेट है) लेकिन जब तक यह मेल खाता है, आप इसे अपनी पसंद के अनुसार स्वरूपित कर सकते हैं।
config में ध्यान दें कि कई vhosts हैं, और प्रत्येक यह निर्दिष्ट करने के एक या अधिक तरीकों का उपयोग कर सकता है कि वह configuration templates में कैसे इंजेक्ट कर रहा है।
हम प्रति vhost एक configuration फ़ाइल बनाते हैं क्योंकि Letsencrypt, विशेष रूप से certbot-apache घटक, प्रति config फ़ाइल में एक से अधिक vhost का समर्थन नहीं करता है। इस वजह से हम सर्वर पर कई configuration फ़ाइलें प्रावधानित करेंगे।
Playbook चलाना
Role चलाने के लिए, अपना playbook उस उदाहरण के रूप में बनाएं जिसे हमने कवर किया और ansible-playbook -i <your_hosts_file> <your_playbook> चलाएँ। सुनिश्चित करें कि यह role आपके playbook के समान पथ में roles निर्देशिका में है, और आपकी hop और/या config फ़ाइलें सही ढंग से रखी गई हैं। आपकी निर्देशिका लेआउट कुछ इस प्रकार दिखनी चाहिए:
├── my_playbook.yml
├── files
│ └── empire_hop
│ └── news
│ └── login.php
└── roles
├── redirectors
│ ├── files
│ ├── handlers
│ │ └── main.yaml
│ ├── meta
│ ├── tasks
│ │ ├── apache.yml
│ │ ├── letsencrypt.yml
│ │ └── main.yml
│ ├── templates
│ │ ├── apache_sslvhost.conf.j2
│ │ └── apache_vhost.conf.j2
│ └── vars
vars:
यहीं हम अपनी config का मुख्य भाग करते हैं।
हमारे सर्वर में तीन vars हैं: le_email, hop_dir, और vhosts।
le_email का उपयोग lets_encrypt के लिए उपयोग किए जाने वाले ईमेल पते को निर्दिष्ट करने के लिए किया जाता है; सुनिश्चित करें कि आप अपने नियंत्रण वाला पता उपयोग करें।
हमारी role की copy task में उपयोग किया गया hop_dir याद है? यहीं इसे परिभाषित किया जाता है! hop_dir को playbook के स्थान के सापेक्ष ./files/ में स्थित होना चाहिए।
hosts: [...]
हमारा vhosts variable vhost config dictionaries की एक सूची है। यह हमें प्रति सर्वर विभिन्न डोमेन और C2 प्रोफाइल के साथ कई vhosts स्थापित करने की अनुमति देता है।
याद रखें कि यह variable एक सूची है, क्योंकि यह महत्वपूर्ण होगा कि हम अपनी redirectors role में अपने config फ़ाइलों और इन variables का उपयोग करने के अन्य तरीकों को कैसे template करते हैं।
servername: 'fakeamazon.com'
यह हमारे सर्वर का hostname है, और इस hostname के लिए सर्वर के IP की ओर इंगित करता हुआ एक DNS रिकॉर्ड होना अनिवार्य है।
http_port और https_port काफी स्वयं-व्याख्यात्मक हैं। चुनें कि http और https किन पोर्ट्स पर सुनेंगे।
आगे बढ़ने से पहले ध्यान दें कि config में mod rewrite नियमों को परिभाषित करने के कई तरीके हैं। यह काफी हद तक प्रयोग और इस playbook को एक python API के साथ एकीकृत करने की योजनाओं के कारण है।
c2filters: [...]
c2filter dicts की एक सूची।
कोई भी अनुरोध जिसका URI rewritefilter से मेल खाता है, कनेक्शन को host पर प्रॉक्सी करेगा।
configs[...]
config strings की एक सूची।
प्रत्येक string फ़ाइल में जोड़ी जाएगी।
config_files[...] filename या path
फ़ाइलनामों या पथों की सूची। प्रत्येक फ़ाइल की सामग्री को apache में जोड़ा जाएगा।
mod_rewrite स्वचालन टूल आउटपुट का लाभ उठाने के लिए उपयोगी, जैसे @Inspired-Secs का शानदार टूल: https://blog.inspired-sec.com/archive/2017/04/17/Mod-Rewrite-Automatic-Setup.html