امنیت

فاجعه ادوب

زمانی که ادوب اعلام کرد پسوردهای رمز شده لو رفته اند سوال پیش اومد که این پسوردها رمز شده بودند یا هش؟

اصطلاح رمز شده یا Encrypted زمانی استفاده می شه که امکان Decrypt هم باشه، ینی ادوب بتونه پسورد شما رو به صورت واضح بخونه در حالیکه روش امنی که باید برای نگهداری پسوردها استفاده بشه هش Hash کردنه که یک طرفه است و از نتیجه هش نمی شه به پسورد اصلی رسید. برای بالا بردن امنیت پسوردهای ذخیره شذه از salt هم استفاده می شه که یک رشته از کراکترهای تصادفیه که پیش از هش شدن به پسورد اضافه می شه. استفاده از salt باعث می شه که اگر دو کاربر از پسورد مشابهی استفاده کرده باشند، نتیجه هش شده برای اونها متفاوت می شه و درنتیجه در صورت دسترسی هکر به دیتابیس، پیداکردن پسورد مشکلتر می شه.

بذارید یه نگاهی به دیتابیس ادوب و پسوردهای کاربرها بندازیم. این بررسی بر روی ۱ میلیون ردیف اطلاعات انجام شده. این مجموعه به صورت خطی جدا شده: ضرایب ۱۰. لیست انتخابی یه چیزی شبیه تصویر زیر می شه.

abr-dump-500

و در تصویر زیر می بینید که اطلاعات هر ستون مربوط به چه فیلدی است.

abr-dump-annotated-500

این فیلدها برای بررسی ما غیر ضروری بود و حذف شدند: user ID, email addresses, username

فقط ستون های پسورد و یادآوری باقی موندن. همچنین پسوردها نیز با روش base64 رمزگشایی شدن و به نسخه هگزادسیمال تبدیل شدند. با این تبدیل طول پسوردها واضح تر شد:

abr-dump-reworked-500

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

abr-pwd-lengths-graph-500

سوال بعدی اینه که حالا که پسوردها هش نشدن پس از چه روش رمزگذاری (Encryption) استفاده شده؟ روش هایی مثل RC4 یا Salsa-20 رو کنار بذاریم چون نتیجه رمزگذاری در این دو روش با طول پسوردها برابر می شه. در حالیکه در تصویر بالا می بینیم که پراکندگی طول پسوردهای رمز شده مخالف اینه.

Stream cipher که به طور معمول در پروتوکول های شبکه استفاده می شه به ما اجازه می ده که هر بار یک بایت از اطلاعات رو رمز کنیم بدون اینکه مجبور باشیم ورودی را به تعداد مشخصی بایت بلوک بندی کنیم.

با توجه به اینکه رمزها ضریبی از ۸ است مشخصا دنبال روش رمز گذاری می ریم که بلوک های ۸ بایتی (۶۴ بیت) رو رمز گذاری می کنه. در نتیجه به نظر میاد که با یک روش رمزگذاری DES (Data Encryption Standard) و یا نسخه مدرن ترش  ۳DES طرفیم. (این احتمالات رو کنار گذاشتیم: سایر روش های ۶۴ بیتی که یه زمانی استفاده می شدند و یا شیوه جدیدی ساخته خود ادوب)

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

سوال بعدی اینه که از چه مدی برای رمزگذاری (encryption mode) استفاده شده.

ابتدایی ترین مدی که برای رمزگذاری استفاده می شه “مد رمز گذاری بلوکی خام”ه که با اسم Electronic Code Book (ECB) شناخته می شه. در این حالت الگوهای متن اولیه در متن رمزگذاری شده قابل شناساییه. در مدهای دیگه این ضعف وجود نداره و الگوها رو غیر قابل شناسایی می کنند.

یکی از دلایلی که از ECB استفاده نمی شه اینه که نتیجه رمز گذاری یک پسورد ثابت با یک کلید ثابت و با این مد، نتیجه یکسانی رو به همراه داره. بذارید یه نمونه تصویری از این مشکل رو ببینیم.

فرض کنیم تصویر کلمه sophos رو با ترکیب رنگ RGB داشته باشیم (که هر پیکسل ۳ بایت داره) و اون رو به بلوک های ۸ بایتی تقسیم کنیم و با روش DES و مد ECB اون رو رمزگذاری کنیم. حال با فایل به دست اومده به عنوان یک تصویر RGB برخورد کنیم و اون رو نگاه کنیم، نتیجه زیر حاصل می شه

abr-sophos-ecb-500

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

اگر ادوب از این روش استفاده می کرد می بایست در کوتاه ترین پسورد شاهد ۱۶ بایت می بودیم. ۸ بایت برای nonce و ۸ بایت برای پسورد رمزگذاری شده. با توجه به اینکه ما رمزهای ۸ بایتی رو در جدول می بینیم پس از این شیوه استفاده نشده.

حتی اگر فرض کنیم از عدد دیگه ای مثل userid به عنوان nonce استفاده شده باشه، نباید شاهد رمزهای تکراری در دیتابیس باشیم چرا که احتمال تکرار یک رمز با بلوک های ۶۴ بیتی ۱ در ۲ به توان ۶۴ است (حدود ۲۰ میلیون میلیون میلیون). ما با ۱ میلیون داده طرفیم و این ینی هیچ رمز تکراری در این یک میلیون نباید باشه.

abr-block-repeats-500

تا اینجا فهمیدیم که ادوب از یک روش برگشت پذیر در رمزگذاری پسوردها استفاده کرده. همچنین از ساده ترین مد که منجر می شه به تکرار نتیجه رمزگذاری در صورت مشابه بودن پسوردها.

بازیابی پسورد

بذارید یه سوال دیگه بپرسیم. پسوردی که رمزگذاری شده اش ۱۱۰edf2294fb8bf4 است و در مجموعه انتخابی ۱.۶ درصد پسوردها رو شامل می شه، چیه؟

بهتره نگاهی به اتفاقات مشابه و آمار هک های دیگه بندازیم و از اون برای تحلیل این داده ها استفاده بکنیم. ۳ سال پیش که Gawker Media هک شد، لیست بیشترین پسوردهای استفاده شده مطابق تصویر زیر بود.

abr-gawker-breach-500

به غیر از کلمه lifehack که یکی از برندهای اون سایت بود، بقیه پسوردهای استفاده شده از کلماتی انتخاب شده که راحت به یاد می مونه و تایپ می شه. با دیدی که از این لیست داریم و نگاهی به ستون یادآوری پسورد می تونیم ۵ پسورد پرکاربرد در داده های لو رفته ادوب رو به دست بیاریم:

abr-top-5-adobe-5001

دقت کنید که پسوردهای ۸ کاراکتری ۱۲۳۴۵۶۷۸ و password در دو بلوک ذخیره شده اند که نشون میده متن رمز شده حداقل ۹ کاراکتر داشته. به احتمال بسیار زیاد روند این شکلیه که پسورد به اضافه یک بایت صفر(ASCII NUL)  می شه که نشون دهنده انتهای رشته در زبان C است و با اضافه شدن ۷ بایت NUL، متن تبدیل به ضریبی از بلوک های ۸ بایتی می شه. بنابراین می تونیم به این نتیجه برسیم که e2a311ba09ab4707 در بلوک دوم، نشون دهنده ۸ بایت صفرِ رمز شده است.

اگر پیش فرض های ما و نتایجی که بهش رسیدیم درست باشه و با توجه به اینکه بلوک e2a311ba09ab4707 در ۲۷ درصد از پسوردهای رمز شده تکرار شده، می تونیم بگیم که ۲۷ درصد پسوردهای کاربران ادوب دقیقا ۸ کاراکتر داره.

می بینید که با کمی تلاش تونستیم ۵ پسورد پرکاربرد ادوب رو به دست بیاریم که پسورد حدود ۲.۷۵ درصد کاربرها بوده و همچنین تونستیم بفهمیم که ۱/۳ پسوردهای کاربران دقیقا ۸ کاراکتر داره. می تونیم تصور کنیم که چه مقدار دیگه اطلاعات می شه از این “بزرگترین جدول کلمات متقاطع تاریخ” به دست آورد.

abr-xkcd-1286-500

منبع

Standard
امنیت

حمله گسترده به سایت های وردپرس

در هفته گذشته از دوتا IP در چین تلاش هایی بود برای حدس زدن پسورد وبلاگم. این IP ها بلاک شدن. اینجا هم میذارم که شما هم پیش دستی کنید و بلاکشون کنید.

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

اوایل امثال بود که سرویس دهنده ixwebhosting اعلام کرد سایت های وردپرسی که روی سرورهای این سرویس دهنده اند تحت حملات Brute Force (حدس زدن پسورد) قرار گرفته اند.
طبق اطلاعات اعلام شده این سرویس دهنده و بررسی هایی که آن زمان انجام شد مشخص گشت که هکرها با استفاده از سرورهایی که پیشتر هک کرده بودند و به کاربردن یک ربات، این حملات گسترده را علیه میلیون ها سایت تدارک دیده اند. در این حمله بیش از ۹۰ هزار سرور هک شده شرکت داشتند. به دلیل تعدد IP ها دفاع کمی سخت شد.
یکی از روش هایی که من در وبلاگم به کاربردم برای جلوگیری از بروت فورس، استفاده از پلاگین هایی نظیر better-wp-security برای محدود کردن تعداد دفعاتیست که هر IP می تونه پسورد اشتباه برای لاگین امتحان کنه. وقتی هکر ۱۰۰ هزار IP داشته باشه عملا این دفاع رو از کار میندازه. و نکته منفی هم اینجاست که وقتی سایت ها رو هک می کنه، ابزارش گسترده تر می شه و می تونه سرعت حملات رو بالاتر ببره.
در این حمله که گفتم، تعداد دفعات بروت فورس در شروع حملات ۳۰ تا ۴۰ هزار بار در روز بوده که پس از مدتی این تعداد به طور ناگهانی به ۱۰۰ هزارتا می رسه.

Thousands of WordPress Websites compromised to perform DDOS attack as WordPress Botnet

هم اکنون نیز یک حمله گسترده علیه وب سایت های وردپرسی در جریانه. مطابق اطلاعات جمع آوری شده از IP هایی که در این حملات شرکت کرده اند، هکر ها از تعداد بسیار زیادی سایت های وردپرسی هک شده استفاده می کنند.
آنالیز این اطلاعات نشون می ده که هکر می تونه طی ۲۶ ثانیه از ۵۶۹ سایت هک شده به هدف حمله کنه، سایت هایی نظیر:

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

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

من برای راحتی کار شما، لیستی از این IP ها آماده کردم که بتونید تا پایان یافتن حمله جاری اونها رو بلاک کنید.

طبق آماری که به تازگی ارائه شده از مجموع ۴۲۱۰۶ وب سایت وردپرسی که در جمع یک میلیون وبسایت برتر آلکسا قراردارند، ۳۰۸۲۳ وب سایت معادل ۷۳.۲% از نسخه های قدیمی وردپرس استفاده می کنند که ضعف های امنیتی شناخته شده دارند و به راحتی توسط ابزار های رایگان قابل شناسایی اند.

لیستی از نسخه های پرکاربرد

لیستی از نسخه های پرکاربرد

حدود ۲ در صد از این سایت ها همچنان از نسخه های پایه ۲ استفاده می کنند.

اگر وبسایتی با استفاده از وردپرس دارید این موارد را رعایت کنید:

وردپرس را به آخرین نسخه به روز کنید
تمامی پلاگین ها و تم ها را به روز کنید
از نام کاربری غیر از admin استفاده کنید
پسورد خود را تغییر داده و از پسوردی با حداقل ۸ کاراکتر شامل حروف کوچک و بزرگ، اعداد و کاراکترهای خاص مثل^%$#&@* استفاده کنید
آدرس صفحه لاگین را تغییر دهید

منبع ، منبع و منبع

Standard
امنیت

ضربان قلب جایگزین پسورد

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

ضربان قلب به جای پسورد

ضربان قلب به جای پسورد

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

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

در بحث امنیت این شرکت ادعا کرده که:

  • قلب و ریتم قلب چون داخل بدن کاربره از موراد دیگه مثل اثر انگشت امنتره و قابل دزدیدن نیست.
  • برای شناسایی شدن کاربر باید هم دستبند رو داشته باشه و هم ریتم قلب خودش رو و هم دسترسی به تلفن هوشمند با نرم افزار مربوطه (و یا هر ابزار دیگه ای که قراره استفاده بشه – توضیح از من)
  • استفاده از سخت افزار یکپارچه امنیتی، از اسکیم (skimming) و اسپوف (spoofing) دیجیتال جلوگیری می کند.

در نگاه اول به نظر می رسه که این شرکت با نگاه خوشبینانه سیستم رو شرح داده و در مورد امن بودنش با خیال راحت صحبت کرده.

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

گفته چون داشتن دستبند و گردنبند الزامیه پس سیستم امنه. اگر کسی خود فرد رو با دستبند و گردنبندش با هم داشته باشه چی؟ ینی دیگه نمی تونی به کاربر بگی باید پسورد رو بدی و اون هم بگه نمی دم 🙂

و خب می رسیم به اصل قضیه. ادعا کرده که دیتاهای ارسالی قابل شنود نیست. ولی با توجه به اینکه گردنبد بعد از سری اول که شناسایی رو انجام می ده با بلوتوث با دنیای اطراف در ارتباطه و اطلاعات رو می فرسته، به صورت تئوریک می شه در نظر گرفت با شبیه سازی یک دستگاه گیرنده، اطلاعات ارسالی رو دریافت کرد و با شناسایی پترن استفاده شده، به سمت شکستن سیستم رمز گذاری و یا کپی و باز ارسالی اطلاعات کرد. با توجه به جستجوهای من، این شرکت ادعا کرده که با شیوه خاص رمزگذاری elliptic curve cryptography از مانیتور کردن اطلاعات جلوگیری می کنه. اما هنوز سوالهای زیادی در این مورد وجود داره که باید تا زمان ارائه آزمایشی سیستم و اقدام عملی برای هک کردنش، منتظر پاسخشون موند.

Standard