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

ماجرا از کجا شروع شد؟
صبح امروز وقتی وارد سرور شدم، متوجه شدم که CPU سرور به شدت در حال استفاده است و به طور ناگهانی به 100% رسیده است. این برای من یک علامت خطرناک بود، چون معمولاً زمانی که CPU به این حد میرسد، یا سرور در حال پردازش سنگین است یا چیزی غیرعادی در حال رخ دادن است. بعد از بررسی با ابزارهایی مثل htop، متوجه شدم که چند پروسه مشکوک در حال اجرا هستند که نامهای عجیبی مثل:
/tmp/kdevtmpfsi
داشتند و به وضوح تمام منابع CPU را مصرف میکردند.
تشخیص و ریشه مشکل
با بررسی بیشتر، متوجه شدم که این پروسهها هیچچیز جز یک crypto miner یا بدافزار نیستند که برای استخراج ارز دیجیتال به صورت غیرمجاز از سرور استفاده میکردند. این بدافزارها به محض ورود به سرور، تمام منابع سیستم را به خود اختصاص داده بودند و عملاً سرور را به یک دستگاه ماینر تبدیل کرده بودند.
بعد از بررسی دقیقتر، ریشه مشکل پیدا شد:
یک کانتینر PostgreSQL روی سرور من بود که پسورد ضعیفی داشت و به طور ناخواسته پورت دیتابیس برای دسترسی از بیرون باز شده بود. مهاجمین به راحتی از طریق brute-force وارد سیستم شده و این بدافزار را روی سرور اجرا کردند.
چه اقداماتی انجام دادم؟
پس از شناسایی مشکل، اقداماتی انجام دادم که شامل موارد زیر بود:
- حذف کامل کانتینر PostgreSQL اولین قدم این بود که کانتینر PostgreSQL را به طور کامل حذف کردم تا از هر گونه دسترسی غیرمجاز و بدافزارهایی که ممکن است در آنجا پنهان باشند، جلوگیری کنم.
- اجرای مجدد کانتینر با پسورد قوی و تنظیمات امن بعد از حذف کانتینر، تصمیم گرفتم که آن را دوباره با پسورد قوی و تنظیمات امنیتی مناسب راهاندازی کنم. این بار از تنظیمات فایروال و محدود کردن دسترسیها استفاده کردم تا دیگر هیچکس نتواند از بیرون به پایگاه داده دسترسی پیدا کند.
- پاک کردن تمام پروسههای بدافزار و فایلها تمام پروسههایی که توسط بدافزار اجرا شده بودند را از بین بردم و فایلهای آلوده را پاک کردم.
- محدود کردن دسترسیها در نهایت، دسترسیها را محدودتر کردم. تنها کاربران مجاز توانستند به دیتابیس و سایر منابع حساس سرور دسترسی داشته باشند.
پس از انجام این اقدامات، CPU سرور دوباره به حالت عادی برگشت و عملکرد سرور به حالت قبل از حمله بازگشت.
درسهای این تجربه
این حادثه به من نشان داد که چند نکته حیاتی در امنیت سرور وجود دارد که باید همیشه به آنها توجه کرد. این درسها میتوانند کمک کنند تا از حملات مشابه جلوگیری کنیم:
1. کانتینر امن ≠ دیتابیس امن
اگر کانتینر را به صورت امن راهاندازی کنید، اما پسورد ضعیف باشد یا پورت باز باشد، عملاً هیچ تفاوتی با نصب مستقیم دیتابیس بدون امنیت ندارد. همیشه از پسوردهای قوی استفاده کنید و پورتها را فقط در صورت نیاز باز نگه دارید.
2. دیتابیسها را به طور پیشفرض روی 0.0.0.0 قرار ندهید
یکی از اشتباهات بزرگی که میتواند رخ دهد این است که دیتابیسها را بدون نیاز به دسترسی خارجی، روی 0.0.0.0 قرار دهید. این باعث میشود که هر کسی که به اینترنت دسترسی داشته باشد، بتواند به دیتابیس شما دسترسی پیدا کند.
3. /tmp، محل مناسب برای اجرای فایلها نیست
یکی دیگر از درسها این است که هیچ فایلی نباید در دایرکتوری /tmp قرار گیرد. این مکان بیشتر برای فایلهای موقت است و استفاده از آن برای اجرای برنامهها خطرناک است.
4. ماینرها معمولاً نامهای خود را شبیه به کرنلها میگذارند
بدافزارهای ماینر اغلب نامهای مشابه با کرنل سیستم عامل انتخاب میکنند تا راحتتر پنهان شوند و شناسایی نشوند. این موضوع نشان میدهد که همیشه باید مراقب باشید که چه پروسههایی در حال اجرا هستند.
5. امنیت را از روز اول باید جدی گرفت
همیشه امنیت را از اولین روز راهاندازی سرور و کانتینرها باید جدی گرفت. وقتی که سیستم شما در معرض خطر قرار گرفت، زمان برای اقدامات پیشگیرانه گذشته است.
نتیجهگیری
حمله به سرور من یک تجربه تلخ اما آموزنده بود. این حادثه به من یاد داد که حتی اگر فکر میکنید همه چیز امن است، همیشه باید دقت کنید که همه جوانب امنیتی را در نظر بگیرید. امنیت نباید به عنوان یک انتخاب یا پس از وقوع حادثه مدنظر قرار گیرد، بلکه باید از همان ابتدا بخشی از طراحی و تنظیمات سیستم شما باشد.
اگر شما هم از سیستمهای مشابه مثل Docker، PostgreSQL یا سرورهای لینوکس استفاده میکنید، همیشه از پسوردهای قوی، فایروالها و محدود کردن دسترسیها استفاده کنید. این کارها میتواند شما را از مشکلات بزرگی مثل ماینرها و سایر بدافزارها نجات دهد.
سؤالات متداول (FAQs)
- چطور میتوانم از هک شدن سرور خود جلوگیری کنم؟ برای جلوگیری از هک شدن سرور، از پسوردهای قوی استفاده کنید، پورتها را محدود کنید، و از فایروال برای جلوگیری از دسترسی غیرمجاز استفاده کنید.
- چرا پسورد ضعیف در دیتابیس خطرناک است؟ پسوردهای ضعیف به راحتی توسط مهاجمین از طریق حملات brute-force شکسته میشوند و به آنها امکان میدهند که به دیتابیس شما دسترسی پیدا کنند.
- آیا استفاده از کانتینرهای Docker امنیت سرور را تأمین میکند؟ کانتینرها به خودی خود امنیت سرور را تأمین نمیکنند. شما باید تنظیمات امن، پسوردهای قوی، و فایروالها را به درستی پیکربندی کنید.
- چگونه میتوانم مطمئن شوم که سرورم آلوده به بدافزار نیست؟ برای تشخیص بدافزار، باید به دقت پروسههای در حال اجرا، فایلهای مشکوک، و مصرف منابع سرور را بررسی کنید.
- آیا میتوانم از Docker برای ذخیره پایگاه دادهها استفاده کنم؟ بله، اما باید تنظیمات امنیتی مانند پسورد قوی، محدودیت دسترسی، و جلوگیری از دسترسی خارجی به پایگاه دادهها را رعایت کنید.