اطلاعات سیستمی سایتتان را نمایش ندهید

دیروز تو توئیتر یه نفر یه لینکی گذاشته بود از سایت روزنامه کیهان با عنوان: سرنوشت حجاریان در انتظار خاتمی (و یا همچین چیزی) منم کنجکاو شدم روی لینک کلیک کردم و به پیغام خطای زیر رسیدم، البته من اطلاعات حساس روی خطا (نقاط سفید) رو حذف کردم که مشکلی پیش نیاد:

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

یکی از توصیه های مهم در ایمن سازی یه وبسایت اینه که تا جایی که ممکنه اطلاعات کمتری به هکرها بدین. مثلا در مورد همین سایت، تصور کنین که اگه یه هکر میخواست در حالت عادی وقت بذاره که این اطلاعات رو بدست بیاره، چقدر باید زمان صرف میکرد و از چه راههایی باید وارد میشد!

تکنیک تزریق خطا:
حالا مورد کیهان یک خطای عادی و اجتناب ناپذیره که البته کنترل نشده ولی در حالت کلی یکی از روشهایی که هکرها استفاده می کنن تا اطلاعات سیستمی یه وب سایت رو بدست بیارن روش تزریق خطا هست. تزریق خطا یعنی اینکه به عمد اطلاعاتی وارد سیستم کنی تا سیستم با خطا مواجهه بشه و بعد از اون رفتار سیستم رو زیر نظر بگیری تا اطلاعاتی رو که افشای اونها کنترل نشدن رو بدست بیاری.

چرا میگیم اطلاعات حساس؟
خوب چون مهم هستن. نام پایگاه داده به شما تو ترزیق دستورات SQL ای کمک میکنه. از اون مهمتر نام کاربری هست. با داشتن یک نام کاربری کافیه که حمله brute force رو بر علیه سیستم اجرا کنی. من قبلا درباره این حمله نوشتم (یک پسوورد پیچیده انتخاب کنید) تو این حمله اگه یکی از متغیرها رو داشته باشی مثلا نام کاربری، کلی تو زمان صرفه جویی میشه و سریعتر ممکنه به پسوورد هدف برسی.

راه حل چیه؟
توجه کنین که کنترل نکردن خطا یک حمله نیست ولی به هکر تو جمع آوری اطلاعات کمک میکنه. راه حلش ولی ساده است، کافیه همه پیغام های خطای تو سیستم (به خصوص پیغام خطاهای مربوط به پایگاه داده و کد) رو به اصطلاح catch کنی و اونها رو به یک صفحه دلخواه ریدایرکت کنی. این صفحه البته مهمه که یه صفحه ایستا باشه یعنی یک صفحه HTML معمولی. بهتره که توش هیچ اطلاعاتی در مورد نوع و علت خطا ندیم و فقط بگیم مثلا درخواست با مشکل مواجه شد و نظایر اون !:)

۱۵ نظر

  1. نیما ۱۳۸۷-۱۱-۲۷، ۹:۰۷ ب.ظ

    این طور مطالبت چقدر خوبن. به زبون ساده برای همه.

  2. حامد ۱۳۸۷-۱۱-۲۷، ۹:۱۳ ب.ظ

    اون اطلاعات حساسی که سفید کردید رو که توی فرندفید لو دادین!

    مسافر Reply:

    سلام.

    فکر کنم احتمالا برنامه نویس سایت کیهان هم یادش نبود. :)
    (یادش نبود try. catch بنویسه. )

  3. حامد «آسمان نقره ای» ۱۳۸۷-۱۱-۲۷، ۹:۴۵ ب.ظ

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

  4. مسافر ۱۳۸۷-۱۱-۲۷، ۹:۵۶ ب.ظ

    از هک کردن گفتین.

    یه خاطره جالب.

    توی امتحان ورودی یکی از دانشگاهها شرکت کرده بودم ( امتحان دکتری بصورت غیر متمرکز برگزار میشه و هر دانشگاه برای خودش جداگانه امتحان میگیره).

    هرساله فقط نمرات اونایی که توی مرحله کتبی قبول نشدن رو اعلام میکردن تا اگه کسی اعتراضی داره اقدام کنه و کارنامه اونایی که قبول شده بودن رو اعلام نمیکردن. اون سال یه سوتی دادن: برای چند ساعت اونایی که قبول شده بودن میتونستن کارنامه خودشونو ببینن. بعدش این امکان غیر فعال شد.

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

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

    سریع تو #C یک برنامه نوشتم. تا اون اعداد رو از پایین بشمره بره بالا و هر دفعه پیج رو ذخیره کنه، چه حالی داد. از شب تا صبح برنامه ران بود، نزدیک چند هزار کارنامه ذخیره شده بود. حالا پیدا کردن اونایی که رشته شون با من یکی بود، خودش یه پروژه دیگه بود.

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

    سابقه از این جور کارام کم نیست. مثل بدست آوردن حقوق ماهیانه همکارا از روی شبکه داخلی. البته هیچوقت سوءاستفاده نکردم وجدانا. فضولی مصلحتی عیبی نداره. :دی

    مسافر Reply:

    این یک مورد از اشتباههایی بود که برنامه نویس ناوارد اون سایت انجام داده بود. اشتباه به این تابلویی ندیده بودم قبلش. البته مثلا برای خودش username , password میخواست ولی اگه با یک username و password صحیح وارد میشدین به راحتی با عوض کردن اون اعداد، میتونستین به کارنامه دیگران دست پیدا کنین.
    درحالی که هر کسی که مجاز به دیدن یک کارنامه هست نباید برای دیدن کارنامه های دیگه مجاز باشه. این یک اشتباه بدیهی بوده.

    مسافر Reply:

    سلام.

    راست میگیا، اینطوریم میشه گفت. :)

    حالا از کجا اینقدر مطمئنی؟

    مسافر Reply:

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

  5. default ۱۳۸۷-۱۱-۲۸، ۱:۳۵ ق.ظ

    من که نفهمیدم!!!!

  6. آموزش وبلاگ نویسی ۱۳۸۷-۱۱-۲۸، ۷:۰۲ ق.ظ

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

  7. حضرت والا مامبوجامبو ۱۳۸۷-۱۱-۲۸، ۹:۱۵ ق.ظ

    البته حتی اگه برنامه نویس هم در حین توسعه برنامه جلوی چنین مواردی را نگرفته باید

    مدنظر قرار داد که تمام کنترل پنل های پیشرفته امروزی به سادگی امکان تنظیم صفحات

    خطا را می دهند و عجیب که کمتر این صفحات را تنظیم می کنند .

  8. حمید ۱۳۸۷-۱۱-۲۹، ۹:۴۸ ق.ظ

    سلام
    در اینجا تزریق SQL صورت نگرفته
    اگه به خطا دقت کنی متوجه میشی که دیتابیس crash کرده
    این قضیه بخاطر این هست که conCurrent Connection بانکش به حداکثر رسیده این قضیه جدا از مسائل نرم افزاری بیشتر به کمبود امکانات سخت افزاری و میزان حافظه Ram برمیگرده
    البته بهتر می بود که برای صفحاتشون یه CustomError در web.config تعریف میکردن تا اینطوری Stack Trace لو نمی رفت یا حداقل به قول خودت جاهای حساسی که احتمال خطا داره رو با بسط try/catch بپوشونن ;)

    در هر حال تحلیلت با اینکه در تشخیص عوامل خطا اشتباهاتی کرده بودی برام خیلی جالب و شیرین بود. اولین بار بود که دیدم یک دختر چنین بحث فنی ای میکنه

    پایدار باشی
    بدرود

    زهرا Reply:

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

  9. imei ۱۳۸۷-۱۱-۲۹، ۵:۱۰ ب.ظ

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

    یکی از دوستان هم نوشتن که کارنامه ی دوستان هم دانشگاهیشون رو با برنامه ای که نوشتن دانلود کردن… خب خبر خوب این که تقریبا هر سال میشه تمام عکسهای شرکت کنندگان کنکور در سایت سنجش رو دانلود کرد! تاسف آوره نه؟!

  10. پیام ۱۳۸۷-۱۲-۱، ۹:۳۱ ب.ظ

    وب خوبی داری
    امیدوارم موفق باشی