swaks، چاقوی ارتش سوئیس برای تست smtp سرور

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

در حالت عادی می‌توان هر ایمیلی را با هر فرستنده‌ای که دوست داشته باشید
به هر فردی ارسال کنید. اما mail server که درست تنظیم شده باشد همچون gmail و یاهو ip ایمیل دریافتی را با رکورد spf که صاحب دامین آن را تعریف کرده، تطبیق می‌دهند و در صورت ناهمخوانی ایمیل مستقیم به بخش اسپم می‌رود و غیر از آن یک نوشته را به کاربر نمایش می‌دهند که احتمال فیشینگ ایمیل وجود دارد.

 

برای تست همه این موارد نیاز به یک SMTP سرور (برای مثال smtp.novid.ir:587) و تعریف چند کاربر ([email protected] و [email protected]) و همینطور ایجاد پسورد برای آنها داریم. ایمیل‌های تست به آدرس [email protected]  ارسال می‌شود. برای تست حالت‌های مختلف از ابزار قدرتمند SWAKS استفاده خواهیم کرد.

 

ارسال ایمیل بدون احراز هویت

اگر SMTP سرور به درستی کانفیگ نشود، هر فردی بدون احراز هویت قادر به ارسال ایمیل از طریق آن خواهد بود. به اینگونه سرورها در اصطلاح open mail relay گفته می‌شود.

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

 

  • آپشن t یا همان to ایمیل فرد دریافت کننده است.
  • s یا همان server، آی‌پی یا آدرس smtp سرور مد نظر است که در اینجا از طریق پورت ۵۸۷ قصد وصل شدن به آن را داریم.
    پورت ۲۵ رو بسیاری از دیتاسنترها بسته‌اند و به دلیل امن نبودن، استفاده از آن توصیه نمی‌شود.
  • با استفاده از آپشن tls، کانکشن به smtp سرور به شکل STARTTLS برقرار می‌شود.
  • با آپشن from ایمیل فرستنده را مشخص می‌کنیم.

معمولا خط بالای QUIT مشکل اصلی در عدم ارسال ایمیل را می‌گوید.

<~* 530 5.7.1 Authentication required

تست باز یا بسته بودن پورت ۲۵ SMTP سرور

برای تست پورت ۲۵، کامند زیر را اجرا می‌کنیم.
به شکل پیشفرض swaks از پروتکل امن esmtp جهت اتصال به سرور استفاده می‌کند.

که نشان می‌دهد دسترسی به پورت ۲۵ عملا امکانپذیر نیست.

ارسال ایمیل با احراز هویت

برای ارسال ایمیل با یوزر و پسورد کافیست که آپشن a یا همون auth رو به کامند اضافه کنیم.
بعد از زدن اینتر،  یوزر و پسورد به شکل جداگانه پرسیده می‌شود.

 

ارسال ایمیل بدون فعال‌سازی tls

تست رو مجدد بدون tls انجام می‌دیم تا مطمئن شویم تنها راه اتصال به سرور از طریق امن امکان پذیر است.

 

ارسال ایمیل با پسورد اشتباه

کامند را با پسورد اشتباه اجرا و انتظار داریم که ایمیل ارسال نشود.

ارسال ایمیل با هویت یک فرد دیگر عضو سیستم

تست رو تغییر داده با یوزر و پسورد صحیح کاربر admin ایمیلی از طرف  info بفرستیم.
کافیست که from رو به info تغییر داده و یوزر و پسورد admin رو وارد به ترتیب صحبح وارد نماییم.

 

ارسال ایمیل با هویت فردی که عضو سیستم نیست

در آخر از طرف فردی که در سیستم وجود ندارد سعی در ارسال ایمیل می‌نماییم.

 

پی‌نوشت: خروجی swaks در این مثال‌ها بخاطر حفظ IP اصلی سرور دستکاری شده است.

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

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

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

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

حالا با دادن یک آی‌پی به برنامه راحت میشه پسورد روتر رو بدست بیارید. دقت کنید که برنامه ابتدا 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

امنیت پایین روترهای تی‌پی‌لینک

بعد مدت‌ها عید فرصت خوبی ایجاد کرد که بالاخره دستی به وبلاگ بزنم و چه موضوعی بهتر از موضوع اسفناک مشتری ispهای ایران…

سالهاست که خودم کاربر داتک هستم و روز به روز شاهد افت کیفیت این شرکت ارائه دهنده‌ی اینترنت بودم که حالا مشکلات امنیتی هم به اون اضافه شد.

هر کاربر متصل به اینترنت یک ip ولید توی اینترنت داره که برای بدست اوردنش کافیه توی گوگل سرچ بزنید what is my ip.

اگه فرض  کنیم ای‌پی من در اینترنت ۱۷۶٫۴۶٫۱۳۶٫۱۲۸ باشه ، با تقریب خوبی میشه گفت که آی‌پی‌های در رنج ۱۷۶٫۴۶٫۱۳۶٫۱/۲۴  همه‌گی مشتری‌های داتک هستن. حالا کافیه بیاییم چک کنیم چه مقدار از این آی‌پی‌ها پورت ۸۰ شون بازه. برای اینکار از برنامه nmap استفاده میکنیم.

این لیست، کاربرایی رو شامل میشه که صفحه‌ی اصلی روترشون توسط مرورگر قابل مشاهده است. مگه اینکه پورت ۸۰ شون رو از طریق nat انتقال داده باشن به وب‌سرور داخلی. وقتی این آی‌پی‌ها رو توی مرورگر وارد کنید  فرم یوزر و پسورد براتون ظاهر میشه. مهاجم  در ساده‌ترین حالت با یوزر و پسورد پیش‌فرض admin میتونه وارد تنظیمات روتر بشه.

اما در مورد روترهایی که پسورد پیش‌فرض اونها admin نیست، یک روش استفاده از  brute force با استفاده از برنامه‌ی Hydra است. این برنامه می‌تونه با استفاده از یک دیکشنری،‌ دونه، دونه پسوردها رو با سرعت خیلی زیادی تست کنه.

 

با کامند بالا، برنامه‌ هیدرا به سرعت ۵۰۰ تا از بدترین پسوردهایی که کاربرا خیلی علاقه به انتخابشون رو دارن با یوزر admin به روش سعی و خطا تست میکنه و نتیجه کار رو بهتون میگه. طبیعیه که اگه لیست پسوردا خیلی طولانی باشه زمان اینکار هم بیشتر میشه (احتمالا).

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

برای پیدا کردن یوزر و پسورد در حالت ssh هم به شکل زیر از برنامه استفاده کنید.

 

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

http://trac.kismac-ng.org/wiki/wordlists
http://www.room362.com/projects/hugelist.txt
https://wiki.skullsecurity.org/Passwords

اما موضوعی که هست وجود یک exploit یا به عبارتی حفره در مودم‌های TP-Link که باعث میشه فرد مهاجم به راحتی بتونه هر پسوردی رو که ست کرده باشید در بیاره.

 


اسکریپت کارش اینه که بعد از بدست آوردن پسورد، روتر رو از کار میندازه و در اصل اون رو ریست میده! ولی خب بعد از روئیت پسورد خیلی راحت میشه از برنامه خارج شد تا روتر ریست نشه.

با اجرا کامند بالا همچین خروجی رو خواهیم داشت. Selection_002 دقت کنید در هنگامی که اسکریپت به سوال Decrypt the rom-0 file locally میرسه، y رو تایپ کنید تا پسورد رو در بیاره براتون. و بعد هم کافیه Ctrl + c رو بزنید تا از برنامه خارج شید.

و خب همه‌ی اینا رو گفتم که بدونید وضعیت چقدر داغونه. داتک فخیمه میتونه با یک فایروال خیلی ساده، پورت ۸۰ رو ببنده، همونطور که پورت ۸۰۸۰ رو الان بسته (احتمالا بخاطر وجود backdoor که روی این مودم‌ها و روی این پورت وجود داره) ! و البته خود کاربرا هم میتونن کلا دسترسی به روتر از طریق وب رو کاملا مسدود کنن که این امر نیاز به آگاه‌رسانی اونها داره.

بازی موش و گربه

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

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

وقتی که محتویاتش رو دیدم اولین کاری که به ذهنم رسید این بود که کل کدای داخلش رو با یه مادر فاکر جابجا کنم تا هکره توی اجرای بعدی ببینه و حسابی عصبانی شه! 🙂

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

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

از روی دنبال کردن آی‌پی رسیدم به یه فایلی به اسم theme-edit.php داخل پوشه wp-admin و نکته جالب این بود که با باز کردن این فایل تو ادیتور مطلقا چیزی دستگیر آدم نمی‌شد به این خاطر که آقای هکر کد php رو رمزنگاری کرده بود و بنابراین محتویت فایل رو می‌دیم به سایتی مشابه ddecode که کارش تبدیل محتوای رمز شده به حالت عادیه.  بسته به سختی کد طی تعداد مراحلی این سایت کد واقعی رو در اختیارتون می‌گذاره و جالبه که این کد رو در یازدهمین مرحله می تونه از حالت رمز خارج کنه 🙂

شروع بسم الله با افتخار نوشته‌ی هکر رو می‌بینیم! (کد دیکد شده شل)

/* hide shell edited by r1pp3rm4ya*/

بله یک شل مخفی کشف کردیم! شلی که بخاطر محتوای رمز شده ش آنتی ویروس clam هم هشداری بهتون نمی‌ده. شاید بشه فقط از رو md5 حجم فایل مثلا گفت که احتمال داره فرد دیگه‌ای هم توی این کره خاکی توسط این شل آلوده شده یا نه.

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

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

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

اگه یادتون باشه پست قبلی در مورد یه شل به اسم wp-search گفتم. شلی که پاک شد اما اون هکر بعد چند روز اومده سر وقتش! بی خبر از اینکه پاک شده  و البته ارور ۴۰۴ گرفته:)

اما بیکار ننشسته! احتمالا از همون تکنیکی که بار پیش شل رو وارد سیستم کرده اینبار هم اومده و اون روش رو دنبال کرده.

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

و بعد در چندین مورد که همه ش رو اینجا نگذاشتم با استفاده از متد GET داخل پوشه آپلود رو می‌گرده به امید پیدا کردن اون حفره!

به نظرم خط ۴م دقیقا جایی بوده که حفره رو پیدا کرده و توسط متد GET و با استفاده از سایت خودش تونسته شل خودش رو بارگزاری کنه.

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

راستش رو بخواید حتی متوجه آدرس جایی که کد رو گذاشته نمی‌شم :))

http://blogger.com.bathroomremodeling.org/

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

ساعت ۷:۱۳ با تاخیر برم کوه!

 

 

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

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

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

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

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

حالا یه نیم نگاهی داشته باشیم به پروسه نصب وردپرس!‌ وقتی وردپرس رو نصب میکنید به صورت دیفالت مجوز فایل 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

بازی با سرور

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

Capture

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

منبع عکس

 

 

 

 

 

با استونل، تونل امن بسازید

استونل چیه؟ برنامه‌ای که میاد اطلاعات رد و بدل شده رو رمزنگاری میکنه.
اما به تنهایی هیچ کاربردی نداره و همیشه پشت سرش یه برنامه دیگه هست. یه جورایی میشه گفت مثل آپاچی می‌مونه و نقش گارسونی رو برعهده داره که دم در رستوران (پورت) به گوش ایستاده و همه درخواست‌ها رو می‌گیره و پاس میده به برنامه پشت سری (سرآشپز) 🙂 و بعد دوباره جواب  (غذای دستپخت سرآشپز) رو بعد از اینکه رمزنگاری کرد!  به دست مشری می‌رسونه و بنابراین وسط راه کسی متوجه نوع غذا نمی‌شه، اینکه پیتزاست و یا ساندویچ دیگه معلوم نیست!

stunnel

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

حالا که روند کار مشخص شد، می‌ریم سراغ ریزه کاری‌ها

ادامه خواندن “با استونل، تونل امن بسازید”