Apa itu Kebingungan JavaScript dan mengapa itu ancaman?

Jawaban:

38

Kebingungan adalah cara "mengaburkan" arti sebenarnya dan maksud dari kode javascript Anda. Beberapa situs menggunakannya sebagai penghalang bagi orang yang ingin menyalin / meminjam kode mereka. Situs lain menggunakannya sebagai sarana untuk menyembunyikan maksud sebenarnya dari kode.

Beberapa bentuk penyembunyian:

  1. Secara otomatis mengubah nama variabel menjadi nama pendek yang tidak berarti untuk membuat kode lebih mudah dibaca dan sulit dipahami.
  2. Menghapus semua spasi ekstra dan jeda baris sehingga kodenya adalah satu garis panjang raksasa.
  3. Membuat bagian-bagian dari kode yang dihasilkan sendiri sehingga kode pertama berjalan untuk membuat kode aktual yang kemudian berjalan untuk melakukan operasi yang dimaksud.
  4. Menggunakan kode karakter dan manipulasi string yang dikombinasikan dengan kode javascript eval daripada normal untuk membangun kode aktual yang akan dijalankan.

Penyembunyian tidak dengan sendirinya jahat, tetapi dapat digunakan untuk mencoba menyembunyikan niat jahat dan itulah yang mungkin menjadi keberatan AVG. Ia mendeteksi banyak hal yang tidak jelas sehingga tidak bisa memastikan apakah javascript berusaha melakukan sesuatu yang ingin dicegah. Karena itu, secara default kode tersebut dinyatakan tidak aman karena tidak dapat memverifikasi bahwa kode itu tampak OK.

pacar00
sumber
Itulah yang saya pikirkan tetapi ingin memverifikasi. Terimakasih atas klarifikasinya.
L84
JIKA AVG memblokir akses ke situs web terkenal dan bereputasi baik, Anda mungkin dapat menimpanya. Saya tidak akan menyarankan bahwa jika Anda tidak tahu rep situs.
uSlackr
4
Beberapa situs menggunakan kompresi js sehingga memuat lebih cepat (well amost everyone), kode akan terlihat dikaburkan.
jcubic
9
1dan 2juga dilakukan oleh kompresor javascript. Kompresor mengaburkan kode sebagai efek samping, tetapi itu bukan tujuan utama mereka; tujuan utamanya adalah untuk membuat javascript lebih kecil, untuk mengurangi bandwidth.
BlueRaja - Danny Pflughoeft
5. Ini juga digunakan untuk mengkompres file JS untuk mengunduh lebih cepat. Yahoo melakukannya sejak mereka berada di web, dan alat Google untuk membuat aplikasi web juga melakukannya (seperti GMail dan Kalender).
Chloe
13

Kebingungan mengacu pada menyembunyikan makna yang dimaksudkan dari sesuatu.

Dalam hal ini, cuplikan JavaScript yang dapat dibaca dengan jelas, seperti

window.onload = function() { alert("Hello " + username) };

dapat diganti oleh

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

atau bahkan

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

Ketiga potongan kode melakukan hal yang sama persis, tetapi hanya membaca yang pertama akan memungkinkan Anda untuk memahami niatnya dengan mudah.

Rupanya, AVG berupaya memahami tujuan kode JavaScript sebelum mengizinkan eksekusi. Ketika kode tersebut dikaburkan, AVG mungkin akan gagal. Karena itu peringatan.

Yang sedang berkata, beberapa situs web mengaburkan JavaScript mereka bukan karena niat jahat, tetapi untuk membuatnya sulit untuk mencuri pekerjaan mereka. Kebingungan biasanya tidak berguna jika digunakan untuk tujuan ini, tetapi intinya adalah bahwa kebingungan tidak selalu berarti niat buruk.

Dennis
sumber
3
Meskipun seperti yang sering saya temukan, kode deobfusticating sering menunjukkan kepada saya bahwa menyembunyikan kode javascript tidak layak mencuri. Ini pertanda bahwa programmer menghabiskan lebih banyak waktu untuk mengkhawatirkan pencurian daripada teknik pemrograman yang tepat dan bahkan tidak dapat memperbaiki kesalahan sehingga mudah retak. Satu-satunya orang yang membuat waktu membuat kode sangat sulit untuk dikosongkan adalah pemrogram malware, itulah sebabnya AVG menandainya sebagai alasan yang sangat baik untuk menghindari situs.
Fiasco Labs
2
AVG adalah mesin, bukan manusia. Jelas, sebuah mesin dapat memahami kode tersebut, yang merupakan cara kode melakukan hal yang sama. Selain itu, orang biasanya tidak melihat Javascript saat berselancar. Ini hanyalah kasus "rasa bersalah karena asosiasi". Beberapa Javascript yang berbahaya menggunakan pola kebingungan tertentu. Karena itu, Javascript lain dengan pola yang sama mencurigakan.
Kaz
@ Ka: Itu hanya contoh, tetapi ada metode kebingungan yang lebih canggih yang membutuhkan mesin JavaScript untuk dipahami. Pemindai malware biasanya mencari pola tertentu alih-alih mengeksekusi skrip, untuk alasan kinerja.
Dennis
secara teori tidak berharga dan secara praktis tidak berharga berbeda - secara teoritis, kode yang membingungkan tidak berguna, disepakati. Tetapi, jika biaya deobfuscating mirip dengan biaya pembuatan kode baru (atau bahkan, biaya menjadi cukup tinggi untuk mencegah pencuri malas), maka kebingungan untuk mencegah pencurian nakal dapat bermanfaat.
Ronald
Tepat, jadi apa yang menjadi masalah adalah tidak kebingungan per se , tetapi kesamaan kode untuk kode berbahaya yang dikenal.
Kaz