𝗖𝗕𝗖 𝗕𝗶𝘁 𝗙𝗹𝗶𝗽𝗽𝗶𝗻𝗴 𝗜𝗺𝗲𝗳𝗮𝗳𝗮𝗻𝘂𝗮

Usimbuaji (Encryption) haumaanishi kuwa data yako iko salama dhidi ya uingiliaji.

Waendelezaji wengi hufanya kosa hili. Wanafikiri ikiwa mshambuliaji hawezi kusoma data, basi hawezi kuibadilisha. Hili ni kosa. Kriptografia hutofautisha usiri (secrecy) na uadilifu (integrity) kama kazi mbili tofauti.

Shambulio la CBC Bit Flipping linathibitisha hili. Mshambuliaji anaweza kubadilisha data yako bila kujua ufunguo wako wa siri.

Hivi ndivyo inavyofanya kazi:

AES haisimbuai data kama kipande kimoja kikubwa. Inagawa data katika vizuizi (blocks) vya baiti 16. Katika mfumo wa CBC, vizuizi hivi huunganishwa kwa mnyororo. Matokeo yaliyosimbuliwa ya kizuizi cha kwanza huchanganywa na maandishi asilia (plaintext) ya kizuizi cha pili.

Mnyororo huu hutengeneza udhaifu wakati wa kusimbua (decryption). Ili kupata maandishi asilia ya Kizuizi cha 2, seva inakisimbua na kukiunganisha na ciphertext kutoka Kizuizi cha 1.

Mshambuliaji anaweza kutumia udhaifu huu:

Mshambuliaji hahitaji kusoma ujumbe. Wanabadilisha tu bitu ili kubadilisha matokeo ya mwisho.

Fikiria programu ya wavuti ya zamani inayotumia kuki (cookies) zilizosimbuliwa kwa ajili ya vikao (sessions). Kuki inaweza kuwa na: userid=994;role=user;

Mshambuliaji anakamata kuki hii na kubadilisha bitu katika ciphertext. Wanatuma maombi mengi mpaka seva ikubali moja. Kwa sababu seva hukagua tu ikiwa data inaweza kusimbuliwa, inachakata maandishi yaliyobadilishwa. Ghafla, mfululizo wa maandishi yaliyosimbuliwa unasomeka: userid=994;role=admi;

Mshambuliaji sasa anakuwa na ufikiaji wa admin. Hawajawahi kusoma ufunguo au kuki ya asili.

Kosa ni kudhani kuwa usimbuaji unahakikisha uadilifu.

Ili kurekebisha hili, tumia Usimbuaji wa Uhakiki (Authenticated Encryption) kama AES-GCM. Inatengeneza lebo ya kriptografia (cryptographic tag). Lebo hii hufanya kazi kama muhuri. Ikiwa mshambuliaji atabadilisha hata biti moja, muhuri unavunjika. Seva inakataa data hiyo mara moja.

Ikiwa lazima utumie CBC, tumia usanifu wa Encrypt-then-MAC. Tengeneza nambari ya uhakiki (authentication code) kwa ajili ya ciphertext na uithibitishe kabla ya kuanza kusimbua.

Data ya siri si kila wakati data inayoweza kuaminika. Hakikisha kila wakati kuwa data yako haijabadilishwa kabla ya kuitumia kufanya maamuzi.

CBC Bit-Flipping Explained: Kwa nini Usimbaji (Encryption) pekee hauhakikishii Uadilifu (Integrity)

Katika ulimwengu wa usalama wa mtandao, tunapozungumzia kriptografia, mara nyingi tunazingatia zaidi Usiri (Confidentiality). Tunataka kuhakikisha kuwa mtu asiyeruhusiwa hawezi kusoma ujumbe wetu. Hii inafanywa kwa kutumia usimbaji (encryption).

Hata hivyo, kuna dhana nyingine muhimu sana: Uadilifu (Integrity). Uadilifu unahakikisha kuwa ujumbe haujabadilishwa wakati wa kusafiri kutoka kwa mtumaji kwenda kwa mpokeaji.

Tatizo ni kwamba: Usimbaji pekee hauhakikishii uadilifu.

Katika makala haya, tutachambua shambulio la CBC Bit-Flipping ili kuelewa kwa nini usimbaji pekee hautoshi na ni hatari gani zinazoweza kutokea.

CBC (Cipher Block Chaining) ni nini?

CBC ni mfumo (mode) wa usimbaji wa block-cipher ambapo kila kitalu (block) cha maandishi ya kawaida (plaintext) hufanyiwa operesheni ya XOR na kitalu cha awali cha maandishi yaliyosimbwa (ciphertext) kabla ya kusimbwa.

Mchakato unaonekana hivi:

  1. $C_1 = E_K(P_1 \oplus IV)$
  2. $C_2 = E_K(P_2 \oplus C_1)$
  3. $C_3 = E_K(P_3 \oplus C_2)$

Ambapo:

Shambulio la Bit-Flipping

Udhaifu wa CBC unatokana na jinsi operesheni ya XOR inavyofanya kazi wakati wa usimbaji (decryption).

Wakati wa kusimbua (decrypting) kitalu cha $n$, mchakato ni: $P_n = D_K(C_n) \oplus C_{n-1}$

Hapa ndipo tatizo lilipo. Angalia jinsi $P_n$ inavyotegemea $C_{n-1}$ (kitalu cha awali cha ciphertext). Ikiwa mshambuliaji atabadilisha bit moja katika $C_{n-1}$, mabadiliko hayo yataathiri moja kwa moja $P_n$ wakati wa kusimbua.

Ingawa mabadiliko hayo katika $C_{n-1}$ yataharibu kitalu cha $P_{n-1}$ (kitakuwa na data iliyoharibika/garbage), mshambuliaji anaweza kutumia mabadiliko hayo kwa usahihi ili kubadilisha $P_n$ kuelekea thamani anayotaka.

Mfano wa Vitendo

Tuseme tuna ujumbe uliosimbwa kwa CBC ambao una muundo ufuatao: user_id=100;admin=false

Ujumbe huu umegawanywa katika vitalu viwili:

Mshambuliaji hawezi kusoma ujumbe huu kwa sababu umesimbwa, lakini anajua muundo wa ujumbe (labda kupitia uchambuzi wa data au kwa kujua mfumo unavyofanya kazi). Lengo la mshambuliaji ni kubadilisha admin=false kuwa admin=true.

Ili kufanya hivyo, mshambuliaji atabadilisha bit katika Block 1 ($C_1$).

Kwa sababu $P_2 = D_K(C_2) \oplus C_1$, mshambuliaji anaweza kukokotoa thamani mpya ya $C_1'$ ambayo itasababisha $P_2$ iwe min=true.

Matokeo:

Ikiwa mfumo unajali tu kama ujumbe umesimbwa na haujapima uadilifu, unaweza kukubali ujumbe huu kama user_id=[garbage];admin=true. Katika mifumo mingi, sehemu ya user_id inaweza kupuuza makosa, lakini admin=true itatambulika na kuleta madhara makubwa.

Jinsi ya Kuzuia Shambulio Hili

Ili kuzuia mashambulio ya aina hii, huwezi kutegemea usimbaji pekee. Unahitaji njia ya kuhakikisha kuwa ciphertext haijaguswa.

1. Kutumia MAC (Message Authentication Code)

Njia bora ni kutumia mbinu ya Encrypt-then-MAC. Baada ya kusimba ujumbe, unaunda "saini" (MAC) kwa kutumia funguo tofauti na kutuma saini hiyo pamoja na ciphertext. Wakati wa kupokea, unahakiki MAC kwanza. Ikiwa bit moja tu imebadilishwa, MAC haitafanana na ujumbe, na utaratibu utakataliwa kabla ya kusimbuliwa.

2. Kutumia AEAD (Authenticated Encryption with Associated Data)

Badala ya kutumia CBC na MAC kwa kutengeneza mfumo wako mwenyewe, tumia mifumo ya kisasa ya AEAD. Mifumo hii inajumuisha usimbaji na uthibitisho wa uadilifu katika hatua moja.

Mifano ya AEAD ni:

Mifumo hii ni salama zaidi kwa sababu inahakikisha kuwa ikiwa data yoyote itabadilishwa, mchakato wa kusimbua utafeli kabisa.

Hitimisho

Usimbaji (Encryption) unalinda siri, lakini haulindi uadilifu. Katika mifumo ya CBC, mshambuliaji anaweza "kucheza" na bit za ciphertext ili kubadilisha maana ya plaintext bila hata kuhitaji kufungua usimbaji. Daima tumia usimbaji uliothibitishwa (Authenticated Encryption) ili kulinda mifumo yako dhidi ya mashambulio ya aina hii.