GNU/Linux >> Belajar Linux >  >> Linux

Amankan wadah Anda dengan SELinux

Ketika segala sesuatunya tidak berfungsi dengan benar di lingkungan Linux Anda, hal termudah untuk dilakukan adalah menonaktifkan Linux yang Ditingkatkan Keamanan (SELinux). Segalanya tiba-tiba mulai bekerja, dan Anda melupakannya—tetapi ini adalah perangkap umum yang berarti Anda kehilangan alat keamanan yang sangat kuat.

Ancaman meningkat seiring dengan munculnya wadah, layanan mikro, dan arsitektur terdistribusi. Ini karena masalah lama yang terkenal:kecepatan. Keuntungan container adalah memungkinkan Anda bergerak cepat, melakukan lebih banyak, dan berubah dengan cepat. Ini berarti adopsi kontainer telah berhasil, tetapi kecepatan yang diberikannya juga berarti Anda akan menghadapi lebih banyak masalah dan kerentanan. Ini terjadi secara alami saat Anda melakukan lebih banyak hal dengan lebih cepat dan lebih cepat.

Cara mengurangi ancaman

Wadah Linux

  • Apa itu container Linux?
  • Pengantar terminologi wadah
  • Unduh:Containers Primer
  • Operator Kubernetes:Mengotomatiskan platform orkestrasi container
  • eBook:Pola Kubernetes untuk mendesain aplikasi cloud-native
  • Apa itu Kubernetes?

Seperti yang dikatakan Sun Tzu, "Pejuang yang bijaksana menghindari pertempuran." Kutipan ini benar-benar beresonansi dalam hal pertahanan dasar kontainer. Untuk menghindari masalah (pertempuran), pastikan host container Anda aman dan Anda dapat menggunakan SELinux sebagai lini pertahanan pertama Anda.

SELinux adalah proyek open source yang dirilis pada tahun 2000 dan diintegrasikan ke dalam kernel Linux pada tahun 2003. Menurut penjelasan Red Hat, "SELinux adalah arsitektur keamanan untuk sistem Linux yang memungkinkan administrator memiliki kontrol lebih besar atas siapa yang dapat mengakses sistem. dikembangkan oleh Badan Keamanan Nasional Amerika Serikat (NSA) sebagai serangkaian tambalan ke kernel Linux menggunakan Modul Keamanan Linux (LSM)."

Mulai

Ketika Anda memikirkan kontainer, hal pertama yang mungkin terlintas dalam pikiran adalah Docker. Docker memulai revolusi adopsi container setelah muncul pada tahun 2013. Ini adalah salah satu alasan utama popularitas container meledak, tetapi seperti yang disebutkan di atas, tingkat adopsi yang tinggi meningkatkan kerentanan pengguna terhadap risiko keamanan.

Sebelum Anda dapat mengamankan container Docker dengan SELinux, Anda perlu menyiapkan beberapa hal.

Prasyarat:

  • CentOS 8/RHEL 8 diinstal dan dikonfigurasi
  • Docker CE diinstal dan dikonfigurasi
  • Dua akun dibuat:root dan non-root (mcalizo dalam contoh di bawah)

Jika Anda perlu mengatur Docker di server RHEL 8/CentOS 8 Anda, Anda dapat mengikuti petunjuk ini. Jika Anda menjalankan RHEL 8, Anda harus menghapus paket Podman dan runc yang telah diinstal sebelumnya sebelum memulai.

Pertama, pastikan SELinux diaktifkan:

[mcalizo@Rhel82 ~]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31
[mcalizo@Rhel82 ~]$

Kemudian, verifikasi versi OS Anda dan Docker sedang berjalan. Masuk sebagai root dan jalankan:

[root@rhel82 ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.2 (Ootpa)
[root@rhel82 ~]#

[root@rhel82 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-10-28 19:10:14 EDT; 15s ago
     Docs: https://docs.docker.com
 Main PID: 30768 (dockerd)
    Tasks: 8
   Memory: 39.0M
   CGroup: /system.slice/docker.service
           └─30768 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.889602941-04:00" level=error msg=">
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903413613-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903427451-04:00" level=warning msg>
Oct 28 19:10:13 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:13.903538271-04:00" level=info msg="L>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.132060506-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.308943088-04:00" level=info msg="L>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.319438549-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.319570298-04:00" level=info msg="D>
Oct 28 19:10:14 rhel82.home.labs.com dockerd[30768]: time="2020-10-28T19:10:14.333419209-04:00" level=info msg="A>
Oct 28 19:10:14 rhel82.home.labs.com systemd[1]: Started Docker Application Container Engine

Periksa versi Docker Anda:

[root@rhel82 ~]# docker --version
Docker version 19.03.13, build 4484c46d9d

Hack host Anda

Salah satu cara terbaik untuk memahami suatu masalah adalah dengan mengalaminya. Jadi, saya akan menunjukkan kepada Anda betapa mudahnya memasukkan kode berbahaya ke dalam host Docker jika keamanan Anda tidak diatur dengan benar.

Untuk dapat melakukan sesuatu yang buruk pada host Docker, pengguna non-root yang jahat (mcalizo dalam tutorial ini) harus menjadi bagian dari grup yang dapat membuat instance container Docker.

Pertama, konfirmasikan grup apa mcalizo pengguna milik:

[root@Rhel82 ~]# groups mcalizo
mcalizo : mcalizo

Outputnya menunjukkan bahwa mcalizo hanya milik kelompoknya sendiri. Ini berarti mcalizo tidak dapat membuat instance container Docker dan akan mendapatkan kesalahan ini jika mencoba:

[mcalizo@Rhel82 ~]$ docker run -it --rm centos:latest /bin/sh
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Untuk mengizinkan mcalizo untuk membuat instance container, tambahkan pengguna ke docker grup:

[root@Rhel82 ~]# usermod -G docker -a mcalizo
[root@Rhel82 ~]# groups mcalizo
mcalizo : mcalizo docker

Selanjutnya, terapkan fedora:latest wadah dan masuk ke wadah yang dipakai untuk menjelajahinya:

[mcalizo@Rhel82 ~]$ docker run -it --rm fedora:latest /bin/sh
Unable to find image 'fedora:latest' locally
latest: Pulling from library/fedora
ee7e89337106: Pull complete
Digest: sha256:b9ec86d36fca7b1d3de39cd7c258e8d90c377d312c21a7748071ce49069b8db4
Status: Downloaded newer image for fedora:latest
sh-5.0# cat /etc/redhat-release
Fedora release 33 (Thirty Three)

Saat Anda masuk ke wadah yang baru dibuat, Anda dapat melihat bahwa Anda secara otomatis masuk sebagai root:

sh-5.0# whoami
root
sh-5.0#

Sebagai root pengguna, Anda dapat melakukan apa saja di wadah ini, yang berarti Anda dapat mengeksploitasi host wadah dan melakukan banyak kerusakan. Karena Anda dapat membuat instance container, Anda dapat melakukan berbagai hal ke host meskipun Anda bukan bagian dari akun sudoers host.

Keluar dari container yang baru saja Anda buat, dan buat container baru untuk mendemonstrasikan exploit:

[mcalizo@Rhel82 ~]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@131043f2e306 /]#

Opsi -v memasang / . host Docker direktori ke wadah di bawah /exploit direktori:

[root@131043f2e306 /]#ls exploit/
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Karena sudah terpasang, Anda dapat melakukan apa saja pada host Docker. Misalnya, Anda dapat menghapus file, mengedit konfigurasi tertentu untuk membahayakan sistem, atau bahkan menginstal aplikasi Trojan horse atau malware lain untuk mencuri informasi penting.

Mengapa ini terjadi?

Anda mungkin bertanya-tanya mengapa ini mungkin karena SELinux dalam mode penegakan. Gali lebih dalam ke SELinux untuk melihat apa yang salah.

Verifikasi bahwa SELinux memiliki konteks Docker:

[mcalizo@Rhel82 ~]$ ps -eZ | grep docker
system_u:system_r:container_runtime_t:s0 30768 ? 00:00:04 dockerd
[mcalizo@Rhel82 ~]$

Seperti yang diharapkan, memang begitu. Ini berarti SELinux mengelola daemon Docker. Periksa daemon Docker untuk melihat apakah SELinux diaktifkan secara default:

[mcalizo@Rhel82 ~]$ docker info | grep Security -A3
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-193.el8.x86_64

SELinux bukan diaktifkan secara default. Ini masalahnya! Untuk memperbaikinya, aktifkan SELinux untuk mengontrol dan mengelola Docker dengan memperbarui atau membuat file /etc/docker/daemon.json seperti yang didokumentasikan di sini (Anda harus memiliki akses root untuk melakukannya):

[root@Rhel82 ~]# cat /etc/docker/daemon.json 
{
  "selinux-enabled": true
}
[root@Rhel82 ~]#
[root@Rhel82 ~]# systemctl restart docker

Setelah membuat atau memperbarui file dan memulai ulang Docker, Anda akan melihat bahwa dukungan SELinux diaktifkan di daemon Docker:

[root@Rhel82 ~]# systemctl restart docker
[mcalizo@Rhel82 root]$ docker info | grep Security -A3
 Security Options:
  seccomp
   Profile: default
  selinux
[mcalizo@Rhel82 root]$

Meskipun masih dimungkinkan untuk memasang sistem file tertentu di host Docker Anda di penampung Docker Anda, memperbarui atau mengakses file tidak lagi diizinkan:

[mcalizo@Rhel82 root]$ docker run -it --rm -v /:/exploit fedora:latest /bin/bash
[root@ecb5836da1f6 /]# touch /exploit/etc/shadow.sh
touch: cannot touch '/exploit/etc/shadow.sh': Permission denied
[root@ecb5836da1f6 /]#

Pelajari lebih lanjut

Garis pertahanan pertama Anda di dunia container bergantung pada seberapa kuat Anda menyiapkan sistem operasi host container Anda. Ada banyak cara untuk menerapkan keamanan Linux, termasuk opsi yang tersedia di pasar untuk meningkatkan postur keamanan Anda.

SELinux adalah lapisan keamanan tambahan yang dibangun ke dalam distribusi Linux secara default. Untuk memanfaatkannya dan melindungi sistem Anda dari kompromi, pastikan SELinux tetap aktif.

Jika Anda ingin mempelajari lebih lanjut, lihat:

  • Cara menginstal Docker CE di CentOS 8 / RH
  • Lembar contekan keamanan Docker
  • dokumentasi dockerd
  • Gunakan dokumentasi volume
  • Apa itu SELinux?

Linux
  1. Rekam sesi terminal Anda dengan Asciinema

  2. Pindai keamanan Linux Anda dengan Lynis

  3. Cara mengamankan layanan email Linux Anda dengan SSL/TLS

  1. Apakah distribusi Linux masih penting dengan container?

  2. Amankan Server Linux Anda Dengan Fail2Ban [Panduan Pemula]

  3. Cadangkan file Anda dengan rsync

  1. Memecahkan masalah jaringan Anda dengan tcpdump

  2. Setel mode penegakan SELinux dengan Ansible

  3. Cara Mengamankan server Ubuntu Anda dengan CSF Firewall