طریقه استفاده از قفل نرم افزاری
چکیده
با توجه به فزونی نرم افزار در سیستم های کامپیوتری از یک طرف و توانایی کنترل کپی های غیرمجاز ( از دیدگاه اقتصادی آن ) از طرفی دیگر دلیلی محکم جهت بررسی این شاخه از مهندسی نرم افزار می باشد.
از آنجا که متاسفانه قانون Copyright در تمام جهان بجز ایران و چند کشور دیگر اجرا می گردد, بحث کنترل کپی های غیرمجاز حساس تر می شود. در این مقاله سعی بر این است تا علاوه بر آشنایی با انواع قفل های نرم افزاری و اختلاف آن ها با قفل های سخت افزاری, بتوانیم به عنوان طراح یک قفل نرم افزاری از محصولات نرم افزاری خودمان حمایت کنیم. ضمنا علاوه بر آشنایی با مفاهیم فوق, نوشتن روتین های ضد دیباگ و همچنین نحوه کد کردن اطلات نیز لحاظ شده است.
مقدمه
از آنجا که زمان زیادی تا سال 2000 باقی نمانده, اما هنوز در کشور ما ایران, نرم افزار جای خود را به عنوان یک محصول صادراتی پیدا نکرده چرا که یکی از دلایل اصلی آن عدم توجه جدی به حمایت از تولید کنندگان نرم افزار می باشد. به هر حال قصد اینجانب از ارائه مقاله, بررسی کم و کاستی های نرم افزار در ایران نیست بلکه طریقه حل مشکل موجود در این بازار نابسامان می باشد. با توجه به کپی های غیرمجازی که روزانه بصورت کاملا عادی و بدون اطلاع سازنده آن صورت می گیرد, جلوگیری از این عمل و کنترل جدی آن امری ضروری و واجب بنظر می رسد.
آشنایی با قفل های نرم افزاری و سخت افزاری
تعریف قفل های نرم افزاری: به هر برنامه ای که کنترل کپی آن فقط از طریق نرم افزار و بدون نیاز به سخت افزار اضافی قابل انجام باشد, گویند.
تعریف قفل های سخت افزاری: به هر برنامه ای که کنترل کپی آن از طریق سخت افزار اضافی قابل انجام باشد, گویند.
با توجه به تعاریف فوق می توان به تفاوت قفل های سخت افزاری و نرم افزاری پی برد. قفل های سخت افزاری با توجه به اضافه کردن یک سخت افزار جدید به کامپیوتر ( اغلب از طریق ارتباط با پورت چاپگر ) برنامه خود را کنترل می کنند. برنامه قبل از اجرا ابتدا با توجه به مراجعه به آدرس سخت افزار نصب شده ( اضافه شده با استفاده از دستور Port) به سخت افزار مورد نظر خود مراجعه کرده و در صورت یافتن آن, تست های مختلف اعم از تست رمز, خواندن اطلاعات و ... می تواند تصمیم گیری نماید. اما در قفل های نرم افزاری برنامه بدون نیاز به سخت افزار اضافی و با کنترل رسانه ذخیره سازی می تواند تصمیم گیری کند. ضمنا لازم به توضیح است که هدف از طراحی قفل های نرم افزاری/ سخت افزاری این نیست که هیچکس توانایی شکستن ( باز کردن ) آنرا ندارد بلکه مقصود بالا بردن سطح کنترل کپی های غیر مجاز تا حد ممکن می باشد. ( چرا که می دانیم اطلاعات همه در یک سطح نیست)
طریقه استفاده از قفل نرم افزاری در برنامه مورد نظر
با توجه به نوع کاربرد برنامه ( کوچک وقابل کپی بر روی یک دیسکت, تحت شبکه و ... ) می توانیم از انواع روش هایی که جهت حفاظت از نرم افزار در نظر داریم ( و متعاقبا توضیح داده خواهد شد ) استفاده کنیم. اما مساله قابل بحث این است که چگونه از یک قفل منتخب استفاده نمائیم؟
جواب این سوال متغییر و وابسته به شرایط زیر می باشد:
الف: اعتقاد طراح نرم افزار به اینکه کاربر حتما باید آنرا خریداری نماید تا از امکانات آن مطلع گردد.
در این حالت قفل نرم افزاری در ابتدای شروع به کار برنامه کنترل می گردد حتی طراح می تواند در مواقع حساس نیز قفل را مجددا کنترل کند و یا در حالتی که طراح واقعا سخت گیر باشد, می تواند در زمان های مشخصی از وجود قفل اطمینان حاصل نماید ( مثلا هر 4 ثانیه ). البته در این حالت طراح باید روشی را که جهت کنترل قفل استفاده می کند, نیز در نظر بگیرد.
ب: اعتقاد طراح نرم افزار به این که کاربر می تواند از نرم افزار به عنوان نسخه نمایشی نیز استفاده کند.
طراح در این حالت می بایست در مکان های خاصی از برنامه, قفل را کنترل کند. مثلا در یک برنامه حسابداری می توان تمام بخش های سیستم را آزاد گذاشته ( یعنی برنامه نیازی به قفل نداشته باشد ) اما در صورتی که کاربر مایل به استفاده از امکانات گزارشگیری سیستم باشد, قفل نرم افزاری در خواست گردد. مزیت این روش بر روش قبلی این است که دیگر نیاز به طراحی نسخه نمایشی جهت مشاهده کاربران وجود ندارد.
آشنایی با نحوه قفل گذاری بر روی یک برنامه
الف: طراح به سورس برنامه دسترسی دارد.
در این حالت طراح پس از انتخاب روش قفل گذاری, کافیست آنرا به زبان مورد نظر خود پیاده سازی نموده و در برنامه خود بگنجاند. ( که مکان های قرار دادن قفل در عنوان قبلی توضیح داده شد) .
ب: طراح ( مجری پروژه ) به سورس برنامه دسترسی ندارد.
گاهی اوقات به یکسری برنامه های ارزشمندی برخورد می کنیم که فاقد قفل هستند, بنابراین نیاز به قفل گذاری وجود دارد. ( البته این حالت بیشتر در کشور ما و چند کشور دیگر که در آن ها قانون Copyright معنی ندارد, کاربرد دارد. ) جهت تزریق قفل به این گونه برنامه ها, نیاز به آشنایی کامل به ساختار فایل های اجرایی (EXE, COM, SYS, …) وجود دارد چرا که باید برنامه ای طراحی کنیم تا همانند یک ویروس کامپیوتری به فایل اجرایی مشخصی بچسبد. البته جهت اینکار بهترین زبان برنامه نویسی, اسمبلی می باشد. ( بدلیل توانایی دخالت در روند اجرای برنامه )
البته در رابطه با نحوه نوشتن این گونه برنامه ها, روش های زیادی وجود دارد که خود بحثی مجزا را می طلبد و از حوصله این مقاله خارج است.
ضمنا برای بالا بردن سطح امنیت برنامه لازم است تا یکسری کد های ضد دیباگ در برنامه گنجانده شوند. کدهای ضد دیباگ, دستوراتی به زبان اسمبلی هستند که در حالت اجرای عادی برنامه, هیچ تغییری در روند اجرای نمی گذارند بلکه در صورتی که برنامه توسط دیباگرها اجرا گردد ( مورد ارزیابی قرار گیرد ) بتواند از اجرای آن جلوگیری نماید. با اضافه کردن کد های ضد دیباگ به ابتدای برنامه ( یا قبل از کنترل قفل ) می توان احتمال قفل با استفاده از موقعیت فایل روی هارد دیسک
این نوع قفل فقط بر روی هارد دیسک قابل استفاده بوده و به این صورت است که فایل اجرایی به موقعیت خود بر روی هارد حساس می باشد چرا که قبل از اجرا ابتدا موقعیت خود را از روی سکتورهای ROOT خوانده و سپس شماره کلاستر اشاره گر به خودش را بدست می آورد, سپس آنرا با شماره کلاستری که قبلا توسط برنامه نویس بر روی یکی از فایل های برنامه ( ممکن است بصورت کد شده باشد ) قرار داده شده, مقایسه کرده و در صورت برابر بودن اجرا می شود. این نوع قفل نسبت به قفل قبلی ( شماره 2 ) استفاده کمتری داشته چرا که در صورتیکه برنامه از روی بخشی از هارد به ناحیه دیگری انتقال یابد, اجرا نخواهد شد و این از نظر کاربر بسیار ناپسند می باشد. ( ضمنا امکان Defra, Scandisk, و ... نیز وجود ندارد چرا که شماره کلاستر اشاره گر به فایل تغییر خواهد کرد)
ضریب اطمینان این نوع قفل نیز 80%-70% می باشد. دستکاری در برنامه را پائین آورد. ( نحوه نوشتن کد های ضد دیباگ در پیوست A آورده شده است)
روش ساده دانشگاه پرینستون برای سرقت اطلاعات هارد دیسک
هنگامی که تراشهها را توسط یک توده هوا سرد میکنید، اطلاعات هم در جای خود منجمد میشوند و در نتیجه نمیتوان به راحتی این رشتههای بلند صفر و یک را از تراشههای کامپیوتری استخراج کرد.
دانشمندان عنوان کردهاند که تراشههای حافظه استاندارد، اطلاعات را تا چند ثانیه یا حتی چند دقیقه پس از خاموش شدن دستگاه در خود نگه میدارند.
یک گروه از محققان امنیت کامپیوتر دانشگاه پرینستون روش سادهای ابداع کردهاند که به وسیله آن میتوان اطلاعات رمزی ذخیره شده در هارد دیسک را به سرقت برد.
در این روش که میتواندبحث نرمافزارهای امنیتی را به چالش بکشد، فقط کافی است تراشه حافظه کامپیوتر را به وسیله تودهای از هوای سرد، منجمد کرد. نرمافزارهای رمزنگاری به طور فراگیر توسط شرکتها و نهادهای دولتی گوناگون مورد استفاده قرار میگیرند، ضمن آن که یکی دیگر از کابردهای عمده آنها در کامپیوترهای همراه یا همان لپتاپهاست و امکان سرقت آنها نیز بالاست.
در این روش، از نفوذپذیری محدود تراشه DRAM بهره گرفته میشود. این تراشهها، اطلاعات را به طور موقت نگهداری میکنند که از جمله میتوان به الگوریتم رمزگذاری پیشرفته اطلاعات اشاره کرد. هنگامی که کامپیوتر خاموش میشود و منبع برق از کار میافتد. اطلاعات گوناگون از جمله این الگوریتم ناپدید میشود.
در یک یادداشت فنی که در توضیح این دستاورد جدید از طرف دانشگاه پرینستون منتشر شده است، دانشمندان عنوان کردهاند که تراشههای حافظه استاندارد، اطلاعات را تا چند ثانیه یا حتی چند دقیقه پس از خاموش شدن دستگاه در خود نگه میدارند.
هنگامی که تراشهها را توسط یک توده هوا سرد میکنید، اطلاعات هم در جای خود منجمد میشوند و در نتیجه نمیتوان به راحتی این رشتههای بلند صفر و یک را از تراشههای کامپیوتری استخراج کرد.
ادوارد فلتن (Edward Felten) یکی از دانشمندان کامپیوتری دانشگاه پرینستون میگوید: اگر تراشهها را در نیتروژن مایع (دمای 196- درجه سانتیگراد) منجمد کنید، تراشهها بدون منبع انرژی، ساعتها در حالت اولیه خود به این شکل باقی میمانند. حال فقط کافی است آنها را به کامپیوتر برگردانید تا بتوانید تمامی اطلاعات و محتویات آنها را بخوانید.
دانشمندان به این منظور و برای شناسایی موانع و کلیدهای امنیتی میان میلیاردها اطلاعات کامپیوتری مختلف در تراشههای حافظه، نرمافزار الگو شناختی خاصی را مورد استفاده قرار دادند.
فلتن در این باره میگوید: ما بر این باوریم که امنیت اطلاعات مردم امر مهمی تلقی میشود و باید روی این موضوع بیشتر از اینها کار کرد.
این گروه تحقیقاتی دانشگاه پرینستون از پنج دانشجوی فارغالتحصیل کامپیوتر تشکیل شده که توسط فلتن رهبری میشوند. علاوه بر این، سه متخصص فنی هم با گروه فلتن به همکاری میپردازند. طبق اعلام این گروه، با روش یاد شده، اطلاعات کامپیوترهای دولتی مورد تهدید قرار میگیرد، چون جزییات چگونگی طبقهبندی این اطلاعات کاملا محرمانه است و در سطح عمومی اطلاعی از آنها در دست نیست.
محققان همچنین عنوان کردند که این روش سرقت اطلاعات را روی سیستمهای رمزگذاری امنیتی جدید که در برخی از دیسکهای تجاری به کار گرفته میشود، امتحان نکردهاند.
با وجود این، فلتن مدعی است که گروه تحقیقاتیاش میتواند ثابت کند که سیستم سختافزاری
" ما بر این باوریم که امنیت اطلاعات مردم امر مهمی تلقی میشود و باید روی این موضوع بیشتر از اینها کار کرد.... "
مطرح Trusted Computing هم که به عنوان فناوری پیشرو در افزایش ضریب امنیت کامپیوترهای خانگی مدرن از آن یاد میشود، در مقابل چنین حملهای ناتوان است. وی میافزاید: نتایج تحقیقات ما نشان میدهدکه نمیتوان با قاطعیت درباره امنیت کامپیوتر و نفوذناپذیری سیستمهای امنیتی صحبت کرد و همواره باید به این امر با شک و تردید نگریست.
پیتر نیومن (Peter Neumann) یکی از محققان امنیتی شرکت SRI در کالیفرنیا میگوید: این هم یک نمونه دیگر، حاکی از آن که اوضاع همیشه به همان شکلی نیست که در ظاهر شاهد هستیم. دانشمندان دانشگاه پرینستون اعلام کردندکه میتوانند به اطلاعات رمزگذاری شدهای که توسط برنامههای کاربردی مخصوص سیستمهای عامل ویندوز، مکینتاش و لینوکس ذخیره شده است، نفوذ کنند.