Web Security
Web
Security
Keamanan
Server WWW
-
Arsitektur sistem Web
terdiri dari dua sisi: server dan client.
-
Web server adalah suatu
daemon yang berfungsi menerima request melalui protocol http baik dari local maupun
dari internet. Cth: xampp, apache2triad dll.
-
Informasi yang
direquest oleh browser bisa berupa file yang ada dalam storage atau meminta server untuk melakukan fungsi
tertentu. Cth browser: internet explorer, mozilla, opera, chrome dll.
Jenis-jenis
web server:
IIS
(web server untuk html dan asp). Bisa jalan di OS Windows APACHE web server (web
server untuk html, php, asp, jsp, dan sebagainya). Bisa jalan di OS Windows dan
LINUX
Mengaktifkan service apache
Start – run – ketik: services
lalu enter – pilih service(local) Atau
9 Celah Keamanan Pada Aplikasi
Web
1.
Unvalidated
Input
Semua
aplikasi web menampilkan data dari HTTP request yang dibuat oleh user dan
menggunakan data tersebut untuk melakukan operasinya. Hacker dapat memanipulasi
bagian-bagian pada request (query string, cookie information, header) untuk
membypass mekanisme keamanan.
Berikut
ini tiga jenis penyerangan yang berhubungan dengan masalah ini:
- Cross
site scripting
- Buffer
overflows
- Injection flaws
-
Tidak
baik pada aplikasi web untuk percaya pada client side scripting. Script
tersebut biasanya menghentikan form submission apabila terdapat sebuah input
yang salah. Akan tetapi, script tersebut tidak dapat mencegah hacker untuk
membuat HTTP requestnya sendiri yang terbebas dari form. Menggunakan client
side validation masih bisa membuat aplikasi web yang mudah diserang.
-
Beberapa
aplikasi menggunakan pendekatan "negative“ (negative approach) pada
validasinya: Aplikasi mencoba mendeteksi jika terdapat elemen yang berbahaya
pada request parameter. Masalah dari jenis pendekatan ini adalah hanya bisa
melindungi dari beberapa serangan yaitu: hanya serangan yang dikenali oleh
validation code yang dicegah.
-
Cara
yang lebih baik untuk menggunakan pendekatan "positive" (positive
approach) yaitu: membatasi sebuah format atau pola untuk nilai yang diijinkan
dan memastikan input tersebut sesuai dengan format tersebut.
2.
Broken Access Control
Banyak aplikasi yang terdapat user
role dan admin role: hanya admin role yang diijinkan untuk mengakses halaman
khusus atau melakukan action administration. Masalahnya adalah beberapa
aplikasi tidak efektif untuk memaksa agar otorisasi ini bekerja.
Masalah lain yang berhubungan
dengan access control adalah:
-
Insecure Ids – Beberapa
site menggunakan id atau kunci yang menunjuk kepada user atau fungsi.
-
File permissions –
Kebanyakan web dan aplikasi server percaya kepada external file yang menyimpan
daftar dari user yang terotorisasi dan resources mana saja yang dapat dan/atau
tidak dapat diakses.
-
Langkah-langkah untuk
mengatasinya adalah dengan mengembangkan filter atau komponen yang dapat
dijalankan pada sensitive resources. Filter atau komponen tadi dapat menjamin
hanya user yang terotorisasi dapat mengakases. Untuk melindungi dari insecure
Ids, kita harus mengembangkan aplikasi kita agar tidak percaya pada kerahasiaan
dari Ids yang dapat memberi access control. Pada masalah file permission,
file-file tersebut harus berada pada lokasi yang tidak dapat diakses oleh web
browser dan hanya role tertentu saja yang dapat mengaksesnya.
3. Broken Authentication dan
Session Management
Authentication
dan session management menunjuk kepada semua aspek dari pengaturan user
authentikasi dan management of active session. Berikut ini beberapa hal yang
perlu diperhatikan:
= Password
strength – Aplikasi kita harus memberikan level minimal dari keamanan sebuah
password, dimana dapat dilihat dengan cara melihat panjang dari password dan
kompleksitasnya.
= Password
use – Aplikasi kita harus membatasi user yang mengakses aplikasi melakukan
login kembali ke sistem pada tenggang waktu tertentu.
= Password
storage – password tidak boleh disimpan di dalam aplikasi. Password harus disimpan
dalam format terenkripsi dan disimpan di file lain seperti file database atau
file password.
-
Issue
lain yang berhubungan : password tidak boleh dalam bentuk hardcoded di dalam
source code.
-
Session
ID Protection – server biasanya menggunakan session Id untuk mengidentifikasi
user yang masuk ke dalam session.
-
Salah
satu cara yang dapat digunakan untuk mencegah terlihatnya session ID oleh
seseorang pada suatu jaringan yang sama adalah menghubungkan komunikasi antara
sever dan client pada sebuah SSL-protected channel.
4. Cross Site Scripting
Cross site scripting
terjadi ketika seseorang membuat aplikasi web melalui script ke user lain. Hal
ini dilakukan oleh penyerang dengan menambahkan content (seperti JavaScript,
ActiveX, Flash) pada request yang dapat membuat HTML output yang dapat dilihat oleh
user lain. Apabila ada user lain yang mengakses content tersebut, browser tidak
mengetahui bahwa halaman tersebut tidak dapat dipercaya.
Cara
yang bisa digunakan untuk mencegah serangan cross site scripting adalah dengan
melakukan validasi data masuk dari user request (seperti header, cookie, user
parameter,...).
5. Buffer Overflows
Penyerang dapat
menggunakan buffer overflows untuk merusak aplikasi web. Penyerang mengirimkan
request yang membuat server menjalankan kode-kode yang dikirimkan oleh
penyerang.
Tetapi pada desain dari
Java environment, aplikasi yang berjalan pada J2EE server aman dari jenis
serangan ini.
Untuk
memastikan keamanan, cara yang paling baik adalah melakukan pengawasan apabila
terdapat patch atau bug report dari produk server yang digunakan.
6.
Injection
Flaws
Hacker
dapat mengirimkan atau menginject request ke operating system atau ke external
sumber seperti database. Berikut ini salah satu contoh dari SQL injection:
masukkan salah satu keyword di google untuk mendapatkan halaman login.Cth.:
“/admin.asp" , "/login.asp" dll. Kalau sudah dapat isikan di
username “or”=“ di password “or”=“ lalu klik login kalau sukses akan masuk.
Sintak di web:
Select * from admin where username = ‘administrator’ and Password = ‘admin’
Maka inputkan: ”or ‘’ = “ Didapatkan: Select * from admin where username = ‘’
or ‘’ = ‘’ and Password = ‘’ or ‘’=’’ Perintah: “or “=“ menjadikan kondisi
query menjadi true.
Untuk mencegah inputan diatas maka
di skrip php pada variabel penampung data post ditambahkan
mysql_real_escape_string() utk validasi input: $username
=mysql_real_escape_string($_POST['username']); $password =
mysql_real_escape_string($_POST['password']); Untuk pengguna php.
7.
Insecure Storage
Aplikasi web
biasanya menyimpan informasi penting yang perlu dienkripsi untuk menghindari
pengaksesan secara langsung. Tetapi beberapa metode enkripsi masih lemah dan
bisa diserang. Berikut ini beberapa kesalahan yang terjadi:
a.
Kesalahan untuk
mengenkripsi data penting
b.
Tidak amannya kunci,
certificate, dan password
c.
Kurang amannya lokasi
penyimpanan data
d.
Kurangnya perhitungan
dari randomisasi
e.
Kesalahan pemilihan
algoritma
f.
Mencoba untuk
menciptakan algoritma enkripsi yang baru
Salah satu cara
yang dilakukan untuk menghindari kesalahan penyimpanan informasi yang sensitif
adalah : tidak membuat password sebagai atribut dari kelas yang mewakili
informasi user; Daripada mengenkripsi nomor kartu kredit dari user, akan lebih
baik untuk menanyakannya setiap kali dibutuhkan.
8. Denial
of Service
Denial of
Service merupakan serangan yang dibuat oleh hacker yang mengirimkan request
dalam jumlah yang sangat besar dan dalam waktu yang bersamaan. Dikarenakan
request-request tersebut, server menjadi kelebihan beban dan tidak bisa
melayani user lainnya.
Serangan DoS
mampu menghabiskan bandwidth yang ada pada server. Selain itu dapat juga
menghabiskan memory, koneksi database, dan sumber yang lain.
Cara yang dapat
dilakukan seperti membatasi resource yang dapat diakses user dalam jumlah yang
minimal. Merupakan ide / cara yang bagus untuk membuat load quota yang
membatasi jumlah load data yang akan diakses user dari sistem.
Solusi yang lain
adalah mendesain aplikasi web dimana user yang belum terotorisasi hanya memiliki
akses yang sedikit atau tidak memiliki akses ke content web yang berhubungan
dengan database.
9. Insecure
Configuration Management
Biasanya
kelompok (group) yang mengembangkan aplikasi berbeda dengan kelompok yang
mengatur hosting dari aplikasi. Hal ini bisa menjadi berbahaya, dikarenakan
keamanan yang diandalkan hanya dari segi aplikasi: sedangakan dari segi server
juga memiliki aspek keamanan yang perlu diperhatikan. Adanya kesalahan dari
konfigurasi server dapat melewati aspek keamanan dari segi aplikasi.
Untuk memeriksa
keamanan website kita bisa gunakan situs http://sucuri.net, langsung ketikan nama websitenya di what’s your domain?
Lalu Klik scan this site
Berikut ini
adalah kesalahan konfigurasi server yang bisa menimbulkan masalah:
a.
Hak akses direktori
atau file yang salah.
b.
Adanya service yang
seperti remote administration dan content management yang masih aktif.
c.
Penggunaan default
account dan default password.
d.
Fungsi administrative
atau fungsi debug yang bisa diakses. Adanya pesan error yang
informatif dari segi teknis.
informatif dari segi teknis.
e.
Kesalahan konfigurasi
SSL certificate dan setting enkripsi
f.
Penggunaan self-signet
certificates untuk melakukan autentikasi.
Keamanan Client WWW
Keamanan client WWW, yaitu disisi
pemakai (pengunjung) biasa diantaranya:
a.
Pelanggaran privacy
Ketika
kita mengunjungi sebuah situs web, browser kita dapat “dititipi” sebuah
“cookie” yang fungsinya adalah untuk menandai kita. Ketika kita berkunjung ke
server itu kembali, maka server dapat mengetahui bahwa kita kembali dan server
dapat memberikan setup sesuai dengan keinginan (preference) kita. Ini merupakan
servis yang baik. Namun data-data yang sama juga dapat digunakan untuk
melakukan tracking kemana saja kita pergi.
b.
Penyisipan virus atau
trojan horse(menyisipkan kode/skrip program ke sebuah browser/aplikasi)
Salah
satu contoh yang sudah terjadi adalah adanya web yang menyisipkan trojan horse
Back Orifice (BO) atau Netbus sehingga komputer anda dapat dikendalikan dari
jarak jauh. Orang dari jarak jauh dapat menyadap apa yang anda ketikkan,
melihat isi direktori, melakukan reboot, bahkan memformat harddisk
SSL (Secure Socket
Layer)
Protokol tcp/ip Terdiri dari 4
lapisan
a.
Link (Lapisan OSI 1 dan
2)
b.
Internetwork (Lapisan
OSI 3)
c.
Transport (Lapisan OSI
4 dan 5)
d.
Application (Lapisan
OSI 5 sampai 7)
SSL
(ada dilapisan/layer 7) telah menjadi standar de facto pada komunitas untuk
mengamankan komunikasi antara client dan server. SSL adalah sebuah layer
protocol yang berada antara layer TCP/IP standar dengan protocol di atasnya
yaitu application-level protocol seperti HTTP. SSL mengijinkan server untuk
melakukan autentikasi dengan client dan selanjutnya mengenkripsi komunikasi.
Certificate
Salah
satu bagian yang perlu kita konfigurasi untuk membangun komunikasi SSL pada
server adalah sebuah security certificate. Sebuah certificate dalam hal ini
seperti sebuah pasport : dimana memiliki informasi-informasi penting pemilik
yang bisa diketahui oleh orang lain. Sertifikat tersebut biasanya disebarkan
oleh Certification Authorities (CA). Sebuah CA mirip seperti passport office :
dimana CA bertugas untuk melakukan validasi sertifikat pemilik dan menandai
sertifikat agar tidak dapat dipalsukan.
Sampai
saat ini sudah banyak Certification Authorities yang cukup terkenal, salah
satunya adalah Verisign. Menentukan pemilihan CA adalah tanggung jawab atau
wewenang dari seorang admin untuk memberikan sebuah sertifikat keamanan yang
berlaku pada server.