امنیت, برنامه‌نویسی

حفره امنیتی در ای‌بی: اجرای کد از راه دور

در پست دیگه ای، به حمله تزریق کد پرداخته بودم. حالا یک کارشناس آلمانی تونسته حفره امنیتی در ای‌بی پیدا بکنه. دیوید ویرا کورتز سال پیش نیز یک ضعف امنیتی که منجر به تزریق SQL می شد در سایت eBay پیدا کرده بود.

EBay website

در ادامه مروری خواهیم کرد بر این نوشته این کارشناس.

یک درخواست قانونی شبیه این خواهد بود:

همونطور که از آدرس می شه حدس زد، با یک درخواست جستجو رو به روییم که “رشته متنی” مورد نظر از طریق متغیر q دریافت می شه. دیوید در قدم اول بررسی وب اپلیکیشن های PHP، مشکل type-cast رو چک می کنه. می دونیم که اگر متغیری از نوی string باشه ولی ورودی کاربر آرایه باشه، پی اچ پی مشکل ایجاد می کنه. برای کنترل این موضوع، آدرس زیر رو چک می کنیم:

می بینیم که سرور پاسخ مشابهی رو ارسال می کنه. بعدا به این مورد بر می گردیم.
می دونیم که پی‌اچ‌پی روش های متفاوتی برای کار با string ها داره. برای مثال اگر رشته متنی درون ” قرار بگیره (به جای ‘) در برخورد با کاراکترهای ویژه، امکان اجرای کد در شرایط خاصی به وجود میاد.

حالت هایی که امکان اجرا کد رو به وجود میاره:

  • قرار گرفتن ورودی کاربر در ” به جای ‘
  • استفاده از دستور eval برای ورودی کاربر
  • استفاده از دستور create_function برای ورودی کاربر
  • استفاده از دستور preg_replace برای ورودی کاربر (به همراه اصلاح کننده e/)
  • مقایسه رشته ای (با استفاده از <<< یا همون Heredoc) با ورودی کاربر

کدوم یک از موارد بالا در سایت eBay وجود داره؟ با توجه به اینکه تست به اصطلاح کور (blackbox) داره انجام می شه پس باید به حدس اکتفا کرد. حدس می زنیم اینجا از preg_replace برای فیلتر کردن ورودی ها استفاده شده و پس از اون از دستور eval.

چرا دیوید به این نتیجه رسیده؟

  • سایت ای‌بی از spellchecker (کنترل املا کلمات) استفاده می کنه. بسیاری از spellchecker ها از دستور eval استفاده می کنند.
  • یک سری فیلتر برای ورودی های کاربر استفاده می کنند. برای مثال وقتی کلمه secalert رو جستجو کنیم، بخش alert فیلتر شده و کلمه sec جستجو می شود. احتمالا alert رو جزو کلمات ممنوعه گذاشتن و برای جلوگیری از xss اون رو حذف کردن که البته کار اشتباهیه.

قبل از اینکه از دید یک هکر اقدام به اجرا کد کنیم، بهتره بدونیم که اگر رشته متنی درون ” قرار گرفته باشد، تجزیه شده و متغیر های درون آن شناسایی می شود.

به نظر ساده میاد. می تونیم با استفاده از ${ }  امتحان کنیم و ببینیم می تونیم دستور رو اجرا کنیم یا نه.

این کار جواب نداد و به نظر می رسه که رشته متنی رو در ” قرار نداده اند. چه کار می شه کرد؟

بذارید دوباره مروری بکنیم بر مشخصات PHP:
رشته های متنی در پی‌اچ‌پی آرایه ای از بایت ها است. بنابراین دسترسی و یا تغییر یک string با استفاده از براکت های آرایه، پارسر (تجزیه کننده) را فریب داده و منجر به اجرای کد دلبخواهی خواهد شد. مطابق اعلام سایت پی اچ پی، دسترسی و تغییر رشته متنی با استفاده از براکت، فقط در صورتیکه متن از نوع ISO-8859-1 باشد امن است.

خب حالا سعی می کنیم با ارسال آرایه به جای متن، مقادیر متفاوتی برای q به اسکریپت ارسال کنیم و نتیجه رو در صفحه ببینیم.

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

پیش از این حدس زدیم که از preg_replace برای فیلتر کردن کلمات ناخواسته استفاده شده و سپس روی متن به دست آمده از دستور eval استفاده می شود. چیزی که اینجا اتفاق می افته اینه که ورودی های کاربر باید از نوع string باشه و اگر از نوع دیگری بود، مثلا در اینجا آرایه، تبدیل نوع انجام شده (cast) و رشته متنی به دست آمده، با کلمات ممنوع مقایسه شده و فیلتر می گردد.

خب ببینیم چطور می تونیم استفاده کنیم از این حفره.

از مجموع بررسی های بالا استفاده می کنیم و متن جستجو رو در قالب آرایه می فرستیم و یکی از اندیس های آرایه رو  با استفاده از ${ } ارسال می کنیم تا به هدف برسیم.

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

phpinfo

می تونیم دستورهای دیگه ای رو هم به همین طریق ارسال کنیم

phpcredit

 دیوید در این مرحله، ضعف امنیتی رو به eBay گذارش می کنه اما یک هکر می تونست با اجرای دستورات سیستمی به کل سرور دسترسی پیدا کنه. برای مثال با این دستور {${ls -al}}  می تونست لیتس از فایل ها و فولدرهای موجود در فولدر اسکریپت پی اچ پی رو ببینه.

چگونه می شه از اینجور حمله جلوگیری کرد؟

  • به هیچ عنوان از دستورات eval و create_function روی ورودی های کاربر استفاده نکنید.
  • به جای استفاده از ترکیب preg_match و اصلاح کننده e/ ، از preg_match_callback استفاده کنید.
  • اجازه استفاده از Escape sequences در ورودی های کاربر را ندهید.

منبع

Standard
امنیت

ضعف امنیتی پرینترهای اچ‌پی

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

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

این ضعف امنیتی که با کد CVE-2013-4807 شماره گذاری شده، توسط Michał Sajdak کشف شده. این محقق توضیح داده که برخی URL های مخفی در Firmware پرینترهای اچ‌پی به هکر اجازه می ده پسوردهای وایفای و ادمین رو به صورت متن ساده ببینه.

M1217nfw (C) HP

M1217nfw (C) HP

برای مثال اگر به این آدرس مراجعه کنید:

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

در تصویر زیر می بینید که هکر تونسته پسورد ادمین رو ببینه. البته در این تصویر ۰x746573746f7765 معادل مبنای ۱۶ پسورده که اینه testowe.

hp-hex-password

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

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

در تصویر زیر می بینید که WPS PIN به وضوح نوشته شده.

hp-wps-pin

خبر خوب اینه که Hewlett-Packard نسخه جدید firmware های مدل های فوق رو منتشر کرده که از این لینک می تونید دانلود کنید. کافیه در صفحه باز شده، گزینه Drivers & Software را انتخاب کنید. سپس با جستجوی مدل پرینتر خودتون و انتخاب سیستم عاملتون، نسخه جدید رو دانلود کنید.

خبر بد می تونه این باشه که زمان زیادی خواهد برد تا استفاده کننده های این مدل ها از وجود همچین مشکلی خبر دار شده و یا Firmware رو آپدیت کنند.

منبع

Standard
امنیت

استفاده اف بی آی از بدافزار علیه یک ایرانی

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

اف بی آی برای استفاده از این روش باید مجوز دادگاه رو داشته باشه که در دسامبر ۲۰۱۲ (یک سال پیش دقیقا)، قاضی این اجازه رو برای پیدا کردن فردی که خودش رو Mo معرفی کرده بود، داد.

پس از تیراندازی در سینمایی در کلرادو که منجر به کشته شدن ۱۲ نفر و دستگیری حمله کننده شد، “مو” تهدیدهای به بمبگذاری رو شروع کرد.  دو روز پس از اون اتفاق، فردی با کلانتری بخش تماس می گیره و درخواست می کنه فرد حمله کننده آزاد بشه.

تماس ها از طریق جیمیل و تلفن بوده. اف بی آی از گوگل برای شناسایی مظنون کمک گرفت و مشخص شد که تماس های تلفنی از طریق google voice انجام شده. همچنین او با استفاده از پراکسی، IP واقعیش رو مخفی نگهداشته.

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

شهریور ۱۳۹۱ که “مو” شروع کرد به استفاده از یاهو، اف بی آی درخواست اطلاعات شخصی رو برای یاهو ارسال کرد. اون زمان بود که مشخص شد فرد مظنون احتمالا مردی ۲۷ ساله به اسم محمد آریان فر ساکن تهرانه. همچنین عکسی به دست اومد که او رو در لباس نظامی نشون می داد.

آذر ۱۳۹۱ اف‌بی‌آی اجازه استفاده از بدافزار برای شناسایی محمد آریان فر رو دریافت کرد. یاهو از همکاری در ارسال بدافزار سرباز زد. به نظر می رسه که در این مرحله اف‌بی‌آی یک ایمیل فیسینگ به مضنون ارسال می کنه که یک بدافزار رو پیوست داشته.

بدافزار نتونسته که کار رو به درستی انجام بده و تنها یه سری IP دیگه برای اف‌بی‌آی ارسال شده که تایید کننده سکونت Mo در تهران بوده

 

منبع

Standard