background image

www.hakin9.org

66

Hakin9 Nr 5/2004

O

br

on

a

www.hakin9.org

67

Hakin9 Nr 5/2004

Skanowanie portów

N

Hakin9 Live czeka nas niespodzian-
ka.  Po  uruchomieniu  CD  wystarczy 
wpisać komendę:

$ nmap localhost

To,  co  właśnie  zrobiliśmy,  nazywa  się  skano-
waniem  portów.  To  jedna  z  technik  (nieinwa-
zyjnych)  zbierania  informacji  o  potencjalnych 
hostach-ofiarach.  Bardzo  ważnych  informacji. 
W  ten  sposób  można  zebrać  dane  o  urucho-
mionych na zdalnym komputerze usługach. Je-
żeli  coś  nasłuchuje  na  porcie  TCP,  z  pewno-
ścią jest to program – może zatem być podatny 
na atak. Wiedza o otwartych portach ofiary jest 
bardzo przydatna przy planowaniu agresji.

Jeśli na przykład otwarty jest port 22 (SSH), 

bez  trudu  można  ustalić  wersję  nasłuchującego 
na nim demona. Załóżmy, że na porcie tym pra-
cuje serwer OpenSSH w wersji 3.7.1p1. Każdy, kto 
śledzi wiadomości na temat bezpieczeństwa, bez 
najmniejszego problemu uzyska uprzywilejowany 
dostęp do takiej maszyny – i to nie znając hasła! 

Metody skanowania

Aby  lepiej  zrozumieć  skanowanie,  wyobraźmy 
sobie, że chcemy się dostać do domu z 65535 

Skanowanie portów 

z punktu widzenia 

administratora

Konstantin Klyagin

Choć skanowanie portów samo 

w sobie nie jest szkodliwe, może 

być użyte w złym celu. Dzięki 

zdobytej w taki sposób wiedzy 

intruzowi o wiele łatwiej uzyskać 

nieuprawniony dostęp do 

systemu. Jakie metody można 

zastosować, żeby utrudnić 

wykrycie skanowania portów? 

W jaki sposób wykryć takie 

działanie, kiedy intruz stosuje 

coraz sprytniejsze techniki?

drzwiami. Naciskamy więc na każdą klamkę, że-
by sprawdzić, czy któreś z nich są otwarte. Jed-
nak to, że drzwi nie są zamknięte nie znaczy, że 
można do tego domu wejść. W dodatku za każdą 
bramą może czaić się strażnik (w naszym przy-
padku – uruchomiona usługa). Nie wpuści nas 
do środka, dopóki go nie zamordujemy, nie po-
kroimy ciała i nie wrzucimy jego kawałków w nurt 
najbliższej rzeki. Ale strażnika może nie być al-
bo może okazać się niedołężnym staruszkiem. 

Z artykułu nauczysz się...

•   jak  skanować  porty  metodami  trudnymi  do 

wykrycia,

•   jak  wykrywać  próby  skanowania  przepro-

wadzane  przy  użyciu  trudnowykrywalnych 
metod.

Powinieneś wiedzieć...

•   powinieneś umieć korzystać z systemów unik-

sowych,

•   powinieneś  posiadać  podstawową  wiedzę 

o  protokole  TCP/IP  (polecamy  Artykuł  Ataki 
DDoS – podstawy i praktyka
 z Hakin9 3/2004 
oraz dokumentację na CD).

background image

www.hakin9.org

66

Hakin9 Nr 5/2004

O

br

on

a

www.hakin9.org

67

Hakin9 Nr 5/2004

Skanowanie portów

Wtedy nasze – intruza – zadanie mo-
żemy uznać za wypełnione; droga do 
domu  stoi  otworem.  Przyrzyjmy  się 
się więc najpierw sposobom naciska-
nia na klamki.

TCP connect(): 

zwykłe puk-puk

Najprostszą  metodą  sprawdzenia, 
czy  coś  nasłuchuje  na  porcie  TCP, 
jest  próba  połączenia  z  nim.  Peł-
ne  skanowanie  tym  sposobem  wy-
maga  konsekwentnego  łączenia  się 
z wszystkimi portami, od 1 do 65535. 
Technicznie  rzecz  biorąc,  ta  meto-
da  wymaga  wywołania  funkcji  con-
nect()
.  Ale  nie  jesteśmy  programi-
styczną szkółką niedzielną i nie bę-
dziemy pisać ani kawałka kodu. Za-
miast  tego  użyjemy  najprostszych 
narzędzi, dostępnych w prawie każ-
dym  systemie  operacyjnym.  Najła-
twiejszym oczywiście sposobem jest 
skorzystanie z programu telnet:

$ telnet bezuzyteczne.pudlo.com 25

Wydanie  tej  komendy  pokaże,  czy 
cokolwiek  nasłuchuje  na  porcie  25 
(zwykle  SMTP)  –  brak  komunika-
tu  connection  refused,  oznacza,  że 
jakiś  program  czeka  na  połączenia 
właśnie z tym portem.

Sytuacja  komplikuje  się,  gdy  ska-

nowany  port  jest  filtrowany.  Oznacza 
to,  że  na  drodze  między  maszynami 
skanującego i ofiary jest firewall, któ-
ry  po  prostu  odrzuca  pakiety  pocho-
dzące spoza określonego zakresu ad-
resów IP. Pakiety mogą też być filtro-
wane  pod  kątem  portów  docelowych 
i  innych  parametrów  sieciowych 
– firewalle są z natury rzeczy elastycz-
ne. Jeśli porty ofiary są filtrowane, ska-
nowanie może okazać się bezcelowe.

Skanowanie  zdefiniowanego  za-

kresu (na przykład od 1 do 6667) por-
tów  nazywane  jest  sweep  scan,  zaś 
skanowanie  jednego  portu  na  wie-
lu  różnych  hostach  –  sweep  scan
Takie  modyfikacje  skanowania  TCP 
connect()
 wyglądają z pozoru na zwy-
kłe  próby  połączenia,  są  więc  dużo 
trudniejsze do zidentyfikowania. Każ-
dy  administrator  zada  sobie  bowiem 
pytanie: czy to było skanowanie, czy 
przypadkowa próba połączenia?

Metoda TCP connect(), choć pro-

sta,  ma  jedną  ogromną  wadę.  Każ-
dy program świadczący usługę zare-
jestruje próbę połączenia. Co praw-
da nie zapisze numeru dowodu oso-
bistego intruza, ale z pewnością je-
go adres IP znajdzie się w logu pro-
gramu  –  stąd  już  prosta  droga  do 
namierzenia  agresora.  Aby  się  nie 
dać  złapać, można  skorzystać z  in-
nej metody, wykorzystującej pakiety 
TCP SYN.

TCP SYN: na paluszkach

Inną  nazwą  skanowania  TCP  SYN 
jest  skanowanie  półotwarte.  Zna-
czy  to,  że  podczas  skanowania  nie 
zostaje  nawiązane  pełne  połącze-
nie  TCP.  Aby  to  dobrze  zrozumieć, 
trzeba  nieco  zagłębić  się  w  zasadę 
działania  protokołu  TCP/IP.  Poniż-
szy  opis  jest  skrótowy,  osoby  zain-
teresowane  odsyłamy  do  Artykułu 
Ataki  DDoS  –  podstawy  i  praktyka 
Hakin9 3/2004 oraz do dokumen-
tacji na CD.

W  początkowej,  negocjacyjnej 

fazie nawiązywania połączenia TCP 
konieczne jest wysłanie przez klienta 
pakietu SYN. Po otrzymaniu go ser-
wer  powinien  odpowiedzieć  pakie-
tem  SYN+ACK  lub  RST.  SYN+ACK 
oznacza odpowiedź pozytywną (zga-
dzam się na nawiązanie połączenia
), 
podczas gdy RST – negatywną. Na-
wiązanie połączenia kończy się po-
twierdzeniem odebrania potwierdze-
nia, czyli wysłaniem przez stronę ini-
cjującą połączenie pakietu ACK.

Widać  więc,  że  aby  sprawdzić, 

czy  dany  port  jest  otwarty,  nie  mu-
simy  nawiązywać  pełnego  połącze-
nia  –  wystarczy  wysłać  pakiet  SYN 
i  czekać  na  odpowiedź  drugiej 
strony.  Jeśli  odpowiedź  ta  brzmi 
SYN+ACK,  możemy  uznać,  że  port 
jest  otwarty  i  nie  kontynuować  na-
wiązywania  połączenia.  Dzięki  te-
mu, że połączenie nie zostało w peł-
ni nawiązane, możemy oszukać nie-
które proste narzędzia do wykrywa-
nia skanowania portów.

Spróbujmy  zastosować  ten  me-

chanizm  ręcznie.  Prościutki  telnet
którego użyliśmy poprzednio, już nie 
wystarczy.  Do  stworzenia  potrzeb-
nych pakietów TCP użyjemy progra-

mu  SendIP.  Narzędzie  to  wymaga 
uprawnień administratora:

# sendip 192.168.1.2 -p ipv4 \
  -is 192.168.1.1 -id 192.168.1.2 \
  -p tcp -td 25 -tfs 1

SendIP  to  mały  lecz  wyposażony 
w  duże  możliwości  program  umożli-
wiający  wysyłanie  zadanych  mu  pa-
kietów. Za pomocą prostych parame-
trów można określić typ pakietu i pa-
rametry  jego  nagłówków.  W  komen-
dzie, którą wydaliśmy powyżej, wska-
zaliśmy, że prześlemy pakiet protoko-
łem  IPV4  (

-p

)  oraz  określiliśmy  źró-

dłowy (

-is

) i docelowy (

-id

) adres IP. 

Potem  zagłębiliśmy  się  w  szczegóły 
– określiliśmy rodzaj pakietu (

-p

), port 

przeznaczenia (

-td

); wreszcie ustawi-

liśmy bit SYN (

-tfs

). Więcej informacji 

o możliwościach SendIP znajdziemy 
na stronie man programu.

Ponieważ SendIP może wyłącz-

nie  wysyłać  pakiety,  do  zarejestro-
wania  odpowiedzi  serwera  użyjemy 
innego  narzędzia.  W  naszym  przy-
padku  wystarczy  standardowy  snif-
fer, tcpdump:

# tcpdump \
  'dst 192.168.1.1 && src 192.168.1.2'

To  polecenie  rozpocznie  nasłuch 
i  wyświetli  wszystkie  pakiety  prze-
znaczone  dla  naszego  komputera, 
przychodzące z adresu 192.168.1.2. 
Jeśli nie ma zbyt dużego ruchu mię-
dzy tymi dwiema maszynami, nic nie 
powinno nam utrudnić śledzenia pa-
kietów.  Jeśli  teraz  wyślemy  za  po-
mocą SendIP pakiet, tcpdump poka-
że coś w rodzaju:

02:10:34.563234 IP
192.168.1.2.smtp > 192.168.1.1.0:
S 3831817350:3831817350(0)
ack 1309342054 win 5840
<mss 1460>

Zwróćmy  uwagę  na  literę  S  i  sło-
wo ack – jasno wskazują one na pa-
kiet SYN+ACK. Zdalna maszyna ma 
więc otwarty port 25. Aby zobaczyć, 
co się stanie w przypadku zamknię-
tego  portu,  zmodyfikujmy  nieco  ko-
mendę SendIP: