همه ما به عنوان کارشناسان امنیت نوشتن سرریز بافر به صورت درست و مناسب را میپسندیم. سرریز بافر وقتی است که دادههای مازاد حافظهای را بازنویسی میکنند که ممکن است حاوی دادههای دیگر از جمله متغیرها، دستورالعملها و کنترل جریان برنامه باشند. ممکن است این شرایط منجر به ایجاد رفتارهایی ناخواسته شود که باعث خاتمه برنامه یا ایجاد خطا میگردد… یا از نظر امنیتی رخنهای ایجاد کند که باعث اجرای کد روی سرور ریموت میشوند. اما وقوع چنین شرایطی چطور روی مغز انسان ممکن است؟ آیا ممکن است ما مغز انسان را به سرریز بافر برسانیم تا اطلاعات دلخواه خودمان را به دست بیاوریم؟
استفاده از این تکنیک همچنین می تواند برای شما تهدیدی در زمینه مهندسی اجتماعی باشد.
یک آزمایش ساده
اجازه دهید یک خط مبنای ساده برای این بحث ایجاد کنیم. سعی کنید در عکس زیر رنگ کلمه را بخوانید نه آنچه که با خود حروف کلمه نوشتهاند. این کار را با حداکثر سرعت ممکن انجام دهید و در هنگام فکر کردن مکث نکنید. هر چند چنین ویژگی وحشتناک نیست اما نشان میدهد که تزریق یک فکر چقدر آسان است … اگر میتوانید سعی کنید این کار را با سرعت هر چه بیشتر انجام دهید.
اما چرا انجام این کار اینقدر سخت است؟ درواقع ذهن انسان به همین صورت برنامهریزی شده است. مغز ما رنگ را میبیند اما اول به املای کلمه واکنش نشان میدهد. بنابراین فکر ذهن ما متوجه خود کلمه است نه رنگ نوشته. این تمرین نشان میدهد که اجرای یک کد در ذهن انسان که ممکن است متفاوت با آنچه فکر میکند یا میبیند باشد، چقدر سخت است.
تنظیم قواعد زمینهای
ثابت شده که ما انسانها با سرعت 150 کلمه در دقیقه صحبت میکنیم اما با سرعت 500 الی 600 کلمه در دقیقه فکر میکنیم. این یعنی بیشتر افرادی که با آنها صحبت میکنیم میتوانند در ذهنشان به یک مکالمه دیگر پرش کنند. بنابراین به نظر میرسد که سرزیر کردن مغز از طریق صبحت کردن پرسرعت تقریباً غیرممکن است.
همچنین باید توجه کنیم که بیشتر مردم چگونه در زندگی خودشان تصمیمگیری میکنند. بیشتر تصمیمات ما ناخودآگاه گرفته میشوند. ما تصمیم میگیریم که چگونه از خانه تا محل کار رانندگی کنیم، چگونه قهوه بخریم، چگونه دندانهای خودمان را مسواک بزنیم، چه لباسی بپوشیم؛ بدون اینکه واقعاً درباره آنها فکر کنیم.
آیا تا بحال برای شما هم پیش آمده که کل مسیر را تا محل کار رانندگی کنید و وقتی به مقصد میرسید نتوانید به خاطر بیاورید که از چه بیلبوردهایی عبور کردید، کدام مسیر را انتخاب کردید یا اخبار درباره کدام حادثه ترافیکی صحبت میکرد؟ شما در حالت ذهنی قرار داشتید که در آن ضمیر ناخودآگاه غلبه میکند و بدون اینکه شما به صورت آگاهانه درباره همه چیز تصمیم بگیرید، کاری که شما همیشه انجام میدادید را انجام داده است.
بیشتر تصمیماتی که ما میگیریم به همین صورت هستند. برخی دانشمندان حتی باور دارند که ذهن ناخودآگاه ما 7 ثانیه قبل از اینکه خود ما در دنیای واقعی تصمیمات را عملی کنیم، تصمیمگیری میکند.
وقتی در نهایت تصمیمگیری میکنیم، این تصمیمگیری فقط بر اساس آنچه میشنویم نیست بلکه ما از بینش، احساسات و همینطور عواطفمان برای تصمیمگیری استفاده میکنیم. درک نحوه کار و تفکر مغز انسان کمک میکند تا بتوانیم سریعترین راه ایجاد سرریز بافرمان را تشخیص دهیم.
فازینگ سیستم عامل انسان
درست مثل فازینگ در برنامهنویسی که در آن قطعات دادهای مختلف را به برنامه اعمال میکنیم تا اینکه در نهایت برنامه دچار کرش شود، باید نحوه واکنش نشان دادن مغز انسان به انواع دادهها را هم درک کنیم. قوانین خاصی در ذهن انسان وجود دارند که ذاتی به نظر میرسند و ما از آنها پیروی میکنیم.
اگر به ساختمانی با دو مجموعه در نزدیک شوید و در اول را برای یک فرد کاملاً غریبه باز نگه دارید، به نظر شما بعد از این کار وی چه اقدامی انجام میدهد؟ در بعدی را برای شما نگه میدارد یا مطمئن میشود که همان در اول برای شما باز میماند تا وقتی که وارد شوید؟ یا اگر در ترافیکی قرار دارید که جلوی شما دو خط ترافیک با هم ادغام میشوند و شما اجازه میدهید که یک غریبه از شما پیشی بگیرد و وارد این خط شود، به نظرتان ممکن است دفعه بعد اگر شما نیاز به انجام این کار داشته باشید وی اجازه این کار را به شما بدهد؟
قانون انتظارات – قانون انتظارات میگوید که یک شخص معمولاً مطابق با انتظار عمل میکند. معمولاً تصمیمات بر اساس آنچه شخص حس میکند درخواست کننده از وی انتظار دارد، گرفته میشوند. این یکی از روشهایی است که با استفاده از آن میتوانیم دادههای مخرب خودمان را به برنامه مغز ارسال کنیم … فرض قبلی (یا پیش انگاری).
فازینگ (انگلیسی: Fuzzing) یا آزمون فاز یک فرایند آزمون نرمافزار است که شامل فراهم کردن دادههای ناصحیح، غیرمنتظره، اعداد تصادفی بهعنوان ورودی به یک نرمافزار رایانهای است. برنامه معمولاً برای رخدادهایی از جمله کرش، شکست Assertionهای داخلی یا برای یافتن نشتهای حافظه احتمالی استفاده میشود. به طور معمول، فازرها جایی استفاده میشوند که برنامه ورودی ساختاریافته دریافت میکند.
فرض قبلی را میتوان با استفاده از یک مثال بهتر تشریح کرد “همسایه من رالف همیشه با یک خودروی فورد سبز رانندگی میکند.” ما در این جمله فرض کردیم:
- من همسایهام را میشناسم.
- اسم او محمد است.
- او گواهینامه رانندگی دارد.
- او با یک خودروی سبز رانندگی میکند.
برای استفاده کارآمد از پیش انگاری میتوانید یک سوال را با استفاده از کلمات، زبان بدن و حالت چهره به گونهای بیان کنید که نشان دهد آنچه درخواست میکنید از قبل پذیرفته شده است. خلاصه این شرایط، عبور از دیوار آتشین (ذهن خودآگاه) و دسترسی مستقیم به ریشه سیستم (ناخودآگاه) است. سریعترین راه تزریق کد خودتان، استفاده از فرمانهای تعبیه شده است.
قوانین فرمانهای تعبیه شده
برای کار کردن فرمانهای تعبیه شده باید از چند اصل پیروی کرد:
- معمولاً این فرمانها کوتاه – در حد 3 الی 4 کلمه – هستند.
- برای کارآمد شدن آنها نیاز به کمی تایید وجود دارد.
- کارآمدترین روش استفاده از آنها مخفی کردنشان در جملههای معمولی است.
- زبان بدن و حالت چهره باید از فرمانها پشتیبانی کنند.
فرمانهای تعبیه شده در بازاریابی بسیار کارآمد هستند و فرامینی مثل “همین حالا خرید کنید”، “همین حالا اقدام کنید” و “ما را دنبال کنید” جزء موارد پرکاربرد هستند. برای اینکه فرمانهای مسیر خودشان را طی کنند نیاز به اضافه کردن یکسری کدهای خاص داریم.
برای انجام این کار میتوانیم از یکسری عبارات استفاده کنیم. عباراتی مثل “وقتی که …”، “وقتی … چه حسی پیدا میکنید”، “یک آدم میتواند” و غیره – همه اینها احساس یا فکری را به وجود میآورند که به تزریق کردن کد در ضمیر ناخودآگاه کمک میکنند.
اجازه دهید از یک مثال استفاده کنیم. اگر قرار بود یک حراجی راه بیندازید و از فرمانهای تعبیه شده برای آن استفاده کنید میتوانستید چنین جملهای را به کار ببندید: “وقتی محصولی شبیه این را از کسی مثل من خریداری میکنید، چه ویژگیهای برای شما بیشترین اهمیت را دارند؟”
کلمات پررنگ قسمتهایی هستند که تاکید روی آنها صورت میگیرد اما این جمله باعث میشود که فرد از حافظهاش استفاده کند و به وقتی که در گذشته چنین محصولی را خریداری کرده فکر کند و اینکه آن موقع چه مواردی واقعاً اهمیت داشتهاند و همچنان که این فکر کردن انجام میشود شما این کد را تزریق میکنید “وقتی از من خریداری میکنید”.
نباید در لحن بیان دچار اشتباه شوید زیرا اگر روی برخی کلمات بیش از حد تاکید کنیم، صحبت ما عجیب به نظر میرسد و شخص به جای دریافت فرمان از ما ترس پیدا میکند. درست مثل سرریز بافر معمولی، اطلاعات ما باید با فرمانی که به دنبال سرریز آن هستیم، منطبق باشند.
جمعبندی
همانطور که احتمالاً شما هم متوجه شدید، این بحث یک حوزه گسترده است که جای زیادی برای آشفتگی و به هم ریختگی در آن وجود دارد. برای موفقیت در این کار نیاز به تمرین زیادی دارید. هر چند استفاده از این اطلاعات را برای فریفتن دیگران تبلیغ نمیکنیم اما ویدیوهای خوبی در اینترنت وجود دارند که نحوه استفاده و عملکرد فرمانهای تعبیه شده را آموزش میدهند.
قصد ما این نیست که از این تکنیکها یک تصویر جادویی در ذهن شما ایجاد کنیم. صرفاً اینکه به فردی بگویید “تو از من خرید خواهی کرد” به این معنا نیست که همیشه این خرید انجام میشود. اما چرا از این فرمانها استفاده میکنیم؟ این فرمانها بستری ایجاد میکنند که باعث آسانتر شدن مهندسی اجتماعی میشود.همچنین این اطلاعات درس خوبی به کمپانیها میتواند تا متوجه شوند که چگونه میتوانند تشخیص دهند که فردی قصد دارد از این اطلاعات بر علیه آنها استفاده کند.
حالا اجازه دهید این معادله را سادهتر بنویسیم:
shellcode +=Law_of_Expectations
shellcode +=Mental_Padding
shellcode +=Embedded_Codes
Shell Code یک تکه کد میباشد که در اکسپلویت کردن برنامههای آسیبپذیر استفاده میشود.
کار را با عبارات، زبان بدن و صحبتهایی آغاز کنید که مبتنی بر فرضیات هستند. فرض کنید چیزهایی که درخواست میکنید به اندازهای خوب هستند که از قبل دستیابی به آنها تضمین شده است.
بعد از آن ذهن انسان را با جملاتی همراه کنید که تعبیه کد را آسانتر کنند و همان زمان کد را تعبیه کنید. در واقع این دستورالعملی برای سرریز بافر انسان است. به ندرت از آن استفاده کنید اما قبل از استفاده آن را زیاد تمرین کنید. این روش را در خانه یا محل کار تمرین کنید. از تمرینهای ساده شروع کنید مثلاً سعی کنید که همکارتان را متقاعد کنید تا برای شما قهوه سرو کند. “تام، میبینم که به طرف آشپزخانه حرکت میکنی، میشه لطفاً برای من یک فنجان قهوه بیاری؟”
سعی کنید این کار را گسترش دهید تا ببینید چقدر پیش میروید. تلاش کنید از آن برای متعهد کردن افراد استفاده کنید. در نهایت از این روش استفاده کنید تا مشخص کنید که چقدر اطلاعات میتوانید دریافت کنید و چه تعداد فرمان میتوانید تزریق کنید. لطفاً تجربیات خودتان را با ما در میان بگذارید.