Aspek keamanan dalam sebuah aplikasi

Time for another Sharing Session post. (;

_Sharing session _(SS) kedua yang saya ikuti kali ini diisi secara langsung oleh CTO Gnews yaitu mas Masas. SS kala itu dibuka dengan pembahasan tentang survey mengenai siapakah pihak yang paling berperan dalam keamanan sebuah aplikasi. Yang mana dari survey tersebut, 53% memilih bahwa software developer lah yang paling berperan dalam keamanan sebuah aplikasi. 25% responden lain memilih tim keamanan, lalu sisanya menunjuk framework-lah yang bertanggung jawab akan keamanan sebuah aplikasi. Survey tersebut bersumber dari Dzone’s 2015 Application Security Survey yang 41% respondenya berasal dari Eropa, 23% dari United States, dan 15% dari negara Asia Selatan tengah seperti India dan Pakistan.

Kebetulan, application security merupakan salah satu hal yang kurang familiar bagi saya secara pribadi. Saya belajar banyak dari SS kali ini. Diantaranya, tentang beberapa kesalahan seputar keamanan aplikasi yang sering dilakukan para developer:

  • Penggunaan kode tanpa pemeriksaan integritas.
  • Tidak melakukan filtering terhadap input data pada aplikasi
  • Tidak adanya enkripsi pada data-data yang sensitif
    Pada SS tersebut juga dibahas, bahwa keamanan aplikasi ini sering dibicarakan di awal namun banyak yang tidak menjadikannya sebagai prioritas. Karena, perhatian tentang keamanan ini sering kali bersinggungan dengan tenggat waktu (dead line) dalam berbagai organisasi.

Terakhir, kami membahas juga 10 langkah untuk mengamankan aplikasi yang kita buat:

  1. Jagalah data aplikasi yang kita buat dari SQL injection

Salah satu serangan yang paling berbahaya (dan yang paling umum) pada aplikasi web adalah SQL injection. Dimana para penyerang menyisipkan malicious SQL ke dalam SQL statement.

  1. Lakukan encoding data sebelum menggunakannya

Ada beberapa tools yang bisa digunakan untuk memebantu developer dalam hal ini, termasuk OWASP Java Encoder untuk perlindungan XSS. Ada juga open-source Anti- XSS Library dari Microsoft untuk .NET

  1. Selalu lakukan validasi pada data yang masuk sebelum menggunakan atau menyimpannya

Aturan dasarnya adalah: jangan mengandalkan pemeriksaan pada sisi client. Selalu lakukan pemeriksaan ulang pada server meskipun kita sudah menyediakan pemeriksaan pada sisi client

  1. Lakukan penolakan secara baku pada Access control

Implemetasikan aturan access control pada pusat management library di server-side. Akan lebih mudah untuk melakukan audit dan pembaharuan rule-nya daripada hanya memulas aturan tersebut melalui business logic. Gunakan fungsi access control dari framework aplikasi yang kita gunakan, atau gunakan library security seperti Apache Shiro.

  1. Adakan pemeriksaan identitas di awal

Terapkan autentikasi multi-faktor jika memungkinkan. Jika kita hanya menggunakan user ID dan password, pastikan bahwa para pengguna mengikuti aturan panjang & kompleksitas kata sandi yang benar. Open Web Application Security Project (OWASP) menyediakan Password Storage Cheat Sheet yang menjelaskan apa yang kita butuhkan dan algoritma yang bisa kita gunakan untuk menyimpan kata sandi. OWASP juga menyediakan Forgot Password Cheat Sheet yang bisa membantu kita merancang fungsi forget password yang lebih aman.

  1. Jagalah data & privacy user

Dalam sebuah aplikasi web dan mobile, enskripsi data bisa berarti dengan menggunakan SSL/TLS. Dan menggunakan SSL sebenarnya tidaklah sulit. Yang perlu perhatian lebih adalah untuk memastikan pengaturannya. Namun worry not! Sarena OWASP memiliki Transport Layer Protection Cheat Sheet yang menjelaskan bagaimana SSL dan TLS bekerja dan aturan yang harus kita ikuti dalam penggunaannya. Selain itu, OWASP juga memiliki Cheat Sheet dalam hal Cryptographic Storage yang menjelaskan beberapa algoritma kriptografi yang bisa kita pelajari dan terapkan dalam aplikasi yang kita buat.

  1. Selalu gunakan log dan deteksi gangguan yang terjadi

Tampilkan log tentang kapan, siapa, dimana, dan apa yang terjadi pada aplikasi yang kita buat. Tampilkan timestamp, user ID, IP, dan informasi lainnya yang sekiranya kita butuhkan untuk analisis ketika terjadi kesalahan.

  1. Tidak perlu berpikir untuk membuat kode keamanan kita sendiri

Maksimalkan kemampuan keamanan dari framework aplikasi yang kita pakai dan gunakan library seperti Apache Shiro untuk memudahkan kita dalam menangani kemanan aplikasi. Luangkan waktu untuk mempelajari dan menggunakan tools tersebut karena hal itu akan sangat bermanfaat jika kita tau cara memaksimalkannya dengan baik. 

  1. Tangani kesalahan (error) dan exception secara benar

Kesalahan dalam penanganan error dan exception bisa menjadi peluang bagi para penyerang untuk melakukan penetrasi pada sebuah sistem. Informasi kesalahan yang terlalu detil, selain ditujukan untuk membantu pengguna, juga bisa digunakan penyerang untuk melancarkan serangannya. 

  1. Masukan pengujian keamanan dalam tahapan pengembangan

Pastikan bahwa kita memiliki unit otomatisasi dan integration test untuk fitur keamanan dan kontrol (seperti autentikasi, akses kontrol, dan proses audit), dan juga untuk beberapa fitur lain seperti penanganan transaksi keuangan, data pribadi, dan fungsi admin. 
Dulu saya sering berpikir bahwa security software itu adalah hal yang terlalu geeky dan tidak menarik untuk dipelajari. Namun lewat SS kali ini saya perlahan menyadari betapa pentingnya pengetahuan tentang security itu. Rasanya masih perlu belajar banyak tentang aspek satu ini.

NB:

Btw, kalian bisa mempelajari tentang OWASP lebih lanjut lewat tautan berikut. Ada juga ebook dari Dzone tentang Software Security yang mungkin menarik untuk dibaca jika ingin mengetahui lebih lanjut tentang topik tersebut. Ebook tersebut bisa diunduh secara gratis melalui halaman ini.