با سلام، من مهدی مرادلو هستم و در این نوشتار به بررسی آسیبپذیریهایی که ممکن است در سرویسهای کوتاهکننده لینک وجود داشته باشد، پرداخته و نکات ضروری که باید در پیادهسازی این سرویسها رعایت شوند را ذکر خواهم کرد من در این نوشتار به کوتاه کننده های لینک داخلی می پردازم و سرویس دهنده های کوتاه کننده لینک و ... هدف من در این نوشتار نیست.. متأسفانه، با اینکه این مسائل بسیار ابتدایی به نظر میرسند، اما این آسیبپذیریها به وفور در میان شرکتهای ایرانی مشاهده میشوند و در بسیاری از موارد منجر به تصاحب حسابهای کاربری یا افشای اطلاعات کاربران میگردند.
لینک کوتاه چیست
لینک کوتاه (Short URL) به URL گفته میشود که با استفاده از یک سرویس خاص به آدرس طولانیتر تبدیل میشود. این فرآیند به کاهش طول لینک کمک کرده و آن را برای به اشتراکگذاری آسانتر و همچنین صرفهجویی در فضای اشغالی تبدیل میکند. این خدمات راهی آسان برای فشردهسازیURLهای طولانی به لینکهای کوچک و مناسب برای پستهای رسانههای اجتماعی، پیامهای متنی و غیره فراهم میآورد. به عنوان مثال، پس از خرید یک بلیط، کاربر یک لینک کوتاهشده دریافت میکند که با وارد کردن آن در مرورگر به آدرس دیگری هدایت میشود که در آن اطلاعات بلیط خود را مشاهده میکند.
نحوه کارکرد کوتاهکنندههایURL
توسعهدهندگان میتوانند از روشهای مختلفی برای پیادهسازی یک سرویس کوتاهکننده لینک داخلی استفاده کنند که بهطور خودکار پس از خرید یا انجام فعالیتهای خاص، لینکهای کوتاهشده را تولید کند. یکی از شیوههای متداول پیادهسازی این سرویس به ترتیب زیر است: سرویس کوتاهکننده لینک ابتدا یک رشته تصادفی (کد کوتاه) تولید کرده و آن را به URL طولانی (مانند صفحه اطلاعات سفارش یا ...) در پایگاه داده مرتبط میسازد. هنگامی که کاربر لینک کوتاه را وارد میکند، سرویس با استفاده از کد کوتاه، URL طولانی را از پایگاه داده جستجو کرده و سپس کاربر را به آن هدایت میکند.
نکات امنیتی که حتماً باید در پیادهسازی رعایت کنید
یکی از مواردی که بهصورت گسترده در لینکهای کوتاه استفاده میشود، نمایش اطلاعات خرید و سفارش است. در بیشتر موارد، داخل لینکهای کوتاهشده توکن حساب کاربری وجود دارد. بهعنوان مثال، فرض کنید لینک کوتاه به این شکل است:
https://links.ir/5sGeT1
زمانی که کاربر این لینک را در مرورگر وارد میکند، به آدرس زیر هدایت میشود:
https://linkorginal.ir/order/1?token=RudderEncrypt%3AU2FsdGVkX19SjA%2Bmj3Ar91hSIsXjaKgAczMA6sge5X1Y3tJREM2x1SgJe40nmt9ghAB00j1jvrYAlKMQgu%2FWMUBwDLkaKvt%2Fy9WA%2BN
از آنجا که برای مشاهده اطلاعات نیاز به ورود به حساب کاربری است، سامانه توکن حساب کاربری را نیز در انتهای آدرس قرار میدهد.،.همچنین در برخی موارد، کدهای تخفیف با لینک کوتاه ارسال میشود یا برای تکمیل یک فرم لینک کوتاه ایجاد شده و برای کاربر ارسال میگردد که حاوی اطلاعات حساس است. اگر مهاجم نتواند به انی لینک ها دسترسی داشته باشد مشکلی ایجاد نمی شود اما روش های مختلفی برای بدست آوردن لینک های کوتاه وجود دارد.
چگونه مهاجم میتواند به لینکهای کوتاه سایر کاربران دسترسی داشته باشد؟
ایندکس شدن لینکهای کوتاه در موتورهای جستجو:
لینکهای ریدایرکت با وضعیتهای 302، 303 و 307 میتوانند ایندکس شوند، مگر اینکه توسعهدهندگان اقدامات پیشگیرانهای مانند استفاده از تگ noindex یا محدودیتهای robots.txt را اعمال کنند. در صورتی که این محدودیتها اعمال نشود، مهاجم میتواند با استفاده از یک جستجوی ساده در موتورهای جستجو به برخی از لینکهای کوتاه که حاوی اطلاعات حساس هستند، دسترسی پیدا کند.
Brute force لینکهای کوتاه:
بیشتر کوتاهکنندههای لینکی که در برنامههای باگ بانتی به آنها برخورد کردهام، دارای یک رشته تصادفی ۵ کارکتری هستند (شامل حروف بزرگ، کوچک و اعداد) که کل حالتهای ممکن حدوداً ۹۱۶,۱۳۲,۸۳۲ است. با توجه به این تعداد، اگر یک میلیون لینک صحیح داشته باشیم، بهطور میانگین با ارسال هر ۹۰۰ درخواست به یک لینک صحیح خواهیم رسید.
برای انجام Brute Force، که به معنای تلاش برای دسترسی به اطلاعات با آزمایش همه یا برخی از ترکیبهای ممکن است، ابزارهای بسیار زیادی وجود دارد که استفاده از آنها نیز بسیار ساده است. این روش به مهاجم این امکان را میدهد که با استفاده از یک اسکریپت یا ابزار خودکار به سرعت ترکیبهای مختلف را آزمایش کرده و به راحتی به لینکهای صحیح دسترسی پیدا کند.
برای جلوگیری از Brute Force، میتوانید طول رشته را به ۸ افزایش داده و همچنینRate Limiting اعمال کنید. این دو اقدام بهطور چشمگیری سطح امنیت را افزایش داده و دسترسی غیرمجاز را دشوارتر میکند.
همچنین، بهتر است برای لینکهای کوتاه که حاوی اطلاعات حساس هستند، تاریخ انقضا اعمال کنید (مثلاً برای لینک کوتاه تغییر رمز عبور) که پس از زمان مورد نظر منقضی شود. این اقدام میتواند به جلوگیری از سوءاستفاده از لینکهای قدیمی و ناامن کمک کند، چرا که ممکن است مشکلات و تنظیمات اشتباه امنیتی در بخشهای دیگر سبب شود که محدودیت Rate Limiting اعمال شده دور بخورد.
روشهای دور زدن محدودیتRate Limiting
من در این نوشتار قصد ندارم به روش ها و تکنیک های مختلف دور زدن Rate Limiting، بپردازم ولی برای آشنایی توسعهدهندگان، به چند مورد اشاره میکنم.
عموماً محدودیتها بر رویIP درخواستکننده اعمال میشود. یکی از روشهای دور زدن محدودیتهای اعمال شده بر روی IP استفاده از هدرهای خاص است.
زمانی که درخواستها از طریق لود بالانسر، پروکسی یاCDN به سرور اصلی میرسند، لود بالانسر هدرX-Forwarded-For را به درخواستها اضافه میکند تا منبع درخواست را شناسایی کند. این هدر به سرور اصلی کمک میکند تا بداند درخواست از کجا آمده است.
با این حال، مهاجمان میتوانند با اضافه کردن هدرX-Forwarded-For جعلی به درخواستهای خود، آدرس IP دیگری را بهجای آدرس IP واقعی قرار دهند. این کار میتواند به آنها اجازه دهد تا از محدودیتهای Rate Limiting عبور کرده و سیستم را فریب دهند. همچنین میتوانند از هدرهای مختلفی مانند X-Real-IP، X-Originating-IP و X-Client-IP نیز استفاده کنند. این هدرها به مهاجمان اجازه میدهند تا آدرسIP واقعی خود را مخفی کرده و به راحتی از محدودیتهای اعمالشده عبور کنند. علاوه بر این، هدرهای دیگری نیز وجود دارد که میتوانند برای دور زدن محدودیتها مورد سوءاستفاده قرار گیرند.
در صورتی که Rate Limiting بر روی سرور اصلی انجام نشود، این محدودیتها بر روی لود بالانسرها یا فایروالها اعمال میشوند. در این صورت، اگر مهاجمIP سرور اصلی را کشف کند، میتواند درخواستها را بهصورت مستقیم ارسال کرده و از محدودیت تعداد درخواستها عبور کند.
با توجه به این مسائل، ضرورت انقضای لینکها پس از تاریخ مقرر بیشتر احساس میشود.
روشهای شناسایی سرویس کوتاهکننده لینک در یک سامانه
به عنوان یک متخصص امنیت، برای شناسایی سرویس کوتاهکننده لینک در یک سامانه، میتوانید از چند روش استفاده کنید. فرض کنید در برنامه باگ بانتی میخواهید آدرس کوتاهکننده لینک یک سامانه را شناسایی کنید. یکی از روشهای متداول، شناسایی سابدامینها (Subdomain Enumeration) است. همچنین میتوانید ازFuzzing برای یافتن مسیرهای مرتبط با این سرویس استفاده کنید. علاوه بر این، روشهای دیگری نیز برای شناسایی این سرویس وجود دارد.
عموماً از این سرویس برای ارسال اطلاعات سفارش پس از خرید استفاده میشود، که لینک کوتاه برای پیگیری سفارش ارسال میگردد. یکی از موارد دیگر، لینکهای موجود در ایمیلهای ارسالی توسط سامانه است.
روش دیگری که میتوانید استفاده کنید، بهرهگیری از ابزارهای backlink checker است. ممکن است فردی یک لینک کوتاه را در شبکههای اجتماعی یا مکانهای دیگر ثبت کرده باشد، و با استفاده از ابزاری مانندSEMrush میتوان به آن لینکها دسترسی پیدا کرد. به عنوان مثال، در دو گزارشی که ارسال کردم، توانستم با این روش به لینک کوتاه دست یابم.
از اینکه تا انتهای این محتوا را مطالعه کردید، سپاسگزارم و امیدوارم مطالب منتشر شده برایتان مفید واقع شده باشد.