Keamanan Kontainer dalam CI / CD

Musim gugur telah tiba di halaman, techno utopia mengamuk. Teknologi semakin maju. Kami membawa di saku kami komputer yang daya hitungnya ratusan juta kali lebih besar dari kekuatan komputer yang mengendalikan penerbangan ke bulan. Dengan bantuan Youtube VR, kita bisa berenang di lautan dengan ubur-ubur dan paus, dan robot telah lama menjelajahi cakrawala tak bernyawa dari planet dingin.

Pada saat yang sama, insinyur dan spesialis layanan TI, pengembang dan kolega mereka yang tak terhitung terbagi menjadi dua kubu: mereka yang menciptakan solusi baru (perangkat lunak, strategi, sistem informasi), dan mereka yang memahaminya.

Meledak ke dalam ekosistem pengembangan aplikasi dan metode menggunakan layanan microsoft. Sampai baru-baru ini, itu adalah tidak bisa dipahami, tertutup dari mata mengintip, teknik yang secara fundamental baru. Tetapi hari ini, setelah hanya beberapa tahun, perusahaan besar dan menengah sudah percaya diri menggunakan pendekatan ini dalam lingkungan pengembangan mereka sendiri. Seperti apa dia? Kami tidak akan menggunakan definisi "klasik", tetapi akan memberi tahu Anda dengan kata-kata kami sendiri.

gambar


Arsitektur microservice. Wadah


Microservices adalah metode di mana fungsi suatu sistem dibagi menjadi banyak layanan kecil, dan masing-masing menjalankan satu tugas dari fungsi yang kompleks. Satu bertindak sebagai server web, yang lain sebagai basis data, yang ketiga sibuk dengan sesuatu yang lain, dll. Di antara semua layanan mikro ini, interaksi jaringan dibuat, dan sumber daya yang diperlukan dialokasikan. Contoh yang lucu dan tidak kalah jelas dari konsep semacam itu adalah sistem memesan dan mengeluarkan makan siang di restoran cepat saji.

Klien (pengguna) membuat pesanan baru menggunakan terminal atau penerimaan (server web), mentransfer data jumlah cheeseburger, kentang, dan jenis soda dalam makan siangnya (mengisi database), melakukan pembayaran, setelah itu data ditransfer ke dapur, di mana sebagian karyawan kentang goreng (layanan memasak), dan bagian lainnya menyebarkan makanan dan menuangkan soda (layanan pengumpulan). Kemudian pesanan yang terkumpul ditransfer ke konter penerbit (mengeluarkan layanan), di mana klien menunjukkan cek dengan nomor pesanan (bahkan ada verifikasi!), Dan mereka memberinya makan siang. Setiap unit proses dalam kasus ini sibuk dengan satu tugas, dan itu bekerja dengan cepat dan lancar, bagaimanapun, menurut satu algoritma yang ditetapkan. Anda harus mengakui bahwa bodoh jika mengharapkan bahwa di meja resepsionis Anda akan membuat soda lebih cepat daripada di dapur, atau bahwa karyawan yang membuat roti pai akan dapat menerima pembayaran untuk pesanan Anda. Namun, jika sistem debugged dengan benar dan proses berjalan seperti yang diharapkan, maka semuanya bekerja sangat cepat dan efisien.

Mengenai arsitektur microservice, perlu diperhatikan poin penting - lingkungan eksekusi. Saat ini, opsi yang tersebar luas adalah wadah (hi, Docker). Fitur wadah adalah ide untuk mengemas di dalamnya semua lingkungan yang diperlukan, mulai dengan gambar OS yang ringan, paket yang diinstal, kerangka kerja yang dimuat dan perpustakaan, dan diakhiri dengan aplikasi itu sendiri. Bagaimana ini berguna? Setidaknya fakta bahwa pengembang tidak akan dapat mengabaikan penjelasan "Semuanya berfungsi di komputer saya" ketika Anda datang kepadanya dengan pesan bahwa aplikasi tidak berfungsi.

Wadah memungkinkan Anda membuat aplikasi, mengemasnya bersama seluruh lingkungan menjadi gambar siap pakai dari sistem yang ringan dan tidak lagi khawatir tentang masalah yang terkait dengan bekerja di berbagai lingkungan. Perlu menyebarkan aplikasi ke server lain? Kami meluncurkan gambar yang berfungsi dengan itu di wadah - dan semuanya berfungsi.

Dalam sistem informasi yang dibangun menggunakan wadah, Anda tidak perlu lagi khawatir tentang versi perangkat lunak di lingkungan di mana aplikasi berjalan, dan dengan proses pengiriman berkelanjutan yang diimplementasikan, Anda juga perlu mengirimkan kode, dll. Gagasan wadah menyiratkan bahwa pengembangan itu sendiri aplikasi berjalan di lingkungan wadah yang sama, dan karena layanan Microsoft ditutup, tidak masalah dengan sistem operasi mana atau dengan paket diinstal apa ia berfungsi di dalamnya. Aplikasi berfungsi karena dibuat untuk lingkungan wadah yang tidak berubah terlepas dari sistem di sekitar wadah. Tidak perlu lagi menginstal semua perangkat lunak yang diperlukan untuk waktu yang lama dan menjemukan, untuk membangun koneksi, dependensi dan paket. Anda tidak perlu memigrasi aplikasi secara manual saat berpindah di antara lingkungan pengembangan dan penerapan atau ketika kapasitas pusat komputasi meningkat. Tingkat abstraksi baru telah muncul, mengambil tempat antara perangkat lunak akhir dengan penggunanya dan lingkungan host (virtual atau bare-metal), tempat semua ini bekerja. Pendekatan ini, karena kenyamanannya, terus mendapatkan momentum dan tidak akan melambat.

Banyak organisasi besar berusaha untuk mengadopsi teknik terbaik untuk meningkatkan efisiensi bisnis, pengembangannya, skalabilitas dan transformasi, termasuk dalam konteks sistem informasi. Bagaimanapun, justru untuk bisnis besar yang berorientasi digital yang terutama tertarik pada solusi yang ditujukan untuk fleksibilitas, skalabilitas, dan mobilitas, karena, ketika mengubah industri, ia menjadi rentan terhadap kesulitan yang terkait dengan perluasan, adaptasi ke pasar yang berubah, dll. belum tentu tentang perusahaan IT. Dalam konteks masalah CI / CD dan keamanannya, perusahaan dari sektor publik, pelaku pasar keuangan utama seperti bank dan bahkan perusahaan monopoli logistik beralih ke organisasi kami. Dalam semua kasus, satu hal menyatukan mereka - penggunaan wadah dalam satu bentuk atau lainnya ketika mengembangkan aplikasi, layanan, dll.

Bisnis besar sering dibandingkan dengan hiu. Dalam hal ini, perbandingan yang lebih cocok sulit untuk dibuat. Pernahkah Anda melihat bagaimana hiu memangsa sekolah ikan? Pernahkah Anda memperhatikan berapa banyak ikan kecil yang dapat bermanuver, bahkan jika mereka berada dalam kawanan besar? Siapa yang bereaksi lebih tajam, lebih bermanuver, dan lebih cepat - hiu atau ikan kembung kecil? Hal yang sama terjadi pada perusahaan di pasar secara keseluruhan. Tentu saja, kami tidak memperhitungkan Microsoft atau Apple pada saat itu ketika mereka cocok di garasi, ini adalah kasus yang terisolasi. Namun secara statistik gambarannya sedemikian rupa sehingga perusahaan besar dapat mendikte tren dan menetapkan arah, namun, lebih mudah bagi perusahaan kecil untuk cepat beradaptasi dan beradaptasi. Dan perusahaan besar juga berusaha meningkatkan mobilitas dan fleksibilitas dengan cara yang terjangkau.

Tapi, seperti kata mereka, ada nuansa ... Perusahaan besar sebenarnya bukan monolit. Mereka terdiri dari banyak departemen, dengan banyak departemen, tim, unit dan banyak karyawan. Dan dalam konteks sistem dan pengembangan informasi, khususnya, bidang tindakan tim mungkin tumpang tindih. Dan tepat di persimpangan ini, situasi konflik tersebut muncul antara layanan IS dan pengembang. Yaitu, ternyata bisnis besar maupun menengah tidak kebal terhadap kesulitan semacam itu.

Cepat atau lambat, ketika menggunakan wadah, organisasi akan memiliki pertanyaan. Hal ini dapat terjadi pada awal penggunaannya, atau mungkin setelah beberapa kejadian, akibatnya perusahaan akan mengalami kerugian.

Bagaimana membuat proses aman?


Dalam satu atau lain bentuk, kita sering mendengar pertanyaan ini dan bersama dengan pelanggan kita memikirkan solusinya dan mencari cara yang sesuai. Sebagai aturan, sebuah organisasi, terutama yang besar yang telah mengimplementasikan CI / CD, terdiri dari spesialis yang cerdas dan berpengalaman, termasuk yang berada dalam keamanan informasi. Orang-orang ini mengerti mengapa mereka perlu menggunakan layanan mikro, masalah apa yang akan dipecahkan dan kesulitan baru apa yang akan muncul. Oleh karena itu, mereka mengambil tindakan untuk keberhasilan implementasi dan penggunaan teknologi: menyiapkan infrastruktur, melakukan audit, menyebarkan sistem, membangun proses, dan mengoordinasikan peraturan internal.

Namun, tidak selalu mungkin untuk meramalkan segalanya, melacak semuanya dan memonitor semuanya. Inilah cara, misalnya, untuk memahami apakah versi SQL server dalam wadah berisi kerentanan kritis? Secara manual? Katakan saja. Dan apakah ada puluhan kontainer? Dan ratusan?

Bagaimana seorang spesialis keamanan informasi dapat memastikan bahwa gambar OS dasar dalam wadah dengan aplikasi tidak mengandung exploit tersembunyi? Periksa secara manual? Dan apa sebenarnya yang harus diperiksa, ke mana harus mencari? Pada semua puluhan dan ratusan kontainer? Dan di mana mendapatkan begitu banyak waktu dan sumber daya?

Dengan pengembangan dan distribusi CI / CD, masalah keamanan dalam siklus pengembangan menjadi lebih akut. Lagi pula, Anda perlu memastikan setidaknya pada tingkat kualitas gambar yang dapat diterima, Anda perlu tahu tentang kerentanan perangkat lunak dan paket, keadaan wadah kerja, dan apakah tindakan mencurigakan atau jelas tidak sah sedang terjadi di dalamnya. Dan jika kita berbicara secara spesifik tentang siklus pengembangan, maka akan bermanfaat jika memiliki alat untuk memastikan keamanan dalam proses pengembangan itu sendiri, dalam pipanya, dan bukan hanya dalam wadah. Dan Anda juga memerlukan kontrol atas rahasia, audit pendaftar, kontrol atas interaksi jaringan dan sebagainya. Dan di sini kita sampai pada masalah utama.

Mengapa keamanan diperlukan, dan apa saja fitur-fiturnya di CI / CD?


Pada dasarnya, ini adalah serangkaian praktik untuk memastikan keamanan di dalam dan di sekitar siklus pengembangan. Artinya, itu adalah penggunaan perangkat lunak khusus, pengembangan metode dan peraturan, dan bahkan persiapan tim (tim adalah kunci untuk segalanya!) Untuk memastikan keamanan. Dan poin penting: pengenalan semua keamanan ini ke dalam pembangunan, dan tidak memotong dari bahu!

Di sini kita tinggal lebih detail. Pendekatan biasa untuk keamanan TI pada umumnya dan dalam pengembangan khususnya, yang terlintas dalam pikiran, didasarkan pada prinsip-prinsip "Larangan / Batasi / Cegah". Sejauh ini, sistem informasi teraman adalah yang tidak berfungsi sama sekali. Tapi itu pasti berhasil! Dan orang yang menggunakan sistem ini juga harus bisa bekerja dengannya.

Ada konflik kepentingan yang disebutkan di atas. Spesialis keamanan informasi berupaya membuat lingkungan aman dan ingin memiliki kontrol penuh terhadapnya, pengembang ingin membuat produk dan menginginkannya terjadi dengan cepat dan nyaman, dan insinyur TI membuat lingkungan dapat bekerja, toleran terhadap kesalahan dan bersama-sama dengan pengembang berusaha keras untuk otomatisasi.

gambar

Perlindungan dalam CI / CD bukan tentang perangkat lunak atau peraturan, ini tentang kerja tim dan menanamkan konsep keamanan dalam arus pengembangan. Pendekatan ini ditujukan untuk keterlibatan yang sama dari semua peserta dalam proses, pada distribusi bidang tanggung jawab yang jelas, otomatisasi, pemantauan dan pelaporan transparan. Dan yang paling penting adalah menerapkan keamanan di dalam proses pengembangan aplikasi sedemikian rupa sehingga muncul di tahap awal dan tidak memerlukan alokasi sumber daya tambahan, baik komputasi dan manusia.

Mari kita lihat sebuah contoh. Misalkan salah satu tim pengembangan membuat aplikasi, ini terjadi pada media wadah di bawah pengawasan spesialis keamanan informasi, sementara manajer infrastruktur menjaga kesehatan lingkungan ini. Pada akhir pengembangan, muncul aplikasi siap pakai yang mengalir ke produksi dan mulai bekerja di sana, pelanggan menggunakannya - semua orang senang. Tetapi setelah beberapa waktu, kerentanan serius ditemukan dalam wadah dengan aplikasi. Spesialis keamanan informasi mendaftarkan kerentanan ini dan meneruskannya ke pengembang untuk dihilangkan, mereka, pada gilirannya, memperbaikinya dengan tambalan, setelah itu Anda harus menulis ulang dependensi dan memperbarui beberapa paket. Kemudian versi aplikasi selanjutnya diluncurkan.

Waktu yang dihabiskan oleh spesialis IS untuk melokalisasi masalah, waktu tim pengembangan untuk memperbaikinya, dan sedikit sementara layanan IS akan melakukan audit kedua dan menutup kasus ini. Tetapi bagaimana jika kita dapat menggunakan beberapa jenis alat dan mengimplementasikannya pada tahap pengembangan? Bagaimana jika aplikasi kita tidak diluncurkan ke produk, karena tidak sesuai untuk tingkat keamanan yang diberikan? Dan setiap spesialis yang terlibat dalam proses, dapat melihat ancaman apa yang ditemukan dalam bidang tanggung jawabnya? Tetapi bagaimana jika seluruh proses juga akan otomatis, dimulai dengan deteksi dan diakhiri dengan insiden di pelacak bug?

Ini adalah tujuan mengatur pengembangan dan implementasi yang aman. Bahwa itu tidak hanya aman, tetapi juga nyaman. Pengenalan proses baru atau penggunaan alat tambahan harus menyederhanakan kegiatan, dan bukan sebaliknya.

Ada alat dan teknik yang memungkinkan Anda untuk memantau status elemen sistem yang diperlukan dan tahapan proses pengembangan dan membantu semua pihak yang terlibat untuk mengikuti perkembangan acara dalam bidang tanggung jawab mereka. Penekanannya di sini bukan pada perangkat lunak khusus, tetapi pada interaksi orang-orang dengan sistem dan satu sama lain. Apakah lebih mudah bagi pengembang untuk memperbaiki dan menguji aplikasi tepat di dalam wadah kerja? Baiklah, biarkan dia memperbaikinya. Pada saat yang sama, layanan IS ingin memastikan bahwa tidak ada tindakan tidak sah di dalam wadah? Tidak masalah, dia akan tahu. Tugas selesai, dan tidak ada yang mengganggu siapa pun dalam proses. Efisiensi dan rasionalitas! Dan ini dimungkinkan jika Anda menerapkan alat keamanan informasi yang diperlukan di tempat yang tepat di lingkungan pengembangan dan merevisi aturan interaksi antara layanan dan tim. Dan kemudian biarkan tidak ada utopia, tetapi Anda harus setuju bahwa hidup dengan keduanya akan menjadi sedikit lebih mudah.

Mengapa mengikat tangan pengembang, dan memuat layanan IB dengan itu, jika Anda dapat membangun proses sehingga pengembang melakukan apa yang dia bisa (tanpa pamrih, kelelahan dalam kesempurnaan dari kesempurnaan kodenya), dan spesialis IB mengendalikan proses ini (tidak mengganggu, tetapi hanya berbagi kesenangan ini dari samping).

Keamanan kontainer. Apakah itu sepadan?


Kami dihubungi oleh pelanggan pada tahap yang sangat berbeda dan dengan pengalaman yang berbeda dalam CI / CD. Ada organisasi besar yang menghadapi pintu belakang yang tidak terdeteksi dalam sebuah wadah dalam produksi di mana akses ke data penting diperoleh dan data dicuri. Akibatnya, menjadi jelas bahwa dalam sistem yang terlalu banyak dan rumit, terlalu sulit untuk dilacak dan secara preventif menetralisir potensi ancaman.

Ada juga perusahaan kecil yang baru-baru ini menggunakan CI / CD dalam pengembangan. Setelah menganalisis proses dalam pipa, para ahli mereka sampai pada kesimpulan bahwa alat keamanan informasi yang tersedia mencakup volume proses yang tidak mencukupi, dan ada tempat berbahaya di mana serangan dapat terjadi cepat atau lambat. Mungkin tidak sekarang, mungkin nanti, atau mungkin tidak pernah sama sekali. Tetapi jika ini terjadi, harga kesalahan akan tinggi.

Pelanggan kami memiliki keprihatinan yang sama, yang dalam kebanyakan kasus datang ke konsep mengalahkan tangan pengembang, insinyur dan semua orang yang terlibat dalam proses ketika mencoba melampaui batas waktu. Tetapi kadang-kadang lebih mudah dan lebih cepat seperti itu, dan dalam beberapa kasus umumnya sebaliknya. Dan kemudian layanan IS harus melihat pelanggaran melalui jari. Tapi kami untuk konsep yang berbeda. Mengapa melanggar atau mengabaikan peraturan yang ditulis dengan rasa sakit seperti itu? Mengapa layanan harus saling mengganggu untuk menyelesaikan tugas mereka? Dalam bekerja dengan pelanggan, kami memulai komunikasi dengan masalahnya. Mereka selalu ada di sana.

gambar

"Jangan mencari klien, menemukan masalah dan menawarkan solusi - klien akan muncul sendiri."

Setelah mendengarkan pelanggan, sebagai suatu peraturan, kami memahami masalah apa yang mereka hadapi. Mungkin ada kesulitan dalam interaksi tim, keputusan yang gagal dalam desain "jalur pipa", kurangnya komputasi dan sumber daya manusia, dan banyak lagi. Dalam pendekatan kami untuk implementasi peningkatan keamanan dalam infrastruktur pelanggan, kami dipandu oleh keinginan untuk membantu memecahkan masalah-masalahnya dan mencapai ini dengan cara yang meminimalkan kemungkinan yang baru. Dengan demikian, fondasi untuk masa depan dibuat, tidak masalah siapa yang akan melayani sistem yang dibuat, banyak masalah harus diramalkan dan dipecahkan pada awal. Pada tahap awal, keputusan dalam banyak kasus ternyata lebih murah daripada dengan beban kerja yang tinggi dalam produksi yang mendalam.

Berdasarkan semua ini, kami menyarankan dimulai dengan audit, yang tidak hanya mencakup keadaan sistem informasi dan elemen-elemennya, tetapi juga pemahaman tentang komponen proses antara tim pengembangan, pendekatan layanan keamanan informasi, dll. Jangan lupa bahwa orang adalah faktor terpenting baik dari segi ancaman maupun untuk hasil berfungsinya sistem. Suatu audit adalah tahap yang perlu, sebagai akibatnya cacat atau kesalahan perhitungan sistem penting dalam interaksi yang bersama-sama dengan pelanggan kami coba selesaikan atau proses dapat diungkapkan. Penting untuk dipahami bahwa tujuannya bukan untuk menumpuk banyak solusi dan produk perangkat lunak dan tidak untuk menutup kerentanan yang ditemukan oleh mereka. Sebaliknya, sebuah skenario di mana pembelian produk perangkat lunak yang mahal mungkin tidak diperlukan sama sekali. Seringkali, proses peningkatan keamanan di lingkungan CI / CD dapat dicapai dengan bantuan fitur keamanan yang ada dari organisasi, baik yang terpasang di lingkungan kontainerisasi (misalnya, di orkestra,), dan pihak ketiga. Yang penting adalah kuantitas dan kualitasnya tidak sebanyak aplikasi yang benar.

Berdasarkan hasil audit, dimungkinkan untuk membuat rencana kerja, peta jalan dengan tugas-tugas antara yang eksplisit dan tujuan akhir yang dapat dipahami. Nah, semuanya lebih lanjut adalah masalah teknis. Perencanaan yang tepat dalam bisnis apa pun adalah bagian besar dari penyelesaian yang sukses.

Adalah penting untuk tidak terlalu terbawa dan tidak melupakan mengapa semuanya dilakukan. Tidak seorang pun memiliki tugas untuk menciptakan sistem yang dilindungi secara gila-gilaan di mana tidak ada wadah yang dimulai ketika ada ancaman yang terdeteksi di dalamnya, atau tidak ada aplikasi yang digunakan dalam produksi jika ada penyimpangan dari model yang dilindungi. Perlu diingat bahwa pengenalan atau peluncuran alat perlindungan harus berfungsi tidak hanya untuk meningkatkan keamanan, tetapi juga untuk kenyamanan.

Misalnya, salah satu kasus ini melibatkan pengenalan perangkat lunak perlindungan wadah dan lingkungan orkestrasi. Tampaknya mereka mengimplementasikan, mengkonfigurasi, memindai, melihat semua kerentanan - dan kemudian proses panjang eliminasi. Namun, dengan pendekatan ini, muncul masalah, yang dibahas di awal. Layanan keamanan informasi memiliki alat yang memungkinkan Anda untuk memblokir banyak kegiatan di lingkungan orkestrasi, yang, jika digunakan secara tidak tepat, akan lebih berbahaya daripada kebaikannya. Para pengembang terikat tangan, karena layanan keamanan informasi memangkas kemampuan mereka. Misalnya, tidak mungkin lagi untuk memperbaiki sesuatu di dalam wadah "panas", dan ketika kerentanan paket terdeteksi pada gambar, pengembang terlibat dalam birokrasi pengaturan. Akibatnya, solusi untuk masalah yang bisa dihilangkan pada siang hari tertunda tanpa batas waktu.

Untuk menghindari situasi seperti itu, kami merekomendasikan agar prosesnya diatur sedemikian rupa sehingga layanan keamanan informasi tidak menyendiri dari proses pengembangan, seperti yang sering terjadi, tetapi merupakan peserta di dalamnya. Ini tentu membutuhkan waktu, tetapi proses debug perlu dilakukan, dan kehidupan menjadi semakin mudah. Misalnya, alat IS memungkinkan Anda untuk memantau ancaman yang sudah ada di tahap perakitan di dalam pipa CI / CD, dan layanan IS dapat mendaftarkan ini. Pada saat yang sama, informasi tentang ancaman pada setiap tahap majelis dapat secara otomatis ditransfer ke tim atau spesialis yang bertanggung jawab untuk tahap tertentu, dan pada gilirannya akan mengambil tindakan yang diperlukan untuk menghilangkan ancaman tersebut. Dan semua ini terjadi bukan di bawah pengawasan cambuk, tetapi di bawah pengawasan layanan IS.

Pada akhirnya, waktu yang dihabiskan untuk memperbaiki kerentanan dapat dikurangi secara signifikan, dan dengan itu biaya bisnis, misalnya, keuangan atau reputasi.

Dengan data awal apa pun, kami berupaya membentuk pendekatan untuk mengatur dan meningkatkan tingkat keamanan pengembangan wadah, dengan fokus tidak hanya pada desain dan implementasi solusi spesifik, tetapi juga dengan memperhatikan sumber daya manusia. Setiap peserta dalam proses memenuhi perannya, dan semakin nyaman, semakin sedikit gangguan yang tidak perlu, semakin baik hasil akhirnya. Dan jika Anda menemukan keseimbangan antara kenyamanan semua pihak yang terlibat, Anda akan berakhir dengan tim yang sangat efektif. Di masa depan, tentu saja, berbagai optimasi, aplikasi atau peningkatan otomatisasi dari beberapa proses, pendelegasian tugas, dll adalah mungkin.Tetapi gagasan utama tetap tidak berubah - revisi keamanan seperti itu. Pemisahan tugas, pemantauan bukannya larangan tanpa pertimbangan dan partisipasi semua orang dalam bidang tanggung jawab mereka.

Dan tentu saja, kenyamanan! Keamanan bisa nyaman.

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


All Articles