Security Implementation On Mission Critical Applications Budi Rahardjo INDOCISC.comhttp://budi.insan.co.id Developers Day – Jakarta, 3 Maret 2005
Budi Rahardjo2 Mission Critical Applications Merupakan aplikasi yang sangat penting sehingga kegagalan aplikasi dapat menimbulkan masalah Ketidak-nyamanan Ketidak-nyamanan Kerugian finansial Kerugian finansial Hilangnya nyawa Hilangnya nyawa
Budi Rahardjo3 It’s All Software Semua aplikasi sekarang bergantung kepada software Fly by wire Fly by wire Peluru kendali Peluru kendali Consumer electronics Consumer electronics … Meskipun aplikasi dan software dapat dipisahkan, materi presentasi ini mencoba memfokuskan kepada sisi softwarenya. Aplikasi biasanya lebih berfokus kepada pengoperasian software yang sudah jadi (misalnya sandboxing).
Budi Rahardjo4 Software & User Experience “Apple’s core strength is to bring very high technology to mere mortals in a way that surprises and delights them and that they can figure out how to use. Software is the key to that. In fact, software IS the user experience.” (Steve Jobs)
Budi Rahardjo5 Security Issues Masih kurang pengetahuan mengenai masalah security Akibatnya Kerahasiaan informasi tidak terjaga. (Confidentiality) Kerahasiaan informasi tidak terjaga. (Confidentiality) Informasi tidak terjaga integritasnya. (Integrity) Informasi tidak terjaga integritasnya. (Integrity) Sistem menjadi tidak reliable, rusak, hang, crash. (Availability) Sistem menjadi tidak reliable, rusak, hang, crash. (Availability) Orang yang tidak berhak dapat menyisipkan program dan menjalankannya, mengakses informasi yang seharusnya tidak diperkenankan. (Authentication & Authorization) Orang yang tidak berhak dapat menyisipkan program dan menjalankannya, mengakses informasi yang seharusnya tidak diperkenankan. (Authentication & Authorization)
Budi Rahardjo6 Quotes Bruce Schneier (in Preface of “Building Secure Software” – Viega & McGraw) “We wouldn’t have to spend so much time, money, and effort on network security if we didn’t have such bad software security. … Think about the most recent security vulnerability you’ve read about. Maybe it’s a killer packet, which allows an attacker to crash some server by sending it a particular packet. Maybe it’s one of the gazillions of buffer overflows, which allow an attacker to take control of a computer by sending it a particular malformed message. Maybe it’s an encryption vulnerability, which allows an attacker to read an encrypted message or fool an authentication system. These are all software issues.”
Budi Rahardjo7 Software Problems Trinity of Trouble (Hoglund & McGraw) Complexity Complexity Semakin banyak jumlah kode, semakin banyak kemungkinan adanya bugsSemakin banyak jumlah kode, semakin banyak kemungkinan adanya bugs Extensibility Extensibility Java,.NET, dll, modules, virtual machine, mobile codeJava,.NET, dll, modules, virtual machine, mobile code Tidak tahu kode yang akan datang. Sulit menjaganyaTidak tahu kode yang akan datang. Sulit menjaganya Connectivity Connectivity Aplikasi banyak yang terhubung ke jaringanAplikasi banyak yang terhubung ke jaringan Meningkatkan jumlah potensi penyerangMeningkatkan jumlah potensi penyerang
Budi Rahardjo8 Kompleksitas Terlalu Tinggi “There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.” (C.A.R. Hoare)
Budi Rahardjo9 Contoh Kompleksitas Software Sistem Jumlah Baris Kode Solaris Linux 1,5 juta Boeing juta Space Shuttle 10 juta Netscape 17 juta Space Station 40 juta Windows XP 40 juta Sumber: Hoglund & McGraw, “Exploiting Software”, 2004
Budi Rahardjo10 What To Do Meningkatkan wawasan security dari para pengembang software dan management Meningkatkan akurasi dari asumsi Meningkatkan akurasi dari asumsi Memberikan lebih banyak perhatian (time, money, effort) kepada security Memberikan lebih banyak perhatian (time, money, effort) kepada security Meningkatkan pengetahuan (skill) security pengembang software Kuliah tentang secure software Kuliah tentang secure software
Budi Rahardjo11 Asumsi Pengembang Pengguna software adalah orang yang paham menggunakan software. Tidak benar. Kesalahan urutan dan penggunaan dapat berakibat fatal Kesalahan urutan dan penggunaan dapat berakibat fatal Kesalahan memasukkan kata / memberikan perintah dapat menimbulkan masalah. Kesalahan memasukkan kata / memberikan perintah dapat menimbulkan masalah. Biasanya menggunakan filter apa-apa yang tidak dikehendaki.Biasanya menggunakan filter apa-apa yang tidak dikehendaki. Cara lain adalah dengan membuat whitelist (yang diperbolehkan)Cara lain adalah dengan membuat whitelist (yang diperbolehkan) Bagaimana agar software tidak rentan terhadap kesalahan? Bagaimana agar software tidak rentan terhadap kesalahan?
Budi Rahardjo12 Asumsi Pengembang (2) Pengguna software adalah orang yang baik. Tidak benar. Adanya pengguna yang sengaja mencoba- coba, mencari kelemahan software (misal mengedit URL) Adanya pengguna yang sengaja mencoba- coba, mencari kelemahan software (misal mengedit URL) Software sekarang umumnya berada di hostile environment Software sekarang umumnya berada di hostile environment Bagaimana agar software tidak rentan terhadap penyerangan? Bagaimana agar software tidak rentan terhadap penyerangan?
Budi Rahardjo13 Beberapa masalah teknis Buffer Overflow Race Condition Weak encryption ACL …
Budi Rahardjo14 Buffer Overflow Merupakan salah satu kesalahan yang sering terjadi Keterbatasan memory membatasi ukuran dari buffer (array) char userid[20]; char password[20]; Seringkali pembuat software Lupa menguji batas buffer/array Lupa menguji batas buffer/array Bagaimana jika “userid” atau “password” di atas diberi masukan lebih dari 20 karakter? Bagaimana jika “userid” atau “password” di atas diberi masukan lebih dari 20 karakter?
Budi Rahardjo15 Mengatasi Buffer Overflow Ada beberapa tools / library yang dapat digunakan untuk membantu mencari potensi buffer overflow Ada juga library yang mencoba memproteksi buffer overflow tanpa turut campurnya sang programmer (misalnya selalu menguji batas dari buffer, menandai batas akhir dari buffer, dsb.) Tapi, tetap pengetahuan akan buffer overflow lebih baik lagi
Budi Rahardjo16 Race Condition Ada hal-hal tertentu yang jika urutannya tidak tepat maka bisa terjadi masalah Membuat berkas dengan tingkat admin (root) kemudian menghapusnya setelah selesai. Namun di tengah perjalanan berkas tersebut berhasil dieksploitasi (diubah isinya, diarahkan ke tempat lain) sebelum dihapus. Membuat berkas dengan tingkat admin (root) kemudian menghapusnya setelah selesai. Namun di tengah perjalanan berkas tersebut berhasil dieksploitasi (diubah isinya, diarahkan ke tempat lain) sebelum dihapus. Variabel yang sedang digunakan oleh sebuah thread, ternyata diubah isinya oleh thread lain sehingga menjadi tidak benar Variabel yang sedang digunakan oleh sebuah thread, ternyata diubah isinya oleh thread lain sehingga menjadi tidak benar
Budi Rahardjo17 Mengatasi Race Condition Beberapa alternatif Membuat beberapa transaksi menjadi “atomic” (terlihat sebagai satu eksekusi) Membuat beberapa transaksi menjadi “atomic” (terlihat sebagai satu eksekusi) Melakukan sinkronisasi dengan misalnya membuat sebuah mutual exclusion (mutex), semaphore, locking Melakukan sinkronisasi dengan misalnya membuat sebuah mutual exclusion (mutex), semaphore, locking Membatasi dan mengecilkan window dari race condition Membatasi dan mengecilkan window dari race condition Membatasi level otorisasi pada bagian yang berpotensi dieksploitasi Membatasi level otorisasi pada bagian yang berpotensi dieksploitasi
Budi Rahardjo18 Weak Encryption Penggunaan enkripsi (penyandian) yang lemah memberikan perasaan aman, padahal tidak. (False sense of security.) Ada yang merasa sudah pandai membuat enkripsi, padahal lemah. Lebih baik menggunakan algoritma yang sudah terbukti kuat Lebih baik menggunakan algoritma yang sudah terbukti kuat Salah menggunakan algoritma juga dapat berdampak menjadi tidak aman
Budi Rahardjo19 Penutup Mudah-mudahan tingkat wawasan dan kemampuan (skill) security di antara para pengembang software makin meningkat Harus ada pendidikan mengenai bagaimana cara membuat software yang aman Kuliah? Training? Workshop? Tutorial? Kuliah? Training? Workshop? Tutorial?
Budi Rahardjo20 Lain-Lain Bidang ilmu lain yang terkait: Metoda Formal (Formal Methods), yaitu menggunakan matematik di setiap tahapan desain dan implementasi Namun bidang ini masih kurang populer 1 April National Cyber Security Partnership (NCSP) di Amerika mengeluarkan dokumen “Improving Security Across The Software Development Lifecycle” Saat ini mulai muncul buku dan referensi tentang bagaimana caranya mengembangkan software yang aman