Podczas ostatniej dyskusji na temat haseł maskowanych pojawiła się sugestia, że jeśli atakujący "nie widzi", które znaki są wpisywane, wówczas odgadnięcie pełnego hasła jedynie na podstawie przechwyconych fragmentów haseł, jest trudne. No, w każdym razie trudniejsze. Temat już wówczas mnie zaintrygował, ale Q4 zbliżał się nieubłaganie i temat zarzuciłem. Pora wrócić do tego tematu.
Ciąg dalszy "Hasła maskowane inaczej" »Saturday, January 7. 2012
Tuesday, January 3. 2012
The Great KeePass Debate
Tytuł tego wpisu jest celowo mylący, wcale nie mam zamiaru debatować. Chcę natomiast odnieść się do tego komentarza. Adam napisał:
Nie rozumiem ludzi którzy korzystają z takich bajerów jak zapamiętywanie haseł za pośrednictwem programów czy serwerów, kiedy wystarczy sobie napisać własną funkcję i miksować 1 hasło przez url + md5, base64 itd, a na koniec np ucinać do 10 znaków i w 2ga stronę nie jest to możliwe do odtworzenia w praktyce.
Różnica między KeePass a opisanym przez Adama podejście jest taka, że hasło generowane przez KeePass jest losowe (właściwie: może być losowe, jeśli użytkownik sobie takie wygeneruje), natomiast hasło uzyskiwane w wyniku opisanej metody jest "wyprowadzane" na podstawie kilku danych wejściowych. Jeśli ktoś będzie w stanie odgadnąć "hasło główne" oraz ustalić sposób "wyliczania" hasła "docelowego", będzie w stanie uzyskać hasło dla dowolnej strony. Mamy tutaj security through obscurity (tajny sposób "wyliczania" hasła) oraz swoisty class break. Co z tego wynika? Nic.
Ciąg dalszy "The Great KeePass Debate" »Wednesday, December 28. 2011
O głębokim ukryciu nieco inaczej
Głębokie ukrycie doczekało się wpisu na Wikipedii. I wszystko byłoby w porządku, gdyby nie ten przykład:
http://example.com/29d9283aba927109a289b03812738d89201/2873944786672/10284.pdf
Wydaje mi się, że na temat trzeba spojrzeć nieco z szerszej perspektywy. A przy okazji - moim zdaniem głębokie ukrycie nie do końca zasługuje na oddzielny wpis w Wikipedii. Na dobrą sprawę jest to pewna forma security through obscurity, która w dodatku, w pewnych przypadkach i do pewnego czasu, działa.
Ciąg dalszy "O głębokim ukryciu nieco inaczej" »Sunday, December 18. 2011
Encoding: ESAPI
Pokazanie przykładów niewłaściwego encodingu mamy za sobą (patrz: #1, #2, #3, #4 i #5). Na koniec przykład: http://bootcamp.threats.pl/lesson09b/, w którym encoding jest realizowany za pośrednictwem ESAPI (konkretnie owasp-esapi-php, jest to jeszcze wersja nieprodukcyjna). Dane wpisane przez użytkownika wypisywane są w trzech miejscach, w których encodowane są przy pomocy funkcji:
- encodeForJavaScript,
- encodeForJavaScript i encodeForHTMLAttribute
- encodeForJavaScript,
Funkcja doStuff obecnie coś robi, konkretnie wypisuje wartość otrzymanego parametru w drugim textarea. Zrobiłem to po to, by każdy mógł się przekonać, że te dziwne znaczki, które generuje ESAPI to rzeczywiście to, co zostało oryginalnie przekazane. A te dziwne znaczki wyglądają tak:
Dla encodeForJavaScript w kontekście atrybutu HTML:
<a href="#" onclick="javascript:doStuff('\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B,\x2D.\x2F\x3A\x3B\x3C\x3D\x3E\x3F\x40\x5B\x5C\x5D\x5E_\x60\x7B\x7C\x7D\x7E')">demo 1</a><br />
Dla encodeForJavaScript i encodeForHTMLAttribute w kontekście atrybutu HTML:
<a href="#" onclick="javascript:doStuff('\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B,\x2D.\x2F\x3A\x3B\x3C\x3D\x3E\x3F\x40\x5B\x5C\x5D\x5E_\x60\x7B\x7C\x7D\x7E')">demo 2</a><br />
Jeszcze raz dla encodeForJavaScript, tym razem w kontekście skryptu:
<script type="text/javascript">
doStuff('\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B,\x2D.\x2F\x3A\x3B\x3C\x3D\x3E\x3F\x40\x5B\x5C\x5D\x5E_\x60\x7B\x7C\x7D\x7E');
</script>
Mam nadzieję, że ten przykład wystarczająco dobrze pokazuje, że:
- encoding może być prosty, wystarczy wywołać odpowiednią dla kontekstu funkcję,
- encoding może być skuteczny (ktoś potrafi obejść encoding implementowany przez ESAPI i wykorzystany w tym przykładzie?),
- mimo encodingu wszystko może nadal działać,
I tym optymistycznym akcentem kończę ten temat. Przynajmniej na jakiś czas.
Saturday, December 17. 2011
Niewłaściwy encoding #5
Pora na zakończenie tematu przykładu z niewłaściwym encodingiem (patrz: #1, #2, #3 i #4). Ponownie, by nie przeciągać, dla tradycyjnego zestawu znaków testowych otrzymujemy:
<script type="text/javascript">
doStuff('!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~');
</script>
<script type="text/javascript">
doStuff('!\"#$%&\'()*+,-.\/:;<=>?@[\\]^_`{|}~');
</script>
Czy można tu coś zepsuć?
Ciąg dalszy "Niewłaściwy encoding #5" »
