
कंटेनर इमेज के लिए मैलवेयर स्कैनर: डेमनलेस, लेयर-अवेयर, ClamAV और YARA
meles कंटेनर इमेज के लिए एक मैलवेयर स्कैनर है: किसी इमेज संदर्भ पर एक कमांड, कोई Docker डेमॉन नहीं, CI-अनुकूल एक्ज़िट कोड। Kubernetes में यह आपके पॉड्स द्वारा चलाई जाने वाली हर इमेज को भी स्कैन करता है और, यदि आप चाहें, तो नए पॉड्स को तब तक रोके रखता है जब तक उनकी इमेज स्कैन न हो जाए।
meles यह देखता है कि किसी इमेज में क्या है, उसके चलने से पहले। यह भेद्यता स्कैनरों और Falco जैसे रनटाइम डिटेक्शन का पूरक है; यह किसी का भी स्थान नहीं लेता।
यह नाम Meles meles, यूरोपीय बेजर से आया है – यह परतों को खोदकर देखता है।
meles image <ref> मैलवेयर मिलने पर पाइपलाइन को विफल कर देता है। आउटपुट टेबल, JSON या SARIF के रूप में, गलत सकारात्मक परिणामों के लिए ignore नियमों के साथ।MalwareReport लिखता है, वैकल्पिक Prometheus अलर्ट के साथ।अपनी मशीन पर इसे आज़माएँ (Linux amd64, Docker, bash):
curl -fsSL https://github.com/movray/meles/releases/download/v0.3.3/meles_0.3.3_linux_amd64.tar.gz | tar -xz meles
docker run -d --name clamd -p 127.0.0.1:3310:3310 clamav/clamav:1.4
export MELES_CLAMD=tcp://127.0.0.1:3310
until (exec 3<>/dev/tcp/127.0.0.1/3310 && printf 'zPING\0' >&3 && head -c4 <&3 | grep -q PONG) 2>/dev/null; do sleep 5; done
./meles selftest
./meles image alpine:3.20
या क्लस्टर में (क्लस्टर एडमिन, एक डिफ़ॉल्ट StorageClass, नोड पर लगभग 2 GB खाली मेमोरी):
kubectl create namespace meles
kubectl label namespace meles pod-security.kubernetes.io/enforce=baseline
helm install meles oci://ghcr.io/movray/charts/meles --version 0.3.3 -n meles --set operator.enabled=true
kubectl -n meles rollout status deploy/meles-clamd --timeout=15m
kubectl get malwarereports -A # every image running in your cluster
kubectl -n meles port-forward svc/meles-server 8080:80 # http://localhost:8080/
अब ऑपरेटर हर pod की इमेज खींचता और स्कैन करता है, जो आपकी रजिस्ट्रियों की pull सीमाओं में गिना जाता है; यह केवल रिपोर्ट करता है और आपके pods को छूता नहीं। रिपोर्टें कुछ ही मिनटों में आ जाती हैं। बहुत बड़ी बाइनरी Incomplete पर समाप्त हो सकती है, जो कभी भी clean नहीं होती: देखें
Reading the results।
port-forward केवल एक नज़र डालने का सबसे तेज़ तरीका है। स्थायी उपयोग के लिए,
UI को server.ingress या server.httpRoute के साथ उजागर करें और इसके सामने
server.oauth2Proxy के साथ लॉगिन लगाएँ, सब कुछ chart के values में:
Login for the web UI। meles का अपना कोई लॉगिन नहीं है, इसलिए UI को बिना लॉगिन के उजागर न करें।
एक चरण-दर-चरण यात्रा, बाद की परत द्वारा छिपाई गई फ़ाइल से लेकर Kubernetes में scan gate तक: docs/getting-started.md।
clamd द्वारा उसके socket प्रोटोकॉल पर की जाती है। meles
libclamav के विरुद्ध लिंक नहीं होता और Apache-2.0 लाइसेंस के अंतर्गत रहता है।डिफ़ॉल्ट रूप से meles केवल रिपोर्ट करता है, और यह कभी कुछ भी नहीं हटाता। यह image signing, SBOMs या runtime detection का विकल्प नहीं है।
प्रत्येक release के साथ Linux और macOS (amd64, arm64) के लिए बाइनरी, एक multi-arch इमेज और Helm chart आता है:
VERSION=0.3.3
# Binary
curl -fsSLO https://github.com/movray/meles/releases/download/v$VERSION/meles_${VERSION}_linux_amd64.tar.gz
tar -xzf meles_${VERSION}_linux_amd64.tar.gz meles
# Image (linux/amd64, linux/arm64; no shell, runs as non-root)
docker run --rm ghcr.io/movray/meles:$VERSION version
# Helm chart (see Kubernetes below)
helm install meles oci://ghcr.io/movray/charts/meles --version $VERSION -n meles -f my-values.yaml
# From source
go install github.com/movray/meles/cmd/meles@v$VERSION
बाइनरीज़, इमेज और चार्ट रिलीज़ वर्कफ़्लो द्वारा बनाए जाते हैं और हस्ताक्षरित बिल्ड प्रोवेनेंस के साथ आते हैं। प्रकाशित होने से पहले इमेज को meles और Trivy से स्कैन किया जाता है। GitHub CLI से प्रोवेनेंस जाँचें:
gh attestation verify meles_${VERSION}_linux_amd64.tar.gz -R movray/meles
gh attestation verify oci://ghcr.io/movray/meles:$VERSION -R movray/meles
gh attestation verify oci://ghcr.io/movray/charts/meles:$VERSION -R movray/meles
इमेज और चार्ट पर भी cosign (keyless) से हस्ताक्षर किए गए हैं, इसलिए Kyverno या Sigstore policy-controller जैसी admission नीतियाँ इन्हें जाँच सकती हैं। हस्ताक्षर Sigstore बंडल के रूप में OCI referrers के रूप में संग्रहीत हैं: cosign 3 से सत्यापित करें (cosign 2 को --new-bundle-format की आवश्यकता होती है):