TCP bezpečnost

TCP bezpečnost
« kdy: 04. 02. 2021, 11:10:09 »
Ahoj, v poslední době mi příjde, že by se pomalu každý kdo používá přenos dat na internetu měl bát o jejich bezpečnost. Proto bych se chtěl jen teoreticky zeptat, jak by se dala hacknout tato situace...

Mám TCP klienta, který se připojuje na TCP server s veřejnou IP adresou. Jakmile se naváže spojení, tak veškerou komunikaci přebírá TCP server. Tj. server vždy zahajuje komunikaci a client mu odpovídá. Komunikace je nezabezpečená.

Moc nerozumim tomu, jak by někdo třetí, který sedí někde buhví kde mohl zasáhnout do této komunikace.
Jediné co mě napadá je že existuje hackerský TCP server, který má stejnou IP adresu jako můj a tak se client připojí k němu. Jak by to ale mohl dokázat, když jsou všichni z jiného města? V rámci jedné budovy client-hacker možná, ale jiná síť...

Existuje nějaká metoda jak se do toho spojení dostat, nebo možná ještě jinak jak bych to mohl sám dokázat? Abych to zjednodušil tak je mi úplně jedno, jestli ten hacker data sleduje. Jediné co nechci je, aby do toho spojení mohl data poslat.



Re:TCP bezpečnost
« Odpověď #1 kdy: 04. 02. 2021, 11:18:40 »
To může odposlouchávat jakýkoli operátor, který má zařízení v cestě paketu. Při špatném nastavení se pakety klidně kopírují i na spoustu dalších zařízení. Když se bude jednat o pravidelný provoz, tak už to může někdo logovat v rámci diagnostiky apod... Určitě počítej, že na server ti bude chodit různý bordel a budeš to muset filtrovat.
Oprávnění klienta chceš potvrzovat minimálně nějakým heslem. A to chceš mít nějak šifrované, jinak se ti tam přihlásí kdokoli.
« Poslední změna: 04. 02. 2021, 11:20:24 od kotelgg »

Re:TCP bezpečnost
« Odpověď #2 kdy: 04. 02. 2021, 11:40:13 »
Autorizaci klienta chci teď po novu řešit pomocí AES a předpokládám, že SERVER i CLIENT při navazování spojení pozná zda je to fejk nebo ne. Pro mě je největší otázkou co se bude po tom co je spojení navázané. Klidně ať ten operátor data vidí to je mi úplně jedno (jedná se o data z měření, žádné tajnosti). Ten systém ale umožňuje data i přijímat např. konfiguraci. Tu bych docela nerad aby mi někdo měnil. Kdybych komunikaci zašifroval, bylo by všechno v cajku, ale je to vůbec nutné? Snad chápete co tím chci říci...

AoK

  • ****
  • 251
    • Zobrazit profil
Re:TCP bezpečnost
« Odpověď #3 kdy: 04. 02. 2021, 11:48:34 »
těch útoků je celá řada, nikdy asi nebudeš mít znalosti, abys dokázal sám posoudit jestli je daný útok možný a nebo ne, útočník bývá chytřejší než většina adminů/programátorů, nezbývá než věřit doporučením a nedělat svoji cestu bez dostatečných znalostí.

Namátkou, někdo cestou může otrávit arp cache a přesměrovat provoz na jiné servery (TCP/IP je poměrně vysoko položený protokol). Stejnou věci lze udělat přes ICMP redirect, pokud se útočník zmocní nějakého aktivního prvku na cestě (např. veřejná wifi na tohle je super).

Poté existují útoků na přímo změnu obsahu TCP zpráv, ať již formou MiTM nebo pokročilejší s odhadováním sequence numbe a ISN. Stejně jako je nepřeberné množství útoků, které zapřičiní, že se spojení nenaváže. TCP samo o sobě postrádá možnost ověřit obě strany komunikace a ani neklade velké překážky pro napadení již probíhající komunikace (hledej tcp session hijack). Šifrování zároveň slouží i pro validace přenášených dat, nelze je totiž změnit.

Nevymýšlel svoje způsoby zabezpečení, uděláš v tom miliony chyb, existuje SSL/TLS s client certifikátem, poměrně solidní a robustní, můžeš použít ipsec jako ověřený standard. AES je super slovo, ale jak chceš přenášet heslo? Budeš ho rotovat? Server a ani klient při navazování nemá šanci poznat, že to je fejk, naopak nikdy nevíš ke komu jsi se připojil a kdo se k tobě připojil.

Re:TCP bezpečnost
« Odpověď #4 kdy: 04. 02. 2021, 11:48:42 »
dobre u nejake hracicky co mas na mereni teploty na chalupe, tak te to nevzrusuje.
ale uz by stacilo, abys me na chalupe k serveru pripojeny kotel a vnejsi utocnik ti ho muze zhasnout nebo rozpalit do bela.

takze proc nezkusit knihovny ssl a mit to bezpecne od zacatku.


Re:TCP bezpečnost
« Odpověď #5 kdy: 04. 02. 2021, 12:23:42 »
Dam komukoliv 5000Kč když to dokáže nabourat...má někdo zájem?

Re:TCP bezpečnost
« Odpověď #6 kdy: 04. 02. 2021, 12:31:27 »
Dam komukoliv 5000Kč když to dokáže nabourat...má někdo zájem?

napis verejnou ip, kde ti jede server :-)

Re:TCP bezpečnost
« Odpověď #7 kdy: 04. 02. 2021, 12:39:44 »
První věc je, jak klient zjistí tu IP adresu. Možná klient ve skutečnosti komunikuje s IP adresou útočníka a teprve útočník komunikuje s cílovým serverem. Pak je myslím způsob útoku jasný – veškerá komunikace jde přímo přes útočníka, tedy si s ní může dělat, co chce.

Pokud má klient správnou IP adresu, pořád může dojít k napadení komunikace kdekoli po cestě. Útočník sice může fyzicky sedět kdekoli, ale může ovládat nějaké zařízení po cestě. A na tomto zařízení opět bude schopen odklonit komunikaci k sobě nebo ji upravit.

Protože neřešíte čtení, ale jen poslání dat, má útočník ještě další, mnohem jednodušší možnost. Na úrovni sítě vlastně žádné TCP/IP spojení neexistuje – jsou to jen pakety, které mají stejnou dvojici IP adres a portů. A pak se podle dat uvnitř paketu (pořadové číslo) určí, kam přesně uvnitř spojení patří data, která paket přenáší. Takže pokud útočník ví tu čtveřici, může poslat paket, který cílový počítač vyhodnotí tak, že patří do spojení. Tři údaje útočník obvykle zná (zdrojovou a cílovou IP adresu a cílový port – ten obvykle odpovídá službě). Zbývá tedy zdrojový port – obvykle je snaha volit ho náhodně, ale moc možností není. Útočník může zkusit hádat, může různými technikami získávat další informace, které mu umožní okruh možných čísel portů zúžit. Takže předpokládejme, že útočník umí poslat paket, který cílový systém vyhodnotí tak, že patří do daného spojení. Akorát bude řešit, kam přesně patří. Pořadová čísla paketů nezačínají od nuly nebo jedničky, ale opět se volí náhodně. Takže když to bude útočník jen tak zkoušet, pošle data, který cílový systém vyhodnotí tak, že patří někam před začátek spojení (což je nesmysl, takže paket zahodí), nebo někam daleko za místo, kde je teď (takže paket nejspíš také zahodí). Ale opět – pořadové číslo je určené pro detekci chyb sítě, není dostatečně robustní na to, aby dokázalo zabezpečit bezpečnost. Opět útočník může zkoušet různé techniky, jak zjistit, kde asi se ta aktuální komunikace pohybuje. No a pokud útočník může komunikaci odposlouchávat, má to triviální – čtveřici IP adresy a porty si prstě odposlechne, stejně jako pořadová čísla paketů.

Ve výsledku tedy útočník pošle paket, který má identifikační údaje úplně stejné, jako by ho odesílal server (nebo klient). Proti strana nemá jak poznat, že ten paket odeslal někdo jiný. Takže data zpracuje, pro něj jsou to data, která normálně přišla po TCP/IP spojení. Takže pokud by váš protokol umožňoval třeba ze serveru poslat klientovi příkaz k vypnutí, klient ten příkaz normálně přijme a vypne se. Pokud ten klient nebude mít nějakou ochranu před DoS útoky, nemusí útočník ani zjišťovat číslo portu a přesné sekvenční číslo, stačí mu znát ho přibližně. Prostě těch paketů odešle hodně, se všemi možnými hodnotami. Většinu cíl zahodí jako nesmyslné, ale ten jeden správný paket se ujme.

Re:TCP bezpečnost
« Odpověď #8 kdy: 04. 02. 2021, 13:29:26 »
Dam komukoliv 5000Kč když to dokáže nabourat...má někdo zájem?

napis verejnou ip, kde ti jede server :-)

No pokud bys o to měl skutečně zájem, o víkendu si nějakej pronajmu a rozjedu na něm ten systém. A myslím to naprosto seriózně, protože mě opravdu zajímá jestli to lze takto jednoduše. Jsem přesvědčen, že to nedokážeš. Máš nějakej tip na poskytovatele nějakých virtuálních serverů, který by byl vhodný?

Re:TCP bezpečnost
« Odpověď #9 kdy: 04. 02. 2021, 13:37:01 »
Díky uživateli Filip Jirsák za komentář. Tomuto asi rozumím, ale jaká je reálná šance, že to někdo dokáže? Myslím tím, jestli toto dokáže 9 z deseti hackerů, který se o to pokusí, protože to je tak strašně jednoduché nebo to dokáže 1 z tisíce, protože má zrovna přístup k nějaké páteřní síti a ví co má hledat. Já mám např. přístup jak ke klientovy tak k serveru a vím jak celej princip pracuje. Znamená to tedy, že mi stačí jen udělat kroky 1..2...3, zmačknout enter a data, která systém poškodí jsou odeslaná?

_Jenda

  • *****
  • 606
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:TCP bezpečnost
« Odpověď #10 kdy: 04. 02. 2021, 13:42:16 »
Autorizaci klienta chci teď po novu řešit pomocí AES a předpokládám, že SERVER i CLIENT při navazování spojení pozná zda je to fejk nebo ne. Pro mě je největší otázkou co se bude po tom co je spojení navázané.

Z tohoto mi přijde, že se snažíš implementovat si protokol pro šifrování a autentizaci „na koleně“, což vzhledem k tomu, jak se ptáš na základy typu únos TCP spojení a MITM, nedopadne dobře. Kdybys použil nějaký normální standardní protokol (třeba TLS) nebo o tom něco věděl (no offense), tak bys to samozřejmě udělal tak, že je šifrovaná a podepisovaná celá komunikace. I ten AES a spol. k tomu lze samozřejmě použít - buď si vybereš mód, který je autentizovaný by default (AEAD, například GCM), nebo do komunikace vkládáš HMAC podpisy zašifrovaných bloků. Dále se bojím, že to naprogramuješ tak, že bude možný replay útok, nebo tam nasekáš chyby typu neautentizovaný CBC nebo counter mód, takže útočník bude moct přehazovat jednotlivé bity ve zprávě, transplantovat bloky atd.

Jediné co mě napadá je že existuje hackerský TCP server, který má stejnou IP adresu jako můj a tak se client připojí k němu. Jak by to ale mohl dokázat, když jsou všichni z jiného města? V rámci jedné budovy client-hacker možná, ale jiná síť...
Tak jednak řešení, které funguje jen proti útočníkům z jiného města, ale nikoli proti útočníkům ze stejného města, je dost k ničemu. A jednak: v rámci sítě (ARP spoofing) a po cestě u ISP (jeho děravá infrastruktura; když jsem sám ISP - různé veřejné wifi) na obou stranách. Dále třeba zmíněný DNS poisoning. A pak byly i nějaké další způsoby, co zneužívaly různé implementační problémy se sekvenčními čísly atd., ale ty jsem nikdy podrobně nezkoumal a bylo složitější je provést.

No pokud bys o to měl skutečně zájem, o víkendu si nějakej pronajmu a rozjedu na něm ten systém. A myslím to naprosto seriózně, protože mě opravdu zajímá jestli to lze takto jednoduše. Jsem přesvědčen, že to nedokážeš. Máš nějakej tip na poskytovatele nějakých virtuálních serverů, který by byl vhodný?
Když sem dáš dokumentaci protokolu (rozhodně to za 5kKč nikdo nebude reverzovat) a ukázkovou implementaci klienta (abychom to nemuseli implementovat), tak se ti na to možná podívám.

Tomuto asi rozumím, ale jaká je reálná šance, že to někdo dokáže? Myslím tím, jestli toto dokáže 9 z deseti hackerů, který se o to pokusí, protože to je tak strašně jednoduché nebo to dokáže 1 z tisíce, protože má zrovna přístup k nějaké páteřní síti a ví co má hledat.
Opět, řešení, která se spoléhají na tyhle věci, jsou rozbitá.

Re:TCP bezpečnost
« Odpověď #11 kdy: 04. 02. 2021, 13:54:18 »
No pokud bys o to měl skutečně zájem, o víkendu si nějakej pronajmu a rozjedu na něm ten systém. A myslím to naprosto seriózně, protože mě opravdu zajímá jestli to lze takto jednoduše. Jsem přesvědčen, že to nedokážeš. Máš nějakej tip na poskytovatele nějakých virtuálních serverů, který by byl vhodný?

Když sem dáš dokumentaci protokolu (rozhodně to za 5kKč nikdo nebude reverzovat) a ukázkovou implementaci klienta (abychom to nemuseli implementovat), tak se ti na to možná podívám.

----
protokol zdokumentovany byt nemusi, pokud mam k dispozici klienta i server, abych si mohl cist sitovou komunikaci, tak to je lehke.

mi jen pristup k ip serveru, tak je to slozite, protoze se musi zkouset, neni pristup ke klientu ani k existujici komunikaci.

Re:TCP bezpečnost
« Odpověď #12 kdy: 04. 02. 2021, 14:00:07 »
Tomuto asi rozumím, ale jaká je reálná šance, že to někdo dokáže? Myslím tím, jestli toto dokáže 9 z deseti hackerů, který se o to pokusí, protože to je tak strašně jednoduché nebo to dokáže 1 z tisíce, protože má zrovna přístup k nějaké páteřní síti a ví co má hledat. Já mám např. přístup jak ke klientovy tak k serveru a vím jak celej princip pracuje. Znamená to tedy, že mi stačí jen udělat kroky 1..2...3, zmačknout enter a data, která systém poškodí jsou odeslaná?

Hrozby se většinou kombinují. Např. botnet se šíří a rozšíří se nepozorovaně do různých sítí. Teprve na pokyn začne dělat činnost č. 2, tedy samotné sledování nebo zásah do dat. Pokud se takové práce ujme botnet, může Vám být srdečně jedno, jestli to umí jeden z milionu nebo deset ze sta.

Jinými slovy, i kdyby se Vám dnes zdálo, že není velká pravděpodobnost, že by Vás to ohrožovalo, tak zítra můžete být vyveden z omylu.

Pokud se v příkladech píše "někdo na trase", neznamená to geeka číhajícího u klávesnice, ale obecně jakékolovi zařízení - např. jiný napadený počítač, router, ...

Dále pak musíte počítat s riziky od konkurence nebo od (bývalých) zaměstnanců. Ti mohou škodit cíleně.

U bezpečnosti se tedy moc neřeší pravděpodobnost, ale spíš jak moc by Vás to bolelo, kdyby to nastalo.

_Jenda

  • *****
  • 606
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:TCP bezpečnost
« Odpověď #13 kdy: 04. 02. 2021, 14:11:58 »
protokol zdokumentovany byt nemusi, pokud mam k dispozici klienta i server, abych si mohl cist sitovou komunikaci, tak to je lehke.
„Lehké“ je relativní, samozřejmě je možné že ten protokol bude jednoduchý a udělat to bude na pět minut, ale taky tam může být něco nezjevného a reverzování bude chvíli trvat. A protože cílem je hodnotit bezpečnost protokolu, tak je blbost pálit čas na implementaci a řešení toho proč to nefunguje. Navíc s tímhle rozpočtem, a když to vynásobíš odhadem že se to celé podaří (jak technicky, tak že uživatel hazardrok nezdrhne bez zaplacení, případně si nevymyslí ze své neznalosti nějaký pseudodůvod proč se tvůj útok nepočítá, a taky že tě tu někdo nepředběhne - jak vidíme tak už jsme dva co to jako chtějí implementovat) tak 50% tak to celé musíš stihnout za několik málo hodin aby to bylo rentabilní. Jinak z toho co popsal mi přijde že to bude deset řádků Pythonu (necháš projít ten úvodní handshake a pak už si komunikaci upravuješ jak je libo) a tak bych do toho šel :), ale necháme se překvapit.

Re:TCP bezpečnost
« Odpověď #14 kdy: 04. 02. 2021, 14:27:25 »
Citace
Z tohoto mi přijde, že se snažíš implementovat si protokol pro šifrování a autentizaci „na koleně“, což vzhledem k tomu, jak se ptáš na základy typu únos TCP spojení a MITM, nedopadne dobře. Kdybys použil nějaký normální standardní protokol (třeba TLS) nebo o tom něco věděl (no offense), tak bys to samozřejmě udělal tak, že je šifrovaná a podepisovaná celá komunikace. I ten AES a spol. k tomu lze samozřejmě použít - buď si vybereš mód, který je autentizovaný by default (AEAD, například GCM), nebo do komunikace vkládáš HMAC podpisy zašifrovaných bloků. Dále se bojím, že to naprogramuješ tak, že bude možný replay útok, nebo tam nasekáš chyby typu neautentizovaný CBC nebo counter mód, takže útočník bude moct přehazovat jednotlivé bity ve zprávě, transplantovat bloky atd.

No úplně na koleně to být nemělo. Chtěl jsem použít https://github.com/kokke/tiny-AES-c a ten algoritmus CTR s AES-256. Můj návrh byl ten, že bude pevně daný klíč, který budou znát jen client a server. Pro každé zašifrování se vygeneruje inicializační vektor a ten se pošle spolu s daty (nešifrovaně). Pokud to správně chápu a bude pro každou šifru jiný vektor, který bude generován s co největší náhodností je to neprůstřelné. Současně toto by mělo být jen kvůli ověření pravosti serveru resp. clienta při navazování spojení. Chci si s tou myšlenkou ještě po večerech hrát, protože se mi to docela líbí. Nebo jí zavrhnu, protože najdu slabinu.

Je to celé naprd, protože znám systém za statisíce a stovky zařízení, které jsou takto blbě navržena a už roky běží (né mojí vinou). Změnit šifrování na TLS není už realizovatelné. A v minulosti s tím pracovalo desítky IT odborníků a ani jeden jediný nikdy funkci neoponoval ani neupozornil na možná rizika...zde je vidět jak naši IT odborníci pracujou a za co berou platy (nechci se nikoho dotknout, to je bohužel tvrdá realita). Také to nelze jednoduše stopnou a říci uděláme to jinak.