· web viewakibatnya suatu variable apa saja yang kita definisikan dapat dengan mudah kita isi...

33
Keamanan Pada Aplikasi Web dengan PHP Implementasi Metode MD5 Kriptography Pada Aplikasi Web Nama : Anda Maramiz NIM : 59061002005

Upload: vantram

Post on 19-Mar-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Keamanan Pada Aplikasi Web dengan PHP

Implementasi Metode MD5 Kriptography Pada Aplikasi Web

Nama : Anda Maramiz

NIM : 59061002005

Fakultas Ilmu Komputer

Universitas Sriwijaya

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

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.

Landasan Teori

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”); ?>

3. <script language="php"> echo ("bla….bla….bla.."); </script>

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++.

3. Menghentikan Looping

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

Function nama_sub-rurin (argument atau parameter)

{ 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

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.

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.

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

32

6

7

10

911

5

4

8

x1 x1 ‘ x1 ‘ x1

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.

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.

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.

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();

?>

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.

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

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.

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).

Gambar 7

BLOCK PESAN (512 bit)

Ronde 1 Ronde 2 Ronde 3 Ronde 4

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

Register-register ini biasa disebut dengan nama Chain variabel atau variabel rantai.

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.

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. MD q 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.

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)

+ = operasi penjumlahan modulo 232

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

yang dalam hal ini,

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

Kesimpulan

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.

Daftar Pustaka

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