IP-spoofing

Från Unix.se, den fria unixresursen.

IP-spoofing är att man förfalskar avsändaren på IP-paket.

Att bara skicka ett paket med falsk avsändare är helt trivialt. Man konstruerar bara ett IP-paket, med komplett header, i minnet, och skickar sedan iväg det med en "rå" socket. Ifall nu datorn man skickade paketet till skickar ett svar går det då till IP-adressen man angav i paketet, så det kan man alltså inte se själv. (Det är för övrigt så en så kallad smurf-attack går till. Man skickar pingar till ett subnät som ger många svar, med en förfalskad IP-adress till den man vill sänka.) Något som kan komplicera saken är att åtminstone Telia tydligen filtrerar bort paket med en avsändare som inte ligger inom deras IP-serie.

Innehåll

Att öppna en anslutning

Vill man nu göra något mer avancerat som att öppna en TCP-anslutning blir det lite svårare. När man öppnar en anslutning till en TCP-port så sker en så kallad trevägshandskakning. Först skickar datorn som vill ansluta ett paket, SYN, som säger att den vill ansluta. Då skickar värddatorn tillbaka ett paket som svar, SYN+ACK, vilket betyder att den har uppfattat förfrågningen. Slutligen svarar den anslutande datorn med ACK, och så är anslutningen öppen.

I SYN+ACK-paketet man får från värddatorn finns ett första sekvensnummer. Detta nummer + 1 ska man sedan skicka i sitt ACK-paket, skickar man något annat värde så stänger värddatorn genast anslutningen. Detta är uppenbart ett problem vid IP-spoofing; hur ska vi kunna veta vad sekvensnummret är, när alla svar går till en annan adress? Då måste man undersöka algoritmen värddatorn använder för att generera sekvensnumrena.

Sekvensnummer

Förr var det allra vanligaste att värddatorn för varje anslutning tog sekvensnumret och ökade det med 64000. Anslöt man sig en gång och fick sekvensnumret 100, var man alltså säker på att man nästa anslutning skulle få 64100. Detta var ju förstås enkelt att uttnyttja. Exempelvis HP-UX 10.20 använder denna metod som standard. En annan vanlig metod var att bara öka sekvensnumret med ett visst tal för varje tidsenhet. Detta var inte heller något vidare säkert, man kunde bara ansluta sig några gånger, och på så vis räkna ut hur mycket sekvensnumret ungefär ökar per tidsenhet, och få en god chans att gissa rätt. Numera använder många TCP/IP-stackar helt slumpmässiga första sekvensnummer, vilket har nästintill stoppat denna säkerhetslucka, men fortfarande finns det många stackar som är sårbara. Exempelvis brukar de som är inbyggda i skrivare och dylikt vara dåliga.

Något som kan komplicera saken är ifall datorn som har IP-adressen man spoofar är uppe. Då den får en massa konstiga paket, kommer den att skicka en RST till värddatorn, som bryter förbindelsen. Man måste alltså först sänka datorn man ska låtsas vara, på något lämpligt vis.

Användningsområden

Vad kan man då använda IP-spoofing till? Ursprungligen utnyttjades det mest för att ta sig in via rsh/rlogin där folk lagt in datorer i sina rhosts-filer som fick logga in utan lösenord; man låtsades alltså vara den dator som de lagt in där. En annan tillämpning vore att ta sig genom en brandvägg.

Notera att IP-spoofing är helt oanvändbart för att till exempel ansluta sig till IRC eller ICQ, då man ju inte får tillbaka nån data från servern. Ett undantag är om IP-adressen man spoofar ligger på samma fysiska nätverk som en själv, då kan man ju nämligen sniffa nätverket och se datan. Man behöver då inte heller gissa det första sekvensnumret, då man ju kan sniffa fram det också.

Se även

Personliga verktyg