| Autor | Správa |
Flety
 Užívateľ
 Založený: 26.11.2006 Príspevky: 4109 Bydlisko: HE(Humenne) - KE Vek: 18
 | Zaslal: Ut 01.11.11 21:37 |   |
Zdravím,
trochu som sa zľakol CSRF a chcem zabudovať ochranu proti tomuto útoku.
Čo viem o ochrane proti CSRF:
Aplikácia odošle spolu s formulárom aj token. Tento token si uloží u seba. Ak sa tokeny po odoslaní formuláru zhodujú, formulár sa spracuje.
Keď útočník odošle formulár, musí ho odoslať bez tokenu, keďže nevie aký je a generovať ho tiež nevie.
Toľko som sa dozvedel. Lenže: ak vie útočník odosielať formulár, vie asi približné fungovanie aplikácie a teda vie čo si má požiadať od servera, kde mu ten token vypíše. Napríklad ak moja aplikácia požiada formulár, tak vytiahne celý html kód formu, kde bude uložený tento token. Tento celý kód si ale vie požiadať aj útočník a vytiahnuť z neho len token. Tento si uloží do premennej a tú následne odosiela s vyplneným "záškodnickým" formulárom.
Ako sa teda proti tomu brániť? Zrejme som niečo nepostrehol, čo skutočne chráni pred CSRF tak mi to prosím vysvetlite. Vďaka. |
_________________ Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5K CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 5-5-5-12 GPU: Saphire ATi Radeon HD5850 Toxic HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: Fortron Epsilon 700W LCD: LG L226W 1680x1050 2ms | |
       |
 |
Ďuri
 Administrátor
 Založený: 11.08.2007 Príspevky: 3785 Bydlisko: Brno
 | Zaslal: Ut 01.11.11 22:24 |   |
Ten token sa praveze vobec nemusi dat vyziadat od servera. Ulozis ho do sessiony, teda bude pre kazdeho pouzivatela jedinecny, plus ho mozes regenerovat pri kazdom requeste/po nejakom case. |
| |
    |
 |
shaggy
 Moderátor
 Založený: 21.02.2006 Príspevky: 4627 Bydlisko: Bratislava
 | Zaslal: Ut 01.11.11 23:50 |   |
Presne ako píše Ďuri - ak útočník bude presne vedieť, ako vyzerá tvoj formulár a že tam generuješ nejaký token, nebude vedieť odoslať ten istý token, čo má vygenerovaný (a v session uložený) používateľ, ktorého chce "napadnúť". |
_________________ Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme. | |
    |
 |
Flety
 Užívateľ
 Založený: 26.11.2006 Príspevky: 4109 Bydlisko: HE(Humenne) - KE Vek: 18
 |
Ako potom overím token, keď ho neodošlem klientovi? |
_________________ Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5K CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 5-5-5-12 GPU: Saphire ATi Radeon HD5850 Toxic HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: Fortron Epsilon 700W LCD: LG L226W 1680x1050 2ms | |
       |
 |
chrono
 Skúsený užívateľ
 Založený: 13.11.2007 Príspevky: 808
 |
Ono to až tak nechráni teba, ako majiteľa servera, ale používateľov, ktorý môžu tvoj server používať (pretože ak by som nejako chcel zneužívať tvoj server, zabrániš mi v tom len veľmi ťažko, pretože sa môžem tváriť ako normálny používateľ a ten CSFR token získam priamo z html kódu).
Ak tam CSFR token máš, tak sťažíš odosielanie formulára cez nejaký podstrčený javascript na inej doméne (ak formulár používa metódu GET, tak stačí výsledné url použiť napr. ako src atribút pri obrázku), pretože ten token nepoznáš (takže nemôžeš predpripraviť URL pri GET metóde a keďže ide o inú doménu, nemáš ako získať html kód, aby si mohol ten token z toho html kódu vybrať). |
| |
  |
 |
Flety
 Užívateľ
 Založený: 26.11.2006 Príspevky: 4109 Bydlisko: HE(Humenne) - KE Vek: 18
 | Zaslal: St 02.11.11 20:00 |   |
chrono, poznám teóriu CSRF, ale vysvetli mi, prečo by som nemohol napísať skript, ktorý stiahne formulár, prečíta z neho token a odošle ho spolu s formulárom a tento skript následne podstrčiť prihlásenému používateľovi. |
_________________ Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5K CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 5-5-5-12 GPU: Saphire ATi Radeon HD5850 Toxic HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: Fortron Epsilon 700W LCD: LG L226W 1680x1050 2ms | |
       |
 |
Ďuri
 Administrátor
 Založený: 11.08.2007 Príspevky: 3785 Bydlisko: Brno
 | Zaslal: St 02.11.11 20:12 |   |
No lebo nemozes ty si mozes precitat nanajvys tak svoj token, ale ini uzivatelia maju iny token. |
| |
    |
 |
Flety
 Užívateľ
 Založený: 26.11.2006 Príspevky: 4109 Bydlisko: HE(Humenne) - KE Vek: 18
 | Zaslal: St 02.11.11 20:14 |   |
Ale veď podstrčím kód, ktorý si spustíš ako prihlásený používateľ. Tento kód za Teba požiada formulár na odoslanie správy, tento formulár prečíta a vytiahne z neho token. Okamžite ten token pridá do formuláru, ktorý odošle. Stále to bude vykonávať pod tvojím účtom na tvojom PC. |
_________________ Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5K CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 5-5-5-12 GPU: Saphire ATi Radeon HD5850 Toxic HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: Fortron Epsilon 700W LCD: LG L226W 1680x1050 2ms | |
       |
 |
Ďuri
 Administrátor
 Založený: 11.08.2007 Príspevky: 3785 Bydlisko: Brno
 | Zaslal: St 02.11.11 20:17 |   |
Ako si predstavujes to vyziadanie formulara "za mna"? Ak Javascriptom, nedostanes sa k tokenu kvoli cross-origin obmedzeniam. Ak serverom, neziadas ten formular za mna, ale za seba; musel by si sa v tom requeste identifikovat ako ja, v praxi by si vacsinou musel mat moju cookie. |
| |
    |
 |
chrono
 Skúsený užívateľ
 Založený: 13.11.2007 Príspevky: 808
 | Zaslal: St 02.11.11 20:18 |   |
A ako by ten skript na stiahnutie formulára vyzeral? |
| |
  |
 |
Flety
 Užívateľ
 Založený: 26.11.2006 Príspevky: 4109 Bydlisko: HE(Humenne) - KE Vek: 18
 | Zaslal: St 02.11.11 20:24 |   |
Ďuri, myslel som cez JS, čo presne je to cross-origin obmezdenie? Dá sa na to spoľahnúť? |
_________________ Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5K CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 5-5-5-12 GPU: Saphire ATi Radeon HD5850 Toxic HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: Fortron Epsilon 700W LCD: LG L226W 1680x1050 2ms | |
       |
 |
Ďuri
 Administrátor
 Založený: 11.08.2007 Príspevky: 3785 Bydlisko: Brno
 | Zaslal: St 02.11.11 20:29 |   |
Utocnik by mal na stranke iframe, do ktoreho by sa nacitavala stranka s formularom. V takom pripade by som bol naozaj vnutri toho iframe prihlaseny za seba, ale ten token nemas ako precitat, prehliadac by ti akykolvek pristup k atributom objektu <iframe>.contentWindow zakazal, lebo obsah nepochadza z tej istej domeny. A ano, je to spolahlive. |
| |
    |
 |
Flety
 Užívateľ
 Založený: 26.11.2006 Príspevky: 4109 Bydlisko: HE(Humenne) - KE Vek: 18
 | Zaslal: St 02.11.11 20:33 |   |
A čo AJAX požiadavka na stránku s formom? Teda nie načítavanie do iframu ale len do premennej. No predpokladám, že to bude podobne. Potom ale ako funguje to CSRF? Jedine cez GET požiadavky. Alebo je možné odosielať POST požiadavku medzi doménami? |
_________________ Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5K CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 5-5-5-12 GPU: Saphire ATi Radeon HD5850 Toxic HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: Fortron Epsilon 700W LCD: LG L226W 1680x1050 2ms | |
       |
 |
chrono
 Skúsený užívateľ
 Založený: 13.11.2007 Príspevky: 808
 | Zaslal: St 02.11.11 20:37 |   |
Post medzi doménami odošleš, problém je, že nemáš ako zistiť správny token (a nefunguje ani Ajax). Ak tam ale žiadny token nemajú, tak to môžeš nejako zneužiť. |
| |
  |
 |
Flety
 Užívateľ
 Založený: 26.11.2006 Príspevky: 4109 Bydlisko: HE(Humenne) - KE Vek: 18
 | Zaslal: St 02.11.11 20:40 |   |
Čiže GET medzi doménami nefunguje ale POST už áno? |
_________________ Desktop: CASE: Cooler Master Centurion 532 MB: ASUS P5K CPU: Intel Core 2 Quad Q6600@2,4GHz FSB 1066MHz RAM: A-Data Vitesta 2×2GB 800MHz Cl 5-5-5-12 GPU: Saphire ATi Radeon HD5850 Toxic HDD: Seagate Barracuda 500GB 7200rpm ODD1: LG DVD+/-RW + LS(PATA) ODD2:LG DVD+/-RW(SATA) PSU: Fortron Epsilon 700W LCD: LG L226W 1680x1050 2ms | |
       |
 |
|