Budi Rahardjo: Pembuatan piranti lunak perlu perhatikan masalah keamanan

Pembuatan piranti lunak perlu perhatikan masalah keamanan



Piranti lunak (software) sudah menjadi bagian dari kehidupan kita sehari-hari, mulai dalam bentuk program yang dijalankan komputer biasa sampai ke program yang ada di embedded system seperti handphone. Pada mulanya software sangat sederhana dan tidak terlalu kompleks sehingga mudah dipahami dan diperiksa jika ada kesalahan. Sesuai dengan perkembangan jaman, kompleksitas dari software pun meningkat sehingga potensi timbulnya kesalahan menjadi lebih besar.

Kesalahan atau kegagalan yang ditimbulkan oleh software bisa beragam, mulai dari ketidaknyamanan, timbulnya lubang keamanan (security hole), kerugian finansial, dan bahkan dapat membahayakan nyawa. Tulisan ini memfokuskan kepada timbulnya lubang keamanan yang diakibatkan oleh pembuatan software yang tidak baik.

Secara umum, pengembang aplikasi (programmer) belum memiliki pemahaman tentang masalah keamanan. Keamanan tidak diperhatikan mulai dari desain, implementasi, sampai ke operasional. Masalah keamanan baru diperhatikan jika sudah timbul masalah yang mengakibatkan kerugian finansial. Padahal memperbaiki software yang sudah dijual dan digunakan oleh umum jauh lebih mahal daripada waktu desain atau implementasi. Untuk itu usaha membekali para programmer dengan ilmu keamanan merupakan langkah yang penting.

National Cyber Security Partnership, sebuah organisasi di Amerika Serikat, baru-baru ini mengeluarkan dokumen “Report on Security Across the Software Development Lifecycle” yang membahas masalah keamanan dalam pengembangan software. Di dalam laporan tersebut disebutkan bahwa masalah rendahnya kualitas keamanan software buatan programmer Amerika dibandingkan dengan programmer India merupakan salah satu alasan banyaknya pekerjaan yang dilimpahkan ke India. Salah satu solusinya adalah memberikan pendidikan kepada para programmer tentang pentingnya masalah security dalam software. Masalahnya, tidak banyak perguruan tinggi yang memberikan pelajaran masalah keamanan dalam pengembangan software. Security biasanya hanya dikaitkan dengan jaringan dan protokol, bukan pada software.

Masalah keamanan dalam pengembangan software yang sering muncul antara lain adalah buffer overflow, pemrosesan format string yang tidak divalidasi, dan input yang tidak divalidasi. Mari kita bahas salah satunya, yaitu buffer overflow.

Buffer merupakan tempat di memori untuk menyimpan variabel dan program. Ketika kita mendeklarasikan sebuah variabel “A”, dengan peritah “char A[16]” di dalam bahasa C/C++ misalnya, maka kita mengalokasikan 16 byte di memori untuk variabel A tersebut. Buffer overflow terjadi jika kita memberikan data lebih banyak daripada tempat yang disediakan. Perhatikan kode C/C++ di bawah ini.

#include <iostream>

using namespace std;

// contoh pemrograman yang buruk

// diadopsi dari tulisan Aleph One

// simpan berkas ini dengan nama jelek.cc

// dan rakit dengan g++


void fungsijelek(char *str)

{

// fungsi ini meng-copy karakter dari str ke sementara

// masalah ada di strcpy yang tidak dibatasi

char sementara[16];

strcpy(sementara, str);

}


int main()

{

char stringpanjang[256];

int i;

for (i=0 ; i < 255 ; i++)

stringpanjang[i] = 'A';

fungsijelek(stringpanjang);

}


Dalam contoh di atas kita memiliki sebuah variabel yang bernama “stringpanjang” yang panjangnya 256 bytes. String ini kemudian kita isi dengan karakter 'A' sebanyak 256 buah. Kemudian kita memanggil fungsi yang bernama “fungsijelek” yang tugasnya adalah membuat duplikat (copy) dari string yang dikirimkan ke fungsi ini, yaitu “stringpanjang”. Sayangnya “fungsijelek” hanya mengalokasikan buffer sementara sebanyak 16 bytes akan tetapi dia tidak membatasi proses peng-copy-an dengan menggunakan fungsi “strcpy”. Akibatnya, ketika program dijalankan, program akan terhenti seperti contoh di bawah ini.

$ g++ jelek.cc

$ ./a.out

Segmentation fault (core dumped)


Akibat yang terjadi bisa bermacam-macam, mulai dari program yang terhenti seperti di atas, server crash, sampai user bisa masuk tanpa password. Untuk itu wawasan akan masalah keamanan sangat penting bagi pengembang software.





Artikel ini datang dari InfoLINUX
http://www.infolinux.web.id/site

URL cerita ini adalah:
http://www.infolinux.web.id/site/sections.php?artid=145