TCP-kaappaus

TCP-kaappaus – Man -in-the-Middle -hyökkäyksen  muunnelma, jossa hyökkääjä pystyy vakoilemaan verkon jäsenten paketteja ja lähettämään omia pakettejaan verkkoon. Hyökkäys käyttää TCP -protokollan yhteydenmuodostusominaisuuksia , ja se voidaan suorittaa sekä "kolminkertaisen kättelyn" että muodostetun yhteyden aikana.

Mahdollisen TCP-sanomien huijauksen ongelma on tärkeä, sillä TCP-protokollan pohjalta toteutettujen FTP- ja TELNET -protokollien analyysi osoitti, että FTP- ja TELNET-pakettien tunnistamisongelma on näiden protokollien kautta osoitettu kokonaan kuljetustasolle, eli ts. , TCP:lle.

TCP-yhteyden muodostaminen

TCP-paketin tunnistamiseksi TCP-otsikossa on kaksi 32-bittistä tunnistetta, jotka toimivat myös pakettilaskurina - järjestysnumero ja kuittausnumero. Siinä tapauksessa, että isäntä A haluaa muodostaa TCP-yhteyden isännän B kanssa, ns. "kolminkertainen kättely", jonka aikana isännät vaihtavat seuraavat paketit:

Tämä paketti päättää yhteyden muodostamisen, joten seuraavassa paketissa isäntä A lähettää hyödyllistä tietoa isännälle B

Hyökkäyksen periaate

Ottaen huomioon yllä kuvatun yhteydenmuodostusmallin, voit nähdä, että ainoat tunnisteet, joilla loppuisäntä voi erottaa TCP-tilaajat ja TCP-yhteydet, ovat Sarjanumero- ja Kuittausnumero-kentät. Siten, jos hyökkääjä määrittää tietyn yhteyden ISSa- ja ISSb-arvot, hän voi luoda väärennetyn TCP-paketin, jonka lopullinen isäntä hyväksyy ja käsittelee.

Yksi hyökkäystyyppi tarkoittaa, että hyökkääjä upottaa RST (Reset) -ohjausbitin TCP-pakettiin. RFC 793 :n mukaan tämä lippu käskee kohde-isännän katkaisemaan yhteyden ilman lisäviestintää. Järjestysnumero-kentän perusteella kohdeisäntä määrittää, käsitelläänkö vai jätetäänkö nollauskomento huomioimatta, ja kohde ei saa lähettää vastausta RST-bitillä. On tärkeää huomata, että kohdeisäntä todentaa RST-pyynnön vain järjestysnumeroa vastaan ​​ja sulkee yhteyden, jos se kuuluu nykyiseen TCP-ikkunaan. Ja vaikka kohdeisäntä voi laskea kuittausnumeron, sen ei tarvitse tehdä niin, ja useimmat TCP-pinot yksinkertaisesti jättävät tämän vaiheen huomiotta.

Vastaanotettu RST-paketti katkaisee aina yhteyden. Pitkäaikaiset yhteydet, kuten reitittimien väliset BGP - yhteydet, ovat erittäin haavoittuvia tällaisille hyökkäyksille. Ensinnäkin hyökkääjällä on riittävästi aikaa toteuttaa huolellisesti suunniteltu paketti, ja toisaalta DoS aiheuttaa valtavia tappioita . Reitittimien on määritettävä naapuritaulukko uudelleen, mikä voi kestää useita minuutteja tosielämässä.

Vähemmän ilmeinen on se, että SYN-lippu voi myös kaataa yhteyden. RFC 793 :n mukaan kun SYN-lippu asetetaan, kun yhteys muodostetaan, Järjestysnumero-kenttä sisältää alkuarvon, jota käytetään myöhemmin. Jos SYN-paketti vastaanotetaan myöhemmin tällä yhteydellä, RFC 793 käsittelee sitä virheenä. Tämän seurauksena vastaanottajan on katkaistava yhteys lähettämällä RST-paketti. Toisin kuin RST-paketti, isäntä vastaa SYN-pakettiin lähettämällä RST-paketin. Tämä avaa uuden DoS-hyökkäyksen mahdollisuuden. Hyökkääjä voi myöhemmin käyttää uhrin kaistanleveyttä. Tämä hyökkäys on erityisen onnistunut ADSL - linjoilla.

Vaikka RST- ja SYN-hyökkäykset eivät käytä IP-datagrammin hyötykuormaa , kolmas tekniikka ruiskuttaa tiedot olemassa olevaan yhteyteen. Hyökkääjä voi lisätä mitä tahansa dataa, joka aiheuttaa yhteyden katkeamisen, tai luoda huolellisesti tietoja, jotka johtavat virhetilaan, tai suorittaa jonkin toiminnon hyökkääjän hyödyksi. Uhri ei ehkä edes huomaa näitä manipulaatioita. Esimerkiksi FTP- ja TelNET-protokollat ​​eivät tarkista lähettäjän IP-osoitetta , ja siksi jos väärennetty TCP-pyyntö luodaan onnistuneesti, ne vastaavat hyökkääjän todelliseen IP-osoitteeseen, joka kaappaa yhteyden kokonaan.

Joten hyökkäyksen suorittamiseksi sinun on tiedettävä kaksi TCP-yhteysparametria. Jos hyökkääjä voi suoraan salakuunnella isäntien A ja B välistä viestintäkanavaa, nämä parametrit määritetään yksinkertaisella liikenneanalyysillä. Muussa tapauksessa sinun on turvauduttava monimutkaisempiin menetelmiin.

ISN-parametrin matemaattinen estimointi

Tämä menetelmä perustuu oletukseen, että alkuparametrien ISSa ja ISSb (ns. ISN  - Initial Sequence Number) valinta yhteyttä muodostettaessa riippuu jollain tavalla ajasta. Turvallisuuden kannalta olisi parasta valita täysin mielivaltainen ISN, joka tekisi ennusteesta käytännössä käyttökelvottoman, mutta RFC 793:n TCP-protokollan kuvauksessa on suositeltavaa nostaa tämän laskurin arvoa. 1 joka 4 mikrosekunti, mikä tekee tämän arvon ennustamisesta triviaalia. Käytännössä vanhempien Linux -ytimien lähdekoodin sekä Windows NT 4.0:n ja sitä vanhempien käyttöjärjestelmän toiminnan analyysi vahvistaa valitun ISN-arvon toiminnallisen riippuvuuden ajasta.

Yleisessä tapauksessa, jos tällainen riippuvuus on olemassa, se ilmaistaan ​​jollakin kaavalla muotoa ISN = F(mcsec), jossa mcsec on mikrosekuntien lukumäärä tutkittavan käyttöjärjestelmän laitteistokellon mukaan.

Siten hyökkääjän on suoritettava jonkinlainen analyysi määritetyn ISN-arvon funktiosta ajan funktiona. Tätä varten tutkittavalle verkon käyttöjärjestelmälle lähetetään sarja tavallisia pyyntöjä TCP -yhteyden luomiseksi ja vastaanotetaan vastaava määrä vastauksia käyttöjärjestelmän ISN:n nykyisillä arvoilla kullakin hetkellä. Samalla mitataan aikavälejä (mikrosekunteina) vastausten saapumiselle pyyntöihin. Muodostamalla taulukko saatujen ISN:ien riippuvuudesta ajasta t, joka on kulunut kokeen alusta, ja lähentämällä sitä millä tahansa matemaattisella työkalulla, saadaan lähtötietojen virheeseen verrattavalla virheellä jatkuva ISN:n muutoksen funktio t:stä, voimassa tietyllä aikavälillä: ISN(t) = F (t);

Tämän kaavan avulla voimme käyttää aiempaa ISN-arvoa mittaamalla sen nimeämisestä kulunutta aikaa saadakseen nykyisen ISN-arvon tiettynä ajankohtana.

Jatkossa hyökkääjän tarvitsee vain seurata tutkittavien isäntien käyttäytymistä ja laskettuaan yhteyden luomisen hetken, arvioida likimääräisesti isäntien valitsemien ISSa- ja ISSb-arvojen arvoalue. Koska tämä menetelmä on likimääräinen, tiettyä luettelointia ei voida välttää, mutta matemaattinen mallintaminen mahdollistaa useiden suuruusluokkien (~ - ~ ) vähentämiseksi hyökkääjän tarvitsemien pakettien määrää onnistuneen hyökkäyksen suorittamiseen.

Ikkunan vaihto

Aina ei kuitenkaan ole mahdollista tehdä alustavaa matemaattista arviota ISN-arvoista. Myös joissain tapauksissa arvo valitaan enemmän tai vähemmän ajasta riippumattomaksi, ja siksi matemaattinen arviointi on vaikeaa tai mahdotonta. Tässä tapauksessa on turvauduttava karkeampiin menetelmiin, kuten näiden parametrien kaikkien mahdollisten arvojen laskemiseen. RFC 793 -standardin huolellinen tutkiminen kuitenkin yksinkertaistaa tilannetta jonkin verran.

Ensimmäisenä mainittava asia on TCP-protokollan ikkunointimekanismi. Paketit voivat ohittaa toisensa, kun ne jaetaan Internetin kautta. Jotta ei menetettäisi edeltäjiä aikaisemmin saapuneita paketteja, vastaanottaja perustaa ns. ikkunan, jossa hän voi palauttaa pakettien järjestyksen. Siten, jos Järjestysnumero-kentän arvo on vastaanottajan ikkunassa, TCP hyväksyy ja käsittelee tämän paketin. Tämä vähentää huomattavasti hyökkääjän tekemien yritysten määrää: se vähenee arvosta .

Käyttöjärjestelmästä riippuen ikkunan koko voi vaihdella tavuista ( Windows XP ja SP2 ) 5840 tavuun ( Linux-ydin 2.4 ja 2.6).

Ikkuna vähentää hyökkääjän käyttämien järjestysnumeroiden määrää. Windows XP:n tapauksessa tämä luku putoaa arvoon . Toisin sanoen hyökkääjän tarvitsee vain luoda hyökkäyspaketteja ruiskuttaakseen RST-paketin ja siten kaataakseen yhteyden. Tämä on hyvin pieni luku.

Asiat pahenevat entisestään, jos yhteyden osallistujat tukevat kokoa muutettavaa ikkunaa. Tämä TCP-ominaisuus lisää todennäköisyyttä löytää sopiva järjestysnumero lyhyessä ajassa. Ikkunan koon muuttaminen on tarkoitettu yhteyksille, jotka vaativat suuremman ikkunan korkean latenssin tai kiireisen kaistanleveyden vuoksi. Jotta kaikki voivat lähettää ilman päällekkäisyyksiä, tämä tekniikka laajentaa ikkunan ulottuvuuden 14 bittiin (Microsoft Windows), eli .

Hyökkääjän on kuitenkin voitettava vielä yksi este: lähde- ja kohde-IP-osoite/ portti quad . IP-osoite tuskin on ongelma - hyökkääjä tietää yleensä, keneen hän on kohdistettu; kohdeportti on myös helppo määrittää. Lähdeportin määrittäminen on hieman vaikeampaa, mikä teoriassa voi vaihdella välillä 0 - 65535. Käytännössä portit alle 1024 ja käyttöjärjestelmän määrittelemän kynnyksen ylittävät portit on varattu erityistehtäviin.

Linux ytimen versiolla 2.4 tai 2.6 käyttää numeroita alkaen - lähettäjäporttina .

Hyökkääjän iloksi jäljellä olevia vaihtoehtoja ei jaeta satunnaisesti; ydin jakaa ne tietyn järjestelmän mukaisesti. Näin ollen hyökkääjällä ei ole paljon vaikeuksia ennustaa lähdeporttia. On vain muutamia poikkeuksia, kuten OpenBSD , joka varaa ne mielivaltaisesti. Esimerkiksi Windows XP käynnistyy ensimmäisen yhteyden portista ja lisää porttia yhdellä jokaista seuraavaa yhteyttä varten. Linux ( erityisesti Fedora Core 3 ytimellä 2.6.9), jossa on jälleen lisäyksiä järjestyksessä. Cisco-järjestelmät lisäävät portin arvoa 512:lla jokaista uutta yhteyttä kohden, mutta tämä ei tee mekanismista turvallisempaa.

Hyökkääjän ei tarvitse arvata portin numeroa, jos uhrin koneen yhteyksien määrä on tiedossa. Yleensä hyökkääjän tarvitsee vain aloittaa ensimmäisestä arvosta ja kokeilla esimerkiksi 50 porttia. Hyökkääjän ei myöskään ole vaikeaa saada selville uhrin käyttöjärjestelmä. Joten itse asiassa sataman määritelmä ei ole vakava este.