Atlantis Security
Taarifa Msingi
Atlantis kimsingi inakusaidia kutekeleza terraform kutoka kwa Maombi ya Kuvuta kutoka kwa seva yako ya git.
Maabara ya Kienyeji
Nenda kwenye ukurasa wa kutolewa kwa atlantis kwenye https://github.com/runatlantis/atlantis/releases na pakua ile inayokufaa.
Unda alama ya kibinafsi (yenye ufikio wa repo) ya mtumiaji wako wa github
Tekeleza
./atlantis testdrive
na itaunda repo ya onyesho unayoweza kutumia kuzungumza na atlantisUnaweza 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
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.
Unaweza kupata hapa orodha ya bendera inayoungwa mkono na seva ya Atlantis
Thamani zinachaguliwa kwa mpangilio huu:
Bendera
Mazingira ya Mazingira
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:
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.Labda inahitaji kuruhusiwa na bendera kama
allowed_overrides
auallow_custom_workflows
Usanidi wa Upande wa Seva: Unaweza kuipitisha kwa bendera
--repo-config
na ni yaml inayopanga mipangilio mpya kwa kila repo (regexes inasaidiwa)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.
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:
Mashambulizi
Ikiwa wakati wa uvamizi unakutana na kosa hili: Kosa: Kosa la kupata kufunga hali
Unaweza kulitatua kwa kukimbia:
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
:
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:
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:
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).Angalia njia za kukiuka kinga za tawi
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
:
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:
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.
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.
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 TerraformMfano: /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 waatlantis 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
--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
--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:
Ingiza watoa huduma kwenye picha ya Atlantis au mwenyeji na kata egress katika uzalishaji.
Tekeleza itifaki ya usajili wa watoa huduma ndani na kata egress ya umma, hivyo unadhibiti ni nani anayeandika upatikanaji wa usajili.
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 kuruhusuplan
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