Mengembangkan aplikasi aman di Azure

Dalam artikel ini, kami menyajikan aktivitas dan kontrol keamanan untuk dipertimbangkan ketika Anda mengembangkan aplikasi untuk cloud. Pertanyaan dan konsep keamanan yang perlu dipertimbangkan selama fase implementasi dan verifikasi Microsoft Security Development Lifecycle (SDL) tercakup. Tujuannya adalah untuk membantu Anda menentukan aktivitas dan layanan Azure yang dapat Anda gunakan untuk mengembangkan aplikasi yang lebih aman.

Tahap SDL berikut tercakup dalam artikel ini:

  • Implementasi
  • Verifikasi

Implementasi

Fokus dari fase implementasi adalah untuk menetapkan praktik terbaik untuk pencegahan dini dan untuk mendeteksi dan menghapus masalah keamanan dari kode. Asumsikan bahwa aplikasi Anda digunakan dengan cara yang anda tidak berniat untuk digunakan. Ini membantu Anda menjaga terhadap penyalahgunaan aplikasi Anda yang tidak disengaja atau disengaja.

Melakukan peninjauan kode

Sebelum Anda cek masuk kode, lakukan peninjauan kode untuk meningkatkan kualitas kode keseluruhan dan mengurangi risiko membuat bug. Anda dapat menggunakan Visual Studio untuk mengelola proses peninjauan kode.

Melakukan analisis kode statis

Analisis kode statis (juga dikenal sebagai analisis kode sumber) dilakukan sebagai bagian dari tinjauan kode. Analisis kode statis biasanya mengacu pada menjalankan alat analisis kode statis untuk menemukan potensi kerentanan dalam kode nonrunning. Analisis kode statis menggunakan teknik seperti pemeriksaan taint dan analisis aliran data.

Marketplace Azure menawarkan alat pengembang yang melakukan analisis kode statis dan membantu dengan peninjauan kode.

Memvalidasi dan membersihkan setiap input untuk aplikasi Anda

Perlakukan semua input sebagai tidak tepercaya untuk melindungi aplikasi Anda dari kerentanan aplikasi web yang paling umum. Data yang tidak tepercaya adalah kendaraan untuk serangan injeksi. Input untuk aplikasi Anda mencakup parameter dalam URL, input dari pengguna, data dari database atau dari API, dan apa pun yang diteruskan yang berpotensi dimanipulasi oleh pengguna. Aplikasi harus memvalidasi bahwa data secara sintaksis dan semantik valid sebelum aplikasi menggunakan data dengan cara apa pun (termasuk menampilkannya kembali kepada pengguna).

Validasi input aliran data awal untuk memastikan bahwa hanya data yang terbentuk dengan benar yang memasuki alur kerja. Anda tidak ingin data yang rusak bertahan di database Anda atau memicu kerusakan pada komponen hilir.

Daftar blokir dan daftar izin adalah dua pendekatan umum untuk melakukan validasi sintaks input:

  • Daftar blokir mencoba memeriksa bahwa input pengguna tertentu tidak berisi konten "dikenal berbahaya".

  • Mengizinkan upaya untuk memeriksa apakah input pengguna yang diberikan cocok dengan kumpulan input "dikenal baik". Daftar izin berbasis karakter adalah bentuk daftar izin di mana aplikasi memeriksa bahwa input pengguna hanya berisi karakter "dikenal baik" atau input yang cocok dengan format yang diketahui.

    Misalnya, ini mungkin melibatkan pemeriksaan bahwa nama pengguna hanya berisi karakter alfanumerik atau yang berisi tepat dua angka.

Daftar izin adalah pendekatan yang disukai untuk membangun perangkat lunak yang aman. Daftar blokir rentan terhadap kesalahan karena tidak mungkin memikirkan daftar lengkap input yang berpotensi buruk.

Lakukan pekerjaan ini di server, bukan di sisi klien (atau di server dan di sisi klien).

Memverifikasi output aplikasi Anda

Output apa pun yang Anda sajikan baik secara visual maupun dalam dokumen harus selalu dikodekan dan dilepaskan. Pelepasan, juga dikenal sebagai pengodean output, digunakan untuk membantu memastikan bahwa data yang tidak tepercaya bukanlah kendaraan untuk serangan injeksi. Pelepasan, dikombinasikan dengan validasi data, menyediakan pertahanan berlapis untuk meningkatkan keamanan sistem secara keseluruhan.

Pelepasan memastikan bahwa semuanya ditampilkan sebagai output. Pelepasan juga memungkinkan penafsir mengetahui bahwa data tidak dimaksudkan untuk dijalankan, dan hal ini mencegah serangan menjadi aktif. Ini adalah teknik serangan umum lainnya yang disebut scripting lintas situs (XSS).

Jika Anda menggunakan kerangka kerja web dari pihak ketiga, Anda dapat memverifikasi opsi untuk pengodean output di situs web dengan menggunakan referensi cepat pencegahan OWASP XSS.

Menggunakan kueri yang di parameter saat Anda menghubungi database

Jangan pernah membuat kueri database sebaris "dengan cepat" dalam kode Anda dan mengirim langsung ke database. Kode berbahaya yang dimasukkan ke dalam aplikasi Anda berpotensi menyebabkan database Anda dicuri, dihapus, atau dimodifikasi. Aplikasi Anda juga dapat digunakan untuk menjalankan perintah sistem operasi berbahaya pada sistem operasi yang meng-host database Anda.

Sebagai gantinya, gunakan kueri yang diparameter atau prosedur yang disimpan. Saat Anda menggunakan kueri diparameter, Anda dapat memanggil prosedur dari kode Anda dengan aman dan meneruskannya string tanpa khawatir bahwa itu akan diperlakukan sebagai bagian dari pernyataan kueri.

Menghapus header server standar

Header seperti Server, X-Powered-By, dan X-AspNet-Version mengungkapkan informasi tentang server dan teknologi yang mendasarinya. Kami menyarankan agar Anda menekan header ini untuk menghindari sidik jari aplikasi. Lihat menghapus header server standar di situs web Azure.

Memisahkan data produksi Anda

Data produksi Anda, atau data "nyata", tidak boleh digunakan untuk pengembangan, pengujian, atau tujuan lain selain apa yang dimaksudkan bisnis. Kumpulan databer topeng (anonim) harus digunakan untuk semua pengembangan dan pengujian.

Ini berarti lebih sedikit orang yang memiliki akses ke data nyata Anda, yang mengurangi permukaan serangan Anda. Ini juga berarti lebih sedikit pekerja melihat data pribadi, yang menghilangkan potensi pelanggaran dalam kerahasiaan.

Menerapkan kebijakan kata sandi yang kuat

Untuk mempertahankan terhadap tebakan brute force dan berbasis kamus, Anda harus menerapkan kebijakan kata sandi yang kuat untuk memastikan bahwa pengguna membuat kata sandi yang kompleks (misalnya, panjang minimum 12 karakter dan membutuhkan karakter alfanumerik dan khusus).

Azure Active Directory B2C membantu Anda menangani kata sandi, dengan menyediakan pengaturan ulang kata sandi mandiri, mengatur ulang kata sandi secara paksa, dan banyak lagi.

Untuk mempertahankan serangan pada akun default, verifikasi bahwa semua kunci dan kata sandi dapat diganti dan bahwa kunci tersebut dibuat atau diganti setelah Anda memasang sumber daya.

Jika aplikasi harus mengotomatiskan kata sandi, pastikan bahwa kata sandi yang dihasilkan acak dan bahwa mereka memiliki entropi tinggi.

Memvalidasi unggahan file

Jika aplikasi Anda memungkinkan pengunggahan file, pertimbangkan tindakan pencegahan yang dapat Anda ambil untuk aktivitas berisiko ini. Langkah pertama dalam banyak serangan adalah mendapatkan beberapa kode berbahaya ke dalam sistem yang sedang diserang. Menggunakan unggahan file membantu penyerang menyelesaikan ini. OWASP menawarkan solusi untuk memvalidasi file untuk memastikan bahwa file yang Anda unggah aman.

Perlindungan antimalware membantu mengidentifikasi dan menghapus virus, spyware, dan perangkat lunak berbahaya lainnya. Anda dapat menginstal Microsoft Antimalware atau solusi perlindungan titik akhir mitra Microsoft (Trend Micro, Broadcom, McAfee, Microsoft Defender Antivirus di Windows, dan Perlindungan Titik Akhir).

Microsoft Antimalware mencakup fitur seperti perlindungan real time, pemindaian terjadwal, remediasi malware, pembaruan tanda tangan, pembaruan mesin, pelaporan sampel, dan pengumpulan peristiwa pengecualian. Anda dapat mengintegrasikan Microsoft Antimalware dan solusi mitra dengan Pertahanan Microsoft untuk Cloud untuk kemudahan dalam penyebaran dan deteksi bawaan (pemberitahuan dan insiden).

Jangan cache konten sensitif

Jangan cache konten sensitif di browser. Browser dapat menyimpan informasi untuk penembolokan dan riwayat. File cache disimpan dalam file seperti folder File Internet Sementara, dalam kasus Internet Explorer. Ketika halaman-halaman ini dirujuk lagi, browser menampilkan halaman dari cache-nya. Jika informasi sensitif (alamat, detail kartu kredit, Nomor jaminan sosial, nama pengguna) ditampilkan kepada pengguna, informasi mungkin disimpan di cache browser dan dapat diambil dengan memeriksa cache browser atau dengan menekan tombol Kembali browser.

Verifikasi

Fase verifikasi melibatkan upaya komprehensif untuk memastikan bahwa kode tersebut memenuhi tenet keamanan dan privasi yang ditetapkan pada fase sebelumnya.

Menemukan dan memperbaiki kerentanan dalam dependensi aplikasi Anda

Anda memindai aplikasi Anda dan perpustakaan dependennya untuk mengidentifikasi komponen rentan yang diketahui. Produk yang tersedia untuk melakukan pemindaian ini termasuk Pemeriksaan Dependensi OWASP, Snyk, dan Black Duck.

Menguji aplikasi Anda dalam status operasi

Pengujian keamanan aplikasi Dinamis (DAST) adalah proses pengujian aplikasi dalam keadaan operasi untuk menemukan kerentanan keamanan. Alat DAST menganalisis program saat mereka menjalankan untuk menemukan kerentanan keamanan seperti kerusakan memori, konfigurasi server yang tidak aman, scripting lintas situs, masalah hak istimewa pengguna, injeksi SQL, dan masalah keamanan penting lainnya.

DAST berbeda dengan pengujian keamanan aplikasi statis (SAST). Alat SAST menganalisis kode sumber atau versi kode yang dikompilasi saat kode tidak dijalankan untuk menemukan kelemahan keamanan.

Lakukan DAST, sebaiknya dengan bantuan profesional keamanan (penguji penetrasi atau penilai kerentanan). Jika profesional keamanan tidak tersedia, Anda dapat melakukan DAST sendiri dengan pemindai proksi web dan beberapa pelatihan. Plug in pemindai DAST sejak awal untuk memastikan bahwa Anda tidak memperkenalkan masalah keamanan yang jelas ke dalam kode Anda. Lihat situs OWASP untuk daftar pemindai kerentanan aplikasi web.

Melakukan pengujian fuzz

Dalam pengujian fuzz, Anda menginduksi kegagalan program dengan sengaja memperkenalkan data yang salah bentuk atau acak ke aplikasi. Menginduksi kegagalan program membantu mengungkapkan potensi masalah keamanan sebelum aplikasi dirilis.

Deteksi Risiko Keamanan adalah layanan pengujian fuzz unik Microsoft untuk menemukan bug sangat aman dalam perangkat lunak.

Melakukan tinjauan permukaan serangan

Meninjau permukaan serangan setelah penyelesaian kode membantu memastikan bahwa setiap perubahan desain atau implementasi pada aplikasi atau sistem telah dipertimbangkan. Ini membantu memastikan bahwa setiap vektor serangan baru yang dibuat sebagai akibat dari perubahan, termasuk model ancaman, telah ditinjau dan dimitigasi.

Anda dapat membuat gambar permukaan serangan dengan memindai aplikasi. Microsoft menawarkan alat analisis permukaan serangan yang disebut Attack Surface Analyzer. Anda dapat memilih dari banyak alat atau layanan pengujian dan pemindaian kerentanan dinamis komersial, termasuk Detektor Permukaan Serangan OWASP, Arachni, dan w3af. Alat pemindaian ini merayapi aplikasi Anda dan memetakan bagian-bagian aplikasi yang dapat diakses melalui web. Anda juga dapat mencari di Marketplace Microsoft Azure untuk alat pengembang serupa.

Melakukan pengujian penetrasi keamanan

Memastikan bahwa aplikasi Anda aman sama pentingnya dengan menguji fungsionalitas lainnya. Jadikan pengujian penetrasi sebagai bagian standar dari proses pembangunan dan penyebaran. Jadwalkan pengujian keamanan reguler dan pemindaian kerentanan pada aplikasi yang diterapkan, dan pantau port terbuka, titik akhir, dan serangan.

Menjalankan tes verifikasi keamanan

Azure Tenant Security Solution (AzTS) dari Secure DevOps Kit for Azure (AzSK) berisi SVT untuk beberapa layanan platform Azure. Anda menjalankan tes verifikasi keamanan ini secara berkala untuk memastikan bahwa langganan Azure Anda dan berbagai sumber daya yang terdiri dari aplikasi Anda dalam keadaan aman. Anda juga dapat mengotomatiskan pengujian ini dengan menggunakan fitur ekstensi integrasi berkelanjutan/penerapan berkelanjutan (CI/CD) AzSK, yang membuat tes pengujian keamanan tersedia sebagai ekstensi Visual Studio.

Langkah berikutnya

Dalam artikel berikut, kami merekomendasikan kontrol dan aktivitas keamanan yang dapat membantu Anda merancang dan menyebarkan aplikasi yang aman.