سلام
در این آدرس که به زبان انگلیسش هستش 25 نکتهی آموزشی برای کانفیک php در لینوکس رو آموزش داده
لینک رو گذاشتم اینجا روزی یکی دوتا شو از روی تصاویرش ترجمه کنیم
آموزش شمازه یک که در مورد انواع حملات هستش
۲ - ماجولهای فعال رو میشه با دستور زیر دید :
برای غیر فعال کردن ماجولها یا فایل کانفیک ماجول رو پاک کنید و یا تغیر نامش بدید:
برای مثال میخواییم ماجول sqlite رو غیر فعال کنیم:
کد php:
# rm /etc/php.d/sqlite3.ini
که تنظیمات ماجول رو پاک میکنه
وبا دستور زیر تغیر نامش میدیم (فایل sqlite.ini به sqlite.disable تغیر نام داده شد):
کد php:
# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable
۳ - مخفی نگه داشتن اطلاعات php
اگر
باشه ؛ هنگانی که درخواستی به سایتی کنیم؛ php مشخصات خودشو در هدر مینویسه:
کد php:
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.3
Content-type: text/html; charset=UTF-8
Vary: Accept-Encoding, Cookie
برای جلوگیری از اینکار expose_php رو در فایل تنظیمات php برابر off قرار میدیم
۴ - در php امام ماجولها بصورت پیش فرض لود میشن؛ و چون ممکنه ما همهی اونا رو احتیاج نداشته باشیم؛ توصیه میکنند که فقط اونهایی رو لود کنیم ازش استفاده میکنیم!
برای لود نشدن ماجولها به ( ۲ ) مراحعه کنید
و یا میتونید در فایل تنظیمات php ؛ادر ول نام ماجول از ( ; ) استفاده کنید (که تبدیل به کامنت میشه)
5 - برای اینکه خطاهایی که در حین اجرا رخ میده رو کاربر نبینه (که بعضی وقتا این اطلاعات دارای اطلاعاتی هستند که نفوذگر میتونه ازشون استفاده کنه) دستور زیر رو در فایل تنظیمات php ؛ off میکنیم:
برای اینکه خودمون به بعنوان ادمین بفهمیم مشکل کجا بوده؛ میتونیم این خطاها رو لاگ کنیم:
کد php:
log_errors=On
error_log=/var/log/httpd/php_scripts_error.log
error_log مسیری هستش که توش فایل خطاهامون ذخیره میشه؛ چون داریم در لینوکس کار میکنیم این نوع آدرس رو دادیم؛ در ویندوز باید مطابق آدرس دهی فایل در ویندوز عمل کنید
6 - غیر فعال کردن آپلود فایل
با فرمان زیر در فایل تنظیمات php کاری میکنیم که نشه فایلی آپلود کرد:
اما اگه احتیاح به آپلود فایل بود؛ میشه با دستور زیر اونو فعال کرد و همچنین تعییت کرد حداکر حجم فایلی که میتونه آپلود کنه چقدره:
کد php:
file_uploads=On
upload_max_filesize=1M
که ما تعیین کردیم اگه کمتر مساوی ۱ مگ بود آپلود کن؛ در غیر اینصورت فایل آپلود نخواهد شد
۷ - بستن file_get_contents و fopen برای دریافت اطلاعات از URL ها
در حالت معمولی fopen و file_get_contents برای از کردن و گرفتن محتویات فایل هستش؛ اما میشه باهاشون به صفحات و سایتهای مختلف متصل شد و دیتا گرفت ازشون!
برای اینکه فقط محدود به فایلهای لوکال بشن باید:
رو در فایل
و یا هرجایی که تنظیمات php شما اونحا هست؛ ست بکنید
و همچنین پیشنهاد کرده که
رو هم تنظیم کنید!
۸ - فعال کردن حالت safe mode برا SQL :
(
ناقص)
وقتی از این استفاده بشه؛هنگام فراخوانی
کد php:
mysql_connect()
mysql_pconnect()
پارامترهای ارسال به این ۲ تابع نادیده گرفته میشن و مقادیر پیش فرض جایگزیشون میشه!
(حالا این مقادیر روکجا میشه تنظیم کرد رو نمیدونم)
اما گفته شده که عضی از سیستمها مثل وردپرس اگه سیف مد آن باشه کار نمیکنند
۹ - تعیین ماکزیمم مقدار برای ارسال به روش post:
حمله کننده میتونه با تغییر سایز منابع سیستم رو هدر بده که با این روش جلوش گرفته میشه
تغییر این مقدار بر روی آپلود فایل نیز تاثیر میزاره! یعنی الا فایلمون نمیتونه بیتشر از ۱کیلو بایت باشه! حتی اگه در تنظیمات؛ میزان سایز فایل برای آپلود فایل رو ۱مگ تنظیم کرده باشیم!
10 - کنترل منابع در php
همانند مدت زمان اجرای فایل php
مدت زمان انتظار برای گرفتن ورودی
حافظهی ای که اختصاص پیدا کنه به اسکریپت php
کد php:
# set in seconds
max_execution_time = 30
max_input_time = 30
memory_limit = 40M
خب کاراییشاون معلومه؛ تمام این مقادیر به ثانیه هستند؛ مقدار آخری به مگابایت؛
memory_limit واسه اینه که کل فایلی که در حافظه لود میشه نباید از 40 مگ بیتشر بشه!
11 - نصب Suhosin بر روی php
Suhosin یک پروژه پیشرفته برای محافظت از سرور و کاربران هستش
وب سایت
نحوهی نصب
(اگه قسمت شد واسه این یه تاپیک میزنم و هرچی ازش متوجه بشم رو میزارم)
12 - غیر فعال کردن توابع خطرناک!
کد php:
disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
هر تابعی که دوست داشتید هم میتونید به لیست اضافه کند!
13 - استفاده از Fastcgi
CGI چیست
Fastcgi چیست؟ (زبان اصلی)
FastCGI در واقع همون CGI هستش؛ که نسبت به CGI امنتر هست؛ و مدیریت حافظهی بهتری داره و ...
سایت پروژهی Fastcgi
Apache2+PHP+FastCGI (زبان اصلی)
تنظیمات و نصب Red Hat / CentOS Apache 2 FastCGI (زبان اصلی)
php توانایی کار با fastcgi رو داره که با دستور زیر میتونید (بعد از نصب کردنش) فعالش کتید
سلام.
البته من با اجازه babyy عزیز یه چیز در مورد CGI بگم.
اگه توابع پرل تو سرور روشن باشن تمام این کارا بی فایده هستش...
چون راحت میشه CGI اجرا کرد و به کل سرور دسترسی پیدا کرد.
babyy جان ببخشید :)
14 - مجوزهای مربوط به user و گروه (
ناقص)
درمورد مجوز ها صحبت کرده که باید فایلهای CGI تحت مجوز root نباشند؛
15 - محدود سازی مسیر دسترسی به فایل در php
با تنظیم زیر میتونید کاری کنید که برنامهی php در همون پوشهی مخصوصی که مشخص کردید دسترسی داشته باشه
کد php:
open_basedir="/var/www/html/"
16 - مسیر نشست (Session) و تغییر پوشهی مربوط به آپلود موقت فایل
خوب از عناوینش مشخصه دیگه!
کد php:
session.save_path="/var/lib/php/session"
; Set the temporary directory used for storing files when doing file upload
upload_tmp_dir="/var/lib/php/session"
منظور از پوشه ی موقت اینه که وقتی داریم یک فایلی رو آپلود میکنیم؛ این اول یکجایی ذخیره میشه و بعد به جایی که مشخص کردیم منتقل میشه؛ توسز دشتور دومی میتونید اون پوشهای که فایل داخلش آپلود میشه تا اینکه به صورت مامل دریافت بشه رو تغییر بدین!
و پیشنهاد داده این پوشه رو خارج از مسیر زیر درست کنید و مجوزش رو طوری تغییر بدین که هیچ کاربر دیگری حق خواندن و نوشتن نداشته باشند بجز apache
17 - به روز نگه داشتن php و apache و ....
18 - هیچ فایل یا پوشهای رو با مجوز root نداشته باشید!
دستور زیر؛ کاربر و گروه کاربری تمام به تمام محتویات مسیر به آپاچی تغییر میده:
کد php:
chown -R apache:apache /var/www/html/
و همچنین به فایلها فقط مجوز خواندنی میده:
کد php:
chmod -R 0444 /var/www/html/
19 - حفاظت از فایلهای تنظیم:
اطلاعات بیشتر
کد php:
# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.ini
# chattr +i /etc/httpd/conf/httpd.conf
# chattr +i /etc/
20 - استفاده از افزونههای امنیتی همانند SElinux
یه لیستی از
افزونه های امنیتی لینوکس رو میتونید در اینجا ببینید
سایت selinux
در ویکی پدیا بخوانید (زیان اصلی)
21 - نصب Mod_security در آپاچی
یک افزونه هستش که جلوی خیلی از حملات رو میتونه بگیره
نحوهی نصب
مثالی از تنظیم این ماجول برای جلوگیری از چند نوع حمله مثل تزریق در پایگاه داده (sql injection)
کد php:
## A few Examples ##
# Do not allow to open files in /etc/
SecFilter /etc/
# Stop SQL injection
SecFilter "delete[[:space:]]+from"
SecFilter "select.+from"
چون پوشهی etc مهمه؛ این دستور کاری میکنه که توی اگه توی مسیرمون؛ مسیر etc اومد اونو فیلتز میکنه!
(منبع هادی اعظم)
22 - اجرای آپاچی و ملحقات اون در محیط امن یا مجازی
که در صورت نفوذ کل سیستم به فنا نره
مقالات زیر زبا اصلی هستند؛ کسی خواست ترجمه کنه خوشحال میشیم
FreeBSD Jail
XEN Virtualization
KVM Virtualization
OpenVZ
23 - محدود مکردن اتصالات خروجی به بیرون با استفاده از فایروال
وقتی حمله کننده از سرور دسترسی بگیره سعی میکنه که با برنامه هایی مثل wget (برای دانلود فایل) فایلهایی رو دانلود کنه؛ که با مدیریت اتصالات میتونید جلوی این کار رو بگیرید
کد php:
/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
و یا مثالی دیگه:
کد php:
# ....
/sbin/iptables --new-chain apache_user
/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user
# allow apache user to connec to our smtp server
/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN
# Allow apache user to connec to api server for spam validation
/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.62 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 66.135.58.61 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.89 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d 72.233.69.88 --dport 80 -j RETURN
#########################
## Add more rules here ##
#########################
# No editing below
# Drop everything for apache outgoing connection
/sbin/iptables --append apache_user -j REJECT
** توصیه میکنم قبل از اجرای دستورات اول نحوهی کار با iptables رو یاد بگیرد و بعد دستورات رو اجرا کنید
24 - رسیدگی به فایلهای log
log آپاجی:
کد php:
# tail -f /var/log/httpd/error_log
# grep 'login.php' /var/log/httpd/error_log
# egrep -i "denied|error|warn" /var/log/httpd/error_log
log php
کد php:
# tail -f /var/log/httpd/php_scripts_error.log
# grep "...etc/passwd" /var/log/httpd/php_scripts_error.log
و یا میتونید از ابزارهای دیگهای هم استفاده کنید
25 - اگه وب سایت بزرگی دارین سرویسهاتون رو در سرور های جدا راه اندازی کنید!
26 - امکانات اضافی:
PHP IDS
PhpSecInfo
پیدا کردن درهای پشتی و شل کد ها بر روی سایت:
کد php:
# grep -iR 'c99' /var/www/html/
# grep -iR 'r57' /var/www/html/
# find /var/www/html/ -name \*.php -type f -print0 | xargs -0 grep c99
# grep -RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/html/
دستور بالا برای شل کد c99 یا r57 هست....