بر خلاف باور عموم، کانتینرهای داکر به خودی خود امن نیستند. بنابراین استفاده از ابزارها و اسکنرها برای خلاصی از نقاط آسیبپذیر در امنیت کانتینر ضروری است.
بسیاری از مردم فکر میکنند کانتینرها و ایمیجهای داکر به صورت پیشفرض امن هستند، که - متاسفانه - درست نیست. موارد مختلفی در امنیت ایمیجهای داکر تاثیرگذار است. اجزای مختلفی مثل پکیجهای نصب شده در ایمیج، کتابخانههای مورد استفاده توسط اپلیکیشن یا حتی فایل اصلی ایمیج، ممکنه باعث ایجاد آسیبپذیری در اپلیکیشن شما بشن. هرچند بسیاری از این آسیبپذیری ها قابل پیشگیری هستند.
ابزارهای Anchore و Clair
سادهترین راه برای پیدا کردن نقاط آسیبپذیر در ایمیجهای داکر اجرای بازرسی (inspection) روی اونها با استفاده از ابزارهای زیر است:
Anchore Engine
Anchore Engine یک سرویس مرکزی برای بازرسی، تحلیل و تصدیق ایمیج کانتینر است. این سرویس با استفاده از دادههای توسعه دهندههای سیستم عامل مانند Red Hat، Debian یا Alpine در خصوص نقاط آسیبپذیر، ایمیجها رو اسکن میکنه.
برای دادههایی که از سیستم عامل به دست نمیان، از NVD (National Vulnerability Database) یا مرکز اطلاعات آسیبپذیری ملی استفاده میکنه، که شامل آسیبپذیریهایی از RPM، Deb، APK و همین طور پایتون (PIP) و Ruby Gems و غیره است.
Clair
Clair یک تحلیلگر ثابته که توسط CoreOS برای کانتینرهای داکر و APPC توسعه داده شده. این ابزار برای تشخیص آسیبپذیریها از فرادادهها منابع مورد استفاده Anchore استفاده میکنه - Red Hat Security Data, NVD, Ubuntu CVE Tracker, Alpine SecDB, Debian Security Bug Tracker و غیره.
آمادهسازی
حالا که ابزارهای مورد استفاده رو شناختیم، وقتشه که اونها رو آماده به کار کنیم. هر دو ابزار Anchore و Clair روشهای مختلفی برای یکپارچهسازی دارن و می تونن در Kubernetes یا OpenShift مستقر بشن، اما برای دستیابی به هدف این مقاله ما این ابزارها را با استفاده از docker-compose بر روی یک ماشین مجازی محلی آماده به کار میکنیم:
برای تنظیم Anchore کد زیر رو اجرا کنین:
mkdir ~/aevolume
cd ~/aevolume
docker pull docker.io/anchore/anchore-engine:latest
docker create --name ae docker.io/anchore/anchore-engine:latest
docker cp ae:/docker-compose.yaml ~/aevolume/docker-compose.yaml
docker rm ae
docker-compose pull
docker-compose up -d
export ANCHORE_CLI_USER=admin
export ANCHORE_CLI_PASS=foobar
docker run --net=host -e ANCHORE_CLI_URL=http://localhost:8228/v1/ -it anchore/engine-cli
برای تنظیم Clair هم کد زیر را اجرا کنین:
# Download Clair Scanner from https://github.com/arminc/clair-scanner/releases
chmod +x clair-scanner
docker run -p 5432:5432 -d --name db arminc/clair-db:$(date +%F)
docker run -p 6060:6060 --link db:postgres -d --name clair arminc/clair-local-scan:v2.0.6
و به این ترتیب ما آماده تحلیل هستیم!
نکته: کمی بعد در مقاله بیشتر در مورد Clair صحبت میکنیم.
بررسی ایمیج برای نقاط آسیب پذیری
بیایید با Anchore و یک ایمیج ساده Debian شروع کنیم. کاری که باید برای تحلیل ایمیج خودمون انجام بدیم اینه که ایمیج رو با دستور add اضافه کرده و صبر کنیم تا تحلیل کامل بشه:
# inside anchore-cli Docker container
~ $ anchore-cli image add docker.io/library/debian:latest
Image Digest: sha256:121dd2a723be1c8aa8b116684d66157c93c801f2f5107b60287937e88c13ab89
Parent Digest: sha256:a63d0b2ecbd723da612abf0a8bdb594ee78f18f691d7dc652ac305a490c9b71a
Analysis Status: analyzed
Image Type: docker
Analyzed At: 2020-03-07T10:46:20Z
Image ID: 971452c943760ab769134f22db8d3381b09ea000a6c459fbfa3603bb99115f62
Dockerfile Mode: Guessed
Distro: debian
Distro Version: 10
Size: 126607360
Architecture: amd64
Layer Count: 1
Full Tag: docker.io/library/debian:latest
Tag Detected At: 2020-03-07T10:45:48Z
~ $ anchore-cli image wait docker.io/library/debian:latest
Status: analyzing
Waiting 5.0 seconds for next retry.
...
~ $ anchore-cli image list
Full Tag Image Digest Analysis Status
docker.io/library/debian:latest sha256:121dd2a723be1c8aa8b116684d66157c93c801f2f5107b60287937e88c13ab89 analyzed
حالا که ایمیج تحلیل شده وقتشه ببینیم چه آسیبپذیریهایی پیدا شده:
~ $ anchore-cli image vuln docker.io/library/debian:latest all
Vulnerability ID Package Severity Fix CVE Refs Vulnerability URL
CVE-2005-2541 tar-1.30+dfsg-6 Negligible None CVE-2005-2541 https://security-tracker.debian.org/tracker/CVE-2005-2541
CVE-2007-5686 login-1:4.5-1.1 Negligible None CVE-2007-5686 https://security-tracker.debian.org/tracker/CVE-2007-5686
...
~ $ anchore-cli evaluate check docker.io/library/debian:latest
Image Digest: sha256:121dd2a723be1c8aa8b116684d66157c93c801f2f5107b60287937e88c13ab89
Full Tag: docker.io/library/debian:latest
Status: pass
Last Eval: 2020-03-14T13:25:24Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
در ابتدا ما دستور image vuln رو با ویژگی all اجرا میکنیم تا هم آسیبپذیریهای سیستم عامل و هم آسیبپذیریهای پکیج موجود در ایمیج نمایش داده بشه. همه اون ها برچسب Negligible یا Unknown دارن، که این خوبه.
بعد ما دستور evaluate check رو اجرا میکنیم تا ببینیم ایمیج آزمون بررسی خط مشی پیش فرض رو قبول میشه یا نه، و همون طور که در بالا میتونین ببینین (Status: pass) قبول شده.
این نوع از ایمیجهای پایه به صورت عمومی در این زمینه عملکرد خیلی خوبی دارن، چرا که به طور گسترده ای مورد استفاده هستن و از این رو تحت بررسی های دقیقی قرار دارن.
اما ایمیج Debian Buster یک اپلیکیشن خیلی خیلی ساده Hello World در پایتون که با پایتون 3 ساخته شده چطور؟ بیاین اول یه نگاهی به فایل داکر بندازیم:
# debian.Dockerfile
FROM python:3-slim AS build-env
ADD . /app
WORKDIR /app
FROM python:3-buster
COPY --from=build-env /app /app
WORKDIR /app
CMD ["python", "hello.py", "/etc"]
چیزی که بگه این اپلیکیشن آسیبپذیر یا ناامنه نشون نمیده، درسته؟ خب بیاین این اپلیکیشن رو بسازیم و تحلیلش کنیم:
~ $ docker build -f debian.Dockerfile -t martinheinz/debian-python-anchore .
~ $ docker run martinheinz/debian-python-anchore:latest
~ $ docker push martinheinz/debian-python-anchore:latest
# From anchore Docker CLI
~ $ anchore-cli image add martinheinz/debian-python-anchore:latest
~ $ anchore-cli image wait martinheinz/debian-python-anchore:latest
~ $ anchore-cli image list
Full Tag Image Digest Analysis Status
docker.io/library/debian:latest sha256:121dd2a723be1c8aa8b116684d66157c93c801f2f5107b60287937e88c13ab89 analyzed
docker.io/martinheinz/debian-python-anchore:latest sha256:59dff8bdf4af5cd8e9ba0754d25a43a96dfb47b46b771549a0d79d35bc3cc1aa analyzed
من اول با استفاده از debian.Dockerfile و برنامه ساده hello.py ایمیج رو ساختم. بعد از اون به هاب داکر ارسالش کردم، که از اونجا به Anchore اضافه و بالاخره تحلیل شد. حالا میتونیم نتیجه رو بررسی کنیم:
~ $ anchore-cli image vuln docker.io/martinheinz/debian-python-anchore:latest os
Vulnerability ID Package Severity Fix CVE Refs Vulnerability URL
CVE-2007-3476 libwmf-dev-0.2.8.4-14 Low None CVE-2007-3476 https://security-tracker.debian.org/tracker/CVE-2007-3476
CVE-2007-3476 libwmf0.2-7-0.2.8.4-14 Low None CVE-2007-3476 https://security-tracker.debian.org/tracker/CVE-2007-3476
CVE-2007-3477 libwmf-dev-0.2.8.4-14 Low None CVE-2007-3477 https://security-tracker.debian.org/tracker/CVE-2007-3477
CVE-2007-3477 libwmf0.2-7-0.2.8.4-14 Low None CVE-2007-3477 https://security-tracker.debian.org/tracker/CVE-2007-3477
CVE-2016-8660 linux-libc-dev-4.19.98-1 Low None CVE-2016-8660 https://security-tracker.debian.org/tracker/CVE-2016-8660
CVE-2007-3996 libwmf-dev-0.2.8.4-14 Medium None CVE-2007-3996 https://security-tracker.debian.org/tracker/CVE-2007-3996
CVE-2007-3996 libwmf0.2-7-0.2.8.4-14 Medium None CVE-2007-3996 https://security-tracker.debian.org/tracker/CVE-2007-3996
CVE-2009-3546 libwmf-dev-0.2.8.4-14 Medium None CVE-2009-3546 https://security-tracker.debian.org/tracker/CVE-2009-3546
CVE-2009-3546 libwmf0.2-7-0.2.8.4-14 Medium None CVE-2009-3546 https://security-tracker.debian.org/tracker/CVE-2009-3546
...
~ $ anchore-cli image vuln docker.io/martinheinz/debian-python-anchore:latest os | wc -l
1056
~ $ anchore-cli evaluate check docker.io/martinheinz/debian-python-anchore:latest
Image Digest: sha256:59dff8bdf4af5cd8e9ba0754d25a43a96dfb47b46b771549a0d79d35bc3cc1aa
Full Tag: docker.io/martinheinz/debian-python-anchore:latest
Status: fail
Last Eval: 2020-03-07T12:15:00Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
خب، دیگه بدون مشکل به نظر نمیاد. تنها کاری که ما کردیم جایگزینی ایمیج Debian پایتون رسمی بود و حالا بیشتر از هزار آسیبپذیری دارم، که بعضی از اونها برچسب شدت Low و Medium دارن، حالا مقایسه کنید با چند آسیب پذیری با برچسب Negligible که موقع استفاده از ایمیج Debian ساده دیدیم. علاوه بر اون، بعد از اجرای ارزیابی ایمیج، میتونیم ببینیم که در ارزیابی رد شده (Status: fail).
بنابراین با این که موقع ساخت یک اپلیکیشن ساده بدون هیچ آسیبپذیری مشخص از ایمیج رسمی و به ظاهر امن استفاده کردیم، تعداد زیادی مشکل امنیتی دیدیم. خب، چطور می تونیم این وضعیت رو بهبود ببخشیم؟
پیدا کردن ایمیج برتر
وقتی صحبت از امنیت میشه، بهترین انتخاب برای ایمیج پایه scratch است که در واقع یک کانتینر خالی است. با این حال ساختن ایمیج خودمون از پایه زیاد کاربردی نیست و از اونجایی که بیشتر ما متخصص امنیت نیستیم، ممکنه مشکلات امنیتی بیشتری هم به وجود بیاره.
بهترین انتخاب بعد از scratch - به نظر من - Distroless است، که یه سری ایمیج ساخته شده توسط گوگله و با هدف امن بودن ساخته شدن. این ایمیجها شامل حداقلهای مورد نیاز برای اپلیکیشن شما هستن، که یعنی هیچ پوسته، ابزار مدیریت پکیج یا هر ابزار دیگهای وجود نداره که باعث افزایش حجم ایمیج و ایجاد نویز سیگنال برای اسکنرهای امنیتی (مثل CVE) بشه.
من قبلا در این پست بلاگ در مورد Distroless با جزئیات صحبت کردم، پس اگه میخواین بیشتر دربارهش بدونین، این پست رو ببینین.
خب، پس ما الان Distroless رو به عنوان ایمیج امن انتخاب کردیم، اما بیاین قبل از شروع تحلیل نگاهی به فایل داکر جدید بندازیم:
# distroless.Dockerfile
FROM python:3-slim AS build-env
ADD . /app
WORKDIR /app
FROM gcr.io/distroless/python3
COPY --from=build-env /app /app
WORKDIR /app
CMD ["hello.py", "/etc"]
در مقایسه با ورژن Debian تغییر زیادی نکرده. در واقع ما فقط Runner ایمیج رو به gcr.io/distroless/python3 تغییر دادیم. حالا میتونیم ادامه بدیم و بسازیمش، انتقالش بدیم و در Anchore Engine اضافه ش کنیم:
docker build -f distroless.Dockerfile -t martinheinz/distroless-python-anchore .
docker run martinheinz/distroless-python-anchore:latest
docker push martinheinz/distroless-python-anchore:latest
# From anchore Docker CLI
anchore-cli image add martinheinz/distroless-python-anchore:latest
سرانجام، وقتشه ببینیم Distroless از نسخه Debian بهتر عمل کرده یا نه:
~ $ anchore-cli image vuln docker.io/martinheinz/distroless-python-anchore:latest os
Vulnerability ID Package Severity Fix CVE Refs Vulnerability URL
CVE-2019-16935 libpython3.5-minimal-3.5.3-1+deb9u1 Low None CVE-2019-16935 https://security-tracker.debian.org/tracker/CVE-2019-16935
CVE-2019-16935 python3.5-minimal-3.5.3-1+deb9u1 Low None CVE-2019-16935 https://security-tracker.debian.org/tracker/CVE-2019-16935
...
~ $ anchore-cli image vuln docker.io/martinheinz/distroless-python-anchore:latest os | wc -l
53
~ $ anchore-cli evaluate check docker.io/martinheinz/distroless-python-anchore:latest
Image Digest: sha256:29b5288e934dc724377f2ff187e8a0664246c95b0e70bd9a13f6874628dc8662
Full Tag: docker.io/martinheinz/distroless-python-anchore:latest
Status: pass
Last Eval: 2020-03-07T12:15:20Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
و البته که بهتر عمل کرده! در مقایسه با مثال اول ما فقط 53 آسیبپذیری داریم و تنها دو عدد از اونها برچسب شدت Low دارن. همین در مورد ارزیابی خط مشی، این ایمیج قبول شده در حالی که نسخه Debian رد شده بود.
پس میدونیم با اطمینان نتیجه بگیری که برای تامین امنیت اپلیکیشن های ساخته شده در کانتینر Distroless انتخاب بهتری است. البته چند مورد دیگه هست که میتونیم بررسی و اونها رو بهبود ببخشیم. برای مثال میتونیم خط مشیهای ارزیابی متفاوتی استفاده کنیم:
~ $ anchore-cli policy hub list
Name Description
anchore_security_only Single policy, single whitelist bundle for performing
security checks, including example blacklist known malicious
packages by name.
anchore_default_bundle Default policy bundle that comes installed with vanilla
anchore-engine deployments. Mixture of light vulnerability
checks, dockerfiles checks, and warning triggers for common
best practices.
anchore_cis_1.13.0_base Docker CIS 1.13.0 image content checks, from section 4 and
5. NOTE: some parameters (generally are named 'example...')
must be modified as they require site-specific settings
دستور بالا تمام خط مشیهایی که میتونیم با اونها ایمیج رو بررسی کنیم برای ما لیست میکنه. به طور پیشفرض این دستور از anchore_default_bundle استفاده میکنه که به خوبی جواب میده، اما در صورتی که بخوایم بررسیهای انجام شده با استفاده از لیستهای سفید و قوانین متفاوت رو ببینیم، میتونیم برای مثال دستور anchore_cis_1.13.0_base رو امتحان کنیم:
~ $ anchore-cli policy hub get anchore_cis_1.13.0_base
Policy Bundle ID: anchore_cis_1.13.0_base
Name: anchore_cis_1.13.0_base
Description: Docker CIS 1.13.0 image content checks, from section 4 and 5. NOTE: some parameters (generally are named 'example...') must be modified as they require site-specific settings
Policy Name: CIS File Checks
Policy Description: Docker CIS section 4.8 and 4.10 checks.
Policy Name: CIS Dockerfile Checks
Policy Description: Docker CIS section 4.1, 4.2, 4.6, 4.7, 4.9 and 5.8 checks.
Policy Name: CIS Software Checks
Policy Description: Docker CIS section 4.3 and 4.4 checks.
Whitelist Name: RHEL SUID Files
Whitelist Description: Example whitelist with triggerIds of files that are expected to have SUID/SGID, for rhel-based images
Whitelist Name: DEB SUID Files
Whitelist Description: Example whitelist with triggerIds of files that are expected to have SUID/SGID, for debian-based images
Mapping Name: default
Mapping Rule: */*:*
Mapping Policies: CIS Software Checks,CIS Dockerfile Checks,CIS File Checks
Mapping Whitelists: DEB SUID Files,RHEL SUID Files
~ $ anchore-cli policy hub install anchore_cis_1.13.0_base
Policy ID: anchore_cis_1.13.0_base
Active: False
Source: local
Created: 2020-03-07T12:20:46Z
Updated: 2020-03-07T12:20:46Z
~ $ anchore-cli policy list
Policy ID Active Created Updated
2c53a13c-1765-11e8-82ef-23527761d060 True 2020-02-17T11:10:20Z 2020-02-17T11:10:20Z
anchore_cis_1.13.0_base False 2020-03-07T12:20:46Z 2020-03-07T12:20:46Z
~ $ anchore-cli policy activate anchore_cis_1.13.0_base
Success: anchore_cis_1.13.0_base activated
در کد بالا میتونین ببینین که ما اول با استفاده از دستور policy hub get نگاهی به توضیحات این خط مشی خاص انداختیم. بعد از اون نصبش کردیم و دستور policy list رو اجرا کردیم که نشون میده ما حالا دو خط مشی در دسترس داریم، که خط مشی جدید غیر فعال است.
پس ما با دستور آخر فعالش کردیم (policy activate). قبل از این که بررسی رو با استفاده از خط مشی جدید شروع کنیم، بیاین در مورد این که شامل چه مواردی است صحبت کنیم. با توجه به این که این بررسی برای داکر CIS 1.13.0 است، بر روی راهنماییهای ارائه شده در این سند تمرکز میکنه. در زیر چند مثال از مشکلاتی که این خط مشی به دنبال اونها میگرده رو نوشتیم:
- دستورهای ADD استفاده شده به جای COPY
- پورتهای بازی که در لیست سفید نیستن
- دستورهای HEALTCHECK جا افتاده
- استفاده از ایمیج پایههای غیر مطمئن
- استفاده از root به عنوان کاربر اصلی
برای دیدن فهرست کامل قوانین این خط مشی میتونین دستور anchore-cli --json policy hub get anchore_cis_1.13.0_base رو اجرا کنین. حالا که میدونیم دنبال چی میگرده وقتشه اجراش کنیم:
~ $ anchore-cli evaluate check docker.io/martinheinz/distroless-python-anchore:latest --detail
...
dockerfile instruction Dockerfile directive 'HEALTHCHECK' not found, matching condition 'not_exists' check stop
dockerfile instruction Dockerfile directive 'FROM' check 'not_in' matched against 'example_trusted_base1,example_trusted_base2' for line 'scratch' stop
dockerfile effective_user User root found as effective user, which is explicity not allowed list stop
...
در خروجی تعدادی هشدار مربوط به پکیجهای نصب شده وجود داره، اما اونهایی که مخصوص این خط مشی هستن، در بالا ذکر شدن. این ها مشکلات یا آسیبپذیریهایی هستن که باعث میشن ایمیج در ارزیابی خط مشی رد بشه و باید تحلیل بشن.
یکی از اینها (دومی) به خاطر استفاده از Distroless ایجاد شده، چون این ایمیج در لیست سفید قرار نداره، برای همین اون رو میشه ندید گرفت.
اما دو اخطار دیگه، مشکلات جدی هستن که باید درست بشن، که هر دو راه حل های ساده و سرراستی دارن.
این به ما نشون میده که استفاده از یک خطی مشی خاص بر اساس نیازهامون و یا حتی استفاده از چند خط مشی به صورت همزمان فکر خوبی است.
انواع و سطوح آسیب پذیریها
آسیبپذیریهای مثال بالا به راحتی حل میشدن، اما همیشه اینطور نیست. شما ممکنه به آسیبپذیریهایی بر بخورید که امتیاز شدت بالایی دارن یا تنها در مورد برنامه شما مشکلزا هستن.
وقتی موضوع مشکلات به وجود اومده در ایمیج یا پکیجهای داخل اونه، شما نباید اون مشکلات رو برطرف کنین، چون این مسئولیت توسعه دهندهها و/یا ناشران ابزار اشاره شده است. با این حال شما باید از به وجود آمدنآسیب پذیریهای در آینده جلوگیری و میزان خطر آسیبپذیریهای فعلی رو با حذف شاخصهای حمله کاهش بدین.
برای مثال میتونین با استفاده از Distroless که هیچ پوستهای نداره این کار رو انجام بدین. علاوه بر اون انجام بررسیهای دوره ای برای آگاهی از آسیبپذیریهای معرفی شده در سریعترین زمان ممکن و با استفاده از چندین ابزار اسکن فکر خیلی خوبیه.
آسیب پذیری امنیتی ایمیجهای داکر را قبل از دیر شدن، پیدا کنید!
Anchore در برابر Clair
صحبت از اجرای چندین ابزار اسکن شد… چطور باید Clair استفاده کنیم؟ در مقایسه با Anchore چطور عمل میکنه؟ در زیر میتونین نحوه استفاده از Clair در مثال ایمیج های Debian و Distroless رو ببینین:
# Run setup steps from beginning of article...
~ $ clair-scanner --ip 192.168.1.56 martinheinz/debian-python-anchore:latest
2020/03/07 17:54:11 [INFO] ▶ Start clair-scanner
2020/03/07 17:54:18 [INFO] ▶ Server listening on port 9279
2020/03/07 17:54:18 [INFO] ▶ Analyzing 55db4dd701c0a4eea04ba231e74bd04d6c1cdbd86cf8084e988648aa7cf5af9b
2020/03/07 17:54:18 [INFO] ▶ Analyzing 1938b02d46a5b801035965c5680d11c513a679e0ad4a560276df9a8ececa0bed
2020/03/07 17:54:18 [INFO] ▶ Analyzing 90bd3e8e4e9f1dd7624ecdd1ee35c36072e582a2cd5c606f290d2b3cb4a1559c
2020/03/07 17:54:18 [INFO] ▶ Analyzing ced4f27972d40674b72da7b1a51b63a8396bbca3a4fca86dffa8031228ab88cb
2020/03/07 17:54:18 [INFO] ▶ Analyzing 7abae7ca0ef88724a59f51748b1658136bdbb1eae246550478f5939484358d94
2020/03/07 17:54:18 [INFO] ▶ Analyzing 62547b912c7f2d5d69eaca3cd5ad1cb053c39886cb7276b0cb753b3824c32358
2020/03/07 17:54:18 [INFO] ▶ Analyzing cb7076fa495a6c437ac374b1b67a62075b94db45400c10e8849b5db75ffbce21
2020/03/07 17:54:18 [INFO] ▶ Analyzing a3ffe04a8073815ecfa94620efbbccf412b85ca80b6550c029617eed51c5edb6
2020/03/07 17:54:18 [INFO] ▶ Analyzing 715fd7b0b1161fa57f74a843f4525f1ab7035c9a8051a6559c91ff360e44f20f
2020/03/07 17:54:18 [INFO] ▶ Analyzing 20519035fc6a7d347a1540a633c461ac321dc8db7cb8c163283c1d802097697b
2020/03/07 17:54:18 [WARN] ▶ Image [martinheinz/debian-python-anchore:latest] contains 356 total vulnerabilities
2020/03/07 17:54:18 [ERRO] ▶ Image [martinheinz/debian-python-anchore:latest] contains 356 unapproved vulnerabilities
... List of vulnerabilities follows
~ $ clair-scanner --ip 192.168.1.56 martinheinz/distroless-python-anchore:latest
2020/03/07 17:56:08 [INFO] ▶ Start clair-scanner
2020/03/07 17:56:09 [INFO] ▶ Server listening on port 9279
2020/03/07 17:56:09 [INFO] ▶ Analyzing 51756e4adf1ad2b5a00c36dcc9e799a69d72462d60e6f88c87f96eed832b8a2a
2020/03/07 17:56:09 [INFO] ▶ Analyzing 49905beb7372788afbefede92af761383ad2bac7f8d21b2f2d6fb165afff48e8
2020/03/07 17:56:09 [INFO] ▶ Analyzing 3d9fd80998dc9ea371366e1ef54046fbe86e6e360d17ece650ea8a3ea5023c63
2020/03/07 17:56:09 [INFO] ▶ Analyzing 83b671756e1e2cc132505e55c87c5c5b1da185665f9bb875d771568959dc05a2
2020/03/07 17:56:09 [INFO] ▶ Analyzing b80190979f279448d479a3ed0450f6d2912662e12edd1fe477a2b74d0568e1f0
به خروجی دستورات بالا که نگاه کنیم، به نظر خیلی شبیه Anchore است. تعداد زیادی مشکل برای نسخه Debian و هیچ مشکلی برای Distroless شناسایی نشده. در خروجی اسکن اول، یک فهرست بزرگ از آسیبپذیریها وجود داره که من حذفشون کردم، اما مشکلات با برچسب شدت Low و Medium رو بررسی کردم و همه اونها در نتیجه اسکن هر دو ابزار Anchore و Clair وجود دارن، البته ممکنه همیشه اینطور نباشه. به همین دلیل من استفاده از ابزارهای اسکن مختلف رو پیشنهاد میکنم، به خصوص اونهایی که از منابع متفاوتی برای دادههای آسیبپذیریها استفاده میکنن.
بعضی از ابزارهای دیگهای که ممکنه شما بخواین یه نگاهی بهشون بندازین Docker Bench for Security یا ابزار اسکن آسیبپذیری موجود در IBM Container Registry هستند.
نتیجهگیری
در مسائل مربوط به امنیت، بهتره همیشه بیش فعال باشین و سعی کنین از آسیبپپذیریها قبل از این که تبدیل به یک مشکل جدی بشن جلوگیری کنین و ابزارهای معرفی شده در این مقاله میتونین در این راه به شما خیلی کمک کنن. فکر می کنم استفاده از این ابزارها به اندازه کافی آسون هست، تا هر کسی اون ها رو در گردش کار روزانهش یا حتی بهتر، جزیی از فرایندهای اتوماسیون کسب و کارش قرار بده.
امنیت اپلیکیشن هایی که میسازیم - تا یه حد مشخصی - وظیفه هر توسعه دهندهای است، نه فقط متخصصان امنیت یا متخصصان نفوذ، پس همه ما باید با اجرای اسکن آسیبپذیری به صورت دورهای، نقشمون رو در امنتر کردن اپلیکیشنها ایفا کنیم.