2375, 2376 Pentesting Docker
Docker Basics
What is
Docker is die voorste platform in die houeriseringsbedryf, wat deurlopende innovasie aanvoer. Dit fasiliteer die moeiteloze skepping en verspreiding van toepassings, wat strek van tradisioneel tot futuristies, en verseker hul veilige ontplooiing oor verskeie omgewings.
Basic docker architecture
containerd: Dit is 'n kern runtime vir houers, wat verantwoordelik is vir die omvattende bestuur van 'n houer se lewensiklus. Dit behels die hantering van beeld oordrag en berging, benewens die toesig oor die uitvoering, monitering, en netwerk van houers. Meer gedetailleerde insigte oor containerd word verder ondersoek.
Die container-shim speel 'n kritieke rol as 'n tussenpersoon in die hantering van headless containers, wat naatloos oorgeneem word van runc nadat die houers geïnitialiseer is.
runc: Geagter vir sy liggewig en universele houer runtime vermoëns, is runc in lyn met die OCI standaard. Dit word deur containerd gebruik om houers te begin en te bestuur volgens die OCI riglyne, en het ontwikkel uit die oorspronklike libcontainer.
grpc is noodsaaklik vir die fasilitering van kommunikasie tussen containerd en die docker-engine, wat doeltreffende interaksie verseker.
Die OCI is van kardinale belang om die OCI spesifikasies vir runtime en beelde te handhaaf, met die nuutste Docker weergawes wat in ooreenstemming is met beide die OCI beeld en runtime standaarde.
Basic commands
Containerd
Containerd is spesifiek ontwikkel om die behoeftes van houerplatforms soos Docker en Kubernetes, onder andere, te dien. Dit het ten doel om die uitvoering van houers oor verskeie bedryfstelsels, insluitend Linux, Windows, Solaris, en meer, te vereenvoudig deur bedryfstelsel-spesifieke funksionaliteit en stelselaanroepe te abstraheer. Die doel van Containerd is om slegs die noodsaaklike kenmerke wat deur sy gebruikers vereis word, in te sluit, en streef daarna om onnodige komponente te omseil. Dit word egter erken dat dit uitdagend is om hierdie doel heeltemal te bereik.
'n Sleutelontwerpbesluit is dat Containerd nie netwerkbestuur hanteer nie. Netwerk word beskou as 'n kritieke element in verspreide stelsels, met kompleksiteite soos Software Defined Networking (SDN) en diensontdekking wat aansienlik van een platform na 'n ander verskil. Daarom laat Containerd netwerkaspekte oor aan die platforms wat dit ondersteun.
Terwyl Docker Containerd gebruik om houers te laat loop, is dit belangrik om op te let dat Containerd slegs 'n substel van Docker se funksies ondersteun. Spesifiek, Containerd ontbreek die netwerkbestuursvermoëns wat in Docker teenwoordig is en ondersteun nie die skepping van Docker swerms direk nie. Hierdie onderskeid beklemtoon Containerd se gefokusde rol as 'n houer-uitvoeringsomgewing, wat meer gespesialiseerde funksies aan die platforms wat dit integreer, delegeer.
Podman
Podman is 'n oopbron houer-enjin wat voldoen aan die Open Container Initiative (OCI) standaarde, ontwikkel en onderhou deur Red Hat. Dit onderskei hom van Docker met verskeie kenmerkende eienskappe, veral sy daemonless argitektuur en ondersteuning vir rootless containers, wat gebruikers in staat stel om houers sonder root regte te laat loop.
Podman is ontwerp om versoenbaar te wees met Docker se API, wat die gebruik van Docker CLI-opdragte moontlik maak. Hierdie versoenbaarheid strek tot sy ekosisteem, wat gereedskap soos Buildah vir die bou van houerbeelde en Skopeo vir beeldoperasies soos push, pull, en inspect insluit. Meer besonderhede oor hierdie gereedskap kan op hul GitHub-bladsy gevind word.
Belangrike Verskille
Argitektuur: Anders as Docker se kliënt-bediener model met 'n agtergrond daemon, werk Podman sonder 'n daemon. Hierdie ontwerp beteken dat houers loop met die regte van die gebruiker wat hulle begin, wat sekuriteit verbeter deur die behoefte aan root toegang te elimineer.
Systemd Integrasie: Podman integreer met systemd om houers te bestuur, wat houerbestuur deur systemd eenhede moontlik maak. Dit staan in teenstelling met Docker se gebruik van systemd hoofsaaklik vir die bestuur van die Docker daemon proses.
Rootless Containers: 'n Belangrike kenmerk van Podman is sy vermoë om houers onder die inisieerder se regte te laat loop. Hierdie benadering minimaliseer die risiko's wat verband hou met houerbreuke deur te verseker dat aanvallers slegs die gecompromitteerde gebruiker se regte verkry, nie root toegang nie.
Podman se benadering bied 'n veilige en buigsame alternatief vir Docker, met die klem op gebruikersregte bestuur en versoenbaarheid met bestaande Docker werkvloei.
Let daarop dat aangesien podman daarop gemik is om dieselfde API as docker te ondersteun, kan jy dieselfde opdragte met podman gebruik as met docker soos:
Basiese Inligting
Remote API loop standaard op poort 2375 wanneer geaktiveer. Die diens sal standaard nie verifikasie vereis nie, wat 'n aanvaller in staat stel om 'n bevoorregte docker-container te begin. Deur die Remote API te gebruik, kan 'n mens gashere / (wortelgids) aan die container koppel en lêers van die gasheer se omgewing lees/schryf.
Standaard poort: 2375
Enumerasie
Handmatig
Let daarop dat jy die docker API kan opspoor met die docker
opdrag of curl
soos in die volgende voorbeeld:
As jy die afgeleë docker API met die docker
opdrag kan kontak, kan jy enige van die docker opdragte wat voorheen kommentaar gelewer is gebruik om met die diens te kommunikeer.
Jy kan export DOCKER_HOST="tcp://localhost:2375"
en vermy om die -H
parameter met die docker opdrag te gebruik
Vinige voorregverhoging
Curl
Soms sal jy 2376 op die TLS eindpunt sien. Ek kon nie daarmee verbind met die docker kliënt nie, maar dit is moontlik om dit met curl te doen.
As jy meer inligting oor hierdie onderwerp wil hê, is meer inligting beskikbaar waar ek die opdragte van gekopieer het: https://securityboulevard.com/2019/02/abusing-docker-api-socket/
Outomaties
Kompromittering
In die volgende bladsy kan jy maniere vind om uit 'n docker-container te ontsnap:
Docker SecurityDeur dit te misbruik, is dit moontlik om uit 'n container te ontsnap, jy kan 'n swak container op die afstandmasjien laat loop, daaruit ontsnap, en die masjien kompromitteer:
Privilege Escalation
As jy binne 'n gasheer is wat docker gebruik, kan jy hierdie inligting lees om te probeer om voorregte te verhoog.
Ontdekking van geheime in lopende Docker houers
Kontroleer env (omgewing veranderlike afdeling) vir geheime en jy mag vind:
Wagwoorde.
Ip’s.
Poorte.
Paaie.
Ander… .
As jy 'n lêer wil onttrek:
Beveiliging van jou Docker
Beveiliging van Docker installasie en gebruik
Jy kan die hulpmiddel https://github.com/docker/docker-bench-security gebruik om jou huidige docker installasie te inspekteer.
./docker-bench-security.sh
Jy kan die hulpmiddel https://github.com/kost/dockscan gebruik om jou huidige docker installasie te inspekteer.
dockscan -v unix:///var/run/docker.sock
Jy kan die hulpmiddel https://github.com/genuinetools/amicontained gebruik om die voorregte wat 'n houer sal hê wanneer dit met verskillende sekuriteitsopsies gedraai word, te bepaal. Dit is nuttig om die implikasies van die gebruik van sekere sekuriteitsopsies om 'n houer te draai, te ken:
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
Beveiliging van Docker Beelde
Jy kan 'n docker beeld van https://github.com/quay/clair gebruik om dit jou ander docker beelde te laat skandeer en kwesbaarhede te vind.
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
Beveiliging van Dockerfiles
Jy kan die hulpmiddel https://github.com/buddy-works/dockerfile-linter gebruik om jou Dockerfile te inspekteer en allerhande miskonfigurasies te vind. Elke miskonfigurasie sal 'n ID ontvang, jy kan hier https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md vind hoe om elkeen daarvan reg te stel.
dockerfilelinter -f Dockerfile
Jy kan die hulpmiddel https://github.com/replicatedhq/dockerfilelint gebruik om jou Dockerfile te inspekteer en allerhande miskonfigurasies te vind.
dockerfilelint Dockerfile
Jy kan die hulpmiddel https://github.com/RedCoolBeans/dockerlint gebruik om jou Dockerfile te inspekteer en allerhande miskonfigurasies te vind.
dockerlint Dockerfile
Jy kan die hulpmiddel https://github.com/hadolint/hadolint gebruik om jou Dockerfile te inspekteer en allerhande miskonfigurasies te vind.
hadolint Dockerfile
Teken van Verdagte aktiwiteit
Jy kan die hulpmiddel https://github.com/falcosecurity/falco gebruik om verdagte gedrag in lopende houers te detecteer.
Let op in die volgende gedeelte hoe Falco 'n kernmodule saamstel en dit invoeg. Daarna laai dit die reëls en begin om verdagte aktiwiteite te teken. In hierdie geval het dit 2 voorregte houers opgespoor wat begin is, 1 daarvan met 'n sensitiewe monteer, en na 'n paar sekondes het dit opgemerk hoe 'n skulp binne een van die houers geopen is.
Monitering Docker
Jy kan auditd gebruik om docker te moniteer.
Verwysings
Last updated