X
تبلیغات
امنیت سیستم های linux - امنیت لینوکس 1

امنیت سیستم های linux

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

مقدمه

در دنیای همواره در تغییر ارتباطات، اتصالات اینترنتی کم‌هزینه و تولید پرسرعت نرم‌افزار، مقوله امنیت بیش از پیش، اهمیت پیدا نموده است و در حال حاضر، یکی از نیازهای اساسی است، زیرا محاسبات عمومی، ذاتاً از امنیت بالایی برخوردار نیستند. هنگامی‌که داده‌های شما در اینترنت از نقطه 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 ارسالی، به عنوان کاربر ریشه، دستور زیر را اجرا نمایید:

echo “0��? > /proc/sys/net/ipv4/ip_forward

این دستور، باید در فایل راه‌انداز سیستم یا /etc/sysct1.conf در ردهت، نوشته شود تا بعد از هر راه‌اندازی، رخ دهد. اطلاعات بیشتر در فایل proc.txt در شاخه Documentation هسته موجود می‌باشد.


نکات امنیتی عمومی:

- از AutoRPM در ردهت و apt-get در دبیان می‌توان به منظور دانلود و نصب بسته‌های دیگر روی سیستم استفاده نمود. هنگامی‌که از سرورهای تولید به‌روزرسانی استفاده می‌کنید، دقتهای لازمه را به عمل آورید.

- تغییر و تبدیلIP، یک جعبه لینوکسی، با چندین واسط را قادر می‌سازد تا به عنوان یک مدخل (دروازه) در شبکه‌های راه دور، برای host-های متصل به جعبه لینوکسی روی واسط شبکه داخلی، عمل نماید.

- بسته nmap را برای تعیین پتانسیل کانالهای ارتباطی، نصب کنید. nmap می‌تواند نگارش سیستم‌عامل راه دور را مشخص کند، پویشهای نهانی را با دستکاری ICMP، TCP و UDP انجام دهد و حتی قابلیت تعیین نام کاربری راه دوری را که در حال اجرای سرویسی می‌باشد، دارد. با دستوری مشابه زیر، آغاز کنید:

# nmap 192.168.1.1

- محافظ رمز عبور LILO برای کارگزارهای محیطهای عمومی می‌باشد تا هنگامیکه LILO، پارامترهای هسته خط فرمان را در زمان بالا آمدن سیستم، ارسال می‌کند، اجازه نیاز باشد. آرگومانهای password و restricted را به /etc/lilo.conf، اضافه نموده، سپس با اطمینان، /sbin/lilo را مجدداً اجرا کنید:

image = /boot/vmlinuz-2.2.17
label = Linux
read-only
restricted
password = your-password

- وصله هسته OpenWall، مجموعه کاربردی و مفیدی از بهبودهای امنیتی هسته است که کمک می‌کند تا از سرریزهای بافر جلوگیری به عمل آید، اطلاعات موجود در /proc را برای یک کاربر معمولی، محدود می‌کند و سایر تغییرات. برای این کار نیاز به کامپایل کرنل دارید.

- از درستی ساعت سیستم، اطمینان حاصل کنید. زمانهای نوشته شده در فایلهای log، باید درست باشد تا رخدادهای امنیتی، بتوانند با سیستمهای راه دور، مرتبط شوند. ضبط و بایگانیهای نادرست، باعث می‌شود که ساختن یک خط زمانی (خط عمر) غیر ممکن شود. در ایستگاه‌های کاری، کافی است که یک گزینه ورودی corntab، اضافه کنیم:

0-59/30 * * * * root /usr/sbin/ntpdate -su time.timehost.com

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

- دستور sudo را به گونه‌ای پیکربندی نمایید که به جای استفاده از su، دستورهای مجاز و متداول از طرف یک کاربر معمولی نیز اجرا شوند. راهبر رمز عبور خود را برای اجرای دستورات خاص، دارد. فایل /etc/sudoers کاربرانی را کنترل می‌کند که برنامه‌هایی را اجرا می‌نمایند. برای اینکه به Dave، امکان دستکاری در چاپگر را روی magneto بدهیم باید:

Cmnd_Alias LPCMDS = /usr/sbin/lpc, /usr/bin/lprm dave magneto = LPCMDS

Dave دستور sudo را با فرمان تاییدشده، اجرا نموده و رمز عبور خود را با اعلانی که می‌گیرد، وارد می‌کند:

dave$ sudo /usr/sbin/lpc
Password:
lpc>

- رمز عبور مناسبی برای خود انتخاب کنید. شناسه‌های بلااستفاده را نیز، با استفاده از /usr/bin/passwd -l غیر فعال کنید. اگر توزیع شما این امکان را می‌دهد، در حین نصب، از رمز عبور MD5 استفاده کنید.

- فیلتر کردن بسته‌ها صرفاً، منحصر به firewall نیست. با استفاده از ipchains، می‌توانید محافظتهای زیادی از هر سیستم لینوکسی، در برابر تهدیدهای بیرونی (خارجی)، فراهم آورید. برای بلوکه کردن دسترسی به سرویس خاصی، حین برقراری ارتباطات بیرونی به شبکه محلی شما، می‌توانید دستور زیر را امتحان کنید:

# ipchains -I input -p TCP -s 192.168.1.11 telnet -j DENY -l

اگر قرار باشد ارتباطی خارجی به 192.168.1.11 برقرار شود، این دستور، مانع دسترسی به پورت telnet، روی سیستم شما می‌‌شود.


شناسایی حملات شبکه‌ای

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

یکی از ابزار شناسایی حملات شبکه‌ای، با نام snort، تحلیلهای ترافیک بلادرنگ (real-time) را انجام داده و به دنبال رخدادهای تغییرشکل دهنده که قابلیت حملات شبکه‌ای را دارند، می‌باشد.

بر مبنای محتویات ترافیک شبکه، چه در سطح IP و چه در برنامه‌های کاربردی، اعلانی (اخطاری) تولید خواهد شد. به راحتی پیکربندی شده و از روشهای مرسوم، برای قواعد تولید و توسعه استفاده می‌کند، و زمان کمی نیز صرف نصب آن می‌شود. Snort، در حال حاضر قابلیت این را دارد که حدود 1100 نمونه از آسیب‌پذیریهای بالقوه را شناسایی کند. ویژگیهایی که این ابزار دارد به شرح زیر می‌باشد:

  • شناسایی و اعلان بر مبنای الگوهای تطبیق کننده برای تهدیدهای شامل سرریز بافر، پویشهای مخفی پورت، حملات CGI، رسیدگیهای SMB و پرس و جوهای NetBIOS، NMAP و دیگر پویشگرهای پورت، آسیب‌پذیریهای سیستمی نهانی و معروف، DDoS Client-ها و غیره.
  • می‌‌تواند در یک ایستگاه کاری موجود، برای نظارت روی یک ارتباط DSL خانگی، و یا روی یک سرور اختصاصی برای نظارت روی یک وب‌سایت حقوقی، به کار گرفته شود.

منابع و مآخذ امنیتی لینوکس

+ نوشته شده در  88/11/21ساعت 0:50  توسط مهیار تاج دینی  |