منبع اصلی نوشتار زیر در این لینک قرار دارد

ساده ترین راه نوشتن اسکریپت آنتی دیفیس

سلام بچه ها چند وقتی هست که فکرم درگیر نوشتن یه سری اسکریپت هوشمند هست که بتونن خیلی از کارهایی که روی سرور باید توسط ادمین به صورت منظم یا نا منظم انجام بشه رو انجام بدن مثلا اینکه اسکریپتی باشه که مدام صفحات وب رو بررسی بکنه و اگر تغییری مبنی بر هک روی وب سایت صورت گرفته باشه رو تشخیص بده ، خوب برای اینکار ما چندین راه داریم یکی اینکه توی اسکریپت Integrity فایل ها کنترل بشه و یک بار md5 یا sha1 فایل مورد نظر ذخیره بشه و مدام کنترل و مقایسه بشه اما به نظرتون اینجا چه اشکالی هست ؟

خوب یه سری سایت ها هستن که خود فایل به عنوان مثال index.php دائم در حال تغییر هست مثل سایت های فروشگاهی و خبری و … پس Check sum روش مناسبی برای اینکار نیست حالا با این تفاسیر چه روش بهتری برای اینکار هست ؟

یه راه مناسب و بهتر هست اونم چک کردن Keyword روی خود صفحه html هست ، چطوری ؟ یه دایره لغت از سایتهایی که تا بحال هک شدن تهیه میکنیم و به اسکریپتمون میگیم این کلماتو چک کن ، اگه دیدی کارهایی که بهت میگمو انجام بده !

خوب اینطوری بهتر نیست ؟ پس شروع کنیم به نوشتن اسکریپت

اول باید مشخص بکنیم که چه چیز هایی چک بشه و چه کارهایی انجام بده .

1 . یک سری کلمات رو توی یه فایل جدا یا تو دل خود اسکریپت برای کنترل باید قرار بدیم .

2 . اگر Defacement Detect شد چند تا کار انجام بده :

– یه پیامک به ادمین سرور بزن

– یه ایمیلم واسه دلخوشی بزن 😀

– فایل اصلی رو جایگزین صفحه دیفیس شده قرار بده ( که این روش پیشنهاد نمیشه ، چون طرف باز هم دسترسی داره و …)

– با فایروال دسترسی به وب سرور یا صرفا دامینی که مورد حمله قرارگرفته رو ببند .

– کل کارهایی هم که اسکریپت داره انجام میده رو یه جایی لاگ بنداز.

destaque-artigo-bashخوب شروع میکنیم :

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

#!/bin/bash

خوب حالا باید ببینیم چه آرگومان هایی تو اسکریپت لازم داریم تاریخ ، ایمیل و شماره موبایل ادمین فعلا لازمه ، تاریخ رو هم به شکل مناسب باید تعیین بکنیم :

date

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'

خوب بعد از مشخص کردن var ها باید کاراهایی که باید انجام بده رو مشخص کنیم . برای اینکه مدام بتونیم ایندکس یا هرجای دیگه وب سایتمون رو ببینیم و فرآیند کنترلی رو روش انجام بدیم از دستوراتی مثل lynx ، wget  ، curl  و … میتونیم استفاده کنیم . به طور مثال برای wget

wget -o /dev/null -O - http://oslearn.ir

یا برای lynx

lynx -dump oslearn.ir

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

yum install lynx
or
apt-get install lynx

من توی این اسکریپت از wget استفاده میکنم .

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'
wget -o /dev/null -O - http://oslearn.ir

حالا باید بگیم ایندکسی که گرفتی رو با keyword هایی که تعیین میکنیم کنترل کن . نمونه کیورد ها :

Hacked ,HACKED BY,defaced,cyberwar,low security,greets,was here,were here,H4CKED

توی اسکریپت :

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'
wget -o /dev/null -O - http://oslearn.ir | grep "Hacked|HACKED BY|defaced|cyberwar|low security|greets|was here|were here|H4CKED"

اگه این اسکریپت رو اجرا کنید ، کل ایندکس رو نشون میده ، در صورتی که ما فقط به استاتوس کدش احتیاج داریم ، پس باید کل خروجی رو بفرستیم به ناکجاآباد سرور 😀 یعنی کجا ؟ /dev/null

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'
wget -o /dev/null -O - http://oslearn.ir | grep "Hacked|HACKED BY|defaced|cyberwar|low security|greets|was here|were here|H4CKED" > /dev/null

برای دیدن استاتوس کد قبل از شرط هم میتونیم با یه echo $? مشکل رو حل کنیم ، اما این برای تست خودتون هست نیازی به اینکار نداریم . باید شرط بزاریم که اگر استاتوس کد true بود کارایی که لازمه رو انجام بده :

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'
wget -o /dev/null -O - http://oslearn.ir | grep "Hacked|HACKED BY|defaced|cyberwar|low security|greets|was here|were here|H4CKED" > /dev/null
                    if [ $? = 0 ];then
                       echo "Defacement Detected on site"
					fi

اگه این اسکریپت اجرا بشه و اون کلمات رو پوشش بده یه پیام میده که Defacement دیده شده .

حالا باید با دستور میل به ادمین ایمیل بزنیم . توی شرط به جای echo باید این دستور رو جایگزین کنیم :

mail -s "Defacement Detected on WebSite" $EMAIL

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

curl --data "username=mohammad&password=oslearn&from=100000000&to=$PHONE&text=Defacement Detected on Website" $WEBSERVICE

خوب اسکریپت به شکل زیر در میاد :

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'
wget -o /dev/null -O - http://oslearn.ir | grep "Hacked|HACKED BY|defaced|cyberwar|low security|greets|was here|were here|H4CKED" > /dev/null
                    if [ $? = 0 ];then
                        mail -s "Defacement Detected on WebSite" $EMAIL
						curl --data "username=mohammad&password=oslearn&from=100000000&to=$PHONE&text=Defacement Detected on WebSite" $WEBSERVICE
					fi

بعد از اینکار میتونیم چند تا کار بکنیم ، یکی اینکه دسترسی رو به وب سایت روی فایروال ببندیم یا اینکه کلا وب سرور رو متوقف کنیم .

برای بستن روی فایروال :

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'
WEB='oslearn.ir'
wget -o /dev/null -O - $WEB | grep "Hacked|HACKED BY|defaced|cyberwar|low security|greets|was here|were here|H4CKED" > /dev/null
                    if [ $? = 0 ];then
                        /bin/mail -s "Defacement Detected on WebSite" $EMAIL
						/usr/bin/curl --data "username=mohammad&password=oslearn&from=100000000&to=$PHONE&text=Defacement Detected on WebSite" $WEBSERVICE
						/sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "Host: $WEB" --algo bm --to 65535 -j DROP
						/sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "Host: www.$WEB" --algo bm --to 65535 -j DROP
						/sbin/iptables -A INPUT -p tcp -m tcp --dport 443 -m string --string "Host: $WEB" --algo bm --to 65535 -j DROP
						/sbin/iptables -A INPUT -p tcp -m tcp --dport 443 -m string --string "Host: www.$WEB" --algo bm --to 65535 -j DROP												
					fi

برای متوقف کردن وب سرور :

#!/bin/bash
DATE=`date +"%d-%m-%Y-%I_%M"`
EMAIL='[email protected]'
PHONE='09121234567'
WEBSERVICE='link webservice'
WEB='oslearn.ir'
wget -o /dev/null -O - $WEB | grep "Hacked|HACKED BY|defaced|cyberwar|low security|greets|was here|were here|H4CKED" > /dev/null
                    if [ $? = 0 ];then
                        /bin/mail -s "Defacement Detected on WebSite" $EMAIL
						/usr/bin/curl --data "username=mohammad&password=oslearn&from=100000000&to=$PHONE&text=Defacement Detected on WebSite" $WEBSERVICE
						/etc/init.d/httpd stop
					fi

حالا بسته به سلیقه ادمین این اسکریپت قابل تغییر هست .

خوب به نظرتون الان ایراد کار کجاست ؟

ایراد اینجاست که اگه توی مطالب وب سایت کلمه ای باشه که اسکریپت detect کنه و اون کلمه توسط نویسنده های خود وب سایت ایجاد شده باشه ، اسکریپت کار خودشو میکنه 😀 راهکار چیه ؟ اگه راهکار خوبی دارید در قالب کامنت بگید ولی در هر صورت توی پست بعد به طور کامل میگم که چطور میشه اون موارد رو exclude کرد .

برای اجرای مرتب هم روی سرور از crontab استفاده کنید .

* * * * * /root/src

لازم به ذکره که نرم افزار برای اینکار خیلی زیاده از جمله inotify و …. اما به نظر شخص بنده اگه یه اسکریپت ساده باشه که باری روی سرور نندازه و کار رو هم انجام بده بهتره .

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

سوالی هست بپرسید .

نویسنده : محمد ورمزیار

منبع : او اس لرن دات آی آر

 

 



برچسب ها : , ,