Salam əziz dostlar!
Mənim zənnimcə bu dərs bir çox veb proqramçının çox işinə yarayacaqdır. Dərsin məzmununda ümumi olaraq əsasən Asp.net C# dilinə müvafiq olaraq nümunələr veriləcəkdir. Lakin orta səviyyəli proqramistlər kodlara qısa nəzər yetirərək PHP, Klassik ASP dilinə də çevirə biləcəklər.
Bildiyiniz kimi hosting şirkərinin və eləcə də o şirkətlərdən hostig alan istifadəçilərin bir müddət əvvəl olduqca başağrıdıcı virus problemi olmuşdu. Saytlarımızın bütün təhlükəsizlik tədbirlərini nəzarətdə saxlamağımıza baxmayaraq saytın bütün .htm, .asp, .aspx, .php fayllarının içinə <iframe>... şəklində virus scriptləri düşməkdə idi. Zaman keçdikdə virusun effekti azalmağa başladı. Lakin indi son günlər iframe virusu yerini <script>... virusu ilə əvəz etti. Bu virus hətta digərindən də təhlükəli olduğu bir çoxlarımıza məlumdur.
Virus əsasən saytın bütün fayllarının içərisinə sızaraq qarşısına çıxan bütün .php, .asp və digər kod fayllarının içərisinə öz virus scriptini əlavə edir. Bu problem 1 həftə əvvəl mənimdə qarşıma çıxdı. Müəyyən bir araşdırmalarımın nəticəsində virusu necə zərərsizləşdirəcəyimi tapdım.
Virusu internet də geniş şəkildə araşdırmağıma baxmayaraq konkret nəticə ya da səbəb tapan görmədim. Bəziləri FTP şifrəsini dəyişdirdikdən sonra düzəldiyini deyir, bəziləri hostingi dəyişdikdə, bəziləri qovluq icazələrinin yazma icazəsini bağladıqda düzəldiyini qeyd edir. Lakin mən bu deyilənlərin hamısını etməyimə baxmayaraq heç bir nəticə görmədim. İlk olaraq domain-i aldığım hosting şikətindən sildirdim (bütün faylları ilə bərabər) və başqa bir hosting-ə yerləşdirdim. Səhər tezdən yoxladım virus yenə saytıma təşrif buyurmuş vəziyyətdədir. Şifrəni dəyişdim, icazələri maksimum aşağı endirdim yenə virus əl çəkmədi. Bu dərsimizdə bu virusun nədən yarandığını, kim yaydığını qeyd edə bilmiyəcəm. Çünki bu haqda məlumat tapa bilmədim. Amma bu virusun qarşısını hansı yollardan ala biləcəyinizin kiçik bir neçə texnikasını baş salacam.
Virus əsasən saytın əksər hallarda ən sonuncu </body> tag-ından əvvələ düşür. Lakin bəzən <head> tag-ından sonra da düşdüyünü təsbit eləmişəm. Virus sayta düşdükdə sayt açılır, lakin sistemə yüklü antivirus proqramı saytı virus kimi təsbit edərək açılmasının qarşısını alır. Lakin əgər sayt asp.net texnalogiyaları əsasında yazılıbsa və saytın ümumi struktru MasterPage ilə qurulubsa (asp.net bilən istifadəçilər masterpage texnikası ilə tanışdırlar) bu zaman digər səhifələr aşağıdakı koddan ibarət olur. Yəni saytın gövdəsi masterpage içərisində olduğu üçün saytın quruluşu digərləridən fərqlənir:
Əlaqə səhifəsi üçün kod:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="Elaqe_Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
saytın məlumatları
</asp:Content>
Bu zaman virus səhifəni açaraq body, head tag-ları tapmadığı üçün virusu bir başa </asp:Content> tag-ından sonra əlavə edir. Bu zaman da normal olaraq sayt açıldıqda yəni əlaqə bolməsi (http://www.domain.az/elaqe.aspx) açıldıqda asp.net xətası ekrana çıxır. Yəni sayt hack edilir deyə bilərik.
Ümumiyyətcə virus əlçatmaz səhifələrə heç bir zərər vura bilmir. Misal üçün asp.net də MasterPage.master adlı faylı heç cürə müraciət mümkün deyildir. Eyni zaman da web.config kimi fayllara birbaşa müraciət mümkün deyil. Asp.net istifadə edən istfadəçilər səhifədə masterpage istifadə etdiyi səhifələri bu şəkildə qoruya bilərlər:
Yuxarıdakı əlaqə.aspx səhifəsinin kodlarını bu şəkildə dəyişdirmək kifayət edir:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="Elaqe_Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
saytın məlumatları
<!--
<html>
<head>
<title>AzGraf</title>
</head>
<body>
</body>
</html>
-->
</asp:Content>
Grdüyünüz kimi saytın məlumatları bölümü yenə olduğu kimi qalır. Sadəcə onun altına yalancı HTML sklet yerləşdiririk. Təbii ki, bunu da html comment içərisində yazdığımız üçün saytda görsənmir və heç bir əhəmiyyəti olmur. <!-- ... -->
tagları HTML dilində comment yəni şərh kimi qəbul edilir. Onun arasında yazılmış hərhansı yazı, tag sadəcə şəxsi qeyd olaraq oxunur və sadəcə HTML kod içərisində görsənir. Bu script virusunun da işləmə sistemi saytda axtarıb body və ya head tag-larını tapmaq və ondan sonra script əlavə etməkdir. Artıq virus səhifəni axtardıqda mövcud comment içərisindəki body-ni tapacaq və öz scriptini ora əlavə edəcək. Body də aldadıcı bir tələ rolunu oynadığı üçün həmin scriptdə onun içində qalacaq və heç bir əhəmiyyəti olmayacaq. Nə sayt dayanacaq, nə də antivirus işə düşəcək. Əlavə edilmiş virus script-i adi HTML comment (şərh) kimi sistemdə oxunacaq.
Əgər saytınız asp.net də deyildə normal PHP ya da klassik ASP dilindədirsə, yaxud Asp.net dilindədir lakin Masterpage istifadə edilməyibsə onu da eyni bu texnika ilə qarşısını ala bilərik. Sadəcə digərindən fərqli olaraq hər bir body və head tag-larını ayrıca özəlləşdiririk. Daha qaranti olması üçün:
Digərindən fərqli olaraq burada hər head, body taglarının üstünə və altında onun eynisinin comment şəklini yaradırıq:
<html>
<!--<head>-->
<head>
<!--<head>-->
<title>AzGraf</title>
<!--</head>-->
</head>
<!--</head>-->
<!--<body>-->
<body>
<!--<body>-->
SAYTA AİD BÜTÜN MƏLUMATLAR, KODLAR, ŞƏKİL VƏ MƏQALƏLƏR...
<!--</body>-->
</body>
<!--</body>-->
</html>
Bu şəkildə dəyişdikdə artıq səhifələrimizi virus hansı tərəfdən axtararsa və hansı tagı axtararsa head ya da body ilk olaraq onun comment (yalançı) versiyasını tapacaq və onun sol hissəsinə əlavə edəcək. Oda yenə qalacaq comment-in içində. Əsl original Body və Head taglarını tam təhlükəsiz şəkildə qorunacaq.
Götürək </body> tag-ından əvvələ virus script əlavə etdi, bu zaman body tag bu şəkildə dəyişəcək:
<!--<script src="http://150.150.150.150.php"></script></body>-->
</body>
<!--</body>-->
Virus səhifəni yuxarıdan başlayaraq axtardığı üçün ilk olaraq tapdığı body əsl body-nin üstündəki comment body-si olur. Onun soluna da əlavə ettikdə <!-- tag-ından xəbəri olmur və virus düşür comment içərisinə.
Və ya daha rahat formada bunu bu şəkildə də etmək mümkündür. Saytdakı mövcud HTML tag-ların ən başdakından əvvəl və ən sonundakından sonra aşağıdakı kodu əlavə edin.
Hər tag-dan əvvəl və sonra <script></script> əlavə etdikdə virus ikinci dəfə heç
bir script əlavə etmir, yəni aldanır:
<!--
<script></script><html><head><script></script><title> AntiVirus_by_AzGraf </title><script></script></head><script></script><body><script></script> Protect
virus... <script></script></body><script></script></html><script></script> -->
Ümumi kod bu şəkildə olmalıdır:
<!--
<script></script><html><head><script></script><title> AntiVirus_by_AzGraf </title><script></script></head><script></script><body><script></script> Protect
virus... <script></script></body><script></script></html><script></script> -->
<html>
<head>
<title>AzGraf</title>
</head>
<body>
</body>
</html>
<!--
<script></script><html><head><script></script><title> AntiVirus_by_AzGraf </title><script></script></head><script></script><body><script></script> Protect
virus... <script></script></body><script></script></html><script></script> -->
Əgər yuxarıda qeyd etdiyiniz heç bir üsul Sizi qani etmirsə son olaraq aşağıdakı sistemdən istifadə edə bilərsiniz. Əgər saytınızdakı fayl sayı az olarsa bu üsul olduqca müvəffəqiyyətli şəkildə işləyəc. Əks təqdirsə yuxarıdakı üsullar ən məsləhətlisidir.
Deməli mən sistemi yəni kodlamaları asp.net C# dili ilə yazıram. Lakn yuxarıda da qeyd etdiyim kimi kodlara qısa nəzər yetirən php və ya asp dilinə də çevirə biləcəkdir.
Bu texnikanı saytıma bu virus düşdükdə ilk dəfə etmişdim. Lakin bəzi təhlükəsizlik problemlərini göz önünə almağınız vacibdir. Çünki əgər bu texnikadan istifadə ediriksə gərək saytın bütün papka və ROOT bölümünün yazma icazələrini açıq tutaq.
Qısa şərh edim. Deməli saytın ilk açıldığı səhifə default.aspx səhifəsidir. İlk olaraq bu səhifənin adını default2.aspx olaraq dəyişək. Daha sonra default.aspx səhifəsini açaraq HTML bölümünə sadəcə <!-- tag əlavə edək. Tag bağlanmır açıq tutulur. Bu zaman virus bu səhifəyə nə qədər düşsə belə heç bir ziyan vermədən default.aspx səhifəsi işlək olacaq. Default.aspx səhifəsinə isə səhifə açıldıqda digər bütün .aspx fayllarını içini açaraq yoxlayacaq. Hansında <script tag tapılarsa həmin səhifələr təmizlənərək yenilənəcək. Bütün proses bittikdən sonra da səhifə default2.aspx yönlənəcək.
Düşünə bilərsiniz ki, bu saytın yüklənməsini gecikdirə bilər. Amma məncə elə deyil. Çünki mənim 1 həftəlik araşdırmama görə virus sayta gündə sadəcə 1 dəfə düşür. Təmizlədikdən sorna əksər hallarda növbəti günə keçəndə düşür. Virus düşdükdən sonra sayta ilk girişdə bu proses gedəcək və təmizlənəcək. Artıq ondan sonrakı girişlərdə təmizlik olmayacaq. Sayt normal açılacaq. Default.aspx.cs faylını isə aşağıdakı kodlardan ibarət olmalıdır ki, bütün səhifələr təmizlənsin:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Net;
public partial class Default : System.Web.UI.Page
{
protected void Page_PreInit()
{
string[] arPags = {
"default2.aspx",
"haqqinda/default.aspx",
"elaqe.aspx"
};
string searchVirus = "";
string searchVirusOld = "";
StreamReader sr;
for (int i = 0; i < arPags.Length; i++)
{
try
{
sr = new System.IO.StreamReader(new FileInfo(Server.MapPath(arPags[i])).OpenRead());
searchVirus = Convert.ToString(sr.ReadToEnd()).Trim();
searchVirusOld = searchVirus;
sr.Close(); sr.Dispose();
}
catch { }
if (searchVirus.ToLower().IndexOf("<script") > -1)
{
try
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(Server.MapPath(arPags[i]), false, System.Text.Encoding.UTF8);
searchVirus = searchVirus.Substring(0, searchVirus.IndexOf("<script"));
if (searchVirus.Length < 5) searchVirus = searchVirusOld;
sw.WriteLine(searchVirus);
sw.Close(); sw.Dispose();
}
catch { }
try
{
//LOG saxlanılır. bool Append True etmişik artıq hər əlavə ettikdə bazanın alt sətrinə özü əlavə edir.
//Hansi sehifeleri duzeldir loglasdiraq.
System.IO.StreamWriter sw2 = new System.IO.StreamWriter(Server.MapPath("LogVirus.htm"), true, System.Text.Encoding.UTF8);
sw2.WriteLine("-->"+Config.Date("") + " - " + arPags[i] + " - "+ Convert.ToString(Request.UserHostAddress) + "<hr /><!--");
sw2.Close();
sw2.Dispose();
}
catch { }
}
}
Response.Redirect("~/Default2.aspx");
Response.End();
}
Dərsə məxsus məlumatlar qorunur.
İstifadəsi zamanı müəllif hüquqlarını nəzərə almağın tələb olunur!
E m i n N o v r u z o v