[Keamanan Informasi] Aplikasi Rentan Akibat Buffer Overflow

Masih seputar tugas mata kuliah Keamanan Informasi. Kali ini deskripsi tugas yang diberikan oleh Pak Budi Rahardjo adalah sebagai berikut:

Anda bisa memilih salah satu dari tugas ini:

1. Anda diminta untuk membuat aplikasi yang rentan dan bermasalah dengan out of bound array (buffer overflow). Misalnya aplikasi meminta pengguna memasukkan nama dengan panjang tertentu tetapi Anda memasukkannya dengan teks diluar batas tersebut. Tunjukkan bahwa program Anda crash dan memiliki potensi celah keamanan (misal jatuh ke root prompt)
2. Anda membuat aplikasi yang menguju aplikasi lain untuk potensi out of bound array tersebut. Misalnya, aplikasi Anda membuat (generate) teks yang panjang untuk dimasukkan ke form (pada aplikasi berbasis web), atau aplikasi Anda memberik teks yang aneh-aneh (fuzzer).

Dari kedua opsi itu, saya memilih opsi nomor dua karena merasa lebih mudah dan cepat dalam mengkodingnya, hehehe. Aplikasi saya buat dengan menggunakan Microsoft Visual C# 2010. Sebenarnya tidak ada yang istimewa pada aplikasi yang saya buat ini. Secara umum, fungsi aplikasi ini adalah membangkitkan teks sesuai dengan jumlah karakter yang dimasukkan oleh pengguna. Perlu dicatat, teks yang dibangkitkan bertipe alfanumerik (0-9, A-Z, a-z, !@#%^&*() etc…). Dalam aplikasi ini juga ada fungsi “copy to clipboard” yang akan memudahkan pengguna untuk menyalin teks yang dibangkitkan dengan cukup sekali klik. Setelah itu, pengguna cukup tekan Ctrl+v untuk mem-paste teks tersebut ke dalam suatu form.

Aplikasi tersebut saya beri nama “TextGen”. Berikut ini tampilan aplikasi yang saya buat:

Tampilan aplikasi (idle)

Tampilan aplikasi (idle)

Oke, sekarang saya akan jelaskan satu persatu antarmuka aplikasi itu. Textbox yang berada di samping label “Text length” itu adalah untuk memasukkan panjang teks yang kita inginkan (jumlah karakter). Tombol “GENERATE!” jika diklik akan menghasilkan teks dengan panjang sesuai masukan pada textbox yang pertama saya sebutkan tadi dan akan ditampilkan dalam textarea yang berada di bawah label “Output“. Pada saat bersamaan, tombol “COPY TO CLIPBOARD” dan “CLEAR” akan aktif. Tombol “COPY TO CLIPBOARD” jika diklik, akan menyalin teks pada textarea ke dalam memori dan siap di-paste di tempat manapun. Sedangkan tombol “CLEAR” jika diklik, akan membersihkan textarea dari teks.

Pengujian

Nah, sekarang saatnya untuk menguji suatu website untuk melihat sejauh apa ketangguhan website tersebut dalam mengatasi masalah out of bond array. Sasaran pertama saya adalah website yang sudah pasti sering kita buka, yaitu Google. Ini dia hasil pengujian saya dengan memasukkan input teks dengan berbagai variasi panjangnya ke dalam kotak pencarian, mulai dari 100 hingga 1.000.000.000!

1) 100 karakter

Dengan input sepanjang 100 karakter ternyata Google masih sanggup memprosesnya dengan tetap melakukan pencarian ke dalam koleksi dokumen mereka.

3) 750 karakter

Hasilnya masih sama dengan yang masukan 100 karakter. Google masih memprosesnya. Hanya saja kali ini ada pesan tambahan. Google hanya memproses maksimal 32 query saja. Terkait pesan yang satu ini terus terang saya baru tahu. Dari 750 karakter yang saya masukkan itu ternyata terdapat lebih dari 32 kata.

4) 1500 karakter

Kali ini Google sudah benar-benar tidak memproses query yang saya masukkan sepanjang 1500 karakter. Setelah saya coba kecilkan lagi, yakni sebesar 1000 karakter, ternyata Google tetap tidak memprosesnya. Pesan yang ditampilkannya adalah “Request-URI Too Large”.

5) 20.000 karakter

Kali ini pesannya berbeda meskipun sama-sama tidak diproses oleh Google. Pesan yang ditampilkan adalah “Request Entity Too Large”. Saya sendiri tidak paham apa bedanya dengan pesan “Request-URI Too large”.Saya mencobanya lagi untuk masukan hingga 100.000 karakter hasilnya tetap demikian. Salut, Google ternyata sudah siap untuk menangani kasus yang seperti ini.

6) 1.000.000 karakter

membangkitkan 1000000 karakter

membangkitkan 1000000 karakter

Terakhir, saya iseng mencoba memasukkan teks sepanjang 1000000 karakter ke dalam kotak pencarian Google. Ternyata pesan yang ditampilkan browser saya adalah “The connection was reset”. Tampaknya, jaringan saya tidak kuat dalam mengirimkan paket data sebesar itu. Akhirnya sampai terjadi time out seperti itu. Saya coba turunkan hingga 200.000 karakter ternyata memang hasilnya selalu itu. Sepertinya, memang masalah kapasitas pengirimannya yang terbatas.

Google tampaknya memang tangguh. Input sepanjang apapun dapat dia tangani dan dia cegah agar tidak terjadi error pada websitenya. Saya pun jadinya masih tetap penasaran. Saya coba situs lain, yakni sebuah situs forum terkemuka di Indonesia. Saya coba masukkan teks hingga sepanjang 10.000 karakter, situs tersebut masih tetap mampu menangani. Namun, ketika saya masukkan sebanyak 20.000 karakter situs itu menampilkan pesan error seperti ini:

Oke, cukup sudah pengujiannya.😀 Bagi yang mungkin tertarik untuk mencoba memakai aplikasi sederhana ini (siapa tahu), saya sediakan source code dan file binarynya di sini (unduh dan ubah ekstensi filenya menjadi zip):

TextGen-bin

TextGen-src

Keterangan: Aktivitas yang saya uraikan dalam tulisan ini hanya untuk kepentingan tugas kuliah semata, tidak ada maksud jahat atau apapun. Saya mohon maaf atas ketidaknyamanan yang mungkin saya timbulkan karena perbuatan saya.

One thought on “[Keamanan Informasi] Aplikasi Rentan Akibat Buffer Overflow

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s