Tento článek je určen čtenářům, kteří již mají alespoň základní přehled o tom, jakým způsobem jsou přepravována data v IP sítích. Znají pojmy IP paket (datagram) a hlavička IP paketu.
Ty z vás, kteří zatím nemáte v těchto věcech příliš jasno, odkáži prozatím na knihu
Velký průvodce protokoly TCP/IP a systémem DNS.
Až načerpáte potřebné vědomosti, případně si doplníte nebo oživíte ty stávající, může se pro vás tento článek stát dalším zajímavým zdrojem informací.
Nyní byste již měli vědět, že zkratka TTL (time to live) znamená dobu života IP paketu. Víte, že jde o jeden jediný byte umístěný v hlavičce IP paketu, který v sobě nese číselnou hodnotu, jež je na každém routeru, přes který paket projde snížena o jedničku. Ve chvíli, kdy tato hodnota dosáhne nuly, je paket zahozen a k odesilateli je vyslán ICMP paket informující o této skutečnosti. TTL je v IP sítích hodně důležitý. Pokud by podobný nástroj neexistoval, putovaly by sítí miliardy ztracených paketů, jejichž následkem by byl DOS efekt.
Ptáte se, čím může být tento jediný byte pro hackera tak zajímavý, aby vydal na samostatný článek?
Mnohým. Je to až k nevíře, co vše lze z tohoto jediného čísla zjistit. Dozvíte se z něj například:
- cestu, kterou data putují ke svému cíli
- odhalíte pomocí něj firewall
- můžete pomocí něj odhalit člověka, který své připojení nabízí dalším lidem
a dokonce zjistíte i používaný operační systém
Sledujeme cestu paketu
Když se zamyslíme nad skutečností, že router, který zahodí paket obsahující TTL s hodnotou 0 nám o tom pošle ICMP zprávu, dojdeme k zajímavému poznatku. Pokud totiž odešleme paket na adresu xxx.xxx.xxx.xxx s hodnotou TTL 1, zahodí tento paket hned první router, který stojí v cestě. Odchytneme si z ICMP zprávy adresu tohoto routeru a pokračujeme odesláním stejného paketu, tentokrát s TTL 2. Paket projde prvním routerem, který sníží TTL na 1 a následující router paket zahodí. O zahození paketu nás však opět informuje. Postup dále opakujeme s hodnotou TTL 3, 4, 5… dokud nedojdeme až k cíli. Uvedeným způsobem tedy můžeme vysledovat cestu, kterou data putují z našeho počítače ke svému cíli (tj. adrese xxx.xxx.xxx.xxx). Pochopitelně by bylo velmi pracné pokaždé ručně opakovat uvedený postup. Není však nic jednoduššího, než si vytvořit skript, který za nás vše provede automaticky. Na stejném principu funguje i program TACERT, který je implicitně obsažen ve Windows a většina trasovacích programů, které můžete sehnat na Internetu. Za zmínku stojí například program Visual Route, který navíc zobrazí trasu na přehledné mapě.
Odhalujeme firewall
Ke trasování se běžně používají pakety Echo request protokolu ICMP nebo packety protokolu UDP. Tyto pakety jsou však často na firewallech zakázané a proto jsou jím bez odpovědi likvidovány. Nám je tudíž znemožněno sledování cesty dál za firewall. Používáme-li například program Tracert, jsou nám v případě, kdy narazíme firewall zobrazovány pouze hvězdičky. Jak však zjistit adresu firewallu a další cestu za ním? Existuje možnost. Stačí, když pro trasování využijeme protokolu TCP, který většinou není firewally blokován. Umožní nám to například program
Hping2. S jeho použitím uvidíme již samotný firewall i cestu za ním.
Další možnost jak firewall odhalit je ta, že vyšleme na napadený stroj programem Hping2 dva pakety. Jeden na port, který je na firewalu otevřen a druhý na port, který je na firewallu uzavřen. Z odpovědi uvidíme, že TTL z odpovědi zavřeného portu je o jedničku větší než TTL otevřeného portu.
Více se o této problematice dočtete v časopise
Hackin9 1/2006.
Zjišťujeme operační systém
Ptáte se, jak je možné podle jediného čísla zjistit operační systém, který je spuštěn na vzdáleném stroji? Velice jednoduše. Různé operační systémy totiž mají implicitně nastavenu různou hodnotu TTL. V tabulce uvádím tyto hodnoty pro různé operační systémy.
Operační systém | TCP | UDP |
AIX | 60 | 30 |
FeeBSD 2.1R | 64 | 65 |
HP/UX 9.0x | 30 | 30 |
HP/UX 10.01 | 64 | 64 |
Irix 5.3 | 60 | 60 |
Irix 6.x | 60 | 60 |
Linux | 64 | 64 |
MacOS/MacTCP 2.0.x | 60 | 60 |
OS/2 TCP/IP 3.0 | 64 | 64 |
OSF/1 V3.2A | 60 | 30 |
Solaris 2.x | 255 | 255 |
SunOS 4.1.3/4.1.4 | 60 | 60 |
MS Windows 95 | 32 | 32 |
MS Windows 98 | 128 | 128 |
MS Windows NT 3.51 | 32 | 32 |
MS Windows NT 4.0 | 32 | 32 |
MS Windows 2000 | 128 | 128 |
MS Windows XP | 128 | 128 |
Zastavme se nad otázkou, jak použitý operační systém zjistit. Stačí, když nám naše oběť pošle jakýkoliv paket, který si zachytíme třeba Etherealem. Zjistíme si z něj hodnotu TTL, která bude například 60. Poté si postupem uvedeným v prvním případě zjistíme, kolik routerů stojí na cestě mezi námi a obětí (například 4). Obě čísla spolu sečteme a získáme tak výchozí hodnotu TTL, kterou použil operační systém při odeslání paketu. V našem případě 64. Pak už stačí tuto hodnotu pouze porovnat s uvedenou tabulkou a vybrat si ten správný OS nebo můžeme alespoň zúžit okruh těch možných.
Zjišťujeme černé duše
Většina poskytovatelů Internetu má ve smlouvě zmínku o zákazu zpřístupnění připojení dalším osobám. Jednoduše řečeno zakazují, abychom si za svého počítače udělali router a nabízeli připojení svým kamarádům, kteří by se pak připojovali přes nás. Získá-li provider podezření, že se v jeho síti děje něco podezřelého, není pro něj žádný problém takového člověka pomocí hodnoty TTL vypátrat. Normálně by totiž z vašeho počítače proudily pakety s TTL nastaveným na defaultní hodnotu např.128. Pokud se však přes váš počítač napojuje do sítě někdo další, pak jsou hodnoty TTL v jeho paketech sníženy o jedničku vaším počítačem a provider je pak odchytne s hodnotou jinou než jakou mají vaše vlastní. Chcete-li tedy poskytovat připojení svým kamarádům a máte to od providera zakázané, nezapomeňte na toto nebezpečí.
Zajímá-li vás tato problematika, doporučuji vám k prostudování časopis
Hackin9 3/2005.
Určitě existuje ještě spousty dalších možností, ke kterým se dá hodnota TTL použít. Mě však momentálně žádná další nenapadá a proto vám opět dávám prostor v diskuzi, kde očekávám vaše další náměty na využití tohoto jedinečného bytu jménem TTL.
.cCuMiNn.