Ranjivost u ASP.NET-u – što je i što napraviti dalje

Kao da nam nije bilo dovoljno zanimljivo uz probleme s OpenX-om , pojavio se dodatni problem koji ovaj put samo affecta Windows strojeve i .NET aplikacije. Pričamo o ranjivosti u ASP.NET-u.

Asp.Net Plus hosting

Što je u biti ta “ranjivost” u ASP.NET-u?

Potencijalni napadač ima mogućnost da requesta i downloada fileove unutar asp.net aplikacije. Na primjer web.config file u kojem se skoro uvijek nalazi connection string za spajanje na bazu, neki passwordi, itd.

Uz gore navedeno, napadač također ima mogućnost da decrypta podatke koji se inače kriptirani šalju klijentu (npr. ViewState data unutar neke stranice).

Hoće li Microsoft izdati neku zakrpu za ovaj problem?

Da, Microsoft već radi na update-u za ASP.NET, te čim završe temeljito testiranje će ponuditi update za download koristeći Windows Update servis.

Dok službeni update ne bude izdan, postoji par workarounda koji će zaštiti vašu web aplikaciju. Ovi workaroundi su privremeno rješenje dok ne izađe update, te neće biti potrebno ih applyati nakon što serveri budu updateani.

Najjednostavniji workaround za verzije .Net-a V1.0 do V3.5:

1) Otvorite Web.Config file vaše aplikacije u vašem omiljenom text editoru. Ako taj file ne postoji, kreirajte ga i spremite u root folder vaše aplikacije.

2) Kreirajte ili modificirajte <customErrors> dio web.config filea tako da izgleda ovako:

<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="~/error.html" />
</system.web>
</configuration> 

3) Sljedeći korak je da kreirate error.html file. U njega ćete ubaciti sadržaj koji želite da se prikazuje kao error page. Ova error stranica će se prikazati kada dođe do bilo koje “greške” na vašoj stranici.

BITNO: Ako koristite custom, per status error code stranice, bilo bi dobro ih privremeno isključiti i sve errore preusmjeriti na error.html file.

Workaround za verzije .Neta V4.0 i V3.5 SP1

1) Otvorite Web.Config file vaše aplikacije u vašem omiljenom text editoru. Ako taj file ne postoji, kreirajte ga i spremite u root folder vaše aplikacije.

2) Kreirajte ili modificirajte <customErrors> dio web.config filea tako da izgleda ovako:

 <configuration>
 <system.web>
 <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/error.aspx" />
 </system.web>
 </configuration> 

3) Sljedeći korak je da kreirate error.aspx file u koji ćete ubaciti sadržaj koji želite da se prikazuje kao error page. Ova error stranica će se prikazati kada dođe do bilo koje “greške” na Vašoj stranici.

4) Također preporučujemo da u code error.aspx stranice dodate i  Page_Load() server event handler koji će dodati random sleep delay. Ovo će omogućiti dodatni layer sigurnosti.

VB Verzija workarounda

Ovdje se nalazi Error.aspx file koji možete koristiti, a već ima implementirani random sleep delay.  Sve što trebate napraviti je spremiti code u error.aspx file i smjestiti ga u root folder Vaše aplikacije.

<%@ Page Language="VB" AutoEventWireup="true" %>
 <%@ Import Namespace="System.Security.Cryptography" %>
 <%@ Import Namespace="System.Threading" %>

<script runat="server">
 Sub Page_Load()
 Dim delay As Byte() = New Byte(0) {}
 Dim prng As RandomNumberGenerator = New RNGCryptoServiceProvider()

prng.GetBytes(delay)
 Thread.Sleep(CType(delay(0), Integer))

Dim disposable As IDisposable = TryCast(prng, IDisposable)
 If Not disposable Is Nothing Then
 disposable.Dispose()
 End If
 End Sub
 </script>

<html>
 <head runat="server">
 <title>GREŠKA</title>
 </head>
 <body>
 <div>

Došlo je do pogreške u procesiranju Vašeg upita.

</div>
 </body>
 </html>

C# Verzija workarounda

Ovdje se nalazi Error.aspx file koji možete koristiti, a već ima implementirani random sleep delay.  Sve što trebate napraviti je spremiti code u error.aspx file i smjestiti ga u root folder Vaše aplikacije.

<%@ Page Language="C#" AutoEventWireup="true" %>
 <%@ Import Namespace="System.Security.Cryptography" %>
 <%@ Import Namespace="System.Threading" %>

<script runat="server">
 void Page_Load() {
 byte[] delay = new byte[1];
 RandomNumberGenerator prng = new RNGCryptoServiceProvider();

prng.GetBytes(delay);
 Thread.Sleep((int)delay[0]);

IDisposable disposable = prng as IDisposable;
 if (disposable != null) { disposable.Dispose(); }
 }
 </script>

<html>
 <head runat="server">
 <title>GREŠKA</title>
 </head>
 <body>
 <div>
 Došlo je do pogreške u procesiranju Vašeg upita.
 </div>
 </body>
 </html>

Kako provjeriti da li workaround radi kako treba?

Nakon što ste primijenili neki od gore navedenih workarounda, tj, napravili izmjene u   <customErrors> dijelu Web.Config filea, napravite sljedeće. Zatražite neki link koji ne postoji u Vašoj aplikaciji : http://wwww.mojastranica.com/nekastranicakojenepostoji.aspx

Ako vam se otvori vaš custom error page koji ste kreirali, onda je sve u redu. Ako vam se otvori standardni ASP.NET error page, znači da niste neki dio dobro odradili.

U slučaju bilo kakvih dodatnih pitanja, slobodno ostavite komentar, a ako ste naš korisnik, kontaktirajte nas koristeći naš support sustav ili preko kontakt obrasca.

Za one koji žele znati više :

 

Povezani članci

Odgovori