سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...
این کتاب رو میشه بهترین کتاب تو زمینه برنامه نویسی سیستمی در محیط لینوکس و لینوکس هستش. ویرایش اول این کتاب نوشته دکتر ریچارد استیونسن هستش. ایشون در سال 1999 در سن 48 سالگی فوت کردن. ویرایش جدید کتابهای ایشون هر ساله با افزودن مطالب جدیدی یکی از بهترین کتابهای زمینه خودش هستش. سری کتابهای TCP/IP illustrated که نوشته ایشون هستش، بهترین کتاب تو زمینه کالبد شکافی پروتکل شبکه هستش.


لینک دانلود
http://filepi.com/i/YQygf1B
۰ موافقین ۰ مخالفین ۰ ۱۳ آبان ۹۲ ، ۰۹:۴۲
حامد شیخلو

12 اکتبر، مصادف است با درگذشت پدر سیستم عامل یونیک و زبان C. کسی تو دنیا نمیتونه منکر تاثیر این دو دست آورد در علم کامپیوتر و زندگی بشری بشه. اگر مقایسه کنیم زبانها و سیستم عاملهایی که در آن زمان عرضه شدند و اینکه چند درصر از اونها تونستن زنده بمونن و هنوز هم کارایی داشته باشن، بیشتر به بزرگی کار دنیس ریچی پی میبریم.

او به همراه کنت تامسون بارها جوایز متعددی را برای طراحی سیستم عامل یونیکس دریافت کرده است. همچنین به همراه برایان کریگان کتاب زبان برنامه نویسی سی را نوشته و این دو تقریباً اکثر مواقع در کنار هم نام برده می‌شوند «K&R» حتماً متوجه شدید که حرف R از آن ریچی است.

او هم به مانند همکار و دوست خود کنت تامسون به نوشتن برنامه‌های بسیار زیبا معروف است. شاید خصوصیات روحی آن دو باعث شد تا همانند هم برنامه بنویسند و بتوانند به همراه هم پروژه‌ای بزرگ را به مقصود برسانند. او هم برنامه‌نویسی را بهترین کار ممکن می‌داند. این دو دوست بهترین خاطره خود را نوشتن ۱۰۰۰ خط برنامه در یک روز می‌دانند. او بر روی پلن ۹ و زبان برنامه‌نویسی لیمبو هم کار کرد.

در حال حاضر زبان برنامه‌نویسی سی نقش فوق‌العاده مهم و بنیادی برای بسیاری از برنامه‌های معروف و پروژه‌های بزرگ روز دنیا دارد. سیستم‌عامل‌ها مانند لینوکس، سولاریس، بی اس دی، مک او اس، ویندوز و انواع متنوع دیگر. زبان‌های برنامه‌نویسی مانند سی پلاس پلاس، سی شارپ، جاوا و جاوا اسکریپت و بسیاری دیگر. شاید باید گفت سیستم‌عامل‌هایی مانند ویندوز و لینوکس بدون آن به وجود نمی‌آمدند که این همه جنجال برانگیز شوند. دنیای نرم‌افزارهای آزاد کاملاً با پدران خود آشنا هستند.

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

۱ موافقین ۲ مخالفین ۱ ۲۱ مهر ۹۲ ، ۱۹:۳۰
حامد شیخلو

مجازی سازی توابع شبکه

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



این تکنولوژی در سال 2012 در آزمایشگاه AT&T، BT، china mobile و چندین آزمایشگاه دیگر ارائه شد.
در حالی که سیستم‌های شبکه مبتنی بر PC از سال‌های دهه 80 در دسترس بوده است، اما این سیستم‌ها بیشتر توسط سازمان‌های کوچک مورد استفاده قرار می‌گرفت و به عنوان یک راه حل ارزان قیمت برای شبکه‌هایی که قصد یا توانایی خرید ابزارهای اختصاصی را نداشتند مورد استفاده قرار میگرفت.
در سال‌های اخیر، پیشرفت عمده در تکنولوژی کارت‌های شبکه پرسرعت برای سیستم‌های شخصی صورت گرفته و همچنین شرکت‌هایی مانند اینتل بر روی چیپ های خود قابلیت‌های مناسب پردازشی برای کارهای شبکه ای قرار داده است.
امروزه بسیاری از شرکت‌ها برای مدیریت بسته های شبکه ای امکانات مناسبی بر روی پردازشگرهای خود قرار داده‌اند، مثلاً پردازشگرهای اینتل، می‌توانند با برنامه نویسی دوباره به صورت پردازشگر شبکه فعالیت کنند.

رابط‌های برنامه نویسی مخصوص شبکه مانند OpenFlow در ابزارهای سخت افزاری بسیاری قرار داده شده‌اند و این قابلیت، برای ابزارها امکان برقراری ارتباط بین ابزارهای شبکه ای و جدا کردن بستر کنترل از بستر ارسال بسته را امکان پذیر می‌سازد. بستر کنترل بر روی سیستم‌های جداگانه اجرا می‌شود و داده‌ها را به سیستم‌های شبکه ای ارسال می‌کند.
ارزش افزده NFV چیست؟
بعضی از ارزش افزوده های NFV شامل سرعت، دقت و کاهش هزینه است. با مجتمع کردن طراحی بر روی سرورهای عادی، یک مدیر شبکه می‌تواند:

  •     استفاده از منابع به صورت بهینه تر: مجازی سازی این امکان را می‌دهد که یک منبع تنها در صورت نیاز به یک سیستم اختصاص داده شود.
  •     فراهم آوردن یک سرویس بدون نیاز به حضور فیزیکی یک متخصص.
  •     کاهش در پیچیدگی سیستم.
  •     کاهش در پیچیدگی هزینه راه اندازی و هزینه نگهداری.
CloudNFV
پروژه CloudNFV یک سکوی باز برای راه اندازی NFV بر پایه پردازش ابری و تکنیک های  SDN  در یک محیط با چندین تولید کننده است.
http://www.cloudnfv.com/WhitePaper.pdf
۴ موافقین ۰ مخالفین ۱ ۲۱ مهر ۹۲ ، ۱۵:۳۰
حامد شیخلو
شبکه بندی توصیف شده نرم‌افزاری، یک روند جدید در شبکه کامپیوتری است که در سال 2008 توسط دانشگاه برکلی و استنفورد ابداء شده است. این روش به مدیر شبکه (administrator) اجازه می‌دهد تا سرویس‌های لایه پایین شبکه خود را با یک لایه تجرید مدیریت کند. این کار با جدا کردن سیستمی که درباره محل ارسال ترافیک تصمیم گیری می‌کند، از سیستمی که این ترافیک را فوروارد می‌کند، انجام می‌شود.
شبکه بندی بر اساس پروتکل اینترنت IP، بر مبنای AS ها تشکیل شده است. این پیاده سازی، گسترش شبکه را با گسترش تعداد این سیستم‌ها به عنوان هاپ امکان پذیر می‌سازد. این هاپ ها بسته‌ها را به مقصد معین بعدی انتقال می‌دهند. این روش هم ساده است و هم قابلیت گسترش مناسب دارد. مفهوم AS مطرح شده در این روش، اجازه تغییر مقصد مشخص بدون تغییر مشخصه خودش همراه با همکاری سرویس تحویل بسته، نمی‌دهد. به این معنی که یک مقصد در صورتی می‌تواند محل خود را تغییر دهد و همان شناسه قبلی را داشته باشد، که مسیر تحویل بسته به آن این امکان را بدهد. محل جغرافیایی مقصدها، که با کارت شبکه آن‌ها مشخص می‌شود، مشخص کننده شناسه آن‌ها است. استفاده تنها از AS ها، قابلیت استفاده از روش‌های دیگر شناسایی که مبتنی بر کیفیت باشند را دشوار می‌کند، مانند گروه بندی منطقی، کنترل دسترسی، کیفیت سرویس و امثال این‌ها.

SDN به یک مدیر شبکه اجازه می‌دهد که کنترل ترافیک شبکه را از طریق برنامه نویسی و بدون دسترسی فیزیکی به سویچ‌های شبکه، کنترل کند. توسط SDN می‌توان یک پلن کنترل شبکه منطقی ایجاد کرد، در حالی که شبکه سخت افزاری به صورت فیزیکی از این پل داده جدا است. برای مثال، یک سویچ شبکه بسته‌ها را انتقال دهد، اما یک سرور جدا پلن داده را مدیریت کند. جدا کردن پلن داده، امکان تعریف توزیع داده را، جدا از مدل داده فراهم می‌کند.

یکی از کاربردهای اساسی این روش، در IaaS است. ترکیب این روش با پردازش مجازی و ذخیره سازی مجازی، امکان شبیه سازی تخصیص منابع ارتجاعی را می‌دهد و اگر هر کدام از سازمان‌های استفاده کننده از این فن‌آوری به مدیریت ترافیک بسیار زیادی احتیاج داشته باشند، می‌تواند این کار را انجام دهد. تخصیص منابع در این روش به صورت ایستا به فراخوانی بین پردازشی تبدیل می‌شود.
۰ موافقین ۰ مخالفین ۱ ۱۹ مهر ۹۲ ، ۲۳:۰۰
حامد شیخلو
این کتاب به نظر من بهترین کتاب شبکه موجود هستش (البته از جهاتی).  تو این کتاب، برعکس خیلی از کتابهای شبکه، به جای شروع از لایه پایین شبکه (لایه فیزیکی و سیگنالینگ)، از لایه 7 شروع میکنه. کامپیوتری ها به خاطر اینکه تو مباحث سیگنالینگ پایه خوبی ندارند، این فصل های اولیه باعث میشه که علاقه کم بشه به خوندن ادامه کتاب، یا اینکه کل لایه های پایین شبکه خونده نمیشه و پایه ضعیف میشه.

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

۰ موافقین ۰ مخالفین ۱ ۰۸ مهر ۹۲ ، ۲۰:۰۸
حامد شیخلو

کتابهای زیادی برای سیستم عامل وجود دارد، اما بدون شک، یکی از بهترین این کتابها، کتاب آقای ویلیام استالینگز هستش. در این کتاب استالینگز، هم مسائل طراحی و هم مفاهیم اصلی در سیستم را بحث میکند. مباحث تاثیرگذار در طراحی یک سیستم و نحوه هماهنگ کردن طراحی، سرعت و امنیت در سیستم بحث شده است.

در این ویرایش مطالب زیر اضافه شده است:

  • مسائل تاثیرگذار در طراحی سیستم عامل در پردازنده های چند هسته ای
  • ماشین مجازی و روشهای پیاده سازی (فصل 2)
  • مثالهای جدید در زمانبندی (فصل 10)
  • معماری مبتنی بر سرویس (فصل 16)
  • تحلیل میزان کارایی سیستم عامل
  • مباحث مرتبط با b-tree (فصل 12)
  • OS/161 که یک سیستم عامل آموزشی است
از لینک زیر، کتاب رو دانلود کنید
۰ موافقین ۱ مخالفین ۱ ۰۸ مهر ۹۲ ، ۱۹:۴۵
حامد شیخلو

در شبکه های کامپیوتری، port knocking یک روش برای باز کردن پورت مشخص در دیواره آتش، با دریافت درخواست از شبکه خارجی است. این پورت مشخص از خارج شبکه و با انجام عمل پویش مانند پورت اسکن کاملا بسته به نظر میرسد، اما برای درخواست مشخص شده، باز می‌شود. این عمل باز کردن پورت کاملا به صورت اتوماتیک انجام می‌شود. یکی از انواع روشهای knocking با عنوان single packet authentication شناخته می‌شود که در آن، یک بسته اطلاعاتی کد شده، فرستاده می‌شود تا پورت ارتباطی برای ادامه باز شود.
حفاظ‌ها (firewall) در معماری امنیت شبکه، برای فیلتر کردن بسته‌ها یا اعتبارسنجی یک پروتکل استفاده می‌شوند و در این دو کار، به خوبی عمل می‌کنند. اما حفاظ‌ها اطلاعات کمی درباره برنامه‌ها و روند استفاده شبکه برای هر کدام از آن‌ها و همچنین کاربران شبکه دارد، این مساله باعث بروز دو مشکل می‌شود:
1 محدود کردن دسترسی به شبکه داخلی از طریق بیرون.
2 محدود کردن دسترسی کاربران داخلی به تعداد محدود پورت‌های مشخص.
توجه شود که خود محدودیت‌های اعمال شده برای کاربران، به دلیل محدود کردن روشهای سو استفاده و حمله به شبکه است و اگر روشی باشد که بدون محدود کردن کاربران مجاز، بتواند در برابر کاربردهای غیر مجاز به خوبی عمل کند، روش مناسب‌تری خواهد بود.
معماری نرمافزارهای شبکه بر اساس معماری clinet-server می‌باشد. قسمت clinet که معمولا یک رابط کاربری است برای ارتباط با کاربر، اتصال به server و درخواست یک سرویس خاص از آن. برای مثال یک مرورگر اینترنت به server متصل می‌شود و درخواست خود را برای یک صفحه یا سند خاص به آن می‌دهد. کاربردهای Peer-to-Peer هم نقش server را دارد و هم نقش clinet را. برنامه ای مثل پراکسی، برای مرورگر یک برنامه سرور ایت و برای وب سرور یک کلاینت حساب می‌شود.
پروتکل اینترنت IP چه مشکلات امنیتی اساسی دارد؟

  • هر کاربر میتواند با روند ip spoofing خود را جای هر ip دیگر نشان دهد.
  • در پروتکل tcp عدد ابتدایی قابلیت حدس زدن را دارد، بنابراین امکان سرقت نشست session hijack بسیار افزایش میابد.
  • بسیاری از پروتکل های مسیریابی موجود در اینترنت ناامن طراحی شده اند.
  • بسته ip قابلیت تکه تکه frangmentation را دارند، که به یک attacker اجازه میدهد بسته اطالعاتی را به چند قسمت تقسیم کند و در چند بخش بفرستد تا نتوان جامعیت آن را کشف کرد.

بعد از این مقدمه نسبتا طولانی به مبحث port knocking ادامه می‌دهیم.
اگر بخواهیم مقایسه ای انجام دهیم بین روند قدیمی پروتکل اینترنت با روند port knocking، می‌توان به یک در تشبیه کرد. در پروتکل اینترنت، مانند این است که در باز است اما کنار در یک نفر نگهبان وجود دارد. با روند ناکینگ اگر مقایسه کنیم، مانند این است که در بسته است، و بعد از در زدن و احراز هویت در باز می‌شود. همان نگهبان‌ها هم وجود دارند.
یک توضیح اضافی در اینجا لازم است، اینکه در روند پروتکل اینترنت در باز است، همان به معنی باز بودن پورت است.

سرویس port knocking در مقابل یک بسته حاوی درخواست که کدگذاری نیز شده است، آن را به سرویس‌های دیگر که خود را ثبت کرده‌اند تحویل می‌دهد، و اگر سرویسی توانست پیام دریافتی را کدگشایی کند، پورت مورد نظر باز خواهد شد.

یک تز فوق لیسانس با موضوع برسی کارایی و افزایش کارایی حفاظ ها با این روش با عنوان زیر در لینک http://www.ciphertext.info/papers/thesis-degraaf.pdf برای مطالعه کاملتر وجود دارد.

۰ موافقین ۰ مخالفین ۱ ۰۸ مهر ۹۲ ، ۱۶:۱۷
حامد شیخلو
بعد از دانلود کردن و اکسترکت کردن سورس کد هسته سیستم عامل لینوکس که از آدرس kernel.org قابل دانلود است، با تعداد بسیار زیادی از دایرکتوری‌ها مواجه می‌شویم.

در ریشه کد منبع دانلود شده، فایل‌های زیر وجود دارد:
  • COPYING: اطلاعات درباره مجوزها و اجازه‌ها. لینوکس بر اساس مجوز دسترسی GPLv3 است. این مجوز اجازه استفاده، تغییر، توزیع و اشتراک گذاری کد منبع را به صورت رایگان به هر فردی می‌دهد، اما آن فرد نباید کد منبع را بفروشد.
  • CREDITS: لیست افراد همکاری کننده.
  • Kbuild: این اسکریپت بعضی تنظیمات را برای ساختن هسته مقداردهی می‌کند. برای مثال این اسکریپت متغیر ARCH را مقداردهی می‌کند که این متغیر مشخص کننده معماری پردازنده ای است که باید بر روی آن کامپایل انجام شود.
  • Kconfig: این اسکریپت برای مشخص کردن پارامترهای تنظیم هسته استفاده می‌شود.
  • MAINTAINERS: این فایل مشخص کننده لیست نگهداری کنندگان، ایمیل آن‌ها و وب سایت‌های مرتبط با آن‌ها است. این فایل زمانی استفاده می‌شود که یک توسعه دهنده یک باگ در فایلی پیدا می‌کند و قصد دارد تا آن را به افراد مرتبط با آن فایل گزارش دهد.
  • Makefile: اسکریپت اصلی مورد نیاز برای کامپایل هسته کرنل. این فایل پارامترهای مورد نیاز برای کامپایل و همچنین لیست فایل‌ها و هر چیز مورد نیاز دیگری را ارسال می‌کند.
  •  README: این فایل متنی اطلاعات مورد نیاز برای توسعه دهندگان که می‌خواهند با نحوه کامپایل کرنل آشنا شوند، را فراهم می‌کند.
  • REPORTING-BUG: این فایل متنی اطلاعات مورد نیاز برای گذارش دهی باگ را فراهم می‌کند.
در ریشه کد منبع، لیست شاخه های زیر وجود دارد:

  • arch: در این شاخه یک فایل Kconfig وجود دارد که تنظیمات مورد نیاز را برای کامپایل کدهای این منبع مشخص می‌کند. هر پردازنده که توسط هسته پشتیبانی می‌شود، یک شاخه مشخص در این شاخه دارد. برای مثال، کد برای کرنل alpha در شاخه ای با این اسم قرار دارد.
  • block: در این شاخه، کد مربوط به ابزارهای بلاکی قرار دارد. ابزارهای بلاکی، دستگاههایی هستند که ارسال و دریافت داده در آنها به صورت بلاکی انجام می‌شود. بلاک داده به جای یک جریان (stream) از داده‌ها، تکه ای (chunk) از داده‌ها است.
  • crypto: شامل کد بسیاری از الگوریتم‌های رمز نگاری. برای مثال "sha1_generic.c" فایلی است که کد مربوط به الگوریتم رمزنگاری sha1 را پیاده سازی کرده است.
  • Documentation: مستندات مربوط به هسته و فایل‌های دیگر.
  • drivers: شامل کدهای مربوط به راه اندازهای سخت افزارهای مختلف است. راه انداز یک نرمافزار است که سخت افزار مشخص را کنترل می‌کند. دایرکتوری‌های زیادی در این شاخه وجود دارد. برای هر نوع سخت افزار به صورت کلی یک پرونده اصلی وجود دارد که شامل زیر نوع‌های دیگری است. برای مثال شاخه bluetooth دربردارنده کد راه انداز برای سخت افزار bluetooth است. البته برای بعضی از سخت افزارها این اصل رعایت نشده است و شاید بتوان گفت یک سطح دسته بندی اضافی نیز درنظر گرفته شده است، مانند joystick که در شاخه input/joystick قرار دارد.
  • firmware: این شاخه شامل کدهایی است که سیستم کامپیوتری را قادر به فهمیدن سیگنال‌های دریافتی از ابزارها می‌کند. برای مثال یک وبکم، سیستمی برای مدیریت سخت افزار خودش دارد، اما باید سیستم کامپیوتری سیگنال‌های دریافتی از آن را بتواند بفهمد. این کدها همچنین برای ارسال سیگنال به ابزارها نیز استفاده می‌شود.
  • fs: این شاخه همان filesystem است. تمام کدهای مورد نیاز برای درک و استفاده از فایل سیستم‌ها در این شاخه قرار دارد. برای هر فایل سیستم یک شاخه جداگانه درون آن وجود دارد. برای مثال کد مربوط به ext4 درون شاخه هم نام خود قرار دارد. بعضی از فایل‌ها درون شاخه خاصی نیستند، این فایل‌ها برای مدیریت کلی فایل سیستم مورد نیاز است. برای مثال mount.h که مورد نیاز برای عمل mounting یک سیستم فایل است. یک فایل سیستم روشی ساختارمند برای ذخیره سازی و مدیریت اطلاعات در ابزارهای ذخیره سازی فراهم می‌کند. هر فایل سیستم محدودیت‌ها و برتری‌های خاص خودش را دارد (در این مورد مطلب جامعی بعداً می‌نویسم).
  • include: این شاخه شامل فایل‌های سرآیندی است که کرنل از آن استفاده می‌کند.
  • init: فایل‌های مرتبط با راه‌اندازی کرنل در این شاخه قرار دارد. فایل main.c فایل اصلی کرنل است. این فایل سور اصلی است که قسمت‌های دیگر را به هم مرتبط می‌کند.
  • ipc: کلمه ipc مخفف Inter Process Communication است. این شاخه شامل کدهایی لایه ارتباطی است، که این لایه ارتباط بین کرنل و پردازش‌ها لازم است. در سیستم عامل لینوکس، تنها مسیر ارتباطی با سخت افزار از طریق کرنل است و یک برنامه برای انجام یک وظیفه باید از کرنل درخواست بکند. برای مثال فرض کنید که یک برنامه می‌خواهد با سخت افزار کنترل dvd ارتباط برقرار کند و مثلاً در آن را باز کند، باید این درخواست را از طریق رابط برنامه نویسی مشخص به کرنل بدهد و کرنل خود آن کار را انجام دهد.
  • kernel: کدهای این بخش خود کرنل را مدیریت می‌کند. برای مثال یک شاخه با نام power مدیریت کننده نحوه خاموش کردن است.
  • lib: شامل فایل‌هایی است که کرنل به آن ارجاع داده است.
  • mm: مدیریت حافظه.
  • net: شامل کدهایی برای پروتکل‌های مختلف شبکه است.
  • samples
  • scripts:شامل کدهای مورد نیاز برای کامپایل کردن کرنل است.
  • security
  • sound: شامل راه انداز کارت‌های صوتی است.
  • tool: شامل ابزارهای برای ارتباط با کرنل است.
۱ موافقین ۱ مخالفین ۲ ۰۴ شهریور ۹۲ ، ۱۹:۳۸
حامد شیخلو

روند فعالیت Stuxnet:

روند کامل فعالیت stuxnet به صورت کامل شناخته شده نیست، اما با اطلاعات موجود می‌توان روند زیر را برای آن ذکر کرد:

  •     آلوده کردن سیستم‌های ویندوزی با استفاده از چندین zero-day exploit، اعتبارات جعل شده یا دزدیده شده از نرم افزار های دیگر سیستم در نهایت نصب روتکیت بر روی سیستم‌های مشابه ویندوزی.
  •     تلاش برای دور زدن سیستم تشخیص نفوذ مبتنی بر HIDS بوسیله یک روش خاص در بارگذاری کتابخانه های مورد نیاز. در این روش بارگذاری کتابخانه‌ها (DLL) توسط خود بد افزار انجام نمی‌شود و یک تکه کد بر روی نرمافزارهای موجود در سیستم تزریق می‌شود و بارگذاری توسط این نرمافزارها انجام می‌شود.
  •     برای توسعه به سیستم‌های متصل به سیستم آلوده، ابتدا مطمعن می‌شود که 1 سیستم مقصد ویندوز باشد، 2 سیستم قبلا آلوده شده است یا خیر 3 روی سیستم آنتی ویروس نصب شده است یا خیر.
  •     گسترش از طریق آلوده کردن شبکه یا دستگاه های ذخیره سازی انجام می‌شود.
  •     جستجوی سیستم‌های صنعتی (Simens Wincc).
  •     اگر سیستم صنعتی مورد نظر یافت شد، از اکانت اعتبارسنجی SQL توکار این سیستم‌ها برای قرار دادن کد درون پایگاه داده آن و آلوده کردن آن برای دسترسی به PLC مقصد استفاده می‌کند.
  •     تزریق کد درون PLC. این کار از طریق پروتکل profibus انجام می‌شود. این تزریق کد خروجی PLC را تغییر می‌دهد.
  •     از طریق برسی (monitor) کردن ترافیک PLC، فعالیت سیستم کلی را برسی می‌کند.
  •     اگر یک فرکانس خاص در ترافیک یافت شد، تنظیمات فرکانس را از 1410 به 2hz کاهش می‌دهد.
  •     وجود مکانیزم حذف کردن خود از سیستم‌هایی که هماهنگی سازم را ندارند، خوابیدن (غیر فعال شدن موقت)، پاک کردن سیستم آلوده به صورت خودکار.

با توجه به اینکه این بد افزار بسیار پیچیده است، اینکه چگونه یافت شد، تنها یک جواب دارد: به دلیل گسترده شدن زیاد این بد افزار. اگر این سیستم با تکنیک خاص‌تری پخش می‌شد، شاید تا مدت‌ها بدون کشف باقی می‌ماند.
۰ موافقین ۰ مخالفین ۱ ۱۱ مرداد ۹۲ ، ۱۲:۱۰
حامد شیخلو

Stuxnet چیست؟

بد افزار Stuxnet یک روتکیت مخصوص سیستم‌های صنعتی است. مجموعه‌ای از نرم‌افزارهاست که کنترل یک سیستم رایانه‌ای را به دست می‌گیرد. در این نوع حمله، کاربر سیستم متوجه حضور روت‌کیت نخواهد شد و هکر رایانه توانایی تغییر تمامی تنظیمات رایانه را دارد. رایانه‌ای که تحت سلطه روت‌کیت و نهایتاً هکر قرار می‌گیرد را زامبی (Zombie) می‌نامند. اگر ضایعه‌ای در شبکه رایانه‌ها پیدا شود، با پیگیری آن به زامبی می‌رسیم و هکر نمی‌تواند ردیابی شود.

stuxnet به عنوان یک اسلحه جدید در جنگ سایبری مطرح شد. اولین مشاهده این بد افزار در سال 2010 صورت گرفت. تمام مجموعه دانش‌ها و یافته‌ها با وجود آمدن این حمله بسیار پیشرفته، کنار گذاشته شد. در مقایسه با حملات دیگر، این بد افزار یک سلاح هسته ای به شمار می‌رود.

هرچند stuxnet برای اولین بار در ژوئن 2009 مشاهده شد، تا تابستان 2010 که سازمان ICS-CERT درباره آن هشدار دهد، در مقابل آن مقابله جدید انجام نشده بود. این ویروس از چهار نوع حمله zero-day برای آلوده کردن و پخش شدن استفاده می‌کند. این ویروس ابتدا به دنبال برنامه های simatic WINCC و PCS7 که توسط شرکت simens توسعه پیدا کرده‌اند می‌گردد، سپس از مجوز اکانت پیش فرض sql برای سرایت کردن به plc های مرتبط با آن، به روش تزریق کد استفاده می‌کند. این تزریق کد از طریق پروتکل fieldbus شرکت simens انجام می‌گیرد. در مرحله بعد، stuxnet به دنبال ابزارهای اتوماسیون که وظیفه کنترل سرعت موتورها را دارند می‌گردد. اگر کنترلی پیدا شد که در محدوده 800-1200hz باشد، تلاش می‌کند تا خرابکاری انجام دهد.

هرچند در ابتدا، اطلاعاتی که از این بد افزار بسیار کم بود، اما شرکت simens سریعاً عمل کرد و یک برنامه برای یافتن و پاک کردن این بد افزار عرضه کرد.

stuxnet در اواخر سال 2010 توجه رسانه‌ها را به خود جلب کرد. در رسانه‌ها این بد افزار به عنوان یک عامل با گسترش سریع و بسیار پیچیده مطرح شد. این مسئله توجه بسیاری به یک مسئله خاص معطوف کرد: «صنایع باید با سرعت زیاد نسبت به افزایش سطح امنیت خود عمل کنند».

کالبد شکافی stuxnet

این بدافزار بسیار پیچیده است، در شکل زیر میتوان ساختار آن را مشاهده کرد. 

Stuxnet

این بد افزار اولین روتکیت شناخته شده برای دستگاه‌های کنترل صنعتی می‌باشد. این روتکیت می‌توانست خود را به صورت خودکار بروز رسانی کند. توانایی تزریق کد در منطق بار کننده یک plc را دارا بود و بعد از این مرحله فعالیت یک plc به خوبی ادامه پیدا می‌کرد، و این بد افزار خود را کاملاً مخفی میکند، فقط در مواقع خاصی داده های اشتباه به HMI ارسال می‌شد.

این بد افزار برای محیط‌های مختلف، خود را هماهنگ می‌کرد، از مجموعه مجوزهای توکار سیستم‌ها استفاده می‌کرد و در مواقعی از کلیدهای دسترسی ابزارهای دیگر که جعل میکند، برای نفوذ استفاده می‌کرد.

در مطلب بعدی به روند کارهایی که این بد افزار انجام می‌داد، پرداخته خواهد شد.
۰ موافقین ۱ مخالفین ۱ ۱۱ مرداد ۹۲ ، ۱۰:۴۱
حامد شیخلو