Kontrol Proaktif OWASP: Daftar Prasyarat untuk Pengembang Perangkat Lunak

gambar

Kami memberi perhatian Anda Top 10 Kontrol Proaktif untuk pengembang Perangkat Lunak - 10 aspek keamanan yang harus menjadi fokus pengembang perangkat lunak. Artikel ini berisi daftar teknik keselamatan yang diperlukan untuk diterapkan ketika mengembangkan setiap proyek baru.

Perangkat lunak yang tidak terlindungi secara memadai merusak keamanan fasilitas infrastruktur penting, seperti perawatan kesehatan, pertahanan, energi, atau keuangan. Infrastruktur digital global kami menjadi semakin kompleks, jumlah hubungan antar komponennya meningkat, sehingga pentingnya keamanan aplikasi tumbuh secara eksponensial. Ancaman keamanan yang relatif sederhana tidak lagi dapat diabaikan.

OWASP


Proyek Keamanan Aplikasi Web Terbuka (OWASP) adalah proyek keamanan aplikasi web sumber terbuka. Komunitas OWASP mencakup perusahaan, organisasi pendidikan, dan individu dari seluruh dunia. OWASP sedang mengerjakan artikel, tutorial, dokumentasi, alat, dan teknologi yang dapat diakses publik.

Proyek OWASP dirujuk oleh banyak standar, alat, dan organisasi, termasuk MITER, PCI DSS, DISA, FTC, dan banyak lainnya.

Proyek Pertahanan Proaktif: Top-10 Persyaratan OWASP mirip dengan proyek Top 10 OWASP, tetapi berfokus pada metode dan rekomendasi untuk melindungi terhadap ancaman, dan bukan pada ancaman itu sendiri. Setiap metode dan rekomendasi dalam dokumen ini dikaitkan dengan satu atau lebih ancaman dari daftar OWASP Top-10.

Tujuan dan sasaran


Tujuan dari Pertahanan Proaktif: OWASP Top 10 Persyaratan proyek adalah untuk menarik perhatian pada keamanan aplikasi dengan menangani aspek paling penting dari keamanan informasi yang harus dipertimbangkan oleh pengembang perangkat lunak. Kami mendorong organisasi untuk mengambil keuntungan dari rekomendasi pertahanan proaktif OWASP dan mengajari pengembang cara memperhatikan keamanan aplikasi, memberi arti penting pada kesalahan yang terjadi di organisasi lain. Kami berharap rekomendasi OWASP akan bermanfaat bagi Anda saat membuat aplikasi yang aman.

Target audiens


Dokumen ini ditujukan terutama untuk pengembang. Namun, ini akan berguna untuk manajer pengembangan, manajer produk, spesialis jaminan kualitas, manajer proyek, serta peserta lain dalam proses pembuatan perangkat lunak.

10 Persyaratan Pertahanan Proaktif Teratas


C1: Definisi persyaratan keselamatan


Persyaratan keamanan menjelaskan fungsi yang harus diterapkan untuk menyediakan pengaturan keamanan perangkat lunak tertentu. Mereka didasarkan pada standar industri, hukum yang berlaku, dan data kerentanan. Persyaratan menentukan fungsi yang perlu dikembangkan atau dikembangkan lebih lanjut untuk menyelesaikan masalah keamanan tertentu atau menghilangkan potensi ancaman.

Standar Sertifikasi Keamanan Aplikasi OWASP (ASVS) adalah katalog persyaratan keamanan dan opsi verifikasi yang tersedia. OWASP ASVS dapat memberikan persyaratan keamanan canggih untuk tim pengembangan.

Persyaratan keamanan dikategorikan berdasarkan fungsi keamanan tingkat tinggi yang umum. Misalnya, ASVS berisi kategori berikut: otentikasi, kontrol akses, penanganan kesalahan dan pencatatan, dan layanan web. Untuk setiap kategori ada daftar parameter yang direkomendasikan untuk diperiksa.

Proses penerapan persyaratan keamanan yang berhasil mencakup empat tahap: pencarian dan pemilihan, dokumentasi, implementasi, konfirmasi implementasi yang benar dari fungsi keamanan baru dan fungsionalitas aplikasi.

C2: Menggunakan kerangka kerja aman dan perpustakaan


Perpustakaan dan kerangka kerja yang aman dengan fitur keamanan internal membantu pengembang menghindari kerentanan selama fase pengembangan dan implementasi. Pengembang yang membangun aplikasi dari awal mungkin tidak memiliki pengetahuan, waktu, atau uang yang cukup untuk mengimplementasikan atau menjaga keamanan aplikasi. Menggunakan kerangka kerja yang aman dapat meningkatkan tingkat keamanan aplikasi.

Saat Anda memasukkan pustaka atau kerangka kerja pihak ketiga dalam perangkat lunak Anda, rekomendasi berikut harus dipertimbangkan:

  • Gunakan perpustakaan dan kerangka kerja dari sumber tepercaya yang secara aktif dikembangkan dan digunakan secara luas dalam aplikasi;
  • kompilasi dan tetap perbarui katalog semua perpustakaan pihak ketiga;
  • tetap perbarui perpustakaan dan komponennya. Gunakan alat seperti OWASP dan Retire.JS Dependency Checks untuk menentukan dependensi dalam proyek, dan juga memeriksa kerentanan yang diketahui dan dipublikasikan dalam kode pihak ketiga;
  • Gunakan enkapsulasi pustaka dan hanya fungsionalitas yang diperlukan untuk perangkat lunak Anda untuk mengurangi kemungkinan serangan.

C3: Menyediakan akses aman ke database


Bagian ini didedikasikan untuk menyediakan akses yang aman ke semua gudang data, termasuk basis data relasional dan basis data NoSQL.

Salah satu ancaman paling serius terhadap keamanan aplikasi adalah injeksi SQL. Jenis serangan ini mudah diterapkan: Kode SQL dapat disuntikkan jika input yang tidak dipercaya ditambahkan secara dinamis ke query SQL, yang biasanya terjadi dengan melampirkannya ke baris utama. Eksploitasi kerentanan ini dapat menyebabkan pencurian, penghapusan, atau pengubahan basis data. Aplikasi ini juga dapat digunakan untuk menjalankan perintah jahat pada sistem yang berisi basis data Anda, yang akan memungkinkan penyerang mendapatkan pijakan di jaringan.

Untuk mencegah injeksi SQL, Anda harus menghindari menafsirkan input yang tidak diverifikasi sebagai bagian dari perintah SQL. Solusi terbaik adalah dengan menggunakan metode "parameterisasi kueri". Metode ini harus diterapkan pada konstruksi SQL dan OQL, serta prosedur yang tersimpan.

Contoh parameterisasi kueri untuk ASP, ColdFusion, C #, Delphi, .NET, Go, Java, Perl, PHP, PL / SQL, PostgreSQL, Python, R, Ruby, dan Skema dapat ditemukan di http://bobby-tables.com dan dalam memo OWASP untuk parameterisasi kueri .

C4: Encoding dan Perisai Data


Pengkodean dan melarikan diri adalah metode perlindungan terhadap injeksi kode. Pengkodean, juga disebut "keluaran pengkodean," adalah konversi karakter khusus menjadi kombinasi yang setara yang tidak berbahaya bagi penerjemah. Misalnya, karakter <dikonversi ke kombinasi <ketika ditambahkan ke halaman HTML. Melarikan diri terdiri dari menambahkan karakter khusus di depan karakter atau string untuk mencegah mereka ditafsirkan secara salah, misalnya, menambahkan \ karakter sebelum "(tanda kutip ganda) memungkinkan Anda untuk menafsirkannya sebagai bagian dari teks, dan bukan sebagai terminator garis.

Pengkodean paling baik diterapkan segera sebelum mengirimkan data ke juru bahasa. Jika Anda menerapkan metode ini terlalu dini dalam pemrosesan permintaan, penyandian atau perisai dapat memengaruhi penggunaan konten di bagian lain dari program. Misalnya, jika konten HTML lolos sebelum disimpan ke database, dan antarmuka secara otomatis lolos data ini lagi, maka konten tidak akan ditampilkan dengan benar karena pelarian ganda.

Pengkodean atau pelolosan dapat digunakan untuk mencegah bentuk lain dari penyematan konten. Misalnya, Anda dapat menetralkan beberapa karakter khusus saat memasukkan data untuk perintah sistem. Ini disebut "lolos perintah OS", "melarikan diri shell", dll. Perlindungan semacam itu dapat digunakan untuk mencegah "injeksi perintah".

Ada bentuk pelarian lain yang dapat digunakan untuk mencegah injeksi, misalnya, melarikan diri atribut XML yang melindungi terhadap berbagai bentuk embeddings dari jalur XML dan XML, dan keluar dari nama LDAP unik untuk mencegah berbagai injeksi LDAP.

C5: Verifikasi wajib semua input


Validasi data input adalah bagian dari teknik pemrograman yang memastikan bahwa hanya data yang diformat dengan benar yang masuk ke komponen program.

Norma sintaksis dan semantik


Aplikasi harus memeriksa data untuk kesesuaian dengan norma sintaksis dan semantik (dalam urutan itu) sebelum menggunakannya (termasuk tampilan kepada pengguna).

Norma sintaksis berarti bahwa data cocok dengan presentasi yang diharapkan. Misalnya, dalam suatu aplikasi, pengguna dapat menentukan empat digit "pengidentifikasi" untuk melakukan operasi tertentu. Seorang penyerang dapat memasukkan data yang memungkinkannya menyuntikkan kode SQL, sehingga aplikasi harus memverifikasi bahwa data yang dimasukkan benar-benar angka dan tepat dalam jumlah empat karakter (selain menggunakan parameterisasi kueri yang sesuai).

Norma semantik berarti hanya menggunakan data input yang tidak melampaui fungsi dan konteks tertentu. Misalnya, ketika menentukan jangka waktu, tanggal mulai harus mendahului tanggal akhir.

Daftar putih dan hitam


Ada dua pendekatan utama untuk memeriksa sintaks input - pemeriksaan daftar hitam dan daftar putih.

Metode pertama dirancang untuk mencari konten yang "berpotensi berbahaya" dalam data. Misalnya, aplikasi web dapat memblokir input yang mengandung kata SCRIPT untuk mencegah skrip lintas situs. Namun, langkah perlindungan ini dapat dielakkan dengan menggunakan huruf kecil atau kombinasi huruf kecil dan huruf besar untuk tag skrip.

Metode kedua dimaksudkan untuk mengkonfirmasi kepatuhan data dengan persyaratan seperangkat aturan yang "diuji". Misalnya, daftar putih negara bagian AS akan mencari kode 2 huruf dalam daftar negara bagian AS yang ada.

Saat membuat perangkat lunak yang aman, daftar putih direkomendasikan sebagai minimum. Daftar hitam bisa mengandung kesalahan, mereka bisa dielakkan dengan berbagai cara, dan dalam diri mereka bisa berbahaya. Meskipun dimungkinkan untuk melewati batasan daftar hitam, mereka dapat berguna dalam mendeteksi serangan yang jelas. Dengan demikian, daftar putih membantu membatasi kemungkinan serangan dengan memverifikasi bahwa data konsisten dengan norma sintaksis dan semantik, sementara daftar hitam membantu mendeteksi dan mencegah serangan yang jelas.

Sisi klien dan server memeriksa


Untuk memastikan keamanan, verifikasi input harus selalu dilakukan di sisi server. Pemeriksaan sisi klien dapat berguna dalam hal fungsionalitas dan keamanan, tetapi seringkali mudah dielakkan. Oleh karena itu, validasi sisi server lebih disukai untuk keamanan. Misalnya, memeriksa JavaScript dapat memperingatkan pengguna bahwa bidang tersebut hanya boleh berisi angka, tetapi aplikasi di sisi server harus mengonfirmasi bahwa data input adalah angka dalam rentang nilai yang dapat diterima.

C6: Menerapkan Identifikasi Digital


Identifikasi digital adalah representasi unik dari pengguna (atau objek lain) dalam transaksi online. Otentikasi adalah proses untuk mengonfirmasi bahwa seseorang atau entitas adalah siapa dirinya. Manajemen sesi adalah proses dimana server memantau keadaan otentikasi pengguna sehingga ia dapat terus menggunakan sistem tanpa otentikasi ulang. Edisi Khusus NIST 800-63B : Panduan Identifikasi Digital (Otentikasi dan Manajemen Siklus Hidup) memberikan rekomendasi terperinci untuk menerapkan identifikasi digital, otentikasi, dan persyaratan manajemen sesi.

C7: Kontrol Akses Wajib


Kontrol akses (atau otorisasi) terdiri dari mengizinkan atau melarang permintaan khusus dari pengguna, program atau proses, dan juga melibatkan penerbitan dan pencabutan hak istimewa tersebut.

Perlu dicatat bahwa otorisasi (konfirmasi hak akses ke fungsi atau sumber daya khusus) tidak sama dengan otentikasi (verifikasi identitas).

Kontrol akses biasanya mempengaruhi banyak aspek perangkat lunak, tergantung pada kompleksitas sistem kontrol akses. Misalnya, manajemen metadata kontrol akses atau caching untuk tujuan skalabilitas biasanya merupakan komponen tambahan dari sistem kontrol akses yang perlu dibuat atau dipelihara. Ada beberapa pendekatan berbeda untuk kontrol akses:

  • selective access control (DAC) - melibatkan pembatasan akses ke objek (misalnya, file atau elemen data) berdasarkan pengidentifikasi, serta prinsip "pengetahuan yang diperlukan" dari subjek (misalnya, pengguna atau proses) dan / atau grup yang menjadi objek objek;
  • Mandatory Access Control (MAC) - melibatkan pembatasan akses ke sumber daya sistem berdasarkan pada kekritisan data (didefinisikan oleh label) yang terkandung dalam sumber daya ini dan otoritas formal (yaitu akses) pengguna untuk mengakses informasi yang sangat penting;
  • Model kontrol akses berbasis peran (RBAC) - melibatkan pengendalian akses ke sumber daya berdasarkan peran yang mendefinisikan tindakan yang diizinkan dengan sumber daya, dan tidak berdasarkan pada pengidentifikasi subjek;
  • kontrol akses berbasis atribut (ABAC) - melibatkan mengizinkan atau menolak permintaan pengguna berdasarkan atribut pengguna dan atribut objek, serta elemen lingkungan yang dapat didefinisikan secara global dan lebih relevan dengan kebijakan yang berlaku.

C8: Perlindungan data di mana-mana


Data rahasia seperti kata sandi, nomor kartu kredit, catatan medis, data pribadi dan rahasia dagang membutuhkan perlindungan tambahan, terutama jika mereka tunduk pada undang-undang privasi data, seperti Peraturan Perlindungan Data Umum (GDPR) UE, atau undang-undang perlindungan data keuangan, seperti Standar Keamanan Data Kartu Pembayaran (PCI DSS).

Penyerang dapat mencuri data dari aplikasi web dan layanan web dengan berbagai cara. Sebagai contoh, seorang penyerang dapat terhubung ke jaringan nirkabel bersama dan melihat atau mencuri data rahasia dari pengguna lain jika mereka dikirim melalui koneksi internet yang tidak aman. Penyerang juga dapat menggunakan injeksi SQL untuk mencuri kata sandi dan kredensial lain dari aplikasi, dan kemudian menempatkannya di domain publik.

Klasifikasi data


Anda perlu mengklasifikasikan data dalam sistem Anda dan menentukan tingkat kekritisan masing-masing blok data. Setiap kategori data kemudian dapat dikaitkan dengan aturan perlindungan yang ditentukan untuk setiap tingkat kekritisan. Misalnya, informasi pemasaran publik yang tidak bersifat rahasia dapat dikaitkan dengan data yang tersedia untuk umum yang dapat diposting di situs web yang tersedia untuk umum. Nomor kartu kredit dapat dikaitkan dengan data pribadi pengguna yang memerlukan enkripsi saat menyimpan atau mentransfernya.

Enkripsi Transmisi


Saat mentransfer data rahasia melalui jaringan apa pun, perlindungan koneksi (atau enkripsi) ujung-ke-ujung harus diterapkan. TLS sejauh ini merupakan protokol kriptografi yang paling banyak digunakan dan didukung yang menyediakan koneksi aman. Ini digunakan di banyak area (aplikasi web, layanan web, aplikasi mobile) untuk transmisi data yang aman melalui jaringan. Untuk memastikan keamanan koneksi TLS, Anda harus mengonfigurasinya dengan benar.

Manfaat utama protokol TLS adalah perlindungan data aplikasi web dari akses yang tidak sah dan perubahan selama transfer antar klien (browser web) dan server aplikasi web, serta antara server aplikasi web dan server internal atau non-browser lainnya. , komponen organisasi.

Enkripsi Data


Aturan pertama untuk mengelola data sensitif adalah menghindari penyimpanan data sensitif kapan pun memungkinkan. Jika Anda perlu menyimpan data rahasia, maka pastikan bahwa mereka memiliki perlindungan kriptografis terhadap akses dan perubahan yang tidak sah.

Kriptografi adalah salah satu bidang keamanan informasi yang paling maju, pemahamannya membutuhkan pengetahuan dan pengalaman yang luas. Sulit untuk memilih satu solusi tunggal, karena ada banyak pendekatan enkripsi yang berbeda, dan masing-masing memiliki kelebihan dan kekurangan, yang harus dipahami oleh arsitek web dan pengembang web. Selain itu, penelitian kriptografi serius biasanya didasarkan pada matematika yang lebih tinggi dan teori bilangan, yang menciptakan ambang input tinggi.

C9: Melaksanakan pencatatan dan pemantauan acara keamanan


Sebagian besar pengembang sudah menggunakan pencatatan untuk debugging dan diagnostik. Penting juga untuk mencatat peristiwa keamanan (data terkait keamanan) saat aplikasi sedang berjalan. Pemantauan adalah analisis langsung dari aplikasi dan log keamanan menggunakan berbagai alat otomatisasi. Alat dan templat yang sama dapat diterapkan pada operasi, debugging, dan keamanan yang sedang berlangsung.

Manfaat Pencatatan Kejadian Keamanan


Log peristiwa keamanan dapat digunakan untuk:

  • memasok sistem deteksi serangan dengan data;
  • analisis dan investigasi insiden;
  • kepatuhan dengan persyaratan peraturan.

Menerapkan Pencatatan Kejadian Keamanan


Berikut ini adalah rekomendasi untuk mengimplementasikan pencatatan peristiwa keamanan.

  • Gunakan formulir dan metode standar untuk merekam peristiwa dalam sistem dan di antara sistem organisasi Anda. Contoh dari platform pencatatan kejadian standar adalah Layanan Pencatatan Apache, yang menyediakan kompatibilitas pencatatan antara aplikasi Java, PHP, .NET, dan C ++.
  • Jangan mendaftar terlalu banyak atau terlalu sedikit data. Misalnya, pastikan untuk mendaftarkan stempel waktu dan kredensial, seperti alamat IP sumber dan ID pengguna, tetapi jangan pernah mencatat data pribadi atau rahasia.
  • Perhatikan sinkronisasi waktu antara node untuk memastikan konsistensi cap waktu.

Logging untuk mendeteksi dan menangkal serangan


Gunakan pendataan untuk menentukan aktivitas yang menunjukkan perilaku pengguna jahat. Aktivitas yang berpotensi berbahaya untuk dicatat:

  • Data input berada di luar rentang numerik yang diharapkan;
  • data input memodifikasi komponen yang harus tetap tidak berubah (daftar pilihan, kotak centang, komponen lain dengan input terbatas);
  • permintaan yang melanggar aturan kontrol akses sisi server;
  • Daftar penanda serangan yang lebih rinci dapat ditemukan di sini .

Ketika suatu aplikasi mendeteksi aktivitas semacam itu, setidaknya ia harus mendaftarkan acara ini dan menandainya sebagai berbahaya. Idealnya, aplikasi harus menangkal serangan, misalnya, dengan membatalkan sesi pengguna dan memblokir akunnya. Mekanisme penanggulangan memungkinkan program untuk merespons serangan yang terdeteksi secara real time.

C10: Penanganan wajib semua kesalahan dan pengecualian


Penanganan pengecualian memungkinkan aplikasi untuk merespons berbagai kesalahan (misalnya, kegagalan jaringan atau terhubung ke database) dengan berbagai cara. Penanganan pengecualian dan kesalahan yang benar hanya diperlukan untuk memastikan keandalan dan keamanan kode Anda.

Kesalahan dan pengecualian ditangani di semua tingkatan aplikasi, termasuk logika bisnis yang kritis, fitur keamanan, dan kerangka kerja.

Penanganan kesalahan juga penting dalam hal mendeteksi serangan. Beberapa serangan pada aplikasi dapat menyebabkan kesalahan yang dapat mendeteksi serangan dalam proses.

Penanganan kesalahan yang salah


Para peneliti di University of Toronto telah menemukan bahwa bahkan pengawasan kecil ketika memproses kesalahan atau mengabaikannya dapat menyebabkan kegagalan kritis dalam sistem terdistribusi .

Penanganan kesalahan yang salah dapat menyebabkan berbagai kerentanan.

  • . . , , , . (, ) . , , , .
  • TLS. Apple «goto fail» , TLS- Apple.
  • . . . .


  • , try/catch . .
  • Pastikan bahwa pesan kesalahan yang ditampilkan tidak mengandung data penting, tetapi mengandung cukup banyak informasi untuk merespons dengan tepat.
  • Pastikan bahwa pengecualian dicatat sehingga dukungan teknis, kontrol kualitas, investigasi insiden, atau tim respons memiliki cukup data untuk menyelesaikan masalah.
  • Uji dan verifikasi kode penanganan kesalahan dengan hati-hati.

Kesimpulan


Dokumen ini harus dianggap sebagai titik awal, dan bukan sebagai serangkaian metode dan praktik yang lengkap. Sekali lagi, kami ingin mencatat bahwa materi yang disajikan dimaksudkan untuk membiasakan Anda dengan dasar-dasar pengembangan perangkat lunak yang aman.

Saat membuat program keamanan aplikasi, Anda disarankan untuk menyelesaikan langkah-langkah berikut:



Versi lengkap dari terjemahan dan asli . Dalam terjemahan dan adaptasi ikut ambil bagian: JZDLin , Alexey Skachkov , Ivan Kochurkin dan Taras Ivashchenko .


Dokumen ini dirilis di bawah lisensi Creative Commons Attribution ShareAlike 3.0, diterjemahkan dan diadaptasi dengan partisipasi cabang Rusia dari konsorsium OWASP .

Source: https://habr.com/ru/post/id440202/


All Articles