ارزیابی امنیت GraphQL

ارزیابی امنیتی تخصصی برای GraphQL API

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

ارزیابی امنیت GraphQL، این APIها را هم در برابر OWASP API Security Top 10 می‌سنجد — همان ضعف‌های کنترل دسترسی و منطق کسب‌وکار که غالبِ رخنه‌های API‌اند — و هم در برابر ریسک‌های ویژه‌ی خودِ GraphQL: introspectionِ schema که کل نقشه را به مهاجم می‌دهد، عمق و پیچیدگی و batchingِ query که یک درخواست را به منع سرویس تبدیل می‌کند، و مجوزدهی‌ای که به‌جای هر endpoint در هر resolver اعمال می‌شود. چون یک endpoint واحدِ GraphQL کل گراف را در معرض می‌گذارد، نبود یک بررسی روی یک field می‌تواند داده‌ی کاربر دیگر را افشا کند. کار را با رفتار واقعی API می‌سنجیم، هر یافته را تا اثبات عملی دنبال می‌کنیم و شدت آن را با CVSS در کنار اثر واقعی بر کسب‌وکار تعیین می‌کنیم.

چه چیزی شامل می‌شود

مجوزدهی سطح field و شیء (BOLA/BFLA) در queryها و mutationها

افشای introspection و آنچه schema در محیط تولید آشکار می‌کند

محدودیت عمق، پیچیدگی و هزینه‌ی query — منع سرویس با queryهای تو در تو

سوءاستفاده از batching و aliasing، از جمله حمله‌ی جست‌وجوی فراگیر در یک درخواست

احراز هویت شکسته در queryها، mutationها و subscriptionها

تزریق که از راه resolver به پایگاه‌داده و سرویس‌های پایین‌دست می‌رسد

افشای بیش از حد داده و mass assignment از راه input typeها

مدیریت خطا و افشای اطلاعات در پاسخ‌ها

کنترل‌های محدودیت نرخ و مصرف منابع

بازبینی schema در برابر رفتار واقعی API

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

1
دامنه‌گذاری و کشف
محدوده و معیار موفقیت را توافق می‌کنیم، سپس گراف را — typeها، queryها، mutationها، subscriptionها و resolverها — از روی schema، introspection در جایی که روشن است و ترافیک واقعی نقشه‌برداری می‌کنیم. برای هر نقش یک حساب آزمایشی می‌خواهیم، چون بیشتر ضعف‌های مجوزدهی تنها وقتی آشکار می‌شوند که یک نقش به fieldهای نقش دیگر برسد.
2
تست مجوزدهی و منطق کسب‌وکار
قلب تست GraphQL: چون مجوزدهی در هر resolver اعمال می‌شود، هر field و mutation را برای ضعف‌های دسترسی سطح شیء و عملیات (BOLA/BFLA) بررسی می‌کنیم، تلاش می‌کنیم به‌جای یک کاربر به داده‌ی کاربر دیگر برسیم و منطق کسب‌وکارِ درمعرضِ گراف را می‌آزماییم.
3
تست خاص GraphQL و ورودی
افشای introspection، عمق و پیچیدگی و هزینه‌ی query، سوءاستفاده از batching و aliasing، تزریق از راه resolver، افشای بیش از حد داده و افشای اطلاعات در خطاها را می‌آزماییم؛ همان ریسک‌هایی که GraphQL را از یک REST API جدا می‌کنند.
4
اعتبارسنجی و تحلیل اثر
هر یافته با یک اثبات مفهوم تکرارپذیر تأیید می‌شود؛ خروجی تأییدنشده‌ی اسکنر گزارش نمی‌شود. شدت را با CVSS و اثر واقعی کسب‌وکار تعیین می‌کنیم تا بتوانید یک مسئله‌ی نظری را از موردی که داده‌ی مشتری را افشا می‌کند تشخیص دهید.
5
گزارش‌دهی و تست مجدد
گزارشی دریافت می‌کنید که هم مدیر و هم مهندس می‌توانند بر اساس آن اقدام کنند، همراه با مسیر رفع اولویت‌دار. پس از رفع، یافته‌ها را دوباره تست می‌کنیم تا مطمئن شویم رفع‌ها پابرجا هستند و چیز تازه‌ای باز نکرده‌اند.
خروجی‌ها
  • خلاصه‌ی اجرایی با نمای کلی ریسک برای تصمیم‌گیرندگان
  • گزارش فنی تفصیلی، هر یافته با اثبات مفهوم تکرارپذیر
  • نگاشت یافته‌ها به OWASP API Security Top 10 و ریسک‌های خاص GraphQL
  • شدت CVSS و اثر کسب‌وکار برای هر یافته
  • توصیه‌های پیچیدگی و عمق query و محدودیت نرخ
  • راهنمای سخت‌سازی schema و resolver
  • نقشه‌ی راه رفع با اولویت و گام‌های مشخص
  • تست مجدد پس از رفع

چرا وادی ایمن حافظ

تخصص GraphQL
درک عمیق و به‌روز از امنیت GraphQL: مدل مجوزدهی در هر resolver و ریسک‌های موتور query که یک تست متمرکز بر REST آن‌ها را پوشش نمی‌دهد.
عمق دستی، نه فقط اسکن
تست دستی و سیستماتیک هر type، field و mutation؛ دقیقاً روی ضعف‌های دسترسی و منطق کسب‌وکار تمرکز می‌کنیم که اسکنر آن‌ها را نمی‌بیند.
پوشش همسو با استاندارد
تست همسو با OWASP API Security Top 10 و راهنمای OWASP برای GraphQL، تا پوشش دسته‌های بحرانی ریسک روشن و قابل بررسی باشد.
یافته‌های قابل اجرا و اولویت‌دار
راهنمایی روشن و اولویت‌بندی‌شده بر پایه‌ی ریسک، با اثبات مفهوم تکرارپذیر و گام‌های عملی رفع برای هر یافته.

سوالات متداول

ارزیابی امنیت GraphQL چیست؟

ارزیابی امنیت GraphQL، یک GraphQL API را برای ضعف‌های امنیتی می‌سنجد: نقص‌های مجوزدهی سطح field و شیء، افشای introspection، منع سرویس با پیچیدگی query و batching، تزریق از راه resolver و افشای اطلاعات؛ در برابر OWASP API Security Top 10 و راهنمای OWASP برای GraphQL، و هر یافته اثبات و رتبه‌بندی می‌شود.

تست GraphQL با تست یک REST API چه تفاوتی دارد؟

یک REST API چند endpoint در معرض می‌گذارد؛ یک GraphQL API معمولاً یک endpoint که کل گراف از راه آن در دسترس است. مجوزدهی به‌جای هر مسیر در هر resolver اعمال می‌شود، پس یک بررسیِ جاافتاده یک field را هر جا که ظاهر شود افشا می‌کند، و موتور query ریسک‌هایی می‌افزاید که تست REST ندارد: introspection، عمق و پیچیدگی query و batching. استاندارد مرجع همچنان OWASP API Security Top 10 است که بر گراف اعمال می‌شود.

introspection چیست و آیا باید غیرفعال شود؟

introspection توانایی درونی GraphQL برای توصیف schema خودش است — هر type، field و آرگومان. در توسعه مفید است اما در تولید یک نقشه‌ی کامل از API را به مهاجم می‌دهد. غیرفعال‌کردن آن در تولید کار را سخت‌تر می‌کند؛ اما جایگزین اعمال مجوزدهی نیست، چون گراف را همچنان می‌توان با حدس‌زدن کاوید، و به همین دلیل هر دو را تست می‌کنیم.

منع سرویس با پیچیدگی query یا queryهای تو در تو چیست؟

GraphQL به کلاینت اجازه می‌دهد داده‌ی عمیقاً تو در تو و مرتبط را در یک درخواست بخواهد. بدون محدودیت عمق، پیچیدگی یا هزینه، یک queryِ ساخته‌شده — یا چند queryِ aliasشده که با هم batch شده‌اند — می‌تواند سرور را به کار سنگین وادارد و از پا درآورد. می‌سنجیم که این محدودیت‌ها هستند و پابرجا می‌مانند، و آستانه‌های مشخص پیشنهاد می‌دهیم.

برای شروع چه چیزی از ما لازم داریم؟

نشانی endpoint و محیط GraphQL، schema یا دسترسی introspection در صورت وجود، و حساب‌های آزمایشی برای هر نقش (دست‌کم دو کاربر در هر نقش تا دسترسی میان‌کاربری را بسنجیم). یک محیط staging که آینه‌ی تولید باشد بهترین حالت است. پیش از شروع، دامنه و هر mutationی را که باید کنار گذاشته شود توافق می‌کنیم.

تفاوت تست جعبه‌سیاه، جعبه‌خاکستری و جعبه‌سفید چیست؟

جعبه‌سیاه یعنی بدون دانش درونی تست می‌کنیم؛ جعبه‌سفید یعنی schema، مستندات و گاه کد منبع را هم داریم؛ جعبه‌خاکستری میان این دو است و معمولاً با اعتبارنامه و schema انجام می‌شود. برای GraphQL معمولاً جعبه‌خاکستری را پیشنهاد می‌کنیم: با در دست داشتن نقش‌ها و schema، ضعف‌های مجوزدهی در هر resolver را بسیار کامل‌تر و در زمان کمتری نسبت به تست کور پوشش می‌دهیم.

شدت یافته‌ها چگونه تعیین می‌شود؟

هر یافته یک امتیاز CVSS برای یک مبنای مشترک می‌گیرد که با اثر واقعی کسب‌وکار در بافت شما تعدیل می‌شود: چه داده یا عملیاتی را افشا می‌کند، چقدر آسان به آن می‌رسند و مهاجم چه به دست می‌آورد. به همین دلیل دو مسئله با CVSS یکسان ممکن است اولویت متفاوت بگیرند.

تست روی تولید انجام می‌شود و آیا API در حین تست ایمن می‌ماند؟

ترجیح ما محیط staging است که آینه‌ی تولید باشد. اگر تست ناچار روی تولید انجام شود، محدودیت‌ها را از پیش توافق می‌کنیم: بدون mutationهای مخرب، احتیاط در آزمون‌های پیچیدگی و batching که می‌توانند سرور را بار کنند، و یک نقطه‌ی تماس در سمت شما برای توقف فوری اگر چیزی نادرست به نظر رسید.

ارزیابی امنیت GraphQL چقدر طول می‌کشد؟

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

آماده شروع هستید؟
با تیم ما تماس بگیرید تا در مورد نیازهای ارزیابی امنیتی شما صحبت کنیم