Jaké nastavení URL netuším, to jste psal vy.
Vy jste použil sdílení s uživateli Google Calendar. Tam se ovšem k přístupu nepoužívá bezpečnostní token, ale přihlašovací údaje k Google účtu. Vedle toho ale ještě existuje sdílení pomocí bezpečnostního tokenu, Google to v české verzi nazývá "Soukromá adresa".
Sláva, aspoň u toho Dropboxu jste to konečně uznal. Možnost, jak veřejné sdílení obejít, je velice jednoduchá -- nezveřejňovat danou adresu, ale poskytnout ji jen tomu, s kým chcete složku sdílet.
Jaké nastavení URL? Co je to za nesmysl? Čtete vůbec, co píšu, nebo snažíte se to aspoň pochopit? Nastavení se týká sdílení. Tady máte moji veřejnou adresu kalendáře: https://accounts.google.com/ServiceLogin?service=cl&passive=1209600&continue=https://www.google.com/calendar/embed?src%3Dvkt7cevdagfh0kt37ev887fhuo@group.calendar.google.com%26ctz%3DEurope/Prague&followup=https://www.google.com/calendar/embed?src%3Dvkt7cevdagfh0kt37ev887fhuo@group.calendar.google.com%26ctz%3DEurope/Prague&scc=1&authuser=0
Řekněte mi, co tam mám třeba na pátek. Podotýkám, že sdílení mám nastavené na určité osoby.
U Dropboxu je to tak, jak píšete, tam jsou pouze 2 možnosti: sdílet, nebo nesdílet, není žádná jemnější možnost nastavení. Naštěstí i tady by byla možnost, jak veřejné sdílení obejít, pokud by to někdo takto chtěl, ale to už je na jinou debatu.
Zase špatně. Jediný správný odstavec je ta citace, kterou jste ovšem nepochopil. Nezáleží na žádném nastavení adresy, ale prostě na tom, komu tu adresu dáte. Když ji zveřejníte, sdílíte kalendář se všemi uživateli, když ji dáte konkrétním lidem, sdílíte kalendář s konkrétními lidmi. Na Dropboxu je to stejné. Přes adresu složky (obsahující bezpečnostní token) v Dropboxu se k souborům dostane bez přihlášení, dostane se tam i ten, kdo nemá na Dropboxu vůbec žádný účet, takže se ani nemůže nijak přihlásit. Kdybyste si kliknul na odkaz na složku v Dropboxu, který jsem dával o pár komentářů výš, tak byste to zjistil také. To samé s kalendářem. Ale zřejmě máte fóbii z klikání na odkazy, tak tady radši pořád dokola plácáte nesmysly.
A sám to velmi dobře tušíte. Protože jinak byste si ve svém účtu na Dropboxu založil nějakou složku, nahrál tam nějaké své soubory, kliknul na „Share link“ té složky a získaný odkaz pro sdílení zde zveřejnil. Tím byste dokázal, že sám věříte tomu, co píšete. Jenže vy tomu sám nevěříte, takže nic takového neuděláte. Do té doby, než na to budete mít odvahu, můžeme tuto diskusi přerušit.
Z té Vámi odkazované stránky:
Adresa kalendáře představuje veřejnou verzi kalendáře, kterou můžete sdílet veřejně se všemi uživateli nebo s konkrétními lidmi.
Takže není pravda, že si kalendář může zobrazit každý, záleží na nastavení. Na to jsem upozorňoval i o pár příspěvků výše, kde jsem psal o veřejném sdílení. A nic bych nedal za to, že na Dropboxu to bude podobné.
Do Dropboxu nemusím být přihlášen? A jak se dostanu ke svým souborům? :-D
Nesmysly plácáte Vy a není to zdaleka poprvé. Odkážete mě na stránku s nápovědou a sám si ji nejste schopen ani pořádně přečíst.
Nezáleží na tom, jestli je v kalendáři nastaveno veřejné sdílení. Veřejné sdílení jenom určuje, zda je kalendář dostupný ve vyhledávání kalendářů. Jinak může kalendář zobrazit každý, kdo zná jeho adresu.
S Dropboxem jste si to mohl vyzkoušet na výše uvedeném odkazu. Ani nepotřebujete dva prohlížeče, protože jste Dropbox v životě neviděl, tak v něm nemůžete být přihlášen. Stačilo na odkaz kliknout a uviděl byste obrázkovou galerii, kterou Dropbox automaticky generuje z obrázkových souborů.
Ano, každý si může ověřit, jak to je, akorát pro vás je i to jedno kliknutí velká námaha, tak tu radši plácáte nesmysly. Taky si to každý může přečíst v nápovědě. Zde k Dropboxu: https://www.dropbox.com/help/167/en a zde ke Google Calendar: http://support.google.com/calendar/bin/answer.py?hl=cs&answer=175256&rd=1 -- otázky "Jaký je rozdíl mezi adresami Soukromá adresa a Adresa kalendáře a jak je mohu použít?" a "Jak mohou můj kalendář zobrazit přátelé, kteří nemají službu Kalendář Google?"
To nemá smysl. On je přesvědčený o své pravdě a hluchý ke všem argumentům. Doporučuji přečíst diskusi zde: http://www.lupa.cz/clanky/prichazi-dalsi-bic-na-piraty-copyright-alert-system-aneb-sestkrat-a-dost/nazory/ o svobodě slova, je to opravdu výživné čtení :-)
Koukám, že asi neumíte číst. Psal jsem jasně, že záleží na tom, jestli je kalendáři nastaveno veřejné sdílení. Pokud ne, žádným URL si ho bez přihlášení nezobrazíte. Taktéž jsem po Vás nechtěl, abyste se mnou něco sdílel, tak nevím, proč to píšete. A co se týče důkazu, to si můžete ověřit sám doma na dvou různých prohlížečích. Na jednom si zjistěte adresu pro sdílení a v druhém, kde nejste přihlášen, ji zkuste zobrazit. Schválně, co se stane.
Tímto diskusi končím, každý si může ověřit, jak to je.
Zaměnil jsem pořadí odkazů na kalendář a na Dropbox, omlouvám se.
S tím zveřejněním máte pravdu. Ale na druhou stranu se snad shodneme na tom, že pokud kromě uzavřeného okruhu osob tu informaci neví nikdo a nemůže ji nikde nalézt, je to informace privátní. Přičemž podle mne vůbec nezáleží na tom, zda se ta privátní informace skládá ze dvou částí -- jména a hesla, nebo zda je to jedna část -- bezpečnostní token.
Na Lupě neexistuje taková bezpečnostní díra, jakou si představujete. To je normální vlastnost OpenID protokolu -- někde se autentizujete, a následně jste z té autentizační stránky přesměrován zpět na stránku toho, kdo autentizaci vyžádal. Neexistuje tam žádný postranní kanál, všechny informace nutné k ověření se tedy musí předat v parametrech během toho přesměrování. Normálně tyhle údaje získá jen uživatelův prohlížeč a přesměrováním se dokončí přihlášení na původní stránku. Ale pokud je někdo zachytí (třeba kvůli nešifrovanému HTTP), může samozřejmě udělat úplně to samé, co by jinak udělal uživatelův prohlížeč. Cookies v tom nijak nepomohou, ty se posílají ve stejném požadavku jako ty ostatní údaje.
Replay útok je něco jiného, tam se jedná o zopakování stejných informací k nové akci (např. novému přihlášení). Já jsem ale psal o případu, kdy někdo ty autentizační informace získá a pošle je na Lupu dřív, než oprávněný uživatel. Pak bude oprávněný uživatel až druhý v pořadí a obrana proti replay útoku zastaví nanejvýš jeho.
Pravdu nemáte, mezi mým prohlížečem a serverem Lupa.cz neexistuje žádný nezávislý kanál, pomocí kterého by si mohly vyměnit nějaké další informace, a pokud se použije HTTP, neexistuje mezi nimi ani šifrované spojení. Ostatně je to úplně to samé, jako když se přihlašujete pomocí jména a hesla -- pokud někdo odchytí daný požadavek na server, přihlásí se pomocí něj místo vás. OpenID nijak neřeší (ani nemůže) ochranu přenášených informací, řeší jenom to, že se na Lupě můžete přihlásit pomocí přihlašovacích údajů třetí strany, ale Lupě ty přihlašovací údaje nedáte k dispozici. No a řeší se to právě přes ten bezpečnostní token -- Lupa si s OpenID poskytovatelem dohodne bezpečnostní token, vy se pak u OpenID poskytovatele přihlásíte třeba jménem a heslem a poskytovatel pak Lupě řekne, že onen bezpečnostní token je OK.
To není argument, to je jen informace o tom, jaký je celý váš komentář. Argumenty byly v předchozím komentáři, vy jste jen napsal, že je to jinak, ale žádný důkaz jste neuvedl. Každý, kdo má účet na Google Calendar nebo na Dropboxu, a každý, kdo zná nějaký link na sdílení z některé z těch služeb, si to může ověřit. Tak abyste nemusel psát nesmysly o věcech, o kterých nic nevíte, podělím se s vámi o link na sdílení jednoho kalendáře, u kterého mi nevadí, že se zveřejní (ostatně, nejsem jeho autorem a dostal jsem se k němu právě tak, že mi někdo poslal odkaz): https://www.google.com/calendar/embed?src=jnv1189bt6iik6en4590n25fa4%40group.calendar.google.com&ctz=Europe/Prague . Sdílet s vámi nic ze svého Dropboxu nehodlám, ale jiní některé složky ze svého Dropbox účtu zveřejňují: https://www.dropbox.com/sh/d15vvo4h7h88xx2/aLdsKAd0qZ
Když si přečtete znovu můj příspěvek, zjistíte, že jsem se ke kalendáři vůbec nevyjadřoval. Nicméně co se týče vašeho dotazu co máte dnes naplánováno, kdybyste si psal někde blog, tak fakt, že ho nebudu schopen nalézt, taky nedokazuje, že jsou informace na něm privátního charakteru. Veřejně dostupná informace automaticky neimplikuje, že jí všichni znají, nebo vědí kde jí najít.
O tom, že na Lupě existuje tak velká bezpečnostní díra v zabezpečení silně pochybuji, pokud Vám ten odkaz funguje, má Lupa pravděpodobně implementován záložní mechanismus, který provede reautentizaci, nebo má OpenID svázáno s Vaší cookie. Každopádně jste tímto neprokázál, že OpenID pracuje na principu, který zde obhajujete. Chování Consument serveru na závěrečné přesměrování od OpenID poskytovatele totiž není součástí OpenID specifikace a záleží na každém provozovateli, jak s informací naloží, jestli bude bránit replay útoku, nebo ne.
Mimochodem zkuste si to Vaše Lupa URL v nějakém čistém prohlížeči, kde jste ještě nebyl na Lupě přihlášen. Jsem přesvědčen, že to nebude fungovat. Jestli mám pravdu, zjistíte, že i na Lupě do procesu vstupuje ještě nějaká jiná informace, než Vámi prezentované URL.
Tvrdíte tedy, že existence URL s bezpečnostním tokenem k mému Google kalendáři znamená zveřejnění tohoto kalendáře? Dobře, co mám tedy v kalendáři na dnešek naplánováno?
Ten odkaz na přihlášení přes OpenID samozřejmě samotný fungovat bude (v případě OpenID omezenou dobu), jinak bych se s jeho pomocí nemohl přihlásit. Pokud by ho někdo v době jeho platnosti získal, normálně se mým účtem přihlásí.
S první a druhou adresou neudělám nic, pokud neznám Vaše jméno a heslo. S tou první dokonce ani pak ne. S Dropboxem nevím, ale počítám, že to bude stejné, tedy že se mi zobrazí login box. Pokud máte povoleno veřejné sdílení, pak je to ovšem o něčem jiném, to je ekvivalent zobrazení obsahu kdekoliv na webu. Klidně sem dám odkaz na share z Google drive, bude Vám na dvě věci, pokud neznáte moje heslo. Chápete, že ta URL bez přihlašovacích údajů je Vám na ho.no?
A tady je URL, pomocí kterého se můžete přihlásit na kurs síťové bezpečnosti:
Nic ve zlém, jen mi to nedalo ;-). Ne, vážně, tím posledním odkazem mi hrajete v podstatě přesně do karet, nejde totiž o žádnou autentizaci či přihlášení, ale prosté zveřejnění informací z Vašeho účtu. Tedy přesně jako v případě toho FIO API URL.
První odkaz opět nepředstavuje žádnou autentizaci (i když se o tom se mnou asi budete přít), zjevně jde o návratovou adresu z přesměrování po úspěšném přihlášení u OpenID poskytovatele. S autentizací vůči serveru Lupy to tedy samozřejmě má dost společného, je to ale jen poslední krok. Tzn. samotný fungovat nebude, navíc s ohledem na proměnnou "openid.response_nonce" bude fungovat právě jednou a nikdy více. Tedy pokud má Lupa ochranu proti replay attack, pokud ne, pak postrádá proměnná smysl.
Druhý odkaz mi nic neříká, takže se k němu nemohu vyjádřit.
Tak například na Lupa.cz se přes můj OpenID účet přihlásíte pomocí http://www.lupa.cz/prihlasit/?do=form-mojeid-return&openid.assoc_handle:{xxxxxx}{xxxxxx}{xxxxxx}&openid.response_nonce:2000-01-01T00:00:00xxxxxxxx . Adresa mého kalendáře na Google Calendar: https://www.google.com/calendar/feeds/xxxxxxxxxxxxxxxxxxxxxx%40group.calendar.google.com/private-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/basic Moje soubory na Dropboxu si můžete zobrazit zde: https://www.dropbox.com/sh/xxxxxxxxxxxxxxxxxxxxxxxxxxxx Druhou a třetí adresu dokáže ze svého účtu získat i žák ZŠ – v Dropboxu stačí najet myší na složku, kterou chce s někým sdílet, objeví se tlačítko „Share link“ a pod ním je schovaný odkaz s bezpečnostním tokenem. V Google Calendar je to o pár kliknutí víc – kliknete na menu u příslušného kalendáře, a dole pak máte několik tlačítek podle formátu kalendáře a způsobu sdílení.
Aha, takže vy zavoláte nějakou URL, kde pomocí GET předáte přihlašovací údaje, aby se ty pak následně POSTem předaly ještě někam dál... no to je úžasné.
Chcete mi říct, že když vezmu jakýkoliv z těch Vašich příkladů, tak si můžu nechat zobrazit nějaká data? U Google calendar se nemusím přihlásit? Dropbox mi jen tak zobrazí Vaše soubory? OAuth mi umožní se přihlásit bez jména a hesla do Vašeho Facebooku? :-D Ale no tak. Naproti tomu u FIO mi stačí platný token a dostanu se jednoduše k výpisu odkudkoliv, stačí připojení k netu, nic víc nepotřebuju.
Já nerozporuji, že se informace dá téměř vždy sloučit do jedné věty, v tomto případě URL, ještě lépe tím, že jí předáte třetí straně, která to volání ve výsledku udělá za Vás (jak uvádíte níže pomocí nickj.org). Rozdíl mezi tím o čem diskutuji já a Vy je asi takový, jako mezi situací, kdy by banka vydávala kreditní karty s přímo na kartě natištěným PIN kódem a situací, kdy si ho tam napíše uživatel. Pokud ten rozdíl nevidíte, je zbytečné tuto diskuzi dále rozvíjet, neboť se bavíme každý o něčem úplně jiném.
"Magie" frameworku nemá nahrazovat programátorovy nedostatečné znalosti, může ale účinně bránit úniku citlivých údajů v případě, kdy se změní počáteční podmínky například změnou konfigurace. A může tam být s pánem bohem třeba token. Když bude framework vědět, že ten token je autentizační údaj, může zablokovat jeho zaslání v otevřeném tvaru. Nebude ho vypisovat v logu, dávat do výjimek atd. To jsou ale základy bezpečnosti, nevymýšlíme tu nic nového.
V prvním odstavci jsou dva odkazy, druhý zavolá přihlašovací formulář Seznam.cz metodou POST a předá zadané přihlašovací jméno, heslo a doménu. Můžete se přesvědčit třeba ve FireBugu nebo vývojářské konzoli Google Chrome.
Žádný příklad uvedený v druhém odstavci není vázán žádnou další metodou autentizace, schválně jsem vybral takové příklady, kde se veškeré údaje předávají jen v URL metodou HTTP GET. V případě OpenID a OAuth je to při přesměrování na poskytovatele autentizační služby a zpět, v případě Dropboxu je to při volání API (stejně jako u té Fio Banky), v případě Google Calendar je to tehdy, když chcete dát přístup do kalendáře někomu dalšímu.
Já myslím, že v Google nepoužívají odporný termit „jedu v SSL“, když chtějí říci „uživatel má ve webovém prohlížeči zobrazenu stránku, která se načetla přes HTTPS“. Okecáváte tady akorát vy, protože jste se chtěl zeptat na jeden konkrétní detail, a místo toho jste se zeptal na obecnou věc. Já jsem vám na tu obecnou otázku správně odpověděl, přičemž ta odpověď zahrnovala i tu odpověď, kterou vy jste si představoval na vaši otázku.
Jinak způsobem „vymyslím si odpověď a k ní vymyslím otázku“ zkouší ne příliš chytří učitelé. Ti nejhloupější pak ani neuznají jinou správnou odpověď a vyžadují, aby se zkoušený trefil do té jejich.
Obávám se, že stavíš na domněnkách a klišé. Já mám jinou metodu. Bezpečnost* musí být prokazatelná/prověřená. (nápověda: citlivá data ti můžou prosakovat bez ohledu na to, v jakém políčku daného protokolu přišla – dokud prokazatelně nedokážeš, že nikde mj. neprosakují, nemůžeš o bezpečnosti systému říct vůbec nic)
*) tedy jde o to, zda jsi cracker, který jen tak zkouší, jestli se mi náhodou podaří do nějakých systémů vlámat (v tom případě je tvůj přístup dobrý), nebo jestli máš prověřit, zda je konkrétní systém *dostatečně* bezpečný. To jsou zcela jiné úlohy.
Pane kolego, tohle jsou tak základní věci, že je zbytečné je uvádět. Problém je, že on odvedl pozornost jinam. Jinak mohu ujistit, že tento dotaz v tom kontextu, jak se bavíme mu právě v Google položí a ještě maličko opepřený, protože s kolegou, který mi tam odešel tyhle otázky na pohovory řešíme. Takže pokud bude chtít na některou ze security pozic, musí to okamžitě vysypat z rukávu při prvním volání. Tyhle základní věci a okecávání dělají lidi, co jsou vývojáři, čtenáři lupy a ne lidi z bezpečnosti. Proto je snadno takhle poznáte. Neznamená to vůbec nic, ale vůbec o tom, že jsem zaměřený na web nebo jeden protokol. Znamená to to, že se probudím a vím okamžitě tyhle známé útoky, protože se o nich v komunitě mluví a mluvilo a jsem v obraze. Tím oddělím teoretika od praktika, co je do toho dění zapojen. Jednoduchý screeníng, tak se proberte.
Ten první odstavec jsem nepochopil... kde je tam nějaký POST?
Ohledně druhého odstavce: všechny příklady, které jste vyjmenoval, mají nějaké omezení. Buďto jsou ty tokeny jednorázové (resety hesla, potvrzení emailu), nebo jsou vázány nějakou další metodou autentifikace (např. cookies). Žádný z nich není vygenerovaný na určitou dobu platnosti s tím, že ho můžu bez problému využít opakovaně a ještě navíc klidně z různých PC.
Zdraví komik :-D
Já tady tvrdím něco úplně jiného.
Tak ještě jednou a naposledy. Co kdo dá do URL je věc dotyčného a nikdo mu v tom nezabrání. Já si klidně vytvořím URL https://login.szn.cz/loginProcess?username=test&password=test&domain=seznam.cz nebo http://get-to-post.nickj.org/?https://login.szn.cz/loginProcess?username=test&password=test&domain=seznam.cz a Seznam ani Google ani nikdo jiný mi v tom nezabrání. A máte tam HTTPS i POST. Pokud tohle URL nezveřejním, je to v pořádku a ničemu nevadí, že jsem ty údaje zapsal ve formě URL. Pokud ho zveřejním, je to moje chyba, nikoho jiného – a nezáleží na tom, že jsem ty údaje zveřejnil zrovna ve formě URL. Když je zveřejním ve formě "login je test a heslo taky test", je to úplně stejný problém.
Na závěr pro vás mám ještě několik příkladů služeb, kde se bezpečnostní token předávaný v URL používá, a zatím bezpečnost těch řešení nezpochybnil nikdo kromě jednoho diskutujícího a dvou komiků na Lupě. Tady jsou: Dropbox, Google Calendar, drtivá většina ověření e-mailu při registraci (e-shopy, diskusní fóra apod.), drtivá většina resetů hesla přes e-mail, často zasílání faktur nebo odkazů na objednávky e-shopů, protokol OpenID, protokol OAuth.
Člověče, Vy jste komik :-D Vy tady tvrdíte, že vlastně vždy existuje riziko vyzrazení přihlašovacích údajů, tak nemá smysl se tím zabývat a můžeme login a password rovnou plácnout do URL, vždyť ono to stejně může všechno "někde vyplavat". Proč se s.át s nějakým SSL a POSTem, že? Úplně pomíjíte míru rizika, proto jste schopen plácnout nesmyslné srovnání úniku dat svěřených dobrovolně Google s nějakým keyloggerem s rádiovou komunikací v klávesnici od Logitechu :-D
Vám nedochází, že bankovní výpis je nikoliv jedinou, ale jednou z mnoha informací, které jsou lidé ochotni svěřit úplně cizím firmám, že ty informace jsou centralizované a dostupné a obsahují údaje stovkách milionů lidí, je možné díky nim zjistit neuvěřitelná kvanta informací, jejichž množství se v blízké budoucnosti ještě znásobí. Vy (a miliony dalších) si svého soukromí nevážíte, jste ochoten jej dát všanc za větší pohodlí a imaginární bezpečí. Já vím, že je to dnes moderní, ale nesnažte se nás, kteří si svého soukromí vážíme přesvědčovat, že je to v pořádku a nic nehrozí.
Člověk, který ztratí soukromí, ztratí i důstojnost a svobodu. Je to i hlavní myšlenka Orwellova 1984.
Okecáváte tady akorát vy. Na zadání, jak jste jej široce a nepřesně napsal, jsem já napsal správnou odpověď. To, že vy píšete SSL ale myslíte HTTPS ve webovém prohlížeči, to je vaše chyba -- a teď se to akorát snažíte zamluvit. Jinak na to, aby vám řekl, že skript na stahování informací přes REST API se nebude obtěžovat s posíláním nějakého referreru, že ten skript nebude mít zabudovaný JavaScript interpreter, aby se tam mohl spustit kód Google Analytics, a že do odpovědi ve formátu JSON není možné vložit odkaz na spuštění skriptu Google Analytics (jak to znáte z HTML), nepotřebujete zkušeného hackera reálného s praxí, na to stačí kdokoli, kdo se aspoň trochu s nějakým API volaným přes HTTP potkal -- bude to vědět i kdejaký schopnější programátor, který dělá aspoň s AJAXem.
V Google doufám takovéhle otázky nedávají, doufám, že jsou tam odpovědných místech lidi, kteří aspoň trochu vědí, o čem mluví. Vy možná víte něco o bezpečnosti webových prohlížečů, ale když to ani nedokážete popsat a ani nedokážete použít správné termíny, je to dost katastrofa -- útočník dneska nebude útočit čistě jen na webový prohlížeč, ale prohlížeč bude jen jednou součástí. Takže ani náhodou nestačí jenom znát webový prohlížeč a neumět ani popsat, jestli myslíte síťovou komunikaci HTTPS kanálem nebo uživatelské sezení s prohlížečem, který hlavní stránku nahrál přes HTTPS.
Pane kolego, jen krátce. Tohle je otázka, co vám při úplně první pohovoru jako jedno z možných položí dokonce i v tom Google na bezpečáka, dokonce budou v tom Google ještě více záludnější a bude tam fígl, tohle bylo jednoduché. Okecávači se vymluví jako vy na jiné protokoly, že měli nejasné zadání a blablabla další výmluvy. Zadání jste měl jasné a dokonce jste si ho sám napsal a zadal. Že jste okecávač do diskuze, za to já vám nemůžu. Zkušených hackerů, reálných s praxí a reálnými exploity je strašně málo. Odpověď na otázku, co jsem vám položil, vám řekne každý nováček, když přijedete na kterýkoliv Blackhat. Teoretiků jako vy je neurekom.
Uživatel Max nic takového nepředvedl. Ono to ani nejde. URL není žádný objekt, do kterého něco dám a ono to někde bude. Každý si může vytvořit URL, jaké chce, a nikdo mu v tom nezabrání. Když já zveřejním URL https://login.szn.cz/loginProcess?username=test@example.com&password=test , tak jsem tím právě zveřejnil přihlašovací údaje k e-mailové schránce na Seznam.cz, ale rozhodně to není chyba Seznamu. A hlavně Seznam s tím nemůže vůbec nic udělat, nijak mi v tom nemůže zabránit. I kdyby třeba zakázal přihlašování metodou GET, pořád tím nikomu nezabrání napsat si skript, který to URL rozparsuje a pošle je metodou POST s parametry pěkně v těle požadavku. Stejně, jako může někde „vyběhnout“ URL, může tam vyběhnout cokoli jiného – HTTP hlavičky, cookies, tělo požadavku.
Vaše právní hledisko lze snadno vyřešit tak, že do zdrojového kódu toho skriptu nebudu psát bezpecnostni_token=bflmpsvz, ale napíšu tam heslo=bflmpsvz.
Technicky nějaká magie frameworku nezachrání to, když programátor vůbec netuší, co dělá. Když ty přihlašovací údaje nebudou v URL, ale pošlou se v těle požadavku nebo v hlavičkách, WCF ani nikdo jiný s tím nic neudělá.
jak jistě víte, URL specifikace je nedoporučuje, protože jsou považovány za bezpečnostní riziko
Naštěstí nic takového nevím, protože autoři URL specifikace věděli, co je URL, a tak by netvrdili takový nesmysl. Bezpečnostní riziko je zveřejnění přihlašovacího jména a hesla, bezpečnostního tokenu nebo jejich ekvivalentů, a to bez ohledu na to, jak se zveřejní.
Víte, to máte těžké. Na jednu stranu mne obviňujete, že nemám obecnou představu o zabezpečení a zlobíte se, že všechno beru z pohledu prohlížeče. Na druhou stranu jste se ale sám zasekl na tomto jednom případu a odmítáte z těchto kolejí vyjet.
Jak Vám názorně předvedl na několika případech uživatel Max, jakmile dáte něco do URL, může to na Vás vyběhnout někde, kde jste to původně vůbec neočekával - např. logy na cílové straně, výstup z výjimky atd. Vrazit heslo do URL parametrů je jako zadat heslo do parametrů příkazové řádky a následně se divit, že je to vidět ve výpisu procesů a v historii shellu.
To, že předhazujete URL nikoliv prohlížeči, ale nějaké knihovně, není žádný argument. Právní hledisko jsem tu už omílal asi stokrát, tak Vás tím znovu nebudu unavovat. Technicky má ale většina dnešních WS oddělenu konfiguraci přenosové vrstvy od autentizace a samotného datového přenosu. Pak můžete například psát WS klienta v .Netu a počítat s tím, že jedete pod SSL. Ve výsledku to tak vůbec být nemusí. A pak těžce narazíte. WCF má mechanismy jak zabránit nějaké plain-text autentizaci při vypnutí SSL a buď přejde automaticky na NTLM apod, nebo volání zcela zablokuje. V případě, že použijete nějaký token nebo jméno/heslo v URL, nebude knihovna vůbec tušit, že jde ve skutečnosti o autentizovanou komunikaci a spojení povolí. Pokud takovou práci odevzdáte ve firmě, která bere bezpečnost jen trošku vážně, už to znovu neuděláte, protože Vás k tomu už nikdo znovu nepustí...
K Vašemu domácímu úkolu pro mne - jediná vhodná varianta je první, protože dodržuje oddělenost autentizačních informací. Proto se také používá výraz "autentizační vektor". Všechny ostatní příklady jsou nevhodné. Poslední dva jsou sice pouze zápis a budou před použitím odděleny, ale jak jistě víte, URL specifikace je nedoporučuje, protože jsou považovány za bezpečnostní riziko.
Tak je vidět, že jste ňouma. Pardon. Je to jedna z útočných metod, co se používala a standardně se přesně takhle dělá bezpečnostní test i pro zaměstnance. My jsme ji prakticky použili v roce 2010. Vůbec nic nemusíte dělat s SSL, vůbec. Jsou tři základní metody pane kolego a jednu jsem již popsal a tu doteď používáme. je to přes web log, což je možné uznat to, jak jste psal o tom před SSL. Ale my se k tomu dostali u v průběhu SSL a to bez prolamování. Způsob byl triviální, jen musíte přemýšlet. Je to přes GA a referera. Normálně došlo k requestu na GA tam byla součástí plná URL včetně login. Mohl bych popsat přesně scénář, jak jsem se domluvii s testovaným subjektem, jak velmi jednoduchou metodou sociálního inženýrství nabídnete firmě zdarma zvýšení návštěvnosti. Jak jsme se domluvili se správcem webu, aby si vypnul cookies a udělal tam nějaké změny na webu, co potřebujeme a pak něco prováděl na webu. Následně jsme dostali výpis z GA, podle kterého jsme měli subjektu pomoci zvýšit zdarma návštěvnost. No a na GA jsme měli referera s jeho loginem. Stálo nás to asi den práce. Je jedno, že máte v RFC jasně dáno, jak nakládat s refererem při https, ale GA si to posílalo ve svém skriptu na externí sajt, normálně to byl ukázkový XSS od Google s plným souhlasem uživatele. A právě k XSS mířila moje otázka, protože tohle je metoda, co se s ním používá. Google to pak změnil, ale tuším, že to tam opět je (teď to nemám ověřené, stačí si pustit httpwatch).
Poslední metoda je historie prohlížeče, kde na tohle je ideální IE, který po mnoho dlouhých let držel historii URL, ale to uvádím jen pro úplnost.
Pokud opravdu máte něco společného s bezpečností, musíte vědět, že na takhle nejasně položenou otázku se nedá jednoznačně odpovědět. Komunikace může být tunelována skrz SSL, ale k údajům je možné se dostat před začátkem tunelu (např. ve webovém prohlížeči, v OS, v klávesnici, v souboru na disku) nebo za koncem tunelu (na cílovém serveru). Je v takovém případě odpověď na vaši otázku ano nebo ne? Dál může být chybná implementace SSL (např. se vytváří slabé klíče), může být chyba v návrhu SSL, může někdo mít kvantový počítač, kterým dokáže faktorizovat i větší čísla než 12, může někdo mít důkaz P=NP. Každý (včetně vás, i když tvrdíte opak) věří, že něco z toho neplatí – a často i různě pro různé věci. Třeba pro e-mail věřím i tomu, že implementace SSL v daném programu je správně, pro získání výpisu z účtu taky, ale pro podání platebního příkazu už tomu nevěřím a chci nějaké další zabezpečení.
To máte pravdu. Můj příspěvek byl už více o tom, že je snaha snižovat bezpečnost s vidinou user-friendly řešení a v současné době, kdy většina dat je elektronicky dostupná, tak se zvyšuje pravděpodobnost jejich zneužití při současném poklesu bezpečnostních standardů a ochrany.
S tím právním bodem souhlas a s tím technickým popisem ad certifikáty úplně. Tak je to správně, ale přesně jak píšete a s čím já se pořád peru je to, že bezpečnost ustupuje pohodlí klientů. Ale tohle platí a vše je růžové jen do chvíle, než nastane průser. Pak za námi běží celý management, že jsme je měli důrazněji upozornit a že to nevěděli a další výmluvy :)
Kdyz uz jsme u tech URL, transakcni historie Raiffeisenbank se take zobrazuje pres proste URL, jen nejsou tak daleko, aby ji umeli poslat v json, ale princip je stejny jako u FIO, funguje to tak radove od roku 2003 a zatim jsem nenarazil na zadny pripad zneuziti nebo nekoho, kdo by to API rozporoval.
Jeste teda upresnim zneuziti toho URL, ne zneuziti jako takoveho, lidi co si nechaji ukrast pristupove udaje uz urcite nekolik bylo. Ma-li eshop fugovat samostatne, tak samozejme musi mit vsechny udaje pro pouziti API nekde v konfiguraci mit ulozene.
Pořád tvrdíte, že jsou někde nějaké výrazné rozdíly, jedno je bezpečné a druhé ne. Tak tady máte schválně několik URL vytvořených oběma způsoby, o kterých tu diskutujeme, a můžete je rozdělit na ta bezpečná a nebezpečná a napsat, proč je rozdělujete zrovna takhle?
Přihlašovací jméno: jan.novak
Heslo: maruska
http://example.com/login
Bezpečnostní token: n]wPPnaT'][gT+'Nnr)f[T~bqz3sJ;w(
http://example.com/api/{token}/rest/
http://example.com/login?username=jan.novak&password=maruska
http://example.com/login?login=jan.novak:maruska
http://example.com/login?login=69bd35a5c927a2c1f2557d8aef9cce10
http://example.com/login?token=n]wPPnaT'][gT+'Nnr)f[T~bqz3sJ;w(
http://jan.novak:maruska@example.com/login
http://n]wPPnaT'][gT+'Nnr)f[T~bqz3sJ;w(@example.com/login
http://69bd35a5c927a2c1f2557d8aef9cce10@example.com/login
Jenom připomínám, že se tu celou dobu bavíme o tom, že uživatel má tu adresu uloženou v nějakém skriptu, takže je úplně jedno, zda se používá GET nebo POST a zda se parametry přenášejí v URL, v hlavičkách nebo v těle požadavku.
V předchozím příspěvku jsem vás nechtěl nijak napadat. Ale pořád píšete o tom, že je rozdíl, jestli něco nazvu heslo nebo bezpečnostní token nebo bezpečnostní URL – z čehož je zřejmé, že toho o zabezpečení moc nevíte. A pak jsou opravdu jen dvě možnosti – buď budete věřit, když vám další lidi tvrdí, že bezpečnost opravdu nezávisí na tom, jak si co lidé pojmenují, nebo si o tom něco nastudujete a ověříte si to sám.
To jste ale už se zabezpečením zamířil úplně někam jinam než FIO ;-). Vícefázová autentizace je určitě nezbytná u nějakých citlivějších systémů (FIO jí pravděpodobně využívá ve formě SMS při přihlašování na účet - doufám) pro vyhrazenou skupinu uživatelů, obecně je ale na internetu zatím těžko prosaditelná. Prakticky by šla asi nejsnáze implementovat do OpenID technologie, kterou zmiňoval pan Jirsák, kdy by OP při požadavku na autentizaci kontaktoval program na uživatelově počítači a uživatel musel akci potvrdit. Nevím ale, jak je to s doporučeným časováním, jestli by to bylo použitelné pro běžné uživatele.
Každopádně máte pravdu.
Potíž s touto diskuzí je v tom, že já jsem původně řešil spíše právní stránku věci, kdy je dle mého názoru nepostižitelný přístup k URL, byť "zabezpečenému" pomocí tokenu. Nebylo by možné prokázat, že "útočník" věděl, že přistupuje k datům, která jsou osobní povahy. Pokud by bylo požadováno heslo, je situace úplně jiná.
Smysl mého původního příspěvku je v tom, že pokud by již někdo získal (neřešme jak) z mého Google Drive FIO URL, je víceméně nepostižitelný. Kdyby získal trojici údajů (adresa, jméno, heslo), nemůže se již tvářit, že nevěděl, že dělá něco špatně. Proto je způsob přístupu k FIO API přinejmenším nešťastný. Lepší variantou by byly jednoúčelové klientské certifikáty, vydávané nějakou FIO API CA. Technicky by to bylo pro klienty ale komplikovanější. Takhle to dopadá, když se staví pohodlí nad bezpečnost.
Nerozumím Vašemu přístupu, zjevně jste nepochopil mou původní výhradu vůči tokenům, tak jste vyrazil na pole osobních invektiv a dehonestování odborných znalostí oponenta. Zkuste to prosím méně útočně, jinak nemíním v diskuzi pokračovat.
K technické stránce věci: chápu, že můžou někteří tvůrci webových aplikací použít přístup, kdy je jméno a heslo předáno v rámci proměnných v URL, ale to je amaterismus nejhrubšího zrna. Když neřeším fázi autentizace, je po jejím dokončení samozřejmě možné uložit session token do cookie nebo jako "fallback" do nějaké POST skryté proměnné. To je ale komplikované, takže se to většinou také nedělá. Záložní varianta s GET proměnnou je s prominutím prasárna a když vidím v URL něco jako PHPSESSID, tak automaticky odcházím. Uživateli totiž stačí, když se zapomene odhlásit a do timeoutu je jeho sezení možné napadnout prostým průchodem historie prohlížeče. Už dlouho jsem nenarazil na web, který by se snažil vypnuté cookies nějak obcházet (možná s výjimkou LSO) a obvykle o zapnutí cookies požádá. Surfuji zásadně s vypnutým JS i cookies a zapínám je až když jsou potřeba, takže jsem přesvědčen, že nejde pouze o můj dojem.
Autentizační postupy jsou zde z nějakého důvodu, především proto, aby byly systémy schopné určit, kterou část informace si je možné zapamatovat (adresa) a kterou je třeba chránit (jméno/heslo). Pokud mi pro vstup do systému stačí pouze jediná informace (adresa), nedá se o bezpečnosti vůbec mluvit. Nevím jak přesně ve FIO přístup funguje, ale pokud je to tak, že si v internetovém bankovnictví vygenerujete adresu s tokenem (v podstatě autentizační fáze), která je pak platná například měsíc a samotná stačí k autorizaci, je to přinejmenším nešťastné. Já to nepovažuji za zabezpečení a nemyslím si, že jde z mé strany o paranoiu. Naopak jsem přesvědčen, že akceptování postupu jako bezpečného je značně lehkomyslné.
Prakticky byla ale původně řeč o něčem jiném. Z pohledu legislativy by bylo otevření takového URL považováno za neodporující zákonu. Až teprve zneužití takto získané informace by bylo trestné - jenže prokazování by bylo na Vaší straně. Naopak při krytí dodatečným jménem a heslem by bylo postižitelné už samotné otevření URL. V prvním případě by se mohl útočník bránit, že adresu našel někde na internetu, nevěděl o co jde, myslel, že je to veřejné. Ve druhém případě by mu taková argumentace nepomohla. Z tohoto pohledu je tedy token nešťastný i kvůli případné ztížené právní obraně.
Update: pročetl jsem dokument k API FIO a je to přesně jak předpokládám, stačí Vám pouze adresa. V příkladu ze zmíněného Apps Scriptu je:
UrlFetchApp.fetch("https://www.fio.cz/ib_api/rest/last/"+token+"/transactions.json");
Pokud takovou adresu předhodíte prohlížeči a vyměníte na konci .json za .html, máte něco, co Vám bude schopen zaindexovat i vyhledavač. Soubor robots.txt také žádná omezení neklade. Stačí tedy odkaz vhodit někam do diskuze a majitel účtu má o návštěvníky postaráno.
Na závěr chci jen pro pořádek upozornit, že už jde dost o OT.
No právě, že musíte. Pro nás je to jedna z možných technik, co používáme při pentestech. Spoléháme na delší dobu expirace tokenu a metoda útoku je velmi snadná. Hledáte, jak se např. dostat k log fajlu toho web serveru. Jsou různé způsoby a úplně první a nejjednodušší, který uděláte je directory traversal na ten log, ten úplně stačí a případně ještě lépe na aplikaci. Sice většinou je zde firewall, ale obvykle je to jen iptables a na aplikační úrovni je minimální filtrace a většinou to admini řeší právy na fajlsystému. Nebudu do toho zabíhat, ale můžete se při troše štěstí a umu dostat k tomu, jak vypisovat log. Budete to dělat potichu a nebo to spojíte s nějakou kamufláží, ideálně odstíním pozornost admina předstíraným ddosem vedle a nebo mu začnete projíždět další servery skenerem a on na to zaměří pozornost, to máme vyzkoušené, že to zabere. A když vytáhnu log, vidím tam i tokeny. Pokud je nevidím, mohu aplikaci do toho módu přepnout a to jak v .NETu, Javě atd. takže by default aplikace nebude pracovat s cookies a pojede na URL. Pokud aplikační vývojář je taková lama, že tohle povolí a nechá to na úrovni aplikace a nenastaví to omezení systémově a nebo nejlépe na firewallu (např. přes mod_secure nebo obdobný http filter), tak je trotl a je to poměrně snadná metoda. No a útočník pak může sledovat, co se děje. Jo a s tím heslem a tajností, tak tady platí, že pokud nemáte dvoufázovou autentikaci nejlépe nějakým OTP, tak jste v pr,,, To, co popisujete je na nic a viz ten Dropbox nebo i Fejs, tak např. na dropbox byl poslední útok právě ukradením účtů na jiných accountech, protože uživatelé jsou lidé a mají obvykle stejná hesla v různých systémech (viz. http://www.zdnet.com/dropbox-gets-hacked-again-7000001928/). Pokud nemám dvoufázovou autentizaci, tak je to nejhorší metoda zabezpečení a cookies pro bezpečáka nejsou žádná ochrana. Vlastně pořád nevíte, kdo tam na druhé straně je. Takže příspěvek autora je sice technicky nepřesný a asi nepochopil fungování FIO, ale bagatelizace jeho pokusu o upozornění na tohle chování je devalvace práce bezpečáků evangelizovat uživatele, aby takové chování nedělali a aby opravdu chránili svoje soukromí a věřili jen sobě a lidem, co si ověří. Není to paranoia, ale je to nutnost v dnešním světě.
V zásadě souhlas. Jen bych trochu rozlišoval „webové stránky“ a „zneužití/využití HTTP jakožto přenosového protokolu pro aplikační rozhraní“. V tom prvním případě je dobré dodržovat určité zásady (kvůli ochraně proti XSRF atd.). Ve druhém případě je to ale jedno – webový prohlížeč je mimo hru a my si vlastně jen posíláme nějaká data po TCP a shodou okolností ten protokol vypadá stejně jako protokol používaný na webu. A pak je jedno, jestli pošlu token na řádku „GET ... HTTP/1.1“ nebo o pár řádků níže – všechna data je potřeba beztak zabalit do šifrovaného kanálu (typicky SSL/TLS) a zajistit „end-to-end“ bezpečnost mezi dvěma aplikacemi/systémy.
Součástí URL může být i jméno a heslo. Chápu, že ne každý musí znát postupy zabezpečení přístupu na webu, ale tak aspoň na této neznalosti nestavte své rozsáhlé teorie. Zvlášť když vám lidé, kteří ty postupy znají, opakovaně píšou, že dvojice jméno a heslo nebo přihlašovací token je jedno a to samé, liší se to jen formálně. Když si hesla volí uživatelé, není zajištěna jejich unikátnost, tak se k heslu přidává unikátní přihlašovací jméno – tím odlišíte různé uživatele se stejným heslem. Když to heslo generuje aplikace a je zajištěna jeho unikátnost, nepotřebujete k tomu další údaj v podobě přihlašovacího jména. Tomu heslu se pak neříká heslo, ale např. přihlašovací token. Je to ale pořád jedno a to samé.
To, že je potřeba přihlašovací token uchovávat v tajnosti, je samozřejmě v dokumentaci API napsané.
Přihlášení přes přihlašovací token se používá často, používá ho třeba účet Google, Facebook, Dropbox, používá se při přihlášení přes OpenID (takže se s ním můžete přihlásit i tady na Lupě). Ve všech těchto případech je ten token součástí URL. Ještě častější případ je, kdy je přihlašovací token uložen v cookie, tak je řešena velká většina přihlašovacích formulářů na webu. Spousta z těch webů má implementován fallback, a když prohlížeč nepodporuje cookies, vloží se token – překvapivě – do URL.
Takže z přihlašovacích tokenů v URL určitě strach mít nemusíte. Navíc každý, kdo ho chce použít, se dozví, že přihlašovací token odpovídá heslu a je potřeba ho uchovávat v tajnosti.
Dovolím si oponovat, v tomto případě je token součástí adresy, což je právě jádro pudla. Velké množství URL na internetu obsahuje nějakou část, jejíž význam není na první pohled zřejmý, většina uživatelů by v případě použití vůbec netušila, že přistupují k privátním údajům.
Zaindexování prohlížečem je samozřejmě nesmysl, v původním komentáři mělo být slovo "vyhledávač", díky za upozornění.
Děkuji za upřesnění, to je poměrně důležitá informace, která tu zatím nezazněla, API FIO banky samozřejmě detailně neznám. Nabízí se otázka, jestli má takové URL s maximálně měsíční platností nějaký význam, protože pro účetní program půjde v podstatě o OTP, ale to je již mimo rámec diskuze.
Co se týče zneužití, tak heslo je velmi podstatné. Pokud někomu vlezete do bytu, protože měl otevřené dveře dokořán, nějak se z toho vykecáte. Když si ale odemknete kopií klíče, tak budete mít poněkud menší prostor pro argumentaci, pravděpodobně skončíte v cele předběžného zadržení ;-).
Samozřejmě se Vám může stát, že uvedené FIO URL zaindexuje nějaký prohlížeč, i když zde by tomu asi zabránil formát výstupu (možná i robots.txt).
Jen pro presnost, protoze vetsina diskutujicich API asi nezna. FIO umoznuje vygenerovat libovolny pocet tokenu a jejich platnost je povinne casove omezena. Takze jednak je muzete generovat s platnosti den/tyden/mesic a jednak je muzete selektivne revokovat.
Z hlediska zneuziti neni podstatne, jestli nekdo posila jmeno + heslo, nebo nahodne generovany token.
Přečetl jsem si celý článek, poté diskuzi včetně té na G+ a následně opět článek.
Ve světle všech informací je jasné, že autor v článku uvedl pár zavádějících údajů a s největší pravděpodobností původně nevěděl, že jde u FIO o přístup pouze pro čtení. Čímž řekněme snížil poněkud odbornost svou i článku, jeho chyba.
Nicméně článek ve své podstatě na tomto příkladu demonstruje (a nejlépe je to vidět v diskuzi) postupnou ochotu vzdávat se soukromí kvůli pohodlí, které poskytují cloudové služby. A varuje před tím, za což jsem mu osobně vděčný.
Jsem přesvědčen, že nešťastný je i přístup FIO banky s tím, že umožňuje přístup na účet (i když jen pro čtení) prostřednictvím jediného údaje, zde URL s tokenem. Jak se správně ohrazuje autor v diskuzi, tato adresa poskytuje komukoliv beztrestný časově neomezený přístup k informacím z transakční historie účtu. Záměrně píšu beztrestný, neboť pokud by bylo pro přístup ještě požadováno jméno a heslo, jednalo by se již ze strany třetí osoby při jeho použití o zneužití. Takto je informace veřejně dostupná. Nabízí se srovnání s povolením veřejného přístupu do webmailu, to by se také asi většině lidí nelíbilo.
Přístup pana Hráčka je naivní a přehlíživý a odpovídá klasickému přístupu Googlu. Google již roky nabízením osobních cloudových služeb postupně uživatele vychovává k tomu, aby mu dobrovolně poskytli své soukromé údaje. Není přitom žádným tajemstvím, že například označování osob na fotografiích na FB/G+ je hojně využíváno tajnými službami, které si kvalitu údajů nesmírně pochvalují. Čím více informací o uživatelích bude k dispozici, tím lépe. Mezi arogantními výkřiky typu "kdo by se s tím analyzoval" a obviněními z paranoi už chybí jen to klasické "kdo nedělá nic špatného, nemá co skrývat".
A nejhloupější na celé této mediální přestřelce je chování pana Dočekala. Nemám nic proti reakcím na G+, ačkoliv selektivní ignorování nejrozumnějšího argumentu ohledně časově neomezeného přístupu k FIO prostřednictím URL s tokemen mě o jeho profesionalitě příliš nepřesvědčilo. Ale hádka s kolegou v diskuzi pod jeho článkem s užitím osobních invektiv je ubohá a velmi poškozuje celou Lupu. Musím říct, že jsem se s něčím takovým ještě nesetkal.