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
، فهرستی از آسیبپذیریهای اخیر را نگهداری کرده که میتواند قبل از استفاده هر نرمافزار دیگری مورد بررسی و تحلیل قرار گیرند. البته، این اطلاعات باید در مقایسه با نرمافزار پیش گفته مقایسه شوند: یک برنامه پرکاربردتر به عنوان یک هدف وسوسه برانگیز به حساب میآید و عواقب بیشتری نیز با خود در پی دارد. از طرف دیگر، یک برنامه ممکن است شامل حفرههای امنیتی باشد که هیچگاه به صورت عمومی بنا به دلایل مختلف در یک بازرسی امنیتی مطرح نشدهاند.
In the free software world, there is generally ample room for choice, and choosing one piece of software over another should be a decision based on the criteria that apply locally. More features imply an increased risk of a vulnerability hiding in the code; picking the most advanced program for a task may actually be counter-productive, and a better approach is usually to pick the simplest program that meets the requirements.
14.6.4. مدیریت یک ماشین به صورت کلی
اکثر توزیعهای لینوکس به صورت پیشفرض چندین سرویس یونیکس و ابزارهای مرتبط با آن را نصب میکنند. در بسیاری از موارد، این سرویسها و ابزارها با هدف اولیه مدیر سیستم از برپایی ماشین همخوانی ندارند. به عنوان یک توصیه عمومی در بحث امنیت، بهتر است که نرمافزارهای اضافی را حذف کرد. در حقیقت، در صورت وجود آسیبپذیری در یک سرویس غیرکاربری دیگر که میتواند به منظور دسترسی به کل سیستم استفاده شود، دلیلی برای ایمنسازی سرور FTP وجود ندارد.
به همین دلیل، فایروال اغب طوری پیکربندی میشود که تنها به سرویسهای عمومی اجازه ارسال ترافیک داده شود.
رایانههای امروزی به اندازهای قدرتمند هستند که اجازه میزبانی از چندین سرویس روی یک ماشین فیزیکی را فراهم میکنند. از نقطه نظر اقتصادی نیز چنین امکانی جالب است: تنها یک رایانه برای مدیریت، مصرف پایین انرژی و از این قبیل. از نقطه نظر امنیتی، اگرچه چنین انتخابی میتواند مشکل آفرین باشد. یک سرویس نفوذپذیر میتواند امنیت کل ماشین را به خطر اندازد، که منجر به نفوذپذیری سایر سرویسهای میزبانی شده روی ماشین میگردد. این خطر میتواند با ایزولهکردن سرویسها کاهش یابد. اینکار میتواند با استفاده از مجازیسازی (میزبانی از هر سرویس درون یک ماشین مجازی یا نگهدارنده) یا ترکیب AppArmor/SELinux (هر فرآیند پسزمینه از سرویس به صورت مجموعهای جداگانه از مجوزها) انجام شود.
14.6.5. کاربران به عنوان بازیکنان اصلی
بحث و گفتگو درباره امنیت این ایده را متصور میشود که باید در مقابل خرابکاران ناشناس که در اینترنت پراکنده شدهاند، محافظت بعمل آورد؛ اما حقیقتی که کمتر به آن توجه میشود خطراتی است که از داخل مجموعه نشات میگیرند: یک کارمند که در آستانه خروج از شرکت قرار دارد میتواند با دانلود پروژههای حساس آنها را به رقیبان شرکت بفروشد، یک مدیر فروش بیتوجه میتواند میزکار خود را در یک جلسه با افراد خارج از شرکت باز نگه دارد، یک کاربر دست و پا چلفتی میتواند به اشتباه یک دایرکتوری از فایلها را پاک کند و مواردی از این قبیل.
پاسخ به این خطرات میتواند شامل راهکارهای فنی باشد: به هیچ کاربری نباید بیش از اندازه نیازش مجوز دسترسی داد و نگهداری از فایلهای پشتیبان یک ضرورت به حساب میآیند. اما در بسیاری موارد، محافظت در برار این خطرات با آموزش کاربران صورت میگیرد.
اگر از خود رایانهها به صورت فیزیکی محافظت نگردد، دلیلی برای ایمنسازی سرویسها و شبکهها وجود ندارد. دادههای مهم سزاوار این هستند که در هارد دیسکهای how-swappable و به صورت آرایههای RAID ذخیرهسازی شوند، چرا که هارد دیسکهای معمولی در گذر زمان معبوب شده و موجودیت داده امری بسیار حیاتی است. اما اگر قرار باشد هر فردی بتواند وارد ساختمان شده، به اتاق سرور برود و با چندین هارد دیسک خارج گردد، قسمت مهمی از امنیت برقرار نشده است. چه کسی میتواند وارد اتاق سرور شود؟ آیا این دسترسی مانیتور میشود؟ زمانی که امنیت فیزیکی مورد بررسی و تحلیل قرار میگیرد، این پرسشها باید مطرح شده و پاسخ داده شوند.
امنیت فیزیکی همچنین شامل در نظر گرفتن خطراتی از قبیل آتشسوزی نیز میباشد. این خطر مشخص لزوم نگهداری رسانه پشتیبان در یک ساختمان دیگر را نشان میدهد، یا حداقل در یک صندوقچه ضد-آتش.
یک مدیر سیستم، کم و بیش، مورد اعتماد کاربران سیستم و کاربران شبکه به صورت عمومیتر قرار میگیرد. آنها باید از هرگونه غفلت که ممکن است افراد بدخواه مورد استفاده قرار دهند، پیشگیری کنند.
An attacker taking control of your machine then using it as a forward base (known as a “relay system”) from which to perform other nefarious activities could cause legal trouble for you, since the attacked party would initially see the attack coming from your system, and therefore consider you as the attacker (or as an accomplice). In many cases, the attacker will use your server as a relay to send spam, which shouldn't have much impact (except potentially registration on black lists that could restrict your ability to send legitimate emails), but won't be pleasant, nevertheless. In other cases, more important trouble can be caused from your machine, for instance, denial of service attacks. This will sometimes induce loss of revenue, since the legitimate services will be unavailable and data can be destroyed; sometimes this will also imply a real cost, because the attacked party can start legal proceedings against you. Rights-holders can sue you if an unauthorized copy of a work protected by copyright law is shared from your server, as well as other companies compelled by service level agreements if they are bound to pay penalties following the attack from your machine.
زمانی که این اتفاقات میافتد، بیگناه جلوه دادن خود کافی نیست؛ حداقل باید ثابت کنید که مجموعه فعالیتهای مشکوکی از یک نشانی IP دیگر در سیستم شما انجام میشده است. اگر از توصیههای مطرح شده در این فصل چشمپوشی کرده باشید و به مهاجم اجازه ورود به سیستم و دسترسی به حساب کاربری مدیر (root در این مورد) را بدهید تا بتواند ردپای خود را بپوشاند، اینکار دیگر لزومی ندارد.