TL; DR
Àkójọpọ̀ kan ti awọn idii npm marun, tí a tẹ̀ jáde láti orí àwọn àkọọ́lẹ̀ méjì, tí a fi ránṣẹ́ postinstall ìkọ̀kọ̀ tí ó ń ka àwọn ìwé ẹ̀rí ìkùukùu láti ọ̀dọ̀ olùgbàlejò tí ó sì ń fi wọ́n ránṣẹ́ síta. Àwọn ìkọ̀kọ̀ náà ní orúkọ iwin-àti-ajáko — coral-wraith, ecto-corsair-whisper-6f3b9, ecto-corsair-flag-x9m4, ecto-rust-read-f3a9c1, ecto-nightly-spirit — kí wọ́n sì sọ ohunkóhun tí wọ́n bá kó jọ di èké ecto_module: Ìfihàn YAML kí a tó fi ránṣẹ́. A máa tọ́pasẹ̀ ìdìpọ̀ náà gẹ́gẹ́ bí Ẹjẹ.
Ẹ̀rù iṣẹ́ náà máa ń ṣiṣẹ́ nígbà tí ó bá ṣàwárí àyíká kan pàtó: olùgbàlejò kan tí orúkọ rẹ̀ jẹ́ Okùn hex oní-ẹ̀dá 12 àti àkójọ iṣẹ́ kan lábẹ́ /app/node_modules — ìrísí ilé tàbí òṣìṣẹ́ CI tí a fi àpótí pamọ́ sí. Nígbà tí ẹnu ọ̀nà náà bá kọjá, ìkọ́ náà béèrè ìbéèrè lọ́wọ́ àwọn oníbàárà. Iṣẹ́ ìwádìí àpèjúwe AWS (IMDSv2) fún àwọn ìwé ẹ̀rí ipa IAM, ṣe àkọsílẹ̀ Oluṣakoso Asiri AWS kọja awọn agbegbe mẹta, awọn iyipada ayika ti n danu, ka awọn faili labẹ /app, ó sì ń gé àwọn okùn tí a fi ń mú àsíá. Lẹ́yìn náà, ó ń yọ àbájáde náà jáde ní ọ̀nà méjì: àmì ìdámọ̀ sí webhook.site akójọpọ̀ àti manifest PUT sí ìparí IP raw-IP kan, pẹ̀lú àkójọ àwọn localhost-first fallbacks kan.
Àwọn àpèjúwe àpò tí ó tẹ̀lé e kà pé "CTF payload fún ìdánwò ẹ̀rọ ìpèsè verdaccio." A ròyìn àpèjúwe ara-ẹni yẹn gẹ́gẹ́ bí òtítọ́ tí a lè rí. Ìwà náà fúnra rẹ̀ — ìjáde lọ sí IP gbogbogbòò, ìwé ẹ̀rí IMDS gidi, àwọn ìpè Secrets Manager gidi — ni ohun tí ó jẹ́ láìka àmì náà sí, àti ìdí tí a fi pín àwọn ẹ̀yà wọ̀nyí sí ìríra.
Orúkọ kan nínú ẹgbẹ́ náà, coral-wraith, kò dúró ní ìtẹ̀jáde kan ṣoṣo. Ó tún tẹ̀ ẹ́ jáde ní kíákíá nípasẹ̀ ọ̀pọ̀lọpọ̀ àwọn àtúnṣe láàrín wákàtí díẹ̀ — 1.0.0 ngun si 6.0.0 — àti ìṣáájú kan tí ó ní orúkọ kan náà ti lo inflated 9999.0.x awọn nọmba ẹya, apẹrẹ Ayebaye ti ìgbìyànjú ìgbẹ́kẹ̀lé-ìdàrúdàpọ̀. Lẹ́gbẹ̀ẹ́ ìyẹn, ẹrù iṣẹ́ náà ti dàgbà dáadáa: láti ibi ìtọ́kasí olùgbàlejò kan ṣoṣo sí ìtọ́kasí ìwé ẹ̀rí AWS pípé tí a fi àwọn àyẹ̀wò àyíká ṣe tí ó ń jẹ́ kí ó parọ́rọ́ síta ibi tí a fẹ́ fojú sí.
| jo | Àwọn orúkọ márùn-ún; coral-wraith nìkan ni a tún ṣe àtúntẹ̀jáde káàkiri ọ̀pọ̀lọpọ̀ àwọn àtúnṣe |
| Eda ilolupo | npm |
| Fi fekito sori ẹrọ | postinstall ìwé àfọwọ́kọ ìgbé ayé |
| Ifojusi akọkọ | Àwọn ìwé ẹ̀rí ipa AWS IAM + Olùṣàkóso Àṣírí Àwọn ìwọ̀n ìkọ̀kọ̀, àwọn oníyípadà àyíká, /app awọn faili |
| Exfil | webhook.site beacon + raw-IP C2 PUT |
| Ẹnubodè ìfàgùn | Orúkọ olùgbàlejò 12-hex + /app/node_modules cwd, pẹlu ayẹwo ayika kan ti o dinku ẹru isanwo ni ita ipo yẹn |
| Iwa | ga — ìjẹ́rìí àwọsánmà àti ìṣípayá ìkọ̀kọ̀ láti ọwọ́ Awọn agbegbe ikole ati akoko iṣiṣẹ ti a fi sinu apoti |
Anatomi ikọlu
Gbogbo àpò nínú àkójọpọ̀ náà ni a kọ́ lọ́nà kan náà: ó fẹ́rẹ̀ẹ́ ṣofo atọka.js (module. àwọn ọjà tí a ń kó jáde = {}), ìlà kan ṣoṣo package.json ìwé àfọwọ́kọ — “postinstall”: “node postinstall.js” — àti ẹrù iṣẹ́ tó wà nínú postinstall.jsFífi àpò náà sílẹ̀ tó láti ṣiṣẹ́; kò sí ohun tí a nílò láti kó wọlé tàbí láti pè.
Ẹnubodè àfojúsùn. Kí ó tó ṣe ohunkóhun, ẹrù ìdílé ecto yóò ṣàyẹ̀wò àyíká rẹ̀:
function isAppWorker(): host = os.hostname() if host does NOT match /^[0-9a-f]{12}$/ -> exit if cwd does NOT contain "/app/node_modules" -> exit if cwd contains "/tmp/npm-safe" -> exit otherwise -> proceed Orúkọ olùgbàlejò 12-hex ni àwòrán àìyípadà tí Docker yàn sí àpótí kan, àti /app/node_modulu jẹ́ ọ̀nà ìfipamọ́ ohun èlò tí a sábà máa ń lò nínú àpótí. Àlàyé kẹta yóò yọrí sí rere tí ipa ọ̀nà náà bá dà bí ìwé àkójọ ìyọkúrò tí a fi àpótí sandbox ṣe. Àbájáde àpapọ̀ ni pé ẹrù iṣẹ́ náà dúró ní ìdákẹ́jẹ́ẹ́ lórí kọ̀ǹpútà alágbèéká olùgbéjáde tàbí àpótí sandbox ìwádìí, ó sì ń ṣiṣẹ́ nínú iṣẹ́ ìkọ́lé tàbí òṣìṣẹ́ ìgbà tí a fi àpótí ṣe — irú àyíká tí ó ṣeé ṣe kí ó ní àwọn ìwé ẹ̀rí ìkùukùu láàyè. Àpò àkọ́kọ́ nínú ẹgbẹ́ náà, iyẹ̀fun coral, kò ní irú ẹnu ọ̀nà bẹ́ẹ̀, ó sì ń ṣiṣẹ́ ìkójọpọ̀ rẹ̀ (tí ó rọrùn) láìsí àdéhùn.
gbigbaNígbà tí ẹnu ọ̀nà bá kọjá, ìkọ́ náà yóò jáde execFileSync(“/ bin/sh”, [“-c”, …]) ó sì ń ṣiṣẹ́ àṣẹ àpapọ̀ kan ṣoṣo tí, ní ìtòlẹ́sẹẹsẹ:
1. PUT /latest/api/token to 169.254.169.254 (IMDSv2 token request) 2. GET .../iam/security-credentials/ (IAM role name) 3. GET .../iam/security-credentials/<role> (temporary credentials) 4. dump env | sort (environment variables) 5. list /app (excl. node_modules) + cat first 15 (application files) 6. aws secretsmanager list-secrets (us-east-1, eu-west-1, eu-central-1) 7. scrape readable files for HTB{...} (capture-the-flag strings) Àwọn ìgbésẹ̀ 1–3 jẹ́ ìwé ìkẹ́kọ̀ọ́ ìgbàpadà IMDSv2: béèrè fún àmì ìdánimọ̀, lẹ́yìn náà so ó pọ̀ gẹ́gẹ́ bí Àmì-à ... àkọlé láti fa ipa IAM ti àpẹẹrẹ náà àti àwọn kọ́kọ́rọ́ ìwọ̀lé ìgbà díẹ̀ ti ipa náà. Yíyàn láti ṣe IMDSv2 dípò IMDSv1 tí kò ní ìjẹ́wọ́ tí ó rọrùn jùlọ gba Ó ṣe pàtàkì láti kíyèsí — ó túmọ̀ sí pé ẹrù iṣẹ́ náà ń ṣiṣẹ́ kódà lórí àwọn ìgbà tí a ṣètò láti nílò ìwọlé metadata tí ó dá lórí àmì, èyí tí í ṣe líle tí AWS dámọ̀ràn. Àwọn ìwé ẹ̀rí tí a dá padà nípa ìgbésẹ̀ 3 kò pẹ́. WiwọleKeyId/Bọtini wiwọle Secret/àmi àwọn mẹ́ta tí a gbé kalẹ̀ sí ipa àpẹẹrẹ náà; ohunkóhun tí ipa náà bá lè ṣe, ẹni tí ó ni àwọn kọ́kọ́rọ́ wọ̀nyẹn lè ṣe fún gbogbo ìgbésí ayé ìwé ẹ̀rí náà.
Àwọn ìgbésẹ̀ 4–6 mú kí ìgbésẹ̀ náà gbòòrò sí i. env dump máa ń gba ohunkóhun tí a bá jogún nínú ìkọ́lé tàbí ìṣiṣẹ́ — ní ìṣe, èyí ni ibi tí àwọn àmì ìforúkọsílẹ̀, àwọn okùn ìsopọ̀ dátà, àti àwọn kọ́kọ́rọ́ API sábà máa ń wà. /app faili rin ka to awọn faili ohun elo mẹẹdogun ni ita node_modulu, èyí tí ó lè ṣe àtúnṣe ojú ilẹ̀, .env Àwọn fáìlì, tàbí orísun. Àwọn ìpè ìgbésẹ̀ 6 àwọn àṣírí ìpamọ́ aws ní agbègbè mẹ́ta; àwọn ìwé ẹ̀rí tí a fà sí ìgbésẹ̀ 1–3 gan-an ni ohun tí ó fi ẹ̀rí hàn pé àwọn ìpè wọ̀nyẹn jẹ́ òótọ́, nítorí náà, àwọn IMDS ka àti ẹ̀wọ̀n ìkọ̀wé Secrets Manager papọ̀ sínú ìpele kan ṣoṣo: àpẹẹrẹ ipa → managed-secret inventory. Ìgbésẹ̀ 7 jẹ́ ìfọwọ́sowọ́pọ̀ sí ìgbékalẹ̀ àsíá — nígbà tí HTB{…} Tí a bá rí i pé wọ́n fi àsíá náà ránṣẹ́ fúnra wọn, bí bẹ́ẹ̀ kọ́, wọ́n á pín àwọn ohun èlò tí wọ́n kó jọ sí mẹ́rin, wọ́n á sì fi ránṣẹ́.
Àwọn àtúnṣe tó tẹ̀lé e nínú ẹgbẹ́ náà ń gbé ìlọsíwájú náà síwájú sí i. Dípò kí wọ́n dúró sí àkójọ ọjà kan, wọ́n ń ṣàyẹ̀wò ìdáhùn IMDS, wọ́n ń kó àwọn kọ́kọ́rọ́ ìgbà díẹ̀ jáde gẹ́gẹ́ bí AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN awọn oniyipada ayika, jẹrisi idanimọ pẹlu aws sts gba-olupe-idanimọ, lẹ́yìn náà yí gbogbo àṣírí tí a dá padà àkọọ́lẹ̀-àkọsílẹ̀ pipe aws secretsmanager gba-ìní-àṣírí lórí ọ̀kọ̀ọ̀kan — gbígbà àwọn àkọlé ìkọ̀kọ̀ náà, kìí ṣe orúkọ wọn nìkan. Àwọn àtúnṣe kan náà tún ka àwọn àkọlé méjì tí a fi ìlànà rọ́pò (/ka àsíá àti àwọn ọ̀rẹ́) àti gbìyànjú idiyele run lòdì sí èyíkéyìí iṣẹ́ àgbékalẹ̀ Rust tí a rí lábẹ́ rẹ̀ /app, fífẹ̀ ìkórè náà ju àwọn ẹ̀rí ìkùukùu lọ sí ohunkóhun tí àyíká ìkọ́lé bá fi hàn.
Àwọn àtúnṣe tó tẹ̀lé e yìí tún ń fa ara wọn ní ìgbónára sí i. Yàtọ̀ sí orúkọ host 12-hex àti /app/node_modulu Àwọn àyẹ̀wò, ẹrù iṣẹ́ náà ń ṣàyẹ̀wò ìṣètò ìforúkọsílẹ̀ àkójọpọ̀ tó ń ṣiṣẹ́ àti ipa ọ̀nà ìṣiṣẹ́, ó sì ń jáde láìfọwọ́kàn nígbà tí wọ́n bá fi àyẹ̀wò tàbí àwòjìji hàn dípò àfojúsùn tó wà láàyè. Àpapọ̀ ipa náà jẹ́ ẹrù iṣẹ́ tí kò ṣe ohunkóhun tí a lè rí ní ọ̀pọ̀lọpọ̀ àyíká àyẹ̀wò, ó sì ń ṣiṣẹ́ gbogbo ìkójọpọ̀ rẹ̀ kìkì níbi tí ó bá ti gbà pé ó wà lórí ilé ìforúkọsílẹ̀ gidi kan.
ExfiltrationÀwọn dátà tí a kó jọ fi olùgbàlejò sílẹ̀ lórí àwọn ọ̀nà méjì. Àkọ́kọ́, àmì ìdámọ̀ kan post to a ti o wa titi wẹbuk.oju opo wẹẹbu olùkójọpọ̀, tí ó ní orúkọ olùgbàlejò, UID nọ́mbà, ìwé àkójọ iṣẹ́, àti tó 120 KB ti àwọn dátà tí a kó jọ. Èkejì, a so dátà náà pọ̀ sínú “modulu ìfihàn” YAML èké àti fi si /api/modulu/ lórí olupin afojusun kan:
ecto_module: name: "<flag-or-chunk-0>" version: "1.0.0" power_level: "<chunk-1>" ship_deck: "<chunk-2>" cargo_hold: "<chunk-3>" Àwọn orúkọ pápá ìfihàn (ipele agbara_, ọkọ̀ ojú omi, ẹrù_ní_ìdádúró) jẹ́ ohun ọ̀ṣọ́ — àwọn ìwífún tí a jí gbé lọ sínú àwọn iye okùn, ìdí nìyí tí olùtọ́jú nẹ́tíwọ́ọ̀kì kan fi rí ohun tí ó dàbí ìgbéjáde ìforúkọsílẹ̀ package-registration tí kò ní ìṣòro dípò ìdàrúdàpọ̀ data tí ó hàn gbangba. Ikanni beacon náà ní àwọn ohun mìíràn: post ara si wẹbuk.oju opo wẹẹbu pẹ̀lú orúkọ olùgbàlejò, UID nọ́mbà, ìwé àkójọ iṣẹ́, àti tó 120 KB ti blob tí a kó jọ, nítorí náà, kódà beakoni kan tí ó ṣe àṣeyọrí yóò mú kí gbogbo rẹ̀ dé. wẹbuk.oju opo wẹẹbu jẹ́ iṣẹ́ àyẹ̀wò ìbéèrè ọ̀fẹ́; lílo rẹ̀ gẹ́gẹ́ bí olùkójọpọ̀ túmọ̀ sí pé olùṣiṣẹ́ náà kò ní láti dúró láti gba àwọn ètò ìṣiṣẹ́ tirẹ̀ fún ikanni yẹn, àti pé àwọn ìbéèrè tí a gbà sílẹ̀ náà ṣì wà nínú àpótí iṣẹ́ náà.
Ifihan naa fi rin akojọ awọn isubu ti o bẹrẹ pẹlu ọpọlọpọ 127.0.0.1/localhost awọn ibudo ati lẹhinna ṣubu nipasẹ awọn adirẹsi gbangba mẹta ni `154.57.164.0/24` ibiti o duro ni opin akọkọ ti o dahun pẹlu ipo 2xx. Ilana localhost-first wa ni ibamu pẹlu apejuwe ara ẹni ti “idanwo verdaccio” (iforukọsilẹ agbegbe lori loopback), ṣugbọn awọn ipadabọ IP ti gbogbo eniyan tumọ si pe data naa fi olugbalejo silẹ nigbakugba ti loopback ko ba n tẹtisi — eyiti o tumọ si, lori ẹrọ eyikeyi ti kii ṣe ẹrọ idanwo ti onkọwe funrararẹ.
Ago
Àkójọpọ̀ náà fi agbára ìdàgbàsókè díẹ̀ hàn dípò ìṣàn kan ṣoṣo. A ń ṣètò rẹ̀ nípa ìwà tí a ṣàkíyèsí, kìí ṣe nípa ìtẹ̀jáde ògiri:
| ipele | Àwọn àpò / Àwọn ẹ̀yà | ihuwasi |
|---|---|---|
| Ìbẹ̀rẹ̀ ìsáré | coral-wraith 9999.0.x | Àwọn nọ́mbà ẹ̀yà tí a ti fẹ̀ sí i bá ìgbìyànjú ìgbẹ́kẹ̀lé-ìdàrúdàpọ̀ mu; ìkà àkókò fífi sori ẹrọ àti ìfiranṣẹ́ jáde |
| Irugbin | coral-wraith 1.0.0 | postinstall kó àwọn fáìlì id/env/flag jọ; PUT kan ṣoṣo sí 154[.]57[.]164[.]71:30782, àmì ECT-472839 |
| Iyara aṣetunṣe | coral-wraith 1.0.1 → 6.0.0 | Ọ̀pọ̀lọpọ̀ ìtújáde ní wákàtí; ẹrù iṣẹ́ ń gba èrè isAppWorker() ẹnu-ọ̀nà, ìfàmìsí IMDSv2, ìfàmìsí gbogbogbòò get-secret-value pivot, àyẹ̀wò àyíká ìforúkọsílẹ̀/ọ̀nà, àti àwọn àmì ìwẹ̀ méjì |
| Àwọn orúkọ tó jọra | ecto-corsair-whisper-6f3b9 1.0.14–1.0.18 | Iru ẹrù kan naa ti a fi ẹnu bo; webhook.site àkójọ ìfàsẹ́yìn àti ìpele-ọ̀pọ̀lọpọ̀ |
| aba | ecto-rust-read-f3a9c1 1.0.1–1.0.2 | Fi awọn ami ifọwọ omi afikun kun ECT-987654, ECT-654321, ECT-839201 |
| aba | ecto-corsair-flag-x9m4 1.0.0, ecto-nightly-spirit 1.1.0 | Ẹrù ìsanwó kan náà, C2 kan náà àti beacon kan náà |
Àmì pàtàkì ti ẹgbẹ́ náà ni ìtẹ̀jáde rẹ̀: dípò àpò kan àti ẹ̀yà kan, orúkọ kan náà ni a tún tẹ̀ jáde léraléra ní ìtẹ̀léra, ọ̀kọ̀ọ̀kan ń tú àyípadà kékeré kan jáde lórí èyí tó kẹ́yìn, pẹ̀lú àwọn arákùnrin díẹ̀ tí wọ́n ní orúkọ ọ̀tọ̀ọ̀tọ̀ tí wọ́n ń gbé ẹrù kan náà. mimun ìdílé, kóòdù náà pín sí ìka ọwọ́ méjì tí ó sún mọ́ ara wọn — ìṣètò kan tí ó fa àwọn àwárí pàtàkì méjì, mẹ́ta mìíràn (àfikún ìsọ̀rí tí a lè kà pẹ̀lú fáìlì) — ṣùgbọ́n àwọn méjèèjì pinnu láti gba ẹrù kan náà; ìyàtọ̀ náà ni ìyípadà kóòdù, kì í ṣe ìsọ̀rí ìwà. mimun Lẹ́yìn ìwọ̀n tí a ṣàyẹ̀wò (tó tó o kéré tán 1.0.25 ní àkókò tí a ń kọ ọ́) ni a rí lójú ayé lórí ìforúkọsílẹ̀ náà, àti pé iyẹ̀fun coral Orúkọ náà tẹ̀síwájú láti gun àtẹ̀gùn ẹ̀yà tirẹ̀ lórí fèrèsé kan náà.
Awọn afihan ti adehun
Gbogbo àwọn àmì tó wà ní ìsàlẹ̀ yìí ni a yọ jáde láti orísun àkójọpọ̀ lórí díìsìkì. A ti yọ àwọn àmì nẹ́tíwọ́ọ̀kì kúrò.
Network
| Atọka | ipa |
|---|---|
hxxp://154[.]57[.]164[.]71:30782 | Àfojúsùn PUT C2 (coral-wraith) |
hxxp://154[.]57[.]164[.]80:30543 | C2 PUT fallback (ecto-*) |
hxxp://154[.]57[.]164[.]82:31250 | C2 PUT fallback (ecto-*) |
hxxp://154[.]57[.]164[.]71:31289 | C2 PUT fallback (ecto-*) |
hxxps://webhook[.]site/602a4c72-7033-4e28-92ea-dc66e59206e5 | Olùkó Beakon |
169[.]254[.]169[.]254/latest/... | Kíkà ìwé ẹ̀rí IMDSv2 (apá ibi-àfojúsùn, metadata AWS) |
Ìwà/fáìlì
| Atọka | ipa |
|---|---|
"postinstall": "node postinstall.js" | Fi fekito sori ẹrọ |
ecto_module: YAML pẹlu power_level / ship_deck / cargo_hold awọn bọtini | Ètò ìfihàn Exfil |
Àwọn àmì síńkì ECT-472839, ECT-987654, ECT-654321, ECT-839201 | Apá ipa ọ̀nà C2 /api/modules/<marker> |
isAppWorker() ẹnu-ọna: olugbalejo /^[0-9a-f]{12}$/, cwd ní /app/node_modules | Ipo imuṣiṣẹ |
aws secretsmanager list-secrets lori us-east-1, eu-west-1, eu-central-1 | Àkọsílẹ̀ àṣírí |
HTB{...} regex scrap | Gba ìkórè àsíá náà |
Àwọn hashes fáìlì (sha256, tí a yà ní àkókò ìṣàyẹ̀wò)
| faili | Oju 256 |
|---|---|
coral-wraith/postinstall.js | ce5ff035cfdfed1d0015446424b352c27b66bcb77e9fdb0a51e4245199146824 |
ecto-corsair-whisper-6f3b9 1.0.18/postinstall.js | b58432acba376aa6976f0490d9a1c04257ccdbc856d8390260c50322d63e31c3 |
Ìfìyàsí àti ìwà tí a ṣàkíyèsí
Àwọn orúkọ àkójọpọ̀ márààrún náà ni a tẹ̀ jáde lábẹ́ àwọn àkọọ́lẹ̀ npm méjì, ṣùgbọ́n wọ́n pín àwọn ètò ìṣiṣẹ́ tó tó láti fi wọ́n ṣe àkójọpọ̀ kan: kan náà ecto_modulu schema ti o han gbangba, kanna ECT-472839 àmì ìwẹ̀ àkọ́kọ́, kan náà wẹbuk.oju opo wẹẹbu ID olukojọ, ati awọn opin C2 ni kanna Àkọsílẹ̀ 154.57.164.0/24`. Àpò irúgbìn (`coral-wraith, tí ó rọrùn àti tí kò ní ihò) àti ìdílé ecto-family tí a fi ẹ̀rọ ìtọ́jú ṣe, nítorí náà, a kà á sí àtúnṣe lórí ohun èlò ìtọ́jú kan dípò àwọn ìsapá aláìdádúró.
Àwọn àpò náà ṣàpèjúwe ara wọn, nínú àwọn àtúnṣe tó tẹ̀lé e, gẹ́gẹ́ bí “Ẹrù iṣẹ́ CTF fún ìdánwò ẹ̀wọ̀n ìpèsè verdaccio.” A fi àmì yẹn hàn gẹ́gẹ́ bí òtítọ́ tí a lè rí, a kò sì tún un sọ gẹ́gẹ́ bí àwárí nípa ète. Ohun tí kódì náà ṣe kò ṣe kedere, kò sì ní ìyàtọ̀ sí bí a ṣe fi àmì sí i: ó ka àwọn ẹ̀rí ipa IAM láti iṣẹ́ ìwádìí metadata, ó ka àwọn àṣírí tí a ṣàkóso káàkiri àwọn agbègbè mẹ́ta ti AWS, ó sì fi àwọn àbájáde náà ránṣẹ́ sí IP gbogbogbò àti olùkójọ webhook ẹni-kẹta. Ìdánwò loopback nìkan kò ní nílò àkójọ ìfàsẹ́yìn gbogbogbòò, ìwé ẹ̀rí IMDS ni ó kà, tàbí olùdarí Secrets Manager tí ó wà ní agbègbè kan. Nítorí pé ìjáde àti ìforúkọsílẹ̀ jẹ́ òótọ́, àwọn ẹ̀yà tí a fi ẹnu bo ni a kà sí ìkà.
Ẹnubodè tí a fi àpótí kan ṣe nìkan ni ohun tí a mọ̀ jùlọ nínú iṣẹ́ náà. Ó jẹ́ ìgbésẹ̀ ìsáré — dídákẹ́ jẹ́ẹ́ lórí àwọn kọ̀ǹpútà alágbèéká àti nínú àyẹ̀wò àwọn àpótí sandbox — àti ìwọ̀n àfojúsùn, tí a fi ń yinbọn níbi tí ipa IAM gidi àti àwọn àṣírí alààyè bá wà. Àwọn onímọ̀ nípa ṣíṣe àwọn páálí wọ̀nyí nínú àpótí sandbox gbogbogbòò kò ní rí ohunkóhun; ìwà náà kàn fara hàn lábẹ́ orúkọ olùgbàlejò onírú Docker àti ipa ọ̀nà fífi sínú àpótí.
Ipa, awọn aṣa ati itọsọna fun awọn olugbeja
Ìfihàn níbí ni ìjẹ́rìí ìkùukùu àti ìṣípayá ìkọ̀kọ̀ nínú àwọn àpótí ìkọ́lé àti ìgbà ìṣiṣẹ́. Ìwé ẹ̀rí ipa IAM tí a fà láti IMDS ní ohunkóhun tí ó bá ní àṣẹ nínú ipa náà; olùṣàkóso ìkọ̀kọ̀:Àkójọ Àwọn Àṣírí (àti èyíkéyìí tí ó tẹ̀lé e GbaSecretValue) ń fẹ̀ sí àwọn àṣírí ohun èlò tí a tọ́jú. Àwọn ìdàpọ̀ ìyípadà àyíká sábà máa ń ní àwọn àmì ìforúkọsílẹ̀, àwọn URL ibi ìpamọ́ dátà, àti àwọn kọ́kọ́rọ́ API. Nínú àyíká CI tàbí àpótí — gẹ́gẹ́ bí ẹnu ọ̀nà ṣe yàn fún — fífi sori ẹ̀rọ ìgbà díẹ̀ kan ti ọ̀kan lára àwọn àpò wọ̀nyí tó láti tú ohun èlò náà jáde.
Ectoplasm bá ìlànà tí a ń rí mu: àwọn ẹrù ìsanwó àkókò tí a fi sori ẹrọ tí ó dé ibi tí a ti lè rí àwọn ìkọ̀kọ̀ àti àwọn àṣírí tí a ṣàkóso dípò àwọn fáìlì agbègbè, tí ó sì ń fa ìbọn fún àwọn ibi tí ó níye lórí nìkan. Àwọn àkíyèsí ìdáàbòbò méjì tẹ̀lé e.
- A lè rí ìrísí náà. Ìsopọ̀ npm/PyPI tí àwòrán ìpè rẹ̀ dé API ìpamọ́ ìkùukùu (olùṣàkóso àṣírí aws, awọn aṣiri gcloud, az keyvault) tàbí àdírẹ́sì IMDS àti sínkẹ̀ẹ̀tì ìjáde nẹ́tíwọ́ọ̀kì jẹ́ àpẹẹrẹ tóóró, tó ní àmì gíga — ó fẹ́rẹ̀ẹ́ má ṣẹlẹ̀ nínú ìwé àkọsílẹ̀ ìgbésí ayé tó tọ́. Ìwádìí ìṣàn àìdúró le ṣe àmì sí i láìsí ìgbẹ́kẹ̀lé lórí èyíkéyìí agbègbè pàtó tàbí IP.
- Àìlera àyíká máa ń dínkù. Fífi IMDSv2 sí ipò 1 ń dínà iṣẹ́ àwọn ohun èlò inú àpótí láti dé ibi tí a ti ń rí àwọn ohun èlò ìwádìí; ṣíṣàyẹ̀wò àwọn ipa IAM sí ipò tó kéré jùlọ ń dín rédíọ̀mù ìbúgbàù èyíkéyìí tí ó bá ń jó kù; àti ṣíṣiṣẹ́ àwọn ìfisẹ́pọ̀ pẹ̀lú -foju-awọn iwe afọwọkọ nínú CI, ó máa yọ fíìmù install-hook kúrò pátápátá fún àwọn páálí tí kò nílò rẹ̀.
Fún àwọn olùgbèjà, àwọn àyẹ̀wò tó wúlò ni: kíkìlọ̀ lórí àwọn ìsopọ̀ tó ń jáde láti inú àwọn àpótí ìkọ́lé/CI sí àwọn IP gbogbogbò tí a kò gbà láyè nígbà tí a bá ń ṣe àyẹ̀wò náà. npm fi sori ẹrọ; ṣọ́ra fún wíwọlé IMDS láti inú àwọn ìwé àkọsílẹ̀ ìgbésí ayé package; kí o sì tọ́jú èyíkéyìí ìkọ́ install tó bá gbóná sí CLI ìkùukùu gẹ́gẹ́ bí ẹni tí a fura sí títí tí a ó fi fihàn pé ó yàtọ̀.
Àkíyèsí méjì míràn sí i nípa ẹgbẹ́ yìí. Àkọ́kọ́, nítorí pé a ti fi ìṣiṣẹ́ sí àwọn àyíká tí a ti fi àpótí sí, àpò tí ó dàbí ẹni tí kò ṣiṣẹ́ nígbà tí a bá ṣe àyẹ̀wò rẹ̀ lórí ibi iṣẹ́ kan lè ṣì wà láàyè nínú iṣẹ́ - ìwádìí nílò láti tún orúkọ olùgbàlejò àpótí náà àti àwọn ipò ipa ọ̀nà ṣe, tàbí kí o ka orísun náà tààrà, dípò gbígbára lé “Mo fi sori ẹrọ rẹ̀ kò sì sí ohun tí ó ṣẹlẹ̀.” Èkejì, lílo iṣẹ́ ìwádìí ìbéèrè gbogbogbòò gẹ́gẹ́ bí olùgbàlejò ìtọ́kasí túmọ̀ sí pé díẹ̀ nínú àwọn dátà tí a yọ jáde lè ṣeé gbà padà fún ìdáhùn ìṣẹ̀lẹ̀: àjọ kan tí ó bá rí ọ̀kan nínú àwọn àpò wọ̀nyí nínú igi ìgbẹ́kẹ̀lé rẹ̀ lè ronú nípa ohun tí àpò tí ó yọrí sí rere yóò ti ní nínú ìlànà ìkójọ owó, ó sì yẹ kí ó yí àwọn ẹ̀rí ipa IAM, àwọn àmì ìforúkọsílẹ̀, àti àwọn àṣírí tí a ṣàkóso tí a lè dé ọ̀dọ̀ wọn láti àyíká ìkọ́lé tàbí àkókò ìṣiṣẹ́ tí ó kan. Ìyípo ìwé ẹ̀rí, kìí ṣe yíyọ àpò kúrò, ni àtúnṣe iṣẹ́-ṣíṣe lẹ́yìn tí ìfisẹ́ kan bá ti ṣiṣẹ́.





