یکی از مشکلات امنیتی که در بعضی از نرم افزارها مشاهده می شود، سرریزی بافر یا buffer overflow است. سرریزی بافر عموما در زمان اجرا و بسته به ورودی های مختلف برنامه رخ می دهد و حتی می تواند به هکرها کمک کند تا برنامه را تغییر داده و کدهای مخرب در آن وارد کنند. در این مقاله قصد داریم این موضوع را بررسی کنیم و ببینیم سرریزی بافر چیست و چه زمانی اتفاق می افتد.
بافر چیست؟ بافر، حافظه موقتی است که به صورت نرم افزاری و سخت افزاری پیاده سازی می شود، در روش سخت افزاری مثل بافر کیبورد، اطلاعات کلیدهایی که شما روی صفحه کلید فشار داده اید در جایی ذخیره می شود و سیستم عامل آنها را می خواند و پردازش می کند. بافر نرم افزاری به دو صورت قابل پیاده سازی است. 1 در سطح سیستم عامل: سیستم عامل مقداری از حافظه را جهت بافرکردن به خود اختصاص می دهد. این حافظه برای یکسان سازی سرعت دیسک سخت و پردازشگر استفاده می شود. 2 در سطح نرم افزار کاربردی: این حافظه را ما به عنوان برنامه نویس تعریف می کنیم تا امور مختلفی را انجام دهیم. قطعه کد زیر را در نظر بگیرید: void overflow_function (char *str){ char buffer[10]; strcpy(buffer, str); } int main(){ char big_string[14]; strcpy(big_string,"bufferoverflow"); overflow_function(big_string); return 0; } از لحاظ قواعد گرامری این قطعه کد درست است و باید بدون اشکال کار کند اما در زمان اجرا، خطای در حال اجرا صادر خواهد شد با این مضمون: stack around the variable ‘buffer’ was corrupted بسیار خب، این خطا به ما می گوید که متغیر بافر خراب شده است. بیایید ببینیم این کد دقیقا چه کار می کند: ابتدا یک متغیر از نوع رشته به طول 14کاراکتر تعریف کرده و مقدار bufferoverflow را با استفاده از دستور strcpy در آن کپی می کنیم. تا اینجا مشکل خاصی نیست و کد درست است. حال مقدار big_string به تابع overflow_function پاس داده می شود. این تابع سعی دارد مقدار big_string که به آن داده شده است را درbuffer کپی کند اما این عمل ناموفق می ماند و در نتیجه برنامه خطا می دهد. چرا خطا می دهد؟ این تابع می خواهد مقدار 14کاراکتر را در یک رشته 10کاراکتری کپی کند، طبیعی است که این کار را نمی تواند درست انجام دهد، برای همین خطا صادر می شود. کمی دقیق تر به مساله نگاه می کنیم: وقتی تابع overflow_function فراخوانی می شود آدرس برگشت به تابع فراخواننده در ثبات sp قرار می گیرد. سپس این تابع سعی می کند مقدار 14کاراکتر را در 10کاراکتر کپی کند و این عمل با موفقیت انجام می شود. فرض کنید بافر در 10خانه اول بعد از آدرس 100h قرار داد و ثبات sp مقدار خانه 10dh را به عنوان آدرس برگشتی تابع overflow_function در خود دارد. حال مقدار 14کاراکتر در متغیر بافر، کپی می شود و در نتیجه خانه های 100h تا 10eh بازنویسی می شوند و سپس کار تابع به پایان می رسد و سیستم عامل قصد دارد با استفاده از آدرس ذخیره شده در sp به فراخواننده تابع overflow_function بر گردد اما از آن جایی که آدرس 10dh بازنویسی شده است، پردازشگر نمی تواند دستوری را اجرا کند و خطای bufferoverflow صادر می شود. خب، هکرها با استفاده از همین خطا به سیستم های دیگران حمله می کنند. آنها یکسری دستورات به زبان اسمبلی می نویسند که در اصطلاح به آنها shellcode یا exploit گفته می شود. به مثال بالا برمی گردیم، فرض کنید به جای مقدار “bufferoverflow” یک شل کد به تابع overflow_function داده شود. وقتی کار تابع تمام شد، پردازشگر به آدرس 10dh می رود. مقدار این آدرس دیگر یک مقدار نامعتبر نیست بلکه به یک قطعه کد اشاره دارد و پردازشگر، آن قطعه کد را اجرا می کند و سبب می شود برنامه اصلی، کار خودش را درست انجام ندهد . این یک روش برای سوءاستفاده از سرریزی است. روش دیگر دسترسی به بخش های محرمانه حافظه است که اطلاعات اساسی سیستم در آن قرار دارد. هکر با تزریق کد خود به برنامه می تواند به بخش های محرمانه حافظه دسترسی پیدا کند و اطلاعات حیاتی سیستم را مورد سو ءاستفاده قرار دهد.
چگونه جلوی سرریزی را بگیریم؟ تنها کاری که لازم است انجام دهیم، بررسی مقادیر ورودی برنامه است تا دقیقا مطابق با اندازه متغیر داده ها درون آن ریخته شوند. به طور مثال؛ کد بالا را با تغییر کوچکی اصلاح می کنیم و از سرریزی بافر جلوگیری می کنیم. کد بازنویسی شده به صورت زیر خواهد بود: void overflow_function (char *str){ char buffer[10]; strncpy(buffer, str,10); } int main(){ char big_string[14]; strncpy(big_string,"bufferoverflow",14); overflow_function(big_string); return 0; }
امیربهاالدین سبط الشیخ
... نوشتن برنامه های شیء گرا برای دانش آموزان و دانشجویانی که در دانشگاه و یا دبیرستان با برنامه نویسی ساخت یافته روبه رو می شوند، کمی مشکل است ... اما مفهوم شیء گرایی چیست؟ به طور خلاصه و فنی، برنامه نویسی شیء گرا همانند برنامه نویسی ساخت یافته از ساختمان های داده و توابع مرتبط با آنها تشکیل شده است که با فعالیت در کنار هم برنامه کاربردی را می سازند ... مشخص است که این مفهوم برای کسانی که با برنامه نویسی شیء گرا کار نکرده باشند، کاملا گنگ و پیچیده است، بنابراین مفاهیم اولیه شیء گرایی را به زبان ساده بیان می کنیم: کلاس کلاس ها در شیء گرایی همه چیز هستند و همه چیز در مفهوم کلاس خلاصه می شود، بنابراین بهتر است کلاس را خوب بشناسیم ... اگر داده ها به طور مناسب پنهان سازی شوند و برای هر تغییری در سیستم، از تابعی خاص و با دسترسی خاص استفاده شود، در این صورت با بزرگ شدن برنامه، زمان رفع ایراد آن بیشتر نمی شود و در صورتی که یک مورد منطقی در برنامه رخ داد، اصلا مجبور نیستید از خط اول تا خط آخر برنامه را بخوانید ...
... این افراد که اغلب آنها دانشجویان کامپیوتر هستند، جدا از دانش پایه ای از برنامه نویسی، عموما وب سایت های زیادی را دیده اند و نسبت به طراحی وب حساس شده اند ... به این ترتیب یک روز آستین ها را بالا می زنند و طراحی وب را آغاز می کنند، اما آنها در این زمینه با پر سش های زیر روبرو هستند: چه چیزی را باید مطالعه کرد؟ نوشتن یک برنامه مناسب برای کسب دانش در طول زندگی، می تواند فرصت و جایگاه خوبی برای شما در جامعه دست و پا کند ... » طراحان تازه کار و دانشجویان روی چه چیزی باید تمرکز کنند تا تخصص خود را بالا ببرند؟ علاقه مندان به طراحی وب باید در دانشگاه مسیر خود را انتخاب کنند این مسیر، مسیری است که در آینده شغلی آنها تاثیر مستقیم خواهد گذاشت، بویژه اگر می خواهند در آینده یک برنامه نویس آزاد باشند یا برای خود کار کنند ...
... 2 - microsoft bob البته این امکان وجود دارد که کیفیت پایین برنامه به اسم آن هم لطمه زده باشد، ولی کارشناسان بسیاری معتقدند عنوان «مایکروسافت باب» هم بچه گانه است و هم هیچ اطلاعاتی در مورد نرم افزار به ما نمی دهد ... ) نامی که باید انتخاب می شد؛ «مایکروسافت روور» حداقل نشانی از شخصیت واقعی برنامه می داد که سگی با همین نام بود ... وارد شد که شامل برنامه نویسی و سرویس های اینترنتی برای گوشی ها، کنسول های بازی، pocket pc و ... مایکروسافت هم به زودی این را فهمید و این بسته را تنها به زبان های برنامه نویسی محدود کرد ... 8 - playforsure این برنامه برای سیستم هایی که از windows media drm استفاده می کنند، طراحی شده بود ... شاید بتوان نام گذاری این برنامه را در تاریخ فناوری و آی تی، بی دقت ترین نامگذاری دانست ... کاربران با دیدن نام این برنامه تصور می کردند که این محصول در تمام سخت افزارهایی که ازwindows mediaپشتیبانی می کند قابل اجراست ...
... در راستای میزکار اشتراکی (sharing desktop) قابلیت به اشتراک گذاشتن ابزارک های خود در شبکه opendesktop فراهم شده که در تنظیمات تمامی ابزارک ها این گزینه وجود دارد که آن را می توانید با سایر دوستان خود در شبکه opendesktop به اشتراک بگذارید… یک بهبود کوچک ولی کاربردی ! در بخش device pluged in وقتی روی دیوایس های خود مثل فلش مموری وصل شده به سیستم کلیک می کنید در همان بخش از شما می پرسد که این دیوایس را با کدام برنامه می خواهید باز کنید ؟ تا پیش از این بعد از کلیک بر روی دیوایس یک پنجره برای این سوال باز می شد که در این نسخه همه چیز را به صورت یک جا به شما نشان می دهد از این به بعد تمامی تقویم ها را بر روی دسکتاپ خود داشته باشید ... همچنین قابلیت جستجو در ایمیل ها ٫ کانتکت ها ٫ بوک مارک ها ٫ سایت هایی که در مرورگر خود باز کرده اید ٫ فایل های دانلود شده ٫ مدیریت برنامه آماروک و حتی جستجو در history ترمینال را برای شما فراهم می کند ... باور نمی کنید ؟ خودتان امتحان کنید… قابلیت های جدید تمامی ندارد ! چیزی که شما هیچ کجا ندیده اید ! قابلیت window grouping که با شما این امکان را می دهد چندین برنامه را با هم در قالب یک پنجره داشته باشید ! برای دیدن نمای بهتر بر روی عکس زیر کلیک کنید تا ببینید چطور 3 پنجره برنامه amarok و firefox و dolphin با هم یکی شده اند ! و اما kde sc بیش از پیش بوی ایرانی به خود می گیرد ! نرم افزار blogilo نرم افزاری که تا پیش از این با نام bilbo شناخته می شد در این نسخه از kde sc به مجموعه kdepim اضافه شده است ! حتما می پرسید blogilo چیست ؟ کاربران ویندوز و وبلاگ نویسان مطمئنا winodws live writer را که ابزاری برای نوشتن وبلاگ از روی دسکتاپ و ارسال آن بر روی وبلاگ است می شناسند ! blogilo بدون شک بهترین گزینه برای کاربران گنو/لینوکس است که توسط 2 برنامه نویس ایرانی ٫ مهرداد مومنی و گلناز نیلیه برنامه نویسی و توسعه داده می شود (در همین لحظه این مطلب با بلاگیلو در حال توشته شدن است ) اینها بخشی از قابلیت هایی بودند که در نسخه 4 ...
... برنامه خیابان های گوگل، آیتیونز، آیپاد و سافاری به طور پیش فرض در این تبلت نصب هستند و می توان تمام نرم افزارهای آیفون موجود را به سادگی در این تبلت نصب کرد ... اپل از هم اکنون و پیش از انتشار این تبلت های 500دلاری، پکیج های برنامه نویسی لازم برای توسعه نرم افزارهای آیپد را در اختیار برنامه نویسان قرار داده است ...
... برنامه نویسی رخدادگرا یکی از الگوهای برنامه نویسی است که جریان برنامه را از طریق رخدادها (event) کنترل می کند ... برای روشن تر شدن موضوع بگذارید یک مثال بزنیم: یک برنامه word را باز می کنید و شروع به تایپ می کنید ... حال برنامه ورد این پیغام را دریافت کرده و مقدار کلید زده شده را در صفحه نمایش چاپ می کند ... خوب، برنامه ورد این کار را چگونه انجام می دهد؟ وقتی شما یک برنامه ویندوزی می نویسید به یک فراخواننده (callback) برخورد می کنید که وقتی پیغامی از طرف سیستم عامل صادر شد، توسط این تابع هندل می شود و عملیات مورد نظر انجام می شود ... پس قبل از این که بحث را دنبال کنیم، بگذارید کمی در مورد مفهوم فراخواننده صحبت کنیم: فرض کنید شما یک برنامه نوشته اید که قصد دارد یک سری داده را مرتب کند و می خواهید در هر مرحله به یک روش آنها را مرتب کنید ... این روش ساده و درست است، اما فرض کنید شما کد خود را در یک کتابخانه قرار داده اید و برنامه نویس دیگری که قرار است از کتابخانه شما استفاده کند، نمی خواهد از متدهای مرتب سازی شما استفاده کند ... در این جا کتابخانه شما در انجام این عمل ناتوان است ، خب چه کار کنیم که دیگر برنامه نویسان بتوانند برای مرتب سازی از روش های دلخواه خودشان استفاده کنند؟ برای این کار شما نیاز به تعریف یک اشاره گر به تابع (pointer to function) دارید ...
... سادگی و راحتی زبان برنامه نویسی جاوا و همچنین عمومیت آن در میان تمامی تلفن های همراه، باعث شده که روزبه روز بر تعداد این نرم افزارهای مبتنی بر جاوا افزوده شده و افراد بیشتری نسبت به نوشتن برنامه برای گوشی های موبایل توسط این زبان برنامه نویسی اقدام کنند ... برنامه نویسان ایرانی هم از این قاعده مستثنا نبوده و نرم افزارهای متنوعی با این سیستم ارائه داده اند ... امروز قصد داریم به تعدادی از این برنامه ها بپردازیم ... شاید در ظاهر، این برنامه ها کم حجم و یا کم کاربرد به نظر برسند، اما در عمل در بخش هایی از زندگی ما مورد استفاده قرار می گیرند ... کافیست به منوی اصلی برنامه رفته و قسمت فهرست موضوعات و سپس "آشپزی" را انتخاب کنید ... در قسمت تنظیمات نیز شما می توانید به تغییر نمای ظاهری برنامه پرداخته و یا اقدام به حذف تاریخچه مراجعات خود کنید تا فهرست 10آیتم آخر حذف شود ... همچنین می توانید با استفاده از انتخاب صفحه کلید مربوط به گوشی خود، عملکرد و استفاده از این برنامه را برای گوشی خود راحت تر کنید ... نرم افزار تور ایران همان طور که از اسم برنامه پیداست، این نرم افزار در پیدا کردن مکان های گردشگری کشورمان، شما را یاری می کند ... کلیه مکان های دیدنی آن شهر با توضیحات کافی برای شما شرح داده شده و آدرس هر کدام از آنها نیز در برنامه موجود است ...
... این اختلاف امتیاز انحصاری مربوط به استفاده از زبان برنامه نویسی xml است که امکان می دهد متن ها و فایل ها در برنامه های مختلف قابل خواندن باشند ... این زبان برنامه نویسی در جدیدترین نسخه پردازشگر ورد مایکروسافت مورد استفاده قرار گرفته و مایکروسافت اکنون ویژگی مورد بحث را از تمامی نسخه های موجود ورد و آفیس که در آمریکا به فروش می رسند، حذف کرده است ...
... روابط عمومی بانک تجارت - نسخه جدید پایگاه اینترنتی این بانک به منظور سهولت دسترسی به صفحات و اطلاعات با استفاده از آخرین تکنیک های برنامه نویسی صفحات وب سایت جدید بانک تجارت به گونه ای طراحی شده که کاربران بتوانند به سادگی ازخدمات بانکداری اینترنتی استفاده کرده و به اطلاعات بانکی مورد نیاز از جمله سامانه ساتنا، انواع سپرده ها و تسهیلات، خدمات شعب 24 ساعته و سامانه محاسبه نرخ سود سپرده ها دسترسی یابند ...
|
صفحه 1
|
2 | 3 | 4 |