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
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>
<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 -->
<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!"
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
Private Sub Command4_Click()
Login.Command5.Visible = True
Login.Command4.Visible = False
Login.Width = 3465
Private Sub Command5_Click()
Login.Command4.Visible = True
Login.Command5.Visible = False
Login.Width = 5985
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>
<center><h1> Aby kontynuować, musisz zalogować się:</h1></center>
<FORM ACTION="login1.asp" METHOD="post">
<P> </P>
<center> <TABLE BORDER=0>
<TR>
<TD ALIGN="right">Nazwa:</TD>
<TD><INPUT size="10" NAME="login"
></INPUT></TD>
</TR>
<TD ALIGN="right">Hasło:</TD>
<TD><INPUT TYPE="password" size="10"
NAME="password"></INPUT></TD>
<TD ALIGN="right"></TD>
<TD><INPUT TYPE="submit"
VALUE="Zaloguj"></INPUT>
<INPUT TYPE="reset"
VALUE="Wyczyść"></INPUT>
</TD>
</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")
rs.MoveNext
Wend
OnError response.Redirect ("login2.asp")
rs.Close
Apples.Close
...
ontek25