Membedah Homograph Attack: Ketika Huruf Sirilik Menipu Compiler dan User

I am an enthusiastic researcher and developer with a passion for using technology to innovate in business and education.
Sebagai developer, kita sering kali mengasumsikan bahwa apa yang kita lihat di layar adalah apa yang diproses oleh mesin. Namun, dalam dunia keamanan siber, ada celah klasik yang memanfaatkan standar internasionalisasi (i18n) untuk melakukan penipuan: Homograph Attack (atau Punycode Attack).
Apa itu Homograph Attack?
Homograph attack adalah teknik tipuan di mana penyerang menggunakan karakter dari berbagai jenis alfabet (seperti Sirilik atau Yunani) yang secara visual identik dengan karakter Latin (ASCII).
Dalam tabel Unicode, karakter-karakter ini memiliki code point yang berbeda meskipun tampilannya sama di layar (glif yang serupa).
Karakter | Nama Unicode | Code Point |
a | Latin Small Letter A |
|
а | Cyrillic Small Letter A |
|
Bagi mata manusia, keduanya adalah "a". Bagi sistem validasi string atau browser, keduanya adalah entitas yang sangat berbeda.
Punycode: Solusi yang Menjadi Detektor
Sistem DNS (Domain Name System) pada dasarnya hanya mendukung karakter ASCII terbatas. Untuk mendukung karakter internasional (IDN - Internationalized Domain Names), digunakanlah Punycode.
Punycode mengubah string Unicode menjadi format ASCII yang diawali dengan prefix xn--.
Domain Asli:
apple.comDomain Sirilik:
аpple.com(menggunakan 'а' Sirilik)Punycode:
xn--pple-43d.com
Mengapa Developer Harus Peduli?
Sebagai developer, fenomena ini tidak hanya relevan untuk pembuatan website, tetapi juga pada aspek berikut:
Validasi Input: Jika aplikasi kamu mengizinkan registrasi username, penyerang bisa mendaftarkan akun
adminmenggunakan huruf 'i' Sirilik untuk mengelabui user lain.Security Monitoring: Log akses mungkin menampilkan URL yang terlihat normal, padahal traffic diarahkan ke server yang berbeda.
Source Code Injection: Ada kasus di mana karakter homoglyph digunakan dalam kode sumber untuk menyembunyikan logika jahat yang sulit dideteksi saat code review.
Cara Pencegahan (Best Practices)
1. Implementasi IDN Policy di Browser
Untungnya, browser modern secara otomatis akan merender Punycode (xn--) jika sebuah domain mencampur alfabet yang berbeda (misal: Latin bercampur Sirilik) untuk memperingatkan pengguna.
2. Normalisasi String
Gunakan teknik normalisasi Unicode di sisi backend (seperti String.prototype.normalize('NFKC') di JavaScript) sebelum memproses atau menyimpan data user untuk mengurangi variasi karakter yang serupa secara visual.
3. Gunakan Content Security Policy (CSP)
Batasi domain mana saja yang diizinkan untuk memuat skrip atau melakukan koneksi dari aplikasi kamu guna meminimalisir risiko pengalihan ke domain homograph.
Cara Mendeteksi Secara Teknis (Code)
Sebagai developer, kamu bisa mendeteksi apakah sebuah string (misalnya input username atau domain) mengandung karakter non-ASCII (seperti Sirilik) menggunakan regex sederhana.
Contoh dalam JavaScript:
JavaScript
const domain = "pаypal.com"; // Ini mengandung 'а' Sirilik
const isAsciiOnly = (str) => /^[\x00-\x7F]*$/.test(str);
if (!isAsciiOnly(domain)) {
console.log("Peringatan: String mengandung karakter non-ASCII (Potensi Homograph!)");
} else {
console.log("String aman (Hanya karakter Latin standar)");
}
Kesimpulan
Keamanan bukan hanya soal enkripsi yang kuat, tapi juga pemahaman tentang bagaimana standar global seperti Unicode berinteraksi dengan infrastruktur internet yang sudah tua. Sebagai developer, kewaspadaan terhadap detail sekecil satu code point bisa mencegah celah phishing yang fatal.
Ingat: Jangan pernah percaya sepenuhnya pada apa yang terlihat di bilah alamat tanpa melakukan verifikasi pada level data mentah.




