آرتا گستر در این مقاله قصد دارد در مورد یکی از خطرناکترین بدافزارها  به نام Rootkit بحث کند.مهمترین فاکتور یک Rootkit عالی  بسیار دشوار بودن شناسایی یا بعضا به هیچ عنوان شناسایی نشدن توسط بسیاری از ضدبدافزارها می باشد.در ادامه با ما همراه باشید...
Rootkit
برنامه هايي هستند که از نظر ساختار کاري بسيار شبيه Trojan ها و Backdoor ها هستند ولي با اين تفاوت که شناسايي RootKit بسيار مشکلتر از درب هاي پشتي است زيرا RootKit ها علاوه بر اينکه به عنوان يک برنامه کاربردي خارجي مثل شنونده Netcat و ابزارهاي درب پشتي مثل Sub7 بر روي سيستم اجرا مي شوند بلکه جايگزين برنامه هاي اجرايي مهم سيستم عامل و در گاهي مواقع جايگزين خود هسته کرنل مي شوند و به هکرها اين اجازه را مي دهند که از طريق درب پشتي و پنهان شدن در عمق سيستم عامل به آن نفوذ کنند و مدت زيادي با خيال راحت با نصب رديابها ( Sniffer ) و ديگر برنامه هاي مانيتورينگ بر روي سيستم اطلاعاتي را که نياز دارند بدست آورند.

Rootkit برای شناسایی نشدن بعد از نصب شروع به تغییر دادن ماژول های کرنل سیستم عامل یا انجام تغییرات بر روی پردازش ها و دستکاری درایورها و ... می زند و به همین دلیل شناسایی کردن آن در لایه هسته سیستم عامل بسیار دشوار و چه بسا ناممکن است. Rootkit ها برخی از فرآیند های فراخوانی یا Call در سیستم عامل ها را با فرآیند های خودشان جایگزین می کنند و به این ترتیب فعالیت های مخرب خودشان را از راه دور بر روی سیستم قربانی اجرا و البته سیستم را مانیتور می کنند با توجه به اینکه نرم افزارهای ضدبدافزار به خودی خود از فراخوانی های سیستم عامل استفاده می کنند اینکار Rootkit ها شناسایی آنها را بسیار دشوارتر می کند. کامپیوترهای قربانی Rootkit در حملات متنوعی استفاده می شوند که از آن جمله می توان به نصب شدن Backdoor ها برای سوء استفاده از کامپیوتر قربانی ، استفاده در حملات DDoS و ایجاد Agent و Zombie ، شنود کردن یا Sniff کردن شبکه ها ، حذف کردن Log ها ، استفاده در IRC Bot ها و ... اشاره کرد.

برای اینکه Rootkit ها را بهتر بشناسیم باید مواردی را در خصوص فایل ها بدانیم . هر فایل شامل مجموعه ای از صفات یا Attribute ها می باشد . فیلد های مختلفی در قسمت صفات یا Attribute یک فایل وجود دارد ، برای مثال فیلد اول حاوی قالب یا Format فایل است ، برای مثال این فیلد اول فایل است که مخفی بودن ، آرشیو بودن ، یا فقط خواندنی بودن ( Read Only ) بودن را تعریف می کند. سایر فیلد ها زمانی که فایل ایجاد شده است ، دسترسی پیدا کرده است و یا طول فایل اصلی را نشان می دهد . در سیستم عامل ویندوز یک Function به نام GetFileAttributessEx() و GetFileInformationByHnagle() اطلاعات مربوط به فایل را دریافت و ایجاد می کنند. برنامه Attrib.exe در سیستم عامل ویندوز توانایی نمایش یا تغییر دادن Attribute های فایل را دارد ، یک مهاجم می تواند برنامه مخرب خودش را با استفاده از تغییر دادن Attribute ها بر روی سیستم هدف اجرا کند و دسترسی های لازم را ایجاد کند .

یک هکر یا مهاجم از طریق اسکن کردن سیستم ها و سرورهای آلوده به ویژه وب سرورها در اینترنت ، از طریق قرار دادن Rootkit ها بر روی بسته های دانلودی مثل بسته های نرم افزارهای کرکی و بازی های قابل دانلود ، از طریق نصب Rootkit در کامپیوترهای عمومی و سازمانی از طریق حملات مهندسی اجتماعی ، از طریق استفاده از آسیب پذیری های Zero Day یا حملات دیگری مانند ( Privilege Escalation ، Buffer Overflow ، Exploit کردن هسته سیستم عامل ویندوز و ... ) ، شبکه های Botnet و ... اقدام به نصب کردن Rootkit ها بر روی سیستم عامل ها می کند. همانطور که گفتیم هدف اصلی یک Rootkit ایجاد دسترسی برای مهاجم بصورت ناشناس و با بالاترین دسترسی ممکن بر روی سیستم قربانی است . نصب کردن Backdoor ها و ایجاد آنها در سیستم آلوده اولین کاری است که بعضا یک مهاجم بعد از نصب Rootkit انجام میدهد. با استفاده از یک Rootkit تقریبا مهاجم هر نوع دسترسی و هر عملیات مخربی که نیاز داشته باشد بر روی سیستم قربانی انجام بدهد.

در دنياي هکرها دو نوع RootKit اصلي وجود دارد که هر کدام تعريف جداگانه اي دارند.
1- RootKit سنتي:
RootKit هاي سنتي با شناسايي اولين RootKit بسيار قدرتمند در اويل سال 1990 در طول يک دهه گسترش پيدا کردند و تا آنجا پيش رفتند که امروزه انواع مختلفي از RootKit هاي سنتي وجود دارند که به طور عملي خودشان نصب شده و به هکرها اجازه مي دهند که به سرعت سيستم قرباني را فتح کنند.
RootKit هاي سنتي براي سيستم عامل هاي مختلف نوشته شده اند ولي به طور سنتي بر روي سيستم هاي يونيکس مثلHP-UX - AIX - Linux - Solaris - SunOS و از اين قبيل تمرکز کرده اند. ولي براي ويندوزهاي سرور مثل NT/2000 نيز RootKit هايي نوشته شده اند که جايگزين کتابخانه هاي پيوند پويا ( DLL ) شده و يا سيستم را تغيير مي دهند ولي تعداد زيادي از RootKit ها براي سيستم هاي يونيکس نوشته شده اند.

RootKit ها اجازه دسترسي Root يا Administrator را به ما نمي دهند و ما هنگامي قادر به نصب آْنها بر روي يک سيستم هستيم که دسترسي ريشه اي و مدير يک سيستم را توسط روش هاي ديگري مثل سرريز بافر ... به دست آورده باشيم. بنابراين يک RootKit يک سري ابزارهايي است که با پياده سازي يک درب پشتي ( Backdoor ) و پنهان کردن مدارک استفاده از سيستم و ردپاها به هکر اجازه نگهداري دسترسي سطح ريشه را مي دهد.

ساختار کار تروجن ها به اين صورت است که فايلي را در داخل هسته سيستم مثل پوشه System32 اضافه مي کند و اين فايل تمامي پسوردهاي قرباني را Log کرده و براي هکر مي فرستد و يا با باز کردن پورتي اجازه ورود هکر را از طريق پورت باز شده مي دهد ولي RootKit هاي سنتي به جاي اينکه فايلي در هسته سيستم قرباني اضافه کنند، سرويسها و فايل هاي اصلي و مهم سيستم عامل قرباني را با يک نسخه تغيير يافته آن که عملياتي مخرب انجام مي دهد جايگزين مي کنند.

2- RootKit سطح هسته : اين نوع از RootKit ها نسبت به نوع سنتي بسيار حرفه اي تر هستند و از نظر سطح پنهان سازي بسيار پا را فراتر از نوع سنتي گذاشته اند زيرا اين RootKit ها در سطح ريشه پياده سازي مي شوند و اين کار شناسايي و کنترل کردن آنها را بسيار مشکل تر کرده است. RootKit هاي سطح هسته به ما کنترل کاملي از سيستم اصلي و يک امکان قدرتمند براي جايگيري مي دهد.

يک هکر با ايجاد تغييرات اساسي در خود هسته، مي تواند سيستم را در سطحي بسيار اساسي کنترل کرده و قدرت زيادي براي دسترسي به درب پشتي و پنهان شدن در ماشين را به دست آورد.

خود هسته در حالي که يک کرنل زيبا و کارآمد به نظر مي رسد تبديل به يک اسب تروا مي شود و در حقيقت Kernel فاسد مي شود ولي صاحب سيستم از اين موضوع بي خبر مي ماند. درحالي که يک RootKit سنتي جايگزين برنامه هاي سيستمي حياتي مثل برنامه هاي ifconfig - ls ... مي شود ، يک RootKit سطح هسته در حقيقت جايگزين هسته مي شود و يا آن را تغيير مي دهد. تمامي فايل ها - دستورها - پردازشها و فعاليت هاي شبکه اي در سيستم آلوده به RootKit هسته پنهان مي شوند و تمامي اعمال به سود هکر ضبط مي شود. اغلب RootKit هاي سطح ريشه توسطLKM ها پياده سازي مي شوند.

نصب RootKit هاي سطح هسته اي که توسطLKM ها پياده سازي شده باشد، بسيار راحت است. براي مثال براي نصبKnrak Rootkit که براي هسته لينوکس نوشته شده است، يک هکر که با Account سطح ريشه يا همان Root به آن سيستم وصل است تنها کافي است insmod knark.o, را تايپ کند و ماژول نصب مي شود و منتظر دستورات هکر مي ماند و حتي نيازي به بوت کردن دوباره سيستم هم ندارد.

RootKit هاي سطح هسته براي ويندوز NT هم وجود دارند که يک Patch را بر روي خود هسته اجرايي ويندوز NT بدون استفاده ازLKM ها اعمال مي کند. چند تا از معروف ترين RootKit هاي سطح هسته Knrak و Adore براي سيستم هاي لينوکس ، Plasmoid براي سيستم هاي Solaris و RootKit سطح هسته ويندوز NT براي سيستم هاي سرور ويندوز نام دارند که همگي در لينک RootKit در سايت آشيانه براي اعضاي سايت قرار داده شده اند.

راه هاي مقابله با RootKit هاي سنتي و RootKit هاي سطح هسته
مهمترين راه دفاع در برابر RootKit ها اجازه ندادن به هکرها در دسترسي به حساب مدير است. همانطور که در بالا ذکر شد يک هکر براي نصب يک RootKit بايد دسترسي سطح ريشه داشته باشد و اگر ما بتوانيم هميشه راه هاي نفوذ و آسيب هاي جديد سيستم عاملمان را شناسايي و آنها را از بين ببريم شانس دستيابي هکر به حساب ريشه سيستم خود را تقريباً به صفر رسانده ايم. در مرحله بعد اگر فرض کنيم که با بي احتياطي ما ، هکري توانست بر روي سيستم ما RootKit نصب کند، يکي از راه هاي تست اين که سيستم ما RootKit شده است يا خير استفاده از دستورEcho است. تعداد بسيار کمي از RootKit ها ، دستور echo را که براي ليست کردن محتويات يک دايرکتوري مي باشد تروا مي کنند و اکثر RootKit ها بر روي تروا کردن ls تمرکز کرده اند.

به همين دليل echo يک ليست قانوني از محتويات يک دايرکتوري را برمي گرداند و اگر نتيجه اي که echo بر مي گرداند با چيزي که دستور ls براي دايرکتوري داده شده نشان مي دهد متفاوت باشد ممکن است چيزي در آن دايرکتوري پنهان شده باشد که اين نتيجه را مي رساند که سيستم شما RootKit شده است. ولي در کل اين روش زياد موثر نيست چون جستجوي تمام سيستم فايل براي يافتن هر اختلافي بين فايل هاي ليست شده در خروجي Echo و ls وقت زيادي را صرف مي کند.

امروزه ابزارهاي مختلفي براي آناليز برنامه Rootkit/bin/login وجود دارد که مشخص مي کنند آيا RootKit شناخته شده اي نصب شده است يا خير. اين ابزارها وقتي که بر روي سيستم نصب مي شوند به صورت دوره اي فايل هاي مهم بر روي سيستم را مثل /bin/login چک مي کنند تا از وجود RootKit باخبر شوند که برنامه ChRootkit ابزاري جالب در اين زمينه است ولي درکل بهترين راه دفاع در برابر RootKit ها استفاده از تکنولوژي اثر انگشت ديجيتالي قوي مي باشد تا به صورت دوره اي درستي فايل هاي سيستم بحراني را تحقيق نمايد. MD5 ( يک تابع درهم ساز يک طرفه ) يک الگوريتم بسيار مناسب براي محاسبه اين نوع اثر انگشتهاي قوي مي باشد. با محاسبه يک اثر انگشت Encrypt شده قوي براي فايل هاي سيستمي مهم يک هکر قادر نخواهد بود که فايلي را تغيير داده و با همان اثر انگشت وارد شود.