برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

کلیدهای حافظه USB در رویندوز ویستا

امکان افزودن کلید‌های USB به ویندوز ویستا سرعت عمل این سیستم عامل را بالا می‌‏برد.

به گزارش بخش خبر شبکه فن آوری اطلاعات ایران ، از ایلنا, ‌‏شرکت مایکروسافت اعلام کرد: ویندوز ویستا به کاربران این امکان را می‌‌‏دهد که با استفاده از کلیدهای حافظه USB به این سیستم عامل حافظه جانبی اضافه کند.
این ویژگی بخش از یک فناوری به اسم SUPERFETDN است که برای افزایش سرعت عمل کاربر در نسل جدید ویندوز طراحی شده است.
این فناوری داده‌‏ها و نرم‌‏افزارهای کاربردی را که کاربر در ماه‌‏های گذشته به آنها دسترسی داشته کنترل می‌‏کند و آنها را پیشاپیش در حافظه خود ذخیره می‌‏کند.
در ویندوزهای موجود, این نرم‌‏افزار برنامه‌‏ها و داده‌‏ها را تنها هنگامی که کاربر بخواهد بارگذاری می‌‏کند.
این کار زمان‌‏بر است؛ چون اولین بار که یک برنامه کاربردی بعد از REBOOT کردن سیستم راه‌‏اندازی می‌‏شود,‌‏ ویندوز مجبور است نه تنها خود برنامه بلکه درایورها و دیگر برنامه‌‏های کمکی و جانبی را نیز بارگذاری کند.
جیم آلچین، از مدیران مایکروسافت در این باره می‌‏گوید: اگر سیستم از حافظه بالایی برخوردار باشد SUPERFECH عالی عمل می‌‏کند؛ اما مایکروسافت برای سیستم‌‏هایی که حافظه محدودی دارند نیز راه چاره را اندیشیده است و آن امکان استفاده از USB است.

ترفندهای رجستری ویندوز برای خارج نمودن برنامه ازحافظه

شاید تا حالا به این مشکل برخورد کرده باشید که وقتی می خواهید از ویندوز خارج بشوید پیغامی مبنی براینکه آیا می خواهید فلان برنامه در حال اجرا را از حافظه خارج کنید یا نه؟روی صفحه نشان داده می شود.
برای اینکه ویندوز به طور اتوماتیک چنین برنامه هایی را از حافظه بیرون بیاورد، از طریق برنامه Run عبارت regedit را تایپ کرده و وارد رجستری ویندوز بشوید. آدرس زیر را دنبال کنید :
[ HKEY_USER.DEFAULTControl PanelDesktop]
حالا یک مقدار رشته ای به نام AutoEndTasks بسازید و به آن مقدار ۱ را بدهید.
ترفند دومی اینه که برنامه های خاطی را به سرعت از حافظه ویندوز خارج کنید. زمانی که کلیدهای ‍Ctrl+Alt+Delete را برای خارج کردن یک برنامه خاطی فشار می دهید و یا زمانی که می خواهید از ویندوز خارج شوید و ویندوز میخواهد یک برنامه خاطی را از حافظه خارج سازد پیغام را به برنامه حاطی می فرستد و 20 ثانیه صبر می کند تا برنامه جواب دهد و در صورتی که جوابی دریافت نکند برنامه را از حافظه خارج می کند. برای اینکه زمان انتظار را کاهش دهیم در رجستری ویندوز آدرس زیر را دنبال کنید:
[ HKEY_CURRENT_USERControl PanelDesktop]
یک مقدار رشته ای به نام WaitToKillAppTimeout مشاهده خواهید کرد که حاوی 20000 میلی ثانیه (20 ثانیه) است. این مقدار را به هر زمانی که دوست دارید تغییر دهید و توجه داشته باشید که زمان بر حسب میلی ثانیه است.

حفره های ویندوز

عمده ترین حملات موفقیت آمیز هکرها روی سیستم عامل ویندوز تنها از چندین حفره موجود روی برنامه ها انجام می گیرد. به تعبیری می توان گفت هکرها فرصت طلب هستند که آسان ترین مسیر را انتخاب کرده اند و از روی شکافهای شناخته شده exploit خود را صورت می دهد و بعد به طور گسترده ای از برنامه های ساخته شده برای به انجام رساندن عملیات خود بهره می گیرند. معمولا هم به سراغ سایت های متعلق به سازمان های بزرگ می روند و ابتدا به ساکن سیستم و شبکه آنها را اسکن می کنند و باقی قصه را هم که حتما می دانید. در این میان فهرست کردن حفره ها و برشمردن آنها کار طاقت فرسایی است ؛ اما می توان گزیده ای از مهمترین آنها را جمع آوری کرد و ضمن بررسی حفره ها به نحوه بستن آنها نیز نگاهی دقیق تر داشت.
1-
سرویس IIS :
برنامه
IIS مایکروسافت (internet information services)از دیرباز عمده ترین حفره ها را در خود جای داده و بالطبع نیز بیشترین حملات را به سوی خود جلب کرده است.
حفره پذیری
IIS تقریبا در 3کلاس فرعی قابل دسته بندی است : یکی قصور به سوی به کار گرفتن درخواست های غیرقابل پیش بینی ، دوم سرریز شدن ضربات از ضربه گیر ( bufferoverflow
) و سوم اپلیکیشن های ساده.
الف : بسیاری از حملات روی
IIS براساس این حفره که می توان درخواست های نافرم HTTP را برای به کار گرفتن درخواست های غیرقابل پیش بینی استفاده کرد، صورت می گیرد. یک مثال خیلی ساده وجود یک حفره در تراورسال دایرکتوری یونیکد بود که براحتی به ویروس codeBlue اجازه نفوذ می داد. یعنی درخواست یا Request به ظاهر قانونی بوده ؛ اما به عنوان یک نیرنگ به صورت exploit از آن سوءاستفاده شده و با آن کنترل رایانه در اختیار حمله کننده می افتاده است.
پس
IIS اجازه می دهد تا با حفره ای که حمل می کند اجازه ارسال درخواست های نافرم را از طریق HTTP
به هکر بدهد و وی نیز با ارسال این درخواست به ظاهر قانونی کنترل سیستم را به عهده بگیرد.
ب: سرریز کردن ضربات و پشت سر نهادن ضربه گیرهای تعریف شده از دیگر حفره های موجود در
IIS است که روی الحاقات سیستم مانند پرینتر ، ISAPI و ASP و... خود را نشان می دهد. مثلا ویروس codeRed از الحاقی idq برای بافر شدن بهره می گرفت و زمینه حملات Dos روی سیستم را فراهم می کرد.
ج: اپلیکیشن های ساده اغلب روی محیطهای سرور خود را نشان می دهند و تحمل حملات را نیز ندارند. در این میان
Default تعریف شده روی IIS به عنوان اولین راه نفوذ روی سرورها مدنظر هکرها قرار می گیرد. به عنوان مثال یک اپلیکیشن ساده نظیر newdsn.exe اجازه می دهد که هکر حملات از راه دور خود را برای نوشتن مجدد فایل های سرور انجام دهد. برخی دیگر از اپلیکیشن ها که وظیفه جمع آوری دیتای حیاتی نظیر کلمه عبور را دارند نیز مورد سوئاستفاده هکرها قرار می گیرند و یا مثلا یک فایل ism.dll یا iisadmin اگر به دست هکر بیفتد، می تواند در نقش راهبر سیستم کل سرور را هک کند. بیشترین سیستم عامل هایی که از طریق IIS مورد حمله قرار گرفته اند NT نسخه 4 است که روی آن IIS4 نصب است.
بعدی سرور 2000است که روی آن
IIS5 نصب است و دیگری نیز ویندوز xp است که روی آن IIS1.5 نصب شده است.
از چه راهی می توانیم ببینیم
IIS ما حفره پذیر شده است؟

ویندوز مایکروسافت وقتی روی سیستمی نصب می شود به ماشین میزبان اجازه می دهد تا فایلها و دایرکتوری های خود را براساس شبکه و از طریق ارتباط با سایر میزبانها به اشتراک بگذارد و به اصطلاح Share کند. مکانیزمی که برای این کار در نظر گرفته شده پروتکل (SMB (sever message block یا common internet file system است.
این پروتکل ها اجازه می دهند تا یک میزبان بامهارت کامل فایلها را به صورت از راه دور کنترل کامل کند. اگرچه این ویژگی برای مایکروسافت یک برتری و فناوری جذاب و نوین محسوب می شود؛ اما اشتراک گذاری فایلها به طریقه ناشیانه ممکن است فایلهای حیاتی را بی پناه بگذارد یا اجازه بدهد تا یک هکر با اجرا کردن یک برنامه کنترل کامل ماشین میزبان را به طریقه از راه دور در دست بگیرد. یکی از راههای عمده نفوذ ویروس سیرکام و نیمدا در تابستان 2001، سوئاستفاده از همین شیوه بود تا هکر بتواند به فایلهای میزبان به طور کامل دسترسی یابد و بسیاری از راهبران بی اطلاع خود جاده صاف کن نفوذگران شده اند و با آسان کردن راه دسترسی کاربران تنبل خود به فایلها به راحتی اجازه دور زدن سیستم را صادر می کنند، اما راهبران آگاه با پیکره بندی مناسب روی شبکه به نحو مطلوبی فایلهای اشتراک گذاشته شده را تعریف می کنند و ریسک نفوذ را به کمترین حد می رسانند. تمام آنچه که در بالا گفته شد به Net Bios سیستم و بی حفاظ ماندن آن برمی گردد و در این میان تمام نسخه های ویندوز از 95 گرفته تا xp در معرض تهدید سیستم این حفره قرار می گیرند. برای آگاهی از سوراخ بودن سیستم بهترین راه اسکن کردن ماشین با ابزار MBSA مایکروسافت است که قبلا در مورد آن شرح داده شد. تنها نکته قابل توجه این که با تحلیلگر حفره های مایکروسافت ( MBSA ) از هر 2طریق محلی ( LAN ) و از بیرون از شبکه تست را انجام دهید. شبکه های تجاری باید بسیار در این زمینه محتاط باشند، چرا که از بودن فایلها بلای ناگهانی تلقی می شود. یکی از سایتهای معتبر نیز می تواند باز بودن شبکه تان را به صورت یک گزارش با برنامه SMB مختصر و مفید برایتان از روی اینترنت بگوید که می توانید به این آدرس مراجعه کنید: http://grc.com مایکروسافت معمولا جزییات خوبی را در قسمت Help ارائه کرده است.
نکته دیگر آن که برخی موارد SMB به شما می گوید که آسیب پذیر نیستید؛ اما shieldsup می گوید، هستید. کارشناسان می گویند به دومین گزارش باید بیشتر بها دهید. اما راه چاره برای در امان بودن انواع حملات از این طریق پیکره بندی مناسب فایلهای به اشتراک گذاشته شده از سوی راهبر است.
اگر نیازی به shareدر شبکه ندارید، حتما قید آن را بزنید. از داخل control panel خود share شبکه را حذف کنید.

نصب یک فیلتر بر سر راه درخواست های مخرب روی HTTP : بسیاری از حفره های شناخته شده که کرمهایی نظیر Code Blue یا Code Red از آن بهره می گیرند مربوط به این حفره روی IIS هست اما می توانید یک فیلتر قوی جلوی ارسال هرگونه درخواست مخرب بگذارید و جلوی نفوذ را بگیرید. خود مایکروسافت برای این کار استفاده از نرم افزار URLSCAN را توصیه می کند که می توانید از آدرس زیر آن را بردارید و روی سرور و ماشین خود اجرا کنید:
microsoft.com/technet/security/tools/Locktool.asp
2- دومین حفره بزرگ کامپوننت های روی دیتااکسس مایکروسافت ( MDAC ) است.
سرویس دیتای از راه دور یا RDS جزو مولفه های اصلی روی دیتااکسس نسخه های قدیمی است. روی این برنامه شکافی وجود دارد که به کاربران از راه دور اجازه می دهد فرمان هایی را در حد راهبر سیستم به اجرا بگذارند.
این در حفره در Jet database engine 3.5 روی برنامه اکسس قرار گرفته است و این exploit به هر کاربر ناشناس یا anonymous خارجی اجازه دسترسی به دیتای داخلی را می دهد.(با نصب نسخه بالاتر حفره برطرف می شود). از این حفره به مدت 2سال در بسیاری از حملات هکری استفاده شد اما جلوی بیشتر آنها از سوی مایکروسافت با دستورالعمل های لازم بسته شد.
سیستم های قدیمی و راهبرانی که با این حفره آشنا نبوده و نیستند هنوز در معرض خطرند و از این ناحیه هک می شوند.
اغلب ویندوزهای NT با IIS نسخه 3 و 4 و نیز RDS نسخه 5/1 یا ویژوال استودیو نسخه 6 تحت تاثیر این حفره و نفوذپذیر هستند.
اگر NT نصب کرده اید دنبال یک فایل به نام msadcs.dll بگردید و بدانید که حفره ذکر شده از طریق این DLL سیستم شما را تهدید می کند. خود مایکروسافت چندین بولتن امنیتی در این باره منتشر کرده است. برای رفع حفره می توانید به نشانی های زیر مراجعه کنید:
http://support.microsoft.com/support/ kb/articles/q184/3/75.asp
http:// www.microsoft.com/technet/security/bulletin/ms98- 004.asp
http://www.microsoft.com/technet/security/bulletin/ms 99- 025.asp
بهترین راه چاره به روز کردن MDAC است. اگر این کار را روی ماشین سرور خود که NT دارد انجام دهید همه مشکلات حل می شود برای دانلود کردن آن به نشانی زیر مراجعه کنید:
www.microsoft.com/data/Download.htm
یکی از راهها، رفتن به شاخه زیر در رجیستری و ساختن یک پوشه به ارزش DWORD است.
نام پوشه را باید HandlerRequired بگذارید و value آن را به یک (1) تغییر دهید:
HKEY-LOCAL-machineSoftwareMicrosoftDataFactoryHandleriNFO
ورودی دیگر در نشانی های زیر در رجیستری را کاملا پاک کنید:
HKEY-CLASSES-ROOTMicrosoft.jet.OLEDB.3.51
HKEY=CLASSES-ROOTMicrosoft.jet.OLEDB.3.51 Errors

 سومین حفره بزرگ در ویندوز وجود سوراخ های متعدد و بزرگ روی مایکروسافت اسکیوئل سرور (MSSQL) است که به کاربر از راه دور، اجازه دسترسی به اطلاعات حساس سرور و سیستم های وابسته ، دسترسی به بانک اطلاعاتی و پیکره بندی اطلاعات را به آسانی مهیا می کند. کرم بزرگی که در ماه مه 2002 روی اسکیوئل آمد، حفره بزرگی را روی این سرور مایکروسافت آشکار کرد و البته سیستم های زیادی را نیز مبتلا کرد. اولین کاری که این کرم انجام می داد، این بود که به یک میزبان دستور می داد تا در ترافیک شبکه اخلال ایجاد کند. پورت1433 (که پورت تعریف شده اسکیوئل سرور است) مرکز این حملات به شمار می رود و با اسکن کردن این پورت و افتادن آن به دست هکر حمله آغاز می شود. برای اطلاعات بیشتر به سایت زیر مراجعه کنید:
www.cert.org/advisories/CA-2002-22.html
سیستم هایی که روی آن اسکیوئل سرور نسخه 7و یا اسکیوئل 2000یا اسکیوئل سرور دسکتاپ انجین 2000 نصب شده ، آماده حفره پذیری هستند. برای تشخیص حفره پذیری سیستم ، ابتدا شاخه رجیستری ویندوز خود به آدرس زیر را چک کنید:
HKEY-LOCAL-MACHINESSoftwareMicrosoft
MSSQLserverserverMSSQL
هر نوع برنامه SQL که به روز نشده و هیچ گونه پس دستوری روی آن نصب نشده به احتمال قوی آسیب پذیر است.
برای تشخیص این موضوع بهترین راه ، استفاده از تحلیلگر حفره های مایکروسافت ( MBSA ) است که به راحتی حفره های اسکیوئل نسخه 7و 2000را تشخیص می دهد. برای نصب این تحلیلگر گرافیکی به آدرس زیر مراجعه کنید:
microsoft.com/tecnet/security/tools/MBSAhome.asp
برای حمایت از اسکیوئل خود ابتدا آخرین پس دستورها و سرویس پک ها را روی آن نصب کنید و بعد سرور خود را در سیستم شبکه کاملا ایمن نمایید.
www.microsoft.com/sql/downloads/2000/sp2.asp
www.microsoft.com/sql/downloads/sp4.asp
یکی از حملات شایع حمله روی اکانت موسوم به sa است که با یک پسورد جای خالی اجازه دسترسی همگان در حد راهبر را به سرور می دهد. اگر شما اکانت saرا دارید، مطمئن باشید که با دست خودتان سیستم را باز گذاشته تا انواع کرمها به سیستم نفوذ کنند و هکرها ماشین شما را براحتی دور بزنند. اگر یک کلمه عبور بسیار قوی و نیرومند برای آن تهیه کنید ، می توانید از این خطر مصون بمانید.
microsoft.com/sql/techinfo/productdoc/2000/books.asp
خود مایکروسافت نحوه تعویض saرا داده و حتی نحوه Login کردن را نیز آموزش داده است و از آن می توانید استفاده کنید.
msdn.microsoft.com/library/en-us/modadmin/html/deconchangingsqlserveradministratorlogin.asp
اسکیوئل خود را تحت یک دومین معتبر و نه دومین administrator بالا بیاورید که کمترین ریسک را به جان بخرید. همه تاییدیه های سیستم ( authentication ) را مجددا پیکره بندی کنید و انواع ادیت از سوی کاربران را چک نمایید. اگر مجبورید از پورت 1433یا 1434روی دروازه اینترنت شبکه خود استفاده کنید، باید یک فیلترینگ قوی روی اسکیوئل خود و روی این پورتها نصب کنید.

 حفره بعدی ویندوز مربوط به اکانت های بدون کلمه عبور و یا کلمه های عبور ضعیف است. پسوردها یا کلمه عبور کدهای امنیتی هستند که به صورت مجازی در یک تعامل مستقیم میان کاربر و سیستم اطلاعاتی به کار گرفته می شود و بیشتر به شکل گرفتن تاییدیه از کاربر با تکیه بر حروف انکریپت شده بنا شده اند. در وهله اول یک هکر باید این دیوار دفاعی را بشکند تا بتواند دسترسی مستقیم به فایلها و دیتای ماشین پیدا کند.
Policy برای انتخاب کلمه عبور در اینجا نقش حیاتی پیدا می کند و بیشتر تهدیدها و حفره های پسورد از همین جا ناشی می شود که اکانت یک کاربر با کلمه عبور ضعیف ساخته شد، اکانت هایی با پسورد ضعیف یا نداشتن کلمه عبور روی شبکه یا ماشین ، فرار از کلمه ها و پسوردهای طولانی و سخت و سوم وجود برنامه هایی که تا حد Admin به سیستم نفوذ کرده و همه چیز را کنترل می کنند و بعد الگوریتم روی hashها که قبلا توضیح داده شد همه و همه باعث مرئی شدن کلمه عبور می شوند.
بهترین راه مبارزه با آن نیز اعمال سیاست سختگیرانه انتخاب کلمه عبور از سوی راهبر برای کاربران است بنابراین ابتدا هر کاربری باید با کلمه عبور وارد شبکه شود و بعد کلمه عبور آسان نباشد.
3برنامه اصلی شکستن کلمه های عبور روی اینترنت وجود دارد که شامل Lc4 و Johntheripper و SymantecNetRECON هستند و با آنها ضمن امتحان کردن خود می توانید بفهمید که به چه سادگی می توان کلمه های عبور را سرقت کرد.
دوباره تاکید می شود که هرگز اسکنر پسورد روی اکانت Admin اجرا نکنید که این به معنی مرگ برای شما و سیستم تان خواهد بود اما به صورت رایگان می توانید از برنامه ها به عنوان تست استفاده کنید که قابل اعتمادترین آنها را در بالا ذکر کردیم.
بیشتر پسوردشکن ها از دیکشنری Attack بهره می برند. اگر شما کلمه عبور را Jim بگذارید، طبق تعاریف ان تی استرینگ تعریف شده شما به صورت Jim به همراه 11تا صفر است و براحتی قابل شکستن از سوی نرم افزارهاست.
شبیه سازی password از طریق کدهای آلفانومریک نیز چندان جذاب نیست.
مثلا برخی می گویند به جای کلمه عبور password می توانید از pa$$w0rd استفاده کنید.
این کار نیز صحیح نیست ؛ بلکه به طور کامل باید چنین کلمات را کنار گذاشت.
در سیستم های لینوکس نیز این موضوع رعایت نشده است و بیشتر پسورد root به صورت r00t زده شده و سیستم آسیب پذیر می شود.
برخی برای این که کلمه عبور را فراموش نکنند اول حرف یک شعر را انتخاب می کنند که حالت تصادفی به خود می گیرد که این موضوع قابل تحمل از موارد سابق است ؛ اما در همین جا بگوییم که اگر راهبر هستید کلمه عبور زیر 25حرف را قبول نکنید و اگر امکان گم شدن وجود داشت راهبر به عنوان امین سیستم می تواند کمک اصلی باشد.
password های حساس را باید هر 2روز یک بار عوض کرد و password های غیر حساس (بسته به تعریف راهبر) هر یک هفته یک بار باید عوض شود.
خود انتخاب نام کاربر نیز مهم است و باید نام کاربر با نام موسسه یا سازمان و... یکی نباشد تا هکر را یک قدم دیگر به عقب راند.
در قسمت سیاست های اکانتینگ هر گونه Guest حذف شود و هر نوع اکانت در حد راهبر از سیستم پاک شود.
خود کلمه Administrator باید Rename شود.
یک فهرست کامل از اکانت ها درست کنید ؛ اما روی رایانه نگه ندارید و اگر به صورت سی دی یا فلاپی آن را ضبط کردید در مکان بسیار مطمئن قرار دهید. اکانت کاربرانی که برای همیشه از موسسه می روند را به طور کامل پاک کنید.
برنامه ESM متعلق به سیمانتک می تواند در این زمینه راهگشا باشد تا با حملات فرضی کلمه های عبور شما را امتحان کند.

اولین قدم برای بستن این راه نفوذ، تخریب هرگونه اکانت به صورت anonymous است که باید حتما در نظر راهبران قرار گیرد. Domain controler احتیاج شدیدی به Null session دارد و تخریب کامل آن کار درستی نیست ؛ اما می توان میزان حملات را به صفر رساند. برای این کار باید Valuedata در شاخه رجیستری زیر را حتما به 1(یک) تبدیل کنید تا آسیب نبیند.
HKEY-LOCAL MACHINEsystemcurrent controlsetcontorolLSARestrict Anonymous
پس پوشه Restrict Anonymous را بازکنید و داخل آن عدد 1 تایپ نمایید و ok کنید. (این پوشه به صورت Dword تعریف شده است). هنگام این تغییر ابتدا سیستم هنگ می کند اما با یک بار خاموش و روشن کردن همه چیز درست می شود. داشتن یک پشتیبان از هارد نیز ضروری است.
چرا که بعضی وقتها یک اسب تروا روی سیستم می نشیند که اگر این تغییر انجام شود همه چیز را به هم می ریزد. روی شبکه توصیه می شود ماشین هایی که اینترنت را می بینند به این سیستم مجهز شوند. تاکید می شود که هیچ کاربری روی شبکه نباید به Domain controler دسترسی داشته باشد و اصلا حق ندارد که یک کاربر خارجی تعریف کند. حفره بزرگ بعدی در ویندوز وجود آسیب پذیری در سیستم تصدیق روی LAN Manager است. اگرچه سیستم های کنونی ویندوز نیاز به این سیستم ندارند ؛ اما ذخیره شدن کلمه عبور LANMAN hashes آسیب و خطر عمده ای به شمار می آید که روی ویندوز ان.
تی ، 2000 و XP وجود دارد. به دلیل انکریپت ضعیف روی سیستم های NTLM و NTLM2 ، کلمه های عبور روی LANMAM براحتی در عرض کمتر از چند دقیقه شکسته می شوند و کلمه های عبور سخت تر به دلیل ضعف در سیستم ورودی و خروجی سخت افزاری قابل نفوذ می شوند. ( hash ، یک الگوریتم به کار رفته روی محاسبات ریاضی یکطرفه است که اجازه ورود دیتاها با حجم بالا و مخلوط را با هم به روی سیستم می دهد و هرگونه تغییر در ورودی دیتا تغییر در hash نیز محسوب می شود. ازجمله دیتاها ورود یک پیام به سیستم است که با یک hash چندین ورودی قابل اطمینان را می سازد. مثلا MD5 یک استاندارد یکطرفه با فهرست hash 128بیتی است که به وسیله RSA توسعه یافته است و در آن دیتاها روی پروتکل PPP براحتی قابل تصدیق (Authentication) می شوند. پروتکل NTLM نیز که اولین بار روی N.T به صورت Default به کار رفت ، یک پروتکل تصدیق براساس سیستم مبارزه پاسخ نباشد. ضعف در LM hashها می تواند براساس مبانی زیر اتفاق بیفتد. مثلا کلمه های عبور کمتر از 14حرف باشد یا کلمه عبور با وجود یک Space تکراری باشد و یا همه حروف روی کلمه عبور قابل تبدیل به یک کلمه ساده باشد و یا این که کلمه عبور تکرار 2حرف در رده 7حرفی باشد. یک هکر با پردازش hashing روی سرور از راه دور با کنار هم قرار دادن یک ردیف از حروف 7حرفی ضربدر 2می تواند به شبکه دسترسی یابد. هر 7حرف روی کلمه عبور می تواند یک حرف با ترکیبی از استرینگ و کاراکترهای 14تایی باشد و همه 14حرف از جمله Space می تواند 7حرف واقعی باشد و یک لغتنامه attack بتواند بقیه حروف را بخواند و تشخیص دهد.

LM hash روی SAM فایل ذخیره شده و پردازش روی LAN و گرفتن تصدیق بیشتر از سوی سرور به عنوان یک Client مورد تایید قرار می گیرد. در این میان یک Packet Sniffing بر سر راه شبکه می تواند کلمه های عبور را به داخل خود بکشاند و ذخیره کند. بنابراین شکسته شدن کلمه عبور از این راه حتی اگر تعداد حروف زیادی نیز به کار ببرید ، امکانپذیر است.
اگر LAN Manager را به صورت Default روی سرور خود دارید، قطعا بدانید که ماشین تان نفوذپذیر است.
بیشتر ابزار شکستن کلمه عبور سیستم عامل ویندوز نظیر برنامه LC4 از همین حفره استفاده می کند و هکرها با اجرای آن روی شبکه هایی که می خواهند به آن نفوذ کنند ، کلمه های عبور را می شکنند و با خواندن فایل SAM که کلمه های عبور NTLM و NTLM2 را ذخیره کرده ، سیستم براحتی قابل حمله می شود. (هرگز یک اسکنر کلمه عبور روی سیستم خود با اکانت Admin نصب نکنید) بیشتر نرم افزارهای موجود که می گویند قصد حمایت از پسوردهای شما را دارند، تقلبی است و می خواهند کلمه عبور سرور و ماشین هایتان را به دست بیاورند؛ اما راه چاره ابتدا از کار انداختن تصدیق LAN Manager روی شبکه است ؛ اما آلترناتیو آن نصب NTLMV2 است که بسیاری از حفره ها روی آن گرفته شده است و انکریپت آن نیز قوی تر است.
در رجیستری ویندوز شاخه زیر را پیدا کنید:
HKEY-LOCAL-MACHINESYSTEMCurrentcontrosetControlLSA
یک پوشه به ارزش DWORD به نام LM Compatibility Level هست که Value آن از صفر تا 5 قابل تغییر از سوی راهبر است و البته Default آن صفر است.
صفر در اینجا به معنی اجازه به سیستم مبارزه و پاسخ (یعنی باز بودن سیستم) است.
Value یک یعنی اگر کسی درخواست فرستاد NTLMV2 کار کند. ارزش دو (2) فقط تصدیق روی NTLM می فرستد. ارزش (3) ارسال تصدیق روی NTLMV2 است و 4یعنی تصدیق روی LM را اصلا نمی پذیرد و شماره 5 نیز یعنی تصدیق روی LM و NTLM را رد می کند.
اگر ماشین شما ویندوز ان.
تی با سرویس پک 4 به قبل است از عدد 3 روی همه Clientها استفاده کنید و از عدد 5 روی دومین کونترولر استفاده نمایید.
با نصب مستقل NTLMV2 شاخه LMCompatibility از ارزش صفر تا 3 را دراختیار شما می گذارد.
اگر قادر نیستید پوشه LMCompatibility level را 4 بدهید.
سپس ، از هر گونه ذخیره شدن hash جلوگیری کنید. حتی در برخی موارد همچنان hashها روی فایل SAM ذخیره می شوند.
روی ویندوز 2000 شاخه زیر را بسازید:
HKEY-LOCAL-MACHINEsystemcurrentcontrolsetcontrolNOLMHASH
روی زیر شاخه control رفته و سمت راست موس را زده و new و بعد Key را انتخاب کرده و NOLMHASH را تایپ کنید) با وجود این پوشه دیگر هیچ نوع hashes ذخیره نمی شود اما روی xp به شاخه زیر بروید.
HKEY-LOCAL- MACHINEsystemcurrentcontrolsetcontrolLSA
و بعد پوشه ای به نام NOLMHASH به ارزش DWORD بسازید و value آن را یک بگذارید.
با یک بار تغییر کلمه عبور روی شبکه از سوی کاربر تمامی hashها پاک می شوند.

 اما طریقه دیگر برای از کار انداختن کنترل رجیستری از راه دور مراجعه به management computer در control panel است و با رفتن درون services دنبال سرویسی به نام Remote Registry بگردید و سمت راست موس را کلیک کنید و با گرفتن Properties ابتدا سیستم را stop نمایید. بعد داخل Logon بروید و منوی Hardware را از enable به disable تغییر دهید و Apply کنید.
سپس در منوی General نوع Startup را به disable تغییر دهید و Apply و OK کنید تا همه چیز درست شود.
آخرین حفره بزرگ ویندوز وجود هاست اسکریپت های ویندوز (WSH) به عنوان منشاء ورود کرم های خطرناک است که آن را بررسی می کنیم.
در بهار سال 2000 ویروس لاوباگ به عنوان کرمی نوشته شده با اسکریپت ویژوال بیسیک (VBScript) میلیون ها دلار خسارت به بار آورد.
بعدها این کرم منشائ بسیاری از ویروس ها شد که با استفاده از هاست اسکریپت های ویندوز (WSH) حفره بزرگ بعدی ویندوز این اجازه را پیدا کرد تا هرگونه متن را به صورت vbs توسعه دهد و آن را قابل اجرا به عنوان اسکریپت ویژوال بیسیک در بیاورد.
تحت (WSH) یک کرم می تواند خود را درون انواع فرمت فایلهای توسعه دهد و کل سیستم را آلوده کند.
وقتی راهبران مجبور هستند تا با اپلیکیشن هایی نظیر مرورگرها و mail client کنار بیایند ، وجود پس دستورها و نصب آنها از راه اسکریپت باعث ریسک پذیری سیستم ها می شود.
بنابراین از کار انداختن هاست اسکریپت ها (WSH) می تواند خطر گسترش ویروس ها را کاهش دهد.
به صورت پیش تعریف شده هاست اسکریپت روی تمام نسخه های ویندوز فعال است و هر سیستمی که این سرویس را از کار نینداخته باشد ، قطعا آسیب پذیر است.
به منظور Remove کردن هاست اسکریپت بسته به نوع سیستم عامل باید وجود فایلهای اسکریپت را از کار بیندازید.
اگر ویندوز 95دارید باید سمت راست را روی My computer بزنید ، با مراجعه به view/option در منوی بالا روی File Types کلیک کنید و به دنبال VBScript script file بگذارید و بعد آن را Remove و ok کنید.
در ویندوز 98 باید در control panel بروید و در Add/Remove باید windows setup را انتخاب و بعد روی Accessories بزنید تا جزییات آن را بگیرید و در نهایت تیک جلوی windows scripting host را بردارید.
در سیستم ان تی و 2000نیز با پسورد راهبر (Admin) داخل سیستم شوید و سمت راست را روی My computer بزنید و File Types را پیدا کنید و داخل آن VBScript را بیابید و Remove کنید.
اگر نخواستید با این راهها خود را سرگرم کنید، می توانید فایل اجرایی زیر را پس از دانلود کردن ، اجرا کنید تا تغییرات به طور خود کار انجام شود.
http://churchofireland.net/avlinks/noscript.exe
در واقع کلیدهای ردیف اول به صورت ردیف دوم تغییر پیدا می کنند که در زیر آنها را مشاهده می کنید.
:For example, these registry keys
HKEY_CLASSES_ROOTJSFile
HKEY_CLASSES_ROOTVBSFile
HKEY_CLASSES_ROOTWSHFile
HKEY_LOCAL_MACHINESoftwareCLASSESVBSFile
HKEY_LOCAL_MACHINESoftwareCLASSESWSHFile
HKEY_LOCAL_MACHINESoftwareCLASSESJSFile
: become
HKEY_CLASSES_ROOTJSFile.SymantecDisabled
HKEY_CLASSES_ROOTVBSFile.SymantecDisabled
HKEY_CLASSES_ROOTWSHFile.SymantecDisabled
HKEY_LOCAL_MACHINESoftwareCLASSES VBSFile.SymantecDisabled
HKEY_LOCAL_MACHINESoftwareCLASSES WSHFile.SymantecDisabled
HKEY_LOCAL_MACHINESoftwareCLASSES JSFile.SymantecDisabled

اگر xp دارید فایروال آن را به کار اندازیداین کار باکلیک راست روی منوی شبکه و گرفتن properties میسر است.
بعد به سراغ networking بروید و پروتکل TCP را آبی کنید و از روی آن properties بگیرید و به داخل advanced بروید. سپس روی منوی wins بروید و NetBios خود را کاملا disable کنید.
اگر مودمی هستید در روی منوی شبکه تیکی به نام client for microsoft را بردارید و بعد به عنوان یک کاربر روی درایوها بروید و با گرفتن properties ابتدا Security را برگزینید و فهرست everyone و... را بسته به کار خود حذف کنید.
از راه Groupe policy editor و از روی Administrator tools در control panel نیز می توانید آن را انجام دهید.
وقتی روی اینترنت هستید با account ، Admin خود صفحات وب را مرور نکنید ؛ بلکه یک User عادی تعریف کنید و با آن روی اینترنت بروید.
به Shareهای بی هویت اجازه ورود ندهید و فورا آنها را disable کنید.
اگر مجبور شدید یک فایل جدید و بی مصرف را روی درایو غیربرنامه ای خود بسازید و آن را share کنید ، اجازه دسترسی کامل را از کاربر خود بگیرید.
یک IP ویژه به آن اختصاص دهید؛ اما نام DSN خود را طور دیگری برگزینید و در آخر پورتهایی که sharing ویندوز از آن استفاده می کنید را ببندید.
پورت نت بایوس را طبق گفته قبلی از کار بیندازید و یک فایروال قوی پشت روتر و سیستم بگذارید تا خطاها کمتر شود.
پورتهایی که باید از کار بیفتد 137 و 139 روی TCP و 137 و 139 روی UDP و 445 روی TCP و UDP هستند.
5- راه بعدی نفوذ به نفوذ به ویندوز از طریق وارد شدن به سیستم به طریقه ناشناس و بی نام (anonymous Logon) است.
نحوه ورود از طریق ناشناس به وسیله ارتباطات پوچ یا (Null session) انجام می گیرد.
با این کار دسترسی به فایلهای به اشتراک گذاشته شده روی شبکه فهرست کاربران در دسترس قرار گرفته و کاربرناشناس بدون گرفتن تاییدیه وارد سیستم می شود.
معمولا از محیط اکسپلورر روی ویندوز و تست کردن فرمان های مورد نظر می توان چنین کاری را انجام داد.
در ویندوز 2000 و NT و XP، Logon کردن به ماشین از طریق Accuont System کار سختی نیست.
معمولا اکانت سیستم به هنگام بحرانی شدن ماشین استفاده شده تا کاربر بتواند وارد سیستم شود و اطلاعات خود را بازیابی کند.
در واقع وقتی یک کاربر می خواهد دیتای خود را از یک ماشین بازیابی کند ، Accuont System فعال شده و اجازه می دهد تا از طریق کنترل از راه دور وارد سیستم شود.
مثلا وقتی کلمه عبور را گم می کنید و راهبر مجددا آن را برایتان پست می کند در واقع logon از طریق Accuont System و از روی ماشین راهبر انجام می شود.
Accuont System نیازی به داشتن کلمه عبور ندارد؛ اما نمی تواند درون سایر سیستم ها برود و تنها روی همان ماشین حمله انجام می گیرد.
پس هکر درون Null session نفوذ می کند.
بر روی سایتهای هکری انواع مدلهای نفوذ به سیستم از طریق Null session ذکر شده است.
مثلا با دستور زیر می توانید روی یک رایانه نحوه ورود به Null session را تست کنید:
''''net use \a.b.c.dipc$''''/user
در این صورت a.b.c.d همان IP مورد نظر شماست و user نیز همان اسم کاربری که شما به آن logon کرده یا خواهید کرد ، است.
اگر این دستور جواب داد ، بدانید سیستم شما کاملا آسیب پذیر است و اگر جواب خطا را برای شما پس فرستاد، بدانید سیستم شما نفوذ ناپذیراست.

 حفره بزرگ بعدی ویندوز ، مرورگر اینترنت اکسپلورر (IE) است که به صورت Default روی همه سیستم عاملهای ویندوز نصب می شود. همه نسخه های مرورگر مذکور آسیب پذیر هستند و به دلیل داشتن باگهای بزرگ ، بیشتر مواقع به عنوان واسط حملات و exploitها از آن استفاده می شود. یک هکر در حد Admin از روی همین صفحه می تواند صفحات وب سیستم مورد حمله قرار داده شده را برهم بریزد. حفره ها به چندین دسته قابل تقسیم هستند که از آن جمله WebPageSpoofing ، Activex Control ، Active Scripting ، انواع MIME و Buffer Overflow هستند.
در نتیجه این حفره ها ،کوکی های سیستم برای هکر آشکار شده و دسترسی به فایلهای محلی و اجرای برنامه های مخرب و دانلود کدهای اختیاری روی سیستم امکانپذیر می شود. همان طوری که گفته شد مرورگر IE روی همه نسخه های ویندوز ازجمله سرورها نصب شده و امکان در خطر بودن سیستم کاملا آشکار است.
برای آگاهی از آسیب پذیر بودن سیستم ، می توان به بولتن های امنیتی مایکروسافت مراجعه کرد و پیش از هر چیز باید اطمینان پیدا کرد که جدیدترین پس دستور IEاجرا شده است یا نه.
اگر نشده بود، باید بسیار سریع دانلود و نصب گردد. برای این کار می توانید به آدرس زیر مراجعه کنید:
Windowsupdate.microsoft.com
اگر پس دستورها نصب شد، برای آگاهی بیشتر می توانید از 2ابزار چک کردن سیستم یعنی MBSA پیش از این شرح داده شد و نیز از Hfnetchk استفاده کنید.
Microsoft.com/technet/security/tools/hfnetchk.asp microsoft.com/technet/security/tools/Tools/MBSAhome.asp
همچنین برای شناسایی فشارهای ناشی از حفره و ارزیابی آن از سایت زیر استفاده کنید:
http://browsercheck.qualys.com
برای چاره سازی ابتدا اگر نسخه IE زیر 01/5 است ، آن را به سرعت به روز کنید. جدیدترین نسخه ها را می توانید از آدرس های زیر دانلود نمایید.
microsoft.com/windows/ie/downloads/critical/ie6sp1/default.asp
(مربوط به IE نسخه 6 با سرویس پک 1است)
microsoft.com/windows/ie/downloads/recommended/ie501sp2/default.asp
(مربوط به IE نسخه 5/5 با سرویس پک 2است.)
microsoft.com/windows/ie/downloads/recommended/ie501sp2/default.asp
(مربوط به IE نسخه 01/5 با سرویس پک 2است)
بعد از به روز کردن مرورگر خود ، باید آخرین پس دستور ارائه شده تا این تاریخ را نصب کنید:
microsoft.com/windows/ie/downloads/critical/q323759ie/default.asp

فایلهای پیکر بندی در سیستم

در نگارش های نخست ویندوز اطلاعات سیتمی همواره در دو فایل به نامهای CONFIG.SYS و AUTOEXEC.BAT ذخیره می شدند.
در نسخه های بعدی ویندوزمحل ذخیره سازی اطلاعات سیتمی عبارت بودند از
SYSTEM.INI, WIN.INI . این دو فایل که به آنها " فایلهای شروع به کار اولیه " (initialization files) نیز گفته می شد
وظیه
WIN.INI ذخیره کردن اطلاعات پیکر بندی مربوط به ویندوز و برنامه های کاربردی تحت آن و وظیفه SYSTEM.INI ذخیره کردن اطلاعات مربوط به سخت افزار و پارامترهای سیستمی بود.
عیب بزرگ این سیستم این بود که هر برنامه کاربردی برای خودش فایلهای
INI مخصوصی درست کند تا پارامترهای تعریف شده توسط کاربران و یا خود آن برنامه را در آنها جای دهد. در این حالت دایرکتوری Windows پر از فایلهای INIسیستمی بود.و در ویندوز 0/3 نه تنها همان دو فایل بلکه فایلهای دیگری نیز برای ذخیره سازی اطلاعات سیستمی به ویندوز اظافه شد.در این اوضاع بود که MICROSOFT به فکر طراحی سیستم جدیدی برای ذخیره سازی اطلاعات سیستمی در ویندوز افتاد.
با آمدن رجیستری عصر فایلهای
INI پایان یافت :
با افزایش تعداد فایلهای
INI و سردرگمی کاربران و آسیب پذیر بودن این فایلها – طراحان برای حل همه این مشکلات ویندوز 95 تصمیم گرفتند که در رجیستری ویندوز 95 یک تحول بزرگ بوجود آورند. آنها بویژه تصمیم گرفتند که رجیستری را به یک بانک اطلاعات مرکزی تبدیل کنند که همه پارامترهای سیستم و برنامه های کاربردی را در خود جای دهد. در ویندوز 98 هم رجیستری همچنان همان ساختار اولیه خود در ویندوز 95 را حفظ کرده است .استفاده از رجیستری مزایای زیادی داشت از قبیل :
1)بانک اطلاعاتی رجیستری نه تنها مکانی برای ذخیره کردن پارامترهای سخت افزاری و سیستم عامل است بلکه برنامه های کاربردی نیز می توانند به جای استفاده از فایلهای
INI جداگانه برای ذخیره کردن پارامترهای خود، آزادانه از رجیستری برای این کار استفاده کنند.
2)تمام فایلهای رجیستری دارای ویژگیهای :
Hidden (پنهان)، System (سیستم) وRead-only ( فقط خواندنی) هستند. بنابراین احتمال آنکه بطور تصادفی حذف شوند از بین رفته است. حتی اگر کاربری به طریقی این فایلها را حذف کند باز هم ویندوز 98 کپی های پشتیبانی از آنها درست کرده است که توسط آنها براحتی می تواند فایلهای رجیستری قبلی را بازگرداند.
3)برای تغییر یک مقدار رجیستری می توانید از برنامه
Registry Editor استفاده کنید. این برنامه همه بانک اطلاعات رجیستری را بصورت سلسله مراتب درختی نمایش می دهد.
اگر چه رجیستری همه کارهای فایلهای
INI و شروع کار اولیه را انجام می دهد اما همه وظیفه پیکر بندی را به تنهایی بر دوش نمی کشد. ویندوز 98 همچنان از فایلهای WIN.INI و SYSTEM.ini استهاده می کند و برای این که بتواند سازگاری خود با برنامه های قدیمی 16 بیتی، که فقط می توانند اطلاعات پیکربندی خود را از این فایلها بدست آورند، کار کند. علاوه بر این اگر سخت افزاری از سیستم شما به درایورهای کار کننده در مود حقیقی نیاز داشته باشد یا چنانچه یک برنامه کاربردی خاص به پارامترهای ویژه ای که تحت DOS باید تعیین شوند احتیاج داشته باشد هنوز هم به فایلهای CONFIG.SYS وAUTOEXEC.BAT نیاز خواهید داشت. 

نصب ویندوز سریع

روش نصب ویندوز xp بصورت خودکار به طوری که در حین نصب سوالی از کاربر نپرسد حتی شماره سریال ویندوز !                 
همانطوری که میدانید هنگامی که قصد نصب ویندوز را داشته باشید (
Clean Install) در حین نصب لازم است سوالاتی پیرامون نام کامپیوتر ، نوع رزولوشن ، کلمه عبور Admin ، شماره سریال ویندوز و ... را پاسخ دهید. این مساله باعث میشود که شما دقایقی طولانی را کنار سیستم باشید تا نصب ویندوز به مراحل نهایی نزدیک شود. این مساله اگر لازم باشد روزانه تعدا زیادی ویندوز نصب نمایید بیشتر نمایان میشود. با استفاده از ابزاری که در سی دی ویندوز xp در فولدر support قرار داده شده ، آن هم در یک فایل Cab !!! براحتی نسبت به نصب خودکار ویندوز اقدام نمایید.
حال روش کار:
1- در سی دی ویندوز
xp به مسیر زیر مراجعه نمایید :

Support ools

2- فایل deploy.cab را بر روی یکی از درایوهای هارد کپی نمایید. سپس آنرا باز کرده (از طریق برنامه zip magic یا winzip یا در خود ویندوز xp اگر بر روی فایل کلیک کنید باز میشود ) و فایل setupmgr.exe را از درون این فایل cab کپی کرده و درون یک درایو از هارد کپی کنید.
3- بر روی
setupmgr.exe کلیک کنید. پنجره ای باز میشود. آنرا next کنید. سپس گزینه زیر را انتخاب کرده و next کنید :

Create a new answer file

4- مطمئن شوید که گزینه windows unattended installation علامت زده شده باشد سپس next کنید.
5- در این صفحه نوع ویندوز خود را انتخاب نمایید در اینجا ویندوز
xp پروفشیونال را انتخاب میکنیم. سپس next میکنیم.
6- گزینه
Fully automated را علامت بزنید و next کنید.
7- در اینجا صفحه
Distribution Folder نمایش داده میشود. در این صفحه به شما اجازه داده میشود که تعیین نمایید که آیا ویزارد یک پوشه توزیعی را بر روی کامپیوترتان بسازد یا پوشه توزیعی را بر روی درایو شبکه ای که شامل سورس فایلهای ویندوز میباشد ایجاد نماید.
نکته ! ساخت یک پوشه توزیعی نه تنها به شما اجازه نصب ویندوز بدون استفاده از
cd را میدهد بلکه اجازه افزودن فایلهای اضافی (همانند درایورهای قطعات) برای انجام یک نصب سفارشی را میدهد. اگر قصد انجام نصب خودکار را به دفعات زیاد دارید و درایور یا پوشه مناسب را در اختیار دارید میتوانید از این گزینه استفاده کنید.
ما در این آموزش گزینه زیر را انتخاب کرده سپس
next میکنیم :

No, this answer file will be used to install from a CD

8- در این صفحه گزینه مربوط به I Accept … را علامت زده و next میکنیم.
9- حال شما صفحه ای را مشاهده میکنید که با کمی دقت متوجه میشوید گزینه هایی درون این صفحه وجود دارند که شما در حین نصب ویندوز با آن برخورد میکنید. شروع به تکمیل گزینه ها به دلخواه خود کنید.
10- بعد از اتمام کار گزینه
finish را بفشارید. در این قسمت مسیری برای ذخیره تنظیماتی که انجام داده اید در قالب یک فایل پرسیده میشود. شما میبایستی نام فایل را که به صورت UNATTEND.TXT انتخاب شده به WINNT.SIF تغییر دهید و یک نسخه بر روی یک فلاپی ذخیره نمایید.
11- از منوی
FILE گزینه EXIT را انتخاب نمایید.
12- اکنون شما فایل اصلی را ساخته اید. فایل برای انجام عملیات نصب آماده میباشد اما ممکن است قبل از شروع عملیات مایل باشید که نگاهی به محتویات فایل بیندازید. (ممکن است بخواهید پارامترهای اضافه تری را نیز به فایل بیفزایید. در صورت امکان با بخش
HELP برنامه SETUP MANAGER مشورتهای لازم را انجام دهید.) برای این کار فایل ساخته شده را در برنامه NOTEPAD باز نمایید. شما میتوانید خطوط دیگری را نیز برحسب نیاز برای فعالیتهای دیگر مثل تعیین پارتیشن نصب دیسک سخت یا تبدیل سیستم فایل به NTFS معین نمایید. جزئیات مربوط به چگونگی انجام این کارها را میتوانید در داخل فایلهای کمکی موجود در داخل Deploy.CAB مشاهده نمایید. اگر در داخل فایل هرگونه تغییری را اعمال کردید ، فایل را ذخیره کرده و آنرا ببندید
13- فایل را بر روی فلاپی دیسک کپی نماید. سپس کامپیوتر را از طریق سی دی راه اندازی کرده و فلاپی را در داخل درایو فلاپی قرار دهید. ویندوز به صورت خودکار تنظیمات معین شده را مورد استفاده قرار میدهد.

مبانی ویندوز و شبکه ( بخش دوم )

دربخش اول این مقاله به مفاهیم اولیه ویندوز و  شبکه اشاره  گردید . در این بخش به بررسی سیستم های عامل شبکه ای و نحوه پیاده سازی شبکه با استفاده از ویندوز 2000 خواهیم پرداخت .

سیستم های عامل شبکه ای 
هسته یک شبکه ، سیستم عامل شبکه است . همانگونه که یک کامپیوتر بدون استفاده از سیستم عامل ،  قادر به انجام عملیات خود نخواهد بود ، یک  شبکه نیز بدون وجود یک سیستم عامل شبکه ای، قادر به انجام عملیات و ارائه سرویس های مربوطه نخواهد بود. سیستم های  عامل شبکه ای،  سرویس ها و خدمات خاصی را در اختیار کامپیوترهای موجود در شبکه قرار خواهند داد: 

  • هماهنگی لازم در خصوص عملکرد دستگاه های متفاوت در شبکه بمنظور حصول اطمینان از برقراری ارتباط در مواقع ضروری 

  • امکان دستیابی سرویس گیرندگان به منابع شبکه نظیر فایل ها  و  دستگاه های جانبی نظیر چاپگرها و دستگاه های فاکس

  • اطمینان از ایمن بودن داده ها و دستگاههای موجود در شبکه از طریق تمرکز ابزارهای مدیریتی

ویژگی های یک سیستم عامل شبکه ای 
یک سیستم عامل شبکه ای می بایست امکانات و خدمات اولیه زیر را ارائه نماید:

  • ارائه مکانیزم ها ی لازم بمنظور برقراری ارتباط بین چندین دستگاه کامپیوتر برای انجام یک فعالیت

  • حمایت از چندین پردازنده 

  • حمایت از مجموعه ای (کلاستر)  دیسک درایو

  • ارائه امکانات و سرویس های امنیتی در رابطه با حفاظت از داده ها و سایر منابع موجود در  شبکه

  • قابلیت اطمینان بالا

  • تشخیص و برطرف نمودن خطاء با سرعت مناسب

بر اساس نوع سیستم عامل ،  یک نرم افزار شبکه ای می تواند به سیستم عامل ،  اضافه و یا  بصورت یکپارچه با سیستم عامل همراه باشد . نرم افزار سیستم عامل شبکه ای  با مجموعه ای از سیتسم های عامل رایج نظیر : ویندوز 2000 ، ویندوز NT ،  ویندوز 98 ،  ویندوز 95  واپل مکینتاش ،  بصورت یکپارچه همراه می گردد .

پیاده سازی شبکه در ویندوز 2000
 ویندوز 2000 ، با سازماندهی
Domain وسرویس  Active Directory ، نیاز سازمان ها و موسسات بمنظور ارتباط کاربران و شبکه ها با یکدیگر را فراهم می نماید. برپاسازی یک شبکه مبتنی بر ویندوز 2000 ، بهبود در اشتراک اطلاعات ، انجام موثرتر عملیات ، ایجاد زیرساخت مناسب ارتباطی ، ارائه سرویس های ارتباطی مطلوب را برای سازمان ها بدنبال خواهد داشت .

ویژگی های یک Domain
 
Domain ، یک گروه بندی منطقی از کامپیوترهای شبکه ای است که از یک محل مشترک بمنظور ذخیره سازی اطلاعات امنیتی ، استفاده می نمایند. استفاده از  Domain  ، تمرکز در مدیریت منابع شبکه را بدنبال خواهد داشت . بدین ترتیب پس از ورود کاربران به شبکه و تائید صلاحیت  آنان ، زمینه استفاده از منابع به  اشتراک گذاشته شده  در سایر کامپیوترهای موجود در Domain ، با توجه به مجوزهای تعریف شده ، فراهم می گردد .  Domain  ، درمفهوم مشابه Workgroup
بوده ولی امکانات و ویژگی های بمراتب بیشتر و مفیدتری را ارائه می نماید :

  • Single logon  . با استفاده از Domain ، فرآیند ورود به شبکه صرفا" یک مرتبه انجام و کاربران قادر به استفاده از منابع متفاوت موجود درشبکه شامل: فایل ها ، چاپگرها  و برنامه ها ، خواهند بود. Account مربوط به  تمامی کاربران در یک مکان متمرکز ، ذخیره می گردد.

  • Single User Account . کاربران  یک Domain ، صرفا" از یک Account بمنظور دستیابی به منابع موجود بر روی کامپیوترها ، استفاده خواهند کرد ( بر خلاف workgroup  که نیازمند یک account مجزاء بمنظور دستیابی به  هر یک از کامپیوترها  است ) .

  • مدیریت متمرکز .  با استفاده از Domain ، امکان مدیریت متمرکز فراهم خواهد شد . Account مربوط به کاربران و منابع اطلاعاتی موجود، از طریق یک نقطه متمرکز ، مدیریت خواهد شد.

  • Scalability . استفاده از Domain ، امکان گسترش و توسعه در شبکه را افزایش خواهد داد . روش دستیابی کاربران به منابع و نحوه مدیریت منابع در یک شبکه بسیار بزرگ مشابه یک شبکه کوچک خواهد بود .

مزایای استفاده از Domain 
استفاده از
Domain
، دارای مزایای زیر است :

  • سازماندهی اشیاء . اشیاء موجود در یک Domain را می توان  بر اساس واحدهای موجود در یک سازمان ، سازماندهی نمود. یک واحد سازماندهی شده شامل  مجموعه ای از اشیاء در یک Domain است . اشیاء، نشاندهنده عناصر فیزیکی موجود در یک شبکه بوده و می توانند به  یک و یا بیش از یک Domain مرتبط گردند.کاربران ، گروه هائی از کاربران، کامپیوترها ، برنامه ها ، سرویس ها ، فایل ها و لیست های توزیع شده نمونه هائی در این زمینه می باشند . مثلا" یک Domain در شبکه مربوط به یک سازمان ، می تواند  بمنظور تسهیل در مدیریت منابع موجود در شبکه،  منابع هر یک از دپارتمان های موجود در سازمان را در یک واحد ،سازماندهی نماید. هر واحد ، می تواند توسط کاربران  خاصی در دپارتمان مربوطه مدیریت گردد. بدین ترتیب مدیر شبکه قادر به مدیریت گروه هائی از واحدها در مقابل منابع انفرادی ، خواهد بود .

  • مکان یابی آسان اطلاعات . بموازات نشر( تعریف و پیکربندی )  یک منبع ، امکان دستیابی آن از طریق لیستی از اشیاء Domain ، برای کاربران فراهم و بدین ترتیب مکان یابی یک منبع بسادگی انجام و زمینه استفاده از آن فراهم خواهد شد. مثلا" در صورتیکه چاپگری در یک Domain نصب شده باشد ، کاربران قادر به دستیابی به آن از طریق لیستی از اشیاء موجود در Domain مربوطه ، خواهند بود. در صورتیکه چاپگر در Domain مربوطه تعریف نشده باشد ، کاربران شبکه جهت استفاده از آن می بایست از محل نصب آن آگاهی داشته باشند.

  • دستیابی آسان و موثر . تعریف و بکارگیری یک سیاست گروهی در ارتباط با یک  Domain ،نحوه دستیابی کاربران به منابع تعریف شده در Domain را  مشخص می نماید. بدین ترتیب استفاده از منابع بهمراه رویکردهای امنیتی ، یکپارچه می گردد .

  • تفویض اختیار. با استفاده از Domain ، امکان واگذاری  مسئولیت مربوط به مدیریت اشیاء در تمام Doamin و یا در بخش هائی خاص ، فراهم می گردد .

ساختار  Domain
هر
Domain توسط یک کنترل کننده Domain ، مدیریت می گردد. بمنظور تسهیل در مدیریت چندین Domain ،  می توان Domain
ها  را  در ساختارهائی با نام درخت (Tree)  و جنگل (Forest) ، گروه بندی کرد .

کنترل کننده Domain
کامپیوتری  که برروی آن سرویس دهنده ویندوز 2000 اجراء و مدیریت 
Domain را برعهده می گیرد، کنترل کننده Domain نامیده می شود.  کنترل کننده Domain ، تمام عملیاتی امنیتی مرتبط با کاربران و Domain
را مدیریت می نماید. 

درخت
درخت
، یک سازماندهی سلسله مراتبی از Domain های ویندوز 2000 بوده که یک نام را به اشتراک می گذارند . زمانیکه یک Domain به یک درخت موجود اضافه می گردد، بعنوان یک subDomain ، در نظر گرفته می شود. SubDomain ، یک Child domain  نیز نامیده شده و Domain اضافه شده از طریق Parent domain مربوطه شناخته می گردد . پس از اینکه Child Domain به درخت ملحق گردید نام Domain آن به نام Domain parent اضافه می شود. مثلا" زمانیکه یک Domain با نام Tehran به یک درخت موجود ملحق و بعنوان یک Chid Domain از Domain با نام Citys.com  مطرح گردد ، نام Domain مربوطه، بصورت Tehran.Citys.com خواهد بود. 

جنگل
جنگل، شامل گروهی از درخت ها بوده که در مقابل استفاده از یک نام مشترک، از یک پیکربندی مشترک استفاده می نمایند. بمنظور مراجعه به جنگل ، بصورت پیش فرض از نام ریشه درخت و یا اولین درختی که در جنگل ایجاد می گردد ، استفاده می گردد . مثلا" در صورتیکه
Citys.com اولین Domain در اولین درخت باشد و درخت دیگر به آن ملحق تا یک جنگل را ایجاد نمایند نام، جنگل Citys.com خواهد بود.

ویژگی های Active Directory
 
Active Directory ، سرویس دایرکتوری ویندوز 2000 است . Active Directory ،  اطلاعات مربوط به اشیاء شبکه را ذخیره و با ارائه یک ساختار سلسله مراتبی، زمینه سازماندهی Domain ها و منابع را بسادگی فراهم می نماید . بدین ترتیب کاربران بسادگی قادر به مکانیابی منابع شبکه نظیر فایل ها و چاپگرها ، خواهند بود . Active Directory دارای ویژگی های متعددی است :

  • Active Directory ، باعث سازماندهی دایرکتوری به  بخش هائی خواهد شد که امکان ذخیره سازی حجم بالائی از اشیاء را فراهم می آورد . دستاورد ویژگی فوق ، توسعه   Active Directory ، همزمان با رشد یک سازمان ، خواهد بود. بدین ترتیب،  امکان رشد شبکه  ای با صرفا" یک سرویس دهنده و کمتر از یکصد شی به شبکه ای با هزاران سرویس دهنده و میلیون ها شی فراهم خواهد شد .

  • Active Directory ،یک مکان متمرکز بمنظور جمع آوری و توزیع اطلاعات در رابطه با اشیاء موجود در شبکه شامل کاربران، گروهها و چاپگرها بوده و امکان یافتن و استفاده از اطلاعات را آسان خواهد کرد.

  • تدابیر امنیتی در ارتباط با  Active Directory ، پیش بینی  و زمینه تحقق آن با استفاده از Log on و کنترل دستیابی به اشیاء موجود در دایرکتوری، فراهم می گردد . پس از فرآیند ورود به شبکه ( یک log on به یک شبکه ) ، مدیران شبکه قادر به مدیریت داده ها ی موجود در دایرکتوری می گردند . کاربران تائید شده نیز امکان  دستیابی به منابع موجود درشبکه را از هر مکانی بدست خواهند آورد.

مزایای Active Directory
استفاده از
Active Directory ، دارای مزایای زیر است :

  • کاهش مجموع هزینه مالکیت . پارامتر فوق به هزینه مالکیت یک کامپیوتر، مرتبط می گردد . هزینه فوق شامل : هزینه های مربوط به نگهداری ، آموزش ،پشتیبانی فنی ، ارتقاء سخت افزار و نرم افزار است . Active Directory، با پیاده سازی سیاست ها باعث کاهش برخی از هزینه های فوق ،می گردد . بکارگیری یک سیاست بهمراه Active Directory ، این امکان را فراهم می آورد که پیکربندی محیط  مربوطه  ونصب  برنامه ها ، از یک مکان مرکزی ، انجام شود. بدین ترتیب زمان مربوط به پیکربندی و نصب برنامه ها بر روی هر کامپیوتر ،کاهش پیدا خواهد کرد . 

  • مدیریت انعطاف پذیر . واحد های سازمانی درون یک Domain  را می توان بر اساس سیاست های موجود در Active Directory ، تقسیم نمود. بدین ترتیب ، واحدهای سازمانی ،امکان تعریف کاربرانی خاص بمنظور مدیریت بخش هائی خاص از شبکه را بدست می آورند .

  • Scalability . با استفاده از  Active Directory ، امکان استفاده از سرویس های دایرکتوری  برای سازمان ها ئی با ابعاد متفاوت، فراهم می گردد .

  • تسهیل در مدیریت .  Active Directory ، ابزارهای مدیریتی خاصی را ارائه که  مدیران شبکه، با استفاده از آنان  قادر به مدیریت منابع موجود در شبکه خواهند بود.

دستیابی به یک شبکه ویندوز 2000
برای استفاده از منابع تعریف شده در شبکه، کاربران می بایست  فرآیند
Log on را دنبال نمایند . در زمان فرآیند Log on ،  ویندوز 2000 اعتبار و هویت یک کاربر را تائید خواهد کرد . فرآیند فوق ، این اطمینان را بوجود خواهد آورد که صرفا" کاربران معتبر و تائید شده،  قادر به دستیابی منابع موجود بر روی یک کامپیوتر در شبکه ،خواهند بود . پس از اتمام موفقیت آمیز فرآیند ورود به شبکه  ،زمینه استفاده از منابع موجود در تمام شبکه با توجه به سیاست های تعریف شده، فراهم می گردد . کاربران  برای دستیابی به منابع در یک شبکه مبتنی بر ویندوز 2000 ،  به یک Account ، نیاز خواهد داشت . Account ، شامل اطلاعات مرتبط با یک کاربر بوده و شامل نام و رمز عبور است . در صورتیکه کامپیوتر یک Memeber Domain باشد ، Account مربوط به کاربر، امکان log on نمودن به کامپیوتر بصورت محلی و یا به Domain ( اما نه هر دو ) را  فراهم و زمینه استفاده از منابع موجود در شبکه با توجه به  مجوزهای تعریف شده ، فراهم خواهد شد . در صورتیکه کامپیوتر عضوی از یک Workgroup باشد ، Account مربوطه ، امکان Log on  نمودن کاربر را صرفا" به کامپیوتر محلی، فراهم می نماید. ( چون Account کاربر صرفا" بر روی بانک اطلاعاتی امنیتی همان کامپیوتر محلی ذخیره شده است ) . برای ورود به یک Domain ویندوز 2000 ، کاربران می بایست ، نام خود را بصورت خاصی وارد نمایند .نام فوق، شامل نام  کاربر بوده که بدنبال آن از کاراکتر @ و یک پسوند استفاده می گردد. پسوند فوق، Domain مربوطه ای است که account بر روی آن وجود دارد .  User1@Citys.com نمونه ای  در این زمینه است .

ورود به شبکه
برای ورود به ویندوز 2000 ، کلیدهای
CTRL+ALT+DELETE بصورت همزمان فشرده و فعال می گردند. پس از فعال نمودن کلیدهای فوق جعبه محاوره ای ورود به ویندوز فعال می گردد . با تایپ نام و رمز عبور در محل مربوطه ، فرآیند  ورود به شبکه انجام خواهد شد. در ادامه می توان با کلیک نمودن برروی کامپیوترهای محلی و یا Domain مربوطه در لیست به هر یک از آنها log on نمود.

مشاهده Network Membership
پس از ورود به شبکه، می توان با استفاده از جعبه محاوره ای
System Properties ، از نوع عضویت در شبکه آگاهی پیدا کرد : یک Domain  و یا یک Workgroup  . برای دستیابی به جعبه محاوره ای System Properties مراحل زیر را دنبال نمائید :
از طریق
Desktop  بر روی آیکون MyComputer  کلیک سمت راست نموده و در ادامه برروی گزینه Properties کلیک نمائید.  جعبه محاوره ای System Properties ، دارای پنج Tab  است . بر روی Network Identification کلیک تا مشخص گردد که کامپیوتر مورد نظر به یک Doamin و یا Workgroup تعلق دارد .

قفل کردن کامپیوتر در ویندوز XP‌

می‌توانید با استفاده از روشـــــی آسان، کامپیوتر خــود را قفل کنیـــــد؛ منظور از قفل کردن کامپیوتر، بردن ویندوز به حالتی است کـــــه برای استفاده از آن مجبـــور باشید مانند زمان راه اندازی سیستم، کلمه عبـــــور خـــــود را وارد کنید، با این تفاوت که این فرآیند بسیار سریع انجام می‌شود. در ادامه به شما خواهیم آموخت کـــــه چگونه می‌توان آیکنی بدین منظور در دسک تاپ ایجاد کرد.

در ناحیـــــه‌ای خـــــالی از دسک‌تاپ سیستم خـــــود، کلیـــــک راست کرده و سپس از منـــــوی ظاهـــــر شـــــده، به ترتیب گزینه‌های New ‌و Shortcut‌ را انتخاب کنید.حــــــــــال در کــــــــــادر محــــــــــاوره‌ای Create Shortcut‌ و در فیلـــــد Type the location of the item عبــــــــــارت rundll32user32.dll,LockWorkStation را تـــــایپ کنید.

سپـــــــــــــــس روی دکمــــــــــه Next ‌‌کلیــــــــــک کنیــــــــــد. در فیـــــلـــــد Type a name for this shortcut‌، عبـــــارت Lock‌ یا هر عبارت مورد نظر دیگر را تایپ کرده و پس از آن روی دکمه Finish‌‌ کلیک کنید.
با انجام ایـــــن کار آیکنی در دسک‌تاپ شما ایجـــــاد خواهد شد. هـــــر زمان که روی این آیکن دابل کلیک کنید، دسک‌تاپ شما قفل شده و برای ورود مجدد به سیستم بایـــــد دکمه‌های Ctrl + Alt + Del‌‌ را فشرده و کلمه عبور خود را وارد کنید.

غیر فعال کردن CD Burning ( در ویندوز XP )

از این تنظیمات برای غیر فعال کردن ویژگی داخلی CD Burning ویندوز استفاده می شود. رجیستری را باز کرده و کلید زیر را در آن پیدا کنید . یک مقدار DWORD جدید ایجاد کرده و نام "NoCDBurning" را به آن بدهید. سپس مقدار آن را برابر با مقادیر زیر قرار دهید . تعداد اسناد اخیری کنید که مایل به نشان دادن آنها هستید . از رجیستری خارج شوید و برای اعمال تغییرات مجددا سیستم را راه اندازی نمائید . (Default) REG_SZ (value not set) NoCDBurning REG_DWORD 0x00000001 (1) HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion... Registry Settings User Key: [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPolicies Explorer] System Key: [HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionPolicies Explorer] Value Name: NoCDBurning Data Type: REG_DWORD (DWORD Value) Value Data: (0 = Allow CDR, 1 = Disable CDR) توجه: تغییر در رجیستری می تواند سبب ایجاد مشکلات جدی در ویندوز شود و حتی در برخی مواقع کاربران را وادار به نصب مجدد سیستم عامل می کند. از این رو به شما کاربر محترم توصیه می کنیم در صورتی که از توانایی و تجربه لازم و نیز اطلاعات کافی در خصوص ویندوز برخوردارنیستید، حتی الامکان از بکار بردن این دستورات خودداری نمائید. شایان ذکر است که ما هیچ تعهدی نسبت به رفع مشکلات حاصله نخواهیم داشت.

هش چیست؟

هش (Hash, Hash Code, Digest, Message Digest هم نامیده می شود) را می توان به صورت اثر انگشت دیجیتالی یک داده در نظر گرفت. با این روش شما می توانید رشته ای اندازه-ثابت (fixed length) از یک داده به دست آورید که با روش های ریاضی به صورت "یک طرفه" رمزنگاری شده است. کشف رشته اصلی از رشته هش آن (عملیات معکوس) به صورت کارا تقریبا  غیر ممکن است. نکته دیگر اینکه هر داده یک رشته هش شده کاملا  منحصر به فرد ایجاد می کند( احتمال یکی شدن رشته های هش دو رشته متفاوت در الگوریتم MD5 یک در 3.4028236692093846346337460743177e+38 می باشد..  این خواص ، هش کردن را به روشی کارا و ایده آل برای ذخیره سازی کلمات عبور در برنامه های شما تبدیل می کند. چرا؟ برای این که حتی اگر یک نفوذگر(Hacker) بتواند به سیستم و بانک اطلاعاتی شما نفوذ کند و بخشی از اطلاعات شما را به دست آورد (شامل کلمات عبور هش شده) نمی تواند کلمات عبور اولیه را از روی آن ها بازیابی کند.

 

 

یکی از دو خصوصیت الگوریتم های   HASHاینه که معکوس پذیر نیستند! دومی اینه که هرگز دو ورودی متفاوت به خروجی یکسان منجر نمی شوند. هر یک از این دو خصوصیت اگر نقض بشه می گیم الگوریتم شکسته!!!

 

 

شناسایی اعضا با استفاده از Hash  

تا کنون نشان داده ایم که بازیابی کلمه عبور اصلی از روی رشته هش تقریبا غیر ممکن است ، خب چگونه برنامه های ما تشخیص دهند که کلمه عبور وارد شده توسط کاربر صحیح است ؟ به سادگی ! با تولید رشته هش کلمه عبور وارد شده توسط کاربر و مقایسه آن با رشته هش ذخیره شده در رکورد  بانک اطلاعاتی مربوط به کاربر می توانید متوجه شوید که آیا دو رشته با هم برابرند یا نه. بگذارید با ذکر یک مثال این بحث را ادامه دهیم.

 

 

 

 

 

 

 

Hashes are "digests", not "encryption"

Hash یک عمل خلاصه سازی (digest ) را روی جریان  ورودی انجام می دهد نه یک عمل رمز نگاری (encryption) .

Encryption داده را از یک متن صریح (Clear text) به یک متن برمز در آورده تبدیل می کند (Cipher text). encryption  ک عمل دو طرفه می باشد . که هرچه حجمClear text  بیشتر باشد حجم Cipher text نیز بیشتر می شود.

که این ارتباط در شکل زیر به خوبی بیان شده است:

 

 Encryption - a two-way operation

Hashe ها جریان داده ورودی را به یک خلاصه کوچک تبدیل می کنند. که این یک عمل یک طرفه(غیر قابل بازگشت) می باشد. و  جریان داده ورودی آنها با هر حجمی که باشد خروجی یک مقدار ثابت میشود.

شکل بعدی این ارتباط را در خلاصه سازی توسط الگوریتم  MD5  به خوبی نشان می دهد.

 

 

Hashing - a one-way operation

 

 

موارد استفاده از Hash  ها

Hash ها کلا موارد استفاده کمی دارند که ما در ادامه بحث آن ها را بیان می کنیم:

1. تشخیص درستی یک فایل Verifying file integrity

برای مثال زمانی که یک فایل با حجم بالا را دانلود می نماییم می توانیم با به دست آوردن مقدار MD5 آن فایل توسط دستور md5sum  و مقایسه آن  با مقدار Md5  داده شده توسط سایت مورد  نظر  از درستی فایلمان اطمینان حاصل کنیم.

2.hash  کردن کلمه عبور Hashing passwords

قبلا به طور مفصل بحث شد.

 

3. نشانه گذاری  اسناد به روش digitally (امضاهای digitally)

که نحوه انجام ان به وضوح در شکل زیر نشان داده شده است:

 

 

 

 

Collision (تصادم) در Hash

زمانی که مقدار  Hash  دو ورودی متفاوت یکسان باشند می گوییم Collision  رخ داده است.

 

اما تا کنون هیچ موردی از Collision دیده نشده است . این امر از این حقیقت  ناشی می شود که تعداد مقادیر یک الگوریتم  hash بسیار زیاد می باشند.برای مثال یک Hash  128 بیتی میتواند 3.4 x 1038

مقدار ممکن داشته باشد.که معادل 340,282,366,920,938,463,463,374,607,431,768,211,456 میباشد.

 

انواع هش

  • MD4 (128 bits, obsolete)
  • MD5 (128 bits)
  • RIPEMD-160 (160 bits)
  • SHA-1 (160 bits)
  • SHA-256, SHA-384, and SHA-512 (longer versions of SHA-1, with slightly different designs)

 

انواع مختلفی از الگوریتم های قوی هش کردن برای استفاده در برنامه های کاربردی موجود هستند، محبوب ترین آنها که مورد استفاده برنامه نویسان هستند MD5 و SHA-1(Secure hash algorithm)می باشند. سیستم های قدیمی تر از( DES(Data Encryption Standard استفاده می کردند. این روش 56 بیتی دیگر  یک روش قوی هش کردن محسوب نمی گردد. ، الگوریتم های قوی تری مانند SHA-256 و SHA-512  برای موارد خاص مانند امضاهای دیجیتالی توصیه می گردد ولی برای هش کردن کلمات عبوردر برنامه های امروزی SHA-1 هنوز سطح امنیت بسیار خوبی را فراهم می کند.

 

Hash Table

همانطور که در جستجوی دودویی دیده شد با استفاده از یک ساختمان داده به خصوص به اسم درخت جستجوی دودویی کارایی جستجو را بهبود بخشید یم.

 رسیدیم. O(logn) به جستجوی دودویی با O(n) در واقع از جستجوی خطی با

حال می خواهیم یک ساختمان داده جدید به نام جدول هش را معرفی کنیم که کارایی عمل جستجو را تا افزایش می دهد.O(1)

یک جدول هش از دو قسمت تشکیل شده : یک آرایه (جدول واقعی جایی که دادهایی که جستجو می شود  ) که به آن تابع هش می گویند.mapping function در آن ذخیره می شود ) و یک تابع  نگاشت (

اندیس های آرایه که  (integer space ) تابع هش نگاشتی است از فضای ورودی به فضای اعداد صحیح را مشخص می کند . به عبارت دیگر تابع هش روشی را فراهم می کند  برای اختصاص دادن اعداد به داده های ورودی به گونه ای که سپس داده  ورودی می تواند در اندیس آرایه مطابق باعدد تخصیص داده ذخیره شود.در ادامه مثالی در این رابطه  بیان می کنیم:

مثال را آغاز می کنیم. یعنی از رشته ها به عنوان داده هایی ابتدا با یک آرایه جدول هش از رشته ها که ذخیره و جستجو می شوند استفاده می کنیم . اندازه جدول هش را در این مثال 12 می گیریم.

 

The empty hash table of strings

در مرحله بعد ما به یک تابع هش نیاز دارم. راههای زیادی برای ساختن یک تابع هش وجود دارد. در حال حاضر یک تابع هش ساده را در نظر می گیریم. که یک رشته را به عنوان ورودی میگیرد. مقدار هش برگشتی از تابع برابر مجموع  کاراکتر های اسکی است که رشته ورودی را می سازند به پیمانه اندازه جدول:

int hash(char *str, int table_size)
{
               int sum;
 
               /* Make sure a valid string passed in */
               if (str==NULL) return -1;
 
               /* Sum up all the characters in the string */
               for( ; *str; str++) sum += *str;
 
               /* Return the sum mod the table size */
               return sum % table_size;
}

  اجرا می کنیم که مقدار 3 حاصل می شود.("Steve",12) تابع هش را باپارامتر های

.  را در جدول ذخیره می کنیم Steve  حال رشته

The hash table after inserting "Steve"

 

   اجرا میکنیم("Spark",12) تابع هش را با پارامتر های ."Spark"  بیایید رشته دیگری را امتحان کنیم:

که عدد 6 حاصل می شود. سپس آن را نیز در جدول ذخیره میکنیم.

The hash table after inserting "Spark"

  اجرا میکنیم . که این بار نیز مقدار 3 حاصل می شود.("Notes",12)  حال تابع هش را با پارامتر های

را نیز در جدول درج می کنیم. Notesرشته

 

A hash table collision

مشاهده می شود که  دو ورودی متفاوت مقدارهش  یکسانی دارند و هر دو عنصر باید در یک مکان در آرایه درج شوند که این مساله غیر ممکن است . و همانطور که قبلا نیز ذکر شد به این مساله تصادم گفته (linear probing) می شود. در رابطه با تصادم الگوریتم های زیادی وجود دارد از قبیل اکتشاف خطی  و زنجیرسازی جداگانه.

بررسی می کنیم. ر ا  (Separate Chaining) که ما در اینجا زنجیره سازی جداگانه

زنجیره سازی جداگانه به مقدار کمی تغییر در ساختمان دادهمان نیاز دارد. به جای ذخیره سازی مستقیم داده ها در آرایه آنها را در لیست های پیوندی ذخیره می کنیم. هر عنصر آرایه به یکی از این لیست های پیوندی اشاره می کند. زمانی که مقدار هش یک ورودی به دست آمد آن عنصر به لیست پیوندی که در اندیس مورد  نظر در آرایه  وجود دارد اضافه  می شود . از ان جایی که  لیست های پیوندی محدودیت در طولشان ندارند مساله تصادم ها حل شده به حساب می آید. اگر دو داده متفاوت مقدار هش یکسانی داشته باشند هر دوی آنها در لیست پیوندی ذخیره می شوند.

بیایید مثال بالا را این بار با ساختمان داده تغییر یافته مان بررسی نماییم :

Modified table for separate chaining

 

 

دوباره  Steve را با مقدار هش 3 به جدولمان اضافه میکنیم:

After adding "Steve" to the table

هم چنین Spark با مقدار هش 6 را نیز به جدولمان اضافه می کنیم:

After adding "Spark" to the table

حال Notes با مقدار هش 3 (همانند مقدار هش Steve) را اضافه می کنیم:

Collision solved - "Notes" added to table

 

مراحل جستجو مشابه با عمل درج در جئول می باشد. ما مقدار هش داده ای را که می خواهیم جستجو شود  را به دست می آوریم. سپس به ان مکان از آرایه می رویم. لیستی که از آن مکان سرچشمه می گیرد (آغاز میشود) را بررسی می کنیم. و می بینیم که چیزی که به دنبال آن هستیم در لیست وجود دارد یا نه .

=>تعداد مراحل O(1) می باشد.

زنجیره سازی جداگانه Separate chaining)  ) به ما این امکان را می دهد که مساله تصادم را در یک روش ساده و قدرتمند حل نماییم . با این حال هنوز مشکلاتی وجود دارد . حالتی را فرض کنید که تمام داده های ورودی دارای یک مقدار هش باشند. در این مورد برای جستجوی یک داده باید یک جستجوی خطی با O(n) در لیست  پیوندی انجام دهیم .  پس در بدترین حالت این روش O(n) را خواهیم داشت که احتمال آن بسیار کم است . در حال که در بهترین حالت و حالت متوسط O(1) را خواهیم داشت!

آموزش زبان #C اول

در این درس با ارائه چند برنامه و مثال ساده به طرز کار زبان C

# می‌پردازیم. اهداف این درس عبارتند از :

 

لیست 1-1، یک برنامة ساده با عنوان Welcome در زبان C#

// Namespace اعلان

using  System;

 

// کلاس آغازین برنامه

class WelcomeCSS

  {

   // آغاز کار اجرای برنامه

   public static void Main()

    {

     // نوشتن متن در خروجی

     Console.WriteLine("Welcome to the C# Persian Tutorial!");

    }

  }

برنامة لیست 1-1 دارای 4 پارامتر اصلی است، اعلان Namespace، کلاس، متد Main() و یک دستور زبان C#.

در همین جا باید به یک نکته اشاره کنم، برای زبان C# همانند بیشتر زبانهای برنامه‌سازی دو نوع کامپایلر وجود دارد. یک نوع کامپایلر که به کامپایلر Command Line معروف است و نوع دیگر کامپایلر Visual است. کامپایلر‌های Command Line محیطی شبیه به محیط DOS دارند و با دادن یک سری دستورات به اجرا در می‌آیند. کامپایلرهای Visual محیطی همانند ویندوز دارند که با دارا بودن محیط گرافیکی و ابزارهای خاص، برنامه‌نویس را در امر برنامه‌سازی کمک می‌کنند. از نمونه‌های هر یک از کامپایلرها، می‌توان به Microsoft C# Command Line Compiler که یک کامپایلر Command Line و Microsoft Visual C# که یک کامپایلر Visual است، اشاره کرد. البته در حال حاضر بیشتر از کامپایلرهای ویژوال استفاده می‌شود.

من سعی می‌کنم در آینده به توضیح محیط Visual C# و Visual Studio.Net بپردازم. اما فعلاً برای اجرای برنامه‌ها می‌توانید از Visual Studio.Net استفاده کنید. پس از نصب آن، وارد محیط C# شده و در قسمت انتخاب برنامة جدید گزینة Console را جهت اجرای برنامه‌ها انتخاب نمایید.

برای این درس، فعلاً به توضیحات بیشتر دربارة محیط ویژوال نمی‌پردازم اما در آینده به توضیح کامل محیط Visual Studio.Net خواهم پرداخت.

برای اجرای کد بالا در صورتیکه از محیط ویژوال استفاده می‌کنید باید بر روی دکمة Run کلیک کنید و در صورتیکه کامپایلر Command Line دارید با دستور  زیر می‌توانید برنامه را اجرا کنید : csc Welcome.cs

پس از اجرای برنامه، کامپایلر برای شما یک فایل قابل اجرا(Executable) تحت نام Welcome.exe تولید می‌کند.

نکته : در صورتیکه از Visual Studio.Net(VS.Net) استفاده کنید، پس از اجرای برنامه، یک صفحه برای نمایش خروجی به سرعت باز شده و بسته می‌شود و شما قادر به دیدن خروخی نخواهید بود. برای اینکه بتوانید خروجی برنامه را ببینید، در انتهای برنامه دستور زیر را وارد نمایید :

Console.ReadLine();

 استفاده از این دستور باعث می‌شود تا برنامه منتظر دریافت یک ورودی از کاربر بماند، که در این حالت شما می‌توانید خروجی برنامه خود را دیده و سپس با زدن کلید Enter برنامه را خاتمه دهید.

 

نکتة دیگری که در مورد زبان برنامه‌نویسی C# باید مورد توجه قرار دهید اینست که این زبان Case Sensitive است، بدین معنا که به حروف کوچک و بزرگ حساس است یعنی برای مثال ReadLine با readLine متفاوت است به طوریکه اولی جزو دستورات زبان C# و دومی به عنوان یک نام برای متغیر یا یک تابع که از طرف کاربر تعریف شده است در نظر گرفته می‌شود.

 

اعلان Namespace به سیستم اعلان می‌نماید که شما از توابع کتابخانه‌ای  System  جهت اجرای برنامه‌ها خود استفاده می‌نمایید. دستوراتی مانند WriteLine و ReadLine جزو توابع کتابخانه‌ای System می‌باشند. اغلب دستورات و توابع مهم و کلیدی استفاده از کنسول ورودی/خروجی در این کتابخانه می‌باشد. در صورتیکه در ابتدای برنامه از using System استفاده نکنید، یابد در ابتدای هر یک از دستورات برنامه که مربوط این کتابخانه است، از کلمة System استفاده نمایید. بعنوان مثال در صورت عدم استفاده از using System باید از دستور System.Console.WriteLine() به جای Console.WriteLine() استفاده نمایید.

 

تعریف کلاس،Class Welcome CSS، شامل تعریف داده‌ها(متغیرها) و متدها جهت اجرای برنامه است. یک کلاس، جزو معدود عناصر زبان C# است که بوسیلة آن می‌توان به ایجاد یک شی (Object) از قبیل واسط‌ ها (Interfaces) و ساختارها(Structures)، پرداخت. توضیحات بیشتر در این زمینه در درس‌های آینده ذکر می‌شوند. در این برنامه کلاس هیچ داده‌ و متغیری ندارد و تنها شامل یک متد است. این متد، رفتار(Behavior) این کلاس را مشخص می‌کند.

 

متد درون این کلاس بیان می‌کند که این کلاس چه کاری را پس از اجرا شدن انجام خواهد داد. کلمة کلیدی Main() که نام متد این کلاس نیز می‌باشد جزو کلمات رزرو شده زبان C# است که مشخص می‌کند برنامه از کجا باید آغاز به کار نماید. وجود متد Main() در تمامی برنامه‌های اجرایی ضروری است. در صورتیکه یک برنامه حاوی متد Main() نباشد بعنوان توابع سیستمی همانند dll های ویندوز در نظر گرفته می‌شود.

قبل از کلمة Main() کلمه دیگری با عنوان static آورده شده است. این کلمه در اصطلاح Modifier می‌گویند. استفاده از static برای متد Main() بیان می‌دارد که این متد تنها در در همین کلاس قابل اجراست و هیچ نمونه‌ای (Instance) دیگری از روی آن قابل اجرا نمی‌باشد. استفاده از static برای متد Main() الزامی است زیرا در ابتدای آغاز برنامه هیچ نمونه‌ای از هیچ کلاس و شی‌ای موجود نمی‌باشد و تنها متد Main() است که اجرا می‌شود. (در صورتیکه با برخی اصطلاحات این متن از قبیل کلاس، شی، متد و نمونه آشنایی ندارید، این به دلیل آنست که این مفاهیم جزو مفاهیم اولیة برنامه‌نویسی شی‌گرا (OOP) هستند. سعی می‌کنم در درس‌های آینده به توضیح این مفاهیم نیز بپردازم، ولی فعلاً در همین حد کافی می‌باشد.)

 

هر متد باید دارای یک مقدار بازگشتی باشد، یعنی باید مقداری را به سیستم بازگرداند، در این مثال نوع بازگشتی void تعزیف شده است که نشان دهنده آنست که این متد هیچ مقداری را باز نمی‌گرداند یا به عبارت بهتر خروجی ندارد. همچنین هر متد می‌تواند دارای پارامترهایی نیز باشد که لیست پارامترهای آن در داخل پرانتزهای جلوی آن قرار می‌گیرد. برای سادگی کار در این برنامه متد ما دارای هیچ پارامتری نیست ولی در ادامة همین درس به معرفی پارامترها نیز می‌پردازم.

 

متد Main() رفتار و عمل خود را بوسیله Console.WriteLine(…) مشخص می‌نماید. Console کلاسی در System است و WriteLine() متدی در کلاس  Console. در زبان C# از اپراتور "." (نقطه dot) جهت جداسازی زیرروتین‌ها و زیرقسمتها استفاده می‌کنیم. همانطور که ملاحظه می‌کنید چون WriteLine() یک متد درون کلاس Console است به همین جهت از "." جهت جداسازی آن استفاده کرده‌ایم.

 

در زبان ‍C#، برای قرار دادن توضیحات در کد برنامه از // استفاده می‌کنیم. بدین معنا که کامپایلر در هنگام اجرای برنامه توجهی به این توضیحات نمی‌کند و این توضیحات تنها به منظور بالا بردن خوانایی متن و جهت و کمک به فهم بهتر برنامه قرار می‌گیرند. استفاده از // تنها در مواردی کاربرد دارد که توضیحات شما بیش از یک خط نباشد. در صورت تمایل برای استفاده از توضیحات چند خطی باید در ابتدای شروع توضیحات از /* و در انتها آن از */ استفاده نمایید. در این حالت تمامی مطالبی که بین /*  */ قرار می‌گیرند به عنوان توضیحات (Comments) در نظر گرفته می‌شوند.

 

تمامی دستورات (Statements) با ";"، سمی کولون، پایان می‌یابند. کلاس‌ها و متد‌ها با } آغاز شده و با { خاتمه می‌یابند. تمامی دستورات بین { } یک بلوک را می‌سازند.

 

بسیاری از برنامه‌ها از کاربر ورودی دریافت می‌کنند. انواع گوناگونی از این ورودی‌ها می‌توانند به عنوان پارامتری برای متد Main() در نظر گرفته شوند. لیست 2-1 برنامه‌ای را نشان می‌دهد نام کاربر را از ورودی دریافت کرده و آن را بر روی صفحه نمایش می‌دهد. این ورودی به صورت پارامتری برای متد Main() در نظر گرفته شده است.

 

لیست 2-1 : برنامه‌ای که ورودی را از کاربر، بعنوان پارامتر Main()، دریافت می‌کند.

// Namespace اعلان

using System;

// کلاس آغازین برنامه

class NamedWelcome

  {

   // آغاز اجرا برنامه

   public static void Main(string[] args)

     {

      // نمایش بر روی صفحه

      Console.WriteLine("Hello, {0}!", args[0]);

      Console.WriteLine("Welcome to the C# Persian Tutorial!");

     }

  }

توجه داشته باشید که این برنامه، ورودی را به صورت Command-Line دریافت می‌کند و در هنگام اجرای برنامه باید ورودی را در Command-Line وارد نمایید. در صورتیکه ورودی را وارد ننمایید برنامه دچار مشکل شده و متوقف خواهد شد.

 

همان طور که در لیست 2-1 مشاهده می‌نمایید، پارامتر متد Main() با عنوان args مشخص شده است. با استفاده از این نام در داخل متد می‌توان آن استفاده نمود. نوع این پارامتر از نوع آرایه‌ای از نوع رشته (string[]) در نظر گرفته شده است. انواع(types) و آرایه‌ها را در درس‌های بعدی بررسی می‌کنیم. فعلاً بدانید که آرایه رشته‌ای جهت نگهداری چندین کاراکتر مورد استفاده قرار می‌گیرد. [] مشخص کننده آرایه هستند که مانند یک لیست عمل می‌کند.

 

همانطور که ملاحظه می‌کنید در این برنامه دو دستور Console.WriteLine(…) وجود دارد که اولین دستور مقداری با دستور دوم متفاوت است. همانطور که مشاهده می‌کنید داخل دستور Console.WriteLine(…) عبارتی به شکل {0} وجود دارد. این آرگومان، نشان می‌دهد که به جای آن چه مقداری باید نمایش داده شود که در این جا args[0] نشان داده می‌شود. عبارتی که داخل " " قرار دارد عیناً در خروجی نمایش داده می‌شود، به جای آرگومان {0}، مقداری که پس از " قرار دارد، قرار می‌گیرد. حال به آرگومان بعدی یعنی args[0] توجه کنید. مقدار صفر داخل [] نشان می‌دهد که کدام عنصر از آرایه مورد استفاده است. در C# اندیس آرایه از صفر شروع می‌شود به همین جهت برای دسترسی به اولین عنصر آرایه باید از اندیس صفر استفاده کنیم.(همانطور که قبلاً نیز کفتم آرایه‌ها را در درس‌های آینده توضیح خواهم داد، هدف از این درس تنها آشنایی با C# است.!)

 

مجدداً به آرگومان {0} بازگردیم. این آرگومان نشان می دهد که یک مقدار باید در رشته خروجی قرار گیرد، این مقدار همان args[0]  است. اگر شما این برنامه را از طریق Command-Line اجرا نمایید خروجی شبیه به زیر خواهید گرفت :

>Hello!, Meysam!

>Welcome to C# Persian Tutorial!

همان گونه که می‌بینید، پس از اجرای برنامه نام شما که از طریق Command-Line آنرا وارد نموده‌اید در خروجی ظاهر می‌شود. استفاده از آرگومان {n}، که در آن n یک مقدار عددی است، جهت فرمت دادن به متن خروجی است که بر روی صفحه به نمایش در می‌آید. مقدار n از صفر آغاز شده و به ترتیب افزایش می‌باید. به مثال زیر توجه کنید :

Console.WriteLine("Hello! ,{0} ,{1}, {2}",args[0],args[1],args[2]);

این خط از برنامه سه مقدار args[0],args[1],args[2] را در خروجی به ترتیب نمایش می‌دهد. ملاحظه می‌نمایید که چون 3 مقدار را می‌خواهیم نمایش دهیم، سه بار از آرگومان {n} استفاده کرده‌ایم و هر بار یک واحد به مقدار قبلی افزوده‌ایم. در آینده بیشتر با این مفاهیم آشنا می‌شویم.

 

مطلبی که باید در مورد لیست 2-1 به آن توجه شود آنست که این برنامه تنها از طریق  Command-Lineقابل اجراست و در صورتیکه کاربر از این مطلب که برنامه باید دارای ورودی به صورت Command-Line باشد، بی اطلاع باشد و ورودی را در Command-Line وارد نکند، برنامه متوقف شده و اجرا نمی‌شود. پس برای رفع چنین مشکلی باید از روش بهتری جهت دریافت ورودی از کاربر استفاده کرد.

 

لیست 3-1 : یک برنامه که قابلیت محاوره با کاربر را دارد.

// Namespace اعلان

using System;

 

// کلاس آغازین برنامه

class InteractiveWelcome

  {

   //آغاز اجرای برنامه

   public static void Main()

    {

     // متنی بر روی صفحه نمایش داده می‌شود

     Console.Write("What is your name?: ");

     //متنی نمایش داده شده و برنامه منتظر دریافت ورودی می‌ماند

     Console.Write("Hello, {0}! ", Console.ReadLine());

     Console.WriteLine("Welcome to the C# Persian Tutorial!");

    }

  }

همانطوریکه در این برنامه دیده می شود، متد Main() دارای پارامتر نیست. در عوض یک خط به متن برنامه لیست 2-1 اضافه شده است. در اولین خط از این برنامه، متنی با عنوان اینکه نام شما چیست؟ بر روی صفحه ظاهر می‌شود. سپس در خط بعدی پس از نوشتن کلمه Hello, ، برنامه منتظر دریافت ورودی از کاربر می‌شود. بدین معنی که این بار تا زمانیکه کاربر متنی را به عنوان نام خود وارد نکند اجرای برنامه به پیش نخواهد رفت و خط بعدی اجرا نمی‌شود. این برنامه روش ایجاد ارتباط از طریق برنامه با کاربر را نمایش می‌دهد. در این مثال کاربر دقیقاً متوجه می‌شود که چه زمانی باید اطلاعات را وارد نماید و این اطلاعات چه باید باشد در حالیکه در مثال قبل چنین نبود. همانگونه که می‌بینید در این برنامه آرگومان {0} مستقیماً از طریق دستور Console.ReadLine() دریافت می‌شود و بلافاصله در خروجی نمایش داده می‌شود. دستور ReadLine() نیز یکی از متدهای کلاس Console است که بوسیله آن رشته ورودی خوانده می‌شود.

خروجی برنامه فوق به شکل زیر است :

What is your name?:

(سپس برنامه منتظر دریافت متنی از ورودی توسط کاربر می‌ماند)

(پس از اینکه کاربر رشته‌ای را وارد کرد و کلیدEnter را فشار داد، متن زیر نمایش داده می‌شود.)

Hello, Meysam!

(سپس اجرای برنامه به دستور بعدی منتقل می‌شود)

Welcome to the C# Persian Tutorial!

 

خروجی کامل برنامه :

What is your name?:

Hello, Meysam! Welcome to the C# Persian Tutorial!

توجه کنید که ReadLine() به عنوان یک متد، مقداری را به سیستم بازمی‌گرداند. این مقدار در این برنامه به آرگومان {0} برگردانده می‌شود. این خط از برنامه را می‌توان طور دیگری هم نوشت :

string myName=Console.ReadLine();

Console.WriteLine("Hello, {0}!",myName);

 

در این حالت ما یک متغیر از نوع رشته با نام myName تعریف کرده‌ایم که مقدار ورودی در آن ذخیره می‌شود و سپس از این مقدار به عنوان مقداری‌ که {0} می‌پذیرد استفاده کرده‌ایم.

 

در این درس آموختید که ساختار کلی یک برنامه C# چگونه است. هر برنامه C# از یک کلاس اصلی تشکیل می‌شود که این کلاس شامل داده‌ها و متغیرها و متدهایی می‌باشد. متد آغازین برنامه که برنامه با آن شروع به اجرا می‌کند، متد Main() است. با استفاده از توابع کتابخانه‌ای می‌نوان به کلاسها و متدهای C# دسترسی پیدا کرد. از جمله این توابع System بود که یکی از کلاسهای آن Console و چند متد این کلاس،  متدهای WriteLine() و ReadLine() بودند.

در اینجا اولین درس به پایان رسید. از همه دوستانی که این مطلب را می‌خوانند تقاضا دارم نظرات و پیشنهادات خود را برای من mail کنند.