2375, 2376 Pentesting Docker
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Docker, konteynerleştirme endüstrisinde öncü platform olup, sürekli yenilik konusunda öncülük etmektedir. Uygulamaların gelenekselden geleceğe kadar kolayca oluşturulmasını ve dağıtılmasını sağlar ve bunların çeşitli ortamlarda güvenli dağıtımını garanti eder.
containerd: Bu, konteynerlerin yaşam döngüsünün kapsamlı yönetimi ile görevli bir temel çalışma zamanıdır. Bu, görüntü transferi ve depolaması ile birlikte konteynerlerin çalıştırılması, izlenmesi ve ağ bağlantısının denetimini içerir. Containerd hakkında daha ayrıntılı bilgiler daha fazla incelenmiştir.
container-shim, başsız konteynerlerin yönetiminde bir aracı olarak kritik bir rol oynar ve konteynerler başlatıldıktan sonra runc'dan sorumluluğu devralır.
runc: Hafif ve evrensel konteyner çalışma zamanı yetenekleri ile tanınan runc, OCI standardı ile uyumludur. Containerd tarafından konteynerleri başlatmak ve yönetmek için OCI yönergelerine göre kullanılır ve orijinal libcontainer'dan evrim geçirmiştir.
grpc, containerd ile docker-engine arasında ileşimi kolaylaştırmak için gereklidir ve verimli etkileşim sağlar.
OCI, çalışma zamanı ve görüntüler için OCI spesifikasyonlarını korumada kritik bir rol oynar ve en son Docker sürümleri hem OCI görüntü hem de çalışma zamanı standartlarına uygundur.
Containerd, Docker ve Kubernetes gibi konteyner platformlarının ihtiyaçlarını karşılamak için özel olarak geliştirilmiştir. Amacı, işletim sistemi özel işlevselliğini ve sistem çağrılarını soyutlayarak, Linux, Windows, Solaris ve daha fazlası dahil olmak üzere çeşitli işletim sistemleri arasında konteynerlerin çalıştırılmasını basitleştirmektir. Containerd'nin hedefi, kullanıcıları tarafından gerekli olan yalnızca temel özellikleri içermek ve gereksiz bileşenleri hariç tutmaya çalışmaktır. Ancak, bu hedefe tamamen ulaşmanın zorluğu kabul edilmektedir.
Ana tasarım kararı, Containerd'nin ağ yönetimini üstlenmemesidir. Ağ, dağıtık sistemlerde kritik bir unsur olarak kabul edilir ve Yazılım Tanımlı Ağ (SDN) ve hizmet keşfi gibi karmaşıklıklar, bir platformdan diğerine önemli ölçüde değişir. Bu nedenle, Containerd, desteklediği platformların yönetmesine bırakır.
Docker, konteynerleri çalıştırmak için Containerd'yi kullanırken, Containerd'nin yalnızca Docker'ın işlevselliklerinin bir alt kümesini desteklediğini belirtmek önemlidir. Özellikle, Containerd, Docker'da bulunan ağ yönetim yeteneklerinden yoksundur ve doğrudan Docker sürümleri oluşturmayı desteklemez. Bu ayrım, Containerd'nin bir konteyner çalışma zamanı ortamı olarak odaklanmış rolünü vurgulamakta ve daha özel işlevsellikleri entegre olduğu platformlara devretmektedir.
Podman, Red Hat tarafından geliştirilen ve sürdürülen, Open Container Initiative (OCI) standartlarına uyan açık kaynaklı bir konteyner motorudur. Daemonless mimarisi ve rootless konteynerler desteği gibi birkaç belirgin özellik ile Docker'dan ayrılır; bu, kullanıcıların konteynerleri root ayrıcalıkları olmadan çalıştırmalarını sağlar.
Podman, Docker'ın API'si ile uyumlu olacak şekilde tasarlanmıştır ve Docker CLI komutlarının kullanılmasına olanak tanır. Bu uyumluluk, konteyner görüntüleri oluşturmak için Buildah ve push, pull ve inspect gibi görüntü işlemleri için Skopeo gibi araçları içeren ekosistemine de uzanır. Bu araçlar hakkında daha fazla ayrıntı GitHub sayfalarında bulunabilir.
Ana Farklılıklar
Mimari: Docker’ın arka planda bir daemon ile çalışan istemci-sunucu modelinin aksine, Podman bir daemon olmadan çalışır. Bu tasarım, konteynerlerin başlatan kullanıcının ayrıcalıklarıyla çalışmasını sağlar ve root erişimine ihtiyaç duymayarak güvenliği artırır.
Systemd Entegrasyonu: Podman, konteynerleri yönetmek için systemd ile entegre olur ve systemd birimleri aracılığıyla konteyner yönetimine olanak tanır. Bu, Docker'ın esas olarak Docker daemon sürecini yönetmek için systemd kullanmasıyla zıtlık gösterir.
Rootless Kapsayıcılar: Podman'ın önemli bir özelliği, konteynerleri başlatan kullanıcının ayrıcalıkları altında çalıştırabilmesidir. Bu yaklaşım, saldırganların yalnızca tehlikeye atılan kullanıcının ayrıcalıklarını elde etmesini sağlayarak konteyner ihlalleriyle ilişkili riskleri en aza indirir, root erişimi sağlamaz.
Podman'ın yaklaşımı, kullanıcı ayrıcalık yönetimi ve mevcut Docker iş akışlarıyla uyumluluğu vurgulayarak Docker'a güvenli ve esnek bir alternatif sunar.
Podman, Docker ile aynı API'yi desteklemeyi amaçladığı için, podman ile docker ile aynı komutları kullanabilirsiniz, örneğin:
Uzaktan API, etkinleştirildiğinde varsayılan olarak 2375 portunda çalışır. Hizmet varsayılan olarak kimlik doğrulama gerektirmeyecek şekilde ayarlanmıştır, bu da bir saldırganın ayrıcalıklı bir docker konteyneri başlatmasına olanak tanır. Uzaktan API kullanılarak, ana makineyi / (kök dizin) konteynere eklemek ve ana makinenin ortamındaki dosyaları okumak/yazmak mümkündür.
Varsayılan port: 2375
Docker API'sini listelemek için docker
komutunu veya aşağıdaki örnekteki gibi curl
kullanabileceğinizi unutmayın:
Eğer uzaktaki docker API'si ile docker
komutunu iletişim kurabiliyorsanız, hizmetle etkileşimde bulunmak için daha önce bahsedilen docker komutlarını çalıştırabilirsiniz.
export DOCKER_HOST="tcp://localhost:2375"
yapabilir ve docker komutuyla -H
parametresini kullanmayı kaçınabilirsiniz
Hızlı ayrıcalık yükseltme
Curl
Bazen TLS uç noktası için 2376 numarasını görebilirsiniz. Docker istemcisi ile buna bağlanmayı başaramadım ama curl ile bunu yapmak mümkün.
Eğer bunun hakkında daha fazla bilgi istiyorsanız, komutları kopyaladığım yerde daha fazla bilgi mevcuttur: https://securityboulevard.com/2019/02/abusing-docker-api-socket/
Aşağıdaki sayfada docker konteynerinden kaçma yollarını bulabilirsiniz:
Docker SecurityBunu kötüye kullanarak bir konteynerden kaçmak mümkündür, uzaktaki makinede zayıf bir konteyner çalıştırabilir, ondan kaçabilir ve makineyi tehlikeye atabilirsiniz:
Eğer docker kullanan bir hostun içindeyseniz, yetkileri yükseltmeye çalışmak için bu bilgiyi okuyabilirsiniz.
Kontrol et env (çevresel değişken bölümü) gizli bilgiler için ve şunları bulabilirsin:
Parolalar.
IP’ler.
Portlar.
Yollar.
Diğerleri… .
Bir dosyayı çıkarmak istiyorsan:
Mevcut docker kurulumunuzu incelemek için https://github.com/docker/docker-bench-security aracını kullanabilirsiniz.
./docker-bench-security.sh
Mevcut docker kurulumunuzu incelemek için https://github.com/kost/dockscan aracını kullanabilirsiniz.
dockscan -v unix:///var/run/docker.sock
Farklı güvenlik seçenekleriyle çalıştırıldığında bir konteynerin sahip olacağı ayrıcalıkları incelemek için https://github.com/genuinetools/amicontained aracını kullanabilirsiniz. Bu, bir konteyneri çalıştırmak için bazı güvenlik seçeneklerini kullanmanın sonuçlarını bilmek için faydalıdır:
docker run --rm -it r.j3ss.co/amicontained
docker run --rm -it --pid host r.j3ss.co/amicontained
docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained
Diğer docker görsellerinizi taramak ve güvenlik açıklarını bulmak için https://github.com/quay/clair docker görselini kullanabilirsiniz.
docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"
clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image
Dockerfile'ınızı incelemek ve her türlü yanlış yapılandırmayı bulmak için https://github.com/buddy-works/dockerfile-linter aracını kullanabilirsiniz. Her yanlış yapılandırmaya bir ID verilecektir, bunları düzeltmek için https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md adresinden nasıl düzeltileceğini bulabilirsiniz.
dockerfilelinter -f Dockerfile
Dockerfile'ınızı incelemek ve her türlü yanlış yapılandırmayı bulmak için https://github.com/replicatedhq/dockerfilelint aracını kullanabilirsiniz.
dockerfilelint Dockerfile
Dockerfile'ınızı incelemek ve her türlü yanlış yapılandırmayı bulmak için https://github.com/RedCoolBeans/dockerlint aracını kullanabilirsiniz.
dockerlint Dockerfile
Dockerfile'ınızı incelemek ve her türlü yanlış yapılandırmayı bulmak için https://github.com/hadolint/hadolint aracını kullanabilirsiniz.
hadolint Dockerfile
Çalışan konteynerlerde şüpheli davranışları tespit etmek için https://github.com/falcosecurity/falco aracını kullanabilirsiniz.
Aşağıdaki bölümde Falco'nun bir çekirdek modülü derleyip eklediğini not edin. Daha sonra, kuralları yükler ve şüpheli faaliyetleri kaydetmeye başlar. Bu durumda, 1'i hassas bir montaj ile birlikte 2 ayrıcalıklı konteynerin başlatıldığını tespit etmiştir ve birkaç saniye sonra bir kabuğun konteynerlerden birinin içinde açıldığını tespit etmiştir.
Docker'ı izlemek için auditd kullanabilirsiniz.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)