مبحث یکم : مقدمه و تاریخچه
مبحث دوم: مراحل نفوذ کردن / جلوگیری از نفوذ
مبحث سوم: حملات شبکه ای
مبحث چهارم - کار عملی
مبحث پنجم - DHCP
مبحث ششم - وب و حملات مطرح در آن
مبحث هفتم - حملات DoS
مبحث هشتم - سیستم عامل
مبحث نهم - مهندسی اجتماعی
مبحث دهم - Vulnerability (آسیب پذیری)

سوال: برای اینکه rainbow table ها نتوانند به راحتی پسوردها را حدس بزنند چه کارهایی می توان انجام داد؟

1- استفاده از سیاست های پسوردگذاری صحیح : مثلا سیاستی داشته باشیم که می گوید هر ماه باید پسورد عوض شود 2- استفاده از الگوریتم های رمزنگاری بومی.  به عنوان یک تکنیک خلاقانه می توان زبان کیبورد را به فارسی تغییر داد و کلمه عبور خود را فارسی تایپ کرد . چون خیلی از این سیستم ها روی زبان انگلیسی کارمی کنند .

  • کاربرد دیگر رمزنگاری در زمان ارسال و انتقال اطلاعات است . البته بدیهی است که داده ای را که فرستنده A می خواهد به گیرنده B بفرستند اگر قرار است B از محتوای داده باخبر شود، نباید از آن هش بگیرد . چون هش الگوریتم یک طرفه است و B نمی تواند آن را برگرداند. پس باید A از الگوریتم رمزنگاری استفاده کند که بتوان آن را decrypt ( رمزگشایی) کرد که در اینجا بحث های تبادل کلید رمز، متقارن یا نامتقارن بودن الگوریتم رمزنگاری و … مطرح می شود .
  • دربحث ذخیره اطلاعات هم فقط کلمه عبور نیست ، خیلی وقت ها هارد را هم encrypt می کنند (encrypted file system) یعنی اطلاعات فایل سیستم به صورت رمز شده ذخیره می شود و زمانی که سیستم بالا می آید از حالت رمز شده در می آید . مزیت این کار این است که اگر هارد گم شود یا خراب شود و بخواهند آن را بیرون بیاندازند ( بدون امهای مناسب – امهای مناسب زباله های الکترونیکی یک سیاست نامه ی امنیتی می تواند باشد ) نتوان به راحتی به دیتای اصلی دسترسی پیدا کرد .
  • به وب سایت oxid.it بروید ( جایی که نرم افزار Cain که قبلا با آن کار کرده بودیم در آن است ). در منوی Project می توانید آن را پیدا کنید و با کلیک بر روی آن به صفحه ی دانلود Cain & Abel بروید . می بینید که کنارلینک دانلود ، MD5 و SHAI را قرارداده است ( شکل 6) .

شکل 6

کاربرد این کدها چیست ؟ جلوگیری از حملات man in the middle و تغییر اطلاعات در MitM. در بحث شبکه دیدیم که می توانیم بسته ای را که در حال انتقال است را گرفت و محتوای آن را تغییر داد و سپس ارسال کرد . حال فرض کنید در سطح بالاتر زمانی که شما می خواهید Cain & Abel را دانلود کنید در بین راه یک نوع بدافزار ( مثل backdoor) به آن اضافه شود و سپس به سمت سیستم شما ارسال شود. از کجا این تغییر را متوجه می شوید ؟

کاری که می توان انجام داد این است که پس از آن که فایل Cain & Abel را دانلود کردیم این فایل را به عنوان ورودی به الگوریتم MD5 بدهیم و خروجی 32 بایتی که این الگوریتم به ما می دهد را با رشته 32 بایتی که در سایت Cain & Abel نوشته شده است مقایسه کنیم اگر یکسان بود این فایل تغییری نکرده است اما اگر این دو مقدار یکسان نبود یعنی فایل در راه عوض شده است .

  • ابزار MD5 Sum در لینوکس. در لینوکس دستور man md5sum را وارد کنید و توضیحاتی را پیرامون این دستور مطالعه کنید .

یک فایل زیر شاخه /tmp به نام md5check1 ایجاد کنید و در آن یک متنی بنویسید مثلا Hello how are you و یک فایل دیگر هم به نام md5check2 ایجاد کنید و دقیقا همان چیزی را که در فایل اول نوشتید در فایل md5check2 هم بنویسید ( ویا فایل اول را کپی کنید و نام آن را به md5check2 تغییر دهید ( با دستور زیر)

cp /tmp/md5check1    /tmp/md5check2

حال یک کاراکتر از فایل md5 check2 را تغییر دهید ( مثلا y را به Y تغییر دهید ) . حال با دستور /md5sum مقدار md5های دو فایل را بررسی کنید .

  • در manual ، با خواندن قسمت ابتدایی ( قسمت SYNOPSIS) می توانید از نحوه ی استفاده از دستور آگاهی پیدا کرد .
  • برای مثال در manual مر بوط به md5sum در قسمت SYNOPSIS می بینیم نوشته است md5 sum [Option] [File] … که این یعنی می توان یک سری پارامتر را قرار داد و البته می توان قرار هم نداد ( دراین صورت پارامتر های پیش فرض اعمال می شوند ) و همچنین می توان نام یک فایل را نوشت و یا ننوشت ( مواردی که در علامت براکت [] است یعنی optional هستند . می توان استفاده کرد یا استفاده نکرد ) . برای محاسبه md5 دو فایل که در بالا ایجاد کرده ایم کافی است بنویسید :

md5sum /tmp/md5check1

md5sum /tmp/md5check2

اگر خروجی این دو دستور را مقایسه کنید می بینید تفاوت بسیار زیادی وجود دارد . در صورتی که تنها یک کاراکتر با هم تفاوت داشتند ( در محتوای اصلی فقط در یک کاراکتر با هم تفاوت داشتند ) این مسئله یکی از ویژگی های یک الگوریتم رمزنگاری قوی است که به آن اثر فروپاشی بهمنی (avalanche effect) می گویند که نشان دهنده این است که تغییر یکی از بیت های ورودی باید روی تمام بیت های خروجی پخش شود. یعنی 1 بیت از plain text اگر عوض شد باید کل بیت های cipher عوض شود . اگر این اتفاق نیفتد چه مساله ای پیش می آید ؟ آن وقت می توان یک رابطه بین ورودی و خروجی پیدا کرد .

  • Md5sum دارای Optionهایی است که می تواند یک فایل که حاوی کاراکترهای خاص است را با استفاده از option باینری ، md5 آن را محاسبه کرد و …
  • یکی برنامه اجرایی حاوی دستورات قابل فهم برای ماشین (CPU) است از آنجایی که دستورات این نوع برنامه ها قابل فهم توسط CPU هستند پس برای مثال اگر شما بر روی یک سیستم اینتل ( شرکت Intel) کار کنید و بر روی آن یک فایل اجرایی بسازید نمی توانید این فایل را بر روی یک سیستم AMD ( شرکت AMD) اجرا کنید . چون دستورات AMD و اینتل با یکدیگر متفاوت هستند ( چون مجموعه دستورات (Instruction Set) ها در هر کدام می تواند متفاوت باشد ( برای مثال در یکی ممکن است در دستور MOV ابتدا مقصد بیان شود و سپس مبدا و در دیگری برعکس )
  • یک برنامه برای اجرا ابتدا از هارد وارد حافظه اصلی (RAM) می شود . زیرا اگر مستقیما CPU می خواست با هارد ارتباط برقرار کند کارایی پایین می آمد . چون سرعت CPU خیلی بیشتر از هارد است .
  • بعد از اینکه یک فایل برای اجرا وارد RAM می شود ( به طور کامل از هارد به RAM منتقل می شود) در سیستم های لینوکسی می توان فایل را دیگر پاک کرد . یعنی شما ls را می زنید اما فایل را نمی بینید. اما  Process آن در حافظه اصلی (RAM) در حال اجراست . این مساله یکی از تکنیک هایی است که نفوذگر از آن استفاده می کند . این فایل در حافظه باقی می ماند تا زمانی که سیستم را restart کنیم . اما سیستم هایی که به عنوان سرور عمل می کنند سیستم های نیستند که زود به زود خواسته باشند restart شوند ( اصطلاحا 24X7 است یعنی هفت روز هفته، 24 ساعته باید up باشد ) . منظور از Uptime مدت زمان UP بودن سیستم است ( از زمانی که سیستم Load می شود). بااستفاده از دستور Uptime در لینوکس می توانیم زمان UP بودن سیستم را بدست بیاوریم.
  • یک فایل زمانی که از روی هارد به RAM منتقل می شود به آن اصطلاحا Process می گویند . برای مثال زمانی که دستور ls را می زنیم ، Shell فایل ls را در حافظه (RAM)load می کند و اجرا می شود. بهه نسخه ای از برنامه که در حال اجرا است هم می توان Process گفت ).
  • در ویندوز با استفاده از دستور tasklist می توان لیست Process های جاری را دید ( این دستور را در Command Prompt) (cmd) ویندوز وارد کنید و خروجی آن را ببنید ). کارهای مختلفی با Processها می توان انجام داد . می توان یک سری اطلاعات به آن ها فرستاد ، می توان آن ها را نابود (Kill) کرد . میتوان جزئیات یک Process ( مثل اینکه چقدر حافظه مصرف کرده است ) را مشاهده کرد . برخی Process هایی که در این لیست مشاهده می کنید مثل conhost، Process های سیستمی هستند و برای انجام کارهای خود سیستم مورد استفاده قرارمی گیرد .
  • در لینوکس با دستور ps می توان لیست پروسس ها را دید . اگر ps را بدون هیچ option بزنیم ، فقط process های خودمان را نمایش می دهد . PID شماره یکتای هر Process است .

با استفاده از پارامتر –aef در دستور ps می توان اطلاعات بیشتری را دید . همچنین از دستور ps –aux نیز می توان استفاده کرد .

ps   – aef

  • خیلی وقت ها نفوذ گر پس از نفوذ به یک سیستم دستور whoami را اجرا می کند . این دستور نشان می دهد که با چه سطح دسترسی به سیستم دسترسی پیدا کرده است و یا نفوذگر از دستور id استفاده می کند . userهای مختلف id های یکسان دارند . gid نشان دهنده این است که در چه گروهی هستیم و groups هم می گوید در چه گروه هایی هستیم .
  • فیلد اولی ، که در خروجی دستور ps –aef می بینید مربوط به user id است . که نشان دهنده ی این است که چه Process با چه user id اجرا شده است .
اسکرول به بالا