Artikel #17

Deteksi Serangan XSS Menggunakan Machine Learning Turicreate

Halo semua,

sekarang kita akan mencoba hal yang sederhana untuk membantu melawan serangan hacker, ceritanya di tulisan kali ini kita akan membuat pemodelan Artificial Intelligent (AI) yang akan mendeteksi adanya serangan Cross-Site Scripting (XSS) dari hacker.

Bagi pemula yang baru mempelajari machine learning saya akan menjelaskan sedikit tahapan dalam machine learning, berikut adalah proses secara umum dalam machine learning:

  1. Data preparation, data menjadi hal paling penting dalam sebuah machine learning, pada tahapan ini adalah menyiapkan data yang akan diproses.
  2. Preprocessing data, disini data akan dilakukan “standarisasi” atau disesuaikan dengan kondisi yang diperlukan, misalkan menghapus data duplikasi, mengubah format ke bentuk numeric, dll.
  3. Training Model, tahapan ini kita membuat sebuah pemodelan dengan menggunakan data yang sudah disiapkan sebelumnya dan algoritma yang dipilih ke dalam model.
  4. Testing, di tahap ini hasil model yang telah dibuat akan dilakukan pengujian untuk melihat nilai akurasi yang diperoleh

Sekarang kita siapkan dahulu datasetnya, untuk dataset dapat didownload disini: XSS dataset.csv, link https://www.kaggle.com/syedsaqlainhussain/cross-site-scripting-xss-dataset-for-deep-learning 

Preview Dataset

Untuk enginenya kali ini saya akan menggunakan Turicreate dari Apple https://github.com/apple/turicreate 

Sebelumnya kita akan cek dahulu informasi yang ada pada dataset ini:

Jika dilihat jumlah ada 13.686 baris namun uniquenya dari Sentence ada 10.917, ini berarti ada beberapa baris yang duplikat, kita buang dahulu yang duplikat agar tidak bias.

Lalu kita akan hapus kolom Unnamed: 0 karena tidak memiliki fungsi apapun dalam kasus ini hanya sebagai nomor urut saja.

Sekarang kita masuk tahap pemodelan, untuk machine learning dapat mengklasifikasikan text tersebut ada banyak cara, salah satunya menggunakan komputasi leksikal untuk ekstraksi fiturnya atau mengekstrak setiap sentence tersebut kedalam beberapa karakteristik. Namun dalam tulisan kali ini saya akan menggunakan komputasi leksikal N-gram. Beruntungnya di Turicreate sudah disiapkan modul N-gram, kita akan bereksperimen menggunakan 1-gram, 2-gram, 3-gram, untuk mengetahui apa itu N-gram kita running dulu code di bawah agar mudah dipahami.

Dengan 1-gram :

'Sentence': 'XSS','ngram1': {'1': 1, 'alert': 1, 'area': 2, 'onpointerout': 1, 'xss': 1}}

Terlihat bahwa kalimat akan dipisah per 1 kata, sekarang kita lihat kalau 2-gram:

{'Label': 1,'Sentence': 'XSS','ngram1': {'1': 1, 'alert': 1, 'area': 2, 'onpointerout': 1, 'xss': 1}, 'ngram2': {'1 xss': 1, 'alert 1': 1, 'area onpointerout': 1, 'onpointerout alert': 1, 'xss area': 1}}

Pada 2-gram terlihat bahwa kalimat akan dipisah per 2 kata, namun jika diperhatikan karakter khusus yang harusnya kita perlukan untuk deteksi XSS malah tidak terambil, untuk itu kita akan memecah menjadi per karakter dengan menambahkan method=’character’


 

Namun sepertinya Turicreate belum dapat menangani error Unicode sehingga kita harus mengubahnya dulu ke dalam bentuk ascii agar lebih mudah dibaca oleh Turicreate.

Lalu kita lakukan lagi N-gramming namun saat ini cukup menggunakan method word karena setiap karakter saat ini sudah menjadi kata (kumpulan angka). 

Sekarang kita akan membuat pemodelan training menggunakan algoritma klasifikasi sederhana yaitu logistic regression, disini saya akan membagi data training 80% dan data testing 20%. 

Langkah selanjutnya adalah melakukan evaluasi dari pemodelan diatas.

Dari ketiga jenis n-gram diperoleh akurasi seperti berikut:

  • 1-gram, akurasi sebesar 97.65%
  • 2-gram, akurasi sebesar 99.81%
  • 3-gram, akurasi sebesar 99.76%

Cukup tinggi akurasinya, mari kita coba bisakah model tersebut mendeteksi beberapa payload XSS yang umum hingga yang advance:

Payload

1-gram

2-gram

3-gram

Teks html biasa

judul

 

False

True

True

 

True

True

False

True

True

True

onmouseover=alert(1) x=”

True

True

True

‘“>