نوشته‌ها

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

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

رئیس تیم تحقیق و تجزیه و تحلیل کسپراسکای در روسیه می‌گوید: ” روند استفاده از این ابزارآلات تهدید آمیز در گذشته نیز بارها توسط متخصصان ما شناسایی شده بود و اکنون نیز ابزارهای متمرکز بر لینوکس از این قاعده مستثنی نیستند.”

به گفته کسپراسکای بیش از ده مورد APT  (advanced persistent threat) شناسایی شده اند که از بد افزارهایی مرتبط با لینوکس و یا ماژول های مبتنی بر آن استفاده می‌کنند. اخیرا، این مورد در کمپین های بدافزار LightSpy نیز مشاهده شده است. Lightspy قابلیت هدف قرار دادن ویندوز و لینوکس را داشته و حتی می‌تواند سیستم عامل iOS و دستگاه های Mac را نیز مورد حمله قرار دهد.

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

به عنوان مثال، گروه روسی مولد تورلا در طول سال‌ها مجموعه ابزار خود را تغییر داده است، از جمله این تغییرات می‌توان به تغییر Linux backdoors اشاره کرد. طبق گفته کسپراسکای، تغییر Linux backdoor در ورژن penguinx64 اکنون ده‌ها سرور در اروپا و ایالات متحده را تحت تاثیر قرار داده است.

برای کاهش خطرات قربانیان حملات در سیستم های لینوکسی میتوان اقدامات مختلفی انجام داد، از جمله اقدامات ساده‌ای مانند اطمینان از راه اندازی فایروال‌ها به طور صحیح و مسدود کردن پورت های بلااستفاده، خودکارسازی به روزرسانی های امنیتی و استفاده از یک راه حل امنیتی اختصاصی.

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

نکات امنیتی استفاده از سرورهای لینوکس

ایمن‌سازی سرورهای لینوکس جنبه های مثبت مختلفی در جهت محافظت داده‌ها، مالکیت معنوی و سایر موارد دارد. مدیر سیستم مسئول بررسی و تامین مقدمات امنیتی سیستم است.
در قسمت اول این مطلب ما 10 نکته امنیتی مهم برای نصب سیستم لینوکس را ارائه می‌دهیم.
بایستی توجه داشته باشید که دستوراتی که در ادامه به آن ها اشاره می‌کنیم با ورژن‌های Ubuntu/Debian و CentOS/RHEL لینوکس سازگاری دارند.

1- رمزگذاری ارتباط داده‌ها برای سرور لینوکس:

تمامی داده‌هایی که در طول شبکه انتقال پیدا میکنند قابل نظارت کردن هستند و همینطور میتوانید این داده‌ها را به وسیله پسورد و یا certificate مخصوص، رمزگذاری کنید. به چند نمونه از این روش‌ها اشاره می‌کنیم.
• برای انتقال فایل می‌توانید از دستورهای ssh، scp، rsync و یا sftp استفاده کنید. همچنین با استفاده دستور sshf می‌توانید فایل‌های سرور ریموت و یا دایرکتوری خود را mount کنید.
• GnuPG به شما اجازه می‌دهد تا داده‌ها و ارتباطات خود را با استفاده از یک سیستم مدیریت کلیدی متنوع و همچنین دسترسی به ماژول‌های مختلف دایرکتوری کلیدهای عمومی رمزگذاری کنید.
• نصب و استفاده از Apache SSL
• نصب و استفاده از Lighttpd SSL

2- استفاده از سرویس‌های FTP، Telnet را بر روی لینوکس متوقف کنید:

تحت اکثر تنظیمات شبکه، نام کاربری، رمز عبور، دستورات rsh، telnet، FTP و همینطور فایل‌های منتقل شده توسط هر شخصی در همان شبکه قابل ضبط هستند. راه حل متداول برای رفع این مشکل استفاده از OpenSSH، SFTP و یا FTPS است که رمزگذاری SSL یا TLS را به FTP اضافه می‌کنند.
برای این منظور به شکل زیر از دستور yum استفاده کنید:

yum erase xinetd ypserv tftp-server telnet-server rsh-server#

اگر از سرور لینوکسی بر پایه ی اوبونتو/دبیان استفاده میکنید، از دستور زیر برای حذف سرویس های نا امن استفاده کنید:

sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server$
3- برای حداقل‌سازی آسیب به لینوکس از نصب نرم افزارهای اضافه خودداری کنید:

برای جلوگیری از آسیب پذیری به نرم افزار از نصب نرم افزارهای غیرضروری خودداری کنید. از سیستم‌های مدیریت بسته RPM مانند Yum و apt-get و dpkg برای بررسی و مرور بسته‌های نصب شده بر روی سیستم خود استفاده کنید.برای پاک کردن پکیج های غیر ضروری، مانند دستور زیر عمل کنید:

yum list installed#
yum list packageName#
yum remove packageName#

یا

dpkg --list#
dpkg --info packageName#
apt-get remove packageName#
4- کرنل لینوکس خود را آپدیت نگه دارید:

استفاده از پچ‌های امنیتی یکی از مهم‌ترین بخش‌های حفظ و نگهداری سرورهای لینوکس است. لینوکس تمام ابزارهای لازم برای به روزرسانی سیستم شما را فراهم میکند و هم‌چنین امکان استفاده آسان بین نسخه ها را نیز فراهم می‌کند.
همه‌ به روزرسانی‌های امنیتی باید در اسرع وقت بررسی و اعمال شوند، برای این منظور بایستی از دستورات yum و یا apt-get استفاده کنید.

yum update#

یا

apt-get update && apt-get upgrade#
5- حساب‌های کاربری لینوکس و استفاده از رمز عبور قوی برای آن‌ها:

از دستورات useradd/usermod برای ایجاد و نگهداری حساب‌های کاربری استفاده کنید؛ همچنین اطمینان حاصل کنید که از یک رمز عبور قوی استفاده می‌کنید. به عنوان مثال یک رمز عبور خوب شامل 8 کاراکتر و ترکیبی از اعداد و کاراکترها و حروف بزرگ و کوچک است.
برای یافتن رمز عبورهای ضعیف می‌توانید از ابزاری مانند “John the ripper” استفاده کنید.

6- تنظیم رمز عبور مدت‌دار برای کاربران لینوکس در جهت امنیت بهترسیستم:

دستور change command تاریخ بین تغییر پسورد، از اولین پسورد تنظیم شده تا اخرین پسورد را اندازه گیری کرده و تغییر می‌دهد. سیستم از این اطلاعات برای تعیین کردن زمان تغییر پسورد توسط کاربر استفاده می‌کند.

7- محدودسازی استفاده از رمزهای عبور قبلی در لینوکس:

می‌توانید از استفاده مجدد پسورد توسط کاربران جلوگیری کنید. با استفاده از پارامتر pam_unix می‌توانید استفاده مجدد از پسوردهای قدیمی را محدود کنید.

8- می‌توانید از دستور faillog برای نمایش سوابق عدم ورود موفق به سیستم و یا محدود کردن ورود ناموفق به سیستم، استفاده کنید:

دستور faillog محتوای failure log را از آدرس var/log/faillog database/log file فرمت می‌کند. همچنین می‌توانید برای ذخیره تعداد ورودهای ناموفق به سیستم از آن استفاده کنید. برای دیدن تلاش های ناموفق ورود به سیستم مانند زیر عمل کنید:

Faillog

برای باز کردن قفل حساب پس از عدم موفقیت در ورود به سیستم، دستور زیر را اجرا کنید:

faillog -r -u userName

توجه داشته باشید که می‌توانید از دستور passwd برای قفل کردن و باز کردن حساب‌ها استفاده کرد:

# lock Linux account
passwd -l userName
# unlock Linux account
passwd -u userName
9- چگونه اطمینان حاصل کنیم که هیچ اکانتی پسورد خالی ندارد:

دستور زیر را اجرا کنید:

# awk -F: '($2 == "") {print}' /etc/shadow

برای قفل کردن همه‌ی حساب ها با رمز عبور خالی:

# passwd -l accountName
10- چگونه اطمینان حاصل کنیم که هیچ اکانتی غیر از Root مقدار UID برابر 0 ندارد:

فقط اکانت root دارای UID برابر 0 و مجوز کامل برای دسترسی به سیستم است. دستور زیر را اجرا کنید تا همه اکانت‌ها با UID=0 نمایش داده شوند:

# awk -F: '($3 == "0") {print}' /etc/passwd

در ادامه باید تنها یک خط مانند زیر ببینید:

root:x:0:0:root:/root:/bin/bash

اگر خطوط دیگری را مشاهده می‌کنید آن ها را حذف کنید.

11- غیرفعال کردن سرویس‌های غیر ضروری:

همه خدمات غیرضروری و سرویس‌هایی که در پس زمینه اجرا میشوند را متوقف کنید، تمام سرویس هایی که در start-up اجرا می‌شوند را متوقف کنید. دستور زیر را اجرا کنید تا تمام سرویس‌هایی که در بوت اجرا می‌شوند را ببینید.

chkconfig --list | grep '3:on'#

برای متوقف کردن سرویس‌ها دستور زیر را اجرا کنید:

service serviceName stop#
chkconfig serviceName off#

برای خاموش کردن یک سرویس در هنگام بوت از دستور زیر استفاده کنید:

systemctl disable service#
systemctl disable httpd.service#

برای شروع، توقف، ری‌استارت کردن سرویس از دستور زیر استفاده کنید:

systemctl disable service#
systemctl disable httpd.service#

برای گزارش وضعیت سرویس از دستور زیر استفاده کنید:

systemctl status service#
systemctl status httpd.service#

برای دریافت گزارشات لاگ، از دستور زیر استفاده کنید:

journalctl#
journalctl -u network.service#
journalctl -u ssh.service#
journalctl -f#
journalctl -k#
12- پورت‌های باز شبکه را پیدا کنید. (Listening Ports):

از دستور زیر برای نمایش تمام پورت‌ها و برنامه‌های متصل استفاده کنید:

netstat -tulpn

یا از دستور SS به همین منظور:

$ ss -tulpn

و یا:

nmap -sT -O localhost
nmap -sT -O server.example.com
13- از SUID و SGID های غیرضروری جلوگیری کنید:

زمانی که فایل های SUID و SGID مشکلی دارند ممکن است با مشکلات امنیتی و باگ های سیستمی رو به رو شوید، بروز این مشکلات برای تمام کاربرانی که با سیستم کار میکنند امکان پذیر است در نتیجه پیشنهاد میکنیم برای پیدا کردن این مشکلات از دستور زیر استفاده کنید:

#See all set user id files:
find / -perm +4000
# See all group id files
find / -perm +2000
# Or combine both in a single command
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
14- پیدا کردن فایل های World-Writable:

فایل های world-writable میتوانند تبدیل به یک مشکل امنیتی شوند، از دستور زیر برای پیدا کردن این فایل ها استفاده کنید:

find /dir -xdev -type d \ (-perm -0002 -a! -perm -1000 \) -print

بعد از این میتوانید مقادیری که میخواهید را نگه داشته و بقیه را حذف کنید.

15- فایل هایی که مربوط به هیچ کاربری نمیشوند را پیدا کنید:

فایل هایی که توسط کاربر یا گروهی اداره نمیشوند ممکن است به مشکلات امنیتی بیانجامد، این فایل ها را با استفاده از دستور زیر پیدا کنید:

find /dir -xdev \ (-nouser -o -nogroup \) -print

بعد از اینکه این فایل ها را پیدا کردید، بایستی آن را به یک کاربر یا گروه خاص اختصاص داده یا آن را حذف کنید.

16- دستگاه های USB، Firewire، thunderbolt را غیرفعال کنید:

برای غیرفعال کردن دیوایس های USB از دستور زیر استفاده کنید:

echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf#

همچنین برای غیرفعال کردن ماژول های firewire و thunderbolt، از دستور زیر استفاده کنید:

echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf#
echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf#

پس از انجام دادن این کار کاربران نمیتوانند داده های حساس را به سرعت در دستگاه های USB کپی کرده و یا بدافزار یا ویروس را بر روی سیستم لینوکس نصب کنند.

17- سرویس هایی که از آن ها استفاده نمیکنید را غیر فعال کنید:

میتوانید سرویس هایی که از آن استفاده ای نمیشود را با استفاده از دستور زیر غیر فعال کنید:

sudo systemctl stop service $
sudo systemctl disable service $

به عنوان مثال، اگر نمیخواهید مدتی از سرویس NginX استفاده کنید، آن را غیرفعال کنید:

sudo systemctl stop nginx $
sudo systemctl disable nginx $
18- امن سازی سرور Apache، PHP، Nginx:

فایل httpd.conf را ادیت کرده و مقادیر زیر را اضافه کنید:

ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header always unset X-Powered-By

برای ری استارت کردن سرویس های hhtpd/apache2 بر روی لینوکس، دستور زیر را اجرا کنید:

sudo systemctl restart apache2.service $

و یا :

sudo systemctl restart httpd.service $

چنانچه موارد فوق را برای VPS لینوکسی خود انجام داده‌اید، می‌توانید از ابزار OpenSCAP برای بررسی امنیت سرور مجازی خود استفاده کنید.