برنامه نویسی

اسکن سطل های AWS S3 برای آسیب پذیری های امنیتی

Summarize this content to 400 words in Persian Lang همه ارائه دهندگان ابر انواع خدمات سطل فایل را ارائه می دهند. این سرویس‌های سطل فایل به کاربران اجازه می‌دهند داده‌ها را در فضای ابری ذخیره و بازیابی کنند و مقیاس‌پذیری، دوام و دسترسی را از طریق پورتال‌های وب و APIها ارائه می‌دهند. به عنوان مثال، AWS سرویس ذخیره سازی ساده آمازون (S3) را ارائه می دهد، GCP فضای ذخیره سازی ابری Google را ارائه می دهد و DigitalOcean Spaces را ارائه می دهد. با این حال، در صورت ایمن نبودن، این سطل‌های فایل یک خطر امنیتی بزرگ ایجاد می‌کنند که به طور بالقوه منجر به نقض داده‌ها، نشت داده‌ها، توزیع بدافزار و دستکاری داده‌ها می‌شود. به عنوان مثال، داده های شورای بریتانیا در مورد مزایای اعضا توسط یک سطل AWS ناامن افشا شد. در حادثه دیگری در سال 2021، یک سطل ناامن متعلق به یک سازمان غیرانتفاعی سرطان، تصاویر و داده‌های حساس ده‌ها هزار نفر را افشا کرد.

خوشبختانه S3Scanner می تواند کمک کند. S3Scanner یک ابزار رایگان و با کاربری آسان است که می‌تواند به شما کمک کند سطل‌های فایل ناامن را در همه ارائه‌دهندگان ابر اصلی شناسایی و رفع کنید: Amazon S3، Google Cloud Storage و Spaces:

در این مقاله، همه چیز را در مورد S3Scanner و اینکه چگونه می تواند به شناسایی سطل های فایل ناامن در چندین ارائه دهنده ابر کمک کند، یاد خواهید گرفت.

خطرات امنیتی رایج در سطل های آمازون S3

سطل های آمازون S3 یک راه حل ساده و مقیاس پذیر برای ذخیره داده های شما در فضای ابری ارائه می دهند. با این حال، مانند هر پلتفرم ذخیره سازی آنلاین دیگری، خطرات امنیتی وجود دارد که باید از آنها آگاه باشید.

در زیر برخی از رایج ترین خطرات امنیتی مرتبط با سطل های آمازون S3 آورده شده است:

دسترسی عمومی ناخواسته: پیکربندی نادرست، مانند مجوزهای بیش از حد مجاز (یعنی اعطای دسترسی خواندن عمومی)، می‌تواند باعث ایجاد خط‌مشی‌ها و مجوزهای سطل ناامن شود، که می‌تواند منجر به دسترسی کاربران غیرمجاز به سطل S3 و انجام اقدامات روی آن شود.
خط‌مشی‌ها و مجوزهای سطل ناامن: سطل های S3 از مدیریت هویت و دسترسی (IAM) برای کنترل دسترسی به داده ها استفاده می کنند. این به شما امکان می دهد با استفاده از خط مشی های سطل، مجوزهایی را برای کاربران و گروه های فردی تعریف کنید. اگر خط مشی های سطل شما به درستی پیکربندی نشده باشد، می تواند به کاربران غیرمجاز دسترسی به داده های شما را بدهد (به عنوان مثال سیاست ها با استفاده از wildcard). پیکربندی ضعیف تنظیمات IAM همچنین می‌تواند منجر به نقض انطباق به دلیل دسترسی یا اصلاح غیرمجاز داده شود که بر الزامات نظارتی تأثیر می‌گذارد و می‌تواند سازمان را در معرض عواقب قانونی قرار دهد.
قرار گرفتن در معرض و نشت داده ها: حتی اگر سطل S3 شما عمومی نباشد، داده ها همچنان می توانند در معرض دید قرار گیرند. به عنوان مثال، اگر شما به طور تصادفی URL یک شی را با شخص دیگری به اشتراک بگذارید یا اگر مجوزهای بیش از حد مجاز برای آن سطل وجود داشته باشد، داده ها می توانند افشا شوند. علاوه بر این، اگر داده‌ها را از سطل S3 خود در یک مکان ناامن دانلود کنید، ممکن است در معرض قرار گرفتن داده‌ها رخ دهد.
عدم وجود رمزگذاری: فقدان رمزگذاری برای داده های ذخیره شده در سطل های S3 یکی دیگر از خطرات امنیتی مهم است. بدون رمزگذاری، داده های رهگیری شده در حین حمل و نقل یا دستگاه های ذخیره سازی در معرض خطر ممکن است اطلاعات حساس را در معرض دید قرار دهند.

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

اینجاست که S3Scanner می تواند مفید باشد.

S3Scanner چیست؟

S3Scanner یک ابزار متن باز است که برای اسکن و شناسایی آسیب پذیری های امنیتی در سطل های آمازون S3 طراحی شده است:

S3Scanner از بسیاری از پلتفرم های محبوب پشتیبانی می کند از جمله:

AWS (پلتفرم موضوعی این مقاله)
GCP
اقیانوس دیجیتال
لینود
Scaleway

شما همچنین می توانید از S3Scanner با ارائه دهندگان سفارشی مانند راه حل سطل سفارشی خود استفاده کنید. این آن را به یک راه حل همه کاره برای سازمان های مختلف تبدیل می کند.

لطفاً توجه داشته باشید، برای سرویس‌های غیر AWS، S3Scanner در حال حاضر فقط از اسکن برای مجوزهای کاربر ناشناس پشتیبانی می‌کند.

دستور زیر استفاده اولیه S3Scanner را برای اسکن سطل های فهرست شده در فایلی به نام نشان می دهد names.txt و اشیاء را برشمارید.

$ s3scanner -bucket-file names.txt -enumerate

برخی از ویژگی های کلیدی S3Scanner به شرح زیر است:

اسکن چند رشته ای

S3Scanner از قابلیت های multithreading برای ارزیابی همزمان چند سطل S3 استفاده می کند و سرعت تشخیص آسیب پذیری را بهینه می کند. برای تعیین تعداد رشته های مورد استفاده، می توانید از -threads پرچم گذاری کنید و سپس تعداد رشته هایی را که می خواهید استفاده کنید ارائه کنید.

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

s3scanner -bucket my_bucket -threads 10

فایل پیکربندی

اگر از پرچم هایی استفاده می کنید که به گزینه های پیکربندی مانند ارائه دهندگان سفارشی نیاز دارند، باید یک فایل پیکربندی ایجاد کنید. برای انجام این کار، یک فایل به نام ایجاد کنید config.yml و آن را در یکی از مکان های زیر قرار دهید، جایی که S3Scanner آن را جستجو می کند:

(current directory)
/etc/s3scanner/
$HOME/.s3scanner/

پشتیبانی از ارائه دهنده ذخیره سازی داخلی و سفارشی

همانطور که قبلاً گفته شد، S3Scanner به طور یکپارچه با ارائه دهندگان مختلف ادغام می شود. می توانید استفاده کنید -provider گزینه ای برای تعیین ارائه دهنده ذخیره سازی اشیاء هنگام بررسی سطل ها.

به عنوان مثال، اگر از GCP استفاده می کنید، از دستور زیر استفاده می کنید: s3scanner -bucket my_bucket -provider gcp

برای استفاده از یک ارائه‌دهنده سفارشی هنگام کار با ارائه‌دهنده ذخیره‌سازی شبکه محلی که در حال حاضر پشتیبانی نمی‌شود، مقدار ارائه‌دهنده باید باشد custom مانند این: s3scanner -bucket my_bucket -provider custom

لطفاً توجه داشته باشید که وقتی با یک ارائه دهنده سفارشی کار می کنید، باید کلیدهای فایل پیکربندی را نیز در زیر تنظیم کنید providers.custom، همانطور که در فایل پیکربندی ذکر شده است. برخی از نمونه ها عبارتند از address_style، endpoint_format، و insecure. در اینجا نمونه ای از پیکربندی ارائه دهنده سفارشی آورده شده است:

# providers.custom required by `-provider custom`
# address_style – Addressing style used by endpoints.
# type: string
# values: “path” or “vhost”
# endpoint_format – Format of endpoint URLs. Should contain ‘$REGION’ as placeholder for region name
# type: string
# insecure – Ignore SSL errors
# type: boolean
# regions must contain at least one option
providers:
custom:
address_style: “path”
endpoint_format: “https://$REGION.vultrobjects.com”
insecure: false
regions:
– “ewr1”

تجزیه و تحلیل جامع مجوز

S3Scanner اسکن های دسترسی را با بررسی مجوزهای سطل فراهم می کند. پیکربندی نادرست در کنترل‌های دسترسی، سیاست‌های سطل و مجوزهای مرتبط با هر سطل S3 را شناسایی می‌کند.

یکپارچه سازی پایگاه داده PostgreSQL

S3Scanner می تواند نتایج اسکن را مستقیماً در پایگاه داده PostgreSQL ذخیره کند. این به حفظ یک مخزن ساختار یافته و در دسترس آسیب پذیری ها کمک می کند. ذخیره نتایج در یک پایگاه داده همچنین توانایی شما را برای ردیابی داده ها و روندهای تاریخی افزایش می دهد.

برای ذخیره تمام نتایج اسکن در PostgreSQL، می توانید از آن استفاده کنید -db پرچم، مانند این: اسکنر s3 -bucket my_bucket -db

این گزینه نیاز به db.uri کلید فایل پیکربندی در config فایل این چیزی است که شما config فایل باید به شکل زیر باشد:

# Required by -db
db:
uri: “postgresql://user:password@db.host.name:5432/schema_name”

اتصال RabbitMQ برای اتوماسیون

همچنین می توانید با RabbitMQ که یک واسطه پیام منبع باز برای اهداف اتوماسیون است، ادغام کنید. این به شما امکان می‌دهد گردش‌های کاری خودکار ایجاد شده توسط نتایج اسکن را تنظیم کنید یا آنها را برای اجرای منظم برنامه‌ریزی کنید. پاسخ‌های خودکار می‌تواند شامل هشدارها، اعلان‌ها یا اقدامات بیشتر بر اساس آسیب‌پذیری‌های شناسایی‌شده باشد که امنیت فعال و مستمر را تضمین می‌کند.

این -mq flag برای اتصال به سرور RabbitMQ استفاده می‌شود و پیام‌هایی را که حاوی نام سطل هستند برای اسکن:s3scanner -mq مصرف می‌کند.

این -mq پرچم نیاز دارد mq.queue_name و mq.uri کلیدهایی که در config فایل

گزارش دهی قابل تنظیم

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

به عنوان مثال، شما می توانید استفاده کنید -json پرچم برای خروجی نتایج اسکن در فرمت JSON:s3scanner -bucket my-bucket -json

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

S3Scanner چگونه کار می کند

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

مراحل نصب برای پلتفرم های مختلف و شماره نسخه در زیر نشان داده شده است:

پلتفرم: Homebrew (MacOS)

نسخه: v3.0.4
مراحل: دم نصب s3scanner

پلتفرم: کالی لینوکس

نسخه: 3.0.0
مراحل: نصب s3scanner

پلت فرم: Parrot OS

نسخه: –
مراحل: نصب s3scanner

پلتفرم: BlackArch

نسخه: 464.fd24ab1
مراحل: اسکنر pacman -S s3

پلت فرم: داکر

نسخه: v3.0.4
مراحل: داکر ghcr.io/sa7mon/s3scanner را اجرا کنید

پلتفرم: Winget (ویندوز)

نسخه: v3.0.4
مراحل: winget نصب s3scanner

پلتفرم: برو

نسخه: v3.0.4
مراحل: به نصب -v github.com/sa7mon/s3scanner@latest بروید

پلت فرم: دیگر (ساخت از منبع)

نسخه: v3.0.4
مراحل: git clone git@github.com:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner.

به عنوان مثال، در یک سیستم ویندوز، می توانید از winget استفاده کنید و دستور زیر را اجرا کنید: winget install s3scanner. خروجی شما به شکل زیر خواهد بود:

Found S3Scanner [sa7mon.S3Scanner] Version 3.0.4
This application is licensed to you by its owner.
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Downloading https://github.com/sa7mon/S3Scanner/releases/download/v3.0.4/S3Scanner_Windows_x86_64.zip
██████████████████████████████ 6.52 MB / 6.52 MB
Successfully verified installer hash
Extracting archive…
Successfully extracted archive
Starting package install…
Command line alias added: “S3Scanner”
Successfully installed

جمله آخر نشان می دهد که S3Scanner با موفقیت نصب شده است.

اگر می‌خواهید از نصب S3Scanner از طریق روش‌های بالا اجتناب کنید، می‌توانید از فهرست بسته Python (PyPI) نیز استفاده کنید. برای انجام این کار، S3Scanner را در PyPI جستجو کنید:

و اولین گزینه ظاهر شده را انتخاب کنید (یعنی S3 Scanner):

دایرکتوری دلخواه خود را ایجاد کرده و به آن بروید (به عنوان مثال s3scanner_directory) و دستور را اجرا کنید pip install S3Scanner برای نصب آن

لطفاً توجه داشته باشید که برای اجرای آن باید پایتون و پیپ را روی رایانه خود نصب کنید pip فرمان

خروجی شما به این شکل است:

Collecting S3Scanner
Downloading S3Scanner-2.0.2-py3-none-any.whl (15 kB)
Requirement already satisfied: boto3>=1.20 in c:\python\python39\lib\site-packages (from S3Scanner) (1.34.2)
Requirement already satisfied: botocore<1.35.0,>=1.34.2 in c:\python\python39\lib\site-packages (from boto3>=1.20->S3Scanner) (1.34.2)
Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in c:\python\python39\lib\site-packages (from boto3>=1.20->S3Scanner) (1.0.1)
Requirement already satisfied: s3transfer<0.10.0,>=0.9.0 in c:\python\python39\lib\site-packages (from boto3>=1.20->S3Scanner) (0.9.0)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in c:\python\python39\lib\site-packages (from botocore<1.35.0,>=1.34.2->boto3>=1.20->S3Scanner) (2.8.2)
Requirement already satisfied: urllib3<1.27,>=1.25.4 in c:\python\python39\lib\site-packages (from botocore<1.35.0,>=1.34.2->boto3>=1.20->S3Scanner) (1.26.18)
Requirement already satisfied: six>=1.5 in c:\python\python39\lib\site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.35.0,>=1.34.2->boto3>=1.20->S3Scanner) (1.16.0)
Installing collected packages: S3Scanner
Successfully installed S3Scanner-2.0.2

این تأیید می کند که S3Scanner با موفقیت نصب شده است.

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

قبل از اجرای هر اسکن، باید مطمئن شوید که همه چیز کار می کند و پارامترهای اسکن خود را پیکربندی کنید.

یکی از دستورات زیر را اجرا کنید تا مطمئن شوید S3Scanner به درستی پیکربندی شده است:

s3scanner -h

s3scanner –help

شما باید اطلاعاتی در مورد گزینه های مختلفی که می توانید هنگام اسکن سطل ها استفاده کنید دریافت کنید:

usage: s3scanner [-h] [–version] [–threads n] [–endpoint-url ENDPOINT_URL] [–endpoint-address-style {path,vhost}] [–insecure] {scan,dump} …

s3scanner: Audit unsecured S3 buckets
by Dan Salmon – github.com/sa7mon, @bltjetpack

optional arguments:
-h, –help show this help message and exit
–version Display the current version of this tool
–threads n, -t n Number of threads to use. Default: 4
–endpoint-url ENDPOINT_URL, -u ENDPOINT_URL
URL of S3-compliant API. Default: https://s3.amazonaws.com
–endpoint-address-style {path,vhost}, -s {path,vhost}
Address style to use for the endpoint. Default: path
–insecure, -i Do not verify SSL

mode:
{scan,dump} (Must choose one)
scan Scan bucket permissions
dump Dump the contents of buckets

اگر رابط خط فرمان AWS (AWS CLI) را نصب کرده اید و اعتبارنامه AWS را در .aws پوشه، S3Scanner این اعتبارنامه ها را برای استفاده در هنگام اسکن انتخاب می کند. در غیر این صورت، باید AWS CLI را نصب کنید تا بتوانید سطل ها را در محیط خود انتخاب کنید:

اسکن ها را اجرا کنید و نتایج را تفسیر کنید

برای اجرای اسکن، باید اجرا کنید s3scanner و ارائه پرچم ها، مانند scan یا dump، و نام سطل. به عنوان مثال، برای اسکن مجوزها در یک سطل به نام my-bucket، می دوید s3scanner scan –bucket my-bucket.

این خروجی مشابه زیر را به شما می دهد (ستون ها با کاراکتر لوله مشخص می شوند، |):

my-bucket | bucket_exists | AuthUsers: [], AllUsers: []

قسمت اول خروجی نام سطل را به شما می دهد و به شما می گوید که آیا آن سطل در جهان S3 وجود دارد یا خیر. آخرین بخش خروجی مجوزهای قابل انتساب به کاربران احراز هویت شده (هر کسی که دارای حساب AWS) و همچنین همه کاربران است را به شما نشان می دهد.

یک دستور اسکن را برای یک سطل که در محیط AWS شما قرار دارد اجرا کنید، مانند ans3scanner-bucket، مانند این:

شما باید خروجی زیر را دریافت کنید:

ans3scanner-bucket | bucket_exists | AuthUsers: [Read], AllUsers: []

این خروجی نشان می دهد که سطل به کاربران احراز هویت اعطا شده است [Read] حقوق.

سطل های GCP خود را اسکن کنید

برای آزمایش سطل های GCP خود، یک سطل در حساب GCP خود ایجاد کنید و مطمئن شوید که دسترسی عمومی ندارد:

در داخل سطل، یک فایل متنی اضافه کنید:

برای اسکن سطل، دستور ذکر شده قبلی را اجرا کنید: s3scanner -bucket s3scanner-demo -provider gcp. شما باید ارائه دهید -provider gcp پرچم گذاری کنید تا به S3Scanner بگویید که می خواهید یک سطل GCP را اسکن کنید. اگر این پرچم را ارائه نکنید، S3Scanner از AWS (گزینه پیش‌فرض) استفاده می‌کند.

خروجی شما نشان می دهد که یک سطل وجود دارد:

level=info msg=”exists | s3scanner-demo | default | AuthUsers: [] | AllUsers: []”

اکنون، دسترسی سطل GCP را به “عمومی” تغییر دهید و به همه کاربران دسترسی بدهید:

سپس، سطل GCP را اسکن کنید. خروجی شما نشان می دهد که سطل برای همه کاربران در دسترس است:

level=info msg=”exists | s3scanner-demo | default | AuthUsers: [] | AllUsers: [READ, READ_ACP]”

بهترین روش ها برای اصلاح

پس از بررسی نتایج اسکن خود، مطمئن شوید که مسائل شناسایی شده را بر اساس شدت آنها اولویت بندی کنید. برخی از درمان های رایج به شرح زیر است:

تنظیم مجوزهای سطل: می‌توانید با تنظیم مجوزها و سیاست‌ها برای رعایت اصل حداقل امتیاز، دسترسی به سطل‌ها را محدود کنید. اطمینان حاصل کنید که دسترسی عمومی غیر ضروری را حذف کرده اید و مطمئن شوید که فقط نهادهای مجاز مجوزهای لازم را دارند.
به طور منظم تنظیمات سطل S3 خود را بررسی و نظارت کنید: یک روال برای ممیزی و نظارت بر تنظیمات سطل S3 خود ایجاد کنید. همچنین می‌توانید هشدارهایی را برای هرگونه تغییر در مجوزها یا خط‌مشی‌ها تنظیم کنید و امکان شناسایی و پاسخ به موقع به حوادث امنیتی احتمالی را فراهم کنید. علاوه بر این، می توانید از ابزارها و خدماتی مانند AWS Config استفاده کنید که به شما کمک می کند پیکربندی منابع خود را ارزیابی، ممیزی و ارزیابی کنید. علاوه بر این، AWS Trusted Advisor به بررسی محیط شما کمک می کند و توصیه هایی برای بهبود امنیت، عملکرد و هزینه ارائه می دهد.
رمزگذاری داده ها: ایمن سازی داده ها از طریق رمزگذاری شامل اجرای اقداماتی برای هر دو حالت انتقال و استراحت است. برای داده هایی که در حال انتقال هستند، استفاده از کانال های ارتباطی ایمن مانند HTTPS در حین انتقال تضمین می کند که اطلاعات بین کلاینت ها و سرورها رمزگذاری شده باقی می مانند. در سمت سرور، AWS S3 گزینه های مختلفی را برای رمزگذاری داده ها در حالت استراحت ارائه می دهد.

نتیجه گیری

در این مقاله، با برخی از خطرات امنیتی رایج مرتبط با سطل های آمازون S3 و نحوه کمک S3Scanner آشنا شدید.

S3Scanner یک ابزار ارزشمند برای هر کسی است که از فضای ذخیره‌سازی ابری از طریق سطل استفاده می‌کند، زیرا به شما کمک می‌کند آسیب‌پذیری‌های محیط خود را اسکن کنید. S3Scanner با اسکن چند رشته ای، تجزیه و تحلیل مجوز جامع، پشتیبانی ارائه دهنده ذخیره سازی سفارشی، ادغام پایگاه داده PostgreSQL و گزارش دهی قابل تنظیم، قطعا ارزش کاوش را دارد.

همه ارائه دهندگان ابر انواع خدمات سطل فایل را ارائه می دهند. این سرویس‌های سطل فایل به کاربران اجازه می‌دهند داده‌ها را در فضای ابری ذخیره و بازیابی کنند و مقیاس‌پذیری، دوام و دسترسی را از طریق پورتال‌های وب و APIها ارائه می‌دهند. به عنوان مثال، AWS سرویس ذخیره سازی ساده آمازون (S3) را ارائه می دهد، GCP فضای ذخیره سازی ابری Google را ارائه می دهد و DigitalOcean Spaces را ارائه می دهد. با این حال، در صورت ایمن نبودن، این سطل‌های فایل یک خطر امنیتی بزرگ ایجاد می‌کنند که به طور بالقوه منجر به نقض داده‌ها، نشت داده‌ها، توزیع بدافزار و دستکاری داده‌ها می‌شود. به عنوان مثال، داده های شورای بریتانیا در مورد مزایای اعضا توسط یک سطل AWS ناامن افشا شد. در حادثه دیگری در سال 2021، یک سطل ناامن متعلق به یک سازمان غیرانتفاعی سرطان، تصاویر و داده‌های حساس ده‌ها هزار نفر را افشا کرد.

خوشبختانه S3Scanner می تواند کمک کند. S3Scanner یک ابزار رایگان و با کاربری آسان است که می‌تواند به شما کمک کند سطل‌های فایل ناامن را در همه ارائه‌دهندگان ابر اصلی شناسایی و رفع کنید: Amazon S3، Google Cloud Storage و Spaces:

معماری سطل ذخیره سازی s3

در این مقاله، همه چیز را در مورد S3Scanner و اینکه چگونه می تواند به شناسایی سطل های فایل ناامن در چندین ارائه دهنده ابر کمک کند، یاد خواهید گرفت.

خطرات امنیتی رایج در سطل های آمازون S3

سطل های آمازون S3 یک راه حل ساده و مقیاس پذیر برای ذخیره داده های شما در فضای ابری ارائه می دهند. با این حال، مانند هر پلتفرم ذخیره سازی آنلاین دیگری، خطرات امنیتی وجود دارد که باید از آنها آگاه باشید.

در زیر برخی از رایج ترین خطرات امنیتی مرتبط با سطل های آمازون S3 آورده شده است:

  • دسترسی عمومی ناخواسته: پیکربندی نادرست، مانند مجوزهای بیش از حد مجاز (یعنی اعطای دسترسی خواندن عمومی)، می‌تواند باعث ایجاد خط‌مشی‌ها و مجوزهای سطل ناامن شود، که می‌تواند منجر به دسترسی کاربران غیرمجاز به سطل S3 و انجام اقدامات روی آن شود.
  • خط‌مشی‌ها و مجوزهای سطل ناامن: سطل های S3 از مدیریت هویت و دسترسی (IAM) برای کنترل دسترسی به داده ها استفاده می کنند. این به شما امکان می دهد با استفاده از خط مشی های سطل، مجوزهایی را برای کاربران و گروه های فردی تعریف کنید. اگر خط مشی های سطل شما به درستی پیکربندی نشده باشد، می تواند به کاربران غیرمجاز دسترسی به داده های شما را بدهد (به عنوان مثال سیاست ها با استفاده از wildcard). پیکربندی ضعیف تنظیمات IAM همچنین می‌تواند منجر به نقض انطباق به دلیل دسترسی یا اصلاح غیرمجاز داده شود که بر الزامات نظارتی تأثیر می‌گذارد و می‌تواند سازمان را در معرض عواقب قانونی قرار دهد.
  • قرار گرفتن در معرض و نشت داده ها: حتی اگر سطل S3 شما عمومی نباشد، داده ها همچنان می توانند در معرض دید قرار گیرند. به عنوان مثال، اگر شما به طور تصادفی URL یک شی را با شخص دیگری به اشتراک بگذارید یا اگر مجوزهای بیش از حد مجاز برای آن سطل وجود داشته باشد، داده ها می توانند افشا شوند. علاوه بر این، اگر داده‌ها را از سطل S3 خود در یک مکان ناامن دانلود کنید، ممکن است در معرض قرار گرفتن داده‌ها رخ دهد.
  • عدم وجود رمزگذاری: فقدان رمزگذاری برای داده های ذخیره شده در سطل های S3 یکی دیگر از خطرات امنیتی مهم است. بدون رمزگذاری، داده های رهگیری شده در حین حمل و نقل یا دستگاه های ذخیره سازی در معرض خطر ممکن است اطلاعات حساس را در معرض دید قرار دهند.

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

اینجاست که S3Scanner می تواند مفید باشد.

S3Scanner چیست؟

S3Scanner یک ابزار متن باز است که برای اسکن و شناسایی آسیب پذیری های امنیتی در سطل های آمازون S3 طراحی شده است:

S3Scanner از بسیاری از پلتفرم های محبوب پشتیبانی می کند از جمله:

  • AWS (پلتفرم موضوعی این مقاله)
  • GCP
  • اقیانوس دیجیتال
  • لینود
  • Scaleway

شما همچنین می توانید از S3Scanner با ارائه دهندگان سفارشی مانند راه حل سطل سفارشی خود استفاده کنید. این آن را به یک راه حل همه کاره برای سازمان های مختلف تبدیل می کند.

لطفاً توجه داشته باشید، برای سرویس‌های غیر AWS، S3Scanner در حال حاضر فقط از اسکن برای مجوزهای کاربر ناشناس پشتیبانی می‌کند.

دستور زیر استفاده اولیه S3Scanner را برای اسکن سطل های فهرست شده در فایلی به نام نشان می دهد names.txt و اشیاء را برشمارید.

$ s3scanner -bucket-file names.txt -enumerate

برخی از ویژگی های کلیدی S3Scanner به شرح زیر است:

اسکن چند رشته ای

S3Scanner از قابلیت های multithreading برای ارزیابی همزمان چند سطل S3 استفاده می کند و سرعت تشخیص آسیب پذیری را بهینه می کند. برای تعیین تعداد رشته های مورد استفاده، می توانید از -threads پرچم گذاری کنید و سپس تعداد رشته هایی را که می خواهید استفاده کنید ارائه کنید.

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

s3scanner -bucket my_bucket -threads 10

فایل پیکربندی

اگر از پرچم هایی استفاده می کنید که به گزینه های پیکربندی مانند ارائه دهندگان سفارشی نیاز دارند، باید یک فایل پیکربندی ایجاد کنید. برای انجام این کار، یک فایل به نام ایجاد کنید config.yml و آن را در یکی از مکان های زیر قرار دهید، جایی که S3Scanner آن را جستجو می کند:

(current directory)
/etc/s3scanner/
$HOME/.s3scanner/

پشتیبانی از ارائه دهنده ذخیره سازی داخلی و سفارشی

همانطور که قبلاً گفته شد، S3Scanner به طور یکپارچه با ارائه دهندگان مختلف ادغام می شود. می توانید استفاده کنید -provider گزینه ای برای تعیین ارائه دهنده ذخیره سازی اشیاء هنگام بررسی سطل ها.

به عنوان مثال، اگر از GCP استفاده می کنید، از دستور زیر استفاده می کنید: s3scanner -bucket my_bucket -provider gcp

برای استفاده از یک ارائه‌دهنده سفارشی هنگام کار با ارائه‌دهنده ذخیره‌سازی شبکه محلی که در حال حاضر پشتیبانی نمی‌شود، مقدار ارائه‌دهنده باید باشد custom مانند این: s3scanner -bucket my_bucket -provider custom

لطفاً توجه داشته باشید که وقتی با یک ارائه دهنده سفارشی کار می کنید، باید کلیدهای فایل پیکربندی را نیز در زیر تنظیم کنید providers.custom، همانطور که در فایل پیکربندی ذکر شده است. برخی از نمونه ها عبارتند از address_style، endpoint_format، و insecure. در اینجا نمونه ای از پیکربندی ارائه دهنده سفارشی آورده شده است:

# providers.custom required by `-provider custom`
#   address_style - Addressing style used by endpoints.
#     type: string
#     values: "path" or "vhost"
#   endpoint_format - Format of endpoint URLs. Should contain '$REGION' as placeholder for region name
#     type: string
#   insecure - Ignore SSL errors
#     type: boolean
# regions must contain at least one option
providers:
  custom: 
    address_style: "path"
    endpoint_format: "https://$REGION.vultrobjects.com"
    insecure: false
    regions:
      - "ewr1"

تجزیه و تحلیل جامع مجوز

S3Scanner اسکن های دسترسی را با بررسی مجوزهای سطل فراهم می کند. پیکربندی نادرست در کنترل‌های دسترسی، سیاست‌های سطل و مجوزهای مرتبط با هر سطل S3 را شناسایی می‌کند.

یکپارچه سازی پایگاه داده PostgreSQL

S3Scanner می تواند نتایج اسکن را مستقیماً در پایگاه داده PostgreSQL ذخیره کند. این به حفظ یک مخزن ساختار یافته و در دسترس آسیب پذیری ها کمک می کند. ذخیره نتایج در یک پایگاه داده همچنین توانایی شما را برای ردیابی داده ها و روندهای تاریخی افزایش می دهد.

برای ذخیره تمام نتایج اسکن در PostgreSQL، می توانید از آن استفاده کنید -db پرچم، مانند این: اسکنر s3 -bucket my_bucket -db

این گزینه نیاز به db.uri کلید فایل پیکربندی در config فایل این چیزی است که شما config فایل باید به شکل زیر باشد:

# Required by -db
db:
uri: "postgresql://user:password@db.host.name:5432/schema_name"

اتصال RabbitMQ برای اتوماسیون

همچنین می توانید با RabbitMQ که یک واسطه پیام منبع باز برای اهداف اتوماسیون است، ادغام کنید. این به شما امکان می‌دهد گردش‌های کاری خودکار ایجاد شده توسط نتایج اسکن را تنظیم کنید یا آنها را برای اجرای منظم برنامه‌ریزی کنید. پاسخ‌های خودکار می‌تواند شامل هشدارها، اعلان‌ها یا اقدامات بیشتر بر اساس آسیب‌پذیری‌های شناسایی‌شده باشد که امنیت فعال و مستمر را تضمین می‌کند.

این -mq flag برای اتصال به سرور RabbitMQ استفاده می‌شود و پیام‌هایی را که حاوی نام سطل هستند برای اسکن:s3scanner -mq مصرف می‌کند.

این -mq پرچم نیاز دارد mq.queue_name و mq.uri کلیدهایی که در config فایل

گزارش دهی قابل تنظیم

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

به عنوان مثال، شما می توانید استفاده کنید -json پرچم برای خروجی نتایج اسکن در فرمت JSON:s3scanner -bucket my-bucket -json

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

S3Scanner چگونه کار می کند

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

مراحل نصب برای پلتفرم های مختلف و شماره نسخه در زیر نشان داده شده است:

  • پلتفرم: Homebrew (MacOS)
    • نسخه: v3.0.4
    • مراحل: دم نصب s3scanner
  • پلتفرم: کالی لینوکس
    • نسخه: 3.0.0
    • مراحل: نصب s3scanner
  • پلت فرم: Parrot OS
    • نسخه: –
    • مراحل: نصب s3scanner
  • پلتفرم: BlackArch
    • نسخه: 464.fd24ab1
    • مراحل: اسکنر pacman -S s3
  • پلت فرم: داکر
    • نسخه: v3.0.4
    • مراحل: داکر ghcr.io/sa7mon/s3scanner را اجرا کنید
  • پلتفرم: Winget (ویندوز)
    • نسخه: v3.0.4
    • مراحل: winget نصب s3scanner
  • پلتفرم: برو
    • نسخه: v3.0.4
    • مراحل: به نصب -v github.com/sa7mon/s3scanner@latest بروید
  • پلت فرم: دیگر (ساخت از منبع)
    • نسخه: v3.0.4
    • مراحل: git clone git@github.com:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner.

به عنوان مثال، در یک سیستم ویندوز، می توانید از winget استفاده کنید و دستور زیر را اجرا کنید: winget install s3scanner. خروجی شما به شکل زیر خواهد بود:

Found S3Scanner [sa7mon.S3Scanner] Version 3.0.4
This application is licensed to you by its owner.
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
Downloading https://github.com/sa7mon/S3Scanner/releases/download/v3.0.4/S3Scanner_Windows_x86_64.zip
  ██████████████████████████████  6.52 MB / 6.52 MB
Successfully verified installer hash
Extracting archive...
Successfully extracted archive
Starting package install...
Command line alias added: "S3Scanner"
Successfully installed

جمله آخر نشان می دهد که S3Scanner با موفقیت نصب شده است.

اگر می‌خواهید از نصب S3Scanner از طریق روش‌های بالا اجتناب کنید، می‌توانید از فهرست بسته Python (PyPI) نیز استفاده کنید. برای انجام این کار، S3Scanner را در PyPI جستجو کنید:

اسکنر s3 روی پیپ

و اولین گزینه ظاهر شده را انتخاب کنید (یعنی S3 Scanner):

پیپ اسکنر s3

دایرکتوری دلخواه خود را ایجاد کرده و به آن بروید (به عنوان مثال s3scanner_directory) و دستور را اجرا کنید pip install S3Scanner برای نصب آن

لطفاً توجه داشته باشید که برای اجرای آن باید پایتون و پیپ را روی رایانه خود نصب کنید pip فرمان

خروجی شما به این شکل است:

Collecting S3Scanner
  Downloading S3Scanner-2.0.2-py3-none-any.whl (15 kB)
Requirement already satisfied: boto3>=1.20 in c:\python\python39\lib\site-packages (from S3Scanner) (1.34.2)
Requirement already satisfied: botocore<1.35.0,>=1.34.2 in c:\python\python39\lib\site-packages (from boto3>=1.20->S3Scanner) (1.34.2)
Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in c:\python\python39\lib\site-packages (from boto3>=1.20->S3Scanner) (1.0.1)
Requirement already satisfied: s3transfer<0.10.0,>=0.9.0 in c:\python\python39\lib\site-packages (from boto3>=1.20->S3Scanner) (0.9.0)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in c:\python\python39\lib\site-packages (from botocore<1.35.0,>=1.34.2->boto3>=1.20->S3Scanner) (2.8.2)
Requirement already satisfied: urllib3<1.27,>=1.25.4 in c:\python\python39\lib\site-packages (from botocore<1.35.0,>=1.34.2->boto3>=1.20->S3Scanner) (1.26.18)
Requirement already satisfied: six>=1.5 in c:\python\python39\lib\site-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.35.0,>=1.34.2->boto3>=1.20->S3Scanner) (1.16.0)
Installing collected packages: S3Scanner
Successfully installed S3Scanner-2.0.2

این تأیید می کند که S3Scanner با موفقیت نصب شده است.

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

قبل از اجرای هر اسکن، باید مطمئن شوید که همه چیز کار می کند و پارامترهای اسکن خود را پیکربندی کنید.

یکی از دستورات زیر را اجرا کنید تا مطمئن شوید S3Scanner به درستی پیکربندی شده است:

s3scanner -h
s3scanner --help

شما باید اطلاعاتی در مورد گزینه های مختلفی که می توانید هنگام اسکن سطل ها استفاده کنید دریافت کنید:

usage: s3scanner [-h] [--version] [--threads n] [--endpoint-url ENDPOINT_URL]
                 [--endpoint-address-style {path,vhost}] [--insecure]
                 {scan,dump} ...

s3scanner: Audit unsecured S3 buckets
           by Dan Salmon - github.com/sa7mon, @bltjetpack

optional arguments:
  -h, --help            show this help message and exit
  --version             Display the current version of this tool
  --threads n, -t n     Number of threads to use. Default: 4
  --endpoint-url ENDPOINT_URL, -u ENDPOINT_URL
                        URL of S3-compliant API. Default: https://s3.amazonaws.com
  --endpoint-address-style {path,vhost}, -s {path,vhost}
                        Address style to use for the endpoint. Default: path
  --insecure, -i        Do not verify SSL

mode:
  {scan,dump}           (Must choose one)
    scan                Scan bucket permissions
    dump                Dump the contents of buckets

اگر رابط خط فرمان AWS (AWS CLI) را نصب کرده اید و اعتبارنامه AWS را در .aws پوشه، S3Scanner این اعتبارنامه ها را برای استفاده در هنگام اسکن انتخاب می کند. در غیر این صورت، باید AWS CLI را نصب کنید تا بتوانید سطل ها را در محیط خود انتخاب کنید:

پیکربندی aws

اسکن ها را اجرا کنید و نتایج را تفسیر کنید

برای اجرای اسکن، باید اجرا کنید s3scanner و ارائه پرچم ها، مانند scan یا dump، و نام سطل. به عنوان مثال، برای اسکن مجوزها در یک سطل به نام my-bucket، می دوید s3scanner scan --bucket my-bucket.

این خروجی مشابه زیر را به شما می دهد (ستون ها با کاراکتر لوله مشخص می شوند، |):

my-bucket | bucket_exists | AuthUsers: [], AllUsers: []

قسمت اول خروجی نام سطل را به شما می دهد و به شما می گوید که آیا آن سطل در جهان S3 وجود دارد یا خیر. آخرین بخش خروجی مجوزهای قابل انتساب به کاربران احراز هویت شده (هر کسی که دارای حساب AWS) و همچنین همه کاربران است را به شما نشان می دهد.

یک دستور اسکن را برای یک سطل که در محیط AWS شما قرار دارد اجرا کنید، مانند ans3scanner-bucket، مانند این:

سطل های aws

شما باید خروجی زیر را دریافت کنید:

ans3scanner-bucket | bucket_exists | AuthUsers: [Read], AllUsers: []

این خروجی نشان می دهد که سطل به کاربران احراز هویت اعطا شده است [Read] حقوق.

سطل های GCP خود را اسکن کنید

برای آزمایش سطل های GCP خود، یک سطل در حساب GCP خود ایجاد کنید و مطمئن شوید که دسترسی عمومی ندارد:

سطل های gcp

در داخل سطل، یک فایل متنی اضافه کنید:

ذخیره سازی ابری گوگل

برای اسکن سطل، دستور ذکر شده قبلی را اجرا کنید: s3scanner -bucket s3scanner-demo -provider gcp. شما باید ارائه دهید -provider gcp پرچم گذاری کنید تا به S3Scanner بگویید که می خواهید یک سطل GCP را اسکن کنید. اگر این پرچم را ارائه نکنید، S3Scanner از AWS (گزینه پیش‌فرض) استفاده می‌کند.

خروجی شما نشان می دهد که یک سطل وجود دارد:

level=info msg="exists    | s3scanner-demo | default | AuthUsers: [] | AllUsers: []"

اکنون، دسترسی سطل GCP را به “عمومی” تغییر دهید و به همه کاربران دسترسی بدهید:

gcp

سپس، سطل GCP را اسکن کنید. خروجی شما نشان می دهد که سطل برای همه کاربران در دسترس است:

level=info msg="exists    | s3scanner-demo | default | AuthUsers: [] | AllUsers: [READ, READ_ACP]"

بهترین روش ها برای اصلاح

پس از بررسی نتایج اسکن خود، مطمئن شوید که مسائل شناسایی شده را بر اساس شدت آنها اولویت بندی کنید. برخی از درمان های رایج به شرح زیر است:

  • تنظیم مجوزهای سطل: می‌توانید با تنظیم مجوزها و سیاست‌ها برای رعایت اصل حداقل امتیاز، دسترسی به سطل‌ها را محدود کنید. اطمینان حاصل کنید که دسترسی عمومی غیر ضروری را حذف کرده اید و مطمئن شوید که فقط نهادهای مجاز مجوزهای لازم را دارند.
  • به طور منظم تنظیمات سطل S3 خود را بررسی و نظارت کنید: یک روال برای ممیزی و نظارت بر تنظیمات سطل S3 خود ایجاد کنید. همچنین می‌توانید هشدارهایی را برای هرگونه تغییر در مجوزها یا خط‌مشی‌ها تنظیم کنید و امکان شناسایی و پاسخ به موقع به حوادث امنیتی احتمالی را فراهم کنید. علاوه بر این، می توانید از ابزارها و خدماتی مانند AWS Config استفاده کنید که به شما کمک می کند پیکربندی منابع خود را ارزیابی، ممیزی و ارزیابی کنید. علاوه بر این، AWS Trusted Advisor به بررسی محیط شما کمک می کند و توصیه هایی برای بهبود امنیت، عملکرد و هزینه ارائه می دهد.
  • رمزگذاری داده ها: ایمن سازی داده ها از طریق رمزگذاری شامل اجرای اقداماتی برای هر دو حالت انتقال و استراحت است. برای داده هایی که در حال انتقال هستند، استفاده از کانال های ارتباطی ایمن مانند HTTPS در حین انتقال تضمین می کند که اطلاعات بین کلاینت ها و سرورها رمزگذاری شده باقی می مانند. در سمت سرور، AWS S3 گزینه های مختلفی را برای رمزگذاری داده ها در حالت استراحت ارائه می دهد.

نتیجه گیری

در این مقاله، با برخی از خطرات امنیتی رایج مرتبط با سطل های آمازون S3 و نحوه کمک S3Scanner آشنا شدید.

S3Scanner یک ابزار ارزشمند برای هر کسی است که از فضای ذخیره‌سازی ابری از طریق سطل استفاده می‌کند، زیرا به شما کمک می‌کند آسیب‌پذیری‌های محیط خود را اسکن کنید. S3Scanner با اسکن چند رشته ای، تجزیه و تحلیل مجوز جامع، پشتیبانی ارائه دهنده ذخیره سازی سفارشی، ادغام پایگاه داده PostgreSQL و گزارش دهی قابل تنظیم، قطعا ارزش کاوش را دارد.

https%3A%2F%2Fdev to

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا