لینوکس: امنیت، امنیت، امنیت
امروزه در دنیایی متکی بر فناوری اطلاعات زندگی میکنیم که هر لحظه به خطر افتادن جریان اطلاعات منجر به بروز خسارتهای تجاری جبران ناپذیری خواهد شد.
امروزه همه به دنبال یک سکوی (Platform) امنتر برای اجرای برنامههای کاربردی و سرویسدهندهها هستند.
لینوکس حرفهای زیادی برای گفتن در سمت امنیت دارد.
بسیاری از قابلیتهای امنیتی که در ویندوز وجود ندارند و یا فقط با اضافه کردن نرمافزارهای اضافی قابل دسترسی میباشند، بطور درونی و پیشگزیده در لینوکس پیادهسازی شدهاند.
لینوکس از ابتدا برای محیطهای شبکهای و چند کاربره طراحی شده است و همین باعث رعایت مسایل امنیتی از ابتدا در آن شده است، درحالی که ویندوز اینگونه نبوده و درحال حاضر نیز از نظر امنیتی دارای نقاط ضعف فراوانی است.
مثلاً یک برنامهی مخرب با استفاده از همین ضعفهای امنیتی میتواند کل سیستمعامل را نابود کند، ولی در صورتی که مورد مشابهی در لینوکس وجود داشته باشد، حداکثر به دایرکتوری خانگی کاربر اجرا کننده آسیب خواهد رسید، نه کل سیستمعامل.
اینطور نیست که لینوکس فاقد هرگونه اشکال امنیتی باشد، خیر!
ولی باز بودن کد منبع آن باعث میشود تا بسیاری از اشکالات امنیتی پیش از ایجاد خسارت و در مراحل توسعه و برنامهنویسی برنامه برملا شده و رفع شوند.
در صورتی که اشکالی نیز در برنامههای منتشر شده یافت شود، بدلیل موجود بودن کد منبع سریعاً برطرف میگردد.
در صورتی که در سیستمعامل ویندوز شما باید منتظر مایکروسافت بمانید و بمانید و بمانید.
سیستمعامل ویندوز دارای اشکالات امنیتی بسیاری است که به راحتی هم کشف نمیشوند و هنگامی کشف میشوند که خسارات جبران ناپذیری در اثر حمله از طریق آن ضعفهای امنیتی رخ دهد که امثال آنرا شاهد هستیم.
میتوان ادعا کرد که تقریباً هیچ ویروسی برای لینوکس وجود ندارد و این درحالی است که سالیانه بیش از ۱۰۰۰ ویروس و کرم مختلف برای سیستمعامل ویندوز ایجاد میشود.
این بخاطر عدم گسترده بودن لینوکس نیست، (حدود ۷۰ درصد از سایتهای وب در جهان بر روی سیستمعامل لینوکس و سرویسدهندهی وب آپاچی درحال اجرا هستند) بلکه بدلیل وجود حفرههای امنیتی متعدد ویندوز و سیاست انحصارگرایی مایکروسافت است.
یعنی چه؟
مایکروسافت طوری رفتار و سیاستگذاری کرده است که مشتریان خود را تنها به محصولات خودش عادت دهد.
بسیاری از کاربران ویندوز از اینترنت اکسپلورر و آتلوک برای مرور وب و پست الکترونیک استفاده میکنند.
من به عنوان یک ویروسنویس، میدانم که اگر ویروسی را برای کاربران ویندوز بنویسم، بر روی کامپیوترهای ۹۰ درصد آنها اثر خواهد کرد.
چون اکثراً از IE و Outlook استفاده میکنند.
ولی در لینوکس چطور؟
در لینوکس شما طیف وسیعی از انتخاب و عدم اجبار دارید.
من از مرورگر موزیلا استفاده میکنم.
دوستی دارم که Konqueror را ترجیح میدهد.
دیگری از Opera استفاده میکند.
من از Kmail استفاده میکنم.
دوستم از Evolution، دیگری از Pine و بعدی از Mutt و برادرم هم از Mozilla Mail.
من فقط میتوانم برای یکی از اینها ویروس بنویسم چون روی بقیه کار نخواهد کرد و عملاً میزان اثر آن اندک خواهد بود.
ضمناً هیچیک از ویروسهایی که برای ویندوز نوشته شدهاند، بر روی لینوکس کار نمیکنند.
اولین و برجستهترین تفاوت در اینجاست که سیستمهای مبتنی بر یونیکس به معنای کاملاً واقعی سیستمهایی چند کاربره هستند و برای هرفایل به تنهایی یا یک دایرکتوری میتوان سطوح دسترسی کاربران و گروههای کاربری تعریف کرد و هر کاربر بصورت پیشفرض دارای یک محدوده امن اطلاعاتی از فایلهای شخصی خانگی است.
چیزی که در اینجا دربارهی کاربران و گروه های کاربری لازم به ذکر است این است که هر کاربر در سیستم یونیکس یک دایرکتوری شخصی به نام home خواهد داشت که کلیه اختیارات دسترسی فایل در آن برای او مجاز بوده و میتواند در آن به ایجاد و حذف فایل یا عملیات دیگر بپردازد و هیچیک از کاربران یا گروههای دیگر بجز کاربر ریشه root در حالت عادی و بدون اجازه او نخواهند توانست به اطلاعات او دسترسی یابند.
(نکته مهم امنیتی)
در سیستمهای مبتنی بر یونیکس مثل لینوکس هر کاربری که مالک یا ایجادکنندهی یک فایل یا دایرکتوری باشد خواهد توانست با تعین سطوح دسترسی فایل یا دایرکتوری مربوطه برای دیگر کاربران یا گروههای کاربری آنان را از امکان خواندن و ایجاد تغییر و یا اجرای فایل اجرایی محروم یا بهرهمند سازد.
بدیهی است که مجوزهای تعریف شده برای یک گروه کاربری بر روی تمام اعضای آن گروه اعمال شده و هر کاربر عضو آن گروه از تمام مزایا یا محدودیتهای موصوف بهرهمند خواهدشد.
بطور کلی سه سطح دسترسی برای هر فایل یا دایرکتوری تعریف میشود که عبارتست از:
۱ - (Read permission (r یا مجوز خواندن: مجوز خواندن محتوای یک فایل را به یک کاربر میدهد و برای دایرکتوریها امکان لیست کردن محتویات داخل دایرکتوری را برای کاربر فراهم میسازد.
۲ – (Write permission (wیا مجوز ایجاد تغییرات: امکان ایجاد تغییرات در محتوای فایلها را به کاربر اهدا میکند.
برای دایرکتوریها این گرینه امکان ایجاد فایل جدید در دایرکتوری یا حذف فایلهای موجود در آن را برای کاربر مهیا میسازد حتی اگر این کاربر یا گروه کاربری مالک یا ایجادکنندهی اصلی فایل یا دایرکتوری نباشد.
۳ –( eXecute permission (x یا مجوز اجرا: این مجوز در مورد فایلهای اجرایی امکان اجرای فایل را به یک کاربر میدهد و در مورد یک دایرکتوری این گزینه امکان ورود به داخل دایرکتوری را به کاربر یا گروه خاص میدهد.
توجه داشته باشید که این گزینه را با گزینه Read اشتباه نگیرید، چون صرفاً با داشتن مجوز execute و بدون داشتن مجوز read کاربر یا گروه میتواند وارد دایرکتوری خاصی شوند ولی امکان خواندن محتویات داخلی آن دایرکتوری بهیچ عنوان برایشان فراهم نخواهد بود.
همیشه ترکیبی از سطوح سهگانه مجوزهای فوقالذکر قابل استفاده است؛ برای مثال شما در صورت مالکیت یک فایل میتوانید دسترسی به آنرا صرفاً برای شخص خود تعریف و سایر کاربران و گروهها را ازدیدن یا اجرا و ایجاد تغییر در آن محدود نمایید.
نکته: یک کاربر حتی میتواند یک فایل یا دایرکتوری را که مالک و ایجاد کنندهی اصلی آن خود اوست برای کاربران دیگر قابل دسترسی و برای خودش غیر قابل دسترسی تعریف کند که به این صورت حتی خودش از کلیه مزایای فایل مربوطه محروم خواهد شد و در آینده هم قادر نخواهد بود تا با ایجاد تغییر مجدداً به آن فایل یا دایرکتوری دسترسی پیدا کند.
در اینجاست که مدیر سیستم یا کاربر ریشه root تنها کسی خواهد بود که بصورت پیشگزیده با داشتن کلیهی مجوزهای لازم، شامل خواندن و نوشتن و اجرا، امکان تغییر مالکیت و سطوح دسترسی کاربران و گروهها را داشته و میتواند تغییرات لازم را در سیستم اعمال نماید.
ذکر این نکتهی بسیار مهم خالی از لطف نیست که حفظ و حراست از اطلاعات حیاتی سیستم مثل کلمهی عبور کاربر ریشه یکی از مهمترین جنبههای امنیت سیستمهای مبتنی بر یونیکس میباشد.
بیایید تا با ذکر یک مثال در مورد یک فایل و یک دایرکتوری به بررسی موضوع بپردازیم: در این مثال فرض شده که در مسیر جاری یک فایل به نام a_file و یک دایرکتوری به نام a_directory وجود دارد و با اجرای فرمان ls –l در خط فرمان این اطلاعات بدست آمده است: $ ls -l total 1 -rw-r----- 1 mehrdad users 0 Jul 8 14:11 a_file drwxr-xr-- 2 mohsen users 1024 Jul 8 14:11 a_directory/ نتایج فرمان ls –l را ازچپ به راست بررسی میکنیم: ستون اول فرمانls –l : 1 - ده کاراکتر اول نشاندهندهی نوع فایل و سطوح دسترسی آن است و اولین کاراکتر که در مورد سطر اول ( - ) و در مورد سطر دوم ( d ) میباشد، نشان میدهد که مورد موجود در سطر اول یک فایل معمولی و مورد موجود در سطر دوم یک دایرکتوری است.
البته انواع دیگری از فایل وجود دارد که با کاراکتری غیر از ( - ) مشخص میگردند و برای مطالعهی بیشتر میتوانید به مراجع موجود مراجعه کنید.
نه کاراکتر بعدی نشاندهندهی سطوح دسترسی تعریف شده میباشند و به ترتیب هر سه کاراکتر از چپ به راست شامل سطوح دسترسی متعلق به مالک، owner، و سطوح دسترسی گروهها، groups، و سطوح دسترسی برای سایرین،others، خواهد بود.
به عنوان نمونه سه کاراکتر مربوط به owner و groups و others در مورد یک فایل موجود در مثال بالابصورت زیر تعریف شده است: برای مالک: owner = (r w-) ، یعنی اینکه امکان خواندن r و نوشتن w و اجراکردنx وجود دارد.
برای گروهها( - -group = (r یعنی اینکه امکان خواندن فایل برای کاربران عضو کلیه گروههای کاربری موجود وجود دارد ولی هیچ کابری در گروههای موجود نمیتواند فایل را تغییر داده (یا حذف کند) و یا در صورت اجرایی بودن فایل آنرا اجرا نماید.
برای دیگران: others = ( - - - ) سه کاراکتر dash به این معناست که سایر کاربران یعنی آنهایی که در هیچ گروه کاربری موجود تعریف نشدهاند هیچیک از امکانات دسترسی موجود را نخواهند داشت.
(نکته امنیتی مهم) ستون دوم در فرمان ls -l: شامل یک شمارهی لینک میباشد و از این شماره برای تشخیص لینک به یک فایل موجود در چند نقطه سیستم استفاده میشود.
در مورد دایرکتوریها این شماره معانی زیاد دیگری دارد که در اینجا مجال پرداختن به همه آنها نخواهد بود.
ستون سوم در فرمان ls -l: این ستون نمایشدهندهی نام مالک فایل و نام گروه مالک آن میباشد.
ستون چهارم در فرمان ls -l: این ستون نمایشدهندهی اندازه و حجم فایل یا دایرکتوری و تاریخ و ساعت آخرین تغییرات اعمالشده بر آن و در نهایت ستون پنجم نتایج فرمان ls -l شامل نام فایل یا دایرکتوری میباشد.
نکته: بدیهی است که (rwx) به معنای تعریف حداکثر سطح دسترسی برای کاربر یا گروههای کاربری است و ( - - - ) به معنای عدم امکان دسترسی به فایل یا دایرکتوری میباشد.
چند نکتهی مهم در مورد یونیکس و لینوکس: اسامی فایلها در یونیکس و لینوکس میتوانند شامل هر نوع کاراکتری حتی کاراکترهای ascii بجز صفر و / باشند.
همانطوریکه میدانید در سیستمهای مبتنی بر یونیکس بر خلاف ویندوز هر فایل حتماً نیاز به داشتن پسوند سه حرفی مشخص کننده نوع فایل ندارد و قابلیتها و نوع فایلهای بدون پسوند یا extension کاملاً وابسته به محتویات فایل است و نه به پسوند آن.
بدیهی است که کاراکتر ( .
) جداکنندهی نام فایل و پسوند آن در ویندوز در محیط یونیکس و گنو/لینوکس یک کاراکتر از کاراکترهای تشکیلدهندهی نام فایل محسوب میگردد.
و نکته ظریف اینجاست که در سیستمهای مبتنی بر یونیکس کلیهی فایلها و دایرکتوریهایی که با کاراکتر نقطه یا دات ( .
) آغاز گردند فایلها یا دایرکتوریهای پنهان hidden محسوب میگردند.
توجه داشته باشید که چون برخی برنامههای گرافیکی مثلاً برنامه openoffice کماکان از پسوند نام فایل برای ذخیرهسازی و تشخیص نوع فایل بهره میبرند گاهی لازم است پسوند فایلهای ایجاد شده توسط این برنامههای کاربردی حفظ گردد تا برنامه موصوف در شناسایی نوع فایل دچار مشکل نشود.
نکاتی در مورد امنیت در لینوکس هنگامیکه مشغول تنظیمات سیستم خود هستید، باید حدس نیز بزنید که چه کسی ممکن است بتواند به سیستم شما دسترسی پیدا کند.
شما مطمیناً میتوانید به برنامههایی، به صورت رایگان، دسترسی داشته باشید و افراد دید متفاوتی نیز به شما داشته باشند، اما اگر فردی با تجربهای بیشتر از شما داشته باشد، یک حفرهی امنیتی واضح خواهد دید که تا جایی که بتواند از آن بهرهبرداری مینماید؛ بنابراین برای این فرد مشکلی پیش نخواهد آمد بلکه در این میان شما ضرر کردهاید.
لینوکس/یونیکس یک سیستم عامل با قابلیت پیکربندی و انعطاف بالا میباشد که اگر حفرهای در آن پیدا شود، به راحتی ناپدید خواهد شد.
کافیست از راهبر سیستم کمک بگیرید.
غالب توزیعهای لینوکس قبل از اتصال به اینترنت و استفاده از آنها در شبکه، نیاز به پیکربندیهایی دارند.
من، شخصاً، نمیتوانم تمام فایلهایی را، که ممکن است نیاز به ویرایش آنها داشته باشید، فهرست کنم؛ اما اگر از فایلهای Startup (یا لینکهای ردهت و دبیان) استفادهای نمیکنیم، آنها را باید حذف نماییم؛ اگر از این فایلها چیزی نمیفهمید، /etc/inetd.conf نقطهای دیگر برای شروع میباشد، بلافاصله اتصالات شبکه را حذف نموده و صفحهی راهنمای آن را بخوانید.
یک لیست اولیه از مواردی که باید چک شوند، عبارت است از: time، echo، nfs*، telnet*، smb (netbois)، ftp، login، pop3، nntp، tftp*، netstat، finger، http و ...
(* فایلها، پروتکلهای محبوب و عمومی هستند، اما میتوانند از نظر امنیتی بسیار ضعیف باشند)، اگر در شبکه هستید و خیالتان از این نظر راحت نیست، از راهبران سیستم بپرسید، آنها مطمئناً تجربیات بیشتری در این زمینه دارند و میدانند که از چه چیزی باید استفاده کنید و چه چیزهایی را نباید بکار ببرید.
تا این مرحله به سراغ شبکه رفتهاید و سرویسهای غیرضروری را حذف کردهاید؛ اکنون فایلهای پیکربندیتان را restart کنید (حال shutdown کنید، سپس با root وارد سیستم شوید و سپس با دستور init 3 وارد مود 3 شوید یا Restart کنید.)؛ اکنون شما یاد گرفتهاید که پروتکلها چگونه کار میکنند، به چه فایلهایی دسترسی دارند، و از کنار کدام حفرههای امنیتی، به سلامت، گذشتهاند؛ به عنوان مثال اگر افرادی دارید که فقط از ویندوز برای اشتراک درایوها استفاده میکنند، میتوانید آنها را در گروهی قرار دهید که امکان سرویس telnet و ftp را نداشته باشند (برای مثال).
اضافهکردن کاربر جدید هرگز نباید آنطور که به نظر میآید راحت باشد، مگر اینکه شما به فرد مورد نظر اعتماد کامل داشته باشید؛ به عنوان مثال، یک گروه ‘smb’ روی سیستمام برای کاربران سمبا دارم، و این کاربران به سرویسهای telnet و ftp دسترسی ندارند.
بنابراین هنگامیکه با افرادی خارج از مجموعه شخصی خودتان کار میکنید، طبق برنامهای که طرحریزی کردهاید دسترسیها، سرویسها و محدودیتهای این گروهها را تعیین نمایید.
گذشته از اینها، شاید بزرگترین مزیت لینوکس نسبت به سایر سیتسمعاملها این باشد که در 99% اوقات، شما میتوانید کد منبع را داشته باشید.
سؤالی که من در اینجا از شما میپرسم این است که اگر کد منبع برنامهای را فاش کنید، آیا منطقی به نظر میرسد که حفرههایی امنیتی (کلک) برای دسترسیهای شخصی خود در این کد باز داشته باشید؟
من که اینطور فکر نمیکنم...
به هرحال آگاهکردن افراد و اینکه چه کاری بهتر است انجام دهند و چه کاری انجام ندهند، میتواند کمک زیادی در این زمینه بکند و ضمناً افراد احساس رضایت نیز نمایند.
مقایسه امنیت در ویندوز و لینوکس امنیت نرم افزاری به طور کلی یک مفهوم انتزاعی است که به پارامترهای فکری هر شخص وابسته است.
چون درجه آسیب پذیری امنیتی، از خط به خط کدهای برنامه نویسی به وجود می آید.
هر حوزه امنیتی از درجه حساسیت خاصی برخوردار است که ممکن است برای کاربران یک پایه فوق العاده مهم باشد یا بر عکس.
در نتیجه تعابیر بسیار زیادی برای امنیت وجود دارد.
مخصوصا اگر بخواهید درباره امنیت برنامه کامل و پیچیده ای مانند سیستم عامل ها و مثلا ویندوز و لینوکس صحبت کنید.
پارامترهای عینی متعددی برای درجه بندی امنیت وجود دارد که می توان از آن طریق باگ های برطرف شده یک مجموعه نرم افزاری خاص را محاسبه کرد.
هنگامی که ویندوز و لینوکس با هم مقایسه می شوند، نقطه ضعف های امنیتی دیگری ظاهر می شوند که در این مقایسه دخیل هستند.
اخیرا موسسه CERT گزارشی از اسیب پذیری های استاندارد این دو سیستم عامل را منتشر نمود که طی آن 250 حفره امنیتی حساس برای ویندوز گزارش شده کخ 39 حوزه آن در لیست خطرناک ترین نقاط ضعف امنیتی قرار دارند و برای لینوکس ردهت نیز 46 حفره امنیتی گزارش شده است که سه حفره آن در لیست آسیب پذیری های امنیتی بسیار خطرناک قرار دارند.
هزاران گزارش از مقایسه امنیتی میان لینوکس و ویندوز وجود دارد.
اما مبنای این تحقیق CERT گزارش هایی بوده که توسط کاربران موسسات دولتی ارائه شده اند و در ان حفره های امنیتی خطرناک مشابهی گزارش شده است.
رلایل قانع کننده ای برای ان تفاوت امنیتی میان دو سیستم عامل وجود دارد.
به عنوان مثال مدل توسعه اپن سورس برنامه های لینوکس، امکان گزارش .
شناسایی باگ های را در فاصله زمانی زودتری امکان پذیر می کند.
این مزیتی است که در ویندوز از آن بی بهره است.
دیگر پارامترها نامطلوب برای ویندوز، اعتماد بسیاری از کرنل برنامه های کاربردی ویندوز به (RPC )Remote Procedure ،متد توسعه جامعه کامپیوترهای خانواده اینتل،است.
نتیجه این رویه،ضعف قوانین دیواره های آتش در مقایسه با سیستم عامل هایی مانند لینوکس است که در سطح بسیار کمتری از RPC استفاده می کنند.
میان این دو سیستم عامل، تفاوت های امنیتی دیگر نیز وجود دارد که برای کاربران پایانه ای این سیستم عامل ها بروز خواهد کرد و در حوزه آسیب پذیری های مدیریتی سیستم گنجانده نمی شوند .
برای مثال ویندوزها قطعا زمینه مساعدتری برای شیوع ویروس ها در سمت کاربران پایانه ای داراست که ایمنی سیستم به خود کاربر و استفاده از آنتی ویروس ها واگذار شده است.
اخیرا ویندوز شاهد ربودن اطلاعات سیستم ها توسط ابزارهایی به نام Spyware یا جاسوس افزار بود که می توانند به صورت محرمانه و پنهانی اطلاعات شخصی شما را در سطح اینترنت پخش کنند که در وبگردی، از روی خطا یا اختیار آن ها را بر روی سیستم فعال می کنید.
مایکروسافت جدیدا برای مقابله با این پدیده یک شرکت ضد ویروس و ضد جاسوس افزار را خریداری کرده است.
امکان دارد که بتوان توسط مدیر سیستم یا کاربران ارشد، ویندوز لینوکس را به درستی مدیریت کرد.
اما بسیاری از برنامه های کاربردی دیگر ویندوز با این سیستم یکپارچه نیستند و نیاز است توسط کاربران، با مجوزدهی صحیح مدیر سیستم، اجرا شوند.
اما برنامه های کاربردی لینوکس غالبا نیازمندی های امنیتی را رعایت کرده و در نتیجه کمتر می توانند مورد سوء استفاده قرار گیرند.
ویندوز تنها از طرف توسعه دهنده خود دچار مشکل است که دوست دارد یک سیستم ساده را خلق کند که برای استفاده کننده بسیار آسان باشد.
اما این سایت با هزینه بسیار زیادی از ناحیه امنیت سیستم همراه است.
این امتیاز حتی موجب سست شدن امنیت سیستم نسبت به نسخه های قدیمی تر می شود، ضعفی که لینوکس هنوز با آن مواجه نشده است.
لینوکس نیز دارای ضعف های امنیتی است.
عموما سازندگان خودشان سخت افزار یا درایوهای مخصوص خود را برای سازگاری با ویندوز توسعه می دهند.
اما در جامعه لینوکس غالبا از مهندسی معکوس برای ساخت این محصولات استفاده می شود.
در سیستم عامل های اپن سورس، گاهی قدم اول همین مهندسی معکوس، غیرقابل پیش بینی خواهد بود.
در برخی موارد، سازگاری یک سخت افزار با لینوکس، به کندی صورت می پذیرد که نسبت به ویندوز، شاید ماه ها و شاید تا دو سال به طول بینجامد.
خوشبختانه با پشتیبانی شرکت هایی مانند IBM و Novell از استانداردهای اپن سورس، برخی از مشکلات پیچیده حل شده و پروسه سازگاری با لینوکس ساده تر شده است.
فارغ از محیط های گرافیکی، رابط خط فرمان لینوکس برای بسیاری از کاربران سخت و پیچیده است و آنان درک درستی از آن ندارند.
همین امر موجب می شود مدیران سیستم ها، از به کار گرفتن ابزارو مفاهیم پیچیده برای برقرای امنیت در سیستم اجتناب کنند.
لینوکس اصولا دارای قابلیت های سیستم عاملی یک شبکه است و در نصب پیش فرض، بسیاری از برنامه های کاربردی شبکه فعال نیست.
این موضوع می تواند آسیب پذیری های ناشناخته ای را به وجود آوردکه هر یک از آن ها تهدیدی امنیتی برای سیستم عامل محسوب شوند.
خوشبختانه این موارد و بسیاری از نقاط ضعف دیگر لینوکس، با به کارگیری یک لایه سخت گیرانه امنیتی و ابزار ساده خط فرمان برای آسان کردن کار مدیر سیستم بهبود یافته است.
یکی دیگر از امتیازات لینوکس، وجود تعداد بی شماری ابزار متنوع مبتنی بر لینوکس برای فراهم کردن امنیت در سیستم (Nessus ) امکان پویش شبکه، حفره های موجود بر روی سیستم راه دور، باگ های نرم افزاری اجرا شده بر روی شبکه و دیگر ابزار نصب شده موجود در سیستم را فراهم می کند.
Nessus در سیستم هایی که به تازگی نصب شده اند، می تواند به کار گرفته شود.
علاوه بر این قابلیت گزارشگیری از یک سیستم سرور را در یک دوره مشخص دارد.
Nmap ابزار دیگری برای اسکن شبکه است که نسبت به Nessus کاربردهای کمتری دارد.
این ابزار می تواند به صورت پیش فرض همراه لینوکس نصب شود.
گذشته از سودمندی این ابزار برای هر کارشناس IT ، هنوز ابزاری به راحتی آن در پیکربندی لینوکس ارائه نشده است.
متخصصان امنیتی در هنگام اتصال به یک شبکه اینترنت از فایروال نیز استفاده می کنند.
فایروال ها به صورت بسته های افزودنی به سیستم سرور برای تامین امنیت بیشتر به کار گرفته می شوند.
ابزاری مانند، ACID می توانند اطلاعات را آنالیز کرده و مطابق این اطلاعات مشخصه های یک را تشخیص دهد.
ACID امکان گزارش از طریق ایمیل را دارد و از طریق یک رابط گرافیکی، تمامی اطلاعات یک بسته فعال شبکه را نمایش می دهد.
استفاده از این ابزار برای هر شرکتی که در حوزه امنیت IT فعالیت می کند، توصیه می شود.
ACID ممکن است گزارش های متناقض و ناصحیح بسیاری برای مدیر سیستم تولید کند و از این رو نیاز به تنظیم و پیکربندی همیشگی آن وجود دارد.
فارغ از سیستم عاملی که استفاده می کنیدف عدم به کارگیری ابزار مناسب، می تواند یکپارچگی امنیتی کار شما را به خطر بیندازد.
عدم پشتیبان گیری کافی ضعیف بودن رمزهای عبور، اشتراک گذاری حساب های کاربری و پروژه های امنیتی که توسط تیم بازرسی نادیده گرفته شوند، و بازبینی و نظارت ضعیف، از دیگر موارد نقض امنیت سیستم هستند.
نکات امنیتی در لینوکس (قسمت اول) هدف این مرجع سریع، فراهم آوردن زمینههایی برای بهبود امنیت سیستم شما میباشد.
اطلاعات بیشتر در مورد اطلاعات امنیتی، افزایش آگاهی و روشهایی که بتوان امنیت سیستم را بهتر نمود، از جمله مواردی است که در این مستند به آن پرداخته شده است.
لازم به ذکر است که این مقاله، جایگزینی برای مستندات انبوهی که در زمینه امنیت لینوکس وجود دارد، نخواهد بود.
در دنیای همواره در تغییر ارتباطات، اتصالات اینترنتی کمهزینه و تولید پرسرعت نرمافزار، مقوله امنیت بیش از پیش، اهمیت پیدا نموده است و در حال حاضر، یکی از نیازهای اساسی است، زیرا محاسبات عمومی، ذاتاً از امنیت بالایی برخوردار نیستند.
هنگامیکه دادههای شما در اینترنت از نقطه A به نقطه B، میرود، در بین راه ممکن است از چندین نقطه دیگر عبور کند که این عمل به دیگر کاربران امکان قطع کردن مسیر و حتی تغییر دادههای شما میدهد.
حتی کاربران دیگری نیز ممکن است از روی بدخواهی و عناد، دادههای سیستمتان را علیرغم میل شما، بدون اطلاعتان، تغییر دهند.
همچنین دسترسی بدون اجازه به سیستم شما، ممکن است توسط مهاجمان، که آنها را با نام ‘cracker’-ها میشناسیم، صورت گیرد.
این افراد با استفاده از اطلاعات بعدی، جعل هویت نموده، اطلاعات شما را دزدیده و حتی ممکن است به شما امکان دسترسی به اطلاعات سیستم خودتان را ندهند.
سیستم خود را، با نصب نگارشهای فعلی هر نرمافزار، به روز نگه دارید و همه اعلانهای امنیتی را جدی بگیرید.
اگر بیشتر از یک نفر به سیستم/یا سیستمهای شما وارد شود، باید یک "خط مشی امنیتی" برای تعیین سطح امنیتی سیستم و میزان رسیدگی و نظارت روی آن، مد نظر داشته باشید.
کنترل دسترسی به فایلها و ویژگیهای آنها نظارت بر دسترسی به فایلهای سیستم برای نگهداری تمامیت گروهها و دستهها مشکل است.
- سیستمتان را جهت شناسایی و تشخیص استفادههای غیر ضروری و بدون اجازه و امکانات دستورات setuid یا setgid بررسی کنید.
برنامههای “Set-user-ID�?
به عنوان کاربر ریشه، بدون توجه به اینکه چه کسی آنها را اجرا میکند، اجرا میشوند و یکی از عوامل عمده سرریزهای بافر هستند.
بسیاری از برنامهها از نوع setuid و setgid هستند تا یک کاربر معمولی قادر به انجام عملیات باشد؛ در غیر این صورت به کاربر ریشه نیاز خواهد بود و اگر کاربرانتان نیازی به داشتن این دسترسیها نداشته باشند، این برنامهها ممکن است حذف شوند.
همه برنامههای setuid و getuid را روی سیستم میزبان پیدا نموده و همه دسترسیهای این برنامهها را با دستور chmod تغییر داده یا حذف کنید: root# find / -type f –perm +6000 –ls 59520 30 -rwsr-xr-x 1 root root 30560 Apr 15 1999 /usr/bin/chage 59560 16 -r-sr-sr-x 1 root lp 15816 Jan 6 2000 /usr/bin/lpq dave$ sudo /usr/sbin/lpc root# chmod -s /usr/bin/chage /usr/bin/lpq root# ls -l /usr/bin/lpq /usr/bin/chage -rwxr-xr-x 1 root root 30560 Apr 15 1999 /usr/bin/chage -r-xr-xr-x 1 root lp 15816 Jan 6 2000 /usr/bin/lpq - فایلهای قابل نوشتنی عمومی، به راحتی تغییر داده شده یا حذف میشوند.
همه این فایلها را در سیستم خود پیدا کنید: root# find / -perm -2 !
-type l -ls در حالت معمول، فایلهای زیادی، شامل فایلهای شاخه /dev و /tmp، میتوانند به طور عمومی قابل نوشتن باشند.
کلیه فایلهایی که مالکی ندارند و به گروهی متعلق نیستند را پیدا نموده و شناسایی کنید.
این فایلها میتوانند نشانه دسترسی مهاجمی به سیستم شما باشند.
root# find / -nouser -o -nogroup - با استفاده از دستورات lsattr و chattr، راهبران سیستم، میتوانند ویژگیهای فایلها و شاخهها را، شامل امکان کنترل حذف و دستکاری، تغییر دهند.
این دو دستور، چیزی فراتر از آنچه که chmod دارد، فراهم میکنند.
استفاده از ویژگی “append-only�?
و “immutable�?
میتواند در ممانعت از حذف فایلهای log، یا جایگیری اسبهای تروجان در بالای فایلهای باینری مؤثر باشد.
دستور chattr برای اضافه و حذف ویژگیها به کار میرود و دستور lsattr برای فهرست کردن آنها.
در فایلهای log، تنها بوسیله پیوست کردن به آنها است که میتوان از آنها محافظت نمود.
یکبار که دادهای در آن نوشته شود، دیگر پاک نمیشود.
بنابراین در حالیکه نیاز به تغییراتی برای اسکریپتهای متغیر log شما خواهد بود، این قابلیت محافظهای اضافی دیگری در برابر کراکرهایی که میخواهند آنرا پاک کنند، بوجود میآورد.
هر بار که تغییر کند، آنها باید به حالت تغییرناپذیر (immutable) تغییر وضعیت دهند.
فایلهای مناسب برای این اعمال تغییرات /bin/login، /bin/rpm، /etc/shadow میباشد و سایرین نیز نباید به طور مداوم آنها را تغییر دهند.
# chattr +i /bin/login # chattr +a /var/log/messages # lsattr /bin/login /var/log/messages ----i--- /bin/login -----a-- /var/log/messages - دلیلی وجود ندارد که کاربران بتوانند برنامههای setuid را از فهرست خانگی خود اجرا نمایند.
از گزینه nosuid در /etc/fstab برای قسمتهایی که برای افرادی غیر از کاربر ریشه، قابل نوشتن میباشند، استفاده نمایید.
همچنین ممکن است بخواهید از nodev و noexec در پارتیشن home کاربر و var، استفاده کنید، که از اجرای برنامهها و ایجاد دستگاههای بلوکی یا کاراکتری، جلوگیری به عمل میآورد.
فرهنگ لغات فنی امنیت - Buffer Overflow: این شرایط هنگامی رخ میدهد که کاربر یا پردازهای بخواهد دادههای بیشتری در بافر ذخیره یک برنامه، در حافظه، جای دهد و سپس بخواهد دادههای واقعی برنامه را با دستورالعملهایی- که معمولاً توسط کاربر ریشه، پوستهای روی سرور فراهم میآورد- بازنویسی نماید.
- Cryptography: علمی وابسته به ریاضیات که با تبدیل دادهها و انتقال آن- به گونهای که مفهوم آن پیچیده و مبهم شود- سر و کار دارد.
این دادههای انتقال یافته از تغییرات و تبدیلات ناشناخته و یا استفاده غیر مجاز، مصون میمانند.
- Denial of Service: هنگامی رخ میدهد که یک فایل یا منبع توسط مهاجمانی مورد هدف قرار گیرد و مانع استفاده آن منبع توسط کاربران مجاز و قانونیاش شود.
آنها تهدید میکنند که دادهها را در دسترس عموم قرار خواهند داد.
- IP Spoofing: حملهای که در آن یک host را به host دیگری مبدل میکنند.
از این حمله به این منظور استفاده میشود که مقصد دادهها را از یک میزبان به میزبان دیگر، ردیابی نمایند.
از اینرو مهاجمان مانع رسیدن داده به مقصد واقعیاش میشوند.
این حملات از نوع one-way است.
- Port Scanning: فرآیندی است که طی آن، پورتهای فعال روی یک سیستم، تعیین میگردند.
این امکان، عموماً، یکی از عوامل آگاهکننده از وجود یک حمله میباشد.
- Packet Filtering: یکی از روشهای کم کردن ترافیک شبکه است که بین واسطهای فایروال، در سطح شبکه، حرکت میکند.
سپس دادههای شبکه طبق اطلاعات موجود در بسته دادهها تحلیل میشوند و طبق خط مشی امنیتی فایروال، دسترسی داده شده یا سلب میگردد.
- Proxy Gateway: به اینها مدخلها (دروازهها)ی برنامههای کاربردی نیز اطلاق میشود که از طرف برنامهای دیگر عمل میکنند.
یک host با یک کارگزار پراکسی نصب شده، هم یک کارخواه (client) است و هم یک کارگزار و به عنوان یک دریچه بین مقصد نهایی و کارخواه عمل میکند.
کارگزارهای پراکسی، عموماً، کوچک هستند، برنامههای نوشتهشدهی تک-منظوره دقیقیاند که فقط خدمات مشخصی را از آن عبور میدهند.
این قابلیت، معمولاً، با packet filter-ها ترکیب میشود.
- Set User-ID (setuid)/Set Group-ID (setgid): فایلهایی که هر کسی، خواه مالک آنها، خواه گروههای مربوطه، میتواند آنها را اجرا نماید.
اینها فایلهایی هستند که غالبا توسط مهاجمین، مورد حمله قرار میگیرند.
زیرا از این طریق میتوانند به امتیازات کاربر ریشه دسترسی پیدا کنند.
- Trojan Horse: برنامهای که خود را به جای یک برنامه بیخطر، جا میزند؛ در حالیکه واقعاً اینطور نیست.
یک برنامه ممکن است توسط یک برنامهنویس بداندیش که ظاهراً، قصد انجام کار مفیدی دارد، با توابع مخفی آسیبرسان آلوده شود و از امتیازات کاربری برای اجرای آن بهرهبرداری کند.
- Vulnerebility: شرایطی که قابلیت به مخاطره انداختن امنیت سیستم را دارد.
این شرایط مستقل از کامپیوتر، سطح ارتباط شبکه و سرعت پردازش رخ میدهد.
امنیت هسته گزینههای زیادی برای پیکربندی هسته، به منظور بهبود امنیت سیستم، بوسیله شبه فایل سیستم /proc موجود میباشد.
معدود فایلهایی در /proc/sys وجود دارند که به طور مستقیم با امنیت سیستم در ارتباطند.
اگر شامل a 1 باشد، فعال و اگر a 0، غیر فعال خواهد بود.
بسیاری از گزینهها در /proc/sys/net/ipv4 در دسترس میباشند.
- icmp_echo_ignore_all: تمامی درخواستهای ICMP ECHO را نادیده میگیرد.
فعال کردن این گزینه، مانع از پاسخگویی host، به درخواستهای ping خواهد شد.
- icmp_echo_ignore_broadcasts: درخواستهای ICMP echo را بوسیله یک آدرس مقصد broadcast/multicast نادیده میگیرد.
شبکه شما ممکن است به عنوان وسیلهای برای ممانعت از حملات فراوان بستههای سرویس به دیگر میزبانها استفاده شود.
- ip_forward: این گزینه، IP بستههای ارسالی را بین واسطها، فعال یا غیر فعال مینماید.
مقدار پیشفرض، به این بستگی دارد که یا کرنل یا host یا router، پیکربندی شوند.
- ip_masq_debug: اشکالزدایی تغییر و جعل شدن IP را فعال یا غیر فعال میکند.
- tcp_syncookies: از حملات SYN جلوگیری میکند.
هنگامی که صف پسافت (backlog) SYN از سرریزهای یک سوکت رخ میدهد، syncookie-ها را میفرستد.
- rp_filter: تعیین میکند که آیا تایید آدرس منبع فعال است یا خیر.
این گزینه را برای همه مسیریابها فعال کنید تا از حملات IP spoofing، علیه شبکه داخلی، جلوگیری شود.
- secure_redirects: این گزینه ICMP را جهت هدایت پیغامهایی که فقط برای مدخلهای فهرست شده در فهرست مدخل پیشفرض وجود دارد، بپذیرید.
- log_martians: بستههای با آدرسهای غیرممکن را به log هسته، گزارش میدهد.
- accept_source_route: تعیین میکند که آیا بستههای مسیر منبع ،پذیرفته یا رد شدهاند.
این ویژگی باید غیر فعال باشد، مگر اینکه دلایل خاصی فعالسازی آنرا ایجاب کند.
فایل /etc/sysctl.conf در لینوکس ردهت، به طور پیشفرض، شامل تنظیمات کمی میباشد و هنگام راهاندازی و آغاز به کار سیستم، پردازش میشود.
برنامه /sbin/sysctl میتواند برای کنترل این پارامترها به کار رود.
همچنین میتوان مقادیر آنها را با استفاده از /bin/echo پیکربندی نمود.
به عنوان مثال، برای غیرفعال کردن IP ارسالی، به عنوان کاربر ریشه، دستور زیر را اجرا نمایید: