چگونه از داکر برای به اشتراک گذاشتن گذرواژه خود با هکرها استفاده کنیم (نکنیم)؟

شکل ۱. داکر برای هکرها
شکل ۱. داکر برای هکرها
منتشر شده در pythonspeed به تاریخ ۵ می ۲۰۲۱
لینک منبع How to (not) use Docker to share your password with hackers

آیا از تصاویر داکر برای اجرای نرم‌افزار خود استفاده می‌کنید؟ آیا اجرا یا ایجاد تصویر شما شامل یک گذرواژه یا اعتبارنامه دیگر است که شما واقعا می‌خواهید آن را با هکرها به اشتراک بگذارید؟

خب، شما خوش‌شانس هستید، چون داکر اشتراک‌گذاری گذرواژه‌ها، اعتبارات ابری، و کلیدهای خصوصی SSH شما را با دنیا واقعا آسان می‌کند. چه در زمان اجرای اسرار باشد، چه در زمان ساختن اسرار، یا فقط چند اعتبار‌نامه نامرتبط تصادفی که شما در جای اشتباهی قرار دادید، داکر شما را در مورد نشت‌های مخفی تحت پوشش قرار داده است.

در این مقاله ما موارد زیر را پوشش خواهیم داد:

  • شواهدی وجود دارد که این واقعا اتفاق می‌افتد.
  • فاش شدن اسرار زمان ساخت.
  • نشت تصادفی با COPY.
  • فاش شدن اسرار در زمان اجرا.
  • بعضی از آن‌ها (تا حدی؟) از دست دادن ابزاری که به حل مشکل کمک کند.

آیا این واقعا یک مشکل است؟

بله، این یک مشکل است. یک نمونه برجسته، CodeCov است:

در روز پنجشنبه، اول آوریل سال ۲۰۲۱، ما متوجه شدیم که یک نفر دسترسی غیر‌مجاز به سند Bash Uploader ما پیدا کرده و بدون اجازه ما آن را اصلاح کرده است. بازیگر به دلیل خطایی در فرآیند ایجاد تصویر Codecov’s Docker که به بازیگر این امکان را می‌داد تا مدرک مورد نیاز برای اصلاح اسکریپت Bash Uploader ما را استخراج کند، دسترسی پیدا کرد.

در میان دیگر کاربران تحت‌تاثیر قرار گرفته، هاشیکورپ باید کلید امضای GPG خود را لغو می‌کرد (مشخص نیست که آیا یک مهاجم واقعا آن را دانلود کرده است یا نه، اما ممکن است کرده باشد) :

فایل HashiCorp تحت‌تاثیر حادثه امنیتی با شخص ثالث (Codecov) قرار گرفت که منجر به افشای بالقوه اطلاعات حساس شد. در نتیجه، کلید GPG مورد استفاده برای امضای انتشار و تایید چرخش داده شده‌است.

اما این فقط CodeCov نیست. یک پنتستر صدها راز منتشر شده را در تصاویر داکر عمومی کشف کرد:

من طیف گسترده‌ای از اسرار را پیدا کردم، مانند حساب‌های ۲۰۰ + AWS (که ۶۴ تای آن‌ها هنوز زنده بودند و ۱۴ تای آن‌ها ریشه بودند) ، ۱۵۰۰ + کلیدهای معتبر SSH، کلیدهای آژور، چندین پایگاه‌داده، توکن‌های npmrc، حساب‌های داکر هاب، کلیدهای مخزن PPI، بسیاری از سرورهای SMTP، اسرار reCAPTCHA، کلیدهای توییتر API، کلیدهای Jira، کلیدهای اسلاک، و چند تای دیگر.

همانطور که بعدا خواهیم دید، روشی که آن‌ها استفاده کردند احتمالا نشت‌های مخفی را دست‌کم می‌گرفت!

راه‌های متعددی برای افشای اسرار وجود دارد، و مشخص نیست که در این مورد چه اتفاقی افتاده است. پس بیایید همه آن‌ها را مرور کنیم.

مورد copying اتفاقی

روش معمول زیر برای کپی کردن پرونده‌ها در تصویر خود را در نظر بگیرید:

FROM debian:buster

COPY . /app

به طور پیش‌فرض این کار همه چیز را در دایرکتوری فعلی در تصویر کپی خواهد کرد. این که همه چیز ممکن است شامل رازهای مختلفی باشد که شما قصد کپی کردن از آن‌ها را ندارید: برای مثال، فایل env با رمز عبور.

حذف پرونده پس از آن با RUN rm mysecret به دلیل نحوه کار لایه‌های داکر کمکی نخواهد کرد. شما باید مطمئن شوید که آن‌ها هرگز در وهله اول کپی نمی‌شوند.

زمانی که راز در تصویر داکر باشد، هر کسی که بتواند به آن تصویر دسترسی داشته باشد، به راز دسترسی خواهد داشت. این کار زمانی که تصویر به صورت عمومی در دسترس باشد، بسیار سرگرم‌کننده است، اما هنوز هم می‌تواند به شما آسیب برساند اگر تصویر در یک مخزن خصوصی قرار داشته باشد که شکسته شود.

مطالعه مقاله آموزش تمام مدل‌های طبقه‌بندی یا رگرسیون در یک خط کد پایتون توصیه می‌شود.

چگونه می‌توانید از به اشتباه کپی کردن اسرار جلوگیری کنید؟

  • کپی محدود: به جای COPY. / app شما ممکن است تنها فایل‌ها یا دایرکتوری‌های خاصی که نیاز دارید را کپی کنید. برای مثال COPY setup.py myapp /app.
  • پسوند dockerignore : می‌توانید مطمئن شوید که فایل‌ها با اضافه کردن آن‌ها به فایل COPYed ،.dockerignore نمی‌شوند.
  • از ساخت دستی تصاویر اجتناب کنید: ماشین توسعه شما به احتمال زیاد فایل‌های تصادفی در اطراف خود دارد تا یک سیستم ساخت خودکار، بنابراین ساخت تصاویر عمومی بر روی ماشین dev شما به احتمال زیاد فایل‌های نشتی دارد.
  • ذخیره اسرار CI به عنوان متغیرهای محیطی: اگر CI شما یا ایجاد محیط نیاز به استفاده از اسرار دارد، آن‌ها را به جای فایل‌های روی دیسک در متغیرهای محیطی نگه دارید.

رازهای ساخت

گاهی اوقات شما باید از یک راز به عنوان بخشی از ساخت تصویر داکر استفاده کنید، به عنوان مثال کلمه عبور برای مخزن بسته خصوصی تان.

FROM python:3.9
# How do you get the password in?
RUN pip install \
--extra-index-url https://you@pkgrepo.example.com \
yourpackage anotherprivatepackage

روش‌های واضح برای به دست آوردن این رمزهای عبور، مانند ساختن آرگومان‌ها و COPY، به مخفی بودن در تصویر منجر خواهد شد.

تکنیک‌های مختلفی وجود دارند که امن هستند، که من آن‌ها را در یک مقاله جداگانه به طور خاص در مورد اسرار ساخت داکر پوشش می‌دهم.

اسرار زمان اجرا

گاهی اوقات شما به یک راز نیاز دارید تا در واقع نرم‌افزار خود را در تولید اجرا کنید. برای مثال، برنامه کاربردی وب شما ممکن است نیاز به رمز عبور به پایگاه‌داده MySQL خود داشته باشد. اینها به عنوان اسرار زمان اجرا شناخته می‌شوند، و نکته مهمی که باید به خاطر داشته باشید این است که، یک‌بار دیگر، نباید آن‌ها را در تصویر خود ذخیره کنید.

هنگامی که آن‌ها در تصویر هستند، هر مهاجمی که به تصویر دسترسی پیدا کند می‌تواند آن راز را به دست آورد، به عنوان مثال رمز MySQL. به علاوه، به این معنی است که تصویر شما به یک محیط زمان اجرای خاص گره خورده‌است، و گرفتن تصویر و اجرای آن در جایی دیگر سخت‌تر خواهد بود.

در عوض، می‌توانید با استفاده از روش‌های مختلف، اسرار را به ظرف خود منتقل کنید:

  • استفاده از متغیرهای محیطی.
  • بالا رفتن صدا را با یک راز ببندید.
  • مکانیزم‌های خاص سری مانند اسرار Kum netes که در واقع از هر دو مکانیزم بالا استفاده می‌کند.
  • در برخی محیط‌های ابری، شما می‌توانید به کانتینرها اجازه دهید تا با محیط ابری صحبت کنند، به عنوان مثال نقش‌های IAM برای وظایف ECS در AWS.
  • آن‌ها را از یک فروشگاه کلید خارجی بازیابی کنید.

با تمام این مکانیزم‌ها، راز هرگز در خود تصویر ذخیره نمی‌شود.

ممکن است به مطالعه مقاله تابع نقشه در پایتون علاقمند باشید.

پیدا کردن نشت با اسکنرها

فراتر از دستورالعمل‌های ذکر شده در بالا، با این حال ارزش بررسی رازهایی را دارد که به هر حال به طور تصادفی از میان آن‌ها عبور کرده‌اند. ابزارهای مختلفی مثل detect-secrets, trufflehog، و غیره وجود دارند که تاریخچه یک دایرکتوری یا مخزن Git را برای چیزهایی که به نظر می‌رسد بخشی از آن‌ها به بیرون درز کرده‌است، اسکن می‌کنند.

متاسفانه ابزارهای زیادی پیدا نکرده‌ام که کار خوبی برای تصاویر داکر انجام دهند. به عنوان مثال، پنتستر که تصاویر داکرهدکر هاب را اسکن کرد، سیستم فایل در معرض محفظه را اسکن کرد. این کار اسراری که هنوز در تصویر هستند را از دست خواهد داد، چون شما همچنین می‌خواهید آن‌ها را بررسی کنید:

۱. همه لایه‌ها در تصویر، برای پیدا کردن رازهای پوشیده شده توسط RUN rm mysecret.

۲. این تصویر تاریخ را می‌سازد، که می‌تواند شامل اسرار نشت شده از طریق ساخت ارگ‌ها باشد.

تنها ابزاری که به نظر می‌رسید ممکن است کار کند، از جعبه خارج نشد، بنابراین من نمی‌توانم بگویم که آیا واقعا درست اسکن می‌کند یا نه. اگر شما از ابزارهایی اطلاع دارید که در واقع به درستی اسرار را بررسی می‌کنند (به عنوان مثال همه لایه‌ها و تاریخ) ، لطفا به من بگویید.

در حال حاضر، دستورالعمل‌ها را در ادامه مقاله دنبال کنید، و استفاده از ابزاری مانند detect-secrets درون محفظه خود استفاده کنید تا حداقل یک اسکن ساده بهتر از هیچ را انجام دهید.

این متن با استفاده از ربات مترجم مقاله علم داده ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.