diff --git a/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md b/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md index 7faa26c3f..ee5b7ff0c 100644 --- a/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md +++ b/src/AI/AI-llm-architecture/0.-basic-llm-concepts.md @@ -1,21 +1,21 @@ # 0. Basic LLM Concepts -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## Pretraining -Pretraining ni hatua ya msingi katika kuendeleza mfano mkubwa wa lugha (LLM) ambapo mfano unakabiliwa na kiasi kikubwa na tofauti za data za maandiko. Wakati wa hatua hii, **LLM inajifunza muundo wa msingi, mifumo, na nuances za lugha**, ikiwa ni pamoja na sarufi, msamiati, sintaksia, na uhusiano wa muktadha. Kwa kuchakata data hii kubwa, mfano unapata uelewa mpana wa lugha na maarifa ya jumla ya ulimwengu. Msingi huu wa kina unamwezesha LLM kuzalisha maandiko yanayofaa na yanayohusiana na muktadha. Baadaye, mfano huu wa awali unaweza kupitia mchakato wa kuboresha, ambapo unafundishwa zaidi kwenye seti maalum za data ili kubadilisha uwezo wake kwa kazi au maeneo maalum, kuboresha utendaji wake na umuhimu katika matumizi yaliyokusudiwa. +Pretraining ni hatua ya msingi katika kuendeleza mfano mkubwa wa lugha (LLM) ambapo mfano unakabiliwa na kiasi kikubwa na tofauti za data za maandiko. Wakati wa hatua hii, **LLM inajifunza muundo wa msingi, mifumo, na nuances za lugha**, ikiwa ni pamoja na sarufi, msamiati, sintaksia, na uhusiano wa muktadha. Kwa kuchakata data hii kubwa, mfano unapata uelewa mpana wa lugha na maarifa ya jumla ya ulimwengu. Msingi huu wa kina unamwezesha LLM kutoa maandiko yanayofaa na yanayohusiana na muktadha. Baadaye, mfano huu wa awali unaweza kupitia mchakato wa kuboresha, ambapo unafundishwa zaidi kwenye seti maalum za data ili kubadilisha uwezo wake kwa kazi au maeneo maalum, kuboresha utendaji wake na umuhimu katika matumizi yaliyokusudiwa. ## Main LLM components Kawaida LLM inajulikana kwa usanidi unaotumika kuifundisha. Hizi ndizo sehemu za kawaida wakati wa kufundisha LLM: -- **Parameters**: Parameters ni **uzito na upendeleo unaoweza kujifunza** katika mtandao wa neva. Hizi ni nambari ambazo mchakato wa mafunzo unarekebisha ili kupunguza kazi ya hasara na kuboresha utendaji wa mfano kwenye kazi. LLMs kawaida hutumia mamilioni ya parameters. +- **Parameters**: Parameters ni **uzito na upendeleo unaoweza kujifunza** katika mtandao wa neva. Hizi ni nambari ambazo mchakato wa mafunzo unarekebisha ili kupunguza kazi ya kupoteza na kuboresha utendaji wa mfano kwenye kazi. LLMs kawaida hutumia mamilioni ya parameters. - **Context Length**: Hii ni urefu wa juu wa kila sentensi inayotumika kujiandaa LLM. - **Embedding Dimension**: Ukubwa wa vector inayotumika kuwakilisha kila token au neno. LLMs kawaida hutumia bilioni za dimensions. - **Hidden Dimension**: Ukubwa wa tabaka zilizofichwa katika mtandao wa neva. -- **Number of Layers (Depth)**: Idadi ya tabaka ambazo mfano unazo. LLMs kawaida hutumia makumi ya tabaka. -- **Number of Attention Heads**: Katika mifano ya transformer, hii ni idadi ya mitambo tofauti ya umakini inayotumika katika kila tabaka. LLMs kawaida hutumia makumi ya vichwa. +- **Number of Layers (Depth)**: Ni tabaka ngapi mfano unao. LLMs kawaida hutumia tabaka kumi. +- **Number of Attention Heads**: Katika mifano ya transformer, hii ni idadi ya mitambo tofauti ya umakini inayotumika katika kila tabaka. LLMs kawaida hutumia vichwa vingi. - **Dropout**: Dropout ni kama asilimia ya data inayondolewa (uwezekano unakuwa 0) wakati wa mafunzo inayotumika **kuzuia overfitting.** LLMs kawaida hutumia kati ya 0-20%. Configuration of the GPT-2 model: @@ -36,10 +36,10 @@ Katika PyTorch, **tensor** ni muundo wa data wa msingi unaotumikia kama array ya ### Dhana ya Kihesabu ya Tensors -- **Scalars**: Tensors za kiwango 0, zinazoakisi nambari moja (dimensional sifuri). Kama: 5 -- **Vectors**: Tensors za kiwango 1, zinazoakisi array ya nambari za dimensional moja. Kama: \[5,1] -- **Matrices**: Tensors za kiwango 2, zinazoakisi arrays za dimensional mbili zikiwa na safu na nguzo. Kama: \[\[1,3], \[5,2]] -- **Tensors za Kiwango cha Juu**: Tensors za kiwango 3 au zaidi, zinazoakisi data katika vipimo vya juu (mfano, tensors za 3D kwa picha za rangi). +- **Scalars**: Tensors za kiwango cha 0, zinazoakisi nambari moja (dimensional sifuri). Kama: 5 +- **Vectors**: Tensors za kiwango cha 1, zinazoakisi array ya nambari za dimensional moja. Kama: \[5,1] +- **Matrices**: Tensors za kiwango cha 2, zinazoakisi arrays za dimensional mbili zikiwa na safu na nguzo. Kama: \[\[1,3], \[5,2]] +- **Tensors za Kiwango cha Juu**: Tensors za kiwango cha 3 au zaidi, zinazoakisi data katika vipimo vya juu (mfano, tensors za 3D kwa picha za rangi). ### Tensors kama Vifungashio vya Data @@ -127,13 +127,13 @@ Tensors ni muhimu katika PyTorch kwa ajili ya kujenga na kufundisha mitandao ya ## Automatic Differentiation -Automatic differentiation (AD) ni mbinu ya kihesabu inayotumika **kuthibitisha derivatives (gradients)** za kazi kwa ufanisi na kwa usahihi. Katika muktadha wa mitandao ya neva, AD inawezesha hesabu ya gradients zinazohitajika kwa **algorithimu za optimization kama gradient descent**. PyTorch inatoa injini ya automatic differentiation inayoitwa **autograd** ambayo inarahisisha mchakato huu. +Automatic differentiation (AD) ni mbinu ya kompyuta inayotumika **kuthibitisha derivatives (gradients)** za kazi kwa ufanisi na kwa usahihi. Katika muktadha wa mitandao ya neva, AD inawezesha hesabu ya gradients zinazohitajika kwa **algorithimu za optimization kama gradient descent**. PyTorch inatoa injini ya utofautishaji wa moja kwa moja inayoitwa **autograd** ambayo inarahisisha mchakato huu. ### Mathematical Explanation of Automatic Differentiation **1. The Chain Rule** -Katika msingi wa automatic differentiation ni **chain rule** kutoka calculus. Chain rule inasema kwamba ikiwa una muundo wa kazi, derivative ya kazi iliyounganishwa ni bidhaa ya derivatives za kazi zilizounganishwa. +Katika msingi wa utofautishaji wa moja kwa moja ni **chain rule** kutoka kwa calculus. Chain rule inasema kwamba ikiwa una muundo wa kazi, derivative ya kazi iliyounganishwa ni bidhaa ya derivatives za kazi zilizounganishwa. Kihesabu, ikiwa `y=f(u)` na `u=g(x)`, basi derivative ya `y` kwa heshima na `x` ni: @@ -167,7 +167,7 @@ Tunataka kuhesabu gradient ya hasara `L` kwa heshima na uzito `w` na bias `b`. ### Implementing Automatic Differentiation in PyTorch -Sasa, hebu tuone jinsi PyTorch inavyofanya mchakato huu kuwa wa kiotomatiki. +Sasa, hebu tuone jinsi PyTorch inavyofanya mchakato huu kuwa wa moja kwa moja. ```python pythonCopy codeimport torch import torch.nn.functional as F @@ -213,7 +213,7 @@ Katika mitandao mikubwa ya neural yenye tabaka nyingi, mchakato wa kuhesabu grad - **Hatua ya 2:** Kwa kila mfano wa mafunzo, fanya forward pass ili kuhesabu matokeo. - **Hatua ya 3:** Hesabu hasara. - **Hatua ya 4:** Hesabu gradients za hasara kuhusiana na kila parameter kwa kutumia sheria ya mnyororo. -- **Hatua ya 5:** Sasisha vigezo kwa kutumia algorithm ya uboreshaji (mfano, gradient descent). +- **Hatua ya 5:** Sasisha vigezo kwa kutumia algorithm ya kuboresha (mfano, gradient descent). ### **3. Uwiano wa Kihesabu** @@ -277,13 +277,13 @@ Katika msimbo huu: Wakati wa backward pass: - PyTorch inatembea kwenye grafu ya hesabu kwa mpangilio wa kinyume. -- Kwa kila operesheni, inatumia sheria ya mnyororo kukadiria gradients. +- Kila operesheni, inatumia sheria ya mnyororo kukadiria gradients. - Gradients zinakusanywa katika sifa ya `.grad` ya kila tensor ya parameter. -### **6. Faida za Tofauti Otomatiki** +### **6. Faida za Tofauti za Otomatiki** - **Ufanisi:** Inakwepa hesabu zisizo za lazima kwa kutumia matokeo ya kati. - **Usahihi:** Inatoa derivatives sahihi hadi usahihi wa mashine. - **Urahisi wa Matumizi:** Inondoa hesabu za mikono za derivatives. -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/1.-tokenizing.md b/src/AI/AI-llm-architecture/1.-tokenizing.md index a277e97c7..1b73f0aff 100644 --- a/src/AI/AI-llm-architecture/1.-tokenizing.md +++ b/src/AI/AI-llm-architecture/1.-tokenizing.md @@ -1,6 +1,6 @@ # 1. Tokenizing -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## Tokenizing @@ -9,71 +9,71 @@ > [!TIP] > Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika tokens (ids) kwa njia ambayo ina maana**. -### **Jinsi Tokenizing Inavyofanya Kazi** +### **How Tokenizing Works** -1. **Kugawanya Maandishi:** +1. **Splitting the Text:** - **Basic Tokenizer:** Tokenizer rahisi inaweza kugawanya maandiko katika maneno binafsi na alama za uakifishaji, ikiondoa nafasi. -- _Mfano:_\ -Maandishi: `"Hello, world!"`\ +- _Example:_\ +Text: `"Hello, world!"`\ Tokens: `["Hello", ",", "world", "!"]` -2. **Kuunda Kamusi:** -- Ili kubadilisha tokens kuwa IDs za nambari, **kamusi** inaundwa. Kamusi hii inataja tokens zote za kipekee (maneno na alama) na inatoa kila moja ID maalum. -- **Tokens Maalum:** Hizi ni alama maalum zilizoongezwa kwenye kamusi ili kushughulikia hali mbalimbali: -- `[BOS]` (Mwanzo wa Mfululizo): Inaonyesha mwanzo wa maandiko. -- `[EOS]` (Mwisho wa Mfululizo): Inaonyesha mwisho wa maandiko. +2. **Creating a Vocabulary:** +- Ili kubadilisha tokens kuwa IDs za nambari, **vocabulary** inaundwa. Vocabulary hii inataja tokens zote za kipekee (maneno na alama) na inawapa kila mmoja ID maalum. +- **Special Tokens:** Hizi ni alama maalum zilizoongezwa kwenye vocabulary ili kushughulikia hali mbalimbali: +- `[BOS]` (Beginning of Sequence): Inaashiria mwanzo wa maandiko. +- `[EOS]` (End of Sequence): Inaashiria mwisho wa maandiko. - `[PAD]` (Padding): Inatumika kufanya mfuatano wote katika kundi kuwa na urefu sawa. -- `[UNK]` (Haijulikani): Inawakilisha tokens ambazo hazipo kwenye kamusi. -- _Mfano:_\ +- `[UNK]` (Unknown): Inawakilisha tokens ambazo hazipo katika vocabulary. +- _Example:_\ Ikiwa `"Hello"` inapata ID `64`, `","` ni `455`, `"world"` ni `78`, na `"!"` ni `467`, basi:\ `"Hello, world!"` → `[64, 455, 78, 467]` -- **Kushughulikia Maneno Yasiyojulikana:**\ -Ikiwa neno kama `"Bye"` halipo kwenye kamusi, linabadilishwa na `[UNK]`.\ +- **Handling Unknown Words:**\ +Ikiwa neno kama `"Bye"` halipo katika vocabulary, linabadilishwa na `[UNK]`.\ `"Bye, world!"` → `["[UNK]", ",", "world", "!"]` → `[987, 455, 78, 467]`\ _(Kukisia `[UNK]` ina ID `987`)_ -### **Mbinu za Juu za Tokenizing** +### **Advanced Tokenizing Methods** -Wakati tokenizer ya msingi inafanya kazi vizuri kwa maandiko rahisi, ina mipaka, hasa na kamusi kubwa na kushughulikia maneno mapya au nadra. Mbinu za juu za tokenizing zinashughulikia masuala haya kwa kugawanya maandiko katika sehemu ndogo au kuboresha mchakato wa tokenization. +Wakati tokenizer ya msingi inafanya kazi vizuri kwa maandiko rahisi, ina mipaka, hasa na vocabularies kubwa na kushughulikia maneno mapya au nadra. Mbinu za hali ya juu za tokenizing zinashughulikia masuala haya kwa kugawanya maandiko katika sehemu ndogo au kuboresha mchakato wa tokenization. 1. **Byte Pair Encoding (BPE):** -- **Madhumuni:** Inapunguza ukubwa wa kamusi na inashughulikia maneno nadra au yasiyojulikana kwa kuyagawanya katika jozi za byte zinazotokea mara kwa mara. -- **Jinsi Inavyofanya Kazi:** +- **Purpose:** Inapunguza ukubwa wa vocabulary na inashughulikia maneno nadra au yasiyojulikana kwa kuyagawanya katika jozi za byte zinazotokea mara kwa mara. +- **How It Works:** - Inaanza na wahusika binafsi kama tokens. - Inachanganya kwa hatua jozi za tokens zinazotokea mara nyingi zaidi kuwa token moja. -- Inaendelea hadi hakuna jozi za mara nyingi zaidi zinazoweza kuchanganywa. -- **Faida:** +- Inaendelea hadi hakuna jozi za mara kwa mara zaidi zinazoweza kuchanganywa. +- **Benefits:** - Inafuta hitaji la token ya `[UNK]` kwani maneno yote yanaweza kuwakilishwa kwa kuunganisha tokens za subword zilizopo. -- Kamusi yenye ufanisi na inayoweza kubadilika. -- _Mfano:_\ -`"playing"` inaweza kutokenizwa kama `["play", "ing"]` ikiwa `"play"` na `"ing"` ni subwords zinazotokea mara nyingi. +- Vocabulary yenye ufanisi zaidi na inayoweza kubadilika. +- _Example:_\ +`"playing"` inaweza kutokenizwa kama `["play", "ing"]` ikiwa `"play"` na `"ing"` ni subwords zinazotokea mara kwa mara. 2. **WordPiece:** -- **Inatumika Na:** Mifano kama BERT. -- **Madhumuni:** Kama BPE, inagawanya maneno katika vitengo vya subword ili kushughulikia maneno yasiyojulikana na kupunguza ukubwa wa kamusi. -- **Jinsi Inavyofanya Kazi:** -- Inaanza na kamusi ya msingi ya wahusika binafsi. +- **Used By:** Mifano kama BERT. +- **Purpose:** Kama BPE, inagawanya maneno katika vitengo vya subword ili kushughulikia maneno yasiyojulikana na kupunguza ukubwa wa vocabulary. +- **How It Works:** +- Inaanza na vocabulary ya msingi ya wahusika binafsi. - Inajumuisha kwa hatua subword inayotokea mara nyingi zaidi ambayo inaboresha uwezekano wa data ya mafunzo. - Inatumia mfano wa uwezekano kuamua ni subwords zipi za kuunganisha. -- **Faida:** -- Inafanya usawa kati ya kuwa na ukubwa wa kamusi unaoweza kudhibitiwa na kuwakilisha maneno kwa ufanisi. +- **Benefits:** +- Inaleta usawa kati ya kuwa na ukubwa wa vocabulary unaoweza kudhibitiwa na kuwakilisha maneno kwa ufanisi. - Inashughulikia kwa ufanisi maneno nadra na ya mchanganyiko. -- _Mfano:_\ -`"unhappiness"` inaweza kutokenizwa kama `["un", "happiness"]` au `["un", "happy", "ness"]` kulingana na kamusi. +- _Example:_\ +`"unhappiness"` inaweza kutokenizwa kama `["un", "happiness"]` au `["un", "happy", "ness"]` kulingana na vocabulary. 3. **Unigram Language Model:** -- **Inatumika Na:** Mifano kama SentencePiece. -- **Madhumuni:** Inatumia mfano wa uwezekano kubaini seti inayowezekana zaidi ya tokens za subword. -- **Jinsi Inavyofanya Kazi:** -- Inaanza na seti kubwa ya tokens zinazoweza. +- **Used By:** Mifano kama SentencePiece. +- **Purpose:** Inatumia mfano wa uwezekano kubaini seti inayowezekana zaidi ya tokens za subword. +- **How It Works:** +- Inaanza na seti kubwa ya tokens zinazoweza kuwa. - Inafuta kwa hatua tokens ambazo haziboresha uwezekano wa mfano wa data ya mafunzo. -- Inakamilisha kamusi ambapo kila neno linawakilishwa na vitengo vya subword vinavyoweza zaidi. -- **Faida:** +- Inakamilisha vocabulary ambapo kila neno linawakilishwa na vitengo vya subword vinavyoweza kuwa na uwezekano zaidi. +- **Benefits:** - Inaweza kubadilika na inaweza kuunda lugha kwa njia ya asili zaidi. - Mara nyingi inasababisha tokenizations zenye ufanisi na zenye compact. -- _Mfano:_\ +- _Example:_\ `"internationalization"` inaweza kutokenizwa katika subwords ndogo zenye maana kama `["international", "ization"]`. ## Code Example -Tuchunguze hili kwa karibu kutoka kwa mfano wa msimbo kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb): +Let's understand this better from a code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb): ```python # Download a text to pre-train the model import urllib.request @@ -97,4 +97,4 @@ print(token_ids[:50]) - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/2.-data-sampling.md b/src/AI/AI-llm-architecture/2.-data-sampling.md index 4edb137fb..ef73ac725 100644 --- a/src/AI/AI-llm-architecture/2.-data-sampling.md +++ b/src/AI/AI-llm-architecture/2.-data-sampling.md @@ -1,28 +1,28 @@ # 2. Data Sampling -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## **Data Sampling** -**Data Sampling** ni mchakato muhimu katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT. Inahusisha kuandaa data ya maandiko katika mfuatano wa ingizo na malengo ambayo mfano hutumia kujifunza jinsi ya kutabiri neno linalofuata (au token) kulingana na maneno yaliyotangulia. Uwekaji sahihi wa sampuli za data unahakikisha kwamba mfano unapata kwa ufanisi mifumo ya lugha na utegemezi. +**Data Sampling** ni mchakato muhimu katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT. Inahusisha kuandaa data ya maandiko katika mfuatano wa ingizo na malengo ambayo mfano hutumia kujifunza jinsi ya kutabiri neno linalofuata (au token) kulingana na maneno yaliyotangulia. Uwekaji sahihi wa data unahakikisha kwamba mfano unapata kwa ufanisi mifumo ya lugha na utegemezi. > [!TIP] -> Lengo la awamu hii ya pili ni rahisi sana: **Sampuli ya data ya ingizo na kuandaa kwa ajili ya awamu ya mafunzo kwa kawaida kwa kutenganisha dataset katika sentensi za urefu maalum na pia kuzalisha jibu linalotarajiwa.** +> Lengo la awamu hii ya pili ni rahisi sana: **Chukua sampuli ya data ya ingizo na uiandaa kwa ajili ya awamu ya mafunzo kwa kawaida kwa kutenganisha dataset katika sentensi za urefu maalum na pia kuzalisha jibu linalotarajiwa.** -### **Kwa Nini Uwekaji Sampuli wa Data Ni Muhimu** +### **Kwa Nini Uwekaji Data ni Muhimu** -LLMs kama GPT zinafundishwa kuzalisha au kutabiri maandiko kwa kuelewa muktadha unaotolewa na maneno ya awali. Ili kufikia hili, data ya mafunzo lazima iwe na muundo ambao mfano unaweza kujifunza uhusiano kati ya mfuatano wa maneno na maneno yao yanayofuata. Njia hii iliyopangwa inaruhusu mfano kuweza kujumlisha na kuzalisha maandiko yanayofaa na yanayohusiana na muktadha. +LLMs kama GPT zinafundishwa kuzalisha au kutabiri maandiko kwa kuelewa muktadha unaotolewa na maneno ya awali. Ili kufikia hili, data ya mafunzo inapaswa kuandaliwa kwa njia ambayo mfano unaweza kujifunza uhusiano kati ya mfuatano wa maneno na maneno yao yanayofuata. Njia hii iliyopangwa inaruhusu mfano kuweza kujumlisha na kuzalisha maandiko yanayoeleweka na yanayohusiana na muktadha. -### **Mifano Muhimu katika Uwekaji Sampuli wa Data** +### **Mifano Muhimu katika Uwekaji Data** 1. **Tokenization:** Kugawanya maandiko katika vitengo vidogo vinavyoitwa tokens (mfano, maneno, subwords, au wahusika). 2. **Urefu wa Mfuatano (max_length):** Idadi ya tokens katika kila mfuatano wa ingizo. 3. **Sliding Window:** Njia ya kuunda mfuatano wa ingizo unaoshirikiana kwa kusogeza dirisha juu ya maandiko yaliyotolewa tokens. -4. **Stride:** Idadi ya tokens ambazo dirisha linalosogea linahamia mbele ili kuunda mfuatano unaofuata. +4. **Stride:** Idadi ya tokens ambayo dirisha linasogea mbele ili kuunda mfuatano unaofuata. ### **Mfano wa Hatua kwa Hatua** -Hebu tupitie mfano ili kuonyesha uwekaji sampuli wa data. +Hebu tupitie mfano ili kuonyesha uwekaji data. **Mfano wa Maandishi** ```arduino @@ -91,7 +91,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", **Example with Stride of 2:** -Kwa kutumia maandiko yaliyotolewa na `max_length` ya 4: +Using the same tokenized text and `max_length` of 4: - **First Window (Positions 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **Target:** \["ipsum", "dolor", "sit", "amet,"] - **Second Window (Positions 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **Target:** \["sit", "amet,", "consectetur", "adipiscing"] @@ -99,7 +99,7 @@ Kwa kutumia maandiko yaliyotolewa na `max_length` ya 4: ## Code Example -Tuelewe hili vizuri kutoka kwa mfano wa msimbo kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb): +Let's understand this better from a code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb): ```python # Download the text to pre-train the LLM import urllib.request @@ -235,4 +235,4 @@ tensor([[ 367, 2885, 1464, 1807], - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/3.-token-embeddings.md b/src/AI/AI-llm-architecture/3.-token-embeddings.md index 3740b7915..a47ea56e3 100644 --- a/src/AI/AI-llm-architecture/3.-token-embeddings.md +++ b/src/AI/AI-llm-architecture/3.-token-embeddings.md @@ -1,10 +1,10 @@ # 3. Token Embeddings -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## Token Embeddings -Baada ya kutenganisha data ya maandiko, hatua inayofuata muhimu katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT ni kuunda **token embeddings**. Token embeddings hubadilisha token zisizo na muundo (kama vile maneno au sehemu za maneno) kuwa vectors za nambari zinazoendelea ambazo mfano unaweza kushughulikia na kujifunza kutoka kwazo. Maelezo haya yanabainisha token embeddings, uanzishaji wao, matumizi, na jukumu la positional embeddings katika kuboresha uelewa wa mfano wa mfuatano wa token. +Baada ya kutenganisha data ya maandiko, hatua muhimu inayofuata katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT ni kuunda **token embeddings**. Token embeddings hubadilisha token zisizo na muundo (kama vile maneno au maneno ya sehemu) kuwa vector za nambari zinazoendelea ambazo mfano unaweza kushughulikia na kujifunza kutoka kwazo. Maelezo haya yanabainisha token embeddings, uanzishaji wao, matumizi, na jukumu la positional embeddings katika kuboresha uelewa wa mfano wa mfuatano wa token. > [!TIP] > Lengo la awamu hii ya tatu ni rahisi sana: **Patia kila moja ya token zilizopita katika msamiati vector ya vipimo vinavyotakiwa ili kufundisha mfano.** Kila neno katika msamiati litakuwa na pointi katika nafasi ya vipimo X.\ @@ -14,9 +14,9 @@ Baada ya kutenganisha data ya maandiko, hatua inayofuata muhimu katika kuandaa d ### **What Are Token Embeddings?** -**Token Embeddings** ni uwakilishi wa nambari wa token katika nafasi ya vector inayoendelea. Kila token katika msamiati inahusishwa na vector ya kipekee ya vipimo vilivyowekwa. Vectors hizi zinakamata taarifa za semantiki na sintaksia kuhusu token, na kuwezesha mfano kuelewa uhusiano na mifumo katika data. +**Token Embeddings** ni uwakilishi wa nambari wa token katika nafasi ya vector inayoendelea. Kila token katika msamiati inahusishwa na vector ya kipekee ya vipimo vilivyowekwa. Vectors hizi zinakamata taarifa za maana na sintaksia kuhusu token, na kuwezesha mfano kuelewa uhusiano na mifumo katika data. -- **Ukubwa wa Msamiati:** Jumla ya idadi ya token za kipekee (mfano, maneno, sehemu za maneno) katika msamiati wa mfano. +- **Ukubwa wa Msamiati:** Jumla ya token za kipekee (k.m., maneno, maneno ya sehemu) katika msamiati wa mfano. - **Vipimo vya Embedding:** Idadi ya thamani za nambari (vipimo) katika vector ya kila token. Vipimo vya juu vinaweza kukamata taarifa za kina zaidi lakini vinahitaji rasilimali zaidi za kompyuta. **Mfano:** @@ -70,7 +70,7 @@ tensor([[-0.4015, 0.9666, -1.1481]], grad_fn=) **Tafsiri:** - Token katika index `3` inawakilishwa na vector `[-0.4015, 0.9666, -1.1481]`. -- Hizi ni thamani zinazoweza kufundishwa ambazo modeli itazirekebisha wakati wa mafunzo ili kuwakilisha muktadha na maana ya token vizuri zaidi. +- Thamani hizi ni vigezo vinavyoweza kufundishwa ambavyo modeli itarekebisha wakati wa mafunzo ili kuwakilisha muktadha na maana ya token vizuri zaidi. ### **Jinsi Token Embeddings Zinavyofanya Kazi Wakati wa Mafunzo** @@ -159,11 +159,11 @@ Combined Embedding = Token Embedding + Positional Embedding **Faida za Positional Embeddings:** - **Uelewa wa Muktadha:** Mfano unaweza kutofautisha kati ya tokens kulingana na nafasi zao. -- **Uelewa wa Mfululizo:** Inamwezesha mfano kuelewa sarufi, sintaksia, na maana zinazotegemea muktadha. +- **Uelewa wa Mfuatano:** Inamwezesha mfano kuelewa sarufi, sintaksia, na maana zinazotegemea muktadha. ## Mfano wa Kanuni -Ikifuatiwa na mfano wa kanuni kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb): +Ifuatayo ni mfano wa kanuni kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb): ```python # Use previous code... @@ -205,4 +205,4 @@ print(input_embeddings.shape) # torch.Size([8, 4, 256]) - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/4.-attention-mechanisms.md b/src/AI/AI-llm-architecture/4.-attention-mechanisms.md index 15f50465e..eef0b6316 100644 --- a/src/AI/AI-llm-architecture/4.-attention-mechanisms.md +++ b/src/AI/AI-llm-architecture/4.-attention-mechanisms.md @@ -1,10 +1,10 @@ # 4. Attention Mechanisms -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## Attention Mechanisms and Self-Attention in Neural Networks -Mekanismu za umakini huruhusu mitandao ya neva ku **zingatia sehemu maalum za ingizo wakati wa kuzalisha kila sehemu ya pato**. Wanatoa uzito tofauti kwa ingizo tofauti, wakisaidia mfano kuamua ni ingizo gani lina umuhimu zaidi kwa kazi inayofanywa. Hii ni muhimu katika kazi kama tafsiri ya mashine, ambapo kuelewa muktadha wa sentensi nzima ni muhimu kwa tafsiri sahihi. +Mekanismu za umakini huruhusu mitandao ya neva **kuzingatia sehemu maalum za ingizo wakati wa kuzalisha kila sehemu ya pato**. Wanatoa uzito tofauti kwa ingizo tofauti, wakisaidia mfano kuamua ni ingizo gani lina umuhimu zaidi kwa kazi inayofanywa. Hii ni muhimu katika kazi kama tafsiri ya mashine, ambapo kuelewa muktadha wa sentensi nzima ni muhimu kwa tafsiri sahihi. > [!TIP] > Lengo la awamu hii ya nne ni rahisi sana: **Tumia baadhi ya mekanismu za umakini**. Hizi zitakuwa **tabaka nyingi zinazojirudia** ambazo zitakuwa **zinanasa uhusiano wa neno katika msamiati na majirani zake katika sentensi ya sasa inayotumika kufundisha LLM**.\ @@ -12,7 +12,7 @@ Mekanismu za umakini huruhusu mitandao ya neva ku **zingatia sehemu maalum za in ### Understanding Attention Mechanisms -Katika mifano ya jadi ya mfuatano-kwa-mfuatano inayotumika kwa tafsiri ya lugha, mfano unachakata mfuatano wa ingizo kuwa vector ya muktadha wa ukubwa wa kudumu. Hata hivyo, mbinu hii inakabiliwa na changamoto na sentensi ndefu kwa sababu vector ya muktadha wa ukubwa wa kudumu inaweza isichukue habari zote muhimu. Mekanismu za umakini zinashughulikia kikomo hiki kwa kuruhusu mfano kuzingatia token zote za ingizo wakati wa kuzalisha kila token ya pato. +Katika mifano ya jadi ya mfuatano-kwa-mfuatano inayotumika kwa tafsiri ya lugha, mfano unachakata mfuatano wa ingizo kuwa vector ya muktadha wa ukubwa wa kudumu. Hata hivyo, mbinu hii inakabiliwa na sentensi ndefu kwa sababu vector ya muktadha wa ukubwa wa kudumu inaweza isichukue habari zote muhimu. Mekanismu za umakini zinashughulikia kikomo hiki kwa kuruhusu mfano kuzingatia token zote za ingizo wakati wa kuzalisha kila token ya pato. #### Example: Machine Translation @@ -25,12 +25,12 @@ Umakini wa ndani, au umakini wa ndani, ni mekanismu ambapo umakini unatumika nda #### Key Concepts - **Tokens**: Vipengele vya kibinafsi vya mfuatano wa ingizo (mfano, maneno katika sentensi). -- **Embeddings**: Uwiano wa vector wa token, ukichukua habari za maana. +- **Embeddings**: Uwaki wa vector wa token, ukichukua habari ya maana. - **Attention Weights**: Thamani zinazotathmini umuhimu wa kila token ikilinganishwa na nyingine. ### Calculating Attention Weights: A Step-by-Step Example -Tuchukue sentensi **"Hello shiny sun!"** na kuwakilisha kila neno kwa embedding ya vipimo 3-dimensional: +Fikiria sentensi **"Hello shiny sun!"** na uwakilishe kila neno kwa embedding ya vipimo 3-dimensional: - **Hello**: `[0.34, 0.22, 0.54]` - **shiny**: `[0.53, 0.34, 0.98]` @@ -41,9 +41,9 @@ Lengo letu ni kuhesabu **vector ya muktadha** kwa neno **"shiny"** kwa kutumia u #### Step 1: Compute Attention Scores > [!TIP] -> Piga kila thamani ya kipimo cha swali na ile inayofaa ya kila token na kuongeza matokeo. Unapata thamani 1 kwa kila jozi ya token. +> Piga kila thamani ya kipimo cha swali na ile inayofaa ya kila token na ongeza matokeo. Unapata thamani 1 kwa kila jozi ya token. -Kwa kila neno katika sentensi, hesabu **alama za umakini** kuhusiana na "shiny" kwa kuhesabu bidhaa ya dot ya embeddings zao. +Kwa kila neno katika sentensi, hesabu **alama za umakini** kuhusiana na "shiny" kwa kuhesabu bidhaa ya dot ya uwakilishi wao. **Attention Score between "Hello" and "shiny"** @@ -62,34 +62,34 @@ Kwa kila neno katika sentensi, hesabu **alama za umakini** kuhusiana na "shiny" > [!TIP] > Usipoteze mwelekeo katika maneno ya kihesabu, lengo la kazi hii ni rahisi, normalize uzito wote ili **wajumuishe 1 kwa jumla**. > -> Aidha, **softmax** inatumika kwa sababu inasisitiza tofauti kutokana na sehemu ya exponential, ikifanya iwe rahisi kugundua thamani muhimu. +> Zaidi ya hayo, **softmax** inatumika kwa sababu inasisitiza tofauti kutokana na sehemu ya exponential, ikifanya iwe rahisi kugundua thamani zinazofaa. -Tumia **softmax function** kwa alama za umakini ili kuziweka kuwa uzito wa umakini ambao unajumlisha hadi 1. +Tumia **softmax function** kwa alama za umakini ili kuziweka kuwa uzito wa umakini unaojumlisha hadi 1.
-Kuandika exponentials: +Kuhesabu exponentials:
-Kuandika jumla: +Kuhesabu jumla:
-Kuandika uzito wa umakini: +Kuhesabu uzito wa umakini:
#### Step 3: Compute the Context Vector > [!TIP] -> Chukua kila uzito wa umakini na uipige kwa vipimo vya token vinavyohusiana na kisha jumlisha vipimo vyote ili kupata vector 1 tu (vector ya muktadha) +> Chukua kila uzito wa umakini na upige kwa vipimo vya token vinavyohusiana na kisha ongeza vipimo vyote ili kupata vector 1 tu (vector ya muktadha) -**Vector ya muktadha** inahesabiwa kama jumla ya uzito wa embeddings za maneno yote, kwa kutumia uzito wa umakini. +**Vector ya muktadha** inahesabiwa kama jumla yenye uzito wa uwakilishi wa maneno yote, ikitumia uzito wa umakini.
-Kuandika kila kipengele: +Kuhesabu kila kipengele: - **Weighted Embedding of "Hello"**: @@ -103,21 +103,21 @@ Kuandika kila kipengele:
-Kujumlisha embeddings zenye uzito: +Kuongeza uwakilishi wenye uzito: `context vector=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]` -**Vector hii ya muktadha inawakilisha embedding iliyoimarishwa kwa neno "shiny," ikijumuisha habari kutoka kwa maneno yote katika sentensi.** +**Hii vector ya muktadha inawakilisha uwakilishi ulioimarishwa kwa neno "shiny," ikijumuisha habari kutoka kwa maneno yote katika sentensi.** ### Summary of the Process -1. **Compute Attention Scores**: Tumia bidhaa ya dot kati ya embedding ya neno lengwa na embeddings za maneno yote katika mfuatano. -2. **Normalize Scores to Get Attention Weights**: Tumia softmax function kwa alama za umakini ili kupata uzito unaojumlisha hadi 1. -3. **Compute Context Vector**: Piga embedding ya kila neno kwa uzito wake wa umakini na jumlisha matokeo. +1. **Compute Attention Scores**: Tumia bidhaa ya dot kati ya uwakilishi wa neno lengwa na uwakilishi wa maneno yote katika mfuatano. +2. **Normalize Scores to Get Attention Weights**: Tumia kazi ya softmax kwa alama za umakini ili kupata uzito unaojumlisha hadi 1. +3. **Compute Context Vector**: Piga uwakilishi wa kila neno kwa uzito wake wa umakini na ongeza matokeo. ## Self-Attention with Trainable Weights -Katika mazoezi, mekanismu za umakini wa ndani hutumia **uzito unaoweza kufundishwa** kujifunza uwakilishi bora wa maswali, funguo, na thamani. Hii inahusisha kuanzisha matrices tatu za uzito: +Katika mazoezi, mekanismu za umakini wa ndani hutumia **uzito unaoweza kufundishwa** kujifunza uwakilishi bora kwa maswali, funguo, na thamani. Hii inahusisha kuanzisha matrices tatu za uzito:
@@ -129,14 +129,14 @@ Kila token itakuwa na swali lake, funguo na matrix ya thamani kwa kupiga thamani
-Matrices hizi zinabadilisha embeddings za asili kuwa nafasi mpya inayofaa kwa kuhesabu umakini. +Matrices hizi zinabadilisha uwakilishi wa awali kuwa nafasi mpya inayofaa kwa kuhesabu umakini. **Example** Tukichukulia: -- Dimensheni ya ingizo `din=3` (ukubwa wa embedding) -- Dimensheni ya pato `dout=2` (dimensheni inayotakiwa kwa maswali, funguo, na thamani) +- Dimensheni ya ingizo `din=3` (ukubwa wa uwakilishi) +- Dimensheni ya pato `dout=2` (ukubwa unaotakiwa kwa maswali, funguo, na thamani) Anzisha matrices za uzito: ```python @@ -165,14 +165,14 @@ Kama ilivyo katika mfano wa awali, lakini wakati huu, badala ya kutumia thamani **Scale the Scores** -Ili kuzuia dot products kuwa kubwa sana, ziongeze kwa mzizi wa mraba wa kipimo cha funguo `dk`​: +Ili kuzuia bidhaa za dot kuwa kubwa sana, ziongeze kwa mzizi wa mraba wa kipimo cha funguo `dk`​:
> [!TIP] -> Alama inagawanywa kwa mzizi wa mraba wa vipimo kwa sababu dot products zinaweza kuwa kubwa sana na hii husaidia kuziangalia. +> Alama inagawanywa kwa mzizi wa mraba wa vipimo kwa sababu bidhaa za dot zinaweza kuwa kubwa sana na hii husaidia kuzirekebisha. -**Apply Softmax to Obtain Attention Weights:** Kama katika mfano wa awali, normalize thamani zote ili zijumuishe 1. +**Apply Softmax to Obtain Attention Weights:** Kama katika mfano wa awali, sanifisha thamani zote ili zijumuishe 1.
@@ -228,7 +228,7 @@ print(sa_v2(inputs)) ## Causal Attention: Kuficha Maneno ya Baadaye -Kwa LLMs tunataka mfano uzingatie tu tokens ambazo zinaonekana kabla ya nafasi ya sasa ili **kutabiri token inayofuata**. **Causal attention**, pia inajulikana kama **masked attention**, inafanikiwa kwa kubadilisha mekanismu ya attention ili kuzuia ufikiaji wa tokens za baadaye. +Kwa LLMs tunataka mfano uzingatie tu tokens ambazo zinaonekana kabla ya nafasi ya sasa ili **kutabiri token inayofuata**. **Causal attention**, pia inajulikana kama **masked attention**, inafanikiwa kwa kubadilisha mekanizma ya attention ili kuzuia ufikiaji wa tokens za baadaye. ### Kutumia Mask ya Causal Attention @@ -252,12 +252,12 @@ attention_weights = torch.softmax(masked_scores, dim=-1) ### Kuficha Uzito wa Ziada wa Attention kwa Kutumia Dropout -Ili **kuzuia overfitting**, tunaweza kutumia **dropout** kwa uzito wa attention baada ya operesheni ya softmax. Dropout **hufanya sifuri kwa nasibu baadhi ya uzito wa attention** wakati wa mafunzo. +Ili **kuzuia overfitting**, tunaweza kutumia **dropout** kwa uzito wa attention baada ya operesheni ya softmax. Dropout **hufanya baadhi ya uzito wa attention kuwa sifuri kwa nasibu** wakati wa mafunzo. ```python dropout = nn.Dropout(p=0.5) attention_weights = dropout(attention_weights) ``` -Mtu wa kawaida wa kuacha ni takriban 10-20%. +Kiwango cha kawaida cha kuacha ni takriban 10-20%. ### Code Example @@ -413,9 +413,9 @@ Kwa utekelezaji mwingine wa kompakt na mzuri unaweza kutumia [`torch.nn.Multihea > > Ingawa kuruhusu kila kichwa kushughulikia vipimo vyote vya embedding kunaweza kuonekana kuwa na faida kwa sababu kila kichwa kitakuwa na ufikiaji wa taarifa kamili, mazoea ya kawaida ni **kugawanya vipimo vya embedding kati ya vichwa**. Njia hii inalinganisha ufanisi wa kompyuta na utendaji wa mfano na inahimiza kila kichwa kujifunza uwakilishi tofauti. Hivyo, kugawanya vipimo vya embedding kwa ujumla kunapewa kipaumbele kuliko kuwa na kila kichwa kinachunguza vipimo vyote. -## References +## Marejeo - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/5.-llm-architecture.md b/src/AI/AI-llm-architecture/5.-llm-architecture.md index 9aa748366..fb42ad3d3 100644 --- a/src/AI/AI-llm-architecture/5.-llm-architecture.md +++ b/src/AI/AI-llm-architecture/5.-llm-architecture.md @@ -1,6 +1,6 @@ # 5. LLM Architecture -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## LLM Architecture @@ -21,7 +21,7 @@ Mwakilishi wa kiwango cha juu unaweza kuonekana katika: - **Masked Multi-Head Attention**: Inaruhusu mfano kuzingatia sehemu tofauti za maandiko ya ingizo kwa wakati mmoja. - **Layer Normalization**: Hatua ya kawaida ili kuimarisha na kuboresha mafunzo. - **Feed Forward Layer**: Inawajibika kwa kuchakata habari kutoka kwa tabaka la umakini na kufanya utabiri kuhusu token inayofuata. -- **Dropout Layers**: Tabaka hizi zinazuia overfitting kwa kuacha vitengo kwa bahati nasibu wakati wa mafunzo. +- **Dropout Layers**: Tabaka hizi zinazuia overfitting kwa kuangusha vitengo kwa bahati nasibu wakati wa mafunzo. 4. **Final Output Layer**: Mfano unatoa **4x50,257-dimensional tensor**, ambapo **50,257** inawakilisha ukubwa wa msamiati. Kila safu katika tensor hii inahusiana na vector ambayo mfano hutumia kutabiri neno linalofuata katika mfuatano. 5. **Goal**: Lengo ni kuchukua embeddings hizi na kuzibadilisha tena kuwa maandiko. Kwa hakika, safu ya mwisho ya matokeo inatumika kuzalisha neno linalofuata, linalowakilishwa kama "forward" katika mchoro huu. @@ -212,14 +212,14 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) * ``` #### **Madhumuni na Ufanisi** -- **GELU (Gaussian Error Linear Unit):** Kazi ya kuamsha ambayo inaingiza kutokuwa na mstari katika mfano. -- **Kuamsha kwa Ufanisi:** Tofauti na ReLU, ambayo inafuta maingizo hasi, GELU inachora kwa laini maingizo kuwa matokeo, ikiruhusu thamani ndogo, zisizo sifuri kwa maingizo hasi. +- **GELU (Gaussian Error Linear Unit):** Kazi ya kuamsha ambayo inaingiza kutokuwa na mstari ndani ya mfano. +- **Kuamsha kwa Ufanisi:** Tofauti na ReLU, ambayo inafuta maingizo hasi, GELU inachora kwa laini maingizo kuwa matokeo, ikiruhusu thamani ndogo, zisizo za sifuri kwa maingizo hasi. - **Mwelekeo wa Kihesabu:**
> [!TIP] -> Lengo la matumizi ya kazi hii baada ya tabaka za mstari ndani ya tabaka la FeedForward ni kubadilisha data ya mstari kuwa isiyo ya mstari ili kuruhusu mfano kujifunza uhusiano tata, usio wa mstari. +> Lengo la matumizi ya kazi hii baada ya tabaka za mstari ndani ya tabaka la FeedForward ni kubadilisha data za mstari kuwa zisizo za mstari ili kuruhusu mfano kujifunza uhusiano tata, zisizo za mstari. ### **Mtandao wa Neva wa FeedForward** @@ -245,14 +245,14 @@ return x # Output shape: (batch_size, seq_len, emb_dim) ``` #### **Madhumuni na Ufanisi** -- **Mtandao wa FeedForward Kulingana na Nafasi:** Inatumia mtandao wa viwango viwili uliounganishwa kikamilifu kwa kila nafasi tofauti na kwa njia sawa. -- **Maelezo ya Kiwango:** +- **Mtandao wa FeedForward Kulingana na Nafasi:** Inatumia mtandao wa viwango viwili vilivyounganishwa kwa kila nafasi tofauti na kwa njia sawa. +- **Maelezo ya Viwango:** - **Kiwango cha Kwanza cha Mstari:** Kinapanua ukubwa kutoka `emb_dim` hadi `4 * emb_dim`. - **Kazi ya GELU:** Inatumia kutokuwa na mstari. - **Kiwango cha Pili cha Mstari:** Kinapunguza ukubwa kurudi kwenye `emb_dim`. > [!TIP] -> Kama unavyoona, mtandao wa Feed Forward unatumia viwango 3. Kiwango cha kwanza ni kiwango cha mstari ambacho kitazidisha ukubwa kwa 4 kwa kutumia uzito wa mstari (vigezo vya kufundisha ndani ya mfano). Kisha, kazi ya GELU inatumika katika ukubwa wote ili kuleta mabadiliko yasiyo ya mstari ili kupata uwakilishi mzuri na hatimaye kiwango kingine cha mstari kinatumika kurudi kwenye ukubwa wa awali wa ukubwa. +> Kama unavyoona, mtandao wa Feed Forward unatumia viwango 3. Kiwango cha kwanza ni kiwango cha mstari ambacho kitazidisha ukubwa kwa 4 kwa kutumia uzito wa mstari (vigezo vya kufundisha ndani ya mfano). Kisha, kazi ya GELU inatumika katika ukubwa wote ili kuleta mabadiliko yasiyo ya mstari ili kupata uwakilishi mzuri zaidi na hatimaye kiwango kingine cha mstari kinatumika kurudi kwenye ukubwa wa awali wa ukubwa. ### **Mekanismu ya Umakini wa Vichwa Vingi** @@ -271,7 +271,7 @@ Hii tayari ilielezwa katika sehemu ya awali. - **Mipango ya Matokeo:** Kiwango cha mstari cha kuunganisha matokeo ya vichwa vyote. > [!TIP] -> Lengo la mtandao huu ni kupata uhusiano kati ya token katika muktadha sawa. Aidha, token zimegawanywa katika vichwa tofauti ili kuzuia overfitting ingawa uhusiano wa mwisho uliofanywa kwa kila kichwa unachanganywa mwishoni mwa mtandao huu. +> Lengo la mtandao huu ni kupata uhusiano kati ya token katika muktadha sawa. Aidha, token zimegawanywa katika vichwa tofauti ili kuzuia overfitting ingawa uhusiano wa mwisho uliopatikana kwa kila kichwa unachanganywa mwishoni mwa mtandao huu. > > Aidha, wakati wa mafunzo **mask ya sababu** inatumika ili token za baadaye zisihesabiwe wakati wa kutafuta uhusiano maalum kwa token na **dropout** pia inatumika ili **kuzuia overfitting**. @@ -296,15 +296,15 @@ return self.scale * norm_x + self.shift - **Layer Normalization:** Mbinu inayotumika kurekebisha ingizo kati ya vipengele (embedding dimensions) kwa kila mfano binafsi katika kundi. - **Vipengele:** - **`eps`:** Kiwango kidogo (`1e-5`) kinachoongezwa kwa variance ili kuzuia kugawanya kwa sifuri wakati wa normalization. -- **`scale` na `shift`:** Vigezo vinavyoweza kujifunza (`nn.Parameter`) vinavyomruhusu modeli kupanua na kuhamasisha matokeo yaliyorekebishwa. Vimeanzishwa kuwa moja na sifuri, mtawalia. +- **`scale` na `shift`:** Vigezo vinavyoweza kujifunza (`nn.Parameter`) vinavyomruhusu mfano kupima na kuhamasisha matokeo yaliyorekebishwa. Vimeanzishwa kuwa moja na sifuri, mtawalia. - **Mchakato wa Kurekebisha:** -- **Hesabu ya Mean (`mean`):** Hesabu ya wastani wa ingizo `x` kati ya dimension ya embedding (`dim=-1`), ikihifadhi dimension kwa ajili ya broadcasting (`keepdim=True`). -- **Hesabu ya Variance (`var`):** Hesabu ya variance ya `x` kati ya dimension ya embedding, pia ikihifadhi dimension. Kigezo cha `unbiased=False` kinahakikisha kuwa variance inahesabiwa kwa kutumia mhesabu yenye upendeleo (kugawanya kwa `N` badala ya `N-1`), ambayo ni sahihi wakati wa kurekebisha juu ya vipengele badala ya sampuli. -- **Normalize (`norm_x`):** Inapunguza wastani kutoka `x` na kugawanya kwa mzizi wa variance pamoja na `eps`. +- **Hesabu Mean (`mean`):** Hesabu mean ya ingizo `x` kati ya dimension ya embedding (`dim=-1`), ikihifadhi dimension kwa ajili ya broadcasting (`keepdim=True`). +- **Hesabu Variance (`var`):** Hesabu variance ya `x` kati ya dimension ya embedding, pia ikihifadhi dimension. Paramenta `unbiased=False` inahakikisha kuwa variance inahesabiwa kwa kutumia mhesabu wa biased (kugawanya kwa `N` badala ya `N-1`), ambayo ni sahihi wakati wa kurekebisha juu ya vipengele badala ya sampuli. +- **Normalize (`norm_x`):** Inapunguza mean kutoka `x` na kugawanya kwa mzizi wa variance pamoja na `eps`. - **Scale na Shift:** Inatumia vigezo vinavyoweza kujifunza `scale` na `shift` kwa matokeo yaliyorekebishwa. > [!TIP] -> Lengo ni kuhakikisha wastani wa 0 na variance ya 1 kati ya vipimo vyote vya token sawa. Lengo la hili ni **kuimarisha mafunzo ya mitandao ya neva ya kina** kwa kupunguza mabadiliko ya ndani ya covariate, ambayo inahusisha mabadiliko katika usambazaji wa uhamasishaji wa mtandao kutokana na kubadilishwa kwa vigezo wakati wa mafunzo. +> Lengo ni kuhakikisha mean ya 0 na variance ya 1 kati ya dimensions zote za token sawa. Lengo la hili ni **kuimarisha mafunzo ya mitandao ya neva ya kina** kwa kupunguza mabadiliko ya ndani ya covariate, ambayo inahusisha mabadiliko katika usambazaji wa uhamasishaji wa mtandao kutokana na kubadilisha vigezo wakati wa mafunzo. ### **Transformer Block** @@ -352,8 +352,8 @@ return x # Output shape: (batch_size, seq_len, emb_dim) - **Muundo wa Tabaka:** Inachanganya umakini wa vichwa vingi, mtandao wa feedforward, urekebishaji wa tabaka, na muunganisho wa ziada. - **Urekebishaji wa Tabaka:** Unatumika kabla ya tabaka za umakini na feedforward kwa mafunzo thabiti. -- **Muunganisho wa Ziada (Njia Fupi):** Ongeza ingizo la tabaka kwa matokeo yake ili kuboresha mtiririko wa gradient na kuwezesha mafunzo ya mitandao yenye kina. -- **Dropout:** Unatumika baada ya tabaka za umakini na feedforward kwa udhibiti. +- **Muunganisho wa Ziada (Njia Fupi):** Ongeza ingizo la tabaka kwa matokeo yake ili kuboresha mtiririko wa gradient na kuwezesha mafunzo ya mitandao mirefu. +- **Dropout:** Unatumika baada ya tabaka za umakini na feedforward kwa ajili ya urekebishaji. #### **Ufanisi wa Hatua kwa Hatua** @@ -361,7 +361,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim) - **Ingizo (`shortcut`):** Hifadhi ingizo la awali kwa muunganisho wa ziada. - **Urekebishaji wa Tabaka (`norm1`):** Rekebisha ingizo. - **Umakini wa Vichwa Vingi (`att`):** Tumia umakini wa kibinafsi. -- **Dropout (`drop_shortcut`):** Tumia dropout kwa udhibiti. +- **Dropout (`drop_shortcut`):** Tumia dropout kwa urekebishaji. - **Ongeza Ziada (`x + shortcut`):** Changanya na ingizo la awali. 2. **Njia ya Pili ya Ziada (FeedForward):** - **Ingizo (`shortcut`):** Hifadhi ingizo lililosasishwa kwa muunganisho wa ziada unaofuata. @@ -374,7 +374,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim) > Block ya transformer inakusanya mitandao yote pamoja na kutumia **urekebishaji** na **dropouts** kuboresha utulivu wa mafunzo na matokeo.\ > Kumbuka jinsi dropouts zinavyofanywa baada ya matumizi ya kila mtandao wakati urekebishaji unatumika kabla. > -> Zaidi ya hayo, inatumia njia fupi ambazo zinajumuisha **kuongeza matokeo ya mtandao na ingizo lake**. Hii husaidia kuzuia tatizo la gradient inayopotea kwa kuhakikisha kuwa tabaka za mwanzo zinachangia "kiasi" sawa na zile za mwisho. +> Zaidi ya hayo, inatumia njia fupi ambazo zinajumuisha **kuongeza matokeo ya mtandao na ingizo lake**. Hii husaidia kuzuia tatizo la gradient inayopotea kwa kuhakikisha kwamba tabaka za mwanzo zinachangia "kiasi" sawa na zile za mwisho. ### **GPTModel** @@ -435,20 +435,20 @@ return logits # Output shape: (batch_size, seq_len, vocab_size) ``` #### **Madhumuni na Ufanisi** -- **Mifumo ya Kuunganisha:** +- **Embedding Layers:** - **Token Embeddings (`tok_emb`):** Hubadilisha viashiria vya token kuwa embeddings. Kama ukumbusho, hizi ni uzito zinazotolewa kwa kila kipimo cha kila token katika msamiati. -- **Positional Embeddings (`pos_emb`):** Inaongeza taarifa za nafasi kwa embeddings ili kukamata mpangilio wa token. Kama ukumbusho, hizi ni uzito zinazotolewa kwa token kulingana na nafasi yake katika maandiko. -- **Dropout (`drop_emb`):** Inatumika kwa embeddings kwa ajili ya udhibiti. +- **Positional Embeddings (`pos_emb`):** Ongeza taarifa za nafasi kwa embeddings ili kukamata mpangilio wa token. Kama ukumbusho, hizi ni uzito zinazotolewa kwa token kulingana na nafasi yake katika maandiko. +- **Dropout (`drop_emb`):** Inatumika kwa embeddings kwa ajili ya regularisation. - **Transformer Blocks (`trf_blocks`):** Kifungu cha `n_layers` transformer blocks ili kushughulikia embeddings. -- **Final Normalization (`final_norm`):** Kiwango cha kawaida kabla ya safu ya matokeo. -- **Output Layer (`out_head`):** Inatoa hali za mwisho zilizofichwa kwa ukubwa wa msamiati ili kutoa logits kwa ajili ya utabiri. +- **Final Normalization (`final_norm`):** Kiwango cha normalization kabla ya safu ya matokeo. +- **Output Layer (`out_head`):** Inatabiri hali za mwisho zilizofichwa kwa ukubwa wa msamiati ili kutoa logits kwa ajili ya utabiri. > [!TIP] > Lengo la darasa hili ni kutumia mitandao mingine yote iliyotajwa ili **kutabiri token inayofuata katika mfuatano**, ambayo ni muhimu kwa kazi kama vile uzalishaji wa maandiko. > -> Kumbuka jinsi itakavy **tumia transformer blocks nyingi kadri zilivyoonyeshwa** na kwamba kila transformer block inatumia mtandao mmoja wa multi-head attestation, mtandao mmoja wa feed forward na kadhaa ya normalizations. Hivyo ikiwa transformer blocks 12 zinatumika, ongeza hii kwa 12. +> Kumbuka jinsi itakavy **tumia blocks za transformer nyingi kadri zilivyoonyeshwa** na kwamba kila block ya transformer inatumia neti moja ya multi-head attestation, neti moja ya feed forward na normalizations kadhaa. Hivyo kama blocks 12 za transformer zinatumika, ongeza hii kwa 12. > -> Zaidi ya hayo, safu ya **normalization** inaongezwa **kabla** ya **matokeo** na safu ya mwisho ya moja kwa moja inatumika mwishoni kupata matokeo yenye vipimo sahihi. Kumbuka jinsi kila vector ya mwisho ina ukubwa wa msamiati ulio tumika. Hii ni kwa sababu inajaribu kupata uwezekano kwa kila token inayowezekana ndani ya msamiati. +> Zaidi ya hayo, safu ya **normalization** inaongezwa **kabla** ya **matokeo** na safu ya mwisho ya linear inatumika mwishoni kupata matokeo yenye vipimo sahihi. Kumbuka jinsi kila vector ya mwisho ina ukubwa wa msamiati ulio tumika. Hii ni kwa sababu inajaribu kupata uwezekano kwa kila token inayowezekana ndani ya msamiati. ## Idadi ya Vigezo vya kufundisha @@ -483,14 +483,14 @@ token_embedding_params = 50257 * 768 = 38,597,376 ```python position_embedding_params = 1024 * 768 = 786,432 ``` -**Jumla ya Vigezo vya Embedding** +**Jumla ya Vigezo vya Kuunganisha** ```python embedding_params = token_embedding_params + position_embedding_params embedding_params = 38,597,376 + 786,432 = 39,383,808 ``` #### **2. Transformer Blocks** -Kuna blocks 12 za transformer, hivyo tutahesabu vigezo vya block moja kisha kuzidisha kwa 12. +Kuna blocks 12 za transformer, hivyo tutahesabu vigezo kwa block moja kisha kuzidisha kwa 12. **Parameters per Transformer Block** @@ -585,7 +585,7 @@ total_transformer_blocks_params = 7,085,568 * 12 = 85,026,816 ```python pythonCopy codefinal_layer_norm_params = 2 * 768 = 1,536 ``` -**b. Tabaka la Utoaji (`out_head`)** +**b. Tabaka la Kutolewa (`out_head`)** - **Tabaka:** `nn.Linear(emb_dim, vocab_size, bias=False)` - **Vigezo:** `emb_dim * vocab_size` @@ -610,7 +610,7 @@ total_params = 163,009,536 ``` ## Generate Text -Kuwa na mfano unaotabiri token inayofuata kama ile ya awali, inahitajika tu kuchukua thamani za token za mwisho kutoka kwa matokeo (kama zitakuwa zile za token inayotabiriwa), ambazo zitakuwa **thamani kwa kila kipengee katika msamiati** na kisha kutumia kazi ya `softmax` kubadilisha vipimo kuwa uwezekano vinavyos suma 1 na kisha kupata index ya kipengee kikubwa zaidi, ambacho kitakuwa index ya neno ndani ya msamiati. +Kuwa na mfano unaotabiri token inayofuata kama ile ya awali, inahitajika tu kuchukua thamani za token za mwisho kutoka kwa matokeo (kama zitakuwa zile za token iliyotabiriwa), ambazo zitakuwa **thamani kwa kila kipengee katika msamiati** na kisha kutumia kazi ya `softmax` kuboresha vipimo kuwa uwezekano vinavyos suma 1 na kisha kupata index ya kipengee kikubwa zaidi, ambacho kitakuwa index ya neno ndani ya msamiati. Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb): ```python @@ -668,4 +668,4 @@ print("Output length:", len(out[0])) - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md b/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md index 3a8281eae..50f1e25c1 100644 --- a/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md +++ b/src/AI/AI-llm-architecture/6.-pre-training-and-loading-models.md @@ -1,31 +1,31 @@ # 6. Pre-training & Loading models -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## Text Generation -Ili kufundisha mfano, tunahitaji mfano huo uweze kuzalisha tokens mpya. Kisha tutalinganisha tokens zilizozalishwa na zile zinazotarajiwa ili kufundisha mfano **kujifunza tokens anazohitaji kuzalisha**. +Ili kufundisha mfano, tutahitaji mfano huo uweze kuzalisha token mpya. Kisha tutalinganisha token zilizozalishwa na zile zinazotarajiwa ili kufundisha mfano **kujifunza token anazohitaji kuzalisha**. -Kama katika mifano ya awali, tayari tumepiga makadirio ya baadhi ya tokens, inawezekana kutumia kazi hiyo tena kwa kusudi hili. +Kama katika mifano ya awali, tayari tumepiga makadirio ya baadhi ya token, inawezekana kutumia kazi hiyo kwa kusudi hili. > [!TIP] > Lengo la awamu hii ya sita ni rahisi sana: **Fundisha mfano kutoka mwanzo**. Kwa hili, usanifu wa awali wa LLM utatumika na mizunguko kadhaa ikipita juu ya seti za data kwa kutumia kazi za hasara zilizofafanuliwa na msaidizi kufundisha vigezo vyote vya mfano. ## Text Evaluation -Ili kufanya mafunzo sahihi, inahitajika kupima makadirio yaliyopatikana kwa token inayotarajiwa. Lengo la mafunzo ni kuongeza uwezekano wa token sahihi, ambayo inahusisha kuongeza uwezekano wake kulinganisha na tokens nyingine. +Ili kufanya mafunzo sahihi, inahitajika kupima makadirio yaliyopatikana kwa token inayotarajiwa. Lengo la mafunzo ni kuongeza uwezekano wa token sahihi, ambayo inahusisha kuongeza uwezekano wake kulinganisha na token nyingine. -Ili kuongeza uwezekano wa token sahihi, uzito wa mfano lazima ubadilishwe ili uwezekano huo uweze kuongezeka. Sasisho za uzito zinafanywa kupitia **backpropagation**. Hii inahitaji **kazi ya hasara ili kuongeza**. Katika kesi hii, kazi itakuwa **tofauti kati ya makadirio yaliyofanywa na ile inayotakiwa**. +Ili kuongeza uwezekano wa token sahihi, uzito wa mfano lazima ubadilishwe ili uwezekano huo uweze kuongezeka. Sasisho za uzito zinafanywa kupitia **backpropagation**. Hii inahitaji **kazi ya hasara kuongeza**. Katika kesi hii, kazi itakuwa **tofauti kati ya makadirio yaliyofanywa na ile inayotakiwa**. Hata hivyo, badala ya kufanya kazi na makadirio ya moja kwa moja, itafanya kazi na logarithm yenye msingi n. Hivyo, ikiwa makadirio ya sasa ya token inayotarajiwa ilikuwa 7.4541e-05, logarithm ya asili (msingi *e*) ya **7.4541e-05** ni takriban **-9.5042**.\ -Kisha, kwa kila ingizo lenye urefu wa muktadha wa tokens 5 kwa mfano, mfano utahitaji kutabiri tokens 5, ambapo tokens 4 za kwanza ni za mwisho wa ingizo na ya tano ni ile iliyotabiriwa. Kwa hivyo, kwa kila ingizo tutakuwa na makadirio 5 katika kesi hiyo (hata kama tokens 4 za kwanza zilikuwa katika ingizo, mfano haujui hili) na hivyo tokens 5 zinazotarajiwa na kwa hiyo uwezekano 5 wa kuongeza. +Kisha, kwa kila ingizo lenye urefu wa muktadha wa token 5 kwa mfano, mfano utahitaji kutabiri token 5, ambapo token 4 za kwanza ni za mwisho wa ingizo na ya tano ni ile iliyotabiriwa. Kwa hivyo, kwa kila ingizo tutakuwa na makadirio 5 katika kesi hiyo (hata kama token 4 za kwanza zilikuwa katika ingizo, mfano haujui hili) zikiwa na token 5 zinazotarajiwa na hivyo uwezekano 5 wa kuongeza. -Kwa hivyo, baada ya kufanya logarithm ya asili kwa kila makadirio, **kati** inahesabiwa, **ishara ya minus inatolewa** (hii inaitwa _hasara ya msalaba_) na hiyo ndiyo **nambari ya kupunguza karibu na 0 iwezekanavyo** kwa sababu logarithm ya asili ya 1 ni 0: +Kwa hivyo, baada ya kufanya logarithm ya asili kwa kila makadirio, **kati** inahesabiwa, **ishara ya minus inatolewa** (hii inaitwa _hasara ya msalaba_) na hiyo ndiyo **nambari ya kupunguza iwe karibu na 0 kadri inavyowezekana** kwa sababu logarithm ya asili ya 1 ni 0:

https://camo.githubusercontent.com/3c0ab9c55cefa10b667f1014b6c42df901fa330bb2bc9cea88885e784daec8ba/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830355f636f6d707265737365642f63726f73732d656e74726f70792e776562703f313233

Njia nyingine ya kupima jinsi mfano ulivyo mzuri inaitwa perplexity. **Perplexity** ni kipimo kinachotumika kutathmini jinsi mfano wa uwezekano unavyotabiri sampuli. Katika uundaji wa lugha, inawakilisha **kutokuwa na uhakika kwa mfano** wakati wa kutabiri token inayofuata katika mfuatano.\ -Kwa mfano, thamani ya perplexity ya 48725, inamaanisha kwamba wakati inahitajika kutabiri token, haijui ni ipi kati ya tokens 48,725 katika msamiati ndiyo sahihi. +Kwa mfano, thamani ya perplexity ya 48725, inamaanisha kwamba wakati inahitajika kutabiri token, haijui ni ipi kati ya token 48,725 katika msamiati ndiyo sahihi. ## Pre-Train Example @@ -529,7 +529,7 @@ torch.save({ ``` ### Functions to transform text <--> ids -Hizi ni baadhi ya kazi rahisi ambazo zinaweza kutumika kubadilisha maandiko kutoka kwa msamiati kuwa ids na kinyume chake. Hii inahitajika mwanzoni mwa kushughulikia maandiko na mwishoni mwa utabiri: +Hizi ni baadhi ya kazi rahisi ambazo zinaweza kutumika kubadilisha kutoka maandiko kutoka kwa msamiati hadi ids na kinyume chake. Hii inahitajika mwanzoni mwa kushughulikia maandiko na mwishoni mwa utabiri: ```python # Functions to transform from tokens to ids and from to ids to tokens def text_to_token_ids(text, tokenizer): @@ -547,7 +547,7 @@ Katika sehemu ya awali, kazi ambayo ilipata **token inayowezekana zaidi** baada Kazi ifuatayo ya `generate_text`, itatumia dhana za `top-k`, `temperature` na `multinomial`. -- **`top-k`** inamaanisha kwamba tutaanza kupunguza hadi `-inf` uwezekano wa token zote isipokuwa token za juu k. Hivyo, ikiwa k=3, kabla ya kufanya uamuzi, token 3 zinazowezekana zaidi zitakuwa na uwezekano tofauti na `-inf`. +- **`top-k`** inamaanisha kwamba tutaanza kupunguza hadi `-inf` uwezekano wa token zote isipokuwa za juu k. Hivyo, ikiwa k=3, kabla ya kufanya uamuzi, token 3 zinazowezekana zaidi zitakuwa na uwezekano tofauti na `-inf`. - **`temperature`** inamaanisha kwamba kila uwezekano utagawanywa kwa thamani ya joto. Thamani ya `0.1` itaboresha uwezekano wa juu zaidi ikilinganishwa na wa chini, wakati joto la `5` kwa mfano litafanya iwe tambarare zaidi. Hii husaidia kuboresha tofauti katika majibu tunayotaka LLM iwe nayo. - Baada ya kutumia joto, kazi ya **`softmax`** inatumika tena ili kufanya token zote zilizobaki kuwa na uwezekano wa jumla wa 1. - Hatimaye, badala ya kuchagua token yenye uwezekano mkubwa zaidi, kazi ya **`multinomial`** inatumika ili **kutabiri token inayofuata kulingana na uwezekano wa mwisho**. Hivyo ikiwa token 1 ilikuwa na asilimia 70 ya uwezekano, token 2 asilimia 20 na token 3 asilimia 10, asilimia 70 ya wakati token 1 itachaguliwa, asilimia 20 ya wakati itakuwa token 2 na asilimia 10 ya wakati itakuwa token 3. @@ -592,17 +592,17 @@ idx = torch.cat((idx, idx_next), dim=1) # (batch_size, num_tokens+1) return idx ``` > [!TIP] -> Kuna mbadala wa kawaida wa `top-k` unaitwa [**`top-p`**](https://en.wikipedia.org/wiki/Top-p_sampling), pia inajulikana kama nucleus sampling, ambayo badala ya kupata sampuli k zenye uwezekano mkubwa, in **andaa** msamiati wote unaotokana kwa uwezekano na **jumlisha** kutoka kwa uwezekano mkubwa hadi mdogo hadi **kigezo kifikwe**. +> Kuna mbadala wa kawaida wa `top-k` unaitwa [**`top-p`**](https://en.wikipedia.org/wiki/Top-p_sampling), pia inajulikana kama nucleus sampling, ambayo badala ya kupata sampuli k zenye uwezekano mkubwa, in **andaa** msamiati wote unaotokana na uwezekano na **jumlisha** kutoka kwa uwezekano wa juu hadi wa chini hadi **kigezo kifikwe**. > > Kisha, **maneno hayo tu** ya msamiati yatazingatiwa kulingana na uwezekano wao wa jamaa. > -> Hii inaruhusu kutohitaji kuchagua idadi ya sampuli `k`, kwani k bora inaweza kuwa tofauti katika kila kesi, bali **tu kigezo**. +> Hii inaruhusu kutohitaji kuchagua idadi ya sampuli `k`, kwani k bora inaweza kuwa tofauti katika kila kesi, bali **kigezo tu**. > > _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._ > [!TIP] > Njia nyingine ya kuboresha maandiko yaliyotengenezwa ni kwa kutumia **Beam search** badala ya utafutaji wa greedy uliofanywa katika mfano huu.\ -> Tofauti na utafutaji wa greedy, ambao unachagua neno linalowezekana zaidi katika kila hatua na kujenga mlolongo mmoja, **beam search inashika rekodi ya 𝑘 k ya mlolongo wa sehemu zenye alama za juu** (zinazoitwa "beams") katika kila hatua. Kwa kuchunguza uwezekano wengi kwa wakati mmoja, inasawazisha ufanisi na ubora, ikiongeza nafasi za **kupata mlolongo bora zaidi** ambao unaweza kupuuziliwa mbali na mbinu ya greedy kutokana na chaguzi za mapema, zisizo bora. +> Tofauti na utafutaji wa greedy, ambao unachagua neno linalowezekana zaidi katika kila hatua na kujenga mlolongo mmoja, **beam search inashika rekodi ya 𝑘 k ya juu ya alama za sehemu za mlolongo** (zinazoitwa "beams") katika kila hatua. Kwa kuchunguza uwezekano wengi kwa wakati mmoja, inasawazisha ufanisi na ubora, ikiongeza nafasi za **kupata mlolongo bora zaidi** ambao unaweza kupuuziliwa mbali na mbinu ya greedy kutokana na chaguzi za mapema, zisizo bora. > > _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._ @@ -637,7 +637,7 @@ break return total_loss / num_batches ``` > [!TIP] -> **Gradient clipping** ni mbinu inayotumika kuboresha **utulivu wa mafunzo** katika mitandao mikubwa ya neva kwa kuweka **kigezo cha juu** kwa ukubwa wa gradient. Wakati gradients zinapozidi `max_norm` hii iliyowekwa awali, zinapunguzwa kwa uwiano ili kuhakikisha kwamba masasisho ya vigezo vya mfano yanabaki ndani ya kiwango kinachoweza kudhibitiwa, kuzuia matatizo kama vile gradients zinazoshuka na kuhakikisha mafunzo yanadhibitiwa na kuwa na utulivu zaidi. +> **Gradient clipping** ni mbinu inayotumika kuboresha **utulivu wa mafunzo** katika mitandao mikubwa ya neva kwa kuweka **kigezo cha juu** kwa ukubwa wa gradient. Wakati gradient zinapozidi `max_norm` hii iliyowekwa awali, zinapunguzwa kwa uwiano ili kuhakikisha kwamba masasisho ya vigezo vya mfano yanabaki ndani ya kiwango kinachoweza kudhibitiwa, kuzuia matatizo kama vile gradient zinazoshuka na kuhakikisha mafunzo yanadhibitiwa na kuwa thabiti zaidi. > > _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._ > @@ -645,15 +645,15 @@ return total_loss / num_batches
-### Loading Data +### Kupakia Data Mifunction `create_dataloader_v1` na `create_dataloader_v1` tayari zimejadiliwa katika sehemu ya awali. -Kutoka hapa kumbuka jinsi ilivyoainishwa kwamba 90% ya maandiko yatatumika kwa mafunzo wakati 10% itatumika kwa uthibitisho na seti zote zinahifadhiwa katika waendeshaji wa data 2 tofauti.\ +Kutoka hapa, kumbuka jinsi ilivyoainishwa kwamba 90% ya maandiko yatatumika kwa mafunzo wakati 10% itatumika kwa uthibitisho na seti zote zinahifadhiwa katika waendeshaji wa data 2 tofauti.\ Kumbuka kwamba wakati mwingine sehemu ya seti ya data pia inachwa kwa seti ya majaribio ili kutathmini vizuri utendaji wa mfano. Waendeshaji wote wa data wanatumia saizi sawa ya kundi, urefu wa juu na stride na idadi ya wafanyakazi (0 katika kesi hii).\ -Tofauti kuu ni data inayotumiwa na kila mmoja, na waathibitishaji hawatupi ya mwisho wala kuchanganya data kwani si muhimu kwa madhumuni ya uthibitisho. +Tofauti kuu ni data inayotumiwa na kila mmoja, na waathibitishaji hawang'oa ya mwisho wala kuchanganya data kwani si muhimu kwa madhumuni ya uthibitisho. Pia ukweli kwamba **stride ni kubwa kama urefu wa muktadha**, ina maana kwamba hakutakuwa na overlapping kati ya muktadha inayotumika kufundisha data (inapunguza overfitting lakini pia seti ya data ya mafunzo). @@ -757,11 +757,11 @@ The function `evaluate_model` inaitwa mara kwa mara kama inavyoashiria kwa kazi Kisha kazi kubwa `train_model_simple` ndiyo inayofanya mafunzo ya modeli. Inatarajia: - Mtu wa kupakia data ya mafunzo (ikiwa na data tayari imegawanywa na kuandaliwa kwa mafunzo) -- Mtu wa kupakia uthibitisho +- Mtu wa kuthibitisha - **optimizer** ya kutumia wakati wa mafunzo: Hii ndiyo kazi itakayotumia gradients na kusasisha vigezo ili kupunguza hasara. Katika kesi hii, kama utakavyoona, `AdamW` inatumika, lakini kuna nyingi zaidi. - `optimizer.zero_grad()` inaitwa ili kurekebisha gradients katika kila raundi ili zisijikusanye. -- **`lr`** param ni **kasi ya kujifunza** ambayo inamua **ukubwa wa hatua** zinazochukuliwa wakati wa mchakato wa kuboresha unaposasisha vigezo vya modeli. Kasi ya kujifunza **ndogo** inamaanisha optimizer **inafanya sasisho ndogo** kwa uzito, ambayo inaweza kusababisha **mwelekeo sahihi** lakini inaweza **kuchelewesha** mafunzo. Kasi ya kujifunza **kubwa** inaweza kuharakisha mafunzo lakini **ina hatari ya kupita** chini ya kiwango cha chini cha kazi ya hasara (**kuruka juu** ya mahali ambapo kazi ya hasara inakuwa ndogo). -- **Weight Decay** inabadilisha hatua ya **Kuhesabu Hasara** kwa kuongeza neno la ziada linaloadhibu uzito mkubwa. Hii inahimiza optimizer kupata suluhisho zenye uzito mdogo, ikisawazisha kati ya kufaa data vizuri na kuweka modeli rahisi ili kuzuia overfitting katika mifano ya kujifunza mashine kwa kuzuia modeli isijitoe umuhimu mwingi kwa kipengele kimoja. +- **`lr`** param ni **kasi ya kujifunza** ambayo inamua **ukubwa wa hatua** zinazochukuliwa wakati wa mchakato wa kuboresha unaposasisha vigezo vya modeli. Kasi ya kujifunza **ndogo** inamaanisha optimizer **inafanya sasisho ndogo** kwa uzito, ambayo inaweza kusababisha **mwelekeo** sahihi lakini inaweza **kuchelewesha** mafunzo. Kasi ya kujifunza **kubwa** inaweza kuharakisha mafunzo lakini **ina hatari ya kupita** chini ya kiwango cha chini cha kazi ya hasara (**kuruka juu** ya mahali ambapo kazi ya hasara inakuwa ndogo). +- **Weight Decay** inabadilisha hatua ya **Kuhesabu Hasara** kwa kuongeza neno la ziada linalotoza uzito mkubwa. Hii inahimiza optimizer kupata suluhisho zenye uzito mdogo, ikisawazisha kati ya kufaa data vizuri na kuweka modeli rahisi ili kuzuia overfitting katika mifano ya kujifunza mashine kwa kukataza modeli kupewa umuhimu mkubwa kwa kipengele chochote kimoja. - Optimizers za jadi kama SGD na L2 regularization zinachanganya uzito wa kupungua na gradient ya kazi ya hasara. Hata hivyo, **AdamW** (toleo la optimizer ya Adam) inatenganisha uzito wa kupungua kutoka kwa sasisho la gradient, ikisababisha udhibiti mzuri zaidi. - Kifaa cha kutumia kwa mafunzo - Idadi ya epochs: Idadi ya nyakati za kupita juu ya data ya mafunzo @@ -832,8 +832,8 @@ model.train() # Back to training model applying all the configurations > [!TIP] > Ili kuboresha kiwango cha kujifunza kuna mbinu kadhaa muhimu zinazoitwa **linear warmup** na **cosine decay.** > -> **Linear warmup** inajumuisha kufafanua kiwango cha awali cha kujifunza na kiwango cha juu na kuendelea kukisasisha baada ya kila kipindi. Hii ni kwa sababu kuanza mafunzo na masasisho madogo ya uzito hupunguza hatari ya mfano kukutana na masasisho makubwa, yanayoweza kuleta machafuko wakati wa awamu yake ya mafunzo.\ -> **Cosine decay** ni mbinu ambayo **inapunguza taratibu kiwango cha kujifunza** ikifuatia curve ya nusu-cosine **baada ya awamu ya warmup**, ikichelewesha masasisho ya uzito ili **kupunguza hatari ya kupita** chini ya kiwango cha hasara na kuhakikisha utulivu wa mafunzo katika awamu za baadaye. +> **Linear warmup** inajumuisha kufafanua kiwango cha awali cha kujifunza na kiwango cha juu na kuendelea kukisasisha baada ya kila kipindi. Hii ni kwa sababu kuanza mafunzo na masasisho madogo ya uzito hupunguza hatari ya mfano kukutana na masasisho makubwa, yanayoweza kuleta kutokuwa na utulivu wakati wa awamu yake ya mafunzo.\ +> **Cosine decay** ni mbinu ambayo **inapunguza polepole kiwango cha kujifunza** ikifuatia curve ya nusu-cosine **baada ya awamu ya warmup**, ikichelewesha masasisho ya uzito ili **kupunguza hatari ya kupita** chini ya kiwango cha hasara na kuhakikisha utulivu wa mafunzo katika awamu za baadaye. > > _Kumbuka kwamba maboresho haya hayajajumuishwa katika msimbo wa awali._ @@ -860,7 +860,7 @@ print(f"Training completed in {execution_time_minutes:.2f} minutes.") ``` ### Print training evolution -Kwa kutumia kazi ifuatayo inawezekana kuchapisha maendeleo ya mfano wakati ulikuwa unafundishwa. +Kwa kutumia kazi ifuatayo, inawezekana kuchapisha maendeleo ya mfano wakati ulikuwa unafundishwa. ```python import matplotlib.pyplot as plt from matplotlib.ticker import MaxNLocator @@ -943,4 +943,4 @@ Kuna skripti 2 za haraka za kupakia uzito wa GPT2 kwenye kompyuta yako. Kwa zote - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md b/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md index bcf039f64..b95cb63d0 100644 --- a/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md +++ b/src/AI/AI-llm-architecture/7.0.-lora-improvements-in-fine-tuning.md @@ -1,6 +1,6 @@ # 7.0. LoRA Improvements in fine-tuning -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## LoRA Improvements @@ -62,4 +62,4 @@ replace_linear_with_lora(module, rank, alpha) - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md b/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md index 5bbb187bf..5d04aaa4d 100644 --- a/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md +++ b/src/AI/AI-llm-architecture/7.1.-fine-tuning-for-classification.md @@ -1,6 +1,6 @@ # 7.1. Fine-Tuning for Classification -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## What is @@ -16,15 +16,15 @@ Fine-tuning ni mchakato wa kuchukua **modeli iliyofundishwa awali** ambayo imeji ### Data set size -Kwa kweli, ili kurekebisha modeli unahitaji data iliyopangwa ili kutumia kupecialize LLM yako. Katika mfano ulioanzishwa katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb), GPT2 inarekebishwa kugundua kama barua pepe ni spam au la kwa kutumia data kutoka [https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip](https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip)_._ +Bila shaka, ili kurekebisha modeli unahitaji data iliyopangwa ili kutumia kupecialize LLM yako. Katika mfano ulioanzishwa katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb), GPT2 inarekebishwa kugundua kama barua pepe ni spam au la kwa kutumia data kutoka [https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip](https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip)_._ Seti hii ya data ina mifano mingi zaidi ya "sio spam" kuliko "spam", kwa hivyo kitabu kinapendekeza **kutumia mifano ya "sio spam" sawa na ile ya "spam"** (hivyo, kuondoa mifano yote ya ziada kutoka kwa data ya mafunzo). Katika kesi hii, hii ilikuwa mifano 747 ya kila mmoja. Kisha, **70%** ya seti ya data inatumika kwa **mafunzo**, **10%** kwa **uthibitisho** na **20%** kwa **kujaribu**. -- **Seti ya uthibitisho** inatumika wakati wa awamu ya mafunzo ili kurekebisha **vigezo vya hyper** vya modeli na kufanya maamuzi kuhusu usanifu wa modeli, kwa ufanisi kusaidia kuzuia overfitting kwa kutoa mrejesho juu ya jinsi modeli inavyofanya kwenye data isiyoonekana. Inaruhusu maboresho ya mzunguko bila kupendelea tathmini ya mwisho. +- **Seti ya uthibitisho** inatumika wakati wa awamu ya mafunzo ili kurekebisha **vigezo vya hyper** vya modeli na kufanya maamuzi kuhusu usanifu wa modeli, kwa ufanisi kusaidia kuzuia overfitting kwa kutoa mrejesho juu ya jinsi modeli inavyofanya kwenye data isiyoonekana. Inaruhusu maboresho ya kurudi nyuma bila kupendelea tathmini ya mwisho. - Hii ina maana kwamba ingawa data iliyojumuishwa katika seti hii ya data haitumiki kwa mafunzo moja kwa moja, inatumika kurekebisha **vigezo bora vya hyper**, hivyo seti hii haiwezi kutumika kutathmini utendaji wa modeli kama ile ya kujaribu. -- Kinyume chake, **seti ya jaribio** inatumika **tu baada** ya modeli kufundishwa kikamilifu na marekebisho yote kukamilika; inatoa tathmini isiyo na upendeleo ya uwezo wa modeli kuweza kujumlisha kwa data mpya, isiyoonekana. Tathmini hii ya mwisho kwenye seti ya jaribio inatoa dalili halisi ya jinsi modeli inavyotarajiwa kufanya katika matumizi halisi. +- Kinyume chake, **seti ya kujaribu** inatumika **tu baada ya** modeli kufundishwa kikamilifu na marekebisho yote kukamilika; inatoa tathmini isiyo na upendeleo ya uwezo wa modeli kuweza kujumlisha kwa data mpya, isiyoonekana. Tathmini hii ya mwisho kwenye seti ya kujaribu inatoa dalili halisi ya jinsi modeli inavyotarajiwa kufanya katika matumizi halisi. ### Entries length @@ -49,7 +49,7 @@ out_features=num_classes ``` ## Parameters to tune -Ili kuboresha haraka, ni rahisi kutokuboresha vigezo vyote bali baadhi ya vigezo vya mwisho tu. Hii ni kwa sababu inajulikana kwamba tabaka za chini kwa ujumla zinashughulikia muundo wa lugha wa kimsingi na maana zinazofaa. Hivyo, **kuboresha tabaka za mwisho pekee mara nyingi inatosha na ni ya haraka zaidi**. +Ili kuboresha haraka ni rahisi kutokuboresha vigezo vyote bali baadhi ya vigezo vya mwisho tu. Hii ni kwa sababu inajulikana kwamba tabaka za chini kwa ujumla zinashughulikia muundo wa lugha wa kimsingi na maana zinazotumika. Hivyo, tu **kuboresha tabaka za mwisho mara nyingi inatosha na ni ya haraka zaidi**. ```python # This code makes all the parameters of the model unrtainable for param in model.parameters(): @@ -66,9 +66,9 @@ param.requires_grad = True ``` ## Entries to use for training -Katika sehemu za awali, LLM ilifundishwa kupunguza hasara ya kila token iliyotabiriwa, ingawa karibu token zote zilizotabiriwa zilikuwa katika sentensi ya ingizo (moja tu mwishoni ilitabiriwa kwa kweli) ili mfano uweze kuelewa lugha vizuri zaidi. +Katika sehemu za awali, LLM ilifundishwa kupunguza hasara ya kila token iliyotabiriwa, ingawa karibu token zote zilizotabiriwa zilikuwa katika sentensi ya ingizo (moja tu mwishoni ilitabiriwa kwa kweli) ili modeli iweze kuelewa lugha vizuri zaidi. -Katika kesi hii, tunajali tu kuhusu mfano kuwa na uwezo wa kutabiri kama mfano ni spam au la, hivyo tunajali tu kuhusu token ya mwisho iliyotabiriwa. Kwa hiyo, inahitajika kubadilisha kazi zetu za hasara za mafunzo ya awali ili kuchukua tu token hiyo katika akaunti. +Katika kesi hii, tunajali tu kuhusu uwezo wa modeli kutabiri ikiwa modeli ni spam au la, hivyo tunajali tu kuhusu token ya mwisho iliyotabiriwa. Kwa hiyo, inahitajika kubadilisha kazi zetu za hasara za mafunzo ya awali ili kuchukua tu token hiyo katika akaunti. Hii imewekwa katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb) kama: ```python @@ -101,14 +101,14 @@ logits = model(input_batch)[:, -1, :] # Logits of last output token loss = torch.nn.functional.cross_entropy(logits, target_batch) return loss ``` -Note how for each batch we are only interested in the **logits of the last token predicted**. +Note jinsi kwa kila kundi tunavokuwa na nia tu na **logits za token ya mwisho iliyotabiriwa**. -## Complete GPT2 fine-tune classification code +## Kamili GPT2 fine-tune classification code -You can find all the code to fine-tune GPT2 to be a spam classifier in [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb) +Unaweza kupata msimbo wote wa fine-tune GPT2 kuwa mchanganuzi wa spam katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb) -## References +## Marejeo - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md b/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md index 12414699d..f58380635 100644 --- a/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md +++ b/src/AI/AI-llm-architecture/7.2.-fine-tuning-to-follow-instructions.md @@ -1,6 +1,6 @@ # 7.2. Fine-Tuning to follow instructions -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} > [!TIP] > Lengo la sehemu hii ni kuonyesha jinsi ya **kurekebisha mfano ulio tayari tayari kufuata maelekezo** badala ya kuzalisha tu maandiko, kwa mfano, kujibu kazi kama roboti ya mazungumzo. @@ -31,7 +31,7 @@ Absolutely! Gravity is a force that pulls objects toward each other. ``` Kufundisha LLM kwa kutumia seti hizi za data badala ya maandiko ya kawaida husaidia LLM kuelewa kwamba inahitaji kutoa majibu maalum kwa maswali inayopewa. -Kwa hivyo, moja ya mambo ya kwanza ya kufanya na seti ya data inayojumuisha maombi na majibu ni kuunda mfano wa tarehe hiyo katika muundo wa ombi unaotakiwa, kama: +Hivyo, moja ya mambo ya kwanza ya kufanya na seti ya data inayojumuisha maombi na majibu ni kuunda mfano wa tarehe hiyo katika muundo wa ombi unaotakiwa, kama: ```python # Code from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb def format_input(entry): @@ -58,9 +58,9 @@ Kisha, kama kawaida, inahitajika kutenganisha dataset katika seti za mafunzo, ut Kisha, inahitajika kubatch kila ingizo na matokeo yanayotarajiwa kwa mafunzo. Kwa hili, inahitajika: - Tokenize maandiko -- Pad sampuli zote hadi urefu sawa (kawaida urefu utakuwa mkubwa kama urefu wa muktadha ulitumika kabla ya kufundisha LLM) +- Pad sampuli zote hadi urefu sawa (kawaida urefu utakuwa mkubwa kama urefu wa muktadha ulio tumika kabla ya kufundisha LLM) - Unda token zinazotarajiwa kwa kuhamasisha 1 ingizo katika kazi ya collate ya kawaida -- Badilisha baadhi ya token za padding na -100 ili kuziondoa kwenye hasara ya mafunzo: Baada ya token ya kwanza `endoftext`, badilisha token zote nyingine za `endoftext` kwa -100 (kwa sababu kutumia `cross_entropy(...,ignore_index=-100)` inamaanisha kwamba itapuuzilia mbali malengo yenye -100) +- Badilisha baadhi ya token za padding na -100 ili kuziondoa kutoka kwa hasara ya mafunzo: Baada ya token ya kwanza `endoftext`, badilisha token zote nyingine za `endoftext` kwa -100 (kwa sababu kutumia `cross_entropy(...,ignore_index=-100)` inamaanisha kwamba itapuuzilia mbali malengo yenye -100) - \[Hiari\] Ficha kwa kutumia -100 pia token zote zinazohusiana na swali ili LLM ijifunze tu jinsi ya kuzalisha jibu. Katika mtindo wa Apply Alpaca hii itamaanisha kuficha kila kitu hadi `### Response:` Kwa hili lililoundwa, ni wakati wa kuunda data loaders kwa kila dataset (mafunzo, uthibitisho na upimaji). @@ -101,4 +101,4 @@ Unaweza kupata mfano wa msimbo wa kufanya fine tuning hii katika [https://github - [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/AI/AI-llm-architecture/README.md b/src/AI/AI-llm-architecture/README.md index 3ebc896fe..470e26645 100644 --- a/src/AI/AI-llm-architecture/README.md +++ b/src/AI/AI-llm-architecture/README.md @@ -1,6 +1,6 @@ # LLM Training - Data Preparation -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} **Hizi ni nota zangu kutoka kwa kitabu kinachopendekezwa sana** [**https://www.manning.com/books/build-a-large-language-model-from-scratch**](https://www.manning.com/books/build-a-large-language-model-from-scratch) **pamoja na taarifa za ziada.** @@ -15,7 +15,7 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw ## 1. Tokenization > [!TIP] -> Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika tokens (ids) kwa njia ambayo ina maana**. +> Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika token (ids) kwa njia ambayo ina maana**. {{#ref}} 1.-tokenizing.md @@ -33,7 +33,7 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw ## 3. Token Embeddings > [!TIP] -> Lengo la awamu hii ya tatu ni rahisi sana: **Patia kila moja ya tokens zilizopita katika msamiati vector ya vipimo vinavyotakiwa ili kufundisha mfano.** Kila neno katika msamiati litakuwa na pointi katika nafasi ya vipimo X.\ +> Lengo la awamu hii ya tatu ni rahisi sana: **Patia kila moja ya token zilizopita katika msamiati vector ya vipimo vinavyotakiwa ili kufundisha mfano.** Kila neno katika msamiati litakuwa na pointi katika nafasi ya vipimo X.\ > Kumbuka kwamba awali nafasi ya kila neno katika nafasi inaanzishwa "kwa bahati nasibu" na nafasi hizi ni vigezo vinavyoweza kufundishwa (vitaboreshwa wakati wa mafunzo). > > Zaidi ya hayo, wakati wa token embedding **tabaka lingine la embeddings linaundwa** ambalo linawakilisha (katika kesi hii) **nafasi halisi ya neno katika sentensi ya mafunzo**. Kwa njia hii neno katika nafasi tofauti katika sentensi litakuwa na uwakilishi tofauti (maana). @@ -66,7 +66,7 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw ## 6. Pre-training & Loading models > [!TIP] -> Lengo la awamu hii ya sita ni rahisi sana: **Fundisha mfano kutoka mwanzo**. Kwa hili muundo wa awali wa LLM utatumika na mizunguko kadhaa ikipita juu ya seti za data kwa kutumia kazi za hasara zilizofafanuliwa na msaidizi kufundisha vigezo vyote vya mfano. +> Lengo la awamu hii ya sita ni rahisi sana: **Fundisha mfano kutoka mwanzo**. Kwa hili muundo wa awali wa LLM utatumika na miduara fulani ikipita juu ya seti za data kwa kutumia kazi zilizofafanuliwa za kupoteza na optimizer ili kufundisha vigezo vyote vya mfano. {{#ref}} 6.-pre-training-and-loading-models.md @@ -99,4 +99,4 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw 7.2.-fine-tuning-to-follow-instructions.md {{#endref}} -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/arbitrary-write-2-exec/README.md b/src/binary-exploitation/arbitrary-write-2-exec/README.md index 11f28b2aa..37a69920c 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/README.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/README.md @@ -1,3 +1,3 @@ # Arbitrary Write 2 Exec -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md index c8ed9ca7d..7902a56b1 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md @@ -4,7 +4,7 @@ ## Overview -Ushirikiano wa kuandika nje ya mipaka katika Apple macOS Scriptable Image Processing System (`sips`) parser ya profaili ya ICC (macOS 15.0.1, sips-307) kutokana na uhakiki usio sahihi wa uwanja wa `offsetToCLUT` katika lebo za `lutAToBType` (`mAB `) na `lutBToAType` (`mBA `). Faili ya ICC iliyoundwa inaweza kusababisha kuandika sifuri hadi byte 16 baada ya buffer ya heap, ikiharibu metadata ya heap au viashiria vya kazi na kuwezesha utekelezaji wa msimbo wa kiholela (CVE-2024-44236). +Ushirikiano wa kuandika nje ya mipaka katika parser ya profaili ya ICC ya Apple macOS Scriptable Image Processing System (`sips`) (macOS 15.0.1, sips-307) kutokana na uhakiki usio sahihi wa uwanja wa `offsetToCLUT` katika lebo za `lutAToBType` (`mAB `) na `lutBToAType` (`mBA `). Faili ya ICC iliyoundwa inaweza kusababisha kuandika sifuri hadi byte 16 baada ya buffer ya heap, ikiharibu metadata ya heap au viashiria vya kazi na kuwezesha utekelezaji wa msimbo wa kiholela (CVE-2024-44236). ## Vulnerable Code @@ -18,7 +18,7 @@ buffer[i] = 0; ``` Tuangalia tu `offsetToCLUT <= totalDataLength`. Kwa kuweka `offsetToCLUT == tagDataSize`, mzunguko unafikia hadi byte 16 baada ya mwisho wa `buffer`, ukiharibu metadata ya heap iliyo karibu. -## Hatua za Kutekeleza +## Hatua za Utekelezaji 1. **Tengeneza profaili mbaya ya `.icc`:** - Jenga kichwa cha ICC (bytes 128) chenye saini `acsp` na kiingilio kimoja cha `lutAToBType` au `lutBToAType`. @@ -50,4 +50,4 @@ https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulner - Sasisho la Usalama la Apple Oktoba 2024 (patch inayopeleka CVE-2024-44236) https://support.apple.com/en-us/121564 -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/array-indexing.md b/src/binary-exploitation/array-indexing.md index 37feef2f5..992edc6fd 100644 --- a/src/binary-exploitation/array-indexing.md +++ b/src/binary-exploitation/array-indexing.md @@ -4,17 +4,17 @@ ## Basic Information -Kikundi hiki kinajumuisha udhaifu wote unaotokea kwa sababu inawezekana kuandika tena data fulani kupitia makosa katika kushughulikia viashiria katika arrays. Ni kikundi pana sana kisichokuwa na mbinu maalum kwani mekanizma ya unyakuzi inategemea kabisa hali ya udhaifu. +Kikundi hiki kinajumuisha udhaifu wote unaotokea kwa sababu inawezekana kuandika tena data fulani kupitia makosa katika kushughulikia viashiria katika arrays. Ni kikundi pana sana kisichokuwa na mbinu maalum kwani mekanismu ya unyakuzi inategemea kabisa hali ya udhaifu. Hata hivyo, hapa unaweza kupata **mfano** mzuri: - [https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html) - Kuna **arrays 2 zinazogongana**, moja kwa **anwani** ambapo data inahifadhiwa na moja yenye **ukubwa** wa data hiyo. Inawezekana kuandika moja kutoka kwa nyingine, ikiruhusu kuandika anwani isiyo na mipaka ikionyesha kama ukubwa. Hii inaruhusu kuandika anwani ya kazi ya `free` katika jedwali la GOT na kisha kuandika tena na anwani ya `system`, na kuita free kutoka kwa kumbukumbu yenye `/bin/sh`. - [https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html) -- 64 bits, hakuna nx. Andika tena ukubwa ili kupata aina fulani ya overflow ya buffer ambapo kila kitu kitakuwa kinatumika kama nambari mbili na kupangwa kutoka ndogo hadi kubwa hivyo inahitajika kuunda shellcode inayokidhi hiyo mahitaji, ikizingatia kwamba canary haipaswi kuhamishwa kutoka nafasi yake na hatimaye kuandika tena RIP na anwani ya kurudi, ambayo inakidhi mahitaji ya awali na kuweka anwani kubwa kama anwani mpya ikielekeza mwanzo wa stack (iliyovuja na programu) ili iwezekane kutumia ret kuruka huko. +- 64 bits, hakuna nx. Andika tena ukubwa ili kupata aina fulani ya overflow ya buffer ambapo kila kitu kitatumika kama nambari mbili na kuorodheshwa kutoka ndogo hadi kubwa hivyo inahitajika kuunda shellcode inayokidhi hiyo mahitaji, ikizingatia kwamba canary haipaswi kuhamishwa kutoka nafasi yake na hatimaye kuandika tena RIP na anwani ya ret, ambayo inakidhi mahitaji ya awali na kuweka anwani kubwa kuwa anwani mpya ikielekeza mwanzo wa stack (iliyovuja na programu) ili iwezekane kutumia ret kuruka huko. - [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/) - 64bits, hakuna relro, canary, nx, hakuna pie. Kuna off-by-one katika array kwenye stack inayoruhusu kudhibiti pointer ikitoa WWW (inaandika jumla ya nambari zote za array katika anwani iliyovunjwa na off-by-one katika array). Stack inasimamiwa hivyo anwani ya GOT `exit` inandikwa tena na `pop rdi; ret`, na katika stack inaongezwa anwani ya `main` (ikizunguka nyuma kwa `main`). Kisha mchain ya ROP kutolewa anwani ya kuweka katika GOT kwa kutumia puts inatumika (`exit` itaitwa hivyo itaita `pop rdi; ret` kwa hivyo kutekeleza mchain hii katika stack). Hatimaye, mchain mpya ya ROP inayotekeleza ret2lib inatumika. - [https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html](https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html) - 32 bit, hakuna relro, hakuna canary, nx, pie. Tumia uandishi mbaya wa viashiria kuvuja anwani za libc na heap kutoka kwenye stack. Tumia overflow ya buffer kufanya ret2lib ikitoa `system('/bin/sh')` (anwani ya heap inahitajika ili kupita kipimo). -{{#include /banners/hacktricks-training.md}} +{{#include ../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md index fc3b34af6..52ffb498b 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md @@ -12,9 +12,9 @@ ## Brute force Canary -Njia bora ya kuipita canary rahisi ni ikiwa binary ni programu **inayo fork mchakato wa watoto kila wakati unapoanzisha muunganisho mpya** nayo (huduma ya mtandao), kwa sababu kila wakati unapojiunganisha nayo **canary ile ile itatumika**. +Njia bora ya kuipita canary rahisi ni ikiwa binary ni programu **inayo fork mchakato wa watoto kila wakati unapoanzisha muunganisho mpya** nayo (huduma ya mtandao), kwa sababu kila wakati unapojiunga nayo **canary ile ile itatumika**. -Basi, njia bora ya kuipita canary ni tu **kujaribu kwa nguvu char kwa char**, na unaweza kugundua ikiwa byte ya canary uliyokisia ilikuwa sahihi kwa kuangalia ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu kazi **ina jaribu kwa nguvu canary ya 8 Bytes (x64)** na kutofautisha kati ya byte iliyokisiwa sahihi na byte mbaya kwa **kuangalia** ikiwa **jibu** linatumwa nyuma na seva (njia nyingine katika **hali nyingine** inaweza kuwa kutumia **try/except**): +Basi, njia bora ya kuipita canary ni tu **kujaribu kwa nguvu kila herufi**, na unaweza kugundua ikiwa byte ya canary uliyokisia ilikuwa sahihi kwa kuangalia ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu kazi **ina jaribu kwa nguvu canary ya 8 Bytes (x64)** na kutofautisha kati ya byte iliyokisiwa sahihi na byte mbaya kwa **kuangalia** ikiwa **jibu** linatumwa nyuma na seva (njia nyingine katika **hali nyingine** inaweza kuwa kutumia **jaribu/ukose**): ### Mfano 1 @@ -60,7 +60,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary ### Mfano wa 2 Hii imewekwa kwa bit 32, lakini hii inaweza kubadilishwa kwa urahisi kuwa bit 64.\ -Pia kumbuka kwamba kwa mfano huu **programu inatarajia kwanza byte kuashiria ukubwa wa ingizo** na payload. +Pia kumbuka kwamba kwa mfano huu **programu inatarajia kwanza byte moja kuashiria ukubwa wa ingizo** na payload. ```python from pwn import * @@ -103,13 +103,13 @@ log.info(f"The canary is: {canary}") ``` ## Threads -Threads za mchakato mmoja pia **zitashiriki token ya canary** sawa, kwa hivyo itakuwa inawezekana **brute-forc**e canary ikiwa binary inazalisha thread mpya kila wakati shambulio linapotokea. +Threads za mchakato mmoja pia **zitashiriki token ya canary** sawa, kwa hivyo itakuwa inawezekana **brute-force** canary ikiwa binary inazalisha thread mpya kila wakati shambulio linapotokea. Zaidi ya hayo, **overflow ya buffer katika kazi iliyo na thread** iliyolindwa na canary inaweza kutumika **kubadilisha canary mkuu iliyohifadhiwa katika TLS**. Hii ni kwa sababu, inaweza kuwa inawezekana kufikia nafasi ya kumbukumbu ambapo TLS inahifadhiwa (na kwa hivyo, canary) kupitia **bof katika stack** ya thread.\ -Kwa matokeo, kinga hiyo haina maana kwa sababu ukaguzi unatumika na canaries mbili ambazo ni sawa (ingawa zimebadilishwa).\ +Matokeo yake, kinga ni bure kwa sababu ukaguzi unatumika na canaries mbili ambazo ni sawa (ingawa zimebadilishwa).\ Shambulio hili linafanywa katika andiko: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) -Angalia pia uwasilishaji wa [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) ambayo inasema kwamba kawaida **TLS** inahifadhiwa na **`mmap`** na wakati **stack** ya **thread** inaundwa pia inazalishwa na `mmap` kulingana na hii, ambayo inaweza kuruhusu overflow kama ilivyoonyeshwa katika andiko la awali. +Angalia pia uwasilishaji wa [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) ambayo inasema kwamba kwa kawaida **TLS** inahifadhiwa na **`mmap`** na wakati **stack** ya **thread** inaundwa pia inazalishwa na `mmap` kulingana na hii, ambayo inaweza kuruhusu overflow kama ilivyoonyeshwa katika andiko la awali. ## Other examples & references @@ -119,4 +119,4 @@ Angalia pia uwasilishaji wa [https://www.slideshare.net/codeblue_jp/master-canar -{{#include /banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/ios-exploiting.md b/src/binary-exploitation/ios-exploiting.md index 3b0bb01c8..0845c4694 100644 --- a/src/binary-exploitation/ios-exploiting.md +++ b/src/binary-exploitation/ios-exploiting.md @@ -1,10 +1,10 @@ # iOS Exploiting -{{#include /banners/hacktricks-training.md}} +{{#include ../banners/hacktricks-training.md}} ## Physical use-after-free -Hii ni muhtasari kutoka kwa chapisho kutoka [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) zaidi ya hayo, taarifa zaidi kuhusu exploit kutumia mbinu hii inaweza kupatikana katika [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd) +Hii ni muhtasari kutoka kwa chapisho kutoka [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) zaidi ya hayo, taarifa zaidi kuhusu exploit inayotumia mbinu hii inaweza kupatikana katika [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd) ### Memory management in XNU @@ -27,31 +27,31 @@ Meza za kurasa zimeandaliwa kwa njia ya ngazi tatu: #### Mapping Virtual to Physical Memory * **Direct Mapping (Block Mapping)**: -* Baadhi ya vipengee katika meza ya kurasa moja kwa moja **huunganisha anuwai ya anwani za virtual** na anuwai iliyo karibu ya anwani za halisi (kama njia fupi). +* Baadhi ya vipengee katika meza ya kurasa moja kwa moja **huunganisha anuwai ya anwani za virtual** na anuwai inayoendelea ya anwani halisi (kama njia fupi). * **Pointer to Child Page Table**: * Ikiwa udhibiti wa kina unahitajika, kipengee katika ngazi moja (mfano, L1) kinaweza kuelekeza kwenye **meza ya kurasa ya mtoto** katika ngazi inayofuata (mfano, L2). #### Example: Mapping a Virtual Address -Hebu sema unajaribu kufikia anwani ya virtual **0x1000000000**: +Hebu tuseme unajaribu kufikia anwani ya virtual **0x1000000000**: 1. **L1 Table**: * Kernel inakagua kipengee cha meza ya L1 kinachohusiana na anwani hii ya virtual. Ikiwa ina **pointer kwa meza ya L2**, inaenda kwenye meza hiyo ya L2. 2. **L2 Table**: * Kernel inakagua meza ya L2 kwa ramani ya kina zaidi. Ikiwa kipengee hiki kinaelekeza kwenye **meza ya L3**, inaendelea huko. 3. **L3 Table**: -* Kernel inatafuta kipengee cha mwisho cha L3, ambacho kinaelekeza kwenye **anwani halisi** ya ukurasa wa kumbukumbu halisi. +* Kernel inatafuta kipengee cha mwisho cha L3, ambacho kinaelekeza kwenye **anwani halisi** ya ukurasa halisi wa kumbukumbu. #### Example of Address Mapping Ikiwa unaandika anwani halisi **0x800004000** kwenye index ya kwanza ya meza ya L2, basi: -* Anwani za virtual kutoka **0x1000000000** hadi **0x1002000000** zinaunganishwa na anwani halisi kutoka **0x800004000** hadi **0x802004000**. +* Anwani za virtual kutoka **0x1000000000** hadi **0x1002000000** zinaunganisha na anwani halisi kutoka **0x800004000** hadi **0x802004000**. * Hii ni **block mapping** katika ngazi ya L2. Vinginevyo, ikiwa kipengee cha L2 kinaelekeza kwenye meza ya L3: -* Kila ukurasa wa 4 KB katika anuwai ya anwani za virtual **0x1000000000 -> 0x1002000000** utakuwa umeunganishwa na vipengee vya kibinafsi katika meza ya L3. +* Kila ukurasa wa 4 KB katika anuwai ya anwani ya virtual **0x1000000000 -> 0x1002000000** utakuwa umeunganishwa na vipengee vya kibinafsi katika meza ya L3. ### Physical use-after-free @@ -64,7 +64,7 @@ Vinginevyo, ikiwa kipengee cha L2 kinaelekeza kwenye meza ya L3: 5. Kernel inaweza kisha **kutoa tena kumbukumbu halisi "iliyohifadhiwa"** kwa madhumuni mengine, kama **data ya kernel**. 6. Kwa kuwa uhusiano haukuondolewa, mchakato bado unaweza **kusoma na kuandika** kwenye kumbukumbu halisi hii. -Hii inamaanisha mchakato unaweza kufikia **kurasa za kumbukumbu ya kernel**, ambazo zinaweza kuwa na data au muundo wa nyeti, na hivyo kuruhusu mshambuliaji **kubadilisha kumbukumbu ya kernel**. +Hii inamaanisha mchakato unaweza kufikia **kurasa za kumbukumbu ya kernel**, ambazo zinaweza kuwa na data au muundo wa nyeti, na hivyo kumruhusu mshambuliaji **kubadilisha kumbukumbu ya kernel**. ### Exploitation Strategy: Heap Spray @@ -81,11 +81,11 @@ Taarifa zaidi kuhusu hii katika [https://github.com/felix-pb/kfd/tree/main/write 1. **Spray IOSurface Objects**: Mshambuliaji anaunda vitu vingi vya IOSurface vyenye kitambulisho maalum ("thamani ya kichawi"). 2. **Scan Freed Pages**: Wanakagua ikiwa yoyote ya vitu imewekwa kwenye ukurasa uliohifadhiwa. -3. **Read/Write Kernel Memory**: Kwa kubadilisha maeneo katika kitu cha IOSurface, wanapata uwezo wa kufanya **kusoma na kuandika bila mpangilio** katika kumbukumbu ya kernel. Hii inawaruhusu: -* Kutumia eneo moja **kusoma thamani yoyote ya 32-bit** katika kumbukumbu ya kernel. -* Kutumia eneo lingine **kuandika thamani za 64-bit**, kufikia **primitive ya kusoma/kuandika ya kernel** thabiti. +3. **Read/Write Kernel Memory**: Kwa kubadilisha maeneo katika kitu cha IOSurface, wanapata uwezo wa kufanya **kusoma na kuandika bila mipaka** katika kumbukumbu ya kernel. Hii inawaruhusu: +* Kutumia eneo moja kusoma **thamani yoyote ya 32-bit** katika kumbukumbu ya kernel. +* Kutumia eneo lingine kuandika **thamani za 64-bit**, na kufikia **primitive ya kusoma/kuandika ya kernel** thabiti. -Unda vitu vya IOSurface vyenye thamani ya kichawi IOSURFACE_MAGIC ili baadaye kutafuta: +Unda vitu vya IOSurface vyenye thamani ya kichawi IOSURFACE\_MAGIC ili baadaye kutafuta: ```c void spray_iosurface(io_connect_t client, int nSurfaces, io_connect_t **clients, int *nClients) { if (*nClients >= 0x4000) return; @@ -142,7 +142,7 @@ return 0; ``` ### Kufikia Kernel Read/Write na IOSurface -Baada ya kupata udhibiti wa kitu cha IOSurface katika kumbukumbu ya kernel (kilichopangwa kwenye ukurasa wa kimwili ulioachiliwa unaoweza kufikiwa kutoka kwa nafasi ya mtumiaji), tunaweza kukitumia kwa **operesheni za kusoma na kuandika za kernel zisizo na mipaka**. +Baada ya kupata udhibiti wa kitu cha IOSurface katika kumbukumbu ya kernel (kilichopangwa kwenye ukurasa wa kimwili ulioachwa unaoweza kufikiwa kutoka kwa nafasi ya mtumiaji), tunaweza kukitumia kwa **operesheni za kusoma na kuandika za kernel zisizo na mipaka**. **Sehemu Muhimu katika IOSurface** @@ -158,7 +158,7 @@ Kwa kubadilisha pointers hizi, tunaelekeza kwenye anwani zisizo na mipaka katika Ili kufanya kusoma: 1. Badilisha **pointer ya hesabu ya matumizi** ili kuelekeza kwenye anwani ya lengo minus offset ya 0x14-byte. -2. Tumia mbinu ya `get_use_count` kusoma thamani katika anwani hiyo. +2. Tumia njia ya `get_use_count` kusoma thamani katika anwani hiyo. ```c uint32_t get_use_count(io_connect_t client, uint32_t surfaceID) { uint64_t args[1] = {surfaceID}; @@ -197,11 +197,11 @@ iosurface_set_indexed_timestamp_pointer(info.object, orig); ``` #### Muhtasari wa Mchakato wa Ulaghai -1. **Chochea Matumizi-Baada ya Kuachia**: Kurasa zilizofunguliwa zinapatikana kwa matumizi tena. +1. **Chochea Matumizi Baada ya Kuachiliwa**: Kurasa zilizofunguliwa zinapatikana kwa matumizi tena. 2. **Sambaza Vitu vya IOSurface**: Panga vitu vingi vya IOSurface vyenye "thamani ya uchawi" ya kipekee katika kumbukumbu ya kernel. -3. **Tambua IOSurface Inayopatikana**: Tafuta IOSurface kwenye ukurasa ulioachwa ambao unadhibiti. -4. **Tumia Matumizi-Baada ya Kuachia**: Badilisha viashiria katika kitu cha IOSurface ili kuwezesha **kusoma/kandika kwa kernel** bila mipaka kupitia mbinu za IOSurface. +3. **Tambua IOSurface Inayopatikana**: Pata IOSurface kwenye ukurasa ulioachiliwa ambao unadhibiti. +4. **Tumia Matumizi Baada ya Kuachiliwa**: Badilisha viashiria katika kitu cha IOSurface ili kuwezesha **kusoma/kandika** kwa njia isiyo na mipaka kupitia mbinu za IOSurface. -Kwa kutumia hizi primitives, ulaghai unatoa **kusoma 32-bit** na **kandika 64-bit** kwa kumbukumbu ya kernel. Hatua zaidi za jailbreak zinaweza kujumuisha primitives za kusoma/kandika zenye uthabiti zaidi, ambazo zinaweza kuhitaji kupita kinga za ziada (mfano, PPL kwenye vifaa vya arm64e vya kisasa). +Kwa kutumia hizi mbinu, ulaghai unatoa **kusoma 32-bit** na **kandika 64-bit** kwa kumbukumbu ya kernel. Hatua zaidi za jailbreak zinaweza kujumuisha mbinu za kusoma/kandika zenye uthabiti zaidi, ambazo zinaweza kuhitaji kupita kinga za ziada (mfano, PPL kwenye vifaa vya arm64e vya kisasa). -{{#include /banners/hacktricks-training.md}} +{{#include ../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/libc-heap/README.md b/src/binary-exploitation/libc-heap/README.md index 4ae82d84d..dd2cb01f7 100644 --- a/src/binary-exploitation/libc-heap/README.md +++ b/src/binary-exploitation/libc-heap/README.md @@ -1,58 +1,58 @@ # Libc Heap -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## Msingi wa Heap -Heap kimsingi ni mahali ambapo programu itakuwa na uwezo wa kuhifadhi data wakati inapoomba data kwa kuita kazi kama **`malloc`**, `calloc`... Aidha, wakati kumbukumbu hii haitahitajika tena inapatikana kwa kuita kazi **`free`**. +Heap ni mahali ambapo programu inaweza kuhifadhi data wakati inapoomba data kwa kuita kazi kama **`malloc`**, `calloc`... Aidha, wakati kumbukumbu hii haitahitajika tena inapatikana kwa kuita kazi **`free`**. Kama inavyoonyeshwa, iko tu baada ya ambapo binary inapo load kwenye kumbukumbu (angalia sehemu ya `[heap]`):
-### Usambazaji wa Kichwa Msingi +### Usambazaji wa Msingi wa Chunk -Wakati data fulani inapoombwa kuhifadhiwa kwenye heap, nafasi fulani ya heap inatengwa kwa ajili yake. Nafasi hii itakuwa ya bin na data iliyohitajika + nafasi ya vichwa vya bin + offset ya ukubwa wa chini wa bin itahifadhiwa kwa kichwa. Lengo ni kuhifadhi kumbukumbu kidogo iwezekanavyo bila kufanya iwe ngumu kupata kila kichwa kilipo. Kwa hili, taarifa za metadata za kichwa zinatumika kujua kila kichwa kilichotumika/kilichopatikana kilipo. +Wakati data fulani inapoombwa kuhifadhiwa kwenye heap, nafasi fulani ya heap inatengwa kwa ajili yake. Nafasi hii itakuwa ya bin na data iliyombwa + nafasi ya vichwa vya bin + offset ya ukubwa wa chini wa bin itahifadhiwa kwa chunk. Lengo ni kuhifadhi kumbukumbu kidogo iwezekanavyo bila kufanya iwe ngumu kupata ambapo kila chunk iko. Kwa hili, taarifa za metadata za chunk zinatumika kujua ambapo kila chunk inayotumika/ya bure iko. Kuna njia tofauti za kuhifadhi nafasi hasa kulingana na bin inayotumika, lakini mbinu ya jumla ni ifuatayo: - Programu inaanza kwa kuomba kiasi fulani cha kumbukumbu. -- Ikiwa katika orodha ya vichwa kuna kichwa kinachopatikana kikubwa vya kutosha kutimiza ombi, kitatumika. -- Hii inaweza hata kumaanisha kwamba sehemu ya kichwa kinachopatikana itatumika kwa ombi hili na iliyobaki itaongezwa kwenye orodha ya vichwa. -- Ikiwa hakuna kichwa kinachopatikana katika orodha lakini bado kuna nafasi katika kumbukumbu ya heap iliyotengwa, meneja wa heap anaunda kichwa kipya. -- Ikiwa hakuna nafasi ya kutosha ya heap kutenga kichwa kipya, meneja wa heap anaomba kernel kuongeza kumbukumbu iliyotengwa kwa heap na kisha kutumia kumbukumbu hii kuunda kichwa kipya. +- Ikiwa katika orodha ya chunks kuna mtu anapatikana mkubwa wa kutosha kutimiza ombi, itatumika. +- Hii inaweza hata kumaanisha kwamba sehemu ya chunk inayopatikana itatumika kwa ombi hili na iliyobaki itaongezwa kwenye orodha ya chunks. +- Ikiwa hakuna chunk inayopatikana katika orodha lakini bado kuna nafasi katika kumbukumbu ya heap iliyotengwa, meneja wa heap anaunda chunk mpya. +- Ikiwa hakuna nafasi ya kutosha ya heap kutenga chunk mpya, meneja wa heap anaomba kernel kuongeza kumbukumbu iliyotengwa kwa heap na kisha kutumia kumbukumbu hii kuunda chunk mpya. - Ikiwa kila kitu kinashindwa, `malloc` inarudisha null. -Kumbuka kwamba ikiwa **kumbukumbu iliyohitajika inapita kigezo fulani**, **`mmap`** itatumika kuunganisha kumbukumbu iliyohitajika. +Kumbuka kwamba ikiwa **kumbukumbu iliyombwa inapita kigezo fulani**, **`mmap`** itatumika kuunganisha kumbukumbu iliyombwa. ## Arenas -Katika **maombi ya multithreaded**, meneja wa heap lazima kuzuia **mashindano** ambayo yanaweza kusababisha ajali. Awali, hii ilifanywa kwa kutumia **mutex ya kimataifa** kuhakikisha kwamba nyuzi moja tu inaweza kufikia heap kwa wakati mmoja, lakini hii ilisababisha **masuala ya utendaji** kutokana na kuzuiliwa kwa mutex. +Katika **maombi ya multithreaded**, meneja wa heap lazima kuzuia **mashindano ya mbio** ambayo yanaweza kusababisha ajali. Awali, hii ilifanywa kwa kutumia **mutex ya kimataifa** kuhakikisha kwamba thread moja tu inaweza kufikia heap kwa wakati mmoja, lakini hii ilisababisha **masuala ya utendaji** kutokana na kuzuiliwa kwa mutex. -Ili kushughulikia hili, allocator wa heap wa ptmalloc2 ilianzisha "arenas," ambapo **kila arena** inafanya kazi kama **heap tofauti** yenye **miundo** yake **ya data** na **mutex**, ikiruhusu nyuzi nyingi kufanya operesheni za heap bila kuingiliana, mradi tu wanatumia arenas tofauti. +Ili kushughulikia hili, allocator ya heap ya ptmalloc2 ilianzisha "arenas," ambapo **kila arena** inafanya kazi kama **heap tofauti** yenye **miundo** yake **mwenyewe** na **mutex**, ikiruhusu nyuzi nyingi kufanya operesheni za heap bila kuingiliana, mradi tu watumie arenas tofauti. -Arena ya "muhimu" inashughulikia operesheni za heap kwa maombi ya nyuzi moja. Wakati **nyuzi mpya** zinapoongezwa, meneja wa heap anawapa **arenas za pili** ili kupunguza ushindani. Kwanza inajaribu kuunganisha kila nyuzi mpya kwenye arena isiyotumika, ikiumba mpya ikiwa inahitajika, hadi kikomo cha mara 2 ya idadi ya nyuzi za CPU kwa mifumo ya 32-bit na mara 8 kwa mifumo ya 64-bit. Mara kikomo kinapofikiwa, **nyuzi lazima zishiriki arenas**, na kusababisha ushindani wa uwezekano. +Arena ya "muhimu" ya default inashughulikia operesheni za heap kwa maombi ya nyuzi moja. Wakati **nyuzi mpya** zinapoongezwa, meneja wa heap anawapa **arenas za sekondari** ili kupunguza ushindani. Kwanza inajaribu kuunganisha kila nyuzi mpya kwenye arena isiyotumika, ikiumba mpya ikiwa inahitajika, hadi kikomo cha mara 2 ya idadi ya nyuzi za CPU kwa mifumo ya 32-bit na mara 8 kwa mifumo ya 64-bit. Mara kikomo kinapofikiwa, **nyuzi lazima zishiriki arenas**, na kusababisha ushindani wa uwezekano. -Tofauti na arena ya msingi, ambayo inapanuka kwa kutumia wito wa mfumo wa `brk`, arenas za pili zinaunda "subheaps" kwa kutumia `mmap` na `mprotect` kuiga tabia ya heap, ikiruhusu kubadilika katika usimamizi wa kumbukumbu kwa operesheni za multithreaded. +Tofauti na arena ya msingi, ambayo inapanuka kwa kutumia wito wa mfumo wa `brk`, arenas za sekondari zinaunda "subheaps" kwa kutumia `mmap` na `mprotect` kuiga tabia ya heap, ikiruhusu kubadilika katika usimamizi wa kumbukumbu kwa operesheni za multithreaded. ### Subheaps -Subheaps hutumikia kama akiba ya kumbukumbu kwa arenas za pili katika maombi ya multithreaded, ikiruhusu kukua na kusimamia maeneo yao ya heap tofauti na heap kuu. Hapa kuna jinsi subheaps zinavyotofautiana na heap ya awali na jinsi zinavyofanya kazi: +Subheaps hutumikia kama akiba ya kumbukumbu kwa arenas za sekondari katika maombi ya multithreaded, ikiruhusu kukua na kusimamia maeneo yao ya heap tofauti na heap kuu. Hapa kuna jinsi subheaps zinavyotofautiana na heap ya awali na jinsi zinavyofanya kazi: 1. **Heap ya Awali vs. Subheaps**: - Heap ya awali iko moja kwa moja baada ya binary ya programu katika kumbukumbu, na inapanuka kwa kutumia wito wa mfumo wa `sbrk`. -- Subheaps, zinazotumiwa na arenas za pili, zinaundwa kupitia `mmap`, wito wa mfumo unaounganisha eneo maalum la kumbukumbu. +- Subheaps, zinazotumiwa na arenas za sekondari, zinaundwa kupitia `mmap`, wito wa mfumo unaounganisha eneo fulani la kumbukumbu. 2. **Hifadhi ya Kumbukumbu kwa kutumia `mmap`**: -- Wakati meneja wa heap anaunda subheap, anahifadhi block kubwa ya kumbukumbu kupitia `mmap`. Hifadhi hii haitoi kumbukumbu mara moja; inateua tu eneo ambalo michakato mingine ya mfumo au usambazaji haipaswi kutumia. +- Wakati meneja wa heap anaunda subheap, anahifadhi block kubwa ya kumbukumbu kupitia `mmap`. Hifadhi hii haitoi kumbukumbu mara moja; inateua tu eneo ambalo michakato mingine ya mfumo au ugawaji haipaswi kutumia. - Kwa kawaida, ukubwa uliotengwa kwa subheap ni 1 MB kwa michakato ya 32-bit na 64 MB kwa michakato ya 64-bit. 3. **Upanuzi wa Polepole kwa kutumia `mprotect`**: -- Eneo la kumbukumbu lililotengwa awali linapewa alama kama `PROT_NONE`, ikionyesha kwamba kernel haitaji kutenga kumbukumbu halisi kwa nafasi hii bado. -- Ili "kukua" subheap, meneja wa heap anatumia `mprotect` kubadilisha ruhusa za ukurasa kutoka `PROT_NONE` hadi `PROT_READ | PROT_WRITE`, ikimhimiza kernel kutenga kumbukumbu halisi kwa anwani zilizotengwa hapo awali. Njia hii ya hatua kwa hatua inaruhusu subheap kupanuka kadri inavyohitajika. -- Mara subheap yote itakapokamilika, meneja wa heap anaunda subheap mpya ili kuendelea na usambazaji. +- Eneo la kumbukumbu lililotengwa awali linapewa alama kama `PROT_NONE`, ikionyesha kwamba kernel haitaji kutoa kumbukumbu halisi kwa nafasi hii bado. +- Ili "kukua" subheap, meneja wa heap anatumia `mprotect` kubadilisha ruhusa za ukurasa kutoka `PROT_NONE` hadi `PROT_READ | PROT_WRITE`, ikimhimiza kernel kutoa kumbukumbu halisi kwa anwani zilizotengwa hapo awali. Njia hii ya hatua kwa hatua inaruhusu subheap kupanuka kadri inavyohitajika. +- Mara subheap yote itakapokamilika, meneja wa heap anaunda subheap mpya ili kuendelea na ugawaji. ### heap_info -Struktura hii inatenga taarifa muhimu za heap. Aidha, kumbukumbu ya heap inaweza kuwa si ya mfululizo baada ya usambazaji zaidi, struktura hii pia itahifadhi taarifa hiyo. +Struct hii inatenga taarifa muhimu za heap. Aidha, kumbukumbu ya heap inaweza kuwa si ya mfululizo baada ya ugawaji zaidi, struct hii pia itahifadhi taarifa hiyo. ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837 @@ -91,10 +91,10 @@ Kuna mambo kadhaa ya kuvutia ya kuzingatia kutoka kwa muundo huu (ona msimbo wa ``` - `mchunkptr bins[NBINS * 2 - 2];` ina **viungo** kwa **chunks za kwanza na za mwisho** za **bins** ndogo, kubwa na zisizo na mpangilio (the -2 ni kwa sababu index 0 haitumiki) -- Hivyo, **chunk ya kwanza** ya bins hizi itakuwa na **kiungo cha nyuma kwa muundo huu** na **chunk ya mwisho** ya bins hizi itakuwa na **kiungo cha mbele** kwa muundo huu. Ambayo kimsingi inamaanisha kwamba ikiwa unaweza **kuvuja anwani hizi katika main arena** utakuwa na kiungo kwa muundo katika **libc**. -- Struktura `struct malloc_state *next;` na `struct malloc_state *next_free;` ni orodha zilizounganishwa za arenas -- Chunk ya `top` ni "chunk" ya mwisho, ambayo kimsingi ni **nafasi yote iliyobaki ya heap**. Mara chunk ya juu inakuwa "tupu", heap imetumika kabisa na inahitaji kuomba nafasi zaidi. -- Chunk ya `last reminder` inatokana na hali ambapo chunk ya ukubwa sahihi haitapatikana na hivyo chunk kubwa inakatwa, sehemu ya kiungo iliyobaki inawekwa hapa. +- Kwa hivyo, **chunk ya kwanza** ya bins hizi itakuwa na **kiungo cha nyuma kwa muundo huu** na **chunk ya mwisho** ya bins hizi itakuwa na **kiungo cha mbele** kwa muundo huu. Ambayo kimsingi inamaanisha kwamba ikiwa unaweza **kuvuja anwani hizi katika main arena** utakuwa na kiungo kwa muundo katika **libc**. +- Miundo `struct malloc_state *next;` na `struct malloc_state *next_free;` ni orodha zilizounganishwa za arenas +- **Chunk ya juu** ni "chunk" ya mwisho, ambayo kimsingi ni **nafasi yote iliyobaki ya heap**. Mara chunk ya juu inapokuwa "bila", heap imetumika kabisa na inahitaji kuomba nafasi zaidi. +- **Chunk ya mwisho iliyobaki** inatokana na hali ambapo chunk ya ukubwa sahihi haitapatikana na kwa hivyo chunk kubwa inakatwa, sehemu ya kiungo iliyobaki inawekwa hapa. ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812 @@ -144,7 +144,7 @@ INTERNAL_SIZE_T max_system_mem; ``` ### malloc_chunk -Muundo huu unawakilisha kipande maalum cha kumbukumbu. Nyanja mbalimbali zina maana tofauti kwa vipande vilivyotolewa na visivyotolewa. +Muundo huu unawakilisha kipande maalum cha kumbukumbu. Nyanja mbalimbali zina maana tofauti kwa vipande vilivyotengwa na visivyotengwa. ```c // https://github.com/bminor/glibc/blob/master/malloc/malloc.c struct malloc_chunk { @@ -163,18 +163,18 @@ Kama ilivyotajwa hapo awali, vipande hivi pia vina metadata, ambayo inaonyeshwa

https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png

-Metadata kawaida ni 0x08B ikionyesha ukubwa wa sasa wa kipande kwa kutumia bits 3 za mwisho kuonyesha: +Metadata mara nyingi ni 0x08B ikionyesha ukubwa wa sasa wa kipande kwa kutumia bits 3 za mwisho kuonyesha: - `A`: Ikiwa 1 inatoka kwenye subheap, ikiwa 0 iko kwenye arena kuu -- `M`: Ikiwa 1, kipande hiki ni sehemu ya nafasi iliyotolewa na mmap na si sehemu ya heap -- `P`: Ikiwa 1, kipande cha awali kinatumika +- `M`: Ikiwa 1, kipande hiki ni sehemu ya nafasi iliyotengwa na mmap na si sehemu ya heap +- `P`: Ikiwa 1, kipande kilichopita kinatumika -Kisha, nafasi ya data ya mtumiaji, na hatimaye 0x08B kuonyesha ukubwa wa kipande cha awali wakati kipande kinapatikana (au kuhifadhi data ya mtumiaji wakati kinapopewa). +Kisha, nafasi ya data ya mtumiaji, na hatimaye 0x08B kuonyesha ukubwa wa kipande kilichopita wakati kipande kinapatikana (au kuhifadhi data ya mtumiaji wakati inatengwa). -Zaidi ya hayo, wakati kinapatikana, data ya mtumiaji inatumika pia kubeba data fulani: +Zaidi ya hayo, wakati inapatikana, data ya mtumiaji inatumika pia kubeba data fulani: - **`fd`**: Kielekezi kwa kipande kinachofuata -- **`bk`**: Kielekezi kwa kipande cha awali +- **`bk`**: Kielekezi kwa kipande kilichopita - **`fd_nextsize`**: Kielekezi kwa kipande cha kwanza katika orodha ambacho ni kidogo kuliko yenyewe - **`bk_nextsize`:** Kielekezi kwa kipande cha kwanza katika orodha ambacho ni kikubwa kuliko yenyewe @@ -261,11 +261,11 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) & return request2size (req); } ``` -Kumbuka kwamba kwa kuhesabu jumla ya nafasi inayohitajika, `SIZE_SZ` inaongezwa mara 1 tu kwa sababu uwanja wa `prev_size` unaweza kutumika kuhifadhi data, kwa hivyo kichwa cha awali pekee kinahitajika. +Kumbuka kwamba kwa kuhesabu jumla ya nafasi inayohitajika, `SIZE_SZ` inaongezwa mara moja tu kwa sababu uwanja wa `prev_size` unaweza kutumika kuhifadhi data, hivyo basi kichwa cha awali pekee kinahitajika. ### Pata data ya Chunk na badilisha metadata -Hizi kazi zinafanya kazi kwa kupokea kiashiria kwa chunk na ni muhimu kuangalia/set metadata: +Hizi kazi zinafanya kazi kwa kupokea kiashiria kwa chunk na ni muhimu kuangalia/kuweka metadata: - Angalia bendera za chunk ```c @@ -411,7 +411,7 @@ ptr = malloc(0x10); strcpy(ptr, "panda"); } ``` -Seti breakpoint kwenye mwisho wa kazi kuu na tuone ambapo taarifa ilihifadhiwa: +Seti breakpoint kwenye mwisho wa kazi kuu na tuone ambapo taarifa zilihifadhiwa:
@@ -471,21 +471,21 @@ return 0; ``` -Kwa kuangalia mfano uliopita, inawezekana kuona jinsi mwanzoni kulikuwa na arena 1 tu: +Kwa kuangalia mfano wa awali, inawezekana kuona jinsi mwanzoni kuna arena 1 tu:
-Kisha, baada ya kuita thread ya kwanza, ile inayoiita malloc, arena mpya inaundwa: +Kisha, baada ya kuita thread ya kwanza, ile inayoitwa malloc, arena mpya inaundwa:
-na ndani yake kuna chunks kadhaa zinazoweza kupatikana: +na ndani yake kuna chunks kadhaa zinazopatikana:
## Bins & Allocations za Kumbukumbu/Kuondoa -Angalia ni zipi bins na jinsi zilivyoandaliwa na jinsi kumbukumbu inavyotolewa na kuondolewa katika: +Angalia ni bins zipi na jinsi zilivyoandaliwa na jinsi kumbukumbu inavyotolewa na kuondolewa katika: {{#ref}} bins-and-memory-allocations.md @@ -499,10 +499,10 @@ Kazi zinazohusiana na heap zitaweka ukaguzi fulani kabla ya kutekeleza vitendo v heap-memory-functions/heap-functions-security-checks.md {{#endref}} -## Marejeleo +## Marejeo - [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/) - [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/libc-heap/use-after-free/first-fit.md b/src/binary-exploitation/libc-heap/use-after-free/first-fit.md index 52afcd8ad..4384d97f9 100644 --- a/src/binary-exploitation/libc-heap/use-after-free/first-fit.md +++ b/src/binary-exploitation/libc-heap/use-after-free/first-fit.md @@ -8,13 +8,13 @@ Wakati unachomoa kumbukumbu katika programu ukitumia glibc, "bins" tofauti zinat ### Bins Zisizo na Mpangilio -Wakati unachomoa kipande cha kumbukumbu ambacho si kipande cha haraka, kinaenda kwenye bin isiyo na mpangilio. Bin hii inafanya kazi kama orodha ambapo vipande vipya vilivyotolewa vinaongezwa mbele (the "head"). Wakati unahitaji kipande kipya cha kumbukumbu, mtoaji anatazama bin isiyo na mpangilio kutoka nyuma (the "tail") ili kupata kipande ambacho ni kikubwa vya kutosha. Ikiwa kipande kutoka kwenye bin isiyo na mpangilio ni kikubwa zaidi ya kile unachohitaji, kinagawanywa, ambapo sehemu ya mbele inarudishwa na sehemu iliyobaki inabaki kwenye bin. +Wakati unachomoa kipande cha kumbukumbu ambacho si kipande cha haraka, kinaenda kwenye bin isiyo na mpangilio. Bin hii inafanya kazi kama orodha ambapo vipande vipya vilivyotolewa vinapowekwa mbele ( "head"). Wakati unahitaji kipande kipya cha kumbukumbu, mtoaji anatazama bin isiyo na mpangilio kutoka nyuma ("tail") ili kupata kipande ambacho ni kikubwa vya kutosha. Ikiwa kipande kutoka kwenye bin isiyo na mpangilio ni kikubwa kuliko unavyohitaji, kinakatwa, na sehemu ya mbele inarudishwa huku sehemu iliyobaki ikibaki kwenye bin. Mfano: -- Unapotoa 300 bytes (`a`), kisha 250 bytes (`b`), unachomoa `a` na kuomba tena 250 bytes (`c`). +- Unapoweka 300 bytes (`a`), kisha 250 bytes (`b`), unachomoa `a` na kuomba tena 250 bytes (`c`). - Wakati unachomoa `a`, inaenda kwenye bin isiyo na mpangilio. -- Ikiwa kisha unahitaji 250 bytes tena, mtoaji anapata `a` kwenye tail na kuigawanya, akirudisha sehemu inayofaa ombi lako na kuweka zingine kwenye bin. +- Ikiwa kisha unahitaji 250 bytes tena, mtoaji anapata `a` kwenye tail na kuikata, akirudisha sehemu inayofaa ombi lako na kuweka iliyobaki kwenye bin. - `c` itakuwa ikielekeza kwenye `a` ya awali na kujazwa na `a's`. ```c char *a = malloc(300); @@ -24,7 +24,7 @@ char *c = malloc(250); ``` ### Fastbins -Fastbins hutumiwa kwa vipande vidogo vya kumbukumbu. Tofauti na unsorted bins, fastbins huongeza vipande vipya kwenye kichwa, na kuunda tabia ya last-in-first-out (LIFO). Ikiwa unahitaji kipande kidogo cha kumbukumbu, allocator atavuta kutoka kichwa cha fastbin. +Fastbins zinatumika kwa vipande vidogo vya kumbukumbu. Tofauti na unsorted bins, fastbins zinaongeza vipande vipya kwenye kichwa, na kuunda tabia ya last-in-first-out (LIFO). Ikiwa unahitaji kipande kidogo cha kumbukumbu, allocator itavuta kutoka kichwa cha fastbin. Mfano: @@ -49,9 +49,9 @@ d = malloc(20); // a - [**https://heap-exploitation.dhavalkapil.com/attacks/first_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first_fit) - [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/) -- ARM64. Tumia baada ya kuachiliwa: Tengeneza kitu cha mtumiaji, kiache, tengeneza kitu kinachopata kipande kilichoachiliwa na ruhusu kuandika ndani yake, **kuandika upya nafasi ya user->password** kutoka kwa ile ya awali. Tumia tena mtumiaji ili **kupita ukaguzi wa nenosiri** +- ARM64. Tumia baada ya kuachiliwa: Tengeneza kitu cha mtumiaji, kiache, tengeneza kitu kinachopata kipande kilichoachiliwa na ruhusu kuandika ndani yake, **kuandika nafasi ya user->password** kutoka kwa ile ya awali. Tumia tena mtumiaji ili **kupita ukaguzi wa nenosiri** - [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example) -- Programu inaruhusu kuunda noti. Noti itakuwa na taarifa za noti katika malloc(8) (ikiwa na kiashiria kwa kazi inayoweza kuitwa) na kiashiria kwa malloc(\) nyingine yenye maudhui ya noti. +- Programu inaruhusu kuunda noti. Noti itakuwa na taarifa za noti katika malloc(8) (ikiwa na kiashiria kwa kazi ambayo inaweza kuitwa) na kiashiria kwa malloc(\) nyingine yenye maudhui ya noti. - Shambulio litakuwa kuunda noti 2 (note0 na note1) zikiwa na maudhui makubwa ya malloc kuliko saizi ya taarifa za noti na kisha kuziachilia ili ziingie kwenye fast bin (au tcache). - Kisha, tengeneza noti nyingine (note2) yenye saizi ya maudhui 8. Maudhui yatakuwa katika note1 kwani kipande kitarejelewa, ambapo tunaweza kubadilisha kiashiria cha kazi ili kiashirie kazi ya ushindi na kisha Tumia-Baada-ya-Kuachiliwa noti1 ili kuita kiashiria kipya cha kazi. - [**https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html) @@ -59,4 +59,4 @@ d = malloc(20); // a - [**https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html) - Katika kesi hii inahitajika kuandika 4 ndani ya kipande maalum ambacho ndicho cha kwanza kinachotengwa (hata baada ya kuachilia kwa nguvu yote). Kila kipande kipya kinachotengwa nambari yake katika orodha ya kiashiria inahifadhiwa. Kisha, tengeneza vipande 4 (+ kile kilichotengwa awali), cha mwisho kitakuwa na 4 ndani yake, kiache na kulazimisha urejeleaji wa cha kwanza, ambacho kitatumia kipande cha mwisho kilichoachiliwa ambacho ndicho chenye 4 ndani yake. -{{#include /banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md b/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md index 52eb0cbcc..140e1414f 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md @@ -2,14 +2,14 @@ {{#include ../../banners/hacktricks-training.md}} -Uthibitisho wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za mwaliko zilizokwisha muda au kufutwa (za muda, za kudumu, au za kibinafsi) kama viungo vipya vya kibinafsi kwenye seva yoyote iliyoimarishwa kiwango cha 3. Kwa kupeleka nambari zote kwa herufi ndogo, washambuliaji wanaweza kujiandikisha mapema nambari za mwaliko zinazojulikana na kwa kimya kuhamasisha trafiki mara nambari ya asili inapokwisha muda au seva ya chanzo inapopoteza nguvu yake. +Uwezo wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za mwaliko zilizokwisha muda au kufutwa (za muda, za kudumu, au za kibinafsi) kama viungo vipya vya kibinafsi kwenye seva yoyote iliyoimarishwa kiwango cha 3. Kwa kupeleka nambari zote kwa herufi ndogo, washambuliaji wanaweza kujiandikisha mapema nambari za mwaliko zinazojulikana na kwa kimya kuhamasisha trafiki mara nambari ya asili inapokwisha muda au seva ya chanzo inapopoteza nguvu yake. ## Aina za Mwaliko na Hatari ya Kuiba | Aina ya Mwaliko | Inaweza Kuibwa? | Masharti / Maoni | |-----------------------|------------------|-----------------------------------------------------------------------------------------------------------| | Kiungo cha Mwaliko wa Muda | ✅ | Baada ya kuisha, nambari inapatikana na inaweza kujiandikisha tena kama URL ya kibinafsi na seva iliyoimarishwa. | -| Kiungo cha Mwaliko wa Kudumu | ⚠️ | Ikiwa imefutwa na inajumuisha herufi ndogo tu na nambari, nambari inaweza kupatikana tena. | +| Kiungo cha Mwaliko wa Kudumu | ⚠️ | Ikiwa imefutwa na inajumuisha herufi ndogo tu na nambari, nambari inaweza kupatikana tena. | | Kiungo cha Kibinafsi | ✅ | Ikiwa seva ya asili inapoteza nguvu yake ya Kiwango cha 3, mwaliko wake wa kibinafsi unapatikana kwa usajili mpya. | ## Hatua za Kutumia @@ -19,12 +19,12 @@ Uthibitisho wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za m - Kusanya nambari za mwaliko zinazovutia (za muda au za kibinafsi). 2. Usajili wa Mapema - Unda au tumia seva ya Discord iliyopo yenye haki za Kiwango cha 3. -- Katika **Mipangilio ya Seva → URL ya Kibinafsi**, jaribu kupeana nambari ya mwaliko wa lengo. Ikiwa inakubaliwa, nambari hiyo inahifadhiwa na seva mbaya. +- Katika **Mipangilio ya Seva → URL ya Kibinafsi**, jaribu kupewa nambari ya mwaliko wa lengo. Ikiwa inakubaliwa, nambari hiyo inahifadhiwa na seva mbaya. 3. Kuanzisha Kuiba - Kwa mwaliko wa muda, subiri hadi mwaliko wa asili uishe (au uifute kwa mikono ikiwa unadhibiti chanzo). - Kwa nambari zinazojumuisha herufi kubwa, toleo la herufi ndogo linaweza kudaiwa mara moja, ingawa uelekezaji unaanza tu baada ya kuisha. 4. Uelekezaji wa Kimya -- Watumiaji wanaotembelea kiungo cha zamani wanapelekwa kwa seva inayodhibitiwa na mshambuliaji mara tu kuiba inapoanza. +- Watumiaji wanaotembelea kiungo cha zamani wanapelekwa kwa urahisi kwenye seva inayodhibitiwa na mshambuliaji mara tu kuiba inapoanza. ## Mchakato wa Phishing kupitia Seva ya Discord @@ -33,7 +33,7 @@ Uthibitisho wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za m 3. Bot inaelekeza watumiaji kwenye tovuti ya phishing (mfano, `captchaguard.me`) chini ya kivuli cha hatua ya CAPTCHA au uthibitisho. 4. Tekeleza hila ya UX ya **ClickFix**: - Onyesha ujumbe wa CAPTCHA ulioharibika. -- Elekeza watumiaji kufungua mazungumzo ya **Win+R**, kubandika amri ya PowerShell iliyopakiwa mapema, na kubonyeza Enter. +- Mwongoze watumiaji kufungua mazungumzo ya **Win+R**, kubandika amri ya PowerShell iliyopakiwa mapema, na kubonyeza Enter. ### Mfano wa Uingizaji wa ClickFix Clipboard ```javascript @@ -48,7 +48,7 @@ Hii mbinu inakwepa upakuaji wa moja kwa moja wa faili na inatumia vipengele vya ## Mitigations -- Tumia viungo vya mwaliko vya kudumu vinavyokuwa na angalau herufi moja kubwa au alama isiyo ya nambari (visivyoweza kuisha, visivyoweza kutumika tena). +- Tumia viungo vya mwaliko vya kudumu vinavyokuwa na angalau herufi moja kubwa au alama zisizo za nambari (hazitakoma, hazitumiwi tena). - Badilisha mara kwa mara misimbo ya mwaliko na kufuta viungo vya zamani. - Fuata hali ya kuimarisha seva ya Discord na madai ya URL ya urembo. - Wafundishe watumiaji kuthibitisha uhalali wa seva na kuepuka kutekeleza amri zilizopachikwa kwenye clipboard. @@ -58,4 +58,4 @@ Hii mbinu inakwepa upakuaji wa moja kwa moja wa faili na inatumia vipengele vya - From Trust to Threat: Hijacked Discord Invites Used for Multi-Stage Malware Delivery – https://research.checkpoint.com/2025/from-trust-to-threat-hijacked-discord-invites-used-for-multi-stage-malware-delivery/ - Discord Custom Invite Link Documentation – https://support.discord.com/hc/en-us/articles/115001542132-Custom-Invite-Link -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/threat-modeling.md b/src/generic-methodologies-and-resources/threat-modeling.md index 43866ba1c..449958f7f 100644 --- a/src/generic-methodologies-and-resources/threat-modeling.md +++ b/src/generic-methodologies-and-resources/threat-modeling.md @@ -1,6 +1,6 @@ # Threat Modeling -{{#include /banners/hacktricks-training.md}} +{{#include ../banners/hacktricks-training.md}} ## Threat Modeling @@ -13,9 +13,9 @@ Karibu kwenye mwongozo wa kina wa HackTricks kuhusu Threat Modeling! Anza uchung ### Threat Model in a Nutshell -Modeli ya Threat mara nyingi inawakilishwa kama mchoro, picha, au aina nyingine ya uwasilishaji wa kuona unaoonyesha usanifu uliopangwa au ujenzi wa sasa wa programu. Inafanana na **data flow diagram**, lakini tofauti kuu iko katika muundo wake unaolenga usalama. +Threat Model kwa kawaida inawakilishwa kama mchoro, picha, au aina nyingine ya uwasilishaji wa kuona unaoonyesha usanifu uliopangwa au ujenzi wa sasa wa programu. Inafanana na **data flow diagram**, lakini tofauti kuu iko katika muundo wake unaolenga usalama. -Modeli za threat mara nyingi zina vipengele vilivyotajwa kwa rangi nyekundu, vinavyowakilisha udhaifu, hatari, au vizuizi vinavyoweza kutokea. Ili kurahisisha mchakato wa kutambua hatari, triad ya CIA (Usiri, Uaminifu, Upatikanaji) inatumika, ik forming msingi wa mbinu nyingi za threat modeling, huku STRIDE ikiwa moja ya maarufu zaidi. Hata hivyo, mbinu iliyochaguliwa inaweza kutofautiana kulingana na muktadha maalum na mahitaji. +Threat models mara nyingi hujumuisha vipengele vilivyotajwa kwa rangi nyekundu, vinavyowakilisha udhaifu, hatari, au vizuizi vinavyoweza kutokea. Ili kurahisisha mchakato wa kutambua hatari, triad ya CIA (Usiri, Uaminifu, Upatikanaji) inatumika, ik forming msingi wa mbinu nyingi za threat modeling, huku STRIDE ikiwa moja ya maarufu zaidi. Hata hivyo, mbinu iliyochaguliwa inaweza kutofautiana kulingana na muktadha maalum na mahitaji. ### The CIA Triad @@ -27,20 +27,20 @@ Triad ya CIA ni mfano unaotambulika sana katika uwanja wa usalama wa habari, iki ### Threat Modeling Methodlogies -1. **STRIDE**: Iliyotengenezwa na Microsoft, STRIDE ni kifupi cha **Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, and Elevation of Privilege**. Kila kundi linawakilisha aina ya hatari, na mbinu hii hutumiwa mara nyingi katika hatua ya kubuni ya programu au mfumo ili kutambua hatari zinazoweza kutokea. -2. **DREAD**: Hii ni mbinu nyingine kutoka Microsoft inayotumika kwa tathmini ya hatari za hatari zilizotambuliwa. DREAD inasimama kwa **Damage potential, Reproducibility, Exploitability, Affected users, and Discoverability**. Kila moja ya mambo haya inapata alama, na matokeo yake yanatumika kuipa kipaumbele hatari zilizotambuliwa. -3. **PASTA** (Process for Attack Simulation and Threat Analysis): Hii ni mbinu ya hatua saba, **risk-centric**. Inajumuisha kufafanua na kutambua malengo ya usalama, kuunda upeo wa kiufundi, uharibifu wa programu, uchambuzi wa hatari, uchambuzi wa udhaifu, na tathmini ya hatari/triage. -4. **Trike**: Hii ni mbinu inayotegemea hatari ambayo inazingatia kulinda mali. Inaanza kutoka mtazamo wa **risk management** na inatazama hatari na udhaifu katika muktadha huo. -5. **VAST** (Visual, Agile, and Simple Threat modeling): Mbinu hii inalenga kuwa rahisi zaidi na kuunganishwa katika mazingira ya maendeleo ya Agile. Inachanganya vipengele kutoka mbinu nyingine na inazingatia **uwakilishi wa kuona wa hatari**. +1. **STRIDE**: Iliyotengenezwa na Microsoft, STRIDE ni kifupi cha **Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, and Elevation of Privilege**. Kila kundi linawakilisha aina ya tishio, na mbinu hii hutumiwa mara nyingi katika hatua ya kubuni ya programu au mfumo ili kutambua vitisho vinavyoweza kutokea. +2. **DREAD**: Hii ni mbinu nyingine kutoka Microsoft inayotumika kwa tathmini ya hatari ya vitisho vilivyotambuliwa. DREAD inasimama kwa **Damage potential, Reproducibility, Exploitability, Affected users, and Discoverability**. Kila moja ya mambo haya inapata alama, na matokeo yake yanatumika kuipa kipaumbele vitisho vilivyotambuliwa. +3. **PASTA** (Process for Attack Simulation and Threat Analysis): Hii ni mbinu ya hatua saba, **risk-centric**. Inajumuisha kufafanua na kutambua malengo ya usalama, kuunda upeo wa kiufundi, uharibifu wa programu, uchambuzi wa vitisho, uchambuzi wa udhaifu, na tathmini ya hatari/triage. +4. **Trike**: Hii ni mbinu inayotegemea hatari inayolenga kulinda mali. Inaanza kutoka mtazamo wa **risk management** na inatazama vitisho na udhaifu katika muktadha huo. +5. **VAST** (Visual, Agile, and Simple Threat modeling): Mbinu hii inalenga kuwa rahisi zaidi na kuunganishwa katika mazingira ya maendeleo ya Agile. Inachanganya vipengele kutoka mbinu nyingine na inazingatia **uwakilishi wa kuona wa vitisho**. 6. **OCTAVE** (Operationally Critical Threat, Asset, and Vulnerability Evaluation): Iliyotengenezwa na Kituo cha Uratibu cha CERT, mfumo huu unalenga **tathmini ya hatari ya shirika badala ya mifumo au programu maalum**. ## Tools -Kuna zana kadhaa na suluhisho za programu zinazopatikana ambazo zinaweza **kusaidia** katika kuunda na kusimamia modeli za hatari. Hapa kuna chache unazoweza kuzingatia. +Kuna zana kadhaa na suluhisho za programu zinazopatikana ambazo zinaweza **kusaidia** katika kuunda na kusimamia threat models. Hapa kuna chache unazoweza kuzingatia. ### [SpiderSuite](https://github.com/3nock/SpiderSuite) -Zana ya kisasa ya GUI ya wavuti ya kuvunja/mchambuzi wa jukwaa nyingi kwa wataalamu wa usalama wa mtandao. Spider Suite inaweza kutumika kwa ramani na uchambuzi wa uso wa shambulio. +Zana ya kisasa ya GUI ya wavuti ya kuvunja/mchambuzi wa wavuti kwa wataalamu wa usalama wa mtandao. Spider Suite inaweza kutumika kwa ramani na uchambuzi wa uso wa shambulio. **Usage** @@ -54,7 +54,7 @@ Zana ya kisasa ya GUI ya wavuti ya kuvunja/mchambuzi wa jukwaa nyingi kwa wataal ### [OWASP Threat Dragon](https://github.com/OWASP/threat-dragon/releases) -Mradi wa chanzo wazi kutoka OWASP, Threat Dragon ni programu ya wavuti na desktop ambayo inajumuisha uchoraji wa mifumo pamoja na injini ya sheria za kuunda hatari/kuzuia moja kwa moja. +Mradi wa chanzo wazi kutoka OWASP, Threat Dragon ni programu ya wavuti na desktop ambayo inajumuisha uchoraji wa mifumo pamoja na injini ya sheria za kuunda vitisho/mipango kiotomatiki. **Usage** @@ -76,41 +76,41 @@ Wakati mwingine inaweza kuonekana kama hii: 4. Unda mfano wako -Unaweza kutumia zana kama SpiderSuite Crawler kukupa inspiration, mfano wa msingi ungeonekana kama huu +Unaweza kutumia zana kama SpiderSuite Crawler kukupa inspiration, mfano wa msingi ungeweza kuonekana kama hii
-Tu kidogo ya maelezo kuhusu vitu: +Tu kidogo ya maelezo kuhusu viumbe: -- Mchakato (Kitu chenyewe kama vile Webserver au kazi ya wavuti) +- Mchakato (Kiumbe chenyewe kama vile Webserver au kazi ya wavuti) - Mchezaji (Mtu kama vile Mtembezi wa Tovuti, Mtumiaji au Msimamizi) - Mstari wa Mtiririko wa Data (Kiashiria cha Maingiliano) -- Mipaka ya Kuamini (Sehemu tofauti za mtandao au upeo.) -- Hifadhi (Mambo ambapo data zinawekwa kama vile Maktaba) +- Mpaka wa Kuaminika (Sehemu tofauti za mtandao au upeo.) +- Hifadhi (Mambo ambapo data zinahifadhiwa kama vile Maktaba) -5. Unda Hatari (Hatua ya 1) +5. Unda Tishio (Hatua 1) -Kwanza unapaswa kuchagua safu unayotaka kuongeza hatari +Kwanza unapaswa kuchagua safu unayotaka kuongeza tishio
-Sasa unaweza kuunda hatari +Sasa unaweza kuunda tishio
-Kumbuka kwamba kuna tofauti kati ya Hatari za Mchezaji na Hatari za Mchakato. Ikiwa ungeongeza hatari kwa Mchezaji basi utaweza kuchagua tu "Spoofing" na "Repudiation". Hata hivyo katika mfano wetu tunaongeza hatari kwa kitu cha Mchakato hivyo tutaona hii katika kisanduku cha uundaji wa hatari: +Kumbuka kwamba kuna tofauti kati ya Vitisho vya Mchezaji na Vitisho vya Mchakato. Ikiwa ungeongeza tishio kwa Mchezaji basi utaweza kuchagua tu "Spoofing" na "Repudiation". Hata hivyo katika mfano wetu tunaongeza tishio kwa kiumbe cha Mchakato hivyo tutaona hii katika kisanduku cha uundaji wa tishio:
6. Imekamilika -Sasa mfano wako wa kumaliza unapaswa kuonekana kama huu. Na hivi ndivyo unavyofanya mfano rahisi wa hatari na OWASP Threat Dragon. +Sasa mfano wako wa kumaliza unapaswa kuonekana kama hii. Na hivi ndivyo unavyofanya mfano rahisi wa tishio na OWASP Threat Dragon.
### [Microsoft Threat Modeling Tool](https://aka.ms/threatmodelingtool) -Hii ni zana ya bure kutoka Microsoft inayosaidia katika kutafuta hatari katika hatua ya kubuni ya miradi ya programu. Inatumia mbinu ya STRIDE na inafaa hasa kwa wale wanaoendeleza kwenye stack ya Microsoft. +Hii ni zana ya bure kutoka Microsoft inayosaidia katika kutafuta vitisho katika hatua ya kubuni ya miradi ya programu. Inatumia mbinu ya STRIDE na inafaa hasa kwa wale wanaoendeleza kwenye stack ya Microsoft. -{{#include /banners/hacktricks-training.md}} +{{#include ../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md index c819c570b..1e9307456 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md @@ -3,7 +3,7 @@ {{#include ../../../banners/hacktricks-training.md}} > [!WARNING] -> Kumbuka kwamba entitlements zinazohusisha **`com.apple`** hazipatikani kwa wahusika wa tatu, ni Apple pekee inayoweza kuzitoa. +> Kumbuka kwamba entitlements zinazohusisha **`com.apple`** hazipatikani kwa wahusika wa tatu, ni Apple pekee inayoweza kuzitolea. ## High @@ -29,7 +29,7 @@ Apps zenye Entitlement ya Zana za Ufuatiliaji zinaweza kuita `task_for_pid()` il ### `com.apple.security.cs.disable-library-validation` -Entitlement hii inaruhusu **kupakia frameworks, plug-ins, au maktaba bila kusainiwa na Apple au kusainiwa na Team ID** sawa na executable kuu, hivyo mshambuliaji anaweza kutumia upakiaji wa maktaba fulani kuingiza msimbo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation). +Entitlement hii inaruhusu **kupakia frameworks, plug-ins, au maktaba bila kusainiwa na Apple au kusainiwa na Kitambulisho sawa na executable kuu**, hivyo mshambuliaji anaweza kutumia upakiaji wa maktaba fulani kuingiza msimbo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation). ### `com.apple.private.security.clear-library-validation` @@ -42,7 +42,7 @@ Entitlement hii inaruhusu **kutumia DYLD environment variables** ambazo zinaweza ### `com.apple.private.tcc.manager` au `com.apple.rootless.storage`.`TCC` -[**Kulingana na blog hii**](https://objective-see.org/blog/blog_0x4C.html) **na** [**blog hii**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), entitlements hizi zinaruhusu **kubadilisha** database ya **TCC**. +[**Kulingana na blog hii**](https://objective-see.org/blog/blog_0x4C.html) **na** [**blog hii**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), entitlements hizi zinaruhusu **kubadilisha** hifadhidata ya **TCC**. ### **`system.install.apple-software`** na **`system.install.apple-software.standar-user`** @@ -56,9 +56,9 @@ Entitlement inayohitajika kuomba **kernel kupakia nyongeza ya kernel**. Entitlement **`com.apple.private.icloud-account-access`** inaruhusu kuwasiliana na huduma ya XPC **`com.apple.iCloudHelper`** ambayo itatoa **tokens za iCloud**. -**iMovie** na **Garageband** walikuwa na entitlement hii. +**iMovie** na **Garageband** zilikuwa na entitlement hii. -Kwa maelezo zaidi kuhusu exploit ya **kupata tokens za icloud** kutoka kwa entitlement hiyo angalia mazungumzo: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) +Kwa maelezo zaidi kuhusu exploit ya **kupata tokens za icloud** kutoka kwa entitlement hiyo angalia mazungumzo: [**#OBTS v5.0: "Nini Kinachotokea kwenye Mac yako, Kinabaki kwenye iCloud ya Apple?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) ### `com.apple.private.tcc.manager.check-by-audit-token` @@ -91,7 +91,7 @@ Inatoa ruhusa za **Upatikanaji wa Disk Kamili**, moja ya ruhusa za juu zaidi za ### **`kTCCServiceAppleEvents`** -Inaruhusu programu kutuma matukio kwa programu nyingine ambazo mara nyingi hutumiwa kwa **kujiendesha kazi**. Kwa kudhibiti programu nyingine, inaweza kutumia ruhusa zilizotolewa kwa programu hizi nyingine. +Inaruhusu programu kutuma matukio kwa programu nyingine ambazo mara nyingi hutumiwa kwa **kujiendesha kazi**. Kwa kudhibiti programu nyingine, inaweza kutumia vibaya ruhusa zilizotolewa kwa programu hizi nyingine. Kama kufanya ziombwe mtumiaji kwa nywila yake: ```bash @@ -134,10 +134,10 @@ Ruhusa hii inaruhusu **kufunika au kurekebisha msimbo wa C**, kutumia **`NSCreat ### `com.apple.security.cs.disable-executable-page-protection` -Ruhusa hii inaruhusu **kubadilisha sehemu za faili zake za kutekelezwa** kwenye diski ili kutoka kwa nguvu. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection). +Ruhusa hii inaruhusu **kubadilisha sehemu za faili zake za kutekeleza** kwenye diski ili kutoka kwa nguvu. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection). > [!CAUTION] -> Ruhusa ya Kuondoa Ulinzi wa Kumbukumbu ya Kutekelezwa ni ruhusa kali ambayo inatoa ulinzi wa usalama wa msingi kutoka kwa programu yako, na kufanya iwezekane kwa mshambuliaji kuandika upya msimbo wa kutekelezwa wa programu yako bila kugundulika. Prefer ruhusa nyembamba ikiwa inawezekana. +> Ruhusa ya Kuondoa Ulinzi wa Kumbukumbu ya Kutekeleza ni ruhusa kali ambayo inondoa ulinzi wa usalama wa msingi kutoka kwa programu yako, na kufanya iwezekane kwa mshambuliaji kuandika upya msimbo wa kutekeleza wa programu yako bila kugundulika. Prefer ruhusa nyembamba ikiwa inawezekana. ### `com.apple.security.cs.allow-relative-library-loads` @@ -149,7 +149,7 @@ Ruhusa hii inaruhusu kuunganisha mfumo wa faili wa nullfs (uliokatazwa kwa kawai ### `kTCCServiceAll` -Kulingana na chapisho hili la blogu, ruhusa hii ya TCC kwa kawaida hupatikana katika mfumo: +Kulingana na chapisho hili la blog, ruhusa hii ya TCC kwa kawaida hupatikana katika mfumo: ``` [Key] com.apple.private.tcc.allow-prompting [Value] @@ -160,11 +160,11 @@ Ruhusu mchakato **kuomba ruhusa zote za TCC**. ### **`kTCCServicePostEvent`** -{{#include ../../../banners/hacktricks-training.md}} + -{{#include /banners/hacktricks-training.md}} +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/flutter.md b/src/mobile-pentesting/android-app-pentesting/flutter.md index 7994e651d..ec63b1af9 100644 --- a/src/mobile-pentesting/android-app-pentesting/flutter.md +++ b/src/mobile-pentesting/android-app-pentesting/flutter.md @@ -4,7 +4,7 @@ # Flutter Flutter ni **zana ya UI ya Google ya kuvuka majukwaa** inayowaruhusu waendelezaji kuandika msingi mmoja wa msimbo wa Dart ambao **Engine** (C/C++ asilia) unageuza kuwa msimbo wa mashine maalum wa Android na iOS. -Engine inakusanya **Dart VM**, **BoringSSL**, Skia, nk., na inatumika kama maktaba ya pamoja **libflutter.so** (Android) au **Flutter.framework** (iOS). Mitandao yote halisi (DNS, sockets, TLS) inafanyika **ndani ya maktaba hii**, *sio* katika tabaka za kawaida za Java/Kotlin Swift/Obj-C. Muundo huo wa kutengwa ndio sababu vidokezo vya kawaida vya Java vinavyoshindwa kwenye programu za Flutter. +Engine inakusanya **Dart VM**, **BoringSSL**, Skia, n.k., na inatumwa kama maktaba ya pamoja **libflutter.so** (Android) au **Flutter.framework** (iOS). Mitandao yote halisi (DNS, sockets, TLS) inafanyika **ndani ya maktaba hii**, *sio* katika tabaka za kawaida za Java/Kotlin Swift/Obj-C. Muundo huo wa kutengwa ndio sababu vidokezo vya kawaida vya Java vinavyoshindwa kwenye programu za Flutter. ## Kukamata trafiki ya HTTPS katika Flutter @@ -12,32 +12,32 @@ Hii ni muhtasari wa [blog post](https://sensepost.com/blog/2025/intercepting-htt ### Kwa nini kukamata HTTPS ni ngumu katika Flutter * **Uthibitishaji wa SSL/TLS upo kwenye tabaka mbili chini** katika BoringSSL, hivyo bypass za Java SSL‐pinning hazigusi. -* **BoringSSL inatumia duka lake la CA** ndani ya libflutter.so; kuingiza CA yako ya Burp/ZAP kwenye duka la mfumo la Android hakubadilishi chochote. -* Alama katika libflutter.so zime **ondolewa na kuharibiwa**, zikificha kazi ya uthibitishaji wa cheti kutoka kwa zana za dynamic. +* **BoringSSL inatumia *store* yake ya CA** ndani ya libflutter.so; kuingiza CA yako ya Burp/ZAP kwenye hifadhi ya mfumo wa Android hakubadilishi chochote. +* Alama katika libflutter.so zime **ondolewa & kuharibiwa**, zikificha kazi ya uthibitishaji wa cheti kutoka kwa zana za dynamic. -### Fanya fingerprint ya stack halisi ya Flutter +### Piga chapa stack halisi ya Flutter Kujua toleo kunakuruhusu kujenga upya au kulinganisha binaries sahihi. -Step | Command / File | Outcome +Hatua | Amri / Faili | Matokeo ----|----|---- Pata hash ya snapshot | ```bash\npython3 get_snapshot_hash.py libapp.so\n``` | `adb4292f3ec25…` -Ramani hash → Engine | **enginehash** orodha katika reFlutter | Flutter 3 · 7 · 12 + commit ya injini `1a65d409…` -Pull dependent commits | Faili ya DEPS katika commit hiyo ya injini | • `dart_revision` → Dart v2 · 19 · 6
• `dart_boringssl_rev` → BoringSSL `87f316d7…` +Ramani ya hash → Engine | **enginehash** orodha katika reFlutter | Flutter 3 · 7 · 12 + commit ya injini `1a65d409…` +Pull commits zinazohusiana | Faili ya DEPS katika commit hiyo ya injini | • `dart_revision` → Dart v2 · 19 · 6
• `dart_boringssl_rev` → BoringSSL `87f316d7…` Pata [get_snapshot_hash.py hapa](https://github.com/Impact-I/reFlutter/blob/main/scripts/get_snapshot_hash.py). ### Lengo: `ssl_crypto_x509_session_verify_cert_chain()` * Ipo katika **`ssl_x509.cc`** ndani ya BoringSSL. -* **Inarudisha `bool`** – `true` moja inatosha kupita ukaguzi wa mnyororo wa cheti mzima. -* Kazi hiyo hiyo ipo kwenye kila CPU arch; ni opcode pekee zinatofautiana. +* **Inarudisha `bool`** – `true` moja inatosha kupita ukaguzi mzima wa mnyororo wa cheti. +* Kazi hiyo hiyo ipo kwenye kila CPU arch; ni opcodes pekee zinazotofautiana. ### Chaguo A – Patching ya binary na **reFlutter** -1. **Clone** vyanzo sahihi vya Engine na Dart kwa toleo la Flutter la programu. +1. **Clone** vyanzo sahihi vya Engine & Dart kwa toleo la Flutter la programu. 2. **Regex-patch** maeneo mawili muhimu: * Katika `ssl_x509.cc`, lazimisha `return 1;` * (Hiari) Katika `socket_android.cc`, weka proxy kwa nguvu (`"10.0.2.2:8080"`). 3. **Re-compile** libflutter.so, iangushe tena kwenye APK/IPA, sign, install. -4. **Pre-patched builds** kwa toleo za kawaida zinatumwa katika matoleo ya reFlutter GitHub ili kuokoa masaa ya muda wa kujenga. +4. **Pre-patched builds** za matoleo ya kawaida zinatumwa katika toleo la reFlutter GitHub ili kuokoa masaa ya muda wa kujenga. ### Chaguo B – Live hooking na **Frida** (njia ya “hard-core”) Kwa sababu alama imeondolewa, unafanya skanning ya muundo ulio loaded kwa bytes zake za kwanza, kisha kubadilisha thamani ya kurudi papo hapo. @@ -74,4 +74,4 @@ Flutter yenyewe **haizingatii mipangilio ya proxy ya kifaa**. Chaguzi rahisi: ## Marejeleo - [https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/](https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/) -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md index 8ae36189a..4efd3c30c 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md +++ b/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md @@ -6,11 +6,11 @@ Programu zilizosainiwa na **entitlement `get_task_allow`** zinawaruhusu programu za upande wa tatu kuendesha kazi inayoitwa **`task_for_pid()`** na kitambulisho cha mchakato wa programu ya awali kama hoja ili kupata bandari ya kazi juu yake (kuwa na uwezo wa kuidhibiti na kufikia kumbukumbu yake). -Hata hivyo, si rahisi kama tu kuvuta IPA, kuisaini tena na entitlement, na kuirudisha kwenye kifaa chako. Hii ni kwa sababu ya ulinzi wa FairPlay. Wakati saini ya programu inabadilika, funguo za DRM (Digital Rights Management) **zinabatilishwa na programu haitafanya kazi**. +Hata hivyo, si rahisi kama tu kuvuta IPA, kuisaini tena na entitlement, na kuirudisha kwenye kifaa chako. Hii ni kwa sababu ya ulinzi wa FairPlay. Wakati saini ya programu inabadilika, funguo za DRM (Usimamizi wa Haki za Kidijitali) **zinabatilishwa na programu haitafanya kazi**. -Kwa kifaa cha zamani kilichovunjwa, inawezekana kufunga IPA, **kuifungua kwa kutumia chombo unachokipenda** (kama Iridium au frida-ios-dump), na kuirudisha kutoka kwenye kifaa. Ingawa, ikiwa inawezekana, inapendekezwa kuomba tu kwa mteja kwa IPA iliyofunguliwa. +Kwa kifaa cha zamani kilichovunjwa, inawezekana kufunga IPA, **kuikodisha kwa kutumia chombo unachokipenda** (kama Iridium au frida-ios-dump), na kuirudisha kutoka kwenye kifaa. Ingawa, ikiwa inawezekana, inapendekezwa kuwasiliana na mteja kwa IPA iliyokodishwa. -## Pata IPA iliyofunguliwa +## Pata IPA iliyokodishwa ### Pata kutoka Apple @@ -18,16 +18,16 @@ Kwa kifaa cha zamani kilichovunjwa, inawezekana kufunga IPA, **kuifungua kwa kut 2. Funga na uzindue [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) ndani ya macos yako 3. Fungua `Terminal` kwenye Mac yako, na cd hadi `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. IPA itaonekana katika folda hii baadaye. 4. Unapaswa kuona kifaa chako cha iOS. Bonyeza mara mbili juu yake, kisha bonyeza Ongeza + → Programu kutoka kwenye menyu ya juu. -5. Baada ya kubonyeza Ongeza, Configurator itashusha IPA kutoka Apple, na kujaribu kuisukuma kwenye kifaa chako. Ikiwa ulifuata mapendekezo yangu awali na tayari umefunga IPA, ujumbe wa kukuuliza ufungue tena programu utaonekana. +5. Baada ya kubonyeza Ongeza, Configurator itashusha IPA kutoka Apple, na kujaribu kuisukuma kwenye kifaa chako. Ikiwa ulifuata mapendekezo yangu awali na tayari umefunga IPA, ujumbe wa kukuuliza ufungue programu tena utaonekana. 6. IPA inapaswa kushushwa ndani ya `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` ambapo unaweza kuichukua. Angalia [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) kwa maelezo zaidi kuhusu mchakato huu. -### Kufungua programu +### Kuikodisha programu -Ili kufungua IPA tunakwenda kuifunga. Hata hivyo, ikiwa una iPhone ya zamani iliyovunjwa, huenda toleo lake halitaungwa mkono na programu kwani kawaida programu zinasaidia tu matoleo ya hivi karibuni. +Ili kuikodisha IPA tunakwenda kuifunga. Hata hivyo, ikiwa una iPhone ya zamani iliyovunjwa, huenda toleo lake halitaungwa mkono na programu kwani kawaida programu zinasaidia tu matoleo ya hivi karibuni. -Hivyo, ili kuifunga, fungua tu IPA: +Hivyo, ili kuifunga, fungua IPA: ```bash unzip redacted.ipa -d unzipped ``` @@ -44,12 +44,12 @@ ideviceinstaller -i no-min-version.ipa -w ``` Note that you might need **AppSync Unified tweak** from Cydia to prevent any `invalid signature` errors. -Once installed, you can use **Iridium tweak** from Cydia in order to obtain the decrypted IPA. +Once intalled, you can use **Iridium tweak** from Cydia in order to obtain the decrypted IPA. ### Patch entitlements & re-sign -Ili kusaini upya programu na `get-task-allow` entitlement kuna zana kadhaa zinazopatikana kama `app-signer`, `codesign`, na `iResign`. `app-signer` ina kiolesura rafiki cha mtumiaji ambacho kinaruhusu kusaini upya faili la IPA kwa urahisi kwa kuashiria IPA ya kusaini upya, kuweka `get-taks-allow` na cheti na profaili ya usambazaji ya kutumia. +Ili ku-sign upya programu na `get-task-allow` entitlement kuna zana kadhaa zinazopatikana kama `app-signer`, `codesign`, na `iResign`. `app-signer` ina kiolesura rafiki cha mtumiaji ambacho kinaruhusu ku-sign upya faili ya IPA kwa urahisi kwa kuashiria IPA ya ku-sign upya, kuweka `get-taks-allow` na cheti na profaili ya usambazaji ya kutumia. Kuhusu cheti na profaili za kusaini, Apple inatoa **free developer signing profiles** kwa akaunti zote kupitia Xcode. Unda tu programu na uipange. Kisha, panga **iPhone kuamini programu za developer** kwa kuingia kwenye `Settings` → `Privacy & Security`, na bonyeza `Developer Mode`. @@ -59,15 +59,15 @@ ideviceinstaller -i resigned.ipa -w ``` --- -### Wezesha Hali ya Mwandishi (iOS 16+) +### Wezesha Hali ya Mwandamizi (iOS 16+) -Tangu iOS 16 Apple ilianzisha **Hali ya Mwandishi**: binary yoyote inayobeba `get_task_allow` *au* iliyosainiwa na cheti cha maendeleo itakataa kuanzishwa hadi Hali ya Mwandishi iwezeshwe kwenye kifaa. Hutaweza pia kuunganisha Frida/LLDB isipokuwa bendera hii iwepo. +Tangu iOS 16 Apple ilianzisha **Hali ya Mwandamizi**: binary yoyote inayobeba `get_task_allow` *au* iliyosainiwa na cheti cha maendeleo itakataa kuanzishwa hadi Hali ya Mwandamizi iwezeshwe kwenye kifaa. Hutaweza pia kuunganisha Frida/LLDB isipokuwa bendera hii iwepo. -1. Sakinisha au sukuma **yoyote** IPA iliyosainiwa na mwandishi kwenye simu. -2. Nenda kwenye **Mipangilio → Faragha & Usalama → Hali ya Mwandishi** na iwashe. -3. Kifaa kitaanzisha upya; baada ya kuingiza nambari ya siri utaulizwa **Washa** Hali ya Mwandishi. +1. Sakinisha au sukuma **yoyote** IPA iliyosainiwa na mwandamizi kwenye simu. +2. Nenda kwenye **Mipangilio → Faragha & Usalama → Hali ya Mwandamizi** na iwashe. +3. Kifaa kitaanzisha upya; baada ya kuingiza nambari ya siri utaulizwa **Washa** Hali ya Mwandamizi. -Hali ya Mwandishi inabaki hai hadi uizime au kufuta simu, hivyo hatua hii inahitaji kufanywa mara moja kwa kifaa. [Hati za Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) zinaelezea athari za usalama. +Hali ya Mwandamizi inabaki hai hadi uizime au kufuta simu, hivyo hatua hii inahitaji kufanywa mara moja kwa kifaa. [Apple documentation](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) inaelezea athari za usalama. ### Chaguzi za kisasa za sideloading @@ -75,14 +75,14 @@ Sasa kuna njia kadhaa za kisasa za sideloading na kuweka IPAs zilizosainiwa up-t | Chombo | Mahitaji | Nguvu | Mipaka | |--------|----------|-------|--------| -| **AltStore 2 / SideStore** | msaidizi wa macOS/Windows/Linux anayesaini tena IPA kila siku 7 kwa wasifu wa bure wa maendeleo | Upakuaji wa moja kwa moja kupitia Wi-Fi, inafanya kazi hadi iOS 17 | Inahitaji kompyuta kwenye mtandao mmoja, kikomo cha programu 3 kilichowekwa na Apple | -| **TrollStore 1/2** | Kifaa kwenye iOS 14 – 15.4.1 kilichokuwa hatarini kwa hitilafu ya CoreTrust | *Saini ya kudumu* (hakuna kikomo cha siku 7); hakuna kompyuta inahitajika mara baada ya kusakinishwa | Haipatikani kwenye iOS 15.5+ (hitilafu imefanyiwa marekebisho) | +| **AltStore 2 / SideStore** | macOS/Windows/Linux mwenzi anayesaini tena IPA kila siku 7 kwa profaili ya bure ya maendeleo | Upakuaji wa moja kwa moja kupitia Wi-Fi, inafanya kazi hadi iOS 17 | Inahitaji kompyuta kwenye mtandao mmoja, kikomo cha programu 3 kilichowekwa na Apple | +| **TrollStore 1/2** | Kifaa kwenye iOS 14 – 15.4.1 kilichokuwa na udhaifu wa CoreTrust | *Saini ya kudumu* (hakuna kikomo cha siku 7); hakuna kompyuta inahitajika mara baada ya kusakinishwa | Haipatikani kwenye iOS 15.5+ (bug ilirekebishwa) | -Kwa pentests za kawaida kwenye toleo la sasa la iOS, Alt/Side-Store kwa kawaida ndio chaguo bora zaidi. +Kwa pentests za kawaida kwenye toleo la sasa la iOS, Alt/Side-Store mara nyingi ni chaguo bora zaidi. ### Hooking / uhandisi wa dynamic -Unaweza kuhook programu yako kama ilivyo kwenye kifaa kilichofungwa mara tu inaposainiwa na `get_task_allow` **na** Hali ya Mwandishi ikiwa juu: +Unaweza kuunganisha programu yako kama ilivyo kwenye kifaa kilichofungwa mara tu inaposainiwa na `get_task_allow` **na** Hali ya Mwandamizi ikiwa wazi: ```bash # Spawn & attach with objection objection -g "com.example.target" explore @@ -94,7 +94,7 @@ Recent Frida releases (>=16) automatically handle pointer authentication and oth ### Automated dynamic analysis with MobSF (no jailbreak) -[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) inaweza kuingiza IPA iliyosainiwa na developer kwenye kifaa halisi kwa kutumia mbinu ile ile (`get_task_allow`) na inatoa UI ya wavuti yenye kivinjari cha mfumo wa faili, kukamata trafiki na console ya Frida【turn6view0†L2-L3】. Njia ya haraka zaidi ni kuendesha MobSF kwenye Docker kisha kuunganisha iPhone yako kupitia USB: +[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) inaweza kuingiza IPA iliyoandikwa na developer kwenye kifaa halisi kwa kutumia mbinu ile ile (`get_task_allow`) na inatoa UI ya wavuti yenye kivinjari cha mfumo wa faili, kukamata trafiki na console ya Frida【】. Njia ya haraka ni kuendesha MobSF kwenye Docker kisha kuunganisha iPhone yako kupitia USB: ```bash docker pull opensecurity/mobile-security-framework-mobsf:latest docker run -p 8000:8000 --privileged \ @@ -106,10 +106,10 @@ MobSF itapeleka kiotomatiki binary, iwezeshe seva ya Frida ndani ya sandbox ya p ### iOS 17 & Kikwazo cha Modu ya Lockdown -* **Modu ya Lockdown** (Mipangilio → Faragha & Usalama) inazuia linker ya dynamic kupakia maktaba za dynamic zisizo na saini au zilizotiwa saini na nje. Unapojaribu vifaa ambavyo vinaweza kuwa na hali hii imewezeshwa hakikisha ime **zimwa** au vikao vyako vya Frida/objection vitakatishwa mara moja. -* Uthibitishaji wa Pointer (PAC) unatekelezwa kwa mfumo mzima kwenye vifaa vya A12+. Frida ≥16 inashughulikia PAC stripping kwa uwazi — tu hakikisha *frida-server* na zana za Python/CLI ziko katika hali ya kisasa unapozindua toleo jipya kuu la iOS. +* **Modu ya Lockdown** (Mipangilio → Faragha & Usalama) inazuia linker ya dynamic kupakia maktaba za dynamic zisizo na saini au zilizotiwa saini na nje. Unapojaribu vifaa ambavyo vinaweza kuwa na modhi hii imewezeshwa hakikisha ime **zimwa** au vikao vyako vya Frida/objection vitakatishwa mara moja. +* Uthibitishaji wa Pointer (PAC) unatekelezwa kwa mfumo mzima kwenye vifaa vya A12+. Frida ≥16 inashughulikia PAC stripping kwa uwazi — hakikisha unashikilia *frida-server* na zana za Python/CLI zikiwa za kisasa kila wakati toleo jipya kuu la iOS linapotolewa. -## Marejeleo +## Marejeo - [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) - Hati za maendeleo za Apple – Kuwawezesha Modu ya Developer kwenye kifaa: diff --git a/src/network-services-pentesting/1414-pentesting-ibmmq.md b/src/network-services-pentesting/1414-pentesting-ibmmq.md index aaf057731..f92837287 100644 --- a/src/network-services-pentesting/1414-pentesting-ibmmq.md +++ b/src/network-services-pentesting/1414-pentesting-ibmmq.md @@ -20,7 +20,7 @@ Kwa njia ya mikono zaidi, tumia maktaba ya Python **[pymqi](https://github.com/d ### Installing pymqi -**IBM MQ dependencies** zinahitaji kusakinishwa na kupakiwa: +**IBM MQ dependencies** zinahitaji kusanikishwa na kupakiwa: 1. Unda akaunti (IBMid) kwenye [https://login.ibm.com/](https://login.ibm.com/). 2. Pakua maktaba za IBM MQ kutoka [https://www.ibm.com/support/fixcentral/swg/selectFixes?parent=ibm%7EWebSphere&product=ibm/WebSphere/WebSphere+MQ&release=9.0.0.4&platform=All&function=fixId&fixids=9.0.0.4-IBM-MQC-\*,9.0.0.4-IBM-MQ-Install-Java-All,9.0.0.4-IBM-MQ-Java-InstallRA&useReleaseAsTarget=true&includeSupersedes=0&source=fc](https://www.ibm.com/support/fixcentral/swg/selectFixes?parent=ibm%7EWebSphere&product=ibm/WebSphere/WebSphere+MQ&release=9.0.0.4&platform=All&function=fixId&fixids=9.0.0.4-IBM-MQC-*,9.0.0.4-IBM-MQ-Install-Java-All,9.0.0.4-IBM-MQ-Java-InstallRA&useReleaseAsTarget=true&includeSupersedes=0&source=fc). Kwa Linux x86_64 ni **9.0.0.4-IBM-MQC-LinuxX64.tar.gz**. @@ -38,13 +38,13 @@ Kwa njia ya mikono zaidi, tumia maktaba ya Python **[pymqi](https://github.com/d > fi > ``` -5. Sakinisha hizi pakiti: +5. Sanidi hizi pakiti: ```bash sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesRuntime-9.0.0-4.x86_64.rpm sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesClient-9.0.0-4.x86_64.rpm sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesSDK-9.0.0-4.x86_64.rpm ``` -6. Kisha, ongeza muda faili za `.so` kwenye LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **kabla** ya kutumia zana nyingine zinazotumia utegemezi hizi. +6. Kisha, ongeza kwa muda faili za `.so` kwenye LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **kabla** ya kuendesha zana nyingine zinazotumia utegemezi hizi. Kisha, unaweza kunakili mradi [**pymqi**](https://github.com/dsuch/pymqi): ina vipande vya msimbo vya kuvutia, constants, ... Au unaweza moja kwa moja kufunga maktaba na: `pip install pymqi`. @@ -80,11 +80,11 @@ Queue Manager name: MYQUEUEMGR "SYSTEM.AUTO.SVRCONN" might exist, but user was not authorised. "SYSTEM.DEF.SVRCONN" might exist, but user was not authorised. ``` -Inatokea kwamba baadhi ya mifano ya IBM MQ inakubali maombi ya MQ **yasiyo na uthibitisho**, hivyo `--username / --password` hazihitajiki. Kwa hakika, haki za ufikiaji pia zinaweza kutofautiana. +Inatokea kwamba baadhi ya mifano ya IBM MQ inakubali maombi ya MQ **yasiyo na uthibitisho**, hivyo `--username / --password` hazihitajiki. Kwa kweli, haki za ufikiaji pia zinaweza kutofautiana. Pale tunapopata jina moja la channel (hapa: `DEV.ADMIN.SVRCONN`), tunaweza kuhesabu channel zingine zote. -Hesabu inaweza kufanywa kimsingi kwa kutumia kipande hiki cha msimbo `code/examples/dis_channels.py` kutoka **pymqi**: +Hesabu hiyo inaweza kufanywa kimsingi kwa kutumia kipande hiki cha msimbo `code/examples/dis_channels.py` kutoka **pymqi**: ```python import logging import pymqi @@ -121,7 +121,7 @@ logging.info('Found channel `%s`' % channel_name) qmgr.disconnect() ``` -... Lakini **punch-q** pia inaingiza sehemu hiyo (ikiwa na maelezo zaidi!). Inaweza kuzinduliwa kwa: +... Lakini **punch-q** pia inaingiza sehemu hiyo (ikiwa na maelezo zaidi!). Inaweza kuzinduliwa na: ```bash ❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN show channels -p '*' Showing channels with prefix: "*"... @@ -170,7 +170,7 @@ Showing queues with prefix: "*"... ### Dump messages -Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (operesheni isiyo na uharibifu). _Mifano:_ +Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (operesheni isiyo na uharibifu). _Examples:_ ```bash ❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages sniff ``` @@ -182,7 +182,7 @@ Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (oper ### Utekelezaji wa msimbo -> Maelezo machache kabla ya kuendelea: IBM MQ inaweza kudhibitiwa kwa njia nyingi: MQSC, PCF, Amri ya Udhibiti. Orodha za jumla zinaweza kupatikana katika [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison). +> Maelezo machache kabla ya kuendelea: IBM MQ inaweza kudhibitiwa kwa njia nyingi: MQSC, PCF, Control Command. Orodha za jumla zinaweza kupatikana katika [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison). > [**PCF**](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=commands-introduction-mq-programmable-command-formats) (**_Mifumo ya Amri Inayoweza Kupangwa_**) ndiyo tunayoangazia ili kuingiliana kwa mbali na mfano. **punch-q** na zaidi **pymqi** zinategemea mwingiliano wa PCF. > > Unaweza kupata orodha ya amri za PCF: @@ -196,7 +196,7 @@ Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (oper > > _Kumbuka: kila wakati kulingana na IBM MQ documentation (Marejeo ya Usimamizi), pia kuna kiunganishi cha HTTP kwenye `/admin/action/qmgr/{qmgrName}/mqsc` ili kuendesha amri sawa ya MQSC kwa ajili ya uundaji wa huduma (`DEFINE SERVICE`). Kipengele hiki hakijajadiliwa hapa bado._ -Uundaji / kufuta huduma kwa PCF kwa utekelezaji wa programu ya mbali unaweza kufanywa na **punch-q**: +Uundaji / kufuta huduma kwa PCF kwa utekelezaji wa programu ya mbali kunaweza kufanywa na **punch-q**: **Mfano 1** ```bash @@ -232,7 +232,7 @@ Kwa reverse shell rahisi, **punch-q** inapendekeza pia payloads mbili za reverse - Moja na bash - Moja na perl -_Kwa hakika unaweza kujenga moja ya kawaida kwa kutumia amri ya `execute`._ +_Bila shaka unaweza kujenga moja maalum kwa kutumia amri ya `execute`._ Kwa bash: ```bash @@ -246,7 +246,7 @@ Kwa perl: Unaweza kuchimba katika nyaraka za IBM MQ na kutumia moja kwa moja maktaba ya **pymqi** ya python ili kujaribu amri maalum za PCF ambazo hazijatekelezwa katika **punch-q**. -**Example:** +**Mfano:** ```python import pymqi @@ -325,8 +325,8 @@ CONTAINER ID IMAGE COMMAND CRE ## Marejeleo -- [mgeeky's gist - "Marekebisho ya Vitendo ya IBM MQ Penetration Testing"](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec) +- [mgeeky's gist - "Maelezo ya Vitendo ya Kupenya IBM MQ"](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec) - [MQ Jumping - DEFCON 15](https://defcon.org/images/defcon-15/dc15-presentations/dc-15-ruks.pdf) - [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq) -{{#include /banners/hacktricks-training.md}} +{{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-ntp.md b/src/network-services-pentesting/pentesting-ntp.md index d97d4c7ec..75f7413a2 100644 --- a/src/network-services-pentesting/pentesting-ntp.md +++ b/src/network-services-pentesting/pentesting-ntp.md @@ -14,7 +14,7 @@ - Tumia vyanzo vya NTP au NTS (Network Time Security) vilivyoaminika na uthibitisho. - Punguza nani anaweza kuuliza/kutoa amri kwa daemon (``restrict default noquery``, ``kod`` n.k.). - Zima maswali ya udhibiti ya Mode-6/7 ya zamani (``monlist``, ``ntpdc``) au punguza kiwango chao. -- Fuata mabadiliko ya usawazishaji/halisi ya sekunde za kuruka kwa uingiliaji. +- Fuata mabadiliko ya usawazishaji/halisi ya sekunde za kuruka kwa udanganyifu. - Hifadhi daemon ikisasishwa (angalia CVEs za hivi karibuni hapa chini). **Default ports** @@ -76,23 +76,23 @@ zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv Zingatia kwa makini mistari ya ``restrict``, mipangilio ya ``kod`` (Kiss-o'-Death), ``disable monitor``/``includefile /etc/ntp/crypto`` na ikiwa *NTS* imewezeshwa (``nts enable``). --- -## Uhalifu wa Karibuni (2023-2025) +## Uthibitisho wa Hivi Karibuni (2023-2025) | Mwaka | CVE | Kipengele | Athari | |------|-----|-----------|--------| -| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Kuandika nje ya mipaka kadhaa kunapatikana kupitia majibu ya **ntpq**. Patch katika **4.2.8p16** 🡒 sasisha au rudisha marekebisho. | +| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Maandishi mengi ya nje ya mipaka yanayoweza kufikiwa kupitia majibu ya **ntpq**. Patch katika **4.2.8p16** 🡒 sasisha au rudisha nyuma marekebisho. | | 2023 | **CVE-2023-33192** | **ntpd-rs** (uteuzi wa Rust) | Keki ya **NTS** isiyo sahihi husababisha **DoS** ya mbali kabla ya v0.3.3 – inaathiri bandari 123 hata wakati NTS **imezimwa**. | | 2024 | sasisho za distro | **chrony 4.4 / 4.5** – uimarishaji wa usalama kadhaa & marekebisho ya NTS-KE (mfano SUSE-RU-2024:2022) | -| 2024 | Rekodi ya DDoS | Cloudflare inaripoti shambulio la **5.6 Tbps UDP reflection** (NTP miongoni mwa protokali zinazotumika). Hifadhi *monitor* & *monlist* zikiwa zimezimwa kwenye mwenyeji wa mtandao. | +| 2024 | Rekodi ya DDoS | Cloudflare inaripoti shambulio la **5.6 Tbps UDP reflection** (NTP miongoni mwa protokali zinazotumika). Hifadhi *monitor* & *monlist* zimezimwa kwenye mwenyeji wa mtandao. | -> **Vifaa vya kutekeleza**: Mifano ya uthibitisho wa mzigo wa 2023 ntpq OOB-write iko kwenye GitHub (angalia andiko la Meinberg) na inaweza kutumika kama silaha kwa uvuvi wa upande wa mteja wa wasimamizi wa mifumo. +> **Vifaa vya kutekeleza**: Mifano ya uthibitisho wa dhana kwa mfululizo wa 2023 ntpq OOB-write iko kwenye GitHub (ona andiko la Meinberg) na inaweza kutumika kama silaha kwa uvuvi wa upande wa mteja wa wasimamizi wa mifumo. --- ## Mashambulizi ya Juu ### 1. NTP Amplification / Reflection -Swali la zamani la Mode-7 ``monlist`` linarejesha hadi **600 anwani za mwenyeji** na bado lipo kwenye maelfu ya mwenyeji wa Mtandao. Kwa sababu jibu (428-468 bytes/entry) ni *~ 200×* kubwa zaidi kuliko ombi la byte 8, mshambuliaji anaweza kufikia viwango vya kuimarisha vya tarakimu tatu. Njia za kupunguza: +Swali la zamani la Mode-7 ``monlist`` linarejesha hadi **600 anwani za mwenyeji** na bado lipo kwenye maelfu ya mwenyeji wa Mtandao. Kwa sababu ya jibu (428-468 bytes/entry) ni *~ 200×* kubwa kuliko ombi la byte 8, mshambuliaji anaweza kufikia viwango vya kuimarisha vya tarakimu tatu. Njia za kupunguza: - Sasisha hadi ntp 4.2.8p15+ na **ongeza** ``disable monitor``. - Punguza kiwango cha UDP/123 kwenye ukingo au wezesha *sessions-required* kwenye vifaa vya DDoS. @@ -100,13 +100,13 @@ Swali la zamani la Mode-7 ``monlist`` linarejesha hadi **600 anwani za mwenyeji* Tazama makala ya kituo cha kujifunza cha Cloudflare kwa muhtasari wa hatua kwa hatua. -### 2. Mashambulizi ya Muda-Kuhamisha / Kuchelewesha (Utafiti wa Khronos / Chronos) +### 2. Mashambulizi ya Muda-Kuhamisha / Kuchelewesha (utafiti wa Khronos / Chronos) Hata na uthibitisho, mshambuliaji kwenye njia anaweza kimya kimya **kuhamasisha saa ya mteja** kwa kuangusha/kuchelewesha pakiti. Rasimu ya IETF **Khronos (zamani Chronos)** inapendekeza kuuliza seti tofauti ya seva kwa nyuma na kuangalia matokeo ili kugundua mabadiliko > 𝚡 ms. Chrony ya kisasa (4.4+) tayari inatekeleza chujio kama hicho cha akili (``maxdistance`` / ``maxjitter``). -### 3. Matumizi mabaya ya NTS & 4460/tcp kufichuliwa +### 3. Unyanyasaji wa NTS & 4460/tcp kufichuliwa -NTS inahamisha crypto nzito kwenye **kanali ya TLS 1.3 kwenye 4460/tcp** (``ntske/1``). Utekelezaji mbaya (angalia CVE-2023-33192) unakufa wakati wa kuchambua keki au kuruhusu cipher dhaifu. Wapimaji wa pentesting wanapaswa: +NTS inahamisha crypto nzito kwenye **kanali ya TLS 1.3 kwenye 4460/tcp** (``ntske/1``). Utekelezaji mbaya (ona CVE-2023-33192) unakufa wakati wa kuchambua keki au kuruhusu cipher dhaifu. Wapimaji wa usalama wanapaswa: ```bash # TLS reconnaissance nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert @@ -114,7 +114,7 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert # Grab banner & ALPN openssl s_client -connect :4460 -alpn ntske/1 -tls1_3 -ign_eof ``` -Tafuta vyeti vilivyojitegemea au vilivyokwisha muda na cipher-suites dhaifu (non-AEAD). Kumbukumbu: RFC 8915 §4. +Tafuta vyeti vilivyojitegemea au vilivyokwisha muda na cipher-suites dhaifu (non-AEAD). Rejea: RFC 8915 §4. --- ## Kuimarisha / Mbinu Bora za Sasa (BCP-233 / RFC 8633) @@ -123,7 +123,7 @@ Tafuta vyeti vilivyojitegemea au vilivyokwisha muda na cipher-suites dhaifu (non 1. Tumia **≥ 4** vyanzo huru, tofauti vya muda (mabwawa ya umma, GPS, PTP-bridges) ili kuepuka sumu ya chanzo kimoja. 2. Washa ``kod`` na ``limited``/``nomodify`` vizuizi ili wateja wanaotumia vibaya wapokee pakiti za **Kiss-o'-Death** za mipaka ya kiwango badala ya majibu kamili. -3. Fuata kumbukumbu za daemon kwa matukio ya **panic** au marekebisho ya hatua > 1000 s. (Saini za shambulio kwa mujibu wa RFC 8633 §5.3.) +3. Fuata kumbukumbu za daemon kwa matukio ya **panic** au marekebisho ya hatua > 1000 s. (Saini za shambulio kulingana na RFC 8633 §5.3.) 4. Fikiria **leap-smear** ili kuepuka kukatika kwa sekunde za leap, lakini hakikisha *wateja wote* wa chini wanatumia dirisha sawa la smear. 5. Hifadhi polling ≤24 h ili bendera za sekunde za leap zisikosewe. @@ -144,7 +144,7 @@ port:4460 "ntske" # NTS-KE | ``ntpwn`` | Wrapper ya script-kiddie kutekeleza maswali ya monlist & peers | ``python ntpwn.py --monlist targets.txt`` | | **zgrab2 ntp** | Skanning ya wingi / Matokeo ya JSON ikiwa na bendera ya monlist | Tazama amri hapo juu | | ``chronyd`` na ``allow`` | Endesha seva ya NTP isiyo halali katika maabara ya pentest | ``chronyd -q 'server 127.127.1.0 iburst'`` | -| ``BetterCap`` | Ingiza pakiti za NTP kwa ajili ya muda-kubadilisha MITM kwenye Wi-Fi | ``set arp.spoof.targets ; set ntp.time.delta 30s; arp.spoof on`` | +| ``BetterCap`` | Ingiza pakiti za NTP kwa ajili ya MITM ya mabadiliko ya wakati kwenye Wi-Fi | ``set arp.spoof.targets ; set ntp.time.delta 30s; arp.spoof on`` | --- ## Amri za Kiotomatiki za HackTricks @@ -167,16 +167,16 @@ Description: Enumerate NTP Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP} ``` --- -## References +## Marejeo -- RFC 8915 – *Usalama wa Wakati wa Mtandao kwa Protokali ya Wakati wa Mtandao* (port 4460) +- RFC 8915 – *Usalama wa Wakati wa Mtandao kwa Protokali ya Wakati wa Mtandao* (bandari 4460) - RFC 8633 – *Protokali ya Wakati wa Mtandao BCP* - Ripoti ya DDoS ya Cloudflare 2024 Q4 (5.6 Tbps) - Makala ya Cloudflare *Shambulio la Kuongeza NTP* -- NTP 4.2.8p15 CVE mfululizo 2023-04 -- NVD entries **CVE-2023-26551–55**, **CVE-2023-33192** +- NTP 4.2.8p15 mfululizo wa CVE 2023-04 +- Kuingia kwa NVD **CVE-2023-26551–55**, **CVE-2023-33192** - Sasisho la usalama la SUSE chrony 2024 (chrony 4.5) - Rasimu ya Khronos/Chronos (kupunguza mabadiliko ya wakati) - mwongozo wa chronyc/mifano kwa ufuatiliaji wa mbali -- zgrab2 ntp module docs -{{#include /banners/hacktricks-training.md}} +- hati za moduli za zgrab2 ntp +{{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/angular.md b/src/network-services-pentesting/pentesting-web/angular.md index 3849efd98..c6ec5cc17 100644 --- a/src/network-services-pentesting/pentesting-web/angular.md +++ b/src/network-services-pentesting/pentesting-web/angular.md @@ -1,6 +1,6 @@ # Angular -{{#include /banners/hacktricks-training.md}} +{{#include ../../banners/hacktricks-training.md}} ## The Checklist @@ -16,11 +16,11 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist). ## What is Angular -Angular ni **nguzo** na **chanzo wazi** cha mfumo wa mbele kinachoshughulikiwa na **Google**. Inatumia **TypeScript** kuboresha usomaji wa msimbo na urekebishaji. Pamoja na mitambo ya usalama yenye nguvu, Angular inazuia udhaifu wa kawaida wa upande wa mteja kama **XSS** na **mwelekeo wazi**. Inaweza kutumika pia kwenye **seva**, hivyo kuzingatia usalama ni muhimu kutoka **pande zote**. +Angular ni **nguzo** na **chanzo wazi** cha mfumo wa mbele kinachoshughulikiwa na **Google**. Inatumia **TypeScript** kuboresha usomaji wa msimbo na ufuatiliaji wa makosa. Pamoja na mitambo yenye nguvu ya usalama, Angular inazuia udhaifu wa kawaida wa upande wa mteja kama **XSS** na **mwelekeo wazi**. Inaweza kutumika pia kwenye **upande wa seva**, hivyo kuzingatia usalama ni muhimu kutoka **pande zote**. ## Framework architecture -Ili kuelewa vyema misingi ya Angular, hebu tuangalie dhana zake muhimu. +Ili kuelewa vizuri misingi ya Angular, hebu tuangalie dhana zake muhimu. Mradi wa kawaida wa Angular kawaida unaonekana kama: ```bash @@ -43,11 +43,11 @@ my-workspace/ ``` Kulingana na nyaraka, kila programu ya Angular ina angalau kipengele kimoja, kipengele cha mzizi (`AppComponent`) ambacho kinahusisha hierarchi ya vipengele na DOM. Kila kipengele kinafafanua darasa ambalo lina data na mantiki ya programu, na kinahusishwa na kiolezo cha HTML ambacho kinafafanua mtazamo wa kuonyeshwa katika mazingira ya lengo. Mshereheshaji `@Component()` unatambua darasa lililo chini yake kama kipengele, na unatoa kiolezo na metadata maalum ya kipengele. `AppComponent` imefafanuliwa katika faili `app.component.ts`. -Angular NgModules zinatangaza muktadha wa uundaji wa seti ya vipengele ambayo imejitolea kwa eneo la programu, mtiririko wa kazi, au seti ya uwezo inayohusiana kwa karibu. Kila programu ya Angular ina moduli ya mzizi, ambayo kwa kawaida inaitwa `AppModule`, ambayo inatoa mekanizma ya kuanzisha inayozindua programu. Programu kwa kawaida ina moduli nyingi za kazi. `AppModule` imefafanuliwa katika faili `app.module.ts`. +NgModules za Angular zinatangaza muktadha wa uundaji wa seti ya vipengele ambayo imejitolea kwa eneo la programu, mtiririko wa kazi, au seti ya uwezo inayohusiana kwa karibu. Kila programu ya Angular ina moduli ya mzizi, ambayo kwa kawaida inaitwa `AppModule`, ambayo inatoa mekanizma ya kuanzisha inayozindua programu. Programu kwa kawaida ina moduli nyingi za kazi. `AppModule` imefafanuliwa katika faili `app.module.ts`. NgModule ya Angular `Router` inatoa huduma inayokuruhusu kufafanua njia ya urambazaji kati ya majimbo tofauti ya programu na hierarchi za mtazamo katika programu yako. `RouterModule` imefafanuliwa katika faili `app-routing.module.ts`. -Kwa data au mantiki ambayo haijahusishwa na mtazamo maalum, na unataka kushiriki kati ya vipengele, unaunda darasa la huduma. Ufafanuzi wa darasa la huduma unatanguliwa mara moja na mshereheshaji `@Injectable()`. Mshereheshaji unatoa metadata inayoruhusu watoa huduma wengine kuingizwa kama utegemezi katika darasa lako. Uingizaji wa utegemezi (DI) unakuruhusu kuweka darasa lako la kipengele kuwa nyembamba na bora. Haziipati data kutoka kwa seva, kuthibitisha ingizo la mtumiaji, au kuandika moja kwa moja kwenye console; zinaweka kazi hizo kwa huduma. +Kwa data au mantiki ambayo haijahusishwa na mtazamo maalum, na ambayo unataka kushiriki kati ya vipengele, unaunda darasa la huduma. Ufafanuzi wa darasa la huduma unatanguliwa mara moja na mshereheshaji `@Injectable()`. Mshereheshaji unatoa metadata inayoruhusu watoa huduma wengine kuingizwa kama utegemezi katika darasa lako. Uingizaji wa utegemezi (DI) unakuruhusu kuweka darasa lako la kipengele kuwa nyembamba na bora. Haziipati data kutoka kwa seva, kuthibitisha ingizo la mtumiaji, au kuandika moja kwa moja kwenye console; zinaweka kazi hizo kwa huduma. ## Mipangilio ya sourcemap @@ -78,12 +78,12 @@ Ufunguo unaweza kuitwa kwenye mali, matukio, na sifa, pamoja na kwenye mwanacham | AINA | LENGO | MIFANO | | --------- | -------------------------------------------------------- | -------------------------------------------------------------------- | -| Mali | Mali ya kipengee, Mali ya Kipengee, Mali ya Mwelekeo | \ | -| Tukio | Tukio la kipengee, Tukio la Kipengee, Tukio la Mwelekeo| \