14.6. سایر ملاحظات مرتبط با امنیت
امنیت تنها یک مشکل فنی نیست؛ بیش از هر چیر، درباره رویکردهای خوب و درک از خطر است. این قسمت به بررسی برخی از خطرات متداول، همراه با برخی رویکردهای خوب، که بر اساس موضوع مورد مطالعه، امنیت را افزایش داده یا احتمال بروز حمله احتمالی را کاهش میدهند.
14.6.1. خطرات ذاتی در برنامههای تحت وب
ویژگی اصلی برنامههای تحت وب منجر به تکثیر آنها میشود. برخی از آنها اغلب به صورت موازی اجرا میشوند: ایمیل تحت وب، ویکی، برخی نرمافزارهای گروهی، انجمنها، نگارخانهای از تصاویر، وبلاگ و از این قبیل. بسیاری از این برنامهها مبتنی بر پشته “LAMP” یا Linux, Apache, MySQL, PHP هستند. متاسفانه، بسیاری از این برنامهها بدون در نظر گرفتن اصول امنیتی نوشته شدهاند. دادهای که از خارج برنامه وارد میشود، اغلب بدون کوچکترین بررسی ذخیرهسازی میگردد. فراهم کردن مقادیر ویژه میتواند به منظور خراب کردن برخی دستورات قابل اجرا بکار رود. بسیاری از مشکلات مشخص در گذر زمان برطرف شدهاند، اما مشکلات جدید امنیتی به صورت روزانه بوجود میآیند.
از این رو بروزرسانی برنامههای تحت وب یک ضرورت به حساب میآید، تا مبادا یک خرابکار (خواه یک مهاجم حرفهای یا یک script kiddy) بتواند از آسیبپذیریهای موجود سواستفاده کند. خطر واقعی مبتنی بر این مورد است و طیف گستردهای از تخریب داده تا اجرای کد مخرب را شامل میشود، از جمله خارج کردن وبسایت از دسترس.
14.6.2. انتظار چه چیزی را داشته باشیم
یک آسیبپذیری در برنامه تحت وب اغلب به عنوان نقطه آغازی برای تلاشهای خرابکارانه استفاده میشود. آنچه در ادامه میآید خلاصهای از عواقب احتمالی آن است.
عواقب یک نفوذ سطوح مختلفی از مشاهدات درباره انگیزه مهاجم اصلی را شامل میشود. Script-kiddie تنها از دستورالعملهای موجود در وبسایتها استفاده میکند؛ اغلب یا وبسایت را از دسترس خارج یا دادهها را تخریب میکنند. در موارد نامحسوس دیگر، آنها اقدام به افزودن محتوای نامرئی در صفحات وب میکنند تا از طریق موتورهای جستجو بازدید بیشتری از سایت خود دریافت کنند.
یک مهاجم حرفهای تر فراتر از این میرود. یک سناریو بحران میتواند در چنین موردی بکار رود: مهاجم توانایی اجرای دستورات به عنوان کاربر www-data
را بدست میآورد، اما اجرای یک دستور نیازمند بسیاری تغییرات دیگر است. برای اینکه کار خود را راحت کنند، اقدام به نصب برنامههای تحت وب دیگری مینمایند تا چنین دستوراتی را از راهدور اجرا کنند، از جمله مرور فایل سیستم، بررسی مجوزها، آپلود یا دانلود فایلها، اجرای دستورات و حتی فراهم آوردن یک پوسته در شبکه. اغلب، آسیبپذیری امکان اجرای دستور wget
را برای دانلود برخی بدافزارها درون مسیر /tmp/
فراهم میکند که پس از آن اجرا میشوند. بدافزار اغلب از یک وبسایت خارجی دانلود شده که قبل از این مورد نفوذ قرار گرفته است، به این منظور که رد پای مهاجم را پوشانده و یافتن نقطه شروع حمله را دشوار سازد.
در این نقطه، مهاجم به اندازهای آزادی دارد که میتواند یک bot از نوع IRC را نصب کند (یک ربات که به یک سرور IRC متصل شده و از طریق آن کنترل میشود). از این ربات اغلب برای اشتراکگذاری فایلهای غیرقانونی استفاده میشد (نسخههای غیرمجاز از فیلم، نرمافزار و از این قبیل). یک مهاجم قاطع شاید بخواهد بیشتر از این پیشروی کند. حساب کاربری www-data
امکان دسترسی کامل را به کل ماشین فراهم نمیکند، از این رو مهاجم تلاش میکند دسترسی سطح بالاتری را در اختیار بگیرد. اکنون، اینکار نباید ممکن باشد، اما اگر برنامه تحت وب بروز نباشد، احتمال اینکه کرنل و سایر برنامهها نیز قدیمی باشند وجود دارد؛ اینکار اغلب از تصمیم مدیر سیستم میآید، که با وجود آگاهی از آسیبپذیری، از بروزرسانی سیستم خودداری میکنند با این بهانه که هیچ کاربر محلی برای آن وجود ندارد. از این رو مهاجم با توجه به این آسیبپذیری دوم میتواند دسترسی کامل به سیستم را اخذ نماید.
اکنون مهاجم کنترل ماشین را در دست گرفته است؛ آنها معمولا تلاش میکنند تا این دسترسی را تا آنجا که ممکن است حفظ نمایند. اینکار شامل نصب یک rootkit میشود، برنامهای که با جایگزین کردن برخی اجزای سیستم امکان اتصال مجدد مهاجم به آن را در زمان دیگری فراهم مینماید؛ rootkit همچنین تلاش میکند رد خود را پوشانده و اثری از خود بر جای نگذارد. یک برنامه ps
دستکاری شده از نمایش برخی فرآیندها چشمپوشی، netstat
برخی ارتباطات فعال را فهرست نمیکند و از این قبیل. با استفاده از مجوزهای root، مهاجم میتوانست دید کلی نسبت به سیستم داشته باشد، اما نمیتوانست دادههای مهم را پیدا کند؛ بنابراین تلاش میکنند تا به سایر ماشینهای شبکه داخلی دسترسی یابند. با بررسی و تحلیل حساب کاربری مدیریت و فایلهای تاریخچه آن، مهاجم در مییابد که به کدام ماشینها دسترسی داده شده است. با جایگزین کردن sudo
و ssh
با برنامههای دستکاری شده، مهاجم میتواند برخی از گذرواژههای مدیر سیستم را رهگیری کند که آنها در سرورهای شناسایی شده استفاده میکنند... و عملیات نفوذ میتواند از این نقطه رواج یابد.
این یک سناریوی کابوسبار است که میتواند با برخی اقدامات پیشگیری شود. قسمتهای بعدی برخی از این اقدامات را توضیح میدهند.
14.6.3. انتخاب آگاهانه نرمافزار
زمانی که مشکلات امنیتی احتمالی شناسایی شدند، در هر گام از این فرآیند توسعه سرویس باید مد نظر قرار گرفته شوند، به خصوص در زمان نصب نرمافزار مورد نیاز. بسیاری وبسایتها از جمله SecurityFocus.com
، فهرستی از آسیبپذیریهای اخیر را نگهداری کرده که میتواند قبل از استفاده هر نرمافزار دیگری مورد بررسی و تحلیل قرار گیرند. البته، این اطلاعات باید در مقایسه با نرمافزار پیش گفته مقایسه شوند: یک برنامه پرکاربردتر به عنوان یک هدف وسوسه برانگیز به حساب میآید و عواقب بیشتری نیز با خود در پی دارد. از طرف دیگر، یک برنامه ممکن است شامل حفرههای امنیتی باشد که هیچگاه به صورت عمومی بنا به دلایل مختلف در یک بازرسی امنیتی مطرح نشدهاند.
در دنیای نرمافزار آزاد، انتخابهای زیادی وجود دارد و انتخاب یک نرمافزار در مقایسه با دیگری بستگی به کاربرد آن در فضای محلی دارد. ویژگیهای بیشتر اغلب به معنی وجود آسیبپذیریهای بیشتر در کد برنامه هستند؛ انتخاب پیشرفتهترین برنامه برای انجام یک کار ممکن است سودمند نباشد و بهترین رویکرد آن است که برنامهای متناسب با نیازهای واقعی انتخاب گردد.
14.6.4. مدیریت یک ماشین به صورت کلی
اکثر توزیعهای لینوکس به صورت پیشفرض چندین سرویس یونیکس و ابزارهای مرتبط با آن را نصب میکنند. در بسیاری از موارد، این سرویسها و ابزارها با هدف اولیه مدیر سیستم از برپایی ماشین همخوانی ندارند. به عنوان یک توصیه عمومی در بحث امنیت، بهتر است که نرمافزارهای اضافی را حذف کرد. در حقیقت، در صورت وجود آسیبپذیری در یک سرویس غیرکاربری دیگر که میتواند به منظور دسترسی به کل سیستم استفاده شود، دلیلی برای ایمنسازی سرور FTP وجود ندارد.
به همین دلیل، فایروال اغب طوری پیکربندی میشود که تنها به سرویسهای عمومی اجازه ارسال ترافیک داده شود.
رایانههای امروزی به اندازهای قدرتمند هستند که اجازه میزبانی از چندین سرویس روی یک ماشین فیزیکی را فراهم میکنند. از نقطه نظر اقتصادی نیز چنین امکانی جالب است: تنها یک رایانه برای مدیریت، مصرف پایین انرژی و از این قبیل. از نقطه نظر امنیتی، اگرچه چنین انتخابی میتواند مشکل آفرین باشد. یک سرویس نفوذپذیر میتواند امنیت کل ماشین را به خطر اندازد، که منجر به نفوذپذیری سایر سرویسهای میزبانی شده روی ماشین میگردد. این خطر میتواند با ایزولهکردن سرویسها کاهش یابد. اینکار میتواند با استفاده از مجازیسازی (میزبانی از هر سرویس درون یک ماشین مجازی یا نگهدارنده) یا ترکیب AppArmor/SELinux (هر فرآیند پسزمینه از سرویس به صورت مجموعهای جداگانه از مجوزها) انجام شود.
14.6.5. کاربران به عنوان بازیکنان اصلی
بحث و گفتگو درباره امنیت این ایده را متصور میشود که باید در مقابل خرابکاران ناشناس که در اینترنت پراکنده شدهاند، محافظت بعمل آورد؛ اما حقیقتی که کمتر به آن توجه میشود خطراتی است که از داخل مجموعه نشات میگیرند: یک کارمند که در آستانه خروج از شرکت قرار دارد میتواند با دانلود پروژههای حساس آنها را به رقیبان شرکت بفروشد، یک مدیر فروش بیتوجه میتواند میزکار خود را در یک جلسه با افراد خارج از شرکت باز نگه دارد، یک کاربر دست و پا چلفتی میتواند به اشتباه یک دایرکتوری از فایلها را پاک کند و مواردی از این قبیل.
پاسخ به این خطرات میتواند شامل راهکارهای فنی باشد: به هیچ کاربری نباید بیش از اندازه نیازش مجوز دسترسی داد و نگهداری از فایلهای پشتیبان یک ضرورت به حساب میآیند. اما در بسیاری موارد، محافظت در برار این خطرات با آموزش کاربران صورت میگیرد.
اگر از خود رایانهها به صورت فیزیکی محافظت نگردد، دلیلی برای ایمنسازی سرویسها و شبکهها وجود ندارد. دادههای مهم سزاوار این هستند که در هارد دیسکهای how-swappable و به صورت آرایههای RAID ذخیرهسازی شوند، چرا که هارد دیسکهای معمولی در گذر زمان معبوب شده و موجودیت داده امری بسیار حیاتی است. اما اگر قرار باشد هر فردی بتواند وارد ساختمان شده، به اتاق سرور برود و با چندین هارد دیسک خارج گردد، قسمت مهمی از امنیت برقرار نشده است. چه کسی میتواند وارد اتاق سرور شود؟ آیا این دسترسی مانیتور میشود؟ زمانی که امنیت فیزیکی مورد بررسی و تحلیل قرار میگیرد، این پرسشها باید مطرح شده و پاسخ داده شوند.
امنیت فیزیکی همچنین شامل در نظر گرفتن خطراتی از قبیل آتشسوزی نیز میباشد. این خطر مشخص لزوم نگهداری رسانه پشتیبان در یک ساختمان دیگر را نشان میدهد، یا حداقل در یک صندوقچه ضد-آتش.
یک مدیر سیستم، کم و بیش، مورد اعتماد کاربران سیستم و کاربران شبکه به صورت عمومیتر قرار میگیرد. آنها باید از هرگونه غفلت که ممکن است افراد بدخواه مورد استفاده قرار دهند، پیشگیری کنند.
مهاجمی که کنترل ماشین شما را در دست میگیرد از آن به عنوان یک پایگاه (که بنام ... شناخته میشود) استفاده میکند تا سایر اقدامات نابکارانه خود را انجام دهد که میتواند برای شما مشکل حقوقی ایجاد کند، چرا که این حملات از ماشین شما به شبکه صورت میگیرد، که شما را در این مورد مهاجم (یا همدست) در نظر میگیرند. در بسیاری موارد، مهاجم از سرور شما به عنوان یک relay برای ارسال اسپم استفاده میکند، که نباید تاثیر خیلی منفی داشته باشد (بجز اینکه با قرار گرفتن در فهرستهای سیاه باعث میشود شما نتوانید ایمیلهای قانونی خود را ارسال کنید)، اما در کل تجربه لذتبخشی نخواهد بود. در سایر موارد، مشکلات بیشتری میتواند از ماشین شما نشات گیرد، برای نمونه حملات dos. اینگونه حملات اغلب به کاهش سود تجاری منجر میشود، چرا که سرویسهای قانونی از دسترس خارج میشوند و دادهها در معرض تخریب قرار میگیرند؛ گاهی اوقات این حملات منجر به هزینههای واقعی میشوند، چرا که شرکت مورد حمله قرار گرفته شده میتواند از شما شکایت کند. اگر یک نسخه غیرمجاز از یک اثر دارای کپیرایت درون سرورهای شما توزیع شود، میتوان از آن شکایت کرد، همچنین سایر شرکتهایی که مجبور به انعقاد توافقات سطح سرویسی کرده باشند که در صورت حمله از طرف ماشین شما باید غرامت و جریمه پرداخت نمایند.
زمانی که این اتفاقات میافتد، بیگناه جلوه دادن خود کافی نیست؛ حداقل باید ثابت کنید که مجموعه فعالیتهای مشکوکی از یک نشانی IP دیگر در سیستم شما انجام میشده است. اگر از توصیههای مطرح شده در این فصل چشمپوشی کرده باشید و به مهاجم اجازه ورود به سیستم و دسترسی به حساب کاربری مدیر (root در این مورد) را بدهید تا بتواند ردپای خود را بپوشاند، اینکار دیگر لزومی ندارد.