چقدر از کاربرای خونگی در خطر از دست دادن اطلاعات شخصی‌شون هستن؟

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

برای همین در ادامه‌ی اون پست، این مطلب رو اینجا میذارم تا یک مقدار بیشتر با خطراتی که کاربران خونگی رو تهدید میکنه آشنا کنم.

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

حالا با دادن یک آی‌پی به برنامه راحت میشه پسورد روتر رو بدست بیارید. دقت کنید که برنامه ابتدا ip مقصد رو پینگ میکنه و در صورت بالا بودن هاست، میره عملیات بعدی رو  روی اون اجرا میکنه.

Selection_026

با رفتن به آدرس http://ping.eu/ns-whois و دادن آی‌پی ولید خودتون، می‌تونید یک رنج از آی‌پی‌های ولید isp  رو بدست بیارید.

Selection_024

با کمی جستجو در اینترنت به اسکریپت زیر می‌رسیم که رنج ابتدایی و انتهایی ip رو میگیره و در انتها تمام ipهای بینش رو برامون تولید میکنه (خروجی برنامه‌ی زیر سی و پنج هزار آی‌پی هست). 
Selection_025

حالا کافیه به طریقی این آی‌پی‌ها رو به خورد اسکریپت اصلی بدیم که پسوردها رو قراره در بیاره برامون.

برای اینکار از برنامه‌ی xargs استفاده می‌کنیم. xargs خروجی یک برنامه رو میگیره و به صورت آرگومان به برنامه‌ای که مدنظرمونه میده. حالت پیشفرض xargs،‌ خروجی  به آخر برنامه اضافه میکنه. اگه بخوایم خروجی رو به وسط  کامندی که اجرا میکنیم، اضافه کنه از خروجی -I به همراه یک نام (place holder) استفاده مینیم.

 

کامند بالا علارغم ظاهر خیلی پیچیده‌ای که داره خیلی ساده عمل میکنه.

قلب اصلی  همون novid.py که فقط یک ip میگیره و قراره پسورد رو بهمون برگردونه. با اسکریپت Ip.sh و کمک برنامه xargs تعداد زیادی ip رو داریم به خوردش می‌دیم.

اما به دلایل مختلف ممکنه برنامه پیغام‌های خطایی رو برگردونه که اونها رو داریم به dev/null میریزیم (به جای نمایش اونها در صفحه نمایش). سر بعضی از آی‌پی‌ها برنامه کلا متوقف میشه و دیگه جلو نمیره. برای جلوگیری از این اتفاق از timeout استفاده میکنیم و  میگیم حالت نرمال برای پیدا کردن پسورد یک روتر زیر ۲۰ ثانیه‌ست. اگه بیشتر از این زمان برد، بیخیال اون آی‌پی بشو و برو سراغ بعدی.

xargs با استفاده از خروجی -I  به جای اینکه هر آی‌پی رو  انتهای کامند یعنی grep Router بیاره، اونها رو وسط کامند دونه دونه به برنامه میده! {}صرفا یک نام هست که می‌دونیم در کامندی که قراره بارها اجرا بشه هیچ استفاده‌ای نمیشه، میشه به جای اون هر چیز دیگه‌ای هم استفاده کرد.

اون بخش grep رو برای این گذاشتم که برنامه بعد از پیدا کردن پسورد روتر چند خط رو به عنوان خروجی بر میگردونه. پسورد نیز در خطی قرار داره که کلمه‌ی Router وجود داره.

بعد چند ساعت صبر و بسته به سرعت اینترنت، به کلی پسورد روتر خواهید رسید!

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

کار قشگ دیگه ای که میشه انجام داد اینه که ببینیم بیشترین پسوردی رو که ملت استفاده میکنن چیه؟

برای اینکار با کمی جستجو به اسکریپت count_all_words.py میرسیم.

کافیه همه پسوردها رو در یک فایل به نام PASSWDUSERS.txt ذخیره کنیم و بعد اسکریپت رو اجرا کنیم. برای استخراج پسورد از لیستی که در اختیار داریم، کامند زیر رو اجرا میکنیم.

و برای شمارش تعداد پسوردها نیز اسکریپت count_all_words.py رو اجرا کنیم.

 

جامعه‌ی کاربری بالا ۶۵۵ مورد و همگی از isp داتک بوده. جستجو هم روی ۸۲۰۰ آی‌پی صورت گرفته. نکته اما اینه که همه‌ی این ۸۲۰۰  ip بالا نبودن و اگه آی‌پی‌هایی که در زمان جستجو داون بودن رو حذف کنیم به درصد خیلی خیلی بالایی میرسیم که آسیب‌پذیر هستن. در یک رنج آی‌پی ۲۵۶ تایی تقریبا صد تا از کاربران آنلاین هستن و از این تعداد پسورد ۴۰ تا کاربر رو میشه در اورد. با تقریب خوبی میشه گفت ۴۰ درصد کاربرای داتک این مشکل رو دارن و احتمالا خودشون هم اطلاعی از این وضعیت ندارند!‌

خب حالا اینکه مشخص شد که تعداد خیلی زیادی از روترها مشکل دارن که چی؟ اول اینکه تا جای ممکن سعی کنید دسترسی به روتر از دنیای اینترنت رو غیر ممکن کنید.  هیچ دلیلی نداره که یک کاربر خونگی روترش از بیرون قابل دیدن باشه. برای اینکار روترها گزینه‌های متنوعی دارن. تعدادی مشخصا گزینه‌ای دارن که دسترسی به روتر رو خیلی ساده غیرممکن میکنه از دنیای اینترنت. بعضی نیز بخشی به نام ACL دارن و بخشی نیز از طریق فایروال و بستن ترافیک ورودی این امکان رو برای شما فراهم میکنن. یک راه نیز اینه که تمام ترافیک ورودی به روتر رو به سمت یک آی‌پی داخل شبکه‌تون که وجود خارجی نداره هدایت کنید! برای اینکار در بخش dmz روتر باید یک آی‌پی در رنج شبکه داخلی بدید که البته وجود خارجی نداشته باشه.

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

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

2014-02-mitr-en

یادتون نره حتی در صورت بستن راه ورود به روتر از طریق اینترنت، مهاجم میتونه حمله رو از طریق خودتون انجام بده. بدین صورت که با وارد شدن به یک سایت آلوده، خودتون تبدیل به یک مهاجم میشید و پسورد مودم خودتون رو ریست میدید! بعد برنامه‌ دیگه‌ای میتونه وارد روتر بشه و از طریق پسوردی که معلوم و مشخصه، dns رو تغییر بده! :)‌

csrf-router-attack-640x410راهکار چیه؟ جواب اینه که فرم‌ویر روتر خودتون رو به dd-wrt تغییر بدید. dd-wrt یک فرم‌ویر اپن سورس مبتنی بر کرنل لینوکس که با دنگ و فنگ و کمی خوش شانسی باید بتونید روی روتر خودتون نصب کنید. ریسک اینکار رو هم قبلش باید بپذیرید که دیگه روتر قابل استفاده نباشه. برای اینکه بفهمید dd-wrt روی روتر شما کار میکنه یا خیر کافیه به این آدرس برید و نام روتر خودتون رو وارد کنید.

راهکار دیگه استفاده از روتر در حالت بریج هست. و اینکه از روتر خوتون در حالت bridge استفاده کنید. در این صورت تنظیمات pppoe که بر روی روترهای ADSL وجود داره به روی سیستم متصل به روتر منتقل میشه و مودم تنها نقش یک پل رو خواهد داشت!‌ افراد داخل شبکه در اینحالت باید از طریق سرور متقل به روتر، ip بگیرن. دیوایسی که برای اینکار در نظر میگیرید باید دو تا پورت لن یا یک پورت لن و یک وایرلس داشته باشه. حالت قشنگش اینه که از رزبری پای استفاده کنید. رزبری پای کلا یک پورت Lan بیشتر نداره. بنابراین باید یک مبدل usp به lan یا wireless نیز داشته باشید. برای os هم می‌تونید از ipfire یا OpenWRT استفاده کنید که هر دوی اونها نسخه مخصوص ARM رو دارن.

openwrt-raspi-network

به جای اس‌اس‌اچ از موشی استفاده کنید

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

Mosh مخفف Mobile Shell دقیقا با همین هدف نوشته شده، اینبار بجای TCP با استفاده از پروتکل UDP اتصال به سرور مقصد برقرار میشه  و اولین ویژگی که اون رو حس خواهید کرد، زنده بودن محیطه، انگار نشستید پشت مانیتور و دارید تایپ می‌کنید دستور رو، ویژگی دوم اینه که با عوض شدن آی‌پی حتی اتصال به سرور مقصد قطع نمیشه! اگرم که آی‌اس‌پی تون هعی بازیش گرفته و چراغ لینک مودم‌تون خاموش روشن می‌شه دیگه خیالتون راحته که از نو نباید به سرور مقصد وصل شید.

از اون مهمتر اینه که حتی کاربر معمولی هم می‌تونه از موشی استفاده کنه و لازم نیست حتما مجوز روت رو برای استفاده اینکار داشته باشید.

موش حاصل کار یکی از دانشجوهای دانشگاه Mit رونوشت به خودمون و دانشگاهامون که هیچ خروجی ازشون نداریم (داریم؟)

نمودار بالا هم مقایسه زمان پاسخ‌دهی در ssh و mosh رو نشون می‌ده که خب ۵ و ۱۷۳ میلی ثانیه رو مقایسه کنید با ۵۰۰ میلی ثانیه اس‌اس‌اچ! تقاوت خیلی خیلی محسوسه.

نکته ای که هست اینه که mosh برای وصل شدن در ابتدا از ssh استفاده میکنه و برای همین اگه بدون وارد کردن پسورد به سرور مقصد وصل می‌شید با mosh هم مشکلی نخواهید داشت.

نصب Mosh کار خیلی سختی نیست و احتمالا هر دیسترویی که داشته باشید اون رو درون مخازن می‌تونید گیر بیارید!

اگرم روی سرور فایروال دارید ، پورت‌های ورودی UDP بین ۶۰ هزار تا ۶۱ هزار رو باز کنید تا کلاینت بتونه به سرور وصل شه.

موش
موش

برای اتصال به سرور هم مشابه ssh باید همچین دستوری رو بزنید!

mosh root@127.0.0.1

‫پی‌نوشت: مرسی از دوست خوبم ebraminio بخاطر معرفی این برنامه خوب:ی

مقایسه زمان پاسخ‌دهی دی‌ان‌اس در شرایط مختلف

دی‌ان‌اس کارکرد اصلیش تبدیل آدرس دامین به ip سرور هست، وقتی وارد سایتی می‌شید و اسم اون رو تایپ می‌کنید، در پشت صحنه این آدرس باید تبدیل شه به آی‌پی و این بسته به دی‌ان‌اس سروری که دارید ازش استفاده می‌کنید و همینطور کشوری که درونش هستید زمانی رو می‌بره. هر چه این زمان کوتاه تر باشه یعنی دستکاری کمتره و سرعت بیشتر و کار با اینترنت دلچسپ‌تره.برای مقایسه، روی سروری که دستم بود یک دی‌ان‌اس سرور نصب کردم با برنامه ساده‌ی dnsmasq که فایل کانفیگش دو تا خط هم لازم نداره 🙂

listen-address=0.0.0.0
bind-interfaces

 کافیه پورت ۵۳ رو  باز بذارید و برنامه رو اجرا کنید و بعد هم سمت کلاینت (اگر لینوکس هستید) فایل resolv.conf رو تغییر بدید به آی‌پی سروری که در اختیار دارید داخل سرور هم میتونید دی‌ان‌اس رو به ۱۲۷٫۰٫۰٫۱ تغییر بدید تا خود سرور هم از دی‌ان‌اس سرور خودش استفاده کنه.

برای انجام این تست از برنامه ترمینالی dig استفاده میکنیم، بهتره ادرس سایتی رو وارد کنید که قبلا وارد نشدید تا مطمئن باشید سیستم از کش استفاده نمی‌کنه.

اگه از این ابزار بدون هیچ آرگومانی استفاده کنید،‌ به صورت خودکار از dns اصلی سیستم که اون رو در فایل resolv وارد کرده باشید استفاده میکنه و از این جهت آزمایش خیلی خوبیه برای اینکه مطمئن باشید دی‌ان‌اس که دارید استفاده می‌کنید همونی هست که مد نظرتونه.

dig archlinux.org
;; Query time: 197 msec
;; SERVER: server’s ip#53(server’s ip)
;; WHEN: Thu Apr  ۴ ۱۹:۲۹:۴۳ ۲۰۱۳
;; MSG SIZE  rcvd: 31

اما حالا فرض کنید می‌خوایم با دی‌ان‌اس سرور گوگل این تست رو انجام بدیم.

dig @8.8.8.8 archlinux.org
;; Query time: 270 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Apr  ۴ ۱۹:۳۵:۳۲ ۲۰۱۳
;; MSG SIZE  rcvd: 58

در تست اول از دی‌ان‌اس شخصی استفاده شده و برای همین ip رو مخفی کردم 🙂 سرعت زیر ۲۰۰ میلی ثانیه بوده اما با استفاده از گوگل سرعت به ۲۷۰ میلی ثانیه رسیده و این نشون میده داخل ایران استفاده دی‌ان‌اس سرورهای شناخته شده فکر خوبی نیست.

اما همین کار رو می‌شه سمت سرور که توی کشور آزادیه هم انجام داد و نتایج رو مقایسه کرد با داخل ایران!

dig archlinux.org
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Apr  ۴ ۱۵:۰۹:۵۷ ۲۰۱۳
;; MSG SIZE  rcvd: 31

فوق العاده‌ست 🙂 وقتی از دی‌ان‌اس سرور داخلی استفاده میشه سمت سرور سرعت به صفر میلی ثانیه می‌رسه!‌

و با استفاده از گوگل هم این نتیجه رو خواهیم داشت.

dig @8.8.8.8 archlinux.org
;; Query time: 17 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Apr  ۴ ۱۵:۱۲:۱۱ ۲۰۱۳
;; MSG SIZE  rcvd: 47

بله زمان پاسخ دهی در ایران ۱۵ برابر بیشتره 🙂 ۱۵ برابر زمان بیشتری رو از داخل ایران باید منتظر بمونید تا یک آدرس ساده به آی‌پی‌ تبدیل شه! هر پکتی که وارد ایران می‌شه  باید  از داخل هزارتوهای پیچ در پیچ فایروال و روترهای مختلف عبور کنه و توسط آدمای مختلف و سیستمای مختلف شنود بشه که یک وقتی شما وارد سایتی که به مذاق آقایون خوش نمیاد نشید.

اینم تمام نتایج در یک عکس

dnsTest

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

با پرمیشن صحیح وردپرس را امن کنید

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

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

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

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

حالا یه نیم نگاهی داشته باشیم به پروسه نصب وردپرس!‌ وقتی وردپرس رو نصب میکنید به صورت دیفالت مجوز فایل wp-config.php روی ۶۴۴ تنظیم میشه. همینطوره بقیه فایل‌های داخل وردپرس! مجوز فولدرها هم ۷۵۵ تنظیم میشه.

wp-config.php فایل خیلی خیلی حساس و مهمیه! با این مجوز شما دارید دو دستی یوزر و پسورد دیتابیس و بنابراین کل زندگی تون رو به راحتی تقدیم میکنید به هکرای خیلی خیلی ناشی! و باید ناراحت باشید از این موضوع که احتمالا به زودی حتی یه هکر ترک هم می‌تونه سایت و وبلاگتون رو هک کنه!

بیاییم ببینیم چه کارایی میشه انجام داد با این مجوز. فرض کنید یکی از همسایه ها یه خورده کنجکاوه.  همسایه منظور کسی  که روی همین سروری که وبلاگتون موجوده، سایت و وبلاگ داره بعلاوه دسترسی به ترمینال. این ادم در حالت عادی نمی‌تونه محتویات پوشه home لینوکس رو ببینه چون به صورت صحیح توسط سی پنل  پرمیشن صحیح دارن(مگه اینکه خیلی مسئول سرور ناشی باشه و دستی تغییر داده باشه).  این ادم برای اینکه بفهمه چه کسایی کنارش هستن (دایرکتوری های موجود در پوشه home رو ببینه) می تونه بره سایتای تبدیل دامین به آی‌پی (+) و برای مثال آدرس وبلاگم رو وارد کنه و آی‌پی سرور رو در بیاره و بعد بره سراغ موتور جستجوی بینگ و خیلی ساده کل سایتایی که روی سرور میزبانی میشن رو در بیاره (+)

واو خیلی جالبه! 🙂 همین اول کار توی لیست موتور جستجو یکی از وبلاگای بیگناه رو می‌بینم که هک شده!‌

wow

می‌شه حدس زد که اسم پوشه خونگی این کاربر روی سرور ikkco باشه و یا حتی مثلا پوشه خونگی وبلاگ خودم novid باشه‌:) و بعد با فرض اینکه طرف یه زمانی وردپرس استفاده می‌کرده، اون آدم بازیگوش میاد یه شورتکات ساده می‌سازه!

و حالا چون فایل مجوز ۶۴۴ داره  خیلی راحت یوزر و پسوردتون خونده میشه و این ادم میتونه وصل شه به دیتابیس و کلی کارای جالب کنه.

همینجا میشه نتیجه گرفت که اگه موقع نصب وردپرس، اون رو مستقیم اکسترکت نکنید و مثلا برید داخل یه پوشه به اسم nnnovid این کار رو کنید کار هکر رو کلی سخت کردید! کاری که خیلی ها اون رو انجام نمی‌دن.

trojan

اینجا فرض رو بر این گذاشتیم که کاربر دسترسی به ترمینال داره ولی حقیقت خیلی دردناک تر از این حرفاست 🙂 هکرها خیلی راحت تر از اینکه تصور کنید با استفاده از فایل‌های php خیلی کم حجم موسوم به شل دسترسی به قسمت‌های مختلف سیستم خواهند داشت. فرض کنید فایل php شل یوزر و مالکش novid و اسمش هم wp-search.php باشه، باید که خیلی خیلی  خوره وردپرس باشید تا اینکه متوجه شید به صورت پیشفرض اصلا همچین فایلی رو وردپرس وجود نداره 🙂 می‌تونه این فایل لابه لای تم رایگانی باشه که خیلی خوشحال اون رو پیدا کردید! اما غافل از اینکه این یک تله ست و تم حاوی فایل شل!

در اینصورت هکر کافیه وارد ادرس www.novid.ir/wp-search.php بشه. هر کاری رو که تصور کنید، این هکر می‌تونه با این شل انجام بده.  از رفتن به دایرکتوری ها مختلف، دیدن کل فایل های کاربر novid لیست گرفتن، در اوردن یوزر و پسورد و همونجا وصل شدن به دیتا بیس از داخل شل، حتی روش ها و تکنیک های معروف اکسپلویت کردن با استفاده از حفره های موجود یک نسخه خاص وردپرس و غیره و غیره. هکر می‌تونه حتی کل پروسه های در حال اجرای سرور رو ببینه!‌ می تونه با مشاهده پروسه‌های در حال اجرا یوزرهای دیگه رو ببینه 🙂 هکر سایت بالا می‌تونه اسم من رو در بیاره و بعد توی بخشی که وجود داره دایرکتوری من رو بزنه و قصد خوندن اطلاعاتم رو داشته باشه! اما همه این کارها تا زمانی که شل تحت یوزر و گروپ novid نباشه و فایل ها و فولدرهای وردپرسی هم پرمیشن صحیح داشته باشن منتفی میشه! هکر دست خالی بر می گرده!

یکی از این شل های خوشگل رو از سروری که زیر دستم بود و یه گروه ترک اون رو برام سوغاتی اورده رو اپلود میکنم تا بگیرید و ببینید این شل ها چطورین، نسخه‌های متنوعی وجود داره از این شل‌ها، این شل به محض اجرا شدن کلی ایمیل برای صاحبش می‌فرسته! پس احتمال داره با اولین اجرا یوزر و پسورد دیتابیستون برای مثال فرستاده شده باشه برای صاحب اثر :)‌ تنها راه از کار انداختنش روی سرور دادن مجوز chmod 000 به فایله و یا باز کردن سورس و  پیدا کردن ایمیل و عوض کردنش به مال خودتون 🙂

hacks

دقت کنید اگه مالک این فایل (شل) novid باشه حتی می تونه محتویات wp-config با مجوز ۴۰۰ رو هم بخونه! پس اگر یکی از این شل ها رو داشته باشید حتی با پرمیشن صحیح هم امنیت معنی نداره! علت اینه که در هاست های شیر برای اینکه پروسه های php که هر یوزر استفاده میکنه رو بتونن به تفکیک ببینن و هم اینکه هر کاربر از کاربر دیگه ایزوله و جدا باشه ( به شرط پرمیشن صحیح)‌ از suphp و suexec استفاده می‌کنن. کاری که این ها انجام میدن اینه که اجازه میدن فایل php با مجوز کاربر عادی هم اجرا بشه! دقت کنید در حالت عادی تنها کسی که مجوز اجرای فایل php رو داره آپاچی و بنابراین اگه در حالت عادی یه شل با مجوز novid روی سرور سبز بشه عملا کاری نمی تونه کنه.  پس در صورتیکه هاست شیر  داشته باشید و suphp و suexec داشته باشید قادر هستید تمام فایل‌های php رو با مجوز ۴۰۰ هم اجرا کنید 🙂

مجوز ۴۰۰ این حسن رو داره که اگه مطمئن باشید که پاک پاکید خیالتون راحته که اگه همسایه بغلی‌ یکی از ین شل‌ها رو داشته باشه نمی‌تونه بهتون آسیبی بزنه، می‌تونید گاهگاهی  یک بار بک اپ کامل از وبلاگتون رو ذخیره کنید و بعد با آنتی ویروس چک کنید. در صورتیکه فایل مشکوکی پیدا نکرد یعنی پاکید 🙂 یا وقتی که تم خاصی رو از نت می گیرید اون رو اول اسکن کنید و بعد روی سرور اپلود کنید.

حالا این مقدمات رو گفتم که بریم سر اصل مطلب و اینکه شما می تونید با خیال راحت کل فایل‌های php رو ۶۰۰ و یا ۴۰۰ تبدیل کنید 🙂 با مجوز ۴۰۰ حتی خودتون هم نمی‌تونید تغییری در فایل‌ها ایجاد کنید (که در حالت عادی با فرض اینکه طراح و برنامه نویس نیستید هیچ وقت این نیاز رو نخواهید داشت)! یک راه اینه که فایل حساس wp-config رو ۴۰۰ بگذارید و بقیه رو ۶۰۰ تا زمانایی که وردپرس رو اپدیت میکنید مشکلی از این بابت نداشته باشید 🙂 یه راه هم اینه که هر بار نسخه جدیدی میاد برید مجوزها رو موقتی ۶۰۰ کنید و بعد از آپدیت به نسخه جدید اون رو ۴۰۰ کنید.

اگه فایل های php رو ۴۰۰ کردید و سایتتون داون شد مطمئن باشید که سروری که هستید از suphp استفاده نمیکنه اما با تقریب خیلی بالایی بهتون اطمینان میدم اکثریت سرورهای هاستینگ شیر در ایران از این روش استفاده میکنن! در صورت داون شدن سایت فقط فایل wp-config رو ۴۰۰ بگذارید باشه و بقیه همون ۶۴۰ برگردونید و باز اگه جواب نداد ۶۴۴ بذارید باشن. اما wp-config رو بیشتر از ۴۰۰ ندید هیچ وقت (جز زمانایی که قراره پسورد و یوزر دیتابیس عوض بشه)‌

اما فایل های دیگه غیر از php مثل .htaccess  و عکس ها رو باید بتونید با مجوز ۴۰۴ درست کنید. علت اینکه مجوز گروپ رو ۴ میدید اینه که این دسته فایل ها دیگه با suphp و suexe اجرا نمی‌شن و بنابراین باید توسط other قابلیت خوندن داشته باشن تا آپاچی بتونه به اونها دسترسی داشته باشه 🙂 تمام css های تم و فایل متفرقه xml و اینجور چیزها شامل این قانون میشه.

پس نتیجه میشه چیزی مثل این

pr

برندگان مسابقه چرا گنو/لینوکس را دوست دارم معرفی شدند!

بچه‌ها مسابقه‌ای رو ترتیب داده بودن که چرا گنو/لینوکس رو دوست دارید و هر کی باید یه بهترین شکل این حس رو القا می‌کرد تا شاید بتونه برنده خوشبخت یک عدد بورد رزبری‌پی بشه 🙂

پشتیبان اصلی این مسابقه طبق معمول سیتو و بهنام توکلی عزیز بود که جا داره از زحمات زیادش تشکر کنم 🙂

اما بریم سر اصل مطلب و اون معرفی نفرات برتر! که بد نیست حتما برید بهشون سر بزنید!

نفر اول نویسنده وبلاگ رایت‌وب که پستی با عنوان چون میتونم باهاش برم به اعماق رو نوشته 🙂

whyilovelinux3
whyilovelinux3

نفر اول  خیلی خوب تونسته با احساسات ملت بازی کنه و عکسایی که گذاشته کافی بود برای اینکه امتیازای بالایی کسب کنه بدون اینکه زحمت خیلی زیادی برای نوشتن یه پست تخصصی و پیچ در پیچ به خودش داده باشه 🙂 و البته خیلی خوب و ساده تونسته حق مطلب رو هم ادا کنه :ی

اما نفر دوم با تئوری بیگ بنگ پا به میدون مسابقه می‌ذاره، نویسنده بعد از کلی ژانگولر بازی به این می‌رسه که

یه روز بعد از ظهر پشت سیستم نشستید و دارید به کارهاتون میرسید که یه دفعه آخرین قسمت سریال مورد علاقتون با زیرنویس فارسی و بدون حروف عربی شروع به پخش میکنه یه چیزی مثل این:

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

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

یکی از مشکلاتی که وقت ارایه ها دارم، کنترل اسلایدهاست. نشستن پشت کامپیوتر و زدن دکمه یا انجام دادن این توسط یه نفر دیگه 🙂 روش معمولشه، ولی روش من نیست.

و اینطور می‌شه که فرود از طریق مرورگرش فایرفاکس و استفاده از شبکه وایرلس کنترل اسلایدها رو برعهده می‌گیره!

نفر چهارم نویسنده وبلاگ saar که با شرکت در مسابقه به سکوت چند ماهه‌ش پایان داد 🙂 saar اول از آزادی‌هایی که گنو/لینوکس به ادم می‌بخشه می‌نویسه و بعد به صورت خیلی ملموس و البته تخصصی نشون می‌ده که چطور بخاطر آزادی عملی که وجود داره می‌شه حتی بخش‌های غیر قابل تصوری چون شبکه رو در گنو/لینوکس دستکاری کرد.

بذارین با یکم توضیح شروع کنم. اطلاعاتی که به لایهٔ TCP شبکه فرستاده می‌شن، تو یک غلاف جا می‌گیرن و اطلاعات لازم برای رسیدن به پروسهٔ مقصد بهشون اضافه می‌شه. بیت‌های ۱۰۰، ۱۰۱ و ۱۰۲ (اگر شماره رو اشتباه نگفته باشم) رزرو شده هستن و صفر در اون‌ها قرار می‌گیره. تو دانشگاه یک بار بحث پیش اومد که از این بیت‌ها می‌شه استفاده‌های مختلفی کرد. به عنوان مثال این بیت‌ها می‌تونن شمارهٔ کلید رمز‌نگاری/رمز‌گشایی بسته‌ای باشن که توی یک سازمان تعریف شده؛ بسته‌هایی که روی شبکه قرار می‌گیرن، بر اساس مقصد رمز‌نگاری خاصی داشته باشن. از طرفی روند عادی شبکه نباید تغییر کنه و به عنوان مثال مدیر که به همهٔ کلید‌ها دسترسی داره باز هم باید بتونه بسته‌های عادی خودش رو به شبکه (مثل اینترنت، با بیت‌های رزرو شدهٔ صفر) ارسال کنه. از نظر فنی، سیستم‌عامل وظیفهٔ بسته بندی اطلاعات رو بر عهده داره پس ایجاد این روند برای یک سازمان نیاز به تغییر سیستم‌عامل و البته بازنویسی یا تغییر کد اون قسمت از سیستم‌عامله.

عنوان پنجمی بخاطر امتیازای برابر به دو نفر از بچه‌ها رسید.

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

همین باعث می‌شه در دنیایی که ریشه‌ دارم برگ بدم و جوونه بزنم !یه روزی بهار من هم فرا می‌رسه شکوفه می زنم و میوه می‌دم :دی If you know what I mean

  من گنو/لینوکس رو دوست دارم چون کلی دلیل برا دوست داشتنش دارم و خوشحالم که این بازی بازنده نداره . برگ برنده در دست‌های من و ماست :)

اما عنوان پنجمی دیگه به وبلاگ hypermit رسیده. نویسنده این وبلاگ در ابتدا به صورت خلاصه به دلایل دوست داشتن گنو/لینوکس اشاره می‌کنه.

  • تنوع زیاد و آزادی در انتخاب
  • مشکل از کمبود اطلاعات شماست
    اگر کاری رو نمی تونید انجام بدید اشکال از کمی اطلاعات شماست.
  • هیچ چیز رو از صفر شروع نمی کنید
  • بهترین مکان برای گیک ها

و بعد خیلی خوب می‌ره سراغ مثالای عینی و اینکه چطور گنو/لینوکس بهش کمک می‌کنه تو انجام کارهای مختلف.

  • دانلود شبانه رایگان
  • یادآوری
  • کنترل اتفاقات سرور و ارسال sms برای تمامی ادمین ها
    اگر سرور لینوکسی داشته باشید و چندتا ادمین، و سرور هم مهم باشه خیلی ساده می تونید روی سرور اسکریپت بنویسید که چیزهایی که روی سرور مهم هست رو چک کنه و اگر اتفاقی بحرانی افتاد توی یک فایل تکست یک جایی که بشه دانلودش کرد بریزه. و با گوشی n900 یک اسکریپت ساده دیگه بنویسید که اون فایل رو مثلا ۱۵ دقیقه یکبار چک کنه و اگر چیز غیر عادی داخلش بود اون اتفاق رو برای تمامی ادمین های sms کنه.

    • گوشی n900 و جاسوسی
    • کنترل دمای کامپیوتر و فن
    • اجرای موزیک از طریق ترمینال

اما غیر از نفرات اول تا پنجم مطالب خیلی خوب دیگه‌ای هم وجود داشت که درسته رتبه‌ای کسب نکردن اما حقیقتا ارزش وقت گذاشتن بیشتر رو دارن 🙂

دانشجوی دانشگاه امیرکبیر که از خاطره خودش توی این دانشگاه گفته با عنوان چه جوری کل پهنای باند ممکن رو نوش جان کنید!

این داستانی که میخوام براتون تعریف کنم توی چله تابستون وقتی که کسی دانشگاه نیست اتفاق افتاده و خب ما چون پایه ثابت خوابگاه بودیم! بودیم!اون سالی که من دانشجو بودم و این اتفاق افتاد دانشگاه صنعتی امیرکبیر اینترنتش رو از طریق سه یا چهارتا پروکسی squid به دانشجوها و اساتیدش در مقاطع مختلف ارائه میداد. اون سال بخاطر چله تابستون بودن دوستان انفورماتیک زحمت کشیده بودن و به همه بدون پسورد سرویس میدادن. یعنی هیچ یک از پراکسی ها پسورد نداشت و تنها محدودیت رو روی آی پی آدرس شما اعمال میکردن و شما رو محدود میکردن خب شما هم اگه جای من بودید دوست داشتید از این فرصت بوجود اومده استفاده کنید.

که واقعا نکات خیلی آموزنده و صد البته کاربردی رو این پست داره 🙂

** برای دیدن مطالب بقیه شرکت کننده ها به اینجا مراجعه کنید

بازی با سرور

یه چند وقتیه که سرور این و اون دستمه و منیج می‌کنم بد ندیدم یه سری نکاتی که به درد بخورن رو بنویسم اینجا بیشتر برای خودم که ازشون استفاده کنم بعدها 🙂 امیدوارم به درد دوستان هم بخوره!

Capture

یکی از اولین کارهایی که می‌کنید وقتیکه سرور افتاد زیر دستتون به جون سخت افزارش بیفتید و ببینید دقیقا چی به چیه 🙂

مثلا با این دستور خیلی راحت سرعت نوشتن اطلاعات روی هارد رو در بیارید.

واو یه شاهکاره 🙂 نمی‌تونید تصور کنید شور و شوقی رو که دارم از اینکه همچین سروری زیر دستمه 🙂

خب حالا ببینم چند تا پردازشگر داره سرور و برای اینکار از دستور زیر کمک می‌گیریم

عدد ۱۶ داره می‌گه سرور ۱۶ تا هسته داره 🙂 قضیه چیه؟ پردازشگر ۱۶ هسته‌ای داریم؟ با دستور زیر اسم و مدل پردازشگر رو در میاریم.

و حالا با یه سرچ کوچولو به این می‌رسیم که پردازشگر E5620 چهار هسته داره که با فناوری خاص اینتل، انگاری ۸ تا هستن (تریت)! بنابراین خیلی فریب ۸ هسته ای بودنش رو نخورید چون واقعا ۴ تا هسته بیشتر نداره. اما فرکانس کاری ۲.۴ گیگاهرتز هست 🙂
حتما باید حدس زده باشید که سرور دو تا پردازشگر داره!‌ 🙂

ببینیم لینوکس فرکانس کاری رو چند نشون می‌ده؟

اینجاست که باید مشکوک شید که نکنه کلاهی گذاشته شده سرتون! چرا فرکانس واقعی در حال کار پردازشگر ۱۶۰۰ مگاهرتزه؟ 🙂 با فرکانس اسمی ۲۴۰۰ اینقدر اختلاف داره؟ که بعد متوجه می‌شیم آقای اینتل این پردازنده رو مجهز کرده به اسپید استپ که دقیقا کارش اینه که فقط زمانایی که لازمه و فشاری هست فرکانس پردازشگر بره بالا و از این طریق هم توی مصرف انرژی صرفه جویی شده باشه و هم طول عمر پردازشگر بالا بره!

برای اینکه مطمئن شیم باید یه جوری سیستم رو تحت فشار قرار بدیم! 🙂

جالب نیست؟ به صورت موازی و همزمان، میایم تا زمان نامحدودی اطلاعات بیخودی و در وری (صفر) روی هارد می‌نویسیم! بعد توی تب جدید می‌ریم وضعیت فرکانسای پردازشگر رو چک می‌کنیم 🙂

کار بیشتر کشدیدم، هسته‌های بیشتری تحریک شدن و تا حداکثر  فرکانس ممکن هم دارن کار می‌کنن 🙂 راضی هستیم و می‌ریم سراغ بقیه کار!

یکی از کارایی که بعد راه افتادن امکانات مختلف روی سرور حتما باید هرازگاهی چک کنید، تعداد افراد آنلاین و لحظه‌ای هست! اینکه آدمای مختلف دقیقا با چه آی‌پی‌هایی و چه پورت‌هایی به سرور وصل شدن و دارن از خدمات مختلف مثل ssh و یا دیدن سایت و بقیه امکانات بهره می‌برن 🙂 و از همه مهمتر، آیا یک آی‌پی به صورت غیر عادی داره از منابع سیستم استفاده می‌کنه؟

همم، به ترتیب از کمترین تا بیشترین استفاده یهو براتون لیست می‌شه‌:) یه نفر تونسته تا چهل کانکشن مختلف به سرور بزنه! می‌شه با توجه به قدرت سخت افزار و اینجور مسائل،‌ محدودیت گذاشت تا افراد از یه حدی بیشتر نتونن از منابع استفاده کنن.

فرض کنید میزبان سایتی هستید و می‌خواید ببینید دقیقا چقدر آدم داره از سایتتون بازدید به عمل می‌یاره!؟

زیباست 🙂 ۸۳ نفر دارن از پورت ۸۰ استفاده میکنن!

فکر کنید حقوق و دستمزد ساعتی دارید می‌گیرید؟ خب باید یه طوری نشون بدید که چند ساعت وصل بودید از خونه دیگه؟

یه راه اینه آمار ساعتایی رو که با ssh وصل شدید به سرور رو در بیارید، تمام موارد مهم مثل لاگین شدن توی سنت او اس در فایلی به اسم secure ثبت می‌شه! پس با دستور زیر سعی میکنیم به هدفمون برسیم!

الان می‌تونید حتی آمار کسایی که بدون اطلاع شما وصل شدن ssh رو هم در بیارید اما هنوز روش خوبی  نیست برای اینکه بشه حقوق ساعتی رو به صورت مستند دریافت کرد.

با کمی جستجو به برنامه psacct می‌رسیم و متوجه می‌شیم یک برنامه شاهکاره! 🙂

جالبناک شد!  در مجموع ۷۱ ساعت وصل بودم به سرور که با اضافه کردن d به دستور می‌شه حتی به تفکیک روز آمار رو گرفت!

خب ساعت دو و چهل دقیقه صبحه، به نظرم دیگه کافیه برای امروز!

منبع عکس