
Sebagai bagian dari kegiatan profesional mereka, pengembang, pentester, dan profesional keamanan harus berurusan dengan proses seperti Kerentanan Manajemen (VM), (Secure) SDLC.
Di bawah frase ini tersembunyi serangkaian praktik dan alat yang digunakan yang saling terkait, meskipun konsumen mereka berbeda.
Kemajuan teknis belum mencapai titik mengganti seseorang dengan satu alat untuk menganalisis keamanan infrastruktur dan perangkat lunak.
Sangat menarik untuk memahami mengapa hal ini terjadi, dan masalah apa yang harus Anda hadapi.
Prosesnya
Proses Manajemen Kerentanan dimaksudkan untuk pemantauan berkelanjutan keamanan infrastruktur dan manajemen tambalan.
Proses SDLC Aman ("siklus pengembangan aman") dirancang untuk mendukung keamanan aplikasi selama pengembangan dan operasi.
Bagian serupa dari proses-proses ini adalah proses Penilaian Kerentanan - penilaian kerentanan, pemindaian kerentanan.
Perbedaan utama dalam pemindaian dalam VM dan SDLC adalah bahwa dalam kasus pertama, tujuannya adalah untuk mendeteksi kerentanan yang diketahui dalam perangkat lunak pihak ketiga atau dalam konfigurasi. Misalnya, versi Windows yang kedaluwarsa atau string komunitas default untuk SNMP.
Dalam kasus kedua, tujuannya adalah untuk mendeteksi kerentanan tidak hanya pada komponen pihak ketiga (dependensi), tetapi terutama dalam kode produk baru.
Ini menimbulkan perbedaan dalam alat dan pendekatan. Menurut pendapat saya, tugas menemukan kerentanan baru dalam aplikasi jauh lebih menarik, karena itu tidak turun ke versi sidik jari, mengumpulkan spanduk, mengurutkan kata sandi, dll.
Pemindaian otomatis kerentanan aplikasi yang berkualitas tinggi membutuhkan algoritma yang memperhitungkan semantik aplikasi, tujuannya, ancaman khusus.
Pemindai infrastruktur sering dapat diganti dengan timer, seperti yang
dikatakan avleonov . Intinya adalah, murni secara statistik, Anda dapat menganggap infrastruktur Anda rentan jika Anda tidak memperbaruinya, katakanlah, sebulan.
Alat-alatnya
Pemindaian, serta analisis keamanan, dapat dilakukan sebagai kotak hitam atau kotak putih.
Kotak hitam
Saat memindai kotak hitam, alat harus dapat bekerja dengan layanan melalui antarmuka yang sama yang digunakan pengguna untuk menggunakannya.
Pemindai infrastruktur (Tenable Nessus, Qualys, MaxPatrol, Rapid7 Nexpose, dll.) Mencari port jaringan terbuka, mengumpulkan "spanduk", menentukan versi perangkat lunak yang diinstal dan mencari informasi tentang kerentanan dalam versi-versi ini dalam basis pengetahuan mereka. Mereka juga mencoba mendeteksi kesalahan konfigurasi, seperti kata sandi default atau akses terbuka ke data, sandi SSL yang lemah, dll.
Pemindai aplikasi web (Acunetix WVS, Netsparker, Burp Suite, OWASP ZAP, dll.) Juga tahu cara menentukan komponen yang diketahui dan versinya (misalnya, CMS, frameworks, framework JS libraries). Langkah-langkah utama pemindai adalah merangkak dan mengelupas.
Selama merangkak, pemindai mengumpulkan informasi tentang antarmuka aplikasi yang ada, parameter HTTP. Selama fuzzing, semua parameter yang terdeteksi diganti dengan data yang termutasi atau yang dihasilkan untuk memancing kesalahan dan mendeteksi kerentanan.
Scanner aplikasi semacam itu masing-masing dimiliki oleh kelas DAST dan IAST - Pengujian Keamanan Aplikasi Dinamis dan Interaktif.
Kotak putih
Pemindaian papan tulis memiliki lebih banyak perbedaan.
Sepanjang proses, pemindai VM (Vulners, Incsecurity Couch, Vuls, Tenable Nessus, dll.) Sering diberikan akses ke sistem dengan melakukan pemindaian terotentikasi. Dengan demikian, pemindai dapat mengunduh versi paket yang diinstal dan parameter konfigurasi langsung dari sistem, tanpa menebaknya di spanduk layanan jaringan.
Pemindaian lebih akurat dan lengkap.
Jika kita berbicara tentang pemindaian papan tulis (CheckMarx, HP Fortify, Coverity, RIPS, FindSecBugs, dll.) Dari aplikasi, maka kita biasanya berbicara tentang analisis kode statis dan penggunaan alat yang sesuai dari kelas SAST - Pengujian Keamanan Aplikasi Statis.
Masalahnya
Ada banyak masalah dengan pemindaian! Saya harus berurusan dengan sebagian besar dari mereka secara pribadi dalam rangka menyediakan layanan untuk membangun proses pemindaian dan pengembangan yang aman, serta ketika melakukan pekerjaan analisis keamanan.
Saya akan memilih 3 kelompok utama masalah, yang dikonfirmasi oleh percakapan dengan insinyur dan manajer layanan keamanan informasi di berbagai perusahaan.
Masalah Pemindaian Aplikasi Web
- Kompleksitas implementasi. Pemindai perlu digunakan, dikonfigurasikan, disesuaikan untuk setiap aplikasi, mengalokasikan lingkungan pengujian untuk pemindaian dan diimplementasikan dalam proses CI / CD agar efektif. Kalau tidak, itu akan menjadi prosedur formal yang tidak berguna, hanya memberikan positif palsu
- Durasi pemindaian. Pemindai bahkan pada tahun 2019 buruk dengan deduplikasi antarmuka dan dapat memindai ribuan halaman selama 10 hari dengan 10 parameter pada masing-masing, mengingat mereka berbeda, meskipun kode yang sama bertanggung jawab untuk mereka. Pada saat yang sama, keputusan untuk menggunakan produksi dalam siklus pengembangan harus dibuat dengan cepat
- Rekomendasi yang sedikit. Scanner memberikan rekomendasi yang cukup umum, dan tidak selalu memungkinkan bagi pengembang untuk dengan cepat memahami cara mengurangi tingkat risiko, dan yang paling penting, apakah itu perlu dilakukan saat ini, atau tidak
- Efek merusak pada aplikasi. Pemindai dapat melakukan serangan DoS dengan baik pada aplikasi, dan mereka juga dapat membuat sejumlah besar entitas atau memodifikasi yang sudah ada (misalnya, membuat puluhan ribu komentar di blog), jadi jangan sembarangan meluncurkan pemindaian di produk.
- Deteksi kerentanan kualitas rendah. Pemindai biasanya menggunakan array muatan tetap dan dapat dengan mudah mengabaikan kerentanan yang tidak sesuai dengan skenario perilaku aplikasi mereka yang diketahui.
- Pemindai tidak memahami fungsi-fungsi aplikasi. Pemindai sendiri tidak tahu apa itu "Internet banking", "pembayaran", dan "komentar". Bagi mereka, hanya ada tautan dan parameter, sehingga lapisan besar kemungkinan kerentanan dalam logika bisnis tetap terungkap sepenuhnya, mereka tidak akan menebak untuk menulis dua kali, mengintip data orang lain dengan ID atau memutar saldo melalui pembulatan
- Kesalahpahaman pemindai semantik halaman. Pemindai tidak tahu cara membaca FAQ, mereka tidak tahu cara mengenali captcha, dengan sendirinya mereka tidak akan menebak cara mendaftar, dan kemudian perlu masuk, bahwa Anda tidak bisa mengklik "logout", dan cara menandatangani permintaan saat mengubah nilai parameter. Akibatnya, sebagian besar aplikasi mungkin tidak dipindai sama sekali.
Masalah Pemindaian Kode Sumber
- Positif palsu. Analisis statis adalah tugas yang sulit, dalam penyelesaian yang perlu untuk mengambil banyak kompromi. Seringkali Anda harus mengorbankan akurasi, dan bahkan pemindai perusahaan yang mahal menghasilkan banyak sekali kesalahan positif
- Kompleksitas implementasi. Untuk meningkatkan akurasi dan kelengkapan analisis statis, perlu untuk memperbaiki aturan pemindaian, dan menulis aturan ini mungkin terlalu memakan waktu. Terkadang lebih mudah untuk menemukan semua tempat dalam kode dengan semacam bug dan memperbaikinya, daripada menulis aturan untuk mendeteksi kasus seperti itu
- Kurangnya dukungan ketergantungan. Proyek besar bergantung pada sejumlah besar perpustakaan dan kerangka kerja yang memperluas kemampuan bahasa pemrograman. Jika basis pengetahuan pemindai tidak memiliki informasi tentang "tenggelam" dalam kerangka kerja ini, ini akan menjadi titik buta dan pemindai bahkan tidak akan mengerti kode
- Durasi pemindaian. Menemukan kerentanan dalam kode adalah tugas yang sulit dalam hal algoritma. Oleh karena itu, proses mungkin tertunda dan membutuhkan sumber daya komputasi yang signifikan.
- Cakupan rendah. Meskipun konsumsi sumber daya dan durasi pemindaian, pengembang alat SAST masih harus menggunakan kompromi dan menganalisis tidak semua kondisi di mana program mungkin
- Reproduksibilitas temuan. Menunjuk ke saluran dan tumpukan panggilan tertentu yang mengarah ke kerentanan baik-baik saja, tetapi pada kenyataannya pemindai sering tidak memberikan informasi yang cukup untuk memeriksa kerentanan eksternal. Lagi pula, sebuah cacat mungkin juga dalam kode mati, yang tidak dapat dicapai oleh penyerang
Masalah Pemindaian Infrastruktur
- Persediaan tidak memadai. Dalam infrastruktur besar, terutama yang terpisah secara geografis, seringkali paling sulit untuk memahami host mana yang perlu dipindai. Dengan kata lain, tugas pemindaian terkait erat dengan tugas manajemen aset.
- Prioritas buruk. Pemindai jaringan sering menghasilkan banyak hasil dengan kelemahan yang dalam praktiknya tidak dapat dieksploitasi, tetapi secara formal tingkat risikonya tinggi. Konsumen menerima laporan yang sulit ditafsirkan, dan tidak jelas apa yang perlu diperbaiki terlebih dahulu
- Rekomendasi yang sedikit. Basis pengetahuan pemindai seringkali hanya memiliki informasi yang sangat umum tentang kerentanan dan cara memperbaikinya, sehingga administrator harus mempersenjatai diri dengan Google. Situasinya sedikit lebih baik dengan scanner papan tulis yang dapat mengeluarkan perintah khusus untuk memperbaikinya
- Pekerjaan tangan Infrastruktur dapat memiliki banyak node, yang berarti bahwa ada banyak potensi kelemahan, laporan yang harus dibongkar dan dianalisis secara manual pada setiap iterasi
- Cakupan buruk. Kualitas pemindaian infrastruktur secara langsung tergantung pada volume basis pengetahuan tentang kerentanan dan versi perangkat lunak. Pada saat yang sama, ternyata bahkan para pemimpin pasar tidak memiliki basis pengetahuan yang komprehensif, dan ada banyak informasi dalam database solusi gratis yang para pemimpin tidak memiliki
- Masalah dengan penambalan. Patch yang paling umum untuk kerentanan dalam infrastruktur adalah memperbarui paket atau mengubah file konfigurasi. Masalah besar di sini adalah bahwa sistem, terutama warisan, dapat berperilaku tak terduga sebagai akibat dari peningkatan. Intinya, Anda harus melakukan tes integrasi infrastruktur hidup dalam produksi
Pendekatannya
Bagaimana menjadi?
Saya akan memberi tahu Anda lebih banyak tentang contoh dan cara menangani banyak masalah ini di bagian berikut, tetapi untuk saat ini saya akan menunjukkan area utama di mana Anda dapat bekerja:
- Agregasi berbagai alat pemindaian. Dengan penggunaan multi pemindai yang benar, peningkatan basis pengetahuan dan kualitas deteksi yang signifikan dapat dicapai. Anda dapat menemukan lebih banyak kerentanan daripada total semua pemindai yang diluncurkan secara terpisah, sementara dimungkinkan untuk menilai tingkat risiko dengan lebih akurat dan memberikan lebih banyak rekomendasi
- Integrasi SAST dan DAST. Anda dapat meningkatkan jangkauan DAST dan akurasi SAST dengan berbagi informasi di antara mereka. Dari sumbernya Anda bisa mendapatkan informasi tentang rute yang ada, dan menggunakan DAST Anda dapat memeriksa apakah kerentanannya terlihat dari luar
- Machine Learning ™ . Pada 2015, saya berbicara tentang ( namun ) tentang menggunakan statistik untuk memberi para hacker intuisi pemindai dan mempercepatnya. Ini jelas makanan untuk pengembangan analisis keamanan otomatis masa depan.
- Integrasi IAST dengan autotest dan OpenAPI. Dalam kerangka CI / CD-pipeline, dimungkinkan untuk membuat proses pemindaian berdasarkan alat yang berfungsi sebagai proksi HTTP dan tes fungsional yang bekerja pada HTTP. Tes dan kontrak OpenAPI / Swagger akan memberikan pemindai informasi yang hilang tentang aliran data, dan akan memungkinkan untuk memindai aplikasi di berbagai negara
- Konfigurasi yang benar. Untuk setiap aplikasi dan infrastruktur, Anda perlu membuat profil pemindaian yang sesuai yang memperhitungkan jumlah dan sifat antarmuka, teknologi yang digunakan
- Kustomisasi pemindai. Seringkali, aplikasi tidak dapat dipindai tanpa menyelesaikan pemindai. Contohnya adalah gateway pembayaran di mana setiap permintaan harus ditandatangani. Tanpa menulis konektor ke protokol gateway, pemindai akan mengalahkan permintaan dengan tanda tangan yang salah. Kita juga perlu menulis pemindai khusus untuk jenis cacat tertentu, seperti Referensi Objek Langsung Tidak Aman
- Manajemen risiko. Menggunakan berbagai pemindai dan integrasi dengan sistem eksternal, seperti Manajemen Aset dan Manajemen Ancaman, akan memungkinkan Anda untuk menggunakan banyak parameter untuk menilai tingkat risiko, sehingga manajemen dapat memperoleh gambaran yang memadai tentang status keamanan saat ini dari pengembangan atau infrastruktur.
Tetap disini dan mari kita ganggu pemindaian kerentanan!