ماشین عجیب کیست؟ توضیح بده.
در امنیت رایانه‌ای، ماشین عجیب (به انگلیسی: "Weird Machine") یک ساختار محاسباتی است که در آن امکان اجرای کد اضافی خارج از مشخصات اصلی برنامه وجود دارد. این مفهوم ارتباط نزدیکی با "دستورهای عجیب" ("weird instructions") دارد که بلوک‌های سازندهٔ یک اکسپلویت بر پایهٔ داده‌های ورودی دست‌کاری‌شده هستند.مفهوم ماشین عجیب یک چارچوب نظری برای درک وجود اکسپلویت‌ها در آسیب‌پذیری‌های امنیتی فراهم می‌کند. اکسپلویت‌ها به‌صورت تجربی وجود داشته‌اند، اما پیش از ظهور این چارچوب، از دیدگاه نظری مورد بررسی قرار نگرفته بودند.نظریه.ماشین‌های عجیب به‌دلیل پیچیدگی‌های موجود در مدل محاسباتی و عوامل خارجی نسبت به مدل مورد نظرِ محاسبه پدید می‌آیند. برای نمونه، یک ماشین عجیب ممکن است به این دلیل وجود داشته باشد که قالب ورودی تورینگ-کامل است، یا به‌دلیل آسیب‌پذیری‌های خرابی حافظه در برنامه، یا این‌که سخت‌افزاری که برنامه روی آن اجرا می‌شود رفتاری متفاوت از آنچه مدل محاسباتی پیش‌بینی کرده، نشان دهد.از دیدگاه نظری، ظهور ماشین‌های عجیب زمانی بهتر درک می‌شود که نرم‌افزار به‌عنوان ابزاری برای "محدود کردن" تعداد حالات قابل دسترسی و گذارهای حالت یک رایانه در نظر گرفته شود: واحد پردازش مرکزی همه‌منظوره (CPU) از طریق نرم‌افزار به‌گونه‌ای تخصصی‌سازی می‌شود که یک ماشین با حالت محدود (هرچند با فضای حالتی بسیار بزرگ) را شبیه‌سازی کند. بسیاری از حالت‌هایی که CPU می‌تواند در آن‌ها قرار گیرد حذف می‌شوند، و برخی گذارهای حالت نیز کنار گذاشته می‌شوند – برای مثال، گذارهایی که با الزامات امنیتی نرم‌افزار ناسازگارند. هنگامی‌که سامانه به‌نحوی به حالتی وارد شود که از دیدگاه ماشین با حالت محدود بی‌معنا است (مثلاً از طریق خرابی حافظه، نقص سخت‌افزاری یا خطاهای برنامه‌نویسی دیگر)، نرم‌افزار همچنان این حالت شکسته را به حالت‌های شکستهٔ دیگری تبدیل می‌کند که با ورودی‌های بیشتر کاربر تحریک می‌شوند. در این حالت، یک ابزار محاسباتی جدید شکل می‌گیرد: ماشین عجیب، که می‌تواند به حالت‌هایی از CPU برسد که برنامه‌نویس هرگز انتظارش را نداشته و این کار را در واکنش به ورودی‌هایی انجام می‌دهد که توسط مهاجم کنترل می‌شوند.کاربردها.عملکرد ماشین عجیب از طریق ورودی‌های غیرمنتظره فعال می‌شود.در حالی‌که ورودی معتبر و مورد انتظار باعث فعال شدن عملکرد عادی و مورد نظر در یک برنامه رایانه‌ای می‌شود، ورودی‌ای که برای توسعه‌دهندهٔ برنامه غیرمنتظره باشد، ممکن است باعث فعال شدن عملکرد ناخواسته گردد. ماشین عجیب از همین عملکرد ناخواسته تشکیل شده که می‌توان آن را از طریق ورودی‌های خاص، در قالب یک اکسپلویت برنامه‌ریزی کرد.در یک حملهٔ کلاسیک که از سرریز بافر پشته بهره می‌برد، ورودیِ داده‌شده به یک برنامهٔ آسیب‌پذیر به‌گونه‌ای طراحی و ارسال می‌شود که خودش به‌عنوان کد منبع اجرا شود. با این حال، اگر نواحی داده‌ای حافظهٔ برنامه محافظت شده باشند به‌طوری‌که مستقیماً حفاظت از فضای آدرس اجرایی نباشند، ورودی ممکن است به‌جای آن، به‌شکل اشاره‌گرهایی به قطعاتی از کد برنامهٔ موجود ظاهر شود که سپس به‌شکلی غیرمنتظره اجرا شده و عملکرد مورد نظر اکسپلویت را تولید کنند. این قطعات کد که توسط اکسپلویت استفاده می‌شوند، در زمینهٔ برنامه‌نویسی بازگشت محور (return-oriented programming) با عنوان گجت شناخته می‌شوند.از طریق تفسیر داده به‌عنوان کد، عملکرد ماشین عجیب — که طبق تعریف، خارج از مشخصات اصلی برنامه است — همچنین می‌تواند با استفاده از کد حمل اثبات (PCC) به‌دست آید؛ روشی که به‌طور رسمی ثابت شده که در شرایط خاصی قابل اجرا است. این تفاوت عمدتاً ناشی از شکاف میان مدل‌سازی انتزاعی رسمی یک برنامه رایانه‌ای و نمونهٔ واقعی آن در جهان بیرونی است؛ حالتی که می‌تواند تحت تأثیر عواملی قرار گیرد که در مدل اولیه در نظر گرفته نشده‌اند، مانند خطاهای حافظه یا قطع برق.رفتارهای ماشین عجیب حتی در سخت‌افزار نیز مشاهده شده‌اند. برای مثال، نشان داده شده که می‌توان تنها با استفاده از دستورهای MOV در x86 عملیات محاسباتی انجام داد.کاهش اثر.دو دستهٔ اصلی از روش‌های کاهش مشکلات ناشی از عملکرد ماشین عجیب شامل اعتبارسنجی ورودی درون نرم‌افزار و محافظت در برابر مشکلات ناشی از بستری است که برنامه روی آن اجرا می‌شود، مانند خطاهای حافظه.اعتبارسنجی ورودی با هدف محدود کردن دامنه و نوع ورودی‌های غیرمنتظره انجام می‌شود؛ برای نمونه از طریق فهرست سفید ورودی‌های مجاز، تا نرم‌افزار در هنگام تفسیر داخلی داده‌ها به وضعیت غیرمنتظره دچار نشود.به‌همین ترتیب، به‌کارگیری شیوه‌های برنامه‌نویسی ایمن مانند محافظت در برابر سرریز بافر احتمال تفسیر نادرست داده‌های ورودی توسط لایه‌های پایین‌تر (مانند سخت‌افزاری که برنامه روی آن اجرا می‌شود) را کاهش می‌دهد.