SaveSaveSaveSave ← Tüm rehberler
Türkçe

Rehber · Mesaj riski · · Stefan Tsezarov · güncellendi

Göremediğin metin

İki mesaj tamamen aynı görünüp tamamen farklı karakterler içerebilir.

Bir mesaj kopyalıyorsun.

Normal görünüyor.

Üç sıradan cümle. Garip hiçbir şey yok.

Onu bir belgeye, bir web sitesine, bir cüzdana veya bir AI asistanına yapıştırıyorsun.

Ve birden, gördüğün haliyle mesajın hiç söylemediği bir şey oluyor.

Nasıl?

Çünkü ekranında gördüğün şey, metnin içindeki her şey olmak zorunda değil.

Bazı karakterler hiç görünür yer kaplamaz.

Yine de oradalar.

Yine de kopyalanabilir, yapıştırılabilir, saklanabilir ve işlenebilirler.

Sadece onları göremezsin.


Bilgisayarın harfleri senin gibi görmez

Bir cümleye baktığında şekiller görürsün.

Bilgisayarın veri görür.

Örneğin A harfi, belirli bir kod noktasına sahip bir Unicode karakteriyle temsil edilir. Boşluk başka bir karakterdir. Her harf, rakam, noktalama işareti ve diğer birçok sembolün kendi temsili vardır.

Ama her karakter görünür bir şekil üretmez.

Bazı karakterler yazılıma metnin nasıl davranması gerektiğini söyler.

Bir programa şunları söyleyebilirler:

Yani aynı görünen ama farklı karakter dizileri olan iki metin parçan olabilir.

Bu fark önemli olabilir.

Hem de çok.

Bilmeye değer üç tür görünmez metin

İşin içinde birkaç farklı mekanizma var, ama üçünü anlamak özellikle yararlı.

1. Görünmeyen karakterler

Bunlara genellikle sıfır genişlikli karakterler denir.

Örnekler arasında sıfır genişlikli boşluk (zero-width space), sıfır genişlikli birleştirici (zero-width joiner) ve kelime birleştirici (word joiner) var.

Metinde bir konum kaplarlar ama görünür piksel üretmezler.

Örneğin şu iki kelime aynı görünebilir:

İki kelime · biri göründüğü gibi değil

payment

pay​ment

ilk: 7 karakterikinci: 8 karakter

İkincisinin içinde görünmez bir karakter var.

Muhtemelen onu göremiyorsun.

Bilgisayarın görebiliyor.

Bu, iki dizinin aslında aynı olmadığı anlamına gelir.

Bu, bir kişinin gördüğü şey yerine temeldeki karakterleri karşılaştıran aramaları, filtreleri, kullanıcı adlarını, tanımlayıcıları ve diğer sistemleri etkileyebilir.

Ve bu karakterlerin bazılarının var olmasının meşru bir nedeni de var.

Ona geri döneceğiz.

2. Gördüğün sırayı değiştiren karakterler

Bazı görünmez karakterler metin yönünü etkiler.

Bu gereklidir, çünkü Arapça ve İbranice gibi diller sağdan sola, İngilizce ise soldan sağa yazılır.

İkisini birden içeren bir cümle, yazılıma farklı kısımların nasıl gösterileceğini söyleyen talimatlar gerektirebilir.

Bu talimatlar yararlı olabilir.

Ama kötüye de kullanılabilirler.

Bir yön denetim karakteri, bilgisayarın sakladığı karakterlerin ekranda farklı bir sırada görünmesini sağlayabilir.

Bu açık bir güvenlik sorunu yaratır.

Örneğin bir dosya adı bir uzantıyla bitiyormuş gibi görünürken temeldeki karakter dizisi farklı bir şey söyleyebilir.

Aynı ilke kaynak kodda da önemli olabilir.

Bir inceleyici bir şey görür.

Bilgisayar başka bir şey işler.

3. Görünmez bir mesaj taşıyabilen karakterler

Bu alışılmadık olanı.

Unicode, Tags bloğu olarak bilinen bir aralık içerir.

Bu karakterler etiketleme amacıyla tasarlanmıştır ve görüntülendiklerinde normalde görünmezdir.

İlginç kısım, tek tek Tags karakterlerinin sıradan ASCII karakterlerini temsil edebilmesidir.

Yeterince yan yana koyarsan metin kodlayabilirler.

Bir cümle bu yüzden ekranda görünmeyen ek bir karakter dizisi içerebilir.

Gözlerine mesaj tamamen sıradan bir selamlama gibi görünebilir.

Temeldeki karakterleri okuyan yazılım için orada çok daha fazlası olabilir.

Ve bu ayrım, hedef bir AI asistanı olduğunda özellikle ilginç hale gelir.

Bir AI mesajını ekranın bir fotoğrafı olarak görmez.

Karakterleri işler.

Yani göremediğin bir şey yine de girdinin parçası olabilir.

İşte nasıl göründüğü

Şu cümleyi al:

Send the payment to the address below.

Normal görünüyor, değil mi?

Şimdi içine görünmez karakterler eklendiğini düşün.

Ekranında yine de böyle görünebilir ve bu gerçeğidir, denemen için hazırlandı:

Hazırlanmış bir örnek · seç, kopyala, tara

Send the​ payment⁠ to the​ address below.󠁨󠁩󠁤󠁤󠁥󠁮

görünen karakter: 38gerçek karakter: 47fark: 9

Ama altında bilgisayar aslında ek karakterler tutuyor olabilir.

Örneğin:

Aynı cümle, tarif edilmiş hali

Gördüğün:

Send the payment to the address below.

Bilgisayarın aldığı:

Send the görünmez payment görünmez … TAGS

Görünen cümle değişmedi.

Temeldeki dizi değişti.

Önemli fikir bu.

Aynı görünüm. Farklı veri.

Özel olarak hazırlanmış örneği bir tarayıcıdan geçirirsen, gözlerin göremese bile tarayıcı bu karakterleri tespit edebilir.

Görünen cümleyi elle yeniden yaz; gizli karakterler onunla birlikte gelmez.

Hilenin tamamı bu.

O harf olmayan harf

Görünmez karakterler tek sorun değil.

Bazen karakter tamamen görünürdür.

Sadece sandığın karakter değildir.

Şu ikisine bak:

Aynı şekil · farklı karakterler

savesavesave

sаvesavesave

ikinci dizi, 2. karakter: Kiril U+0430Latin U+0061 değil

Ayırt etmek neredeyse imkânsız görünüyorlar.

Ama ikincisine dikkatlice bak.

İkinci karakter Latin a harfi değil.

Bu bir Kiril а.

Birbirlerine benziyorlar.

Farklı karakterler.

Bu teknik homoglif saldırısı olarak bilinir.

Aynı fikir kullanıcı adları, alan adları, token adları ve diğer tanımlayıcılarla kullanılabilir.

Sahte bir hesap benzer görünümlü bir karakter kullanabilir.

Sahte bir web sitesi benzer görünümlü bir alan adı kullanabilir.

Bir insana ad tanıdık görünebilir.

Bir bilgisayar için tamamen farklı bir dizidir.

Bu gerçekte nerede sorun yaratabilir?

Bu sadece garip bir Unicode hilesi değil.

Metnin kopyalandığı, karşılaştırıldığı veya ona göre hareket edildiği her yerde önemlidir.

AI asistanları

Bir AI asistanına bir mesaj yapıştırıyorsun.

Bir soru görüyorsun.

Temeldeki metin senin göremediğin karakterler içerebilir.

Asistan yalnızca görsel görünümü değil gerçek metni işlediği için, bu karakterler girdinin parçası olur.

Bu yüzden güvenilmeyen bir metni işlem yapabilen veya hassas bilgileri işleyen bir sisteme yapıştırmadan önce görünmez karakter kontrolleri yararlı olabilir.

Kullanıcı adları ve hesap adları

İki hesap farklı karakterler içerirken aynı ada sahipmiş gibi görünebilir.

Bu, kimliğe bürünmeyi fark etmeyi çok daha zorlaştırabilir.

Bağlantılar ve alan adları

Bir bağlantı tanıdık harflere benzeyen karakterler içerebilir.

Tanıdığın ad, sandığın tam alan adı olmak zorunda değildir.

Kod

Yön denetim karakterleri ve diğer olağandışı Unicode karakterleri kaynak kodun doğru incelenmesini zorlaştırabilir.

Bir geliştirici işlenmiş metni görür.

Derleyici gerçek karakterleri görür.

Arama ve filtreleme

Bir filtre genellikle dizileri karşılaştırır.

Görünmez bir karakter ekle, dizi değişir.

Bu aramaları, engelleme listelerini, moderasyon sistemlerini ve diğer metin işleme araçlarını etkileyebilir.

Nasıl kontrol edebilirsin?

Unicode uzmanı olman gerekmez.

Birkaç basit kontrol var.

KONTROL 1: Metni tara

Şüpheli metni bir karakter güvenliği tarayıcısına yapıştır.

Yararlı bir tarayıcı sana şunları söylemeli:

Bu sitedeki tarayıcı bunu göstermek için tasarlandı.

Önemli olan, sana gizemli bir yeşil veya kırmızı ışık vermek yerine gerçekte ne bulduğunu söylemesidir.

KONTROL 2: Karakter sayısını karşılaştır

Bu hızlı bir mantık kontrolüdür.

Bir cümle 38 karakter içeriyor gibi görünüyor ama bir karakter sayacı 47 gösteriyorsa, araştırmaya değer bir farkın var.

Bir karakter sayısı fazladan karakterlerin ne olduğunu söylemez.

Ama orada görmediğin bir şey olduğunu söyleyebilir.

KONTROL 3: Uygun olduğunda metni yeniden yaz

Biri sana kısa bir talimat gönderirse ve orijinal biçimlendirmeyi korumana gerek yoksa, önemli kısmı elle yazmak kopyalanan metindeki görünmez karakterleri kaldırabilir.

Ama unutma:

Yeniden yazmak hedefi güvenilir yapmaz.

Örneğin biri sana şüpheli bir web adresi gönderirse, onu elle yazmak web sitesinin kendisinin meşru olduğunu kanıtlamaz.

Bu yalnızca kopyaladığın metindeki gizli karakterlerden kaçınmanın bir yoludur.

KONTROL 4: Gerçek alan adını oku

Yalnızca bir alan adının nasıl göründüğünü tanımaya güvenme.

Bir bağlantı önemliyse, gerçek alan adını kontrol et.

Önemli hesaplar için beklenmedik bir bağlantıyı takip etmek yerine daha önce kaydettiğin bir yer imini kullan veya bilinen adresi kendin yaz.

Aynı ilke kullanıcı adları ve cüzdan adresleri için de geçerli:

şekli tanımak karakterleri doğrulamakla aynı şey değildir.

Görünmez bir karakter bulduğunda panik yapma

Bu önemli.

Görünmez otomatik olarak kötü amaçlı demek değildir.

Bazı görünmez Unicode karakterleri insanlar gerçekten onlara ihtiyaç duyduğu için var.

Örneğin sıfır genişlikli birleştiriciler çeşitli yazı sistemlerinde karakterlerin nasıl bağlandığını etkileyebilir.

Emoji dizilerinde de kullanılırlar.

Yön denetim karakterleri, soldan sağa ve sağdan sola yazıları karıştıran metni doğru göstermek için gereklidir.

Yani görünmez bir karakter bulmak otomatik olarak şu anlama gelmez:

"Bu bir saldırı."

Şu anlama gelir:

Burada göremediğim bir şey var.

Bunun ne anlama geldiği bağlama bağlıdır.

Metni kim gönderdi?

Metin senden ne yapmanı istiyor?

Onu nereye yapıştırmak üzeresin?

Bir AI asistanına, bir cüzdana, bir web sitesine, bir terminale veya ona göre hareket edecek başka bir sisteme mi gidiyor?

Bu sorular önemli.

Tags bloğu ekstra dikkati hak ediyor

Tags karakterleri alışılmadıktır, çünkü amaçları normal metin görüntülemede görünmez kalırken bilgi temsil etmektir.

Bir yabancı sana bunlardan oluşan beklenmedik bir dizi içeren bir mesaj gönderirse, araştırmaya değer.

Bir tarayıcı karakterlerin var olduğunu ortaya çıkarabilir ve uygun olduğunda temsil ettikleri metni çözebilir.

Ama o zaman bile tespit sana göndericinin niyetini söylemez.

Metinde ne olduğunu söyler.

Bu çok daha yararlı ve savunulabilir bir yanıttır.

Temiz bir taramanın söyledikleri ve söylemedikleri

Bu, güvenlik araçlarının dürüst olması gereken başka bir yer.

Bir tarayıcı karakterleri tespit eder.

İnsanların aklını okumaz.

Tarayıcı görünmez karakterler bulursa, ne olduklarını sana söyleyebilir.

Onları kimin eklediğini söyleyemez.

Neden eklendiklerini kanıtlayamaz.

Ve hiçbir şey bulamazsa, bu mesajın kendisinin güvenilir olduğu anlamına gelmez.

Tamamen normal görünen bir cümle yine de bir yalan, kötü amaçlı bir bağlantı veya tehlikeli bir talimat içerebilir.

Aynı şekilde, görünmez bir karakter içeren bir mesaj tamamen zararsız olabilir.

Otomatik homoglif tespitinin de sınırları vardır. Bir tarayıcı bilinen benzer görünümlü karakterleri ve bilinen karakter setlerini kontrol edebilir, ama hiçbir tek kontrol her olası görsel aldatmacanın bulunduğunun garantisi sayılmamalıdır.

Sonuç neyin tespit edildiğini söyler.

Metnin ne anlama geldiğine ve kaynağına güvenip güvenmediğine yine sen karar vermelisin.

Edinmeye değer basit alışkanlık

Kopyalayıp yapıştırmaktan korkmana gerek yok.

Sadece kopyaladığın metin bir şeyin olmasını sağlamak üzereyken yavaşla.

Bir AI asistanı.

Bir cüzdan.

Bir web sitesi.

Bir komut satırı.

Bir hesap.

Bir finansal işlem.

Bir kod parçası.

Metni kendin yazmadıysan, içindeki her şeyi bilmiyor olabilirsin.

Ve tahmin etmek zorunda değilsin.

Karakterlerin harekete geçmesine izin vermeden önce onları kontrol et.

Saniyeler sürer.

Ve çoğu durumda kontrol ücretsizdir.


Bu makale yalnızca eğitim amaçlıdır. Görünmez Unicode karakterlerinin, metin yönü denetimlerinin ve benzer görünümlü karakterlerin dijital metni nasıl etkileyebileceğini açıklar. Bu sayfadaki örnek, mekanizmayı kendin inceleyebilmen için kasıtlı olarak eklenmiş görünmez karakterler içerir. Gizli metin zararsızdır ve yalnızca gösterim amacıyla vardır.

Görünmez karakterler kopyala-yapıştırdan sağ çıkar, bu yüzden tarayıcı onları her iki şekilde de görür. Yapıştırmayı atlamak için seçili metni tarama yer imini kullan.