01c.doc

(1288 KB) Pobierz
Rozdział X

 

Rozdział 1. ¨ Zabezpieczanie portów i usług              137

Rekomendowane przez nas zmiany powinny obejmować tematy wymienione niżej.

1.                                Uzyskanie od dostawcy nazwiska osoby kontaktowej.

2.                                Uzyskanie od dostawcy adresu kontaktowego lub użycie skrzynki pocztowej.

3.                                Uzyskanie kontaktowego numeru telefonicznego: użyj bezpośredniej skrzynki głosowej poza wewnętrzną centralą telefoniczną firmy, innego systemu telefonicznego lub numeru pagera.

4.                                Uzyskanie od dostawcy kontaktowego adresu e-mail lub użycie innego konta, na przykład @Yahoo.com, @Hotmail.com albo @wp.pl.

5.                                Uzyskanie od dostawców serwerów nazw domen.

Na stronie NASK-u (www.dns.pl) znajdują się odpowiednie formularze do modyfikacji nazwy rejestracyjnej domeny, danych osoby kontaktowej, danych konta kontaktowego i zmiany danych o hoście lub serwerze nazw (patrz rysunki 1.41 i 1.42).

Rysunek 1.42.

Formularz modyfikacji danych osoby kontaktowej

 

Projekt witryny internetowej

Wiele witryn internetowych ujawnia krytyczne informacje na swoich stronach. W Internecie często publikowane są dane, takie jak nazwiska osób kontaktowych, adresy poczty elektronicznej, telefony wewnętrzne, schematy infrastruktury sieci, zakresy adresów sieciowych IP, a nawet nazwy społeczności. Dla przykładu jakaś z firm opublikowała nazwy społeczności SNMP, a jeden z routerów w oddziale umożliwiał zapis i odczyt.

Jak wyjaśniono w pierwszym tomie tej książki, informacje te mogą spowodować, że ataki hakerów, polegające na uzyskaniu kontaktów z pracownikami, wysyłaniu wiadomości elektronicznych i próbach uzyskania zdalnej kontroli, będą przeprowadzane z powodzeniem. Jako praktyczny przykład możesz obejrzeć firmowe strony informacyjne, które zawierają informacje o pracownikach, mogące posłużyć do zdobycia kolejnych informacji (zobacz rysunek 1.43).

Rysunek 1.43.

Ujawnienie zbyt dużej liczby informacji może doprowadzić do ataku hakera

 

Biorąc to pod uwagę, należy przyjąć ogólną zasadę niepublikowania na stronach internetowych nazwisk pracowników i ich adresów e-mail. Zastąpić je możesz formularzami na stronie WWW lub adresami nieujawniającymi szczegółowych informacji na temat odbiorcy poczty. Aby to zademonstrować, zmodyfikujemy stronę pokazaną na rysunku 1.43 w celu ukrycia krytycznych informacji (zobacz rysunek 1.44). Jak można zobaczyć, te zmiany mogą odwieść hakera od przeprowadzenia bezpośredniego ataku. Jednakże w tym przypadku firma jest ciągle wrażliwa na inne rodzaje ataków, na przykład bombardowanie skrzynek pocztowych. Aby tego uniknąć, jeszcze raz zmodyfikujemy stronę z kontaktami w celu eliminacji możliwości bezpośredniej wymiany informacji przez dołączenie formularza (zobacz rysunek 1.45).

Tak naprawdę najlepszym sposobem postępowania podczas tworzenia bezpiecznej witryny internetowej jest dokładne zbadanie każdej strony w poszukiwaniu zawartości, która może ułatwić atak hakera. Jeśli na witrynie umieszczasz schematy wewnętrznej sieci, strukturę IP oraz nazwy społeczności, oznacza to wysłanie zaproszenia dla hakerów.

Rysunek 1.44.

Umieszczanie na stronach internetowych bardziej ogólnych informacji kontaktowych jest znacznie bezpieczniejsze

 

 

Rysunek 1.45.

Eliminacja bezpośredniej wymiany danych może być najskuteczniejsza

 

Nawet jeśli nie musisz obawiać się ujawniania takich informacji, zawsze dobrym pomysłem jest implementacja prostej zapory wejściowej. Wiadomo, iż umieszczenie na stronie kodu, takiego jak skrypt logowania, skrypty ASP i VB czy plików wykonywalnych CGI, często odstrasza nocnych napastników. Poniżej przedstawiono przykład adaptacji prostego i łatwego do implementacji skryptu logowania, utworzonego w Javie przez znanego programistę Johna Fentona:

<HTML>

<HEAD>

<H1><CENTER>Wprowadź hasło</H1></CENTER>
<!--Jeśli chcesz, możesz zmienić lub usunąć ten nagłówek -->

<SCRIPT LANGUAGE=JAVASCRIPT>

 

    function verify(){

    var password ="12345"; // Tutaj podaj hasło

// Podaj stronę, do której należy przejść, jeśli hasło jest poprawne

    var protected_page ="mypage.html";

    var pd=document.password.pin.value

// Możesz zmienić 'pin', jeśli poniżej zmienisz nazwę okna hasła

    if(pd!=password) // sprawdza hasło

 

        {

        alert("Niewłaściwe hasło");

    }

 

    else

        {

        alert("Hasło poprawne");

        window.location.href=protected_page; // Przenosi do podanej powyżej zabezpieczonej strony

    }}

 

    </SCRIPT>

    <TITLE>

    <!-- Zmień to -->

    </TITLE>

    </HEAD>

    <BODY bgcolor=black text=red> <!--Jeśli chcesz, możesz zmienić zestaw kolorów -->

    <BR>

    <BR>

    <CENTER>

    <FORM name=password> <!--Możesz zmienić nazwę formularza, ale musisz tego dokonać również powyżej -->

    <INPUT type=password name=pin> <!--Możesz zmienić 'pin', ale musisz tego dokonać również powyżej -->

    <BR>

    <BR>

    <INPUT type=button value=Submit OnClick="verify()"> <!--Możesz zmienić nazwę funkcji, ale musisz tego dokonać również powyżej-->

    </CENTER>

    </BODY>

    </HTML>

Kolejnym przykładem jest TigerPass, który może być użyty jako wewnętrzna bramka logowania i może zostać w prosty sposób przekształcony do frontonu CGI. Przedstawiony na rysunku 1.46 oraz w postaci następującego kodu program został opracowany przez programistę Visual Basica — Philipa Beama; narzędzie to automatycznie zapytuje małą bazę danych o nazwie login.mdb w celu uzyskania rozliczeń dostępu i odnośników krzyżowych.

Rysunek 1.46.

Plik wykonywalny logowania TigerPass może być wykorzystany jako moduł sprawdzający hasło wejściowe

 

TigerPass

Private Sub Command1_Click()

    Login.Data1.Recordset.FindFirst "memID = '" & Login.Text1.Text & "'"

    If Login.Pass.Caption = Login.Text2.Text Then

        MsgBox "Login succesful!"

        Login.MemID.Caption = ""

        Login.Pass.Caption = ""

        Login.Text1.Text = ""

        Login.Text2.Text = ""

        Exit Sub

    End If

    MsgBox " Login unsuccesful!"

    Login.Text1.Text = ""

    Login.Text2.Text = ""

End Sub

 

Private Sub Command2_Click()

    Login.Data1.Recordset.AddNew

    Login.Data1.Recordset.Fields("memID") = "" & Login.Text1.Text & ""

    Login.Data1.Recordset.Fields("pass") = "" & Login.Text2.Text & ""

    Login.Data1.Recordset.Update

    Login.MemID.Caption = ""

    Login.Pass.Caption = ""

    Login.Text1.Text = ""

    Login.Text2.Text = ""

End Sub

 

Private Sub Command4_Click()

    Login.Command5.Visible = True

    Login.Command4.Visible = False

    Login.Width = 3465

End Sub

 

Private Sub Command5_Click()

    Login.Command4.Visible = True

    Login.Command5.Visible = False

    Login.Width = 5985

End Sub

Wypróbuj również TigerPass ASP, który może być wykorzystywany jako bramka do zewnętrznego logowania. Przedstawiony na rysunku 1.47 oraz w postaci następującego kodu program został opracowany przez programistę Microsoftu — J.L. du Preeza. Ta wersja udostępnia witrynie możliwość logowania oraz zapewnia zabezpieczenia haseł, a także pozwala użytkownikom na zmianę swoich haseł. Aby program zadziałał, musisz po prostu zainstalować wszystkie pliki w katalogu na serwerze, a następnie umieścić plik password.mdb w katalogu /db, umieszczonym w głównym katalogu.

Rysunek 1.47.

Interfejs frontowy ASP TigerPass

 

TigerPass ASP: Login.asp

<html>

<head>

<title>Proszę zalogować się</title>

<STYLE>

<!--

      body {background: #000000; font-size: 20pt; color: #FEFCE0; font-family:
       verdana, arial}

      td {font-size: 9pt; color: #FEFCE0; font-family: verdana, arial}

      A:link {text-decoration: none; color: #FFFFFF;}

      A:visited {text-decoration: none; color: #FEFCE0;}

      A:active {text-decoration: none; color: #FFFFFF;}

      A:hover {text-decoration: none; color:#CCFFFF;}

-->

</STYLE>

<body>

<BR>

<center><h1>  Aby kontynuować, musisz zalogować się:</h1></center>

<BR>

<FORM ACTION="login1.asp" METHOD="post">

<P>&nbsp;</P>

                    <center> <TABLE BORDER=0>

                             <TR>

                                     <TD ALIGN="right">Nazwa:</TD>

                                     <TD><INPUT size="10" NAME="login"

                                        ></INPUT></TD>

                             </TR>

                             <TR>

                                     <TD ALIGN="right">Hasło:</TD>

                                     <TD><INPUT TYPE="password" size="10" 

                                        NAME="password"></INPUT></TD>

                             </TR>

                             <TR>

                                     <TD ALIGN="right"></TD>

                                     <TD><INPUT TYPE="submit"    

                                        VALUE="Zaloguj"></INPUT>

                                             <INPUT TYPE="reset"

                                                VALUE="Wyczyść"></INPUT>

                                     </TD>

                             </TR>

                     </TABLE></center>

                     </FORM>

 

 

</body></html>

Login1.asp

<%Dim Apples

Set Apples = Server.CreateObject("ADODB.Connection")

 

ConnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; "

ConnStr = ConnStr & "DBQ=" & Server.MapPath("db\password.mdb")

Apples.Open(ConnStr)

 

SQLtemp = "SELECT * FROM password WHERE user = '" & Request.form("login") & "' "

Set rs = Apples.Execute(SQLtemp)

while not rs.eof

 

dim username

username = rs("user")

 

dim friendlyname

friendlyname = rs("name")

 

 

response.cookies("passes") = username

response.cookies("passes2") = friendlyname

 

 

If Request.Form("login") = rs("user") AND Request.Form("password") = rs("pass") Then

 

Response.redirect("protected.asp")

    Else

  Response.redirect("login2.asp")

End If

 

rs.MoveNext

Wend

OnError response.Redirect ("login2.asp")

rs.Close

Apples.Close

...

Zgłoś jeśli naruszono regulamin