301
Vývoj / Re:Ověření kódu přes webovou stránku
« kdy: 18. 02. 2019, 07:48:15 »
Je tu několik věcí:
1. Ověření – podpis nestačí, pokud se budou pokaždé podepisovat stejná data. Pak stačí pokaždé odpovědět stejným podpisem. Mělo by to být challenge-response – podepíšu (možná ještě nějak zfotmátovaná) unikátní data od klienta. Ten klíč pokud možno nepoužívat na nic jiného, jinak je to zdroj bezpečnostních problémů (zvlášť pokud tím budeme podepisovat cokoliv bez formátování).
2. Odposlech klíče – na to by mělo být good enough HTTPS. Jde vymýšlet i nějaké schéma podepisování, ale IMHO to je zbytečná komplikace.
3. Side channels – pozor na timing attack na serveru.
4. Použití téhož klíče na více strojích – tomu se bohužel těžko brání. V případě HW klíče lze (byť to není už tak snadné) použít třeba USBIP. Můžeme kontrolovat latenci, ale pak riskujeme, že odřízneme i legitimní uživatele, kteří mají třeba pomalejší stroj nebo jejichž virtualizace prodlužuje latenci na USB.
5. Úprava aplikace – můžeme mít super kontroly, ale je to k ničemu, pokud útočník třeba zneguje podmínku nebo nahradí klíč vlastním. Ideálně to chce inlineovat všechny relevantní knihovny, které použijeme pro kontrolu.
6. Ekonomie: Kolik se uživateli vyplatí investovat úsilí do překonaní ochran? Kolik se nám vyplatí investovat do (v rámci možností) do nepřekonatelnosti? Pár pirátů může vyjít levněji než ochrana silná tak, že nikdo nevěnuje dostatečné úsilí k jejímu překonání.
1. Ověření – podpis nestačí, pokud se budou pokaždé podepisovat stejná data. Pak stačí pokaždé odpovědět stejným podpisem. Mělo by to být challenge-response – podepíšu (možná ještě nějak zfotmátovaná) unikátní data od klienta. Ten klíč pokud možno nepoužívat na nic jiného, jinak je to zdroj bezpečnostních problémů (zvlášť pokud tím budeme podepisovat cokoliv bez formátování).
2. Odposlech klíče – na to by mělo být good enough HTTPS. Jde vymýšlet i nějaké schéma podepisování, ale IMHO to je zbytečná komplikace.
3. Side channels – pozor na timing attack na serveru.
4. Použití téhož klíče na více strojích – tomu se bohužel těžko brání. V případě HW klíče lze (byť to není už tak snadné) použít třeba USBIP. Můžeme kontrolovat latenci, ale pak riskujeme, že odřízneme i legitimní uživatele, kteří mají třeba pomalejší stroj nebo jejichž virtualizace prodlužuje latenci na USB.
5. Úprava aplikace – můžeme mít super kontroly, ale je to k ničemu, pokud útočník třeba zneguje podmínku nebo nahradí klíč vlastním. Ideálně to chce inlineovat všechny relevantní knihovny, které použijeme pro kontrolu.
6. Ekonomie: Kolik se uživateli vyplatí investovat úsilí do překonaní ochran? Kolik se nám vyplatí investovat do (v rámci možností) do nepřekonatelnosti? Pár pirátů může vyjít levněji než ochrana silná tak, že nikdo nevěnuje dostatečné úsilí k jejímu překonání.