
در دنياي هکرها دو نوع 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 هاي سنتي به جاي اينکه فايلي در هسته سيستم قرباني اضافه کنند، سرويسها و فايل هاي اصلي و مهم سيستم عامل قرباني را با يک نسخه تغيير يافته آن که عملياتي مخرب انجام مي دهد جايگزين مي کنند.
براي مثال RootKit هاي معروف در سيستم هاي يونيکس برنامه /bin/loginرا که يکي از اساسي ترين ابزارهاي امنيتي در Unix است را با يک نسخه تغيير يافته که شامل يک کلمه عبور درب پشتي براي دسترسي سطح ريشه مي باشد عوض مي کنند.
سيستم هاي يونيکس از برنامه /bin/login براي جمع آوري و تست UserID هاي کلمات عبور استفاده مي کند.
/bin/login شناسه کاربري و پسورد تايپ شده توسط کاربر را با فايل پسوردها مقايسه مي کند تا تعيين کند که پسورد داده شده توسط کاربر صحيح است يا خير. اگر پسورد داده شده درست باشد روتين /bin/loginبه آن User اجازه ورود به سيستم را مي دهد.
خب با اين توضيحي که داديم فرض کنيد که يک RootKit اين برنامه را با برنامه نوشته شده خود عوض کند.
اگر هکر از پسورد ريشه درب پشتي استفاده کند، برنامه /bin/login تغيير يافته و اجازه دسترسي به سيستم را مي دهد.
حتي اگر مدير سيستم پسورد ريشه اصلي را عوض کند، هکر هنوز مي تواند با استفاده از کلمه عبور ريشه درب پشتي به سيستم وارد شود.
بنابراين يک روتين RootKit ، /bin/login يک درب پشتي است زيرا مي تواند براي دور زدن کنترل هاي امنيتي نرمال سيستم مورد استفاده قرار گيرد.
علاوه بر آن يک اسب تروا هم هست زيرا فقط چهره آن يک برنامه نرمال و زيباي Login است ولي در اصل يک Backdoor است. اکثر RootKit ها سرويس ها و برنامه هايي مثل DU - Find - Ifconfig - Login - ls - Netstat - ps را با RootKit خود جابه جا مي کنند.
هر يک از اين برنامه هاي سيستمي با يک اسب ترواي منحصر به فرد جايگزين مي شود که عملکرد آنها شبيه به برنامه عادي است. همه اين برنامه هاي Unix مانند چشم و گوش هاي مديران سيستم مي باشد که تعيين مي کنند چه فايل ها و سرويس هايي در حال اجرا هستند.
هکرها با پوشاندن چشم و گوشهاي مديران سيستم که توسط RootKit انجام مي شود مي توانند به صورت موثري حضورشان را در يک سيستم مخفي نگه دارند.
linux RootKit 5 ( lrk5 ) و Tornkit دو نمونه از RootKit هاي سنتي هستند که براي سيستم هاي Linux و Solaris نوشته شده اند و در سايت آشيانه مي توانيد اين RootKit ها را پيدا کنيد.
اين 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 شده قوي براي فايل هاي سيستمي مهم يک هکر قادر نخواهد بود که فايلي را تغيير داده و با همان اثر انگشت وارد شود.
TripWire يک ابزار قوي براي تست صحت است که در سايت آشيانه براي دانلود قرار داده شده است. TripWire درهم سازي MD5 اي از فايل هاي بحراني مثل/etc/passwd/bin/login - ls - ps و ... ساخته و به صورت دوره اي اين درهم سازي را با يک پايگاه داده اي امن مقايسه مي کند.
در صورت تغيير در MD5 يک سرويس سريع به مدير سيستم اطلاع مي دهد.
همچنين در RootKit هاي سطح هسته Scan پورت ها در شبکه که با استفاده از ابزارهايي مثل Nmap صورت گيرد پورت هاي شنونده را به مدير امنيتي سيستم نشان خواهد دد.
به همين دليل پويش دوره اي سيستم در طول شبکه براي پيدا کردن رد RootKit بسيار مفيد است. در آخر ذکر اين نکته لازم است که اگر سيستم شما با تمام اين ملاحظات آلوده به RootKit شد بهترين راه از بين بردن آن فرمت هسته و نصب مجدد سيستم عامل است
- سوال: يک هکر از چه راهي وارد يک سيستم ميشود؟
از راه شبکه (نه بابا ! )
بايد توجه کنيد که هر سيستم کامپيوتري (به عبارت بهتر هر سيستم عامل) به هر حال محصول کار تعدادي انسان است و حتما داراي تعدادي bug (خطاهايي که بعد از ارائه محصول به بازار به تدريج کشف ميشوند) خواهد بود. بعد از اينکه يک باگ مشخص شد، شرکت ها نرمافزارهايي را بهسرعت (در عرض چند ساعت ) ايجاد ميکنند تا مشکل رفع شود اينها را patch ميگويند. و بعد مديران شبکه (Wbemasters) در عرض چند روز تا چند سال (آين آخري در مورد ايرانه) آنها را download کرده و مشکل را حل ميکنند. در اين فاصله هکرها دمار از روزگار اين سايتها در مياورند...
- تعريف چند اصطلاح:
*** Hacker واقعي = سامورايي :
کسي که هدفش از نفوذ به سيستمها نشان دادن ضعف سيستمهاي کامپيوتري است نه سوءاستفاده ...
*** Wacker (واکر):
کسي که هدفش از نفوذ به سيستمها، استفاده از اطلاعات آن سيستمهاست (جرو هکرهاي کلاه سياه )
*** Cracker (کراکر):
کسي که هدفش از نفوذ به سيستمها، خرابکاري و ايجاد اختلال در سيستمهاي کامپيوتري است. (جرو هکرهاي کلاه سياه )
*** Preaker :
از قديميترين هکرها هستند که براي کارشان نياز (و دسترسي) به کامپيوتر نداشتند و کارشان نفوذ به خطوط تلفن براي تماس مجاني، استراقسمع و ... بود. اين جزو آموزش من نيست چون کار خيلي بديه (-;
? تقسيمبندي
- انواع کامپيوترهاي شبکه:
=> کامپيوترهاي Server : کامپيوترهايي که کارشان تامين اطلاعات در شبکه است، مثلآ کامپيوترهايي که سايتها را نگه ميدارند.
=> کامپبوترهاي Client : کامپيوترهايي که استفاده کننده هستند مثل همين کامپيوتر خودتان که داريد ازش کار ميکشيد.
- انواع سيستم عاملهايي که Server ها از آن استفاده ميکنند:
=> سيستمهاي فعلي:
* خانواده Unix (مثل FreeBSD , Linux )
* خانواده Windows (مثل WinNT, Win2000 )
* Sun Solaris
* OsMac
=> سيستمهاي قديمي (منقرض شده - آخيش ! ):
AIX, IRIS, DEC10, DEC20 , ...
- سوال: کدامها را بايد ياد گرفت؟
Win2000, Unix(Linux) را بايد ياد بگيريد. پيشنهاد من اين است که Win2000و RedHat Linux را روي کامپيوتر خود همزمان داشته باشيد.
? زنگ تفريح
- تقسيم بندي من براي هکر ها:
?- جوجههکرها (احمق کوچولوها):
تواناييها: بلدند از Sub 7 , 187 استفاده کنند و فکر کنند ديگه همهچي رو ياد گرفتهاند !
?- خروسهکرها يا مرغهکرها (احمقهاي بزرگتر):
تواناييها: Mail Box را هم ميتوانند Bomb کنند ... ماشاءالله !
?- هکرهاي قابلاحترام ( مثل خود شما):
دارند ياد ميگيرند و هنوز ?،? سال کار دارند.
?- هکرهاي پيشکسوت (مثل من):
ديگه آفتاب لبه بومه ... هکرهاي قابل احترام را دوس دارند ...
? FAQ
- چه چيزهايي را بايد داشته باشم تا شروع کنم؟
?- Win2000 , Linux را روي کامپيوتر خود نصب کرده و شروع به يادگيري کنيد.
?- شروع به يادگيري زبان C کنيد.
?- شروع به يادگيري TCP/IP کنيد. (يک کتاب بخريد )
?- مهمترين چيز علاقه به طي کردن يک را بسيار طولاني
۱- کلاس A: اگر ip را بهصورت xxx.yyy.yyy.yyy در نظر بگيريد، اين کلاس تمام ipهايي را شامل ميشود که xxx بين ۱ تا ۱۲۶است. اين کلاس ويژه backbone هاي بزرگ اينترنتي است و در هنگام ثبت domain براي گرفتن ip از آنها استفاده ميشود. بنابراين اکثر سايتها چنين ipهايي دارند. اين کلاس را 8/ هم ميگويند.
۲- کلاس B: اين کلاس تمام ipهايي را شامل ميشود که xxx بين ۱۲۸ و ۴۱۹است. اين کلاس هم از جمله کلاسهاي پرکاربرد است. اين کلاس را 16/ هم ميگويند.
۳- کلاس C: اين اين کلاس تمام ipهاي را شامل ميشود که xxx بين ۴۲۰ و ۷۴۲ است. اين کلاس معمولا به ISP هايي که خدمات dial-up ارائه ميدهند، تعلق ميگيرد (اين جمله چندان مستند نيست.). بنابراين اگر بهصورت dial-up به اينترنت متصل شويد، چنين ip ميگيريد. اين کلاس را 24/ هم ميگويند.
سوالي که پيش ميآيد اين است که xxx چرا نه در کلاس A و نه در B، عدد ۱۲۷را شامل نميشود؟ جواب اين است که ۱۲۷براي کامپيوتر خودمان رزرو شده است. مثلا 127.0.0.1 معمولا يعني localhost يعني خودمان.
بهدست آوردن ip خودتان بعد از اتصال به اينترنت
براي اينکار راههاي متفاوتي وجود دارد:
۴- راحتترين راه استفاده از دستور ipconfig است. من با تايپ کردن آن به نتايج زير رسيدم:
Windows 2000 IP Configuration
PPP adapter neda:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 217.66.198.116
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 217.66.198.116
که آدرس ip تان را ميتوانيد در سطر Ip Address ببينيد. (مسئله پروکسي را فعلا ناديده بگيريد)
۵- بعد از اتصال به اينترنت حداقل يک صفحه باز کنيد و بعد دستور netstat -n را در command prompt تايپ کنيد. من با تايپ اين دستور به نتايج زير رسيدم:
Active Connections
Proto Local Address Foreign Address State
TCP 217.66.198.116:2469 64.58.76.177:80 ESTABLISHED
TCP 217.66.198.116:2471 66.163.175.130:80 ESTABLISHED
TCP 217.66.198.116:2473 212.73.194.143:80 ESTABLISHED
TCP 217.66.198.116:2474 212.73.194.143:80 ESTABLISHED
TCP 217.66.198.116:2476 212.73.194.136:80 SYN_SENT
ستوني که زير عبارت Local Address قرار دارد، ip من در آن اتصال است. بنابراين ip من در آن اتصال 217.66.198.116 بوده است.
ادامه مبحث Footprinting براي سرورها
قبلا بحث را با روش پيدا کردن ip سرورها (سايتها) شروع کرديم. حالا کمي در مورد whois ميآموزيم. لازم به ذکر است که هنوز درمورد FootPrinting کلاينتها صحبتي نکرده و نميکنم.
Whois چيست؟
تعريف کلي براي whois نميتوان ارائه داد ولي فعلا منظور ما از Whois همان کسب اطلاعات در مورد يک سايت است.
(کاري که امروز ميخواهم انجام دهم کسب اطلاعات در مورد يک شماره ip و يا يک domain (مثلا irib.com ) خاص است. براي کسب اين اطلاعات بايد به اينترنت وصل شده و بهطريقي به يک سري سايتهاي خاص که وظيفه ثبت domain , ... را دارند متصل شده و اطلاعات را از آنها درخواست کنم. اين سايتهاي خاص database (بانکهاي اطلاعاتي) ويژه اين وظايف را دارند. براي کسب اين اطلاعات از سايتها روشهاي زير را ميتوان بهکار برد:
۶- اگر از طريق سيستم عامل يونيکس يا لينوکس به اينترنت وصل شدهايد، دستوري به اسم whois در آنها وجود دارد. و يا ميتوانيد از نرمافزارهاي خاصي که براي اين سيستمعاملها وجود دارد (مثل Xwhois ) استفاده کنيد. ولي فعلا بحث روي ويندوز است و اين دستور در ويندوز وجود ندارد.
۷- براي whois کردن در ويندوز نرمافزارهاي زيادي وجود دارد (که به زودي نوشتن يک whois متوسط را در زبان C ياد خواهم داد.) از مشهورترين اين نرمافزارها Netscan tools و SamSpade است. ولي از اينها هم فعلا صرف نظر ميکنم تا شما بيشتر با جزئيات اين کار آشنا شويد.
۸- روشي که ما در اين جلسه به کار ميبريم، استفاده از سايتهايي است که اين جستجو را براي ما انجام ميدهند. بحث را شروع ميکنم:
datebase هاي whois در چه سايتهايي وجود دارد؟
تعداد زيادي از سايتها اين دادهها را دارند که مشهورترينها عبارتند از:
whois.internic.net (The InterNIC)
whois.onlinenic.com (The OnLineNIC)
whois.arin.net (American Registry for Internet Numbers)
whois.ripe.net (European IP Address Allocations)
whois.apnic.net (European IP Address Allocations)
whois.nic.mil (US Military)
whois.nic.gov (US Government)
اولين سايت مشهورترين سايت ثبت domain براي org , net , com است.
توجه کنيد که امروزه سايتهاي مختلفي عمل ثبت domain را انجام ميدهند و براي اينکه در مورد يک سايت خاص (که در واقع يک domain خاص دارد) اطلاعاتي کسب کنيم بايد اطلاعات مربوطه را از آن سايتي بگيريم که ثبت domain را انجام داده است و چون اين کار مشکلي است به جاي استفاده از خود سايتهاي بالايي، از سايتهايي ديگر استفاده ميکنيم که اين کار را براي ما سادهتر ميکنند (خود آن سايتها در نهايت اطلاعاتشان را از سايتهاي اصلي ميگيرند و فقط يک نقش واسط دارند... لازم بهذکر است که ايجاد چنين صفحات وبي زياد هم مشکل نيست.). سايت مورد علاقه من براي کسب اطلاعات سايت زير است:
http://www.samspade.org/t/whois?a=xxxxxxxxx
که بجاي xxxxxxxxx آدرس سايت و يا ip آنرا مينويسيم و آدرس حاصله را در مرورگر خود ميبينيم. مثلا اگر بخواهم در مورد سايت sazin.com اطلاعاتي بهدست بياورم، مينويسم:
http://www.samspade.org/t/whois?a=sazin.com
و اطلاعات زير به دست ميآيد:
sazin.com is registered with BULKREGISTER.COM, INC. - redirecting
to whois.bulkregister.com
whois -h whois.bulkregister.com sazin.com
The data in Bulkregister.com\'s WHOIS .........................(deleted)
SazinNetWork
2nd.Floor,Bldg#116,Mollasadra Ave.
Tehran, TEH 14358
IR
Domain Name: SAZIN.COM
Administrative Contact:
Mohammad Hajati mjhajati@hotmail.com
Sazin Rasaneh Co.
4th.Floor,Bldg.339,Mirdamad Ave.
Tehran, TEH 19696
IR
Phone: +98 21 8787064
Fax: +98 21 8789841
Technical Contact:
Mohammad Hajati mjhajati@hotmail.com
Sazin Rasaneh Co.
4th.Floor,Bldg.339,Mirdamad Ave.
Tehran, TEH 19696
IR
Phone: +98 21 8787064
Fax: +98 21 8789841
Record updated on 2002-03-02 05:47:36
Record created on 1999-05-10
Record expires on 2007-05-10
Database last updated on 2002-09-15 08:58:02 EST
Domain servers in listed order:
DNS.SAZIN.COM 80.78.134.221
S1.SAZIN.COM 63.148.227.63
S2.SAZIN.COM 63.148.227.64
ملاحظه ميکنيد که اطلاعات زيادي در مورد اين سايت را به اين طريق ميتوان بهدست آورد. اطلاعاتي درمورد آدرس ISP ، شخصي که بهعنوان Admin کار ثبت را انجام داده است و ... البته باز هم نميتوان در مورد صحت و سقم آن اظهارنظر قطعي داشت.
تعدادي از مهمترين اطلاعات را در قسمت DNS Servers يا Domain servers (که در اين مثال در آخر قرار دارد) ميبينيد. بعدا در مورد اين آدرسها توضيح خواهم داد ولي فعلا ميگم که به کمک همين چند آدرسي که در آخر بهدست آورديم به کمک دستوري به نام nslookup ميتوان اطلاعات با ارزشتري بهدست آورد که بهزودي ياد ميگيريد.
-----------