امنیت

امنیت در خرید تلفنی و گواهینامه SSL

اکثر گوشی های هوشمند جدید در مرورگر اینترنتی خود امکان تایید SSL را دارند و در صورتیکه مشکلی در گواهینامه امنیتی وجود داشته باشه، به کاربر اخطار می دهند. برای مثال مرورگر های اندروید در بررسی SSL بسیار سختگیرند.

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

amazon

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

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

با مرورگر، اتصال یا امنه و یا نیست و توسعه دهنده کار زیادی نباید انجام بده. کافیه که مطمئن بشه گواهینامه معتبر در مسیر درستی در سرور قرار گرفته. وقتی بحث اتصال امن مطرح می شه، هرچه “creative license” کمتری برای توسعه دهنده درنظر گرفته بشه، بهتره.

تنها راهی که من میتونم مطمئن بشم اپلیکیشن از SSL استفاده می کنه اینه که اون رو با واسطه پروکسی فعال کنم، چیزی شبیه  MITM Proxy و آدرس هایی که اطلاعات بهشون ارسال می شه رو به دست بیارم و در نهایت با openssl این آدرس رو چک کنم تا گواهینامه رو نشون بده و اعتبار سنجی کنه.

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

ترجمه آزادی از تریپ‌وایر

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

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

در پست دیگه ای، به حمله تزریق کد پرداخته بودم. حالا یک کارشناس آلمانی تونسته حفره امنیتی در ای‌بی پیدا بکنه. دیوید ویرا کورتز سال پیش نیز یک ضعف امنیتی که منجر به تزریق 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
برنامه‌نویسی

کتاب های رایگان پایتون

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

این زبان برنامه نویسی سال ۱۹۹۱ طراحی شد و به سرعت جا پای خودش رو باز کرد. معمولا در لیست های ارائه شده جزو ۱۰ زبان برنامه نویسی پرطرفدار قرار داره.

portada-python

یه سری از برنامه های پر استفاده من هم با پایتون نوشته شدند مثل SQLmap و BitTorrent.

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

خوبه که محیط ویرایشگری که برای برنامه نویسی پایتون استفاده می کنم هم اینجا معرفی کنم. در برنامه های کوچیک و در محیط لینوکس از ادیتورهای معمولی مثل Gedit استفاده می کنم. در شرکت هم به دلیل محدودیت در نصب نرم افزار، از بسته Portable Python استفاده می کنم که شامل مفسر پایتون، کتابخوانه های پرکاربرد و ویرایشگر کد است.

pyscripter_screenshot1

پانوشت: اگر لینک های دیگه ای سراغ دارید، کامنت بذارید یا ایمل کنید تا به لیست اضافه کنم.

Standard