Rekomendowane przez nas zmiany powinny obejmować tematy wymienione niżej.
Uzyskanie od dostawcy nazwiska osoby kontaktowej.
Uzyskanie od dostawcy adresu kontaktowego lub użycie skrzynki pocztowej.
Uzyskanie kontaktowego numeru telefonicznego: użyj bezpośredniej skrzynki głosowej poza wewnętrzną centralą telefoniczną firmy, innego systemu telefonicznego lub numeru pagera.
Uzyskanie od dostawcy kontaktowego adresu e-mail lub użycie innego konta, na przykład @Yahoo.com, @Hotmail.com albo @wp.pl.
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> </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
set Apples = Nothing
Login2.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>Niestety, logowanie nie powiodło się</h1></center>
<center><h1>Proszę spróbować ponownie</h1></center>
<BR>
<FORM ACTION="login1.asp" METHOD="post">
<center> <TABLE BORDER=0>
<TR>
<TD ALIGN="right">Nazwa:</TD>
<TD><INPUT TYPE="text" 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="Oczyść"></INPUT>
</TD>
</TR>
</TABLE></center>
</FORM>
</body></html>
Passchange.asp
<%username = request.cookies("passes")%>
<html>
<head>
<title>Zmień hasło</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>Proszę zmienić swoje hasło</h1></center>
<BR>
<FORM ACTION="passchange1.asp" METHOD="post">
<center> <TABLE BORDER=0>
<TR>
<TD ALIGN="right">Nazwa:</TD>
<TD><INPUT TYPE="text" Value=<%=username%>
size="10" NAME="login"></INPUT></TD>
</TR>
<TR>
<TD ALIGN="right">Stare hasło:</TD>
<TD><INPUT TYPE="password" size="10"
NAME="oldpassword"></INPUT></TD>
</TR>
<TR>
<TD ALIGN="right">Nowe hasło:</TD>
<TD><INPUT TYPE="password" size="10"
NAME="newpassword1"></INPUT></TD>
</TR>
<TR>
<TD ALIGN="right">Potwierdzenie nowego
hasła:</TD>
<TD><INPUT TYPE="password" size="10"
NAME="newpassword2"></INPUT></TD>
</TR>
<TR>
<TD ALIGN="right"></TD>
<TD><INPUT TYPE="submit"
VALUE="Zmień"></INPUT>
<INPUT TYPE="reset"
VALUE="Wyczyść"></INPUT>
</TD>
</TR>
</TABLE></center>
</FORM>
</body></html>
Passchange1.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)
If Request.Form("login") = rs("user") AND Request.Form("oldpassword") = rs("pass")
AND Request.Form("newpassword1") = Request.Form("newpassword2") then
SQL = "UPDATE password SET pass = '" & Request.Form("newpassword2") & "' WHERE user
= '" & Request.Form("login") & "'"
Apples.Execute(sql)
Response.redirect ("updated.asp")
Else
Response.redirect ("passchange2.asp")
End If
set ConnStr = Nothing
rs.Close
Apples.Close
set ConnStr = Nothing
%>
Passchange2.asp
<%username = request.cookies("passes")%>
<html>
<head>
<title>Zmień hasło</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>Niestety, niektóre podane dane były niepoprawne.</h1></center>
<BR>
<FORM ACTION="passchange1.asp" METHOD="post">
<center> <TABLE BORDER=0>
<TR>
<TD ALIGN="right">Nazwa:</TD>
<TD><INPUT TYPE="text" Value=<%=username%>
size="10" NAME="login"></INPUT></TD>
</TR>
<TR>
<TD ALIGN="right">Stare hasło:</TD>
<TD><INPUT TYPE="password" size="10"
NAME="oldpassword"></INPUT></TD>
</TR>
<TR>
<TD ALIGN="right">Nowe hasło:</TD>
<TD><INPUT TYPE="password" size="10"
NAME="newpassword1"></INPUT></TD>
</TR>
<TR>
<TD ALIGN="right">Potwierdzenie hasła:</TD>
<TD><INPUT TYPE="password" size="10"
NAME="newpassword2"></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>
Protected.asp
<%username = request.cookies("passes")%>
<%friendlyname = request.cookies("passes2")%>
<%If request.cookies("passes") = "" then response.redirect ("login.asp")%>
<html><head><title>Proszę wybrać miejsce docelowe</title>
<STYLE>
<!--
H1 {font-size: 20pt; color: #FEFCE0; font-family: verdana, arial}
body {background: #000000; font-size: 15pt; 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>
</head>
<body>
<BR>
<h1><center>Witam <%=friendlyname%>. Tu możesz znaleźć pliki
źródłowe</center></h1>
<BR><BR><BR>
<center><a href="pass.zip">Plik źródłowy tych stron</a></center>
<BR>
<center><a href="passchange.asp">Zmień swoje hasło</a></center>
<BR>
<center><a href="login.asp">Wyloguj i zaloguj się ponownie</a></center>
</body>
</html>
Updated.asp
<%username = request.cookies("passes")%>
<%friendlyname = request.cookies("passes2")%>
<html><head><title>Wybierz miejsce docelowe</title>
<STYLE>
<!--
H1 {font-size: 20pt; color: #FEFCE0; font-family: verdana, arial}
body {background: #000000; font-size: 15pt; 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>
</head>
<body>
<BR>
<h1><center>Dziękuję, <%=friendlyname%>. Hasło zostało zmienione</center></h1>
<BR><BR><BR>
<center><a href="pass.zip">Plik źródłowy tych stron</a></center>
<BR>
<center><a href="passchange.asp">Zmień swoje hasło</a></center>
<BR>
<center><a href="login.asp">Wyloguj i zaloguj się ponownie</a></center>
</body>
</html>
|
Te programy są dostępne na dołączonym do książki CD-ROM-ie. |
Anonimowość użytkownika
Prywatni i korporacyjni użytkownicy chcą mieć pewność, że mogą anonimowo surfować po Internecie i łączyć się z sieciami rozległymi. Niestety, pod względem technicznym jest to trudne do osiągnięcia i ta kwestia staje się kolejną furtką, przez którą jest przeprowadzane zdalne zbieranie informacji. Hakerzy mogą przyciągnąć użytkowników do konkretnej witryny internetowej, używając takich zachęt, jak dowcipy, darmowe lub pirackie oprogramowanie, aukcje z najlepszymi cenami, czy najświeższe informacje. Wystarczy jedna krótka wizyta na takiej stronie, aby napastnik przechwycił pożądane informacje.
Informacje przeglądane lub pobierane przez przeglądarkę są przechwytywane przez cookies, słynne — i niesławne — niewidoczne komunikaty, przesyłane do przeglądarki przez serwer internetowy. Przeglądarka przechowuje zwykle te komunikaty w pliku cookie.txt. Cookies są stale przesyłane w trakcie procesu komunikacji HTTP. Przeglądarka zwykle przechowuje cookies aż do następnego odwiedzenia danej strony.
Nie wszystkie cookies są szkodliwe, ale część z nich tak. Początkowo cookies miały być przydatne dla internautów; utworzono je w celu identyfikacji preferencji użytkownika przed wygenerowaniem dynamicznej strony internetowej dla tej osoby. Często napotykamy witryny wyglądające tak, jakby „oczekiwały” na nas (zobacz rysunek 1.48). Jest to możliwe właśnie dzięki cookies. Wadą tego procesu (wykorzystaną przez hakerów) jest fakt, iż niektóre sieci i intranety zostały zaprojektowane tak, aby odróżniać adresy IP i nazwy hostów. Co więcej, czas życia cookies różni się, a niektóre z nich o nazwie „nieśmiertelnych cookies” istnieją na dysku przez długi czas, będąc dostępnymi dla hakerów.
Rysunek 1.48. Dynamiczne witryny internetowe „pamiętają” swoich użytkowników dzięki cookies
|
|
Java i JavaScript działają podobnie jak cookies pod względem technik gromadzenia informacji. Jak na pewno wiesz, przeglądarka jest po prostu kompilatorem kodu programów, który odczytuje strony internetowe, zaprojektowane w takich językach, jak ASP, HTTP, VBScript, Java i innych. Przeglądarka kompiluje następnie kod w celu utworzenia informacji widocznej w oknie programu. Można więc powiedzieć, iż podobnie jak cookies, kod Java w Internecie może być użyty przeciwko Tobie.
Przy użyciu cookies i Javy zdalni napastnicy mogą potencjalnie uzyskać następujące dane:
typ Twojej przeglądarki,
zainstalowane wtyczki (pluginy) przeglądarki,
położenie Twojego punktu obecności (point of presence — POP),
format daty i czasu w Twoim systemie,
dokładne informacje o domenie,
ostatnio odwiedzane witryny,
czy akceptowane są języki Java, JavaScript oraz VBScript,
Twój adres IP,
nazwę Twojego komputera,
Twój adres e-mail.
Możesz w to wierzyć albo nie, ale to wystarczająco dużo informacji, aby rozpocząć wiele rodzajów ataków na Twój system. Oto prosty przykład.
Projektuję stronę internetową z dowcipami, znajdującą się na wielu darmowych serwerach, dostępnych w sieci.
Reklamuję tę stronę przy użyciu popularnych wyszukiwarek, serwerów list i tablic ogłoszeń.
Użytkownik szuka dobrego dowcipu, który mógłby przesłać do swoich znajomych i rodziny, przez co trafia na moją stronę. W tym momencie odkrywam część przedstawionych powyżej informacji, na przykład dane o zainstalowanych wtyczkach.
Użytkownik otrzymuje przyjazną wiadomość e-mailową, informującą go o pojawieniu się ważnych aktualizacji wtyczek Shockwave Flash lub Real Player. W wiadomości znajduje się odnośnik do strony, z której można za darmo pobrać aktualizację.
Użytkownik pobiera plik zawierający nowszą wersję wtyczki. Nie wie jednak w tym momencie, że znajduje się tam również koń trojański Homer, który umożliwia przejęcie kontroli nad jego komputerem.
Wynik? Zobacz rysunek 1.49.
Rysunek 1.49. Wpadłeś!
|
|
Ten typ próby ataku zdarza się co chwila, a użytkownicy często obciążają pomyłkowo prawidłową konfigurację oprogramowania za występujące problemy systemowe, podczas gdy ich systemy zostały zainfekowane przez destrukcyjne demony.
|
Aby sprawdzić, co „oni” już wiedzą o Tobie, zaloguj się na stronie |
Do przeciwdziałania takiemu zagrożeniu anonimowości użytkownika można wykorzystać mechanizmy zabezpieczeń sieci i komputerów osobistych. Większość przeglądarek umożliwia również ustawienie standardowych środków zabezpieczających. Funkcje Microsoft Internet Explorera mogą być zmodyfikowane przez rozwijalne menu Opcje internetowe (zobacz rysunek 1.50).
Rysunek 1.50. Ustawianie poziomu zabezpieczeń w Internet Explorerze
|
|
Kolejną prostą metodą zabezpieczania jest aktualizacja przeglądarki internetowej do najnowszej wersji, niezależnie od producenta, gdyż zwykle zawiera ona ulepszone środki bezpieczeństwa przeciwko typowym sposobom włamania. Wszyscy domowi i korporacyjni użytkownicy Internetu powinni zmodyfikować poziom bezpieczeństwa zgodnie z osobistymi lub firmowymi potrzebami. Jak pokazano na rysunku 1.51, wiele przeglądarek pozwala na dopasowanie własnych opcji zabezpieczeń. Dla przykładu, aby w MS Internet Explorerze ustawić poziom zabezpieczeń, z menu Narzędzia wybierz Opcje internetowe, a następnie kliknij zakładkę Zabezpieczenia. Teraz kliknij strefę, w której chcesz zmodyfikować poziom zabezpieczeń. Przesuń suwak w górę, aby ustawić wyższy standard zabezpieczeń, lub w dół, aby uzyskać niższy standard. Aby własnoręcznie ustawić ustawienia zabezpieczeń dla danej strefy, kliknij przycisk Poziom niestandardowy (Twoja przeglądarka może również pozwalać na konfigurację „zaufanych” i „niezaufanych” witryn, dzięki czemu uzyskuje się większą kontrolę nad przeglądanymi stronami).
Żal mi to mówić, ale cookies najbezpieczniej wyłączyć w ogóle; podobne środki bezpieczeństwa należy zastosować w stosunku do kodu Java, spotykanego na stronach WWW. „Porządne” witryny zwykle zawierają odnośnik pozwalający na ręczne zalogowanie się w przypadku przeglądarek nieobsługujących cookies (czyli tych, które „nie biorą cukierków od obcych”). Również konfiguracja restrykcyjnych ograniczeń Javy w czasie sesji może zmusić witryny korzystające z niej do wyświetlenia prośby o zgodę na użycie tego języka. Zajmie to zwykle kilka sekund i nie wymaga restartu komputera.
Rysunek 1.51. Dopasowanie funkcji zabezpieczeń w MS Internet Explorerze
|
|
|
W celu uzyskania dodatkowych zabezpieczeń sprawdź wcześniej wymieniony program TigerSurf, omówiony w załączniku A i dołączony do tej książki na CD-ROM-ie. |
Skanowanie zakresu adresów IP
Jeśli przeczytałeś pierwszy tom tej książki, już wiesz, iż skanowanie zakresu adresów IP jest jednym z pierwszych kroków wykonywanych w czasie zdalnego badania celu. Działanie skanerów IP polega na przeczesywaniu całego zakresu adresów IP i zgłaszaniu węzłów, które są aktywne lub odpowiadają na żądania echa PING lub ICMP. Takie aktywne, zalogowane i opisane węzły stają się częścią składową schematów sieci docelowej. Kolejnym krokiem jest wtedy wykorzystanie technik badania niezabezpieczonych portów.
Blokując lub filtrując skanowanie zakresu adresów IP, zniechęcamy wielu agresorów do wykorzystania bardziej zaawansowanych technik badań potencjalnie zagrożonych systemów. Wprowadzenie tych technik zabezpieczeń musi być jednak wykonane ostrożnie, ponieważ niektóre systemy mogą wymagać użycia usługi „ping” ze względu na wykorzystanie programów do lokalnego zarządzania i monitorowania, które aktywnie wysyłają żądania. W takiej sytuacji alternatywą może być pozwolenie na wysyłanie odpowiedzi do autoryzowanych adresów przy całkowitym zablokowaniu usługi dla pozostałych hostów.
Najbardziej efektywną ochronę przed skanowaniem zakresu adresów IP można uzyskać przy użyciu frontowych bramek zabezpieczeń, takich jak routery, firewalle i zaawansowane proxy. W trakcie podejmowania decyzji powinieneś zajrzeć do podręcznika obsługi i opisu poleceń bramki, a także skonsultować rozwiązania ze swoim dostawcą usług internetowych.
Pozostała część tego rozdziału jest poświęcona opisowi typowych przykładów ogólnego filtrowania przy użyciu konkretnych bramek.
Router 3Com
Aby skonfigurować filtry dla routera IP, wykonaj poniższe czynności.
Ustaw zasady filtrowania przy użyciu:
ADD -IP FilterAddrs <adres1> [<katalog>] <adres2> [<działanie>
* [<protokół> [<ID_filtra>]]]<działanie> = {PROTocolRsrv=<znacznik>}|
Discard | DODdiscard | Forward | {QPriority = H | M | L} X25Profile
= <profil>} <protokół> = DLSW | FTP | IP | IPDATA | ICMP | SMTP |
TCP | TELNET | UDP
W razie potrzeby utwórz filtr lub filtry przy użyciu:
ADD !<ID_filtra> -IP FIlters <warunek> [,<warunek...] <warunek>
= <%offset>:[<operator>]<%wzorzec>
Ustaw parametr FilterDefAction przy użyciu:
SETDefault -IP FilterDefAction = [Forward | Discard]
Włącz filtrowanie pakietów, wprowadzając:
SETDefault -IP CONTrol = Filtering
Cabletron/Enterasys
Aby zabezpieczyć procesor przed nadmiernym ruchem, wykonaj poniższe czynności.
Zainstaluj poniższe lub podobne listy kontroli dostępu (ACL):
ssr(config)# ac1 hackstop deny tcp any x.x.x.x/32 any >1024
ssr(config)# ac1 hackstop deny udp any x.x.x.x/32 any >1024
ssr(config)# ac1 hackstop permit ip any any any any
Zastosuj powyższe listy ACL dla interfejsu, portu lub vLAN-u. Poniższy przykład przedstawia sposób zastosowania listy ACL dla interfejsu o nazwie ip-Inter:
ssr(config)# ac1 hackstop apply interface ip-Inter input
Checkpoint FireWall-1
Aby uniemożliwić przechodzenie ICMP przez firewall, wykonaj poniższe czynności.
Otwórz Security Policy Editor.
Otwórz menu Policy i wybierz Properties.
Upewnij się, czy opcja Accept ICMP jest wyłączona.
Router Cisco
Pokazana poniżej przykładowa konfiguracja odnosi się do głównego routera internetowego, przedstawionego na rysunku 1.52.
Rysunek 1.52. Scenariusz konfiguracji routera Cisco
|
|
! Opcja 1: Użycie puli NAT
no ip name-server
no proxy arp
!
ip subnet-zero
no ip domain-lookup
ip routing
!
! Kontrola dostępu w oparciu o kontekst
!
no ip inspect audit-trail
ip inspect tcp synwait-time 30
ip inspect tcp finwait-time 5
ip inspect tcp idle-time 3600
ip inspect udp idle-time 30
ip inspect dns-timeout 5
ip inspect one-minute low 900
ip inspect one-minute high 1100
ip inspect max-incomplete low 900
ip inspect max-incomplete high 1100
ip inspect tcp max-incomplete host 50 block-time 0
!
! IP inspect Ethernet_0_0
!
no ip inspect name Ethernet_0_0
ip inspect name Ethernet_0_0 tcp
ip inspect name Ethernet_0_0 udp
ip inspect name Ethernet_0_0 cuseeme
ip inspect name Ethernet_0_0 ftp
ip inspect name Ethernet_0_0 h323
ip inspect name Ethernet_0_0 rcmd
ip inspect name Ethernet_0_0 realaudio
ip inspect name Ethernet_0_0 smtp
ip inspect name Ethernet_0_0 streamworks
ip inspect name Ethernet_0_0 vdolive
ip inspect name Ethernet_0_0 sqlnet
ip inspect name Ethernet_0_0 tftp
!
interface Ethernet 0/0
no shutdown
description connected to EthernetLAN
ip address 172.29.44.1 255.255.0.0
ip nat inside
ip inspect Ethernet_0_0 in
ip access-group 100 in
keepalive 10
!
interface Ethernet 0/1
no description
no ip address
ip nat inside
shutdown
!
interface Serial 0/0
no shutdown
description connected to Internet
service-module t1 clock source line
service-module t1 data-coding normal
service-module t1 remote-loopback full
service-module t1 framing esf
service-module t1 linecode b8zs
service-module t1 lbo none
service-module t1 remote-alarm-enable
ip address 206.0.139.70 255.255.255.128
ip nat outside
ip access-group 101 in
encapsulation hdlc
!
!Lista kontroli dostępu ACL 1
!
no access-list 1
access-list 1 permit 172.29.0.0 0.0.255.255
access-list 1 permit 172.20.44.0 0.0.0.3
access-list 1 permit 172.18.0.0 0.0.255.255
!
!Lista kontroli dostępu ACL 100
!
no access-list 100
access-list 100 permit ip any any
!
!Lista kontroli dostępu ACL 101
!
no access-list 101
access-list 101 deny ip any any
!
! Statyczny NAT (Serwer pocztowy)
!
ip nat inside source static 172.20.44.2 206.0.139.72
!
! Dynamiczny NAT
!
ip nat translation timeout 86400
ip nat translation tcp-timeout 86400
ip nat translation udp-timeout 300
ip nat translation dns-timeout 60
ip nat translation finrst-timeout 60
ip nat pool Cisco2611-natpool-40 172.29.44.10 172.29.44.250 netmask 255.255.255.0
ip nat inside source list 1 pool Cisco2611-natpool-40 overload
!
router rip
version 2
network 172.29.0.0
passive-interface Serial 0/0
no auto-summary
!
!
ip classless
!
! Trasy statycznych adresów IP
ip route 0.0.0.0 0.0.0.0 Serial 0/0
no ip http server
snmp-server community xyzincnet1 RO
! Opcja 2: Użycie interfejsu WAN do dynamicznej translacji źródła
no ip name-server
!
ip subnet-zero
no ip domain-lookup
no proxy arp
ip routing
!
! Kontrola dostępu w oparciu o kontekst
!
no ip inspect audit-trail
ip inspect tcp synwait-time 30
ip inspect tcp finwait-time 5
ip inspect tcp idle-time 3600
ip inspect udp idle-time 30
ip inspect dns-timeout 5
ip inspect one-minute low 900
ip inspect one-minute high 1100
ip inspect max-incomplete low 900
ip inspect max-incomplete high 1100
ip inspect tcp max-incomplete host 50 block-time 0
!
! IP inspect Ethernet_0_0
!
no ip inspect name Ethernet_0_0
ip inspect name Ethernet_0_0 ftp
ip inspect name Ethernet_0_0 http java-list 99
ip inspect name Ethernet_0_0 tcp
ip inspect name Ethernet_0_0 realaudio
ip inspect name Ethernet_0_0 smtp
ip inspect name Ethernet_0_0 udp
!
interface Ethernet 0/0
no shutdown
description connected to EthernetLAN
ip address 172.29.44.1 255.255.0.0
ip nat inside
ip inspect Ethernet_0_0 in
ip access-group 100 in
keepalive 10
!
interface Ethernet 0/1
no description
no ip address
ip nat inside
shutdown
!
interface Serial 0/0
no shutdown
description connected to Internet
service-module t1 clock source line
service-module t1 data-coding normal
service-module t1 remote-loopback full
service-module t1 framing esf
service-module t1 linecode b8zs
service-module t1 lbo none
service-module t1 remote-alarm-enable
ip address 206.0.139.70 255.255.255.128
ip nat outside
ip access-group 101 in
encapsulation hdlc
!
!Lista kontroli dostępu ACL 1
!
no access-list 1
access-list 1 permit 172.29.0.0 0.0.255.255
access-list 1 permit 172.20.44.0 0.0.0.3
access-list 1 permit 172.18.0.0 0.0.255.255
!
!Lista kontroli dostępu ACL 99
!
no access-list 99
access-list 99 deny any
!
!Lista kontroli dostępu ACL 100
!
no access-list 100
access-list 100 permit udp any eq rip any eq rip
access-list 100 permit tcp any any range 20 21
access-list 100 permit tcp any any eq 80
access-list 100 permit tcp any any eq 144
access-list 100 permit tcp any any eq 7070
access-list 100 permit tcp any any eq 25
access-list 100 permit udp any any eq domain
!
!Lista kontroli dostępu ACL 101
!
no access-list 101
access-list 101 deny ip any any
!
! Dynamiczny NAT
!
ip nat translation timeout 86400
ip nat translation tcp-timeout 86400
ip nat translation udp-timeout 300
ip nat translation dns-timeout 60
ip nat translation finrst-timeout 60
ip nat inside source list 1 interface Serial 0/0 overload
!
router rip
version 2
network 172.29.0.0
passive-interface Serial 0/0
no auto-summary
!
!
ip classless
!
! Trasy statycznych adresów IP
ip route 0.0.0.0 0.0.0.0 Serial 0/0
no ip http server
snmp-server community xyzincnet1 RO
Firewall Cisco PIX
Kolejna przykładowa konfiguracja odnosi się do firewalla PIX, który został dodany na zewnątrz korporacyjnej sieci LAN i wewnątrz głównego routera internetowego (zobacz rysunek 1.52).
ip address outside 206.1.139.1
ip address inside 172.29.44.1
global 1 206.1.139.10-206.1.139.250
nat 1 172.0.0.0
mailhost 206.0.139.72 172.20.44.2
Router Intel Express
W przypadku routera Intel Express filtry IP są definiowane dla poszczególnych łączy, oddzielnie dla transmisji i odbioru. Aby zabezpieczyć sieć LAN przed nieautoryzowanym dostępem, wykonaj poniższe czynności.
Na ekranie Advanved ustaw dla łącza IP parametr Filtering na Enabled.
Na ekranie Advanved wybierz dla łącza IP Rx Filters, aby zdefiniować filtry odbioru. Takie filtry przekazują lub odrzucają przychodzący ruch z łącza.
Ustaw Default Action na Discard, aby odrzucić wszystkie dane z tego łącza, które nie mogą być przepuszczone przez konkretne filtry, lub ustaw Pass, aby przepuścić wszystkie pakiety z wyjątkiem tych, które zostaną odrzucone przez konkretne filtry.
Ustaw parametr Logging na Enabled, aby przetestować działanie filtrów (normalnie ten parametr jest ustawiony na Disabled w celu minimalizacji nakładów na zewnętrzną obróbkę). Po włączeniu w dzienniku System Log routera będą zapisywane szczegóły wszystkich pakietów, które zostały odrzucone przez domyślne działanie filtrów.
Dodaj i skonfiguruj filtry IP wymagane przez Twoją instalację. Użyj Add, aby dołączyć nowy filtr po zaznaczonym filtrze, Insert, aby dodać nowy filtr przed zaznaczonym filtrem, lub Setup w celu edycji zaznaczonego filtru.
Proszę zauważyć, iż kolejność definiowania filtrów ma znaczenie. Pierwszy odnoszący się do pakietu filtr na liście spowoduje jego odfiltrowanie.
Firewall NetScreen
Przykładowa konfiguracja przedstawiona na rysunku 1.53 odnosi się do firewalla NetScreen, który został dodany na zewnątrz korporacyjnej sieci LAN i wewnątrz głównego routera internetowego (zobacz rysunek 1.52).
Rysunek 1.53. Scenariusz konfiguracji firewalla NetScreen
|
|
Inżynieria społeczna
W opinii publicznej hakerzy działają w ukryciu, przeprowadzając zdalną penetrację systemów komputerowych w środku nocy lub atakując z użyciem siły. Od pewnego czasu już tak się nie dzieje. Chociaż wiele technik hakerskich nie zmieniło się przez lata, do typowych strategii dołączyła inżynieria społeczna, często używana jako główny środek ataku. Inżynieria społeczna to metoda zmuszenia legalnego użytkownika atakowanej sieci do wyjawienia najważniejszych informacji, takich jak nazwa logowania i hasło. Taki proces odegrał główną rolę w wielu, dobrze znanych publicznie, atakach hakerskich. Niesławny haker Kevin Mitnick ujawnił, iż sprytna taktyka inżynierii społecznej leżała u podstaw jego wielu skutecznych penetracji, włączając w to głośny atak na Sun Microsystems w latach 80. (Firma Sun Microsystems twierdziła, iż prawdopodobnie skradziony przez Mitnicka kod źródłowy był warty około 80 milionów dolarów). Również wiele uwieńczonych powodzeniem ataków, które zostały przedstawione w pierwszym tomie tej książki, opierało się o proste techniki inżynierii społecznej.
Nie ma żadnej wątpliwości, iż obecnie wszyscy użytkownicy powinni zdawać sobie sprawę z typowych taktyk inżynierii społecznej, które są powszechnie używane. Obejmuje to na przykład podszywanie się pod nowego użytkownika lub pracownika technicznego. Pewnym minimum powinno być nauczenie pracowników przestrzegania ogólnej zasady nieujawniania nikomu swojego hasła pod żadnym pozorem, chyba iż mają pewność, że rozmawiają z zaufaną osobą. Dla przykładu, udając nowego użytkownika, napastnik może zadzwonić pod główny numer telefonu firmy będącej celem ataku, a następnie poprosić o przełączenie do działu informatyki lub grupy wsparcia technicznego. Po nawiązaniu rozmowy z osobą tam pracującą haker może poinformować, iż jest nowym pracownikiem tymczasowym, któremu nakazano skontaktowanie się właśnie z tym działem w celu przydzielenia tymczasowej nazwy użytkownika i hasła. Dodatkowe badanie może jeszcze bardziej ułatwić ten proces, gdyż haker może na przykład sprawdzić nazwisko dyrektora ds. marketingu, a następnie poinformować administratora „Dzień dobry, nazywam się Jan Kowalski. Jestem nowym pracownikiem tymczasowym Roberta Nowaka (dyrektora działu marketingu), który powiedział mi, iż mam zadzwonić do pana w celu uzyskania tymczasowego hasła i nazwy użytkownika”.
Udając z kolei pracownika działu technicznego, napastnik może poprosić o połączenie z kimś z działu sprzedaży, komu następnie powie, iż Andrzej Malinowski, dyrektor działu IT, nakazał mu skontaktowanie się ze wszystkimi użytkownikami danego działu w celu weryfikacji informacji potrzebnych do zalogowania, ponieważ nowy serwer ma zastąpić stary. Użytkowników należy również nauczyć, iż nie należy wyrzucać żadnych informacji, które mogą stanowić jakąś wartość dla hakerów. Mogą to być listy kontaktowe, schematy organizacyjne, podręczniki, dyskietki, taśmy archiwizacyjne, dyski twarde, a także ważne dane różnego rodzaju. Wszystkie nośniki magnetyczne powinny być wykasowane, a niepotrzebne papiery muszą być pocięte w niszczarkach dokumentów. Należy pamiętać również o zamykaniu pomieszczeń z okablowaniem oraz centrów danych. Wszystkie urządzenia firmowe powinny być inwentaryzowane i sprawdzane regularnie. Gościom zawsze muszą towarzyszyć pracownicy firmy, którzy z kolei powinni nosić w biurze karty identyfikacyjne.
W czasie swojego przemówienia na konferencji Access All Areas w 1997 roku Harl powiedział, iż w sprawie zapobiegania atakom przez inżynierię społeczną, pierwszym krokiem powinno być uczynienie bezpieczeństwa komputerów częścią zadań każdego pracownika, niezależnie od tego, czy używają oni komputerów. Podobnie jak w życiu, edukacja jest najlepszą metodą zapobiegania atakom hakerów przy użyciu inżynierii społecznej. Należy wyjaśnić pracownikom znaczenie bezpieczeństwa komputerów, a następnie przedstawić im szczegóły dotyczące sposobów, używanych przez hakerów do manipulacji ludźmi w celu uzyskania informacji. Menedżerowie powinni poznać typy osobowości, które łatwiej przekonać do ujawnienia danych osobie z zewnątrz, a następnie poświęcić im więcej czasu na edukację. Podsumowując, najlepszą obroną jest atak — wszyscy pracownicy firmy powinny znać i zaangażować się w politykę bezpieczeństwa. Niewielkim wysiłkiem można uzyskać znaczne zmniejszenie ryzyka.
160 Hack Wars. Tom 2. Na tropie hakerów
Rozdział 1. ♦ Zabezpieczanie portów i usług 137
160 C:\Biezace\Hack Wars\hack wars 2\9 makieta\01c.doc
C:\Biezace\Hack Wars\hack wars 2\9 makieta\01c.doc 137
C:\Biezace\Hack Wars\hack wars 2\9 makieta\01c.doc 137