Keamanan Sistem Informasi Buatlah sebuah paper tentang

UJIAN AKHIR SEMESTER GANJIL 2017/2018
Nama

: Azka Adzhani Luthfan

NPM

: TI1401013

Mata kuliah

: Keamanan Sistem Informasi

Kode/Nama Dosen

: ESN/Elia Setiana, S.Kom,. MT

Prodi

: Teknik Perangkat Lunak


Soal !
Buatlah sebuah paper tentang Keamanan Web (masukan 2 dari 10 OWASP) !

Keamanan Web atau Web Security adalah keamanan untuk sebuah web atau tata cara
mengamankan aplikasi web yang di kelola, biasa nya yang bertanggung jawab melakukan nya
adalah pengelola aplikasi web tersebut. Berbicara mengenai masalah yang berkaitan dengan
keamanan di dalam era digital tidak lepas dari 3 prinsip utama yaitu : Confidentiality, Integrity,
dan Availability atau lebih dikenal dengan nama CIA. Sama halnya ketika bergelut dengan
keamanan (security) sebuah website, princip CIA sudah selayaknya dijadikan pedoman yang
harus dipahami apabila ingin website kita lebih aman dan sulit untuk diserang.

Buffer Overflows

-

Pengertian Buffer Overflows
Buffer adalah area penyimpanan data yang mempunyai kapasitas/ukuran
tertentu. Buffer Overflows terjadi jika suatu program berusaha menyimpan data ke
buffer dimana ukuran data lebih besar dari ukuran buffer. Buffer Overflows terjadi
karena programmer menulis kode tanpa mengecek ukuran dari buffer yang dituju untuk

mengetahui apakah cukup untuk menerima data baru.
Saat jumlah data melebihi ukuran buffer, kelebihan data dapat melimpah ke
lokasi memory terdekat, merusak data dan bisa merubah path dan perintah eksekusi.
Diantara informasi yang rusak, mungkin terdapat informasi yang berisi subroutine
dari suatu program, sehingga program tidak dapat menemukan subroutine dan tidak
dapat menyelesaikan programnya.
Kemampuan eksploitasi Buffer Overflows memungkinkan seseorang untuk
memasukkan kode sembarang ke path eksekusi. Kode ini memungkinkan akses jarak
jauh yang terlarang. Seorang hacker bisa mengirimkan data yang lebih besar dari
ukuran buffer dan berisi kode yang dirancang untuk melakukan aksi tertentu, untuk
merusak atau mengubah data dan membuka informasi rahasia.

-

Proses Terjadinya Buffer Overflows
Dalam program yang menggunakan bahasa C, buffer dialokasikan dengan array
atau pointer. C atau C++ tidak mempunyai pengecekan otomatis (automatic bounds
checking) batasan suatu buffer, sehingga pengguna dapat menulis kode untuk
memberikan data melebihi ukuran buffer.. Sebagai contoh:


int main() {
int buffer[10];
buffer[20] = 10;
}

Program diatas adalah program yang valid dan compiler dapat meng-compile
tanpa error. Tetapi program tersebut berusaha untuk memberikan data melebihi alokasi
memory untuk buffer. Hal ini dapat mengakibatkan kejadian yang tidak diinginkan.
Konsep ini digunakan para hacker untuk mengacau industri komputer.
Program yang dapat dieksekusi berisi sekumpulan instruksi biner yang harus
dieksekusi oleh processor. Instruksi ini dapat berupa read-only data, (seperti print format
strings), data global dan data statis yang tetap ada selama proses eksekusi, dan break
pointer yang selalu mengikuti malloced memory. Function local variable adalah variabel
otomatis yang ada di stack selama suatu fungsi bekerja dan dibuang setelah fungsi
selesai bekerja.
Gambar dibawah ini memperlihatkan memory layout dari suatu proses di Linux.
Proses dimulai dengan kode program dan data. Kode dan data berisi intruksi program
serta data global dan data static yang terinisialisasi maupun yang tidak. Setelah itu
adalah run-time heap (dibuat dengan malloc/calloc), dan paling di atas adalah user stack.
Stack digunakan jika ada function call.


Stack adalah blok memory yang berisi data. Stack Pointer (SP) menunjukkan
puncak dari stack. Jika ada function call, parameter fungsi dimasukkan ke stack dari
kanan ke kiri. Kemudian return address (alamat yang dieksekusi setelah fungsi selesai)
dan frame pointer (FP) juga dimasukkan ke stack. Frame point (FP) digunakan sebagai
referensi dari local variable dan parameter fungsi, karena keduanya berada pada jarak
yang konstan dari frame point (FP). Local automatic variabel dimasukkan ke stack
setelah fram point (FP). Dalam implementasinya, stack terpenuhi dari alamat memory
yang besar ke yang kecil.

.
Ilustrasi di atas adalah bagian-bagian dari stack ketika sebuah fungsi dieksekusi.
Perhatikan FP berada di antar local dan return addresses. Sebuah contoh dalam bahasa
C berikut :

void function (int a, int b, int c) {
char buffer1[5];
char buffer2[10];
}
int main() {

function(1,2,3);
}

Function stack seperti dibawah ini :

Gambar di atas menunjukkan bahwa buffer1 berisi 8 bytes dan buffer2 berisi 12 bytes.
Sedangkan memory hanya dapat digunakan untuk beberapa word size (4 byte). Sebagai
tambahan, FP diperlukan untuk mengkases a, b, c, buffer1, dan buffer2. Semua variabel
ini akan dibuang dari stack jika fungsi selesai bekerja.

-

Serangan Buffer Overfllow
Pada serangan BO, penyusup akan membuat buffer menjadi overflow dengan
script yang ditulis sedemikian rupa sehingga program melakukan apa yang diinginkan
oleh penyusup, bukan apa yang diinginkan pemrogram. Akibatnya, penyusup menjadi
pemrogram karena instruksinya yang dieksekusi. Penyusup sering memprogram ulang
suatu aplikasi untuk membuat program lain bekerja. Sebagai contoh pemrogram dapat
memulai program baru yang dapat mengirimkan data rahasia seperti rekening bank,
password, atau surat rahasia melalui email.

Tujuan dari serangan BO adalah untuk melemahkan fungsi dari suatu program
sehingga penyusup dapat mengambil alih kendali pada program tersebut. Tujuan

selanjutnya adalah mengendalikan host dari jarak jauh. Untuk mencapai hal tersebut,
penyusup harus dapat mengatur kode yang sesuai supaya tersedia di alamat program dan
membuat program untuk jump ke kode tersebut, dengan parameter yang dimasukkan ke
dalam register dan memory.
Serangan BO yang paling sederhana adalah stack smashing, yaitu memberi data
baru pada stack suatu buffer untuk mengganti return address. Saat suatu fungsi selesai,
control akan melompat (jump) ke alamat yang ditulis di stack oleh penyusup, sehingga
penyusup akan mempunyai kemampuan untuk mengeksekusi kode yang diinginkan.

-

Solusi Untuk Mencegah Buffer Overflow
Tidak ada satupun metode yang dijelaskan di bawah yang benar-benar bisa
mencegah kemungkinan serangan, namanya juga manusia tempatnya salah dan lupa.
Tetapi metode di bawah ini, dapat meminimalisir dari kegiatan buffer overflows yang
mengakibatkan kerusakan stack.
1. Menulis kode yang aman : Buffer overflow adalah hasil dari input yang berlebihan

ke dalam buffer. C library seperti strcpy(), strcat(), sprintf() dan vsprintf() beroperasi
pada null terminated strings dan tidak mengecek batasan input. gets() juga
fungsi lainnya yang memasukkan input ke dalam buffer dari stdin. Pada scanf() juga
bisa mengakibatkan buffer overflows.
2. Stack execute invalidation : Karena koding jahat (contoh, instruksi assembly untuk
mengambil alih root shell) merupakan input argument ke dalam program, ini
tersimpan ke dalam stack dan bukan dalam code segment. Oleh karena itu, solusi
mudahnya adalah tidak mempebolehkan stack mengeksekusi instruksi apapun. Kode
apapun yang dieksekusi dengan kode lainnya di dalam stack dapat mengakibatkan
segmentation violation.

3. Compiler tools : Beberapa tahun terakhir, compiler mempunyai kemampuan lebih.
Beberapa compiler dilengkapi peringatan dalam penggunakan konstruk yang tidak
aman seperti gets(), strcpy() dan sejenisnya, sebagai contoh :
int main () {
char *str = (char *)malloc(10);// mengalokasikan 10 bytes untuk str
gets (str); // membaca input dari stdin dan disimpan ke str
}
setelah di kompile, makan muncul warning:
/tmp/cc203ViF.o: In function “main”:

/tmp/cc203ViF.o(.text+0x1f): the “gets” function is dangerous and should not
be used.
Modern compilers tool mempunyai fitur untuk bounds checking, jadi meng-generate
kode yang built-in tanpa mengubah struktur kode yang dapat menghindarkan
penggunaan ilegal addressess. Kode apapun yang dicoba untuk mengakses illegal
address tidak diperbolehkan untuk dieksekusi.

Insecure Storage
Aplikasi web biasanya perlu menyimpan informasi yang sensitif seperti password,
informasi kartu kredit, dan yang lain. Dikarenakan item-item tersebut bersifat sensitif itemitem tersebut perlu dienkripsi untuk menghindari pengaksesan secara langsung. Akan tetapi
beberapa metode enkripsi yang lemah dan masih bisa diserang.
Berikut ini beberapa kesalahan yang sering terjadi :
a)

Kesalahan untuk mengenkripsi data penting.

b)

Tidak amannya kunci, certificate, dan password


c)

Kurang amannya tempat penyimpanan data

d)

Kurangnya perhitungan dari rekomendasi

e)

Kesalahan pemilihan algoritma

f)

Mencoba untuk menciptakan algoritma enkripsi yang baru.

Berdasarkan skenario diatas, terdapat sebuah aplikasi dimana terdapat password pada user
object. Akan tetapi, aplikasi menyimpan user objek ke dalam session setelah user login.
Permasalahan yang akan muncul pada skenario ini adalah password dapat dilihat oleh
seseorang yang dapat melihat session user tersebut.

-

Lingkungan yang terkena dampak serangan
Sebagian besar lingkungan aplikasi web mencakup beberapa bentuk dukungan
kriptografi. Dalam kasus yang jarang terjadi, dukungan semacam itu belum tersedia,
ada beragam produk pihak ketiga yang dapat ditambahkan. Hanya situs web yang
menggunakan enkripsi untuk melindungi informasi dalam penyimpanan atau transit
yang rentan terhadap serangan tersebut. Perhatikan bahwa bagian ini tidak mencakup
penggunaan SSL, yang tercakup dalam Insecure Configuration Management. Bagian
ini hanya membahas enkripsi program dari data lapisan aplikasi.

-

Pendekatan
Menemukan kekurangan kriptografi tanpa akses ke kode sumber bisa sangat
memakan waktu. Namun, mungkin untuk memeriksa token, ID sesi, cookies dan
kredensial lainnya untuk melihat apakah mereka jelas tidak acak. Semua pendekatan
kriptanalisis tradisional dapat digunakan untuk mencoba menemukan bagaimana
sebuah situs web menggunakan fungsi kriptografi.
Sejauh ini pendekatan yang paling mudah adalah meninjau ulang kode untuk

melihat bagaimana fungsi kriptografi diimplementasikan. Pemeriksaan struktur,
kualitas, dan penerapan modul kriptografi harus dilakukan dengan hati-hati. Peninjau
harus memiliki latar belakang yang kuat dalam penggunaan kriptografi dan kelemahan
umum. Peninjauan juga harus mencakup bagaimana kunci, kata kunci, dan rahasia
lainnya disimpan, dilindungi, dimuat, diproses, dan dihapus dari memori.

-

Solusi
Cara termudah untuk melindungi dari kekurangan kriptografi adalah
meminimalkan penggunaan enkripsi dan hanya menyimpan informasi yang benarbenar diperlukan. Misalnya, alih-alih mengenkripsi nomor kartu kredit dan
menyimpannya, cukup meminta pengguna memasukkan kembali nomor-nomornya.
Selain itu, alih-alih menyimpan kata sandi terenkripsi, gunakan fungsi hash satu arah
baru-baru ini (seperti SHA-256) untuk hash kata kunci.
Jika kriptografi harus digunakan, pilihlah perpustakaan yang telah terpapar
pengawasan publik dan pastikan tidak ada kerentanan terbuka. Enkapsulasi fungsi
kriptografi yang digunakan dan mengkaji ulang kode dengan saksama. Pastikan rahasia,
seperti kunci, sertifikat, dan kata sandi, disimpan dengan aman. Untuk menyulitkan
penyerang, rahasia utama harus dibagi menjadi setidaknya dua lokasi dan dirakit saat

runtime. Lokasi seperti itu mungkin termasuk file konfigurasi, server eksternal, atau
kode itu sendiri.
-

Kesimpulan
Keamanan Web memang tidak selalu aman, pasti ada celah yang dapat
dibobol/diretas oleh para hacker. Bahkan dalam media penyimpanan (storage)
sekalipun. 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.
Selain itu, menggunakan algoritma enkripsi yang sudah ada akan lebih baik
daripada membuat algoritma sendiri. Anda cukup memastikan algoritma yang akan
digunakan telah diakui oleh public dan benar-benar dapat dilaksanakan.

Daftar Pustaka
https://www.owasp.org/index.php/Buffer_Overflow/
https://www.usd.ac.id/lembaga/lppm/f1l3/.../02-Damaredited3.pdf
https://logsmylife.wordpress.com/2009/03/31/konsep-buffer-overflow-vurnabilities-danpencegahannya/
https://blog.estuwebdesign.com/2015/11/pengertian-web-security/

https://www.owasp.org/index.php/OWASP_Guide_Project/
https://www.owasp.org/index.php/Insecure_Storage/