نمیشه یکاری کرد پاورو که زدی اول رمز بخواد و هبچ کاری نکنه و به کاربر اجازه دسترسی به هیچ چیزی رو نده ؟
چرا میشه. ولی مشکل اینجاست که مادربردهای قدیمی، تنظیمات bios رو روی یه چیپ حافظه که با قطع برق اطلاعاتش رو از دست میده، ذخیره میکنند.
تنظیمات پیشفرض معمولا روی یه حافظه دائمی فلش قرار داره.
برای اینکه با قطع برق مادربرد، همه تنظیمات به حالت اول برنگرده، یه باتری کوچک روی مادربرد هست که برق موردنیاز اون حافظه رو تامین میکنه.
معمولا یه چیزی هم روی مادربرد هست که تاریخ و ساعت رو نگهداری کنه. انرژی اون چیز هم از این باتری تامین میشه.
هر کی بتونه برق کامپیوتر رو قطع کنه و باتری داخل مادربرد رو دربیاره، میتونه تنظیمات bios رو به حالت اول برگردونه و رمز رو کلا دور بزنه.
توی کامپیوترهای جدید، معمولا اونهایی که از uefi استفاده میکنند، تنظیمات uefi روی یه حافظه دائمی فلش ذخیره میشه که میتونه بدون برق، اطلاعات رو حدود 20 سال ذخیره داخل خودش داشته باشه.(بله، حافظههای فلش، اونجوری که فکر میکنید، دائمی نیستند)
با توجه به این شرایط، از نظر تئوری میشه کاری که گفتید رو انجام داد، ولی یه مشکلی هست.
اکثر مادربردهای uefi که برای کامپیوتر دسکتاپ ساخته میشن، با قطع برق مادربرد و خارج کردن باتری اونها، تنظیماتشون به حالت اول برمیگرده.
دلیلش اینه که خیلیها عادت کردند با انجام اینکار، تنظیمات uefi رو به حالت اول برگردونند. به خاطر همین پیادهسازی uefi اکثر تولیدکنندهها جوری هست که با قطع برق مادربرد و خارج کردن باتری، تنظیماتش به حالت اول برگرده.
حتی بعضی از مادربردها یه دکمه پشتشون دارند که با فشار دادنش، تنظیمات uefi به حالت اول برمیگرده.
مادربردهای لپتاپها معمولا اینجوری نیستند. (با فرض اینکه uefi باشند) و با قطع برق، تنظیماتشون به حالت اول بر نمیگرده.
مادربردهای رده سرور هم معمولا اینجوری نیستند.
بعضی از مادربردهای رده دسکتاپ که معمولا برای workstation ها استفاده میشن هم با قطع برق، تنظیماتشون به حالت اول برنمیگرده.
نفهمیدم چجوری میتونه بوت لودر خودشو جایگزین کنه ؟ یکم توضیح میدید ؟ مگه روی بایوس رمز باشه ، نباید ازش بگذره تا بتونه کاری انجام بده ؟
اول، من فرض کردن bios/uefi رمز نداره. دوم، همونطور که بالا دیدید، میشه رمز bios/uefi اکثر مادربردهای رده دسکتاپ رو دور زد. سوم، اصلا برای عوض کردن بوتلودر لازم نیست کامپیوتر هدف رو روشن کرد. کافیه فقط به حافظه ذخیرهسازی دسترسی وجود داشته باشه.
از اینجا به بعد فرض کردم جایی که کرنل و initramfs قرار داره، رمزنگاری شده هست و بوتلودر موقع فرایند بوت، اونجا رو باز میکنه. به عبارت دیگه، نمیشه کرنل و initramfs رو مستقیما تغییر داد.
اگه کامپیوتر توی حالت legacy یا همون bios بوت میشه، روند بوت اینجوری هست که firmware روی مادربرد، 446 بایت اول حافظهای که قراره بوت بشه رو اجرا میکنه. از اونجایی که این فضای زیادی نیست، معمولا بوتلودر طی دو مرحله اجرا میشه. مرحله اول توسط firmware مادربرد و مرحله دوم توسط مرحله اول اجرا میشه.
این بوتلودر مرحله اول نمیتونه رمزنگاری شده باشه چون در اینصورت، firmware روی مادربرد نمیتونه اون رو اجرا کنه. معمولا firmware های روی مادربردها نمیتونند چیزی رو رمزگشایی/رمزنگاری کنند.
یه کسی میتونه حافظه ذخیرهسازی رو جدا کنه و بوتلودر خودش رو جای بوتلودر مرحله اول بنویسه. (خیلی راحت با دستور dd) بعد اون بوتلودر میتونه یه بوتلودر دیگه رو برای مرحله دوم اجرا کنه.
این بوتلودر مرحله دوم توسط مهاجم، روی جایی از حافظه ذخیرهسازی قرار گرفته.
اینجوری مهاجم به بقیه مراحل بوت دسترسی داره و میتونه یه صفحه دریافت رمزعبور قلابی نمایش بده، رمزعبور رو بگیره و جایی ذخیره کنه و بقیه مراحل بوت رو انجام بده تا شما متوجه قلابی بودن اون صفحه نشید.
اگه کامپیوتر توی حالت uefi بوت میشه، فرایند بوت اینجوریه که firmware روی مادربرد، فایلهای EFI داخل EFI system partition رو اجرا میکنه. EFI system partition معمولا با فایلسیستم vfat یا همون fat32 فرمت میشه. معمولا هم رمزنگاری نشده هست.
به همین دلیل یه کسی میتونه بیاد و فایل EFI خودش رو جایگزین چیزی که هست کنه و بقیه مراحل رو مثل بالا انجام بده. یعنی یه صفحه دریافت رمزعبور قلابی نشون بده، رمز رو بگیره و یه جایی ذخیره کنه و بقیه مراحل بوت رو انجام بده تا کسی متوجه نشه یه جای کار میلنگه
توی حالتهای بالا فرض کردیم دسترسی مستقیم به کرنل و initramfs وجود نداره.
اگه جایی که initramfs و کرنل قرار دارند، رمزنگاری نشده باشه، کار برای مهاجم خیلی راحتتر هست. کافیه که مهاجم initramfs رو باز کنه و اون رو تغییر بده تا وقتی که رمز رو از کاربر دریافت کرد اون رو یه جایی ذخیره کنه.
مهاجم حتی میتونه initramfs و کرنل خودش رو به جای initramfs و کرنل شما قرار بده.
initramfs معمولا یه فایل cpio هست که فشرده شده. میشه راحت بازش کرد. معمولا initramfs اینجوریه که یه سری اسکریپت کارهای مربوط به بوت مثل سوار کردن فایلسیستمها، فعال کردن lvm، باز کردن فایلسیستمهای رمزنگاری شده، شروع init system اصلی و ... رو انجام میدن.
داخل initramfs معمولا یه libc، یه پوسته ساده مثل sh، بعضی ابزارهای coreutils و اینجور چیزها پیدا میشه.
از اونجایی که معمولا یه سری اسکریپت کارها رو انجام میدن، زیاد سخت نیست که اون اسکریپتها رو تغییر داد تا علاوه بر اینکه کارهای اصلی رو انجام میدن، رمز رو هم یه جایی ذخیره کنند تا بعدا بشه ازش استفاده کرد. معمولا اینکار راحتتر از نوشتن یا تغییر یه بوتلودر به زبان c هست.
حتی اگه مهاجم نتونه با تغییر initramfs به جایی برسه، میتونه initramfs خودش رو جایگرین کنه.
اگه در مورد initramfs اطلاعات بیشتری میخواهید، توی یه موضوع دیگه بپرسید.
با توجه به این چیزها، اگه مهاجم بتونه چندبار به کامپیوتر دسترسی فیزیکی پیدا کنه بدون اینکه شما بفهمید، میتونه کلید رمزنگاری رو بدست بیاره و توی یه فرصت مناسب، اطلاعات رمزنگاری شده رو بخونه.
با این فرض که کرنل و initramfs رو یه جای مجزا از روت قرار دارند و اونجا و همینطور روت با دوتا کلید مجزا رمزنگاری شدند، مهاجم حداقل ۳ بار لازمه دسترسی فیزیکی پیدا کنه.
بار اول بیاد و بوتلودر رو تعویض کنه تا رمزِ جایی که کرنل و initramfs قرار داره رو بدست بیاره، بار دوم بیاد و initramfs خودش رو جایگزین کنه و رمز فایلسیستم روت رو بدست بیاره و در نهایت برای بار سوم بیاد و اطلاعات فایلسیستم روت رو بخونه.
یه راه برای جلوگیری از این نوع حمله اینه که کرنل و initramfs رو روی یه فلش usb یا یه cd یا ... ذخیره کنید و هر وقت خواستید سیستم رو روشن کنید، اون چیز رو وصل کنید و بعد از اینکه مراحل بوت انجام شد اون چیز رو جدا کنید.
اینجوری مهاجم نمیتونه کرنل و initramfs رو تغییر بده چون اونها داخل یه حافظه، همراه شما هستند و مهاجم بهشون دسترسی نداره.
مشخصه اگه مهاجم بتونه به اون حافظه دسترسی پیدا کنه، میتونه کرنل و initramfs رو هم تغییر بده. میشه اون حافظه رو هم رمزنگاری کرد تا حتی اگه مهاجم به اون حافظه دسترسی پیدا کرد، کلیدش رو هم نیاز داشته باشه.
یه راه دیگه برای جلوگیری از این حمله اینه که firmware روی مادربرد، فقط فایلهای امضا شده رو اجرا کنه. این توی uefi پیاده شده و بهش میگن secure boot. البته معمولا به طور پیشفرض از کلیدها و امضاهای مایکروسافت استفاده میکنه که میشه خیلی راحت با یه بوتلودر امضا شده دورش زد.
توزیعهای مختلفی هم هستند که بوتلودر امضا شده دارند. مثل همین اوبونتو یا دبیان یا فدورا. با آرچ هم فکر کنم بشه.
راههای دیگه هم برای دور زدن secure boot هست، مثل تغییر firmware روی مادربرد.
احتمالا بعدا در مورد secure boot و بقیه حملات وقتی دسترسی فیزیکی هست یه چیزی میگم.
در نهایت اینجوریه که هر کسی بتونه دسترسی فیزیکی پیدا کنه، کارش برای دسترسی به سیستم راحتتره.
کلا سخت میشه جلوی اینها رو گرفت.
فقط امنیت ویندوز
با تغییر یه فایل (SAM) با ابزار های خیلی ساده میشه پسوردشو برداشت
اینجا هم فرق زیادی نداره. میشه با تغییر فایل shadow اینکار رو کرد.
کار زیاد سختی نیست. با تکزیع زنده کامپیوتر رو بوت میکنید، اگر هم نشد، حافظه ذخیرهسازی رو جدا میکنید، میزنید به کامپیوتر/لپتاپ خودتون.
فایلسیستم روت رو یه جا مثلا /mnt/ سوار میکنید و با chroot وارد میشید و با یه passwd رمز رو عوض میکنید. به همین سادگی
میشه وارد هم نشد و passwd رو با دستور chroot اجرا کرد تا توی فایل تاریخچه پوسته هم چیزی نوشته نشه.
اگه دیسک رمزنگاری نشده باشه، فرقی نداره وبندوز داشته باشید یا اوبونتو یا مک یا ...، در هر صورت میشه رمزش رو به راحتی عوض کرد.
پیدا کردن رمز ولی فرق داره. توی ویندوز نسبتا راحتتره (به دلیل عدم استفاده از salt و استفاده از الگوریتمهای هش ضعیف)، توی اوبونتو و اکثر توزیعها اگه رمز ساده نباشه، کار سختیه.
یک سوال چرا توی توزیع هایی که برای کاربر روت رمز نمیخوان یا نمیزاریم فکری برای دسترسی کاربر روت از منوی ریکاوری نمیشه ؟ با همین دسترسی سودو خودمون گند میزنیم به همه چی یکی بلد باشه راحت به کاربر روت بدون حتی وارد کردن رمز کاربر دسترسی داره
اگه حافظه ذخیرهسازی رمزنگاری نشده باشه، فرقی نمیکنه رمز بپرسه یا نه. یکی میتونه با یه توزیع زنده کامپیوتر رو بوت کنه و از طریق chroot به کارهاش رو انجام بده.
اگه هم نشد توزیع زنده رو بوت کنه، راحت حافظه ذخیرهسازی رو میزنه به کامپیتور/لپتاپ خودش و کارش رو از اونجا انجام میده.
جناب دراگون ، دست کم نحوه رمزنگاری دیسک رو توضیح بدید که هر کسی فقط با یه usb شامل یه توزیع زنده ، نتونه به دیسک دسترسی پیدا کنه : )
به طور خلاصه: کارهای رمزنگاری با دستور cryptsetup انجام میشه.
این صفحه از ویکی آرچ و لینکهای اون توضیحات خیلی خوبی داده.
این صفحه هم توضیحات خوبی داره.