Ansible Tower / AWX / Automation controller Security

Reading time: 10 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

Ansible Tower ili njegova open-source verzija AWX je takođe poznata kao korisnički interfejs, kontrolna tabla i REST API Ansible-a. Sa kontrolom pristupa zasnovanom na rolama, zakazivanjem poslova i grafičkim upravljanjem inventarom, možete upravljati svojom Ansible infrastrukturom iz modernog UI-a. REST API i komandna linija Tower-a olakšavaju integraciju sa trenutnim alatima i radnim tokovima.

Automation Controller je novija verzija Ansible Tower-a sa više mogućnosti.

Razlike

Prema ovome, glavne razlike između Ansible Tower-a i AWX-a su podrška koja se dobija, a Ansible Tower ima dodatne funkcije kao što su kontrola pristupa zasnovana na rolama, podrška za prilagođene API-je i korisnički definisani radni tokovi.

Tehnološki stack

  • Web interfejs: Ovo je grafički interfejs gde korisnici mogu upravljati inventarima, akreditivima, šablonima i poslovima. Dizajniran je da bude intuitivan i pruža vizualizacije koje pomažu u razumevanju stanja i rezultata vaših automatizovanih poslova.
  • REST API: Sve što možete da uradite u web interfejsu, možete takođe uraditi putem REST API-ja. To znači da možete integrisati AWX/Tower sa drugim sistemima ili skriptovati radnje koje biste obično izvodili u interfejsu.
  • Baza podataka: AWX/Tower koristi bazu podataka (obično PostgreSQL) za čuvanje svoje konfiguracije, rezultata poslova i drugih neophodnih operativnih podataka.
  • RabbitMQ: Ovo je sistem za razmenu poruka koji koristi AWX/Tower za komunikaciju između različitih komponenti, posebno između web servisa i izvršitelja zadataka.
  • Redis: Redis služi kao keš i pozadinski sistem za red zadataka.

Logičke komponente

  • Inventari: Inventar je kolekcija hostova (ili čvorova) protiv kojih se mogu izvršavati poslovi (Ansible playbook-ovi). AWX/Tower vam omogućava da definišete i grupišete svoje inventare i takođe podržava dinamičke inventare koji mogu pribaviti liste hostova iz drugih sistema kao što su AWS, Azure, itd.
  • Projekti: Projekat je u suštini kolekcija Ansible playbook-ova preuzetih iz sistema za kontrolu verzija (kao što je Git) kako bi se povukli najnoviji playbook-ovi kada je to potrebno.
  • Šabloni: Šabloni poslova definišu kako će se određeni playbook izvršiti, specificirajući inventar, akreditive i druge parametre za posao.
  • Akreditivi: AWX/Tower pruža siguran način za upravljanje i čuvanje tajni, kao što su SSH ključevi, lozinke i API tokeni. Ovi akreditivi mogu biti povezani sa šablonima poslova kako bi playbook-ovi imali neophodan pristup kada se izvrše.
  • Motor zadataka: Ovo je mesto gde se dešava magija. Motor zadataka je izgrađen na Ansible-u i odgovoran je za izvršavanje playbook-ova. Poslovi se šalju motoru zadataka, koji zatim izvršava Ansible playbook-ove protiv određenog inventara koristeći specificirane akreditive.
  • Planeri i povratni pozivi: Ovo su napredne funkcije u AWX/Tower koje omogućavaju zakazivanje poslova da se izvrše u određenim vremenima ili da budu pokrenuti spoljnim događajima.
  • Obaveštenja: AWX/Tower može slati obaveštenja na osnovu uspeha ili neuspeha poslova. Podržava različite načine obaveštavanja kao što su e-mailovi, Slack poruke, webhook-ovi, itd.
  • Ansible Playbook-ovi: Ansible playbook-ovi su alati za konfiguraciju, implementaciju i orkestraciju. Oni opisuju željeno stanje sistema na automatizovan, ponovljiv način. Napisani u YAML-u, playbook-ovi koriste Ansible-ov deklarativni jezik automatizacije za opisivanje konfiguracija, zadataka i koraka koji treba da se izvrše.

Tok izvršenja poslova

  1. Interakcija korisnika: Korisnik može interagovati sa AWX/Tower ili putem Web interfejsa ili REST API-ja. Ovi pružaju front-end pristup svim funkcionalnostima koje nudi AWX/Tower.
  2. Inicijacija posla:
  • Korisnik, putem Web interfejsa ili API-ja, inicira posao na osnovu Šablona posla.
  • Šablon posla uključuje reference na Inventar, Projekat (koji sadrži playbook) i Akreditive.
  • Nakon inicijacije posla, zahtev se šalje AWX/Tower pozadini da se posao stavi u red za izvršenje.
  1. Redosled poslova:
  • RabbitMQ upravlja razmenom poruka između web komponente i izvršitelja zadataka. Kada se posao inicira, poruka se šalje motoru zadataka koristeći RabbitMQ.
  • Redis deluje kao pozadinski sistem za red zadataka, upravljajući redom poslova koji čekaju na izvršenje.
  1. Izvršenje posla:
  • Motor zadataka preuzima posao iz reda. On preuzima neophodne informacije iz Baze podataka o povezanom playbook-u, inventaru i akreditivima.
  • Koristeći preuzeti Ansible playbook iz povezanog Projekta, Motor zadataka izvršava playbook protiv specificiranih Inventar čvorova koristeći pružene Akreditive.
  • Dok se playbook izvršava, njegov izlaz (logovi, činjenice, itd.) se beleži i čuva u Bazi podataka.
  1. Rezultati posla:
  • Kada se playbook završi, rezultati (uspeh, neuspeh, logovi) se čuvaju u Bazi podataka.
  • Korisnici mogu pregledati rezultate putem Web interfejsa ili ih pretraživati putem REST API-ja.
  • Na osnovu ishoda poslova, Obaveštenja se mogu slati kako bi obavestila korisnike ili spoljne sisteme o statusu posla. Obaveštenja mogu biti e-mailovi, Slack poruke, webhook-ovi, itd.
  1. Integracija sa spoljnim sistemima:
  • Inventari se mogu dinamički preuzimati iz spoljnih sistema, omogućavajući AWX/Tower da povuče hostove iz izvora kao što su AWS, Azure, VMware i drugi.
  • Projekti (playbook-ovi) mogu se preuzeti iz sistema za kontrolu verzija, osiguravajući korišćenje ažuriranih playbook-ova tokom izvršenja poslova.
  • Planeri i povratni pozivi mogu se koristiti za integraciju sa drugim sistemima ili alatima, omogućavajući AWX/Tower da reaguje na spoljne okidače ili izvršava poslove u unapred određenim vremenima.

Kreiranje AWX laboratorije za testiranje

Prateći dokumentaciju moguće je koristiti docker-compose za pokretanje AWX:

bash
git clone -b x.y.z https://github.com/ansible/awx.git # Get in x.y.z the latest release version

cd awx

# Build
make docker-compose-build

# Run
make docker-compose

# Or to create a more complex env
MAIN_NODE_TYPE=control EXECUTION_NODE_COUNT=2 COMPOSE_TAG=devel make docker-compose

# Clean and build the UI
docker exec tools_awx_1 make clean-ui ui-devel

# Once migrations are completed and the UI is built, you can begin using AWX. The UI can be reached in your browser at https://localhost:8043/#/home, and the API can be found at https://localhost:8043/api/v2.

# Create an admin user
docker exec -ti tools_awx_1 awx-manage createsuperuser

# Load demo data
docker exec tools_awx_1 awx-manage create_preload_data

RBAC

Podržane uloge

Najprivilegovanija uloga se zove Sistem Administrator. Svako ko ima ovu ulogu može modifikovati bilo šta.

Iz white box security pregleda, potrebna vam je Sistem Auditor uloga, koja omogućava pregled svih podataka sistema ali ne može da pravi nikakve promene. Druga opcija bi bila da dobijete Organizacija Auditor ulogu, ali bi bilo bolje da dobijete onu prvu.

Proširite ovo da dobijete detaljan opis dostupnih uloga
  1. Sistem Administrator:
  • Ovo je superuser uloga sa dozvolama za pristup i modifikaciju bilo kog resursa u sistemu.
  • Mogu upravljati svim organizacijama, timovima, projektima, inventarima, šablonima poslova, itd.
  1. Sistem Auditor:
  • Korisnici sa ovom ulogom mogu da vide sve podatke sistema, ali ne mogu da prave nikakve promene.
  • Ova uloga je dizajnirana za usklađenost i nadzor.
  1. Uloge Organizacije:
  • Admin: Potpuna kontrola nad resursima organizacije.
  • Auditor: Pristup samo za pregled resursa organizacije.
  • Član: Osnovno članstvo u organizaciji bez specifičnih dozvola.
  • Izvrši: Može pokretati šablone poslova unutar organizacije.
  • Čitaj: Može pregledati resurse organizacije.
  1. Uloge Projekta:
  • Admin: Može upravljati i modifikovati projekat.
  • Koristi: Može koristiti projekat u šablonu posla.
  • Ažuriraj: Može ažurirati projekat koristeći SCM (kontrola verzija).
  1. Uloge Inventara:
  • Admin: Može upravljati i modifikovati inventar.
  • Ad Hoc: Može pokretati ad hoc komande na inventaru.
  • Ažuriraj: Može ažurirati izvor inventara.
  • Koristi: Može koristiti inventar u šablonu posla.
  • Čitaj: Pristup samo za pregled.
  1. Uloge Šablona Posla:
  • Admin: Može upravljati i modifikovati šablon posla.
  • Izvrši: Može pokrenuti posao.
  • Čitaj: Pristup samo za pregled.
  1. Uloge Akreditiva:
  • Admin: Može upravljati i modifikovati akreditive.
  • Koristi: Može koristiti akreditive u šablonima poslova ili drugim relevantnim resursima.
  • Čitaj: Pristup samo za pregled.
  1. Uloge Tima:
  • Član: Deo tima, ali bez specifičnih dozvola.
  • Admin: Može upravljati članovima tima i povezanim resursima.
  1. Uloge Radnog Tok:
  • Admin: Može upravljati i modifikovati radni tok.
  • Izvrši: Može pokrenuti radni tok.
  • Čitaj: Pristup samo za pregled.

Enumeracija & Mapiranje Napada sa AnsibleHound

AnsibleHound je open-source BloodHound OpenGraph kolektor napisan u Go-u koji pretvara read-only Ansible Tower/AWX/Automation Controller API token u potpunu grafiku dozvola spremnu za analizu unutar BloodHound-a (ili BloodHound Enterprise).

Zašto je ovo korisno?

  1. Tower/AWX REST API je izuzetno bogat i izlaže svaki objekat i RBAC odnos koji vaša instanca poznaje.
  2. Čak i sa najnižim privilegijama (Čitaj) tokenom moguće je rekurzivno enumerisati sve dostupne resurse (organizacije, inventare, hostove, akreditive, projekte, šablone poslova, korisnike, timove…).
  3. Kada se sirovi podaci konvertuju u BloodHound šemu, dobijate iste vizualizacione mogućnosti napadnog puta koje su tako popularne u procenama Active Directory-a – ali sada usmerene na vašu CI/CD imovinu.

Bezbednosni timovi (i napadači!) mogu stoga:

  • Brzo razumeti ko može postati admin čega.
  • Identifikovati akreditive ili hostove koji su dostupni iz naloga bez privilegija.
  • Povezati više “Čitaj ➜ Koristi ➜ Izvrši ➜ Admin” ivica da bi dobili potpunu kontrolu nad Tower instancom ili osnovnom infrastrukturom.

Preduslovi

  • Ansible Tower / AWX / Automation Controller dostupan preko HTTPS.
  • Korisnički API token sa opsegom Čitaj samo (kreiran iz Detalji korisnika → Tokeni → Kreiraj token → opseg = Čitaj).
  • Go ≥ 1.20 za kompajliranje kolektora (ili koristite unapred izgrađene binarne datoteke).

Izgradnja & Pokretanje

bash
# Compile the collector
cd collector
go build . -o build/ansiblehound

# Execute against the target instance
./build/ansiblehound -u "https://tower.example.com/" -t "READ_ONLY_TOKEN"

Interno, AnsibleHound izvršava paginirane GET zahteve protiv (barem) sledećih krajnjih tačaka i automatski prati related linkove koji se vraćaju u svakom JSON objektu:

/api/v2/organizations/
/api/v2/inventories/
/api/v2/hosts/
/api/v2/job_templates/
/api/v2/projects/
/api/v2/credentials/
/api/v2/users/
/api/v2/teams/

Sve prikupljene stranice se spajaju u jedan JSON fajl na disku (podrazumevano: ansiblehound-output.json).

BloodHound Transformacija

Sirovi Tower podaci se zatim transformišu u BloodHound OpenGraph koristeći prilagođene čvorove sa prefiksom AT (Ansible Tower):

  • ATOrganization, ATInventory, ATHost, ATJobTemplate, ATProject, ATCredential, ATUser, ATTeam

I ivice koje modeluju odnose / privilegije:

  • ATContains, ATUses, ATExecute, ATRead, ATAdmin

Rezultat se može direktno uvesti u BloodHound:

bash
neo4j stop   # if BloodHound CE is running locally
bloodhound-import ansiblehound-output.json

Opcionalno možete da otpremite prilagođene ikone kako bi novi tipovi čvorova bili vizuelno različiti:

bash
python3 scripts/import-icons.py "https://bloodhound.example.com" "BH_JWT_TOKEN"

Odbrambene i Ofanzivne Razmatranja

  • Read token se obično smatra bezopasnim, ali i dalje otkriva potpunu topologiju i sve metapodatke o akreditivima. Tretirajte ga kao osetljiv!
  • Sprovodite najmanje privilegije i rotirajte / opozovite neiskorišćene tokene.
  • Pratite API za prekomernu enumeraciju (više uzastopnih GET zahteva, visoka aktivnost paginacije).
  • Iz perspektive napadača, ovo je savršena početna tačka → eskalacija privilegija tehnika unutar CI/CD pipeline-a.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks