Menjelajahi keamanan (yang hilang) pada instalasi Docker dan Kubernetes pada umumnya

Menjelajahi keamanan (yang hilang) pada instalasi Docker dan Kubernetes pada umumnya
Saya telah bekerja di bidang IT selama lebih dari 20 tahun, namun entah mengapa saya tidak pernah sempat menangani container. Secara teori, saya memahami bagaimana strukturnya dan cara kerjanya. Namun karena saya belum pernah menemui mereka dalam praktik, saya tidak yakin bagaimana tepatnya roda gigi di bawah kapnya berputar dan berputar.

Selain itu, saya tidak tahu bagaimana keamanan mereka. Tapi sekali lagi, teorinya terdengar bagus, dan lagu lama “saat keamanan meningkat, kegunaan menurun” melekat di kepala saya. Jadi saya pikir karena segala sesuatunya mudah dilakukan dengan kontainer, maka keamanan di sana di bawah standar. Ternyata, saya benar.

Untuk memulai dengan cepat, saya mendaftar untuk kursus Black Hat 2020 bertajuk "Dari miskin menjadi kaya: penetrasi dan perlindungan lingkungan Docker Swarm dan Kubernetes'.

Kursus yang diajarkan oleh Sheila A. Berta dan Sol Ozzan ini langsung dimulai dengan penjelasan tentang cara kerja container Docker dan perjalanan yang dilakukan saat diterapkan ke Kubernetes. Ini adalah kelas yang sepenuhnya interaktif - siswa harus menginstal Docker dan microk8s di mesin mereka sebelum kelas dimulai - cara yang bagus untuk melihat bagaimana alat berinteraksi satu sama lain, menemukan titik lemah dan, yang paling penting, mencoba memblokirnya.

Sayangnya, meskipun kursus tersebut menjanjikan untuk menjadi “pangeran” setelah dua hari, saya merasa semuanya baru saja dimulai, dan saya masih harus banyak belajar.

Menjelajahi keamanan (yang hilang) pada instalasi Docker dan Kubernetes pada umumnya

Sebelum menyelami pengamatan saya yang mendalam, penting untuk menjelaskan apa itu wadah. Di dunia pengembangan, dianggap normal jika kode yang ditulis di mesin pribadi Anda berfungsi dengan sempurna, tetapi ketika Anda mencoba menjalankannya di server di suatu tempat, kode itu tidak berfungsi. Kontainer mencoba mengatasi masalah ini dengan menyediakan mesin mandiri sehingga Anda dapat dengan mudah berpindah dari satu server ke server lainnya, mengetahui bahwa mesin tersebut akan selalu berfungsi. Seperti namanya, mereka berisi kode, perpustakaan, dan perangkat lunak lain yang diperlukan untuk menyelesaikan pekerjaan. Kubernetes, sebaliknya, adalah platform orkestrasi untuk kontainer. Pada prinsipnya, ini dapat digunakan untuk mengelola ratusan atau ribuan kontainer berbeda dengan lancar.

Berikut beberapa temuan saya dari sudut pandang tim Merah dan Biru.

tim Merah

Sebagian besar konten kontainer dijalankan sebagai root: Ini berarti jika container disusupi, Anda akan memiliki akses penuh ke container tersebut. Ini membuat langkah selanjutnya lebih mudah.

Memasang docker.sock di dalam container berbahaya: Jika Anda memiliki root di dalam sebuah container dan juga menginstal Docker di dalam container yang memiliki soket Docker (/var/run/docker.sock), Anda berpotensi menjelajahi keseluruhan cluster, termasuk akses ke container lainnya. Akses tersebut tidak dapat dicegah dengan isolasi jaringan atau cara lain.

Variabel lingkungan sering kali berisi data rahasia: Dalam kebanyakan kasus, orang mengirim kata sandi ke penampung menggunakan variabel lingkungan normal. Jadi jika Anda memiliki akses ke akun tersebut, Anda dapat memata-matai variabel lingkungan ini untuk kemudian memperluas kekuatan Anda.

Docker API dapat memberikan banyak informasi: Docker API, ketika dikonfigurasi secara default, berjalan tanpa otorisasi dan dapat menghasilkan banyak informasi. Dengan menggunakan Shodan, Anda dapat dengan mudah menemukan daftar port yang terbuka, lalu mendapatkan informasi mendetail tentang cluster - dan melanjutkan ke pengambilan penuh. TrendMicro menulis tentang ini artikel paling menarik.

Tim biru

Jangan jalankan konten wadah sebagai root: Meskipun lebih mudah dijalankan sebagai root, sebaiknya Anda tidak melakukannya. Sebagai gantinya, jalankan aplikasi dengan izin reset dengan menampilkan uid, baik menggunakan opsi --user saat dijalankan dari CLI, atau dengan menentukan USER di Dockerfile.

Jangan izinkan perangkat lunak dipasang di container: Hampir setiap serangan dimulai dengan menanam sesuatu. Dari nmap, ifconfig, hingga Docker itu sendiri (di dalam container), menginstal apa pun di dalam container adalah hal yang lumrah. Untuk alasan yang sama, Anda harus selalu memblokir semua port yang tidak digunakan. Ini juga membantu mencegah perintah kontrol dikirimkan ketika mesin Anda terinfeksi. Selain mencegah instalasi program, ada baiknya memastikan bahwa jumlah minimum aplikasi yang diperlukan untuk menyelesaikan tugas diinstal di dalam wadah itu sendiri.

Lindungi buruh pelabuhan.sock: Harus dilindungi karena komunikasi antara container dan cluster diproses melalui soket ini. Karena saya tidak ingin menjelaskan secara detail di artikel ini, bacalah catatan dari Docker, apa yang bisa terjadi, dan juga bagaimana cara memblokir itu semua.

Gunakan rahasia Docker alih-alih variabel lingkungan: Ada rahasia sejak sekitar tahun 2017. Meskipun hal ini tidak aman, hal ini masih lebih baik daripada variabel lingkungan dalam meneruskan data rahasia ke penampung.

Jika artikel tersebut menarik minat Anda terhadap container, Anda dapat dengan mudah menginstal Docker atau microk8s (versi kecil dari Kubernetes). Di sini ada instruksi untuk menginstal Docker untuk Linux dan MacOS, dan di sini — petunjuk untuk menginstal microk8s untuk Windows, Linux dan MacOS.

Setelah instalasi Anda bisa pergi ini adalah panduan memulai cepat dari Docker, opsi serupa ditawarkan dan untuk microk8s.

Jika Anda ingin atau perlu mengikuti kursus komprehensif tentang Docker, di mana pembicara praktis memeriksa semua alatnya: dari abstraksi dasar hingga parameter jaringan, nuansa bekerja dengan berbagai sistem operasi dan bahasa pemrograman, cobalah “Kursus video Docker" Anda akan terbiasa dengan teknologi ini dan memahami di mana dan bagaimana cara terbaik menggunakan Docker. Dan pada saat yang sama, dapatkan kasus praktik terbaik - lebih baik belajar dengan aman dan dengan dukungan praktisi dari cerita tentang penggaruk daripada secara pribadi dari penggaruk itu sendiri dengan gagang berduri.

Sumber: www.habr.com

Tambah komentar