Vlákno názorů k článku Přechod Wikipedie na HTTPS pomohl v boji s cenzurou od hlupák - Hlupákův hloupý a polopatický dotaz k tématu všeobecně....

  • Článek je starý, nové názory již nelze přidávat.
  • 31. 5. 2017 8:07

    hlupák (neregistrovaný)

    Hlupákův hloupý a polopatický dotaz k tématu všeobecně. Příklad. Z bookmarku rozkliknu nebo do adresního řádku zadám
    https://cs.wikipedia.org/wiki/Linux#Historie
    Předpokládejme, že vše funguje, jak fungovat má. Žádný exploit, žádný downgrade šifrování a co všechno je ještě možné. Prostě žádné prolamování zašifrované komunikace se v našem ideálním případě dít nebude. Co potom vidí můj poskytovatel připojení? Co vidí každý další, přes koho datový proud prochází? Kromě serveru wikipedia.org, na ten se už neptám. Nejspíš chybně jsem se dosud domníval, že celá URL je i při použití šifrování čitelná pro ISP a všechny další cestou.

    Kdo vidí, že přistupuji na wikipedia.org? (předpokládám všichni)
    Kdo vidí doménu třetího řádu?
    Kdo vidí, že si na wikipedii čtu o Linuxu?
    Kdo vidí, že si na wikipedii v článku o Linuxu čtu kapitolu Historie?

    A obecněji.
    https://www.example.com/search.php?searchterm=Linux&mode=advanced&author=JohnDoe
    Všechny uzly na cestě požadavku vidí (předpokládám), že jdu na example.com. Kdo kromě vlastního example.com vidí, že jsem hledal Linux, použil pokročilé vyhledávání a jako parametr autor zadal JohnDoe?

  • 31. 5. 2017 8:20

    j (neregistrovaný)

    1) ze lezes na wiki videj vsichni cestou
    2) na jakou konkretni domenu videj taky vsichni cestou - teda pokud si to nevypnes, coz prozmenu povede k tomu, ze se na 80% webu nepodivas (a kdyby kazda domena mela svoji IP, tak ses v bodu 1)
    3) 4) jedno i druhy vidi vsichni kteri maji pristup k infrastrukture wiki, pripadne k ty tvoji.

    Muzes do cesty zaradit trebas tor, cimz (pokud vse funguje jak ma) pretrhnes retezec => tvuj ISP vidi ze komunikujes s nejakym tor nodem, ale nevi ze na wiki, enpoint vidi ze nekdo leze na wiki, ale nevi kdo.

    Ale pokud mam zaroven pristup k wiki a zaroven ke tvy siti, tak sem schopnej tor eliminovat (a to i kdyz vse funguje).

  • 31. 5. 2017 9:15

    jelen (neregistrovaný)

    Pokial viem tak cez https by malo byt viditelne iba to ze lezes na https://cs.wikipedia.org
    a ostatne sa posle az po handshake teda uz zasifrovane.

    TL;DR
    http://robertheaton.com/2014/03/27/how-does-https-actually-work/

  • 31. 5. 2017 10:09

    Adam Kalisz
    Stříbrný podporovatel

    Zkuste windump nebo tcpdump a ověřte si to na vlastní kůži. Wireshark může být ještě lepší. Obecně ale IP resp. DNS komunikaci ke cs.wikipedia.org. Konkrétní článek/ kapitolu ISP nevidí, Vy a wiki vidí z principu vše.

  • 31. 5. 2017 10:19

    Ondřej Caletka
    Zlatý podporovatel

    Je bych upřesnil, že ani provozovatel serveru nevidí tu část URL za mřížkou, tedy #Historie. Ta se pomocí HTTP/S nikam nepřenáší a provozovatel serveru jí může zjistit jedině nějakým postranním kanálem, třeba JavaScriptem, který mu jí vyzradí.

  • 31. 5. 2017 13:47

    Filip Jirsák
    Stříbrný podporovatel

    Poskytovatel připojení vidí, že překládáte DNS název cs.wikipedia.org (ale pak si ten přeložený název bude váš počítač držet nějakou dobu v cache). Může to také vidět někdo jiný, podle toho, jaké DNS servery používáte.

    Dál už se komunikuje jen s IP adresou, kterou váš počítač získal tím překladem (ale zrovna na IP adrese Wikipedii asi žádná jiná služba neběží). Tu IP adresu zase vidí váš ISP a všichni ISP po cestě až k serverům Wikipedie.

    Pokud váš prohlížeč podporuje SNI (podporují to všechny moderní prohlížeče), je pak to doménové jméno cs.wikipedia.org vidět i při navazování šifrované komunikace (prohlížeč tím říká serveru, jaký mu má poslat serverový certifikát – pro případ, že na serveru běží víc webů a je nutné vybrat odpovídající certifikát). Tohle opět může vidět váš ISP a všichni po cestě.

    Část za lomítkem už se pak posílá v šifrované části komunikace, takže tu už se dozví jen cílový server. Část za křížkem # prohlížeč vůbec nikam neposílá, ta zůstává jen v prohlížeči.

    Takže že přistupujete na cs.wikipedia.org vědí „všichni“, že čtete o Linuxu nebo hledáte Linux v pokročilém vyhledávání ví jen provozovatel serveru, a že čtete kapitolu Historie ví jenom váš prohlížeč.

    Jinak webové prohlížeče ještě předávají adresu zdrojové stránky i cílové stránce při kliknutí na odkaz, a také při stahování všech stylů, skriptů a obrázků patřících ke stránce (pokud to nemáte vypnuté, a pokud zdrojová stránka není na HTTPS a cílová na HTTP). Takže pokud to v prohlížeči nezakážete a kliknete na té stránce na Wikipedii na nějaký odkaz, provozovatel cílového serveru se dozví, že jste přišel právě z české Wikipedie ze stránky o Linuxu (o kapitole Historie se nedozví). Ale to už nesouvisí se šifrováním nýbrž s dohodou o tom, jak se bude používat protokol HTTP.

  • 1. 6. 2017 23:28

    Vít Šesták

    Jen malé upřesnění:

    „Část za křížkem # prohlížeč vůbec nikam neposílá, ta zůstává jen v prohlížeči.“ – no, standardně se neposílá. Ale JS ji může přečíst, zpracovat, a třeba i poslat. Některé AJAXové stránky toho využívají.

  • 2. 6. 2017 8:52

    Filip Jirsák
    Stříbrný podporovatel

    To už je ale něco jiného. Aplikace v prohlížeči se vás může zeptat na jméno, heslo, číslo platební karty, může zjistit celou aktuální webovou adresu, když jí dáte oprávnění, může vás vyfotit – a to všechno pak může poslat přes HTTP na úplně jiný server. Ale to už je vlastnost té konkrétní webové aplikace, ne vlastnost samotného webového prohlížeče.

  • 2. 6. 2017 17:41

    j (neregistrovaný)

    Tovizejo jirsak, a ten js bezi ve vzduchu a ty data si nacte telepaticky ... aha, on mu to browser .. UMOZNI ...aniz by se na to uzivatele ptal.

  • 2. 6. 2017 22:03

    Filip Jirsák
    Stříbrný podporovatel

    Ano, webový prohlížeč umožňuje prohlížeč web – to je vskutku nečekané. Na co by se prohlížeč měl uživatele ptát? Na to, jestli smí webová aplikace pracovat s daty, která jí uživatel zadal? „Napsal jste písmeno 'a'. Opravdu mám zadat písmeno 'a' do formulářového pole?“ „Pohnul jste myší. Opravdu chcete pohnout kurzorem myši?“ „Klikl jste na odkaz. Opravdu chcete navštívit odkazovanou stránku?“ Nebuďte troškař, dotáhněte to dál. Uživatel by měl písemně potvrdit každou instrukci procesoru před tím, než se provede.

  • 3. 6. 2017 10:07

    Vít Šesták

    Myslím, že nejsme ve při. Zmiňujete ale, co všechno prohlížeč komu dovolí (vč. refereru) a toto mi přišlo na podobné úrovni. Dotaz na číslo karty mi přijde až ó level dál, a to na vrstvě uživatele.

  • 3. 6. 2017 10:37

    Filip Jirsák
    Stříbrný podporovatel

    Odeslání referreru je ale standardní akce, kterou dělá sám prohlížeč na všech stránkách (pokud není prohlížeč speciálně upraven). Odeslání kotvy přes AJAX je to samé, jako odeslání čísla karty – uživatel musí jít na stránku, která danou věc dělá (odesílá formulář nebo kotvu), a musí provést nějakou akci, kterou zadá ty údaje (napíše číslo karty do formulářového políčka, klikne na odkaz s kotvou).

    Původní dotaz byl na to, co dělá obecně webový prohlížeč, třeba na Wikipedii. Máte pravdu v tom, že z hlediska bezpečnosti je často podstatnější to, co prohlížeč umožňuje dělat webovým stránkám, než to, co dělá samotný prohlížeč. Uživatel by měl ale počítat s tím, že cokoli zadá do webové aplikace, s tím si ta aplikace může dělat, co chce – ať to zadá jako text do formulářového pole, nebo to zadá jako kotvu kliknutím na odkaz, nebo to „zadá“ implicitně tím, že nad stránkou rejdí myší.

  • 3. 6. 2017 13:05

    Vít Šesták

    Asi se shodneme – z hlediska bezpečnosti není až tak podstatný defaultní stav (posílá se referer*, neposílá se location hash), jako spíš to, kdo to může ovlivnit (odesílání refereru může ovlivnit stránka, která stejně zná svoji URL; odeslání location.hash může ovlivnit server, který k tomu sám o sobě nemusí mít přístup). Plus je samozřejmě podstatné riziko opomenutí, ale to jsme někde jinde.

    Nepovažuju to za zásadní problém, jen v kontextu vysvětlování toho, kdo má k čemu přístup, mi to přišlo trošku zavádějící.

    *) Pro úplnost: ani toto neplatí úplně vždy, typicky při HTTPS –> HTTP

  • 3. 6. 2017 15:18

    Filip Jirsák
    Stříbrný podporovatel

    Nerozumím tomu, jaký je podle vás rozdíl mezi „serverem“ a „stránkou“. Referrer posílá prohlížeč automaticky, pokud tomu chce nějaký web zabránit, musí všechny externí odkazy přesměrovat přes server, který je anonymizuje. Hash naopak prohlížeč nikam neposílá, a pokud jej chce webová aplikace využít, musí ho naopak pomocí JavaScriptu aktivně přečíst.

    Jako příklad byla v úvodním dotazu uvedena Wikipedie, a tam žádný skript odesílající hash není. Pokud se budeme bavit o tom, co mohou udělat skripty, tak skript má přístup k celé adrese ak celému obsahu stránky. Takže se někam můžu připojit přes HTTPS bez SNI, ISP uvidí jen DNS překlad a pak šifrovanou komunikaci s IP adresou, ale neuvidí ani doménový název v té komunikaci, ani adresu, ani obsah stránky. A pak se na té stránce spustí skript, který celou adresu i obsah stránky někam pošle po HTTP. A ISP uvidí vše, co před ním předtím bylo díky HTTPS skryté. Možné to samozřejmě je, ale myslím, že je to něco jiného, než na co se ptal ten původní dotaz. Takže pořád nevím, v čem vidíte ten rozdíl, zda skript spuštěný na stránce má přístup k hashi v URL, nebo zda má stránka přístup k vyplněnému formuláři, cookies, rozměrům stránky, událostem klávesnice a myši a spoustě dalších věcí…

  • 3. 6. 2017 16:34

    Vít Šesták

    > Nerozumím tomu, jaký je podle vás rozdíl mezi „serverem“ a „stránkou“.

    Server posílá prohlížeči stránku.

    > Referrer posílá prohlížeč automaticky, pokud tomu chce nějaký web zabránit, musí všechny externí odkazy přesměrovat přes server, který je anonymizuje.

    Ano (a lze to i skrze nějaký meta tag), podstatné je, že tady o tom rozhoduje držitel citlivé informace – server, který URL tak jako tak zná. Cílovému serveru pak referer nemusí být vůbec dostupný a ani nemusí mít možnost se k němu dostat.

    > Hash naopak prohlížeč nikam neposílá, a pokud jej chce webová aplikace využít, musí ho naopak pomocí JavaScriptu aktivně přečíst.

    Z hlediska bezpečnosti není moc podstatné, že se tak nestane defaultně. Podstatné je, že server má možnost location.hash zjistit a standardně (se zapnutým JS atd.) tomu nezabráníme.

    > neuvidí ani doménový název v té komunikaci

    Uvidí minimálně certifikát (i kdyby neviděl DNS), a z něj lze doménové jméno obvykle vyčíst nebo odhadnout. Ano, wildcard a multidomain certifikáty to kompolikují.

    > A pak se na té stránce spustí skript, který celou adresu i obsah stránky někam pošle po HTTP.

    To už je trošku jiný druh hrozby – někdo, komu jsem tu komunikaci vědomě (přímo či nepřímo) svěřil, ji nepohlídal dostatečně. Do toho spadá i leaknutý serverový klíč.

    Pokud ale budeme předpokládat, že location.hash se na server neposílá, může nás překvapit, že se k tomu může server dostat. Tzn. někdo, komu jsme informaci svěřit nechtěli, se ji dozví přímo od nás.

  • 3. 6. 2017 17:26

    Filip Jirsák
    Stříbrný podporovatel

    O posílání referreru ale nerozhoduje server, posílá ho prohlížeč. Úplně stejně, jako může prohlížeč někam odeslat kotvu, může odeslat i zbytek URL (tedy referrer).Server sám o sobě nemá možnost kotvu zjistit. Server má možnost poslat v rámci webové stránky do prohlížeče skript, který může zjistit spoustu informací, a může je poslat zpět serveru, nebo kamkoli jinam – to už ale není vlastností komunikace nebo prohlížeče, ale toho webu, který uživatel prohlíží. Server takhle dokonce může poslat spustitelný kód, který po spuštění uživatelem zformátuje disk nebo zašifruje jeho soubory. Ale to nijak nesouvisí s tím, co je vidět v rámci HTTPS komunikace prohlížeče se serverem.

    Pokud ale budeme předpokládat, že location.hash se na server neposílá, může nás překvapit, že se k tomu může server dostat. Tzn. někdo, komu jsme informaci svěřit nechtěli, se ji dozví přímo od nás.
    To je ale chybný předpoklad, že můžu poskytnout webové stránce nějaké informace, aniž by měl možnost získat je server. Ne, webový server má nad stránkou plnou kontrolu, a co té webové stránce svěřím, to může znát i server. Což je třeba důvod, proč správná implementace přihlašování na webu by byla taková, že heslo by se zadávalo do prohlížeče (ne webové stránky) a už prohlížeč by z něj spočítal jednorázový hash, který by teprve předal webové stránce. Jakmile dnes zadám heslo v otevřeném tvaru do webové stránky, musím počítat s tím, že to heslo v otevřeném tvaru zná i server.

  • 3. 6. 2017 17:52

    Vít Šesták

    Na úrovni protokolu HTTP(S) není snad ani kotva definovaná (snad jen v URI scheme), takže zde to IMHO nemá smysl řešit.

    Na úrovni prohlížeče naopak dává smysl řešit, co umějí skripty.

    > To je ale chybný předpoklad, že můžu poskytnout webové stránce nějaké informace, aniž by měl možnost získat je server.

    Běžně ano, ve speciálních případech je to OK: Mohu vypnout JS nebo vyřešit všechny potenciální odchozí kanály (síť, CPU cache, zvuk, …).

    Co se týče hesel, celkem souhlas.

  • 3. 6. 2017 18:24

    Filip Jirsák
    Stříbrný podporovatel

    Na úrovni prohlížeče naopak dává smysl řešit, co umějí skripty.
    To ano, ale je to už zcela mimo původní dotaz. A získání kotvy je podle mne prkotina proti tomu, co všechno webovým stránkám prozrazujeme.

  • 3. 6. 2017 18:34

    Vít Šesták

    Původní dotaz byl v kontextu prohlížeče. Je fakt, že zmiňoval, že ho nezajímá, co se dozví koncový server. Ale když už to tu bylo nakousnuto, upřesnil jsem to.