datadog / kubehound Goto Github PK
View Code? Open in Web Editor NEWKubernetes Attack Graph
Home Page: https://kubehound.io
License: Apache License 2.0
Kubernetes Attack Graph
Home Page: https://kubehound.io
License: Apache License 2.0
Describe the bug
Using the default docker configuraion, I was unable to examine the KubeHound output using the example Jupyter notebook deployment. I had to make config changes to the Dockerfiles to get it to work. Overall, my changes would break on some docker setups I think, but I was wondering if there's a way to make the example dev deployment more robust...
First problem is that in the notebook docker container it refers to "host": "host.docker.internal"
as the kubegraph host to connect to. However, by default, this hostname is not going to be added on Linux docker. Only by adding the following to the notebook docker-compose (see extra_hosts
attribute being added, docker/for-linux#264 (comment)):
version: "3.8"
services:
notebook:
build: ./notebook/
restart: unless-stopped
container_name: ${COMPOSE_PROJECT_NAME}-notebook
ports:
- "127.0.0.1:8888:8888"
networks:
- kubenet
volumes:
- ./notebook/shared:/root/notebooks/shared
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
kubenet:
When I tried to run the notebook and connect to the kubegraph using host.docker.internal
hostname (without these changes), then it would fail with "Name or service unknown" type of issue when trying to connect.
After adding this extra_hosts
attribute, it was still not working correctly for me (although, it may be some firewall issue, I wasn't able to determine root cause here), the kubegraph docker image did not expose the port for me, port is (understandably) only exposed on localhost. Now my assumption was that this should be OK, since you are accessing the same host as your localhost
by using host.docker.internal
. However, it denied connection to that port, I think because it's explicitly configured on the docker-compose, to expose the port only on the local interface 127.0.0.1
IP.
I had to add the following ports to the docker-compose.dev.yaml file to make the port accessible through host.docker.internal
from the notebook (172.17.0.1
is IP for my host machine on the docker network interface).
kubegraph:
build: ./kubegraph/
ports:
- "127.0.0.1:8182:8182"
- "127.0.0.1:8099:8099"
- "172.17.0.1:8182:8182"
- "172.17.0.1:8099:8099"
After these changes, I was finally able to run the example queries in the jupyter notebook and started seeing the output of KubeHound.
It also does not help if I put localhost
or 127.0.0.1
in the notebook, for obvious reasons (in the context of the notebook, localhost
is not the host machine).
To Reproduce
Steps to reproduce the behavior:
make kubehound
bin/kubehound
, since it only populates the database)Expected behavior
That the demo, example setup works without extra manual steps needed.
Desktop:
OS: Ubuntu 22.04.4 LTS
Browser N/A
Version 22.04.4
Additional context
Docker version:
$ docker version
Client: Docker Engine - Community
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 17:45:08 2023
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 26.0.0
API version: 1.45 (minimum version 1.24)
Go version: go1.21.8
Git commit: 8b79278
Built: Wed Mar 20 15:17:48 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.28
GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Docker compose & go installations:
$ docker compose version
Docker Compose version v2.26.1
$ go version
go version go1.22.1 linux/amd64
Is your feature request related to a problem? Please describe.
Your documentation recommends the use of G.V to visualise the results of your tool and gives no assistance for any other method. G.V has introduced a license scheme and it is no longer possible to use your tool without a license or a trial key.
Describe the solution you'd like
Provide documentation for using your tool with another visualisation interface.
Describe alternatives you've considered
I suppose you could write one yourself, but that seems somewhat overkill.
Additional context
I've had an email conversation with G.V and they said that KubeHound was launched when they still had a free tier but they don't any longer.
Describe the bug
Hi, I'm trying to make a simple query with the gremlin_python package and it's not working well.
I think in the gremlin_python package the implementation of DataType.custom is not implemented yet, take a look here: https://github.com/../gremlin-python/../graphbinaryV1.py. And you have to add its definition here : https://github.com/../gremlin-python/../traversal.py. I tried to create it on my own but without success.
Is there another way in python to extract the data for this type of query, like in json,csv or yaml or any other format ?
To Reproduce
Steps to reproduce the behavior:
KH_QUERY = "kh.V().critical()"
c = Client("ws://127.0.0.1:8182/gremlin", "kh")
results = c.submit(KH_QUERY).all().result()
print(results)
KeyError: <DataType.custom: 0>
Expected behavior
Result in list form or dict.
Desktop (please complete the following information):
Conclusion
Maybe I need to create an issue in https://github.com/apache/tinkerpop/tree/master. But I think you're implementing things for Kubehound there, so maybe you'll answer my issue.
It would be nice to include a JSON in the ./kubehound directory with the contents on https://kubehound.io/reference/attacks/.
Something along the lines of
[{ 'IDENTITY_ASSUME':{ 'Description':'', 'Details':'', 'Prerequisites':'' } }, {'ATTACK_2':{ 'Description':'', 'Details':'', 'Prerequisites':''}} ]
./kubehound.sh backend-up
WARN[0000] The "COMPOSE_PROJECT_NAME" variable is not set. Defaulting to a blank string.
WARN[0000] The "COMPOSE_PROJECT_NAME" variable is not set. Defaulting to a blank string.
(root) Additional property name is not allowed
Package: KubeHound_Darwin_arm64
Device: 23.0.0 Darwin Kernel Version 23.0.0: Fri Sep 15 14:41:43 PDT 2023; root:xnu-10002.1.13~1/RELEASE_ARM64_T6000 arm64
When running kubehound, I am getting the mentioned error saying that apiVersion is invalid. I am able to run kubectl commands without any problem.
./kubehound run
INFO[0000] Starting KubeHound (run_id: 3da28dd5-2050-46a2-bdb9-e34e90f54ca4) component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Initializing launch options component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loading application configuration from default embedded component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Initializing application telemetry component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
WARN[0000] Telemetry disabled via configuration component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loading cache provider component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loaded MemCacheProvider cache provider component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loading store database provider component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loaded MongoProvider store provider component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loading graph database provider component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loaded JanusGraphProvider graph provider component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Starting Kubernetes raw data ingest component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
INFO[0000] Loading Kubernetes data collector client component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
Error: raw data ingest: collector client creation: getting kubernetes config: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1"
Usage:
kubehound-local [flags]
Flags:
-c, --config string application config file
-h, --help help for kubehound-local
FATA[0000] raw data ingest: collector client creation: getting kubernetes config: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1" component=kubehound run_id=3da28dd5-2050-46a2-bdb9-e34e90f54ca4 service=kubehound
$ kubectl get pods No resources found in default namespace.
Can someone please help in resolving this?
Describe the bug
When i'm preparing Kubehound to run, I execute the ./kubehound.sh backend-up command but it fails to get container JanusGraph Server running, it keeps restarting with the message:
waiting for JanusGraph Server...
/etc/opt/janusgraph/janusgraph-server.yaml will be used to start JanusGraph Server in foreground
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Get the backend services running.
Desktop (please complete the following information):
Additional context
Downloaded release:
https://github.com/DataDog/KubeHound/releases/latest/download/KubeHound_Darwin_arm64.tar.gz
Result of docker inspect command:
[
{
"Id": "fd520a0c2ad222dceacc58b830dc61458ce23d3820575184c3efd851ef0da712",
"Created": "2023-10-09T18:22:05.43352592Z",
"Path": "docker-entrypoint.sh",
"Args": [
"janusgraph"
],
"State": {
"Status": "restarting",
"Running": true,
"Paused": false,
"Restarting": true,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2023-10-09T18:35:54.363988398Z",
"FinishedAt": "2023-10-09T18:36:00.551024818Z",
"Health": {
"Status": "unhealthy",
"FailingStreak": 0,
"Log": []
}
},
"Image": "sha256:f3c1795355a9da8c31065d8ed42be3bc82f0956987b6b8c2f96863ed63e658d5",
"ResolvConfPath": "/var/lib/docker/containers/fd520a0c2ad222dceacc58b830dc61458ce23d3820575184c3efd851ef0da712/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/fd520a0c2ad222dceacc58b830dc61458ce23d3820575184c3efd851ef0da712/hostname",
"HostsPath": "/var/lib/docker/containers/fd520a0c2ad222dceacc58b830dc61458ce23d3820575184c3efd851ef0da712/hosts",
"LogPath": "/var/lib/docker/containers/fd520a0c2ad222dceacc58b830dc61458ce23d3820575184c3efd851ef0da712/fd520a0c2ad222dceacc58b830dc61458ce23d3820575184c3efd851ef0da712-json.log",
"Name": "/kubehound-release-graphdb",
"RestartCount": 21,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "kubehound-release_kubenet",
"PortBindings": {
"8099/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "8099"
}
],
"8182/tcp": [
{
"HostIp": "127.0.0.1",
"HostPort": "8182"
}
]
},
"RestartPolicy": {
"Name": "unless-stopped",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"ConsoleSize": [
0,
0
],
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": null,
"DnsOptions": null,
"DnsSearch": null,
"ExtraHosts": [],
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": null,
"DeviceCgroupRules": null,
"DeviceRequests": null,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"Mounts": [
{
"Type": "volume",
"Source": "kubehound-release_kubegraph_data",
"Target": "/var/lib/janusgraph",
"VolumeOptions": {}
}
],
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/a4d0d3507b25b3eaca82f7ec2b0f2da04ffdb8ded599efc8a19c5feda1cdbb93-init/diff:/var/lib/docker/overlay2/a8f1f28540588e07eb04508c4ee81e06cbf63a434bddc4575f6d0f78811aa206/diff:/var/lib/docker/overlay2/d8b8f0cf1c7d20ac1c9642a8240d31655941896d09a41109504b65dea143e960/diff:/var/lib/docker/overlay2/56e71f8b61ab95b5a97f40455eecaf077b9acac07ef6641803f3c40b8796b36b/diff:/var/lib/docker/overlay2/2cd3fbfd7d130c5acf7230da098c5ac60e87399341827c319339119c8fc442d9/diff:/var/lib/docker/overlay2/6a624f092c6fd385d4a2a8626355c0b4537d18e956898b2b82c56a68152b978a/diff:/var/lib/docker/overlay2/d8099fe4a558b3705888a2b12a5ae05a343fc20f2a75c44e42654736a5a951b3/diff:/var/lib/docker/overlay2/9dff0fb5759d9d75b6ddd06553afe49478bed680a9564e95c9b243683d3233e1/diff:/var/lib/docker/overlay2/5410c92351bf7f10543d765b0db4030b53b1ec44c0229484ad2d6eed4bf8fdad/diff:/var/lib/docker/overlay2/a189c64337fae26d5ab6dbbd1b4e5e3ff728c640a161f26c23ec1a18259a2647/diff:/var/lib/docker/overlay2/c055c39615279e85958e5e8ecbacff557777b4bc35d6d709d56c62d6cbdcdbc7/diff:/var/lib/docker/overlay2/d05018347d73099dc3876478199684e128ef8ed1b873d8d9826710bbc070f061/diff:/var/lib/docker/overlay2/4222835c026936d9a752fd7304ee326d0d7242d244020418801fe981fdb4b587/diff:/var/lib/docker/overlay2/d683f794fcc53c911b941a37ddd2ccabd4110cf6ff15d5588ef40a7d4447e7c8/diff:/var/lib/docker/overlay2/6b054a1c0575c7ee608a87c114fbbc36695a3f38e07f22b2a274a13b359b7efb/diff:/var/lib/docker/overlay2/b905ff1b12468ba208dd0fb71eedf33535b147fa771d6ce10379cc38e68a3842/diff:/var/lib/docker/overlay2/ef48b8ee0977d8d177a87afb8d0a7c5032138bc8380ecc0e20b4fa61d0586e6e/diff:/var/lib/docker/overlay2/0433d70d3b548974a90e1e3321a1c4c1751da7adddb163a39cb586d94a8510e3/diff:/var/lib/docker/overlay2/aca1f2a6d43ee32b1755a64315fe81e420bb77aae380baa207dc4d39fc8016be/diff:/var/lib/docker/overlay2/b565d6cdaf625d36b016a7892397e194538b98ff3403c87118acd4d55d7e0e3f/diff",
"MergedDir": "/var/lib/docker/overlay2/a4d0d3507b25b3eaca82f7ec2b0f2da04ffdb8ded599efc8a19c5feda1cdbb93/merged",
"UpperDir": "/var/lib/docker/overlay2/a4d0d3507b25b3eaca82f7ec2b0f2da04ffdb8ded599efc8a19c5feda1cdbb93/diff",
"WorkDir": "/var/lib/docker/overlay2/a4d0d3507b25b3eaca82f7ec2b0f2da04ffdb8ded599efc8a19c5feda1cdbb93/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "volume",
"Name": "kubehound-release_kubegraph_data",
"Source": "/var/lib/docker/volumes/kubehound-release_kubegraph_data/_data",
"Destination": "/var/lib/janusgraph",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "fd520a0c2ad2",
"Domainname": "",
"User": "janusgraph",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"8099/tcp": {},
"8182/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"JAVA_HOME=/opt/java/openjdk",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"JAVA_VERSION=jdk-11.0.20.1+1",
"JANUS_VERSION=1.0.0-rc2",
"JANUS_HOME=/opt/janusgraph",
"JANUS_CONFIG_DIR=/etc/opt/janusgraph",
"JANUS_DATA_DIR=/var/lib/janusgraph",
"JANUS_SERVER_TIMEOUT=30",
"JANUS_STORAGE_TIMEOUT=60",
"JANUS_PROPS_TEMPLATE=berkeleyje-lucene",
"JANUS_INITDB_DIR=/docker-entrypoint-initdb.d",
"gremlinserver.graphs.graph=/etc/opt/janusgraph/janusgraph.properties",
"gremlinserver.threadPoolWorker=8",
"gremlinserver.gremlinPool=0",
"JAVA_OPTIONS_FILE=/opt/janusgraph/conf/jvm.options",
"janusgraph.ids.block-size=3000000",
"janusgraph.schema.constraints=true",
"janusgraph.schema.default=none",
"gremlinserver.maxContentLength=2097152",
"gremlinserver.evaluationTimeout=240000",
"gremlinserver.metrics.jmxReporter.enabled=true",
"gremlinserver.metrics.consoleReporter.enabled=false",
"gremlinserver.metrics.slf4jReporter.enabled=false",
"gremlinserver.metrics.graphiteReporter.enabled=false",
"gremlinserver.metrics.csvReporter.enabled=false",
"gremlinserver.scriptEngines.gremlin-groovy.plugins[org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin].classImports[+]=com.datadog.ase.kubehound.EndpointExposure",
"gremlinserver.scriptEngines.gremlin-groovy.plugins[org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin].files[+]=scripts/kubehound-dsl-init.groovy"
],
"Cmd": [
"janusgraph"
],
"Healthcheck": {
"Test": [
"CMD",
"bin/gremlin.sh",
"-e",
"scripts/remote-connect.groovy"
],
"Interval": 30000000000,
"Timeout": 30000000000,
"Retries": 3
},
"Image": "ghcr.io/datadog/kubehound-graph:latest",
"Volumes": null,
"WorkingDir": "/opt/janusgraph",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"com.datadoghq.ad.logs": "[{"app": "kubegraph", "service": "kubehound"}]",
"com.docker.compose.config-hash": "b9d8951c4c51d1f6e87eccf848003100083486f7d69a578abc59bc7db7cd14c1",
"com.docker.compose.container-number": "1",
"com.docker.compose.depends_on": "",
"com.docker.compose.image": "sha256:f3c1795355a9da8c31065d8ed42be3bc82f0956987b6b8c2f96863ed63e658d5",
"com.docker.compose.oneoff": "False",
"com.docker.compose.project": "kubehound-release",
"com.docker.compose.project.config_files": "xxxxxx/kubehound/deployments/kubehound/docker-compose.yaml,/xxxxx/kubehound/deployments/kubehound/docker-compose.release.yaml",
"com.docker.compose.project.working_dir": "/xxxxx/kubehound/deployments/kubehound",
"com.docker.compose.service": "kubegraph",
"com.docker.compose.version": "2.19.0",
"org.opencontainers.image.created": "”2023-09-06T06:40:31Z”",
"org.opencontainers.image.description": "Official JanusGraph Docker image",
"org.opencontainers.image.documentation": "https://docs.janusgraph.org/v1.0/",
"org.opencontainers.image.license": "Apache-2.0",
"org.opencontainers.image.ref.name": "ubuntu",
"org.opencontainers.image.revision": "30b9415",
"org.opencontainers.image.source": "https://github.com/DataDog/kubehound/",
"org.opencontainers.image.title": "JanusGraph Docker Image",
"org.opencontainers.image.url": "https://janusgraph.org/",
"org.opencontainers.image.vendor": "JanusGraph",
"org.opencontainers.image.version": "1.0.0-rc2"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "34b830f2f44a76437e74d97000d8d856147a79cdebcff0e5fd65616f41dd9858",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/34b830f2f44a",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"kubehound-release_kubenet": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"kubehound-release-graphdb",
"kubegraph",
"fd520a0c2ad2"
],
"NetworkID": "7a91697d9e723b2273592ad7051ee85f9406e04e654116c6ba30676599324450",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}
}
}
]
Hello, in the latest version, you forgot docker-compose.ui.yaml in the tar archives, I saw it in KubeHound_Linux_x86_64.tar.gz.
Maybe it's same for another archives.
after configuring gremlin server which is running on different host in kubehound I am getting below errors:
Error occurred during operation gremlinServerWSProtocol.readLoop(): 'E0703: expected string Key for map, got type='0x%!x(MISSING)''
2024/03/01 11:05:27 Read loop error 'E0703: expected string Key for map, got type='0x%!x(MISSING)'', closing read loop.
2024/03/01 11:05:27 Connection error callback invoked, closing protocol.
2024/03/01 11:05:27 Error occurred during operation gremlinServerWSProtocol.readLoop(): 'E0703: expected string Key for map, got type='0x%!x(MISSING)''
2024/03/01 11:05:27 Read loop error 'E0703: expected string Key for map, got type='0x%!x(MISSING)'', closing read loop.
2024/03/01 11:05:27 Connection error callback invoked, closing protocol.
can anyone help me in configuring kubehound and gremlin properly to work together. its bit urgent. Thanks in advance!
Hello.
currently, the docker exposes websocket port over localhost only:
tcp 0 0 127.0.0.1:8182 0.0.0.0:* LISTEN 3691545/docker-prox
Could you add an option to make it available over network (0.0.0.0:8182), please?
thanks
Rafal
We are at the step that we want to write a query sample to get the grapgical image. Can you please give us some sample queries for the database that's been created underneath Kube?
Also we need help with setup of the gtodv. Can you please show us an example and the fields that need to be completed - screenshot attached, thanks.
Describe the bug
We're suffering from the following output, but can't give much more info due to the lack of --verbose
flag or env variable behavior 😓
It seems that the collectors work well, but the graph-build state dies for "some reason" 😭
It would also be nice to have a --version
flag so we can output the info in issues and benefit from an easier reproduction setup, my test was done with v1.2.0/KubeHound_Linux_x86_64
and a default
configuration file from the same tgz file.
/opt/KubeHound » bash -x kubehound.sh run
+ KUBEHOUND_ENV=release
+ DOCKER_COMPOSE_FILE_PATH='-f deployments/kubehound/docker-compose.yaml'
+ DOCKER_COMPOSE_FILE_PATH+=' -f deployments/kubehound/docker-compose.release.yaml'
+ '[' -n '' ']'
+ DOCKER_COMPOSE_PROFILE='--profile infra'
++ hostname
+ DOCKER_HOSTNAME=XXXXXXXXXXX
+ export DOCKER_HOSTNAME
+ case "$1" in
+ run
+ ./kubehound -c config.yaml
INFO[0000] Starting KubeHound (run_id: 01hf961v7hj5etn4w28hpt0kez) component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Initializing launch options component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Loading application configuration from file config.yaml component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Initializing application telemetry component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
WARN[0000] Telemetry disabled via configuration component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Loading cache provider component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Loaded memcache cache provider component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Loading store database provider component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Loaded mongodb store provider component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Loading graph database provider component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0000] Loaded janusgraph graph provider component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Loading Kubernetes data collector client component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Loaded k8s-api-collector collector client component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Starting Kubernetes raw data ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Loading data ingestor component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Running dependency health checks component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Running data ingest and normalization component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Starting ingest sequences component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Waiting for ingest sequences to complete component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Running ingestor sequence core-pipeline component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Starting ingest sequence core-pipeline component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Running ingest group k8s-role-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Starting k8s-role-group ingests component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Waiting for k8s-role-group ingests to complete component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Running ingest k8s-cluster-role-ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0001] Running ingest k8s-role-ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0015] Completed k8s-role-group ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0015] Finished running ingest group k8s-role-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0015] Running ingest group k8s-binding-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0015] Starting k8s-binding-group ingests component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0015] Running ingest k8s-role-binding-ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0015] Waiting for k8s-binding-group ingests to complete component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0015] Running ingest k8s-cluster-role-binding-ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0026] Batch writer 208 Identity written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0026] Batch writer 254 PermissionSet written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Batch writer 306 Identity written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Batch writer 337 PermissionSet written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Completed k8s-binding-group ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Finished running ingest group k8s-binding-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Running ingest group k8s-core-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Starting k8s-core-group ingests component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Waiting for k8s-core-group ingests to complete component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Running ingest k8s-node-ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0030] Running ingest k8s-endpoint-ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0031] Batch writer 32 Node written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0050] Batch writer 1842 Endpoint written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0050] Completed k8s-core-group ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0050] Finished running ingest group k8s-core-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0050] Running ingest group k8s-pod-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0050] Starting k8s-pod-group ingests component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0050] Waiting for k8s-pod-group ingests to complete component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0050] Running ingest k8s-pod-ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Batch writer 915 Pod written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Batch writer 2139 Container written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Batch writer 2725 Volume written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Batch writer 1398 Endpoint written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Completed k8s-pod-group ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Finished running ingest group k8s-pod-group component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Completed ingest sequence core-pipeline component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Completed pipeline ingest component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Completed data ingest and normalization in 1m8.958262579s component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building attack graph component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Loading graph edge definitions component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Loading graph builder component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Running dependency health checks component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Constructing graph component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
WARN[0070] Using large cluster optimizations in graph construction component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Starting mutating edge construction component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge PodCreate component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 106 PodCreate::POD_CREATE written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge PodExec component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 9 PodExec::POD_EXEC written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge PodPatch component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 23 PodPatch::POD_PATCH written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge TokenBruteforceCluster component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 34 TokenBruteforceCluster::TOKEN_BRUTEFORCE written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge TokenListCluster component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 32 TokenListCluster::TOKEN_LIST written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Starting simple edge construction component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Creating edge builder worker pool component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge ContainerEscapeNsenter component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge ExploitHostRead component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 0 ContainerEscapeNsenter::CE_NSENTER written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge IdentityAssumeNode component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 32 IdentityAssumeNode::IDENTITY_ASSUME written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge RoleBindClusteRoleBindingbClusterRoleClusterRole component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 90 ExploitHostRead::EXPLOIT_HOST_READ written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge RoleBindRoleBindingbRoleBindingRole component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 282 RoleBindRoleBindingbRoleBindingRole::ROLE_BIND written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge TokenSteal component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 10 RoleBindClusteRoleBindingbClusterRoleClusterRole::ROLE_BIND written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge VolumeDiscover component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Edge writer 1583 TokenSteal::TOKEN_STEAL written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0070] Building edge ContainerAttach component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 2725 VolumeDiscover::VOLUME_DISCOVER written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge EndpointExploitInternal component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 2139 ContainerAttach::CONTAINER_ATTACH written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge ContainerEscapePrivilegedMount component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 61 ContainerEscapePrivilegedMount::CE_PRIV_MOUNT written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge ContainerEscapeSysPtrace component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 18 ContainerEscapeSysPtrace::CE_SYS_PTRACE written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge PodAttach component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 1398 EndpointExploitInternal::ENDPOINT_EXPLOIT written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge TokenListNamespace component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 915 PodAttach::POD_ATTACH written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge EndpointExploitExternal component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 1682 EndpointExploitExternal::ENDPOINT_EXPLOIT written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge ExploitHostTraverseToken component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 782 ExploitHostTraverseToken::EXPLOIT_HOST_TRAVERSE written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge ExploitHostWrite component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 475 ExploitHostWrite::EXPLOIT_HOST_WRITE written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge IdentityAssumeContainer component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 5567 TokenListNamespace::TOKEN_LIST written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge PodExecNamespace component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 1115 PodExecNamespace::POD_EXEC written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge ContainerEscapeModuleLoad component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Edge writer 61 ContainerEscapeModuleLoad::CE_MODULE_LOAD written component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Building edge PermissionDiscover component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
ERRO[0071] building simple edge PermissionDiscover: PERMISSION_DISCOVER edge OUT id convert: graph id cache fetch (storeID=655493c1846c9e2644854855): no matching cache entry component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
INFO[0071] Closed background janusgraph worker on context cancel component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
Error: building attack graph: graph builder edge calculation: PERMISSION_DISCOVER edge OUT id convert: graph id cache fetch (storeID=655493c1846c9e2644854855): no matching cache entry
ERRO[0071] building simple edge IdentityAssumeContainer: IDENTITY_ASSUME edge IN id convert: graph id cache fetch (storeID=655493cc846c9e2644855172): no matching cache entry component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
Usage:
kubehound-local [flags]
Flags:
-c, --config string application config file
-h, --help help for kubehound-local
FATA[0071] building attack graph: graph builder edge calculation: PERMISSION_DISCOVER edge OUT id convert: graph id cache fetch (storeID=655493c1846c9e2644854855): no matching cache entry component=kubehound run_id=01hf961v7hj5etn4w28hpt0kez service=kubehound
Expected behavior
A working ingestion & graph-build process 😇
Desktop:
Ubuntu 20.04.6 LTS
// Yup, upgrading soon..v1.2.0/KubeHound_Linux_x86_64
Additional context
Thanks for this awesome tool, a PoC on minikupe worked nicely, but on our bigger infra.. KO.. Let me know if we can give anonymized version of specific files to help for bug reproduction!
Have a nice day! 🌹
Describe the bug
Can't start KubeHound by following the recommended steps from README.md.
To Reproduce
Steps to reproduce the behavior:
make kubehound
bin/kubehound
Expected behavior
KubeHound starts and runs a scan without any manual intervention needed.
Output
No need for screenshots, so here's my output:
$ make kubehound
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
DOCKER_HOSTNAME=NB-PF3E0CZE docker compose -f deployments/kubehound/docker-compose.yaml -f deployments/kubehound/docker-compose.dev.yaml -f deployments/kubehound/docker-compose.ui.yaml --profile infra up --force-recreate --build -d
WARN[0000] /home/wisefrog/git/KubeHound/deployments/kubehound/docker-compose.yaml: `version` is obsolete
WARN[0000] /home/wisefrog/git/KubeHound/deployments/kubehound/docker-compose.dev.yaml: `version` is obsolete
WARN[0000] /home/wisefrog/git/KubeHound/deployments/kubehound/docker-compose.ui.yaml: `version` is obsolete
[+] Building 1.4s (31/31) FINISHED docker:default
=> [notebook internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 2.84kB 0.0s
=> [notebook internal] load metadata for docker.io/library/amazonlinux:2 1.0s
=> [kubegraph internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 3.20kB 0.0s
=> [kubegraph internal] load metadata for docker.io/janusgraph/janusgraph:1.0.0 1.0s
=> [kubegraph internal] load metadata for docker.io/library/maven:3-openjdk-11-slim 0.9s
=> [notebook internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [notebook 1/8] FROM docker.io/library/amazonlinux:2@sha256:85825c659f9d0d51218492aab1f71a1d5adae074e95019b5518c071249a9ec95 0.0s
=> [notebook internal] load build context 0.0s
=> => transferring context: 175B 0.0s
=> CACHED [notebook 2/8] RUN mkdir -p "/root" && mkdir -p "/root/notebooks" && yum update -y && yum install tar gzip git amazon-linux-extras which -y && curl --silent --location https:/ 0.0s
=> CACHED [notebook 3/8] ADD KubeHound.ipynb /root/notebooks/KubeHound.ipynb 0.0s
=> CACHED [notebook 4/8] ADD RedTeam.ipynb /root/notebooks/RedTeam.ipynb 0.0s
=> CACHED [notebook 5/8] ADD BlueTeam.ipynb /root/notebooks/BlueTeam.ipynb 0.0s
=> CACHED [notebook 6/8] ADD SecurityPosture.ipynb /root/notebooks/SecurityPosture.ipynb 0.0s
=> CACHED [notebook 7/8] ADD ./service.sh /usr/bin/service.sh 0.0s
=> CACHED [notebook 8/8] RUN chmod +x /usr/bin/service.sh 0.0s
=> [notebook] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:ac062a6fd18e4c0caaf52ecf09d56cffe4fa62ba7a421eccd2e125ae90a1aa3d 0.0s
=> => naming to docker.io/library/kubehound-dev-notebook 0.0s
=> [kubegraph internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [kubegraph internal] load build context 0.0s
=> => transferring context: 1.55kB 0.0s
=> [kubegraph stage-1 1/8] FROM docker.io/janusgraph/janusgraph:1.0.0@sha256:164893be6d2bb20d07729413fbae7e844d26ddbb2ebdad4cd3bad9187f464faa 0.0s
=> [kubegraph build 1/4] FROM docker.io/library/maven:3-openjdk-11-slim@sha256:2cb7c73ba2fd0f7ae64cfabd99180030ec85841a1197b4ae821d21836cb0aa3b 0.0s
=> CACHED [kubegraph stage-1 2/8] COPY --chown=janusgraph:janusgraph kubehound-db-init.groovy /docker-entrypoint-initdb.d/ 0.0s
=> CACHED [kubegraph stage-1 3/8] COPY --chown=janusgraph:janusgraph lib/jmx_prometheus_javaagent-0.18.0.jar /opt/janusgraph/lib/jmx_prometheus_javaagent-0.18.0.jar 0.0s
=> CACHED [kubegraph stage-1 4/8] COPY --chown=janusgraph:janusgraph lib/exporter-config.yaml /opt/janusgraph/lib/exporter-config.yaml 0.0s
=> CACHED [kubegraph stage-1 5/8] COPY --chown=janusgraph:janusgraph conf/jvm.options /opt/janusgraph/conf/jvm.options 0.0s
=> CACHED [kubegraph build 2/4] COPY dsl/kubehound/src /home/app/src 0.0s
=> CACHED [kubegraph build 3/4] COPY dsl/kubehound/pom.xml /home/app 0.0s
=> CACHED [kubegraph build 4/4] RUN mvn -f /home/app/pom.xml clean install 0.0s
=> CACHED [kubegraph stage-1 6/8] COPY --from=build --chown=janusgraph:janusgraph /home/app/target/kubehound-1.0.0.jar /opt/janusgraph/lib/kubehound-1.0.0.jar 0.0s
=> CACHED [kubegraph stage-1 7/8] COPY --chown=janusgraph:janusgraph scripts/health-check.groovy /opt/janusgraph/scripts/ 0.0s
=> CACHED [kubegraph stage-1 8/8] COPY --chown=janusgraph:janusgraph kubehound-dsl-init.groovy /opt/janusgraph/scripts/ 0.0s
=> [kubegraph] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:dc2ea5bc822eb845d833934320ddc55644a76a99834860c190ec905b93d6b578 0.0s
=> => naming to docker.io/library/kubehound-dev-kubegraph 0.0s
[+] Running 3/3
✔ Container kubehound-dev-notebook Started 10.8s
✔ Container kubehound-dev-graphdb Healthy 3.7s
✔ Container kubehound-dev-storedb Started 0.7s
cd cmd && go build -ldflags="-X github.com/DataDog/KubeHound/pkg/config.BuildVersion=59ba228-" -o ../bin/kubehound kubehound/*.go
Then trying to execute KubeHound:
$ bin/kubehound
INFO[0000] Initializing application telemetry component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
WARN[0000] Telemetry disabled via configuration component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
INFO[0000] Starting KubeHound (run_id: 01hv1eq4hr4bfewxcf5v7g10yj) component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
INFO[0000] Initializing providers (graph, cache, store) component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
INFO[0000] Loading cache provider component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
INFO[0000] Loaded memcache cache provider component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
INFO[0000] Loading store database provider component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
Error: factory config creation: store database client creation: error parsing uri: scheme must be "mongodb" or "mongodb+srv"
Usage:
kubehound-local [flags]
kubehound-local [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
dump Collect Kubernetes resources of a targeted cluster
help Help about any command
Flags:
-c, --config string application config file
-h, --help help for kubehound-local
Use "kubehound-local [command] --help" for more information about a command.
FATA[0000] factory config creation: store database client creation: error parsing uri: scheme must be "mongodb" or "mongodb+srv" component=kubehound run_id=01hv1eq4hr4bfewxcf5v7g10yj service=kubehound
Desktop:
Additional context
Docker version:
$ docker version
Client: Docker Engine - Community
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 17:45:08 2023
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 26.0.0
API version: 1.45 (minimum version 1.24)
Go version: go1.21.8
Git commit: 8b79278
Built: Wed Mar 20 15:17:48 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.28
GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Docker compose & go installations:
$ docker compose version
Docker Compose version v2.26.1
$ go version
go version go1.22.1 linux/amd64
Hi!
Thank you for a great tool! I've tested this out on my local Kubernetes cluster (minikube) with Kubernetes goat setup on it and it worked fine. However, for my current assessment I need to test Kubernetes cluster which is setup on AWS EKS and the applications are managed via ArgoCD. Basically the target organization uses GitOps approach to manage their applications and infrastructure.
Given this context I have a few questions. I've made several attempts to deploy and use Kubehound from within a Linux image in a Kubernetes Pod, however I've faced multiple docker issues within the Pod. This definitely felt like I took wrong approach to deploy and run Kubehound.
Is it possible to run KubeHound against AWS EKS cluster? If yes, how it should be deployed? If we were to deploy it using ArgoCD with Helm packages, do you have any examples for that?
Describe the bug
https://kubehound.io/ certificate expired
To Reproduce
Steps to reproduce the behavior:
Hello !
Thank's for the great tool !
When I tested the tool, I saw that the kubehound attacks (TTPs) were not linked directly in the Janus Graph database.
I suggest adding TTPs directly to the Edges details.
If we want to browse the Janus graph data or link the Janus graph with data from another security tool to trace or automate attacks or propose mitigations.
In these cases it's intressting to add the TTP reference directly to the edges.
Describe the bug
the below links are broken -
https://github.com/DataDog/KubeHound/blob/main/docs/application/Architecture.excalidraw
https://github.com/DataDog/KubeHound/blob/main/edges
https://github.com/DataDog/KubeHound/tree/main/docs/edges
To Reproduce
Steps to reproduce the behavior - just one example:
Expected behavior
Should be an overview of the application architecture
Additional context
not critical - but considering you're switching it from inner-source to open-source, potentially less people could be interested in it
Is your feature request related to a problem? Please describe.
At the moment there are attacks covering the bind and impersonate verbs in RBAC and their capabilities for privilege escalation. Another one which might be interesting to cover is the escalate verb, as it allows literal privilege escalation and is used as par of Kubernetes system accounts. There's some more details on it here
Hello,
thanks for amazing tool. Unfortunately, I cannot use it in my current assessment. My kubeconfig works fine, I can get all information from kubectl I want, but when I run './kubehound.sh run', I am getting this error:
INFO[0000] Starting KubeHound (run_id: 6d31917e-4ebe-4797-8169-2b50b18e35a8) component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Initializing launch options component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Loading application configuration from file config.yaml component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Initializing application telemetry component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Loading cache provider component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Loaded MemCacheProvider cache provider component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Loading store database provider component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Loaded MongoProvider store provider component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Loading graph database provider component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0000] Loaded JanusGraphProvider graph provider component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0001] Starting Kubernetes raw data ingest component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
INFO[0001] Loading Kubernetes data collector client component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
Error: raw data ingest: collector client creation: getting kubernetes config: no Auth Provider found for name "azure"
Usage:
kubehound-local [flags]
Flags:
-c, --config string application config file
-h, --help help for kubehound-local
FATA[0001] raw data ingest: collector client creation: getting kubernetes config: no Auth Provider found for name "azure" component=kubehound run_id=6d31917e-4ebe-4797-8169-2b50b18e35a8 service=kubehound
Any suggestion, please?
thanks
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.