Prakata

Buku ini diterjemahkan dari Web Application Security: Exploitation and Contermeasures for Modern Web Application karangan Andrew Hoffman yang diterbitkan pada tahun 2020 oleh O’Reilly Media, Inc dengan isbn=9781492053118

Selamat datang di Web Application Security: Exploitation and Contermeasures for Modern Web Application. Dalam prakata ini, kita akan membahas fondasi yang diperlukan untuk membaca dan memahami konten dalam buku ini dengan sukses. Kita juga akan membahas tujuan pembelajaran dan mencoba membangun profil pembaca arketipe sehingga Anda (pembaca) dapat memahami apakah Anda akan mendapatkan manfaat dari buku ini atau tidak.

Sebaiknya selesaikan prakata ini sebelum melanjutkan ke Bab 1 jika Anda tidak yakin apakah buku ini cocok untuk Anda, atau jika Anda tidak yakin keahlian Anda saat ini siap untuk konten teknis di bab-bab berikutnya.

Pengetahuan Prasyarat dan Tujuan Pembelajaran

Buku ini tidak hanya akan membantu Anda mempelajari cara mempertahankan aplikasi web Anda dari peretas, tetapi juga akan menuntun Anda melalui langkah-langkah yang diambil peretas untuk menyelidiki dan membobol aplikasi web.

Di sepanjang buku ini, kita akan membahas berbagai teknik yang digunakan peretas saat ini untuk membobol aplikasi web yang dihosting oleh perusahaan, pemerintah, dan terkadang bahkan oleh para penghobi.

Setelah investigasi yang memadai terhadap teknik-teknik yang telah disebutkan sebelumnya, kita akan memulai diskusi tentang cara mengamankan aplikasi web dari para peretas ini.

Dengan demikian, Anda akan menemukan cara berpikir yang benar-benar baru tentang arsitektur aplikasi. Anda juga akan mempelajari cara mengintegrasikan praktik terbaik keamanan ke dalam organisasi rekayasa. Terakhir, kita akan mengevaluasi sejumlah teknik untuk bertahan dari jenis serangan paling umum dan berbahaya yang terjadi pada aplikasi web saat ini.

Setelah menyelesaikan Web Application Security, Anda akan memiliki pengetahuan yang diperlukan untuk melakukan teknik pengintaian terhadap aplikasi yang tidak memiliki akses tingkat kode.

Anda juga akan mampu mengidentifikasi vektor ancaman dan kerentanan dalam aplikasi web, serta merancang muatan yang dirancang untuk membahayakan data aplikasi, mengganggu alur eksekusi, atau mengganggu fungsi aplikasi web yang seharusnya.

Dengan keterampilan ini, dan pengetahuan yang diperoleh dari bagian terakhir tentang pengamanan aplikasi web, Anda akan mampu mengidentifikasi area berisiko dalam basis kode aplikasi web dan memahami cara menulis kode untuk melindungi diri dari serangan yang dapat membahayakan aplikasi dan penggunanya.

Catatan

Konten dalam buku ini berkembang secara progresif, jadi jika Anda memilih untuk melewatkan bagian selanjutnya dan menemukan informasi prasyarat penting yang hilang, cukup baca kembali beberapa bab untuk mengejar ketinggalan.

Topik apa pun yang tidak didefinisikan sebagai prasyarat dalam bab ini tidak boleh disajikan dalam buku ini tanpa penjelasan sebelumnya.

Latar Belakang yang Disarankan

Calon pembaca potensial buku ini cukup luas, tetapi gaya penulisan dan struktur contoh-contohnya seharusnya menjadikannya ideal bagi siapa pun dengan latar belakang tingkat menengah di bidang rekayasa perangkat lunak.

Apa yang dimaksud dengan "latar belakang tingkat menengah di bidang rekayasa perangkat lunak", Anda mungkin bertanya? Jawaban atas pertanyaan tersebut akan sangat berbeda untuk setiap orang. Bagi orang yang sangat teknis, buku ini mungkin sebenarnya hanya membutuhkan "latar belakang tingkat pemula di bidang rekayasa perangkat lunak". Dengan kata lain, seorang administrator sistem dengan pengalaman pengembangan web dan/atau skrip sebelumnya (jika cukup) dapat membaca buku ini dan memahami semua contoh. Meskipun demikian, buku ini memuat contoh-contoh yang membutuhkan pengetahuan pengkodean klien dan server. Mengetahui salah satu saja tidak cukup untuk memahami contoh-contoh ini secara mendalam.

Buku ini juga mencakup diskusi mengenai jaringan klien/server dasar melalui HTTP. Selain itu, percakapan mengenai arsitektur perangkat lunak akan muncul di bab-bab selanjutnya saat kita mengeksplorasi cara-cara mengintegrasikan perangkat lunak internal dengan perangkat lunak pihak ketiga sekaligus memitigasi risiko keamanan.

Karena begitu banyak topik yang dibahas dalam buku ini, saya memilih untuk mendefinisikan tingkat keahlian yang dibutuhkan untuk berhasil menyelesaikan buku ini sebagai "menengah" dibandingkan "pemula" karena buku ini tidak akan sesuai bagi mereka yang tidak berpengalaman atau memiliki pengetahuan dalam menulis aplikasi perangkat lunak berkualitas produksi.

Keterampilan Minimum yang Diperlukan

Dalam buku ini, "latar belakang tingkat menengah dalam rekayasa perangkat lunak" menyiratkan hal-hal berikut:

  • Anda dapat menulis program CRUD (membuat, membaca, memperbarui, menghapus) dasar dalam setidaknya satu bahasa pemrograman.

  • Anda dapat menulis kode yang berjalan di server di suatu tempat (seperti kode backend).

  • Anda dapat menulis setidaknya beberapa kode yang berjalan di peramban (kode frontend, biasanya JavaScript).

  • Anda mengetahui apa itu HTTP, dan dapat membuat, atau setidaknya membaca, panggilan GET/POST melalui HTTP dalam beberapa bahasa atau kerangka kerja.

  • Anda dapat menulis, atau setidaknya membaca dan memahami, aplikasi yang menggunakan kode sisi server dan sisi klien, dan berkomunikasi antara keduanya melalui HTTP.

  • Anda familier dengan setidaknya satu basis data populer (MySql, MongoDB, dll.).

Keterampilan ini merupakan kriteria minimum untuk berhasil mengikuti contoh-contoh dalam buku ini. Pengalaman apa pun yang Anda miliki di luar poin-poin ini merupakan nilai tambah dan akan membuat buku ini jauh lebih mudah bagi Anda untuk memahami dan memperoleh nilai edukatifnya.

Catatan

Meskipun sebagian besar contoh kode dalam buku ini ditulis dalam JavaScript demi kesederhanaan (agar kode klien dan server berada dalam bahasa yang sama), sebagian besar contoh dapat diterapkan ke bahasa lain dengan mudah.

Saya telah berupaya sebaik mungkin untuk menyusun topik-topik dalam buku ini agar tingkat kesulitannya meningkat dengan kecepatan yang dapat dipertahankan. Saya juga berusaha sedetail mungkin dalam penjelasan saya. Ini berarti setiap kali saya membahas teknologi baru, saya mulai dengan latar belakang dan ikhtisar singkat tentang cara kerja teknologi tersebut.

Siapa yang Paling Mendapat Manfaat dari Membaca Buku Ini?

Selain keterampilan prasyarat, saya rasa penting untuk mengklarifikasi siapa yang paling diuntungkan dari buku ini, jadi saya ingin menjelaskan siapa target pembaca saya. Untuk itu, saya telah menyusun bagian ini berdasarkan tujuan pembelajaran dan minat profesional. Jika Anda tidak termasuk dalam salah satu kategori berikut, Anda tetap dapat mempelajari banyak konsep berharga atau setidaknya menarik dari buku ini. Buku ini ditulis untuk bertahan dalam ujian waktu, jadi jika Anda kemudian memutuskan untuk menekuni salah satu pekerjaan yang termasuk dalam target pembaca tersebut, semua pengetahuan dari buku ini akan tetap relevan.

Insinyur Perangkat Lunak dan Pengembang Aplikasi Web

Saya rasa adil untuk mengatakan bahwa audiens utama buku ini adalah insinyur perangkat lunak atau pengembang aplikasi web yang berkarier awal hingga menengah. Idealnya, pembaca ini tertarik untuk memperoleh pemahaman mendalam tentang teknik ofensif yang digunakan oleh peretas, atau teknik defensif yang digunakan oleh insinyur keamanan untuk bertahan melawan peretas.

Seringkali, sebutan "pengembang aplikasi web" dan "insinyur perangkat lunak" dapat dipertukarkan, yang mungkin menyebabkan sedikit kebingungan mengingat saya menggunakan keduanya di bab-bab selanjutnya. Mari kita mulai dengan beberapa klarifikasi.

INSINYUR PERANGKAT LUNAK

Dalam pikiran saya, dan demi kejelasan, ketika saya menggunakan istilah "insinyur perangkat lunak", saya merujuk pada seorang generalis yang mampu menulis perangkat lunak yang berjalan di berbagai platform. Insinyur perangkat lunak akan mendapatkan manfaat dari buku ini dalam beberapa cara.

Pertama, sebagian besar pengetahuan yang terkandung dalam buku ini dapat ditransfer dengan upaya minimal ke perangkat lunak yang tidak berjalan di web. Pengetahuan ini juga dapat ditransfer ke jenis aplikasi jaringan lainnya, dengan aplikasi seluler asli menjadi yang pertama terlintas dalam pikiran.

Lebih lanjut, beberapa eksploitasi yang dibahas dalam buku ini memanfaatkan integrasi sisi server yang melibatkan komunikasi dengan aplikasi web dan komponen perangkat lunak lainnya. Oleh karena itu, aman untuk mempertimbangkan perangkat lunak apa pun yang berinteraksi dengan aplikasi web sebagai vektor ancaman potensial (basis data, CRM, akuntansi, alat pencatatan, dll.).

PENGEMBANG APLIKASI WEB

Di sisi lain, "pengembang aplikasi web" menurut definisi saya adalah seseorang yang sangat terspesialisasi dalam menulis perangkat lunak yang berjalan di web. Mereka sering dibagi lagi menjadi pengembang frontend, backend, dan full-stack.

Secara historis, banyak serangan terhadap aplikasi web telah menargetkan kerentanan sisi server. Oleh karena itu, saya yakin kasus penggunaan buku ini untuk pengembang backend atau full-stack sangat transparan dan mudah dipahami.

Saya juga yakin buku ini bermanfaat bagi jenis pengembang aplikasi web lainnya, termasuk mereka yang tidak menulis kode yang berjalan di server melainkan di peramban web (pengembang frontend/JavaScript).

Seperti yang akan saya jelaskan di bab-bab selanjutnya, banyak cara peretas memanfaatkan aplikasi web saat ini berasal dari kode berbahaya yang berjalan di peramban. Beberapa peretas bahkan memanfaatkan stylesheet DOM atau CSS peramban untuk menyerang pengguna aplikasi. Poin-poin ini menunjukkan bahwa penting juga bagi pengembang front-end yang tidak menulis kode sisi server untuk menyadari risiko keamanan yang mungkin ditimbulkan oleh kode mereka dan cara memitigasi risiko tersebut.

Tujuan Pembelajaran Umum

Buku ini akan menjadi sumber daya yang fantastis bagi siapa pun yang ingin beralih karier ke peran yang lebih berorientasi pada keamanan. Buku ini juga akan berharga bagi mereka yang ingin mempelajari cara memperkuat pertahanan dalam kode mereka sendiri atau dalam kode yang dikelola oleh organisasi mereka.

Jika Anda ingin melindungi aplikasi Anda dari eksploitasi yang sangat spesifik, buku ini juga cocok untuk Anda. Buku ini mengikuti struktur yang unik, yang memungkinkan Anda menggunakannya sebagai referensi keamanan tanpa perlu membaca bab apa pun yang melibatkan peretasan. Tentu saja, jika itu satu-satunya tujuan Anda membeli buku ini.

Saya sarankan untuk membaca dari awal hingga akhir untuk pengalaman pembelajaran terbaik, tetapi jika Anda hanya mencari referensi tentang pengamanan terhadap jenis peretasan tertentu, cukup buka buku setengah dan mulailah membaca.

Insinyur Keamanan, Pen Tester, dan Pemburu Bug Bounty

Berkat struktur buku ini, buku ini juga dapat digunakan sebagai sumber daya untuk uji penetrasi, perburuan bug bounty, dan jenis pekerjaan keamanan tingkat aplikasi lainnya. Jika jenis pekerjaan ini relevan atau menarik bagi Anda, Anda mungkin akan lebih menyukai separuh pertama buku ini.

Buku ini akan membahas secara mendalam cara kerja eksploitasi baik dari tingkat kode maupun tingkat arsitektur, alih-alih hanya mengeksekusi skrip perangkat lunak sumber terbuka (OSS) yang terkenal atau memanfaatkan perangkat lunak otomatisasi keamanan berbayar. Karena itu, ada audiens kedua untuk buku ini—insinyur keamanan perangkat lunak, insinyur keamanan TI, insinyur keamanan jaringan, penguji penetrasi, dan pemburu bug bounty.

Tip

Ingin mendapatkan sedikit uang tambahan sambil mengembangkan keterampilan meretas Anda? Bacalah buku ini, lalu daftarkan diri Anda di salah satu program bug bounty yang disebutkan di Bagian III. Ini adalah cara yang bagus untuk membantu perusahaan lain meningkatkan keamanan produk mereka sambil mengembangkan keterampilan meretas Anda dan menghasilkan uang tambahan.

Buku ini akan sangat bermanfaat bagi para profesional keamanan yang sudah ada dan memahami secara konseptual cara kerja berbagai serangan tetapi ingin mendalami sistem dan kode di balik suatu alat atau skrip.

Di dunia keamanan saat ini, penguji penetrasi biasa beroperasi menggunakan beragam skrip eksploitasi bawaan. Hal ini telah mendorong terciptanya banyak alat berbayar dan sumber terbuka yang mengotomatiskan serangan klasik, dan serangan yang dapat dengan mudah dijalankan tanpa pengetahuan mendalam mengenai arsitektur aplikasi atau logika dalam blok kode tertentu.

Eksploitasi dan tindakan penanggulangan yang terdapat dalam buku ini disajikan tanpa menggunakan alat khusus apa pun. Sebagai gantinya, kami akan mengandalkan skrip, permintaan jaringan, dan peralatan kami sendiri yang menjadi standar dalam sistem operasi berbasis Unix, serta perkakas standar yang terdapat dalam tiga peramban web utama (Chrome, Firefox, dan Edge).

Hal ini bukan berarti meremehkan nilai alat keamanan khusus. Bahkan, saya pikir banyak di antaranya yang luar biasa dan memudahkan penyampaian uji penetrasi profesional berkualitas tinggi!

Sebaliknya, buku ini tidak membahas penggunaan alat keamanan khusus agar kita dapat berfokus pada bagian terpenting dari menemukan kerentanan, mengembangkan eksploitasi, memprioritaskan data yang akan disusupi, dan memastikan Anda dapat bertahan melawan semua hal di atas. Oleh karena itu, saya yakin di akhir buku ini Anda akan siap untuk terjun ke alam liar dan menemukan jenis kerentanan baru, mengembangkan eksploitasi terhadap sistem yang belum pernah dieksploitasi sebelumnya, dan memperkuat sistem yang paling kompleks terhadap penyerang yang paling gigih.

Bagaimana Buku Ini Disusun?

Anda akan segera menyadari bahwa buku ini disusun dengan sangat berbeda dari kebanyakan buku teknologi lain di luar sana. Hal ini disengaja. Buku ini sengaja disusun sedemikian rupa sehingga terdapat rasio bab yang membahas peretasan (pelanggaran) dan keamanan (pertahanan) hampir 1:1.

Setelah memulai petualangan kita dengan sedikit pelajaran sejarah dan sedikit eksplorasi teknologi, perangkat, dan eksploitasi masa lalu, kita akan beralih ke topik utama: eksploitasi dan penanggulangan untuk aplikasi web modern. Oleh karena itu, judul buku ini.

Konten utama buku ini terstruktur menjadi tiga bagian utama, dengan setiap bagian berisi banyak bab tersendiri yang mencakup beragam topik. Idealnya, Anda akan menelusuri buku ini secara linear, dari halaman pertama hingga halaman terakhir. Membaca buku ini dalam urutan tersebut akan memberikan pembelajaran terbaik. Seperti yang telah disebutkan sebelumnya, buku ini juga dapat digunakan sebagai referensi peretasan atau referensi rekayasa keamanan dengan berfokus pada bagian pertama atau bagian kedua.

Sekarang Anda seharusnya sudah memahami cara membaca buku ini, jadi mari kita bahas tiga bagian utama buku ini agar kita dapat memahami pentingnya masing-masing.

Recon

Bagian pertama buku ini adalah "Recon", di mana kami mengevaluasi cara-cara untuk mendapatkan informasi mengenai aplikasi web tanpa harus mencoba meretasnya.

Dalam "Recon", kami membahas sejumlah teknologi dan konsep penting yang wajib dikuasai jika Anda ingin menjadi seorang peretas. Topik-topik ini juga penting bagi siapa pun yang ingin mengunci aplikasi yang sudah ada, karena informasi yang terekspos oleh banyak teknik ini dapat diminimalkan dengan perencanaan yang tepat.

Saya berkesempatan bekerja dengan mereka yang saya yakini sebagai beberapa penguji penetrasi dan pemburu bug bounty terbaik di dunia. Melalui percakapan saya dengan mereka dan analisis saya tentang cara mereka bekerja, saya menyadari bahwa topik ini jauh lebih penting daripada yang digembar-gemborkan oleh banyak buku lain.

MENGAPA REKON PENTING?

Saya berani mengatakan bahwa bagi banyak pemburu bug bounty terbaik di dunia, kemampuan pengintaian tingkat ahli lah yang membedakan para peretas "hebat" ini dari peretas yang sekadar "baik".

Dengan kata lain, memiliki mobil cepat (dalam hal ini, mungkin mengetahui cara membuat eksploitasi) adalah satu hal, tetapi tanpa mengetahui rute paling efisien menuju garis finis, Anda mungkin tidak akan memenangkan perlombaan. Mobil yang lebih lambat dapat mencapai garis finis dalam waktu lebih singkat daripada mobil yang cepat jika jalur yang diambil lebih efisien.

Jika analogi berbasis fantasi lebih tepat, Anda bisa menganggap keterampilan pengintaian sebagai sesuatu yang mirip dengan rogue dalam RPG. Dalam kasus kita, tugas rogue bukanlah untuk menimbulkan banyak kerusakan, melainkan untuk mengintai di depan kelompok dan berputar balik dengan informasi. Rogue-lah yang membantu mengarahkan tembakan dan menentukan pertempuran mana yang akan memberikan hasil terbesar.

Bagian terakhir khususnya sangat berharga, karena kemungkinan besar banyak jenis serangan dapat dicatat terhadap target yang dipertahankan dengan baik. Ini berarti Anda mungkin hanya memiliki satu kesempatan untuk mengeksploitasi celah perangkat lunak tertentu sebelum ditemukan dan ditutup.

Kita dapat dengan aman menyimpulkan bahwa penggunaan kedua pengintaian adalah menentukan cara memprioritaskan eksploitasi Anda.

Jika Anda tertarik berkarir sebagai penguji penetrasi atau pemburu bug bounty, bagian buku ini akan sangat penting bagi Anda. Hal ini terutama karena dalam dunia perburuan bug bounty, dan pada tingkat yang lebih rendah dalam pengujian penetrasi, pengujian dilakukan dengan gaya "kotak hitam". Pengujian "kotak hitam" adalah gaya pengujian di mana penguji tidak memiliki pengetahuan tentang struktur dan kode dalam suatu aplikasi, sehingga harus membangun pemahaman mereka sendiri tentang aplikasi tersebut melalui analisis dan investigasi yang cermat.

Pelanggaran

Bagian kedua buku ini adalah "Pelanggaran". Di sini, fokus buku ini beralih dari pengintaian dan pengumpulan data ke analisis kode dan permintaan jaringan. Kemudian, dengan pengetahuan ini, kita akan mencoba memanfaatkan aplikasi web yang ditulis secara tidak aman atau dikonfigurasi secara tidak tepat.

Peringatan

Sejumlah bab dalam buku ini menjelaskan teknik peretasan aktual yang digunakan oleh peretas topi hitam jahat di dunia nyata. Sangat penting jika Anda menguji teknik yang terdapat dalam buku ini, Anda hanya melakukannya terhadap aplikasi yang Anda miliki atau memiliki izin tertulis yang tegas untuk menguji eksploitasinya.

Penggunaan teknik peretasan yang tidak tepat yang disajikan dalam buku ini dapat mengakibatkan denda, hukuman penjara, dll., tergantung pada undang-undang negara Anda tentang aktivitas peretasan.

Di Bagian II, kita akan mempelajari cara membangun dan menerapkan eksploitasi. Eksploitasi ini dirancang untuk mencuri data atau mengubah perilaku aplikasi secara paksa.

Bagian buku ini mengembangkan pengetahuan dari Bagian I, "Pengintaian". Dengan menggunakan keterampilan pengintaian yang telah kita peroleh sebelumnya, ditambah dengan keterampilan meretas yang baru kita peroleh, kita akan mulai mengambil alih dan menyerang aplikasi web demo.

Bagian II disusun berdasarkan eksploitasi per eksploitasi. Setiap bab menjelaskan secara detail jenis eksploitasi yang berbeda.

Bab-bab ini dimulai dengan penjelasan tentang eksploitasi itu sendiri sehingga Anda dapat memahami cara kerjanya secara mekanis. Kemudian, kita membahas cara mencari kerentanan di mana eksploitasi ini dapat diterapkan. Terakhir, kita akan membuat muatan khusus untuk aplikasi demo yang kita eksploitasi. Kemudian, kita menerapkan muatan tersebut, dan mengamati hasilnya.

KERENTANAN YANG DIPERTIMBANGKAN SECARA MENDALAM

Cross-Site Scripting (XSS), salah satu eksploitasi pertama yang kami gali, adalah jenis serangan yang bekerja terhadap beragam aplikasi web , tetapi juga dapat diterapkan ke aplikasi lain (misalnya, aplikasi seluler, game flash/ActionScript, dll.). Serangan khusus ini melibatkan penulisan beberapa kode berbahaya di komputer Anda sendiri, kemudian memanfaatkan mekanisme penyaringan yang buruk dalam aplikasi yang memungkinkan skrip Anda dieksekusi di komputer pengguna lain.

Ketika kita membahas eksploitasi seperti serangan XSS, kita akan mulai dengan aplikasi yang rentan. Aplikasi demo ini akan lugas dan langsung ke intinya, idealnya hanya beberapa paragraf kode. Dari dasar ini, kita akan menulis blok kode untuk disuntikkan sebagai muatan ke dalam aplikasi demo, yang kemudian akan memanfaatkan pengguna hipotetis di sisi lain.

Kedengarannya sederhana, bukan? Dan memang seharusnya begitu. Tanpa pertahanan apa pun, sebagian besar sistem perangkat lunak mudah dibobol. Akibatnya, dengan eksploitasi seperti XSS yang memiliki banyak pertahanan, kita akan semakin mendalami spesifikasi penulisan dan penerapan serangan.

Awalnya, kita akan mencoba membongkar pertahanan rutin dan akhirnya beralih ke mekanisme pertahanan yang lebih canggih. Ingat, hanya karena seseorang membangun tembok untuk mempertahankan basis kode mereka, bukan berarti Anda tidak bisa melewatinya atau melewatinya. Di sinilah kita akan menggunakan kreativitas dan menemukan beberapa solusi yang unik dan menarik.

Bagian II penting karena memahami pola pikir seorang peretas seringkali vital untuk membangun basis kode yang aman. Hal ini sangat penting bagi pembaca mana pun yang tertarik dengan peretasan, uji penetrasi, atau perburuan bug bounty.

Pertahanan

Bagian ketiga dan terakhir dari buku ini, "Pertahanan", membahas mengamankan kode Anda sendiri dari peretas. Di Bagian III, kita meninjau kembali setiap jenis eksploitasi yang telah dibahas di Bagian II dan mencoba mempertimbangkannya kembali dengan sudut pandang yang sepenuhnya berlawanan. Kali ini, kita tidak akan berfokus pada pembobolan sistem perangkat lunak, melainkan mencoba mencegah atau memitigasi kemungkinan peretas dapat membobol sistem kita.

Di Bagian III, Anda akan mempelajari cara melindungi diri dari eksploitasi spesifik dari Bagian II, selain mempelajari perlindungan umum yang akan mengamankan basis kode Anda dari berbagai serangan. Perlindungan umum ini berkisar dari metodologi rekayasa "aman secara default", hingga praktik terbaik pengodean aman yang dapat diterapkan dengan mudah oleh tim rekayasa menggunakan pengujian dan perkakas otomatis sederhana lainnya (seperti linter).

Selain mempelajari cara menulis kode yang lebih aman, Anda juga akan mempelajari sejumlah trik yang semakin berharga untuk menangkap peretas yang sedang beraksi dan meningkatkan sikap organisasi Anda terhadap keamanan perangkat lunak.

Sebagian besar bab di Bagian III direstrukturisasi agak mirip dengan bab-bab peretasan di Bagian II. Kita mulai dengan ikhtisar teknologi dan keterampilan yang dibutuhkan saat kita mulai mempersiapkan pertahanan terhadap jenis serangan tertentu.

Awalnya, kita akan mempersiapkan pertahanan tingkat dasar, yang seharusnya membantu memitigasi serangan tetapi mungkin tidak selalu menangkis peretas yang paling gigih. Terakhir, kita akan meningkatkan pertahanan kita hingga titik di mana sebagian besar, jika tidak semua, upaya peretasan akan dihentikan.

Pada titik ini, struktur Bagian III mulai berbeda dari Bagian II saat kita membahas trade-off yang dihasilkan dari peningkatan keamanan aplikasi. Secara umum, semua langkah peningkatan keamanan akan memiliki beberapa jenis trade-off di luar keamanan. Mungkin bukan tugas Anda untuk memberikan saran tentang tingkat risiko yang harus diterima dengan mengorbankan produk Anda, tetapi Anda harus menyadari adanya kompromi yang dilakukan.

Seringkali, kompromi ini muncul dalam bentuk kinerja aplikasi. Semakin banyak upaya yang Anda lakukan untuk membaca dan membersihkan data, semakin banyak operasi yang dilakukan di luar fungsionalitas standar aplikasi Anda. Oleh karena itu, fitur yang aman biasanya membutuhkan lebih banyak sumber daya komputasi daripada fitur yang tidak aman.

Dengan operasi lebih lanjut, juga dibutuhkan lebih banyak kode, yang berarti lebih banyak waktu pemeliharaan, pengujian, dan rekayasa. Overhead pengembangan terhadap keamanan ini sering kali muncul dalam bentuk overhead pencatatan atau pemantauan.

Terakhir, beberapa tindakan pencegahan keamanan akan mengorbankan berkurangnya kegunaan.

EVALUASI TRADE-OFF

Contoh sederhana dari proses membandingkan manfaat keamanan dengan biayanya, dalam hal kegunaan dan kinerja, adalah formulir login. Jika pesan kesalahan untuk nama pengguna yang tidak valid ditampilkan kepada pengguna saat mencoba login, peretas akan jauh lebih mudah untuk melakukan brute force pada kombinasi nama pengguna/sandi. Hal ini terjadi karena peretas tidak perlu lagi mencari daftar nama pengguna login yang aktif, karena aplikasi akan mengonfirmasi akun pengguna. Peretas hanya perlu berhasil melakukan brute force pada beberapa nama pengguna, yang dapat dikonfirmasi dan dicatat untuk upaya pembobolan selanjutnya.

Selanjutnya, peretas hanya perlu melakukan brute force pada kata sandi, alih-alih kombinasi nama pengguna/sandi, yang menyiratkan kompleksitas matematika yang jauh berkurang dan membutuhkan waktu serta sumber daya yang jauh lebih sedikit.

Lebih lanjut, jika aplikasi menggunakan skema email dan kata sandi untuk login, alih-alih skema nama pengguna dan kata sandi, maka kita memiliki masalah lain. Peretas dapat menggunakan formulir login ini untuk menemukan alamat email valid yang dapat dijual untuk tujuan pemasaran atau spam. Meskipun tindakan pencegahan telah diambil untuk mencegah brute forcing, input yang dibuat dengan cermat (misalnya, first.last@company.com, firstlast@company.com, firstl@company.com) dapat memungkinkan peretas untuk merekayasa balik skema yang digunakan untuk akun email perusahaan dan menemukan akun valid milik eksekutif untuk penjualan atau individu dengan kriteria akses penting untuk phishing.

Oleh karena itu, memberikan pesan kesalahan yang lebih umum kepada pengguna sering dianggap sebagai praktik terbaik. Tentu saja, perubahan ini bertentangan dengan pengalaman pengguna karena pesan kesalahan yang lebih spesifik sangat ideal untuk kegunaan aplikasi Anda.

Ini adalah contoh bagus tentang kompromi yang dapat dilakukan untuk meningkatkan keamanan aplikasi, tetapi dengan mengorbankan kegunaan yang berkurang. Ini akan memberi Anda gambaran tentang jenis kompromi yang dibahas di Bagian III buku ini.

Bagian buku ini sangat penting bagi setiap insinyur keamanan yang ingin meningkatkan keterampilan mereka, atau insinyur perangkat lunak yang ingin beralih ke peran insinyur keamanan. Informasi yang disajikan di sini akan membantu dalam merancang dan menulis aplikasi yang lebih aman.

Seperti di Bagian II, memahami bagaimana keamanan aplikasi dapat ditingkatkan merupakan aset berharga bagi semua jenis peretas. Hal ini karena meskipun pertahanan rutin seringkali dapat dengan mudah ditembus, pertahanan yang lebih kompleks membutuhkan pemahaman dan pengetahuan yang lebih mendalam untuk ditembus. Ini adalah bukti lebih lanjut mengapa saya menyarankan untuk membaca buku ini dari awal hingga akhir.

Meskipun beberapa bagian dari buku ini mungkin memberi Anda pembelajaran yang lebih berharga daripada yang lain, tergantung pada tujuan Anda, saya ragu ada yang akan terbuang sia-sia. Pelatihan silang semacam ini sangat berharga, karena setiap bagian dari buku ini hanyalah perspektif lain tentang teka-teki yang sama.

Bahasa dan Terminologi

Mungkin sudah jelas sekarang bahwa buku ini bertujuan untuk mengajarkan Anda sejumlah keterampilan yang sangat berguna tetapi juga sangat langka dan khusus. Meskipun keterampilan ini semakin berharga, dan akan sangat meningkatkan daya jual Anda di pasar kerja, keterampilan ini juga cukup sulit dipelajari, membutuhkan fokus, bakat, dan kapasitas untuk memahami model mental baru yang mendefinisikan cara Anda memandang aplikasi web.

Untuk mengomunikasikan keterampilan baru ini dengan benar, kita perlu membangun suatu bahasa umum. Hal ini penting untuk membantu saya memandu Anda membaca buku ini tanpa kebingungan, dan juga untuk membantu Anda mengekspresikan ide-ide baru Anda dengan cara yang konsisten di seluruh organisasi keamanan dan teknik.

Setiap kali saya memperkenalkan istilah atau frasa baru, saya berusaha sebaik mungkin untuk menjelaskannya. Khususnya, ketika membahas akronim, saya mengeja akronimnya terlebih dahulu sebelum menggunakan akronim itu sendiri. Anda melihat ini sebelumnya ketika saya mengeja Cross-Site Scripting (XSS).

Selain itu, saya telah berupaya sebaik mungkin untuk menentukan istilah dan frasa apa saja yang mungkin perlu dijelaskan. Saya telah mengumpulkannya dan mengelompokkannya ke dalam tabel-tabel berikut (Tabel P-1 hingga P-3).

Jika Anda menemukan istilah atau frasa yang belum sepenuhnya Anda pahami, silakan kembali ke bab ini (tandai saja!) dan lihat apakah tercantum di sini. Jika tidak, silakan kirim email ke editor saya, dan mungkin kita bisa memasukkannya di edisi buku berikutnya—jika saya cukup beruntung untuk menjual cukup banyak eksemplar sehingga layak untuk diterbitkan lanjutannya!

Table P-1. Pekerjaan

Pekerjaan

Deskripsi

Hacker

Seseorang yang membobol sistem, biasanya untuk mencuri data atau membuat sistem bekerja dengan cara yang tidak diinginkan oleh pengembangnya.

White hat

Terkadang disebut "peretas etis" — seseorang yang menggunakan teknik peretasan untuk membantu organisasi meningkatkan keamanan.

Black hat

Peretas arketipe — seseorang yang menggunakan teknik peretasan untuk membobol sistem demi keuntungan, menyebabkan kekacauan, atau untuk memenuhi tujuan dan kepentingan mereka sendiri.

Grey hat

Seorang peretas yang berada di antara topi putih dan topi hitam; terkadang peretas ini akan melanggar hukum seperti mencoba membobol aplikasi tanpa izin, tetapi seringkali demi penemuan atau pengakuan alih-alih keuntungan atau untuk menyebabkan kekacauan.

Penetration tester

Seseorang yang dibayar untuk membobol sistem, seringkali dengan cara yang sama seperti yang dilakukan peretas. Berbeda dengan peretas, penguji penetrasi dibayar untuk melaporkan bug dan kelalaian dalam perangkat lunak aplikasi sehingga perusahaan yang memiliki perangkat lunak tersebut dapat memperbaikinya sebelum dibobol oleh peretas dengan niat jahat.

Bug bounty hunter

Penguji penetrasi lepas. Seringkali, perusahaan besar akan membuat "program pengungkapan yang bertanggung jawab" yang memberikan hadiah uang tunai untuk melaporkan celah keamanan. Beberapa pemburu hadiah bug bekerja penuh waktu, tetapi seringkali mereka adalah profesional penuh waktu yang berpartisipasi di luar pekerjaan untuk mendapatkan uang tambahan.

Application Security Engineer

Terkadang disebut "insinyur keamanan produk" — seorang insinyur perangkat lunak yang perannya adalah mengevaluasi dan meningkatkan keamanan basis kode dan arsitektur aplikasi suatu organisasi.

Software security engineer

Seorang insinyur perangkat lunak yang perannya adalah mengembangkan produk terkait keamanan, tetapi tidak selalu bertanggung jawab untuk mengevaluasi keamanan bagi organisasi yang lebih besar.

Admin

Terkadang disebut "admin sistem" atau "administrator sistem". Admin adalah staf teknis yang bertugas memelihara konfigurasi dan waktu aktif pada server web atau aplikasi web.

Scrub master

Jabatan kepemimpinan dalam organisasi teknik yang bertanggung jawab untuk membantu tim teknik dalam merencanakan dan melaksanakan pekerjaan pengembangan.

Security champion

Seorang insinyur perangkat lunak yang tidak berafiliasi dengan organisasi keamanan, atau bertanggung jawab atas pekerjaan keamanan, tetapi tertarik untuk meningkatkan keamanan kode suatu organisasi.

Table P-2. Term (ketentuan)

Term

Deskripsi

Vulnerability

Bug dalam sistem perangkat lunak, sering kali merupakan akibat dari kelalaian teknis atau fungsi yang tidak terduga saat menghubungkan beberapa modulbersama-sama. Jenis bug khusus ini memungkinkan peretas untuk melakukantindakan yang tidak diinginkan terhadap sistem perangkat lunak.

Threat vector or attack vector

Subbagian dari fungsionalitas aplikasi yang dianggap peretas ditulis secara tidak aman, sehingga kemungkinan besar mengandung kerentanan dan menjadi target yang baik untuk peretasan.

Attack Surface

Daftar kerentanan dalam aplikasi yang akan dibuat peretas saat menentukan cara terbaik untuk menyerang sistem perangkat lunak.

Exploit

Biasanya berupa blok kode atau daftar perintah yang dapat digunakan untuk memanfaatkan kerentanan.

Payload

Eksploitasi yang telah diformat sedemikian rupa sehingga memungkinkannya dikirim ke server untuk memanfaatkan kerentanan. Seringkali ini berarti mengemas eksploitasi ke dalam format yang tepat untuk dikirim melalui jaringan.

Red team

Tim yang sering kali terdiri dari penguji penetrasi, teknisi keamanan jaringan, dan teknisi keamanan perangkat lunak. Tim ini berupaya meretas perangkat lunak perusahaan untuk menilai kemampuan perusahaan dalam melawan peretas sungguhan.

Blue team

Tim yang sering kali terdiri dari teknisi keamanan perangkat lunak dan teknisi keamanan jaringan. Tim ini berupaya meningkatkan keamanan perangkat lunak perusahaan, sering kali menggunakan umpan balik dari tim merah untuk mendorong penentuan prioritas.

Purple team

Tim yang menjalankan kombinasi tanggung jawab peran tim merah dan tim biru. Tim keamanan yang bersifat umum, alih-alih tim khusus, seringkali lebih sulit untuk mendapatkan staf yang tepat karena persyaratan keterampilan yang luas.

Website

Serangkaian dokumen informasi yang dapat diakses melalui internet, biasanya melalui protokol HTTP.

Web application

Aplikasi seperti desktop yang dikirimkan melalui internet dan dijalankan di dalam peramban, alih-alih sistem operasi host. Ini berbeda dari situs web tradisional karena memiliki banyak tingkat izin, menyimpan masukan pengguna dalam basis data, dan sering kali memungkinkan pengguna untuk berbagi konten satu sama lain.

Hybrid application

Aplikasi seluler yang dibangun di atas teknologi berbasis web. Biasanya, ini menggunakan pustaka lain, seperti Cordova milik Apache, untuk berbagi fungsionalitas asli dengan aplikasi web di atasnya.

Table P-3. Akronim

Akronim

Deskripsi

API

Application programming interface, Antarmuka pemrograman aplikasi—seperangkat fungsi yang diekspos oleh satu modul kode dengan tujuan agar kode lain dapat menggunakan dan memanfaatkannya. Biasanya digunakan dalam buku ini ketika merujuk pada fungsi yang diekspos melalui HTTP yang dapat dipanggil oleh peramban di server. Dapat juga digunakan ketika merujuk pada modul yang berkomunikasi secara lokal, termasuk modul terpisah dalam paket perangkat lunak yang sama.

CSRF

Cross-Site Request Forgery, Pemalsuan Permintaan Lintas Situs—serangan di mana peretas dapat memanfaatkan izin pengguna istimewa untuk mengajukan permintaan terhadap server.

CSS

Cascading Style Sheets bahasa gaya yang biasanya digunakan dalam kombinasi dengan HTML untuk menciptakan UI yang menarik secara visual dan selaras dengan benar.

DDoS

Distributed denial of service, Serangan DoS yang dilakukan dalam skala besar oleh beberapa komputer sekaligus, membanjiri server dengan jumlah yang sangat banyak; satu komputer saja kemungkinan besar tidak akan mampu menyebabkan kekacauan seperti itu.

DOM

Document Object Model, API yang disertakan dengan setiap peramban web. Mencakup semua fungsi yang diperlukan untuk mengatur dan mengelola HTML di halaman, beserta API untuk mengelola riwayat, kuki, URL, dan fungsi peramban umum lainnya.

DoS

Denial of Service, Serangan yang berfokus bukan pada pencurian data, melainkan pada permintaan sumber daya server atau klien yang begitu banyak sehingga pengalaman pengguna aplikasi menjadi lebih buruk atau aplikasi tersebut tidak lagi berfungsi.

HTML

HyperText Markup Language, bahasa templating yang digunakan di web bersama CSS dan JavaScript.

HTTP

HyperText Transfer Protocol, protokol jaringan yang paling umum digunakan untuk berkomunikasi antara klien dan server dalam aplikasi web atau situs web.

HTTPS

HyperText Transfer Protocol Secure, Lalu lintas HTTP yang dienkripsi menggunakan HTTP melalui TLS atau HTTP melalui SSL.

JSON

JavaScript Object Notation, Spesifikasi untuk menyimpan data hierarkis dengan cara yang ringan, mudah dibaca manusia, dan mudah dibaca mesin. Sering digunakan saat berkomunikasi antara peramban dan server web dalam aplikasi web modern.

OOP

Object-oriented programming, model pemrograman yang mengorganisasikan kode di sekitar objek dan struktur data, alih-alih fungsionalitas atau logika.

OSS

Open source software, Perangkat lunak yang tersedia secara bebas untuk konsumsi dan modifikasi. Sering kali diterbitkan di bawah lisensi seperti MIT, Apache, GNU, atau BSD.

REST

Representational State Transfer, Arsitektur khusus untuk membangun API stateless yang mendefinisikan titik akhir API sebagai sumber daya, alih-alih unit fungsional. Banyak format data diizinkan dalam REST, tetapi biasanya JSON digunakan.

RTC

Real time communication, protokol jaringan baru yang memungkinkan peramban berkomunikasi satu sama lain dan server web.

SOAP

Simple Object Access Protocol, protokol untuk API berbasis fungsi yang memerlukan skema tertulis yang ketat. Hanya mendukung XML sebagai format data.

SOP

Same Origin Policy, kebijakan yang diberlakukan oleh browser yang mencegah konten dari satu sumber dimuat di sumber lain.

SPA

Single-page application, biasa disebut single-page web application (SPWA). Merujuk pada situs web di internet yang fungsinya mirip dengan aplikasi desktop yang mengelola UI dan statusnya sendiri, alih-alih menggunakan pengaturan bawaan yang disediakan browser.

SSDL

Secure software development life cycle, Disebut juga SDLC/SDL. Sebuah kerangka kerja umum yang memungkinkan para insinyur perangkat lunak dan insinyur keamanan bekerja sama untuk menulis kode yang lebih aman.

SSL

Secure Sockets Layer, protokol kriptografi yang dirancang untuk mengamankan informasi saat transit (melalui jaringan), khususnya untuk digunakan dalam HTTP.

TLS

Transport Layer Security, protokol kriptografi yang dirancang untuk mengamankan informasi yang sedang dikirim (melalui jaringan), biasanya digunakan dalam HTTP. Protokol ini menggantikan SSL, yang sekarang sudah tidak digunakan lagi.

VCS

Version control system, Jenis perangkat lunak khusus yang digunakan untuk mengelola penambahan dan penyuntingan historis dari basis kode. Terkadang juga menyertakan fitur manajemen dependensi dan kolaborasi.

XML

Extensible Markup Language, spesifikasi untuk menyimpan data hierarkis yang mematuhi serangkaian aturan ketat. Lebih berat daripada JSON tetapi lebih mudah dikonfigurasi.

XSS

Cross-Site Scripting, jenis serangan yang memaksa klien lain (seringkali peramban) untuk menjalankan kode yang ditulis oleh peretas.

XXE

XML External Entity, serangan yang mengandalkan parser XML yang tidak dikonfigurasi dengan benar untuk mencuri berkas lokal di server web atau memasukkan berkas berbahaya dari server web lain.

Ringkasan

Buku ini memiliki beragam aspek yang dirancang untuk bermanfaat bagi mereka yang memiliki minat keamanan ofensif maupun defensif. Buku ini juga ditulis agar mudah diakses oleh semua jenis pengembang atau administrator dengan latar belakang pemrograman web yang memadai (klien + server) untuk dipahami dan digunakan.

Web Application Security memandu Anda melalui sejumlah teknik yang digunakan oleh peretas berbakat dan pemburu bug bounty untuk membobol aplikasi, lalu mengajarkan Anda teknik dan proses yang dapat Anda terapkan dalam perangkat lunak Anda sendiri untuk melindungi diri dari peretas semacam itu.

Buku ini dirancang untuk dibaca dari awal hingga akhir, tetapi juga dapat digunakan sebagai referensi sesuai permintaan untuk jenis-jenis teknik pengintaian, serangan, dan pertahanan terhadap serangan tertentu. Pada akhirnya, buku ini ditulis untuk membantu pembaca menjadi lebih baik dalam keamanan aplikasi web dengan cara yang praktis, langsung, dan mengikuti perkembangan logis sehingga tidak diperlukan pengalaman keamanan sebelumnya yang signifikan.

Saya sangat berharap ratusan jam yang telah dicurahkan untuk menulis buku ini bermanfaat bagi Anda (pembaca), dan Anda memperoleh pembelajaran menarik dari isinya. Anda dipersilakan untuk menghubungi saya dengan masukan atau saran apa pun untuk edisi mendatang.