Paweł Goleń, blog

Dziś po TKonferencji jedna osoba pytała się mnie, jak bezpiecznie przechowywać salt użyty przy hashowaniu hasła w bazie. Odpowiedź brzmi – salta nie trzeba przechowywać bezpiecznie, ponieważ jest jawny. Albo inaczej – dostęp do bazy danych trzeba ograniczać (co jest oczywiste), jednak sam salt nie wymaga specjalnej ochrony.

Czytaj dalej...

No cóż za zbieg okoliczności. Pojawił się dobry artykuł mówiący o tym, dlaczego należy używać HMAC. Ostatnio o tym wspominałem. Przy okazji akurat dzisiaj na WhiteHat Security Blog wygasł certyfikat.

I z tego wszystkiego aż dodałem kolejne zadanie do mojego wyzwania, trochę zawiązane z tematem.

Oryginał tego wpisu dostępny jest pod adresem Hash Length Extension Attacks

Autor: Paweł Goleń

Kryptografia jest ważna, ale to nie jest magic dust , którym wystarczy posypać system, by stał się on automatycznie bezpieczny. Z kryptografii należy korzystać, ale trzeba znać jej ograniczenia. Niestety, w trakcie testów często spotykam się z sytuacją, w której kryptografia jest użyta w sposób nieprawidłowy. Dziś trochę na ten temat.

Czytaj dalej...

Czasami dostaję pytanie, co robię, gdy znajdę jakąś podatność. Oczywiście mowa o sytuacji, kiedy zdarzy mi się coś znaleźć poza działaniami związanymi z realizacją zleceń. W moim przypadku odpowiedź jest prosta – nic. Po prostu “po pracy” nie szukam podatności, a jak coś mi się rzuca w oczy, to po prostu zamykam jedno oko i udaję, że drugim tego nie widzę. Dlaczego?

Odpowiedź na to pytanie również jest dość prosta i można ją przedstawić prostym akronimem CY(O)A. Jeśli organizacja nie ma jasno określonego programu bug bounty , wolę nie sprawdzać organoleptycznie w jaki sposób potraktuje informację o podatności. Wolę nie być później w sytuacji, w której będę musiał udowodnić, że nie jestem wielbłądem.

Czytaj dalej...

Jeśli zastanawiasz się o co chodzi w tytule tego wpisu, to spieszę wyjaśnić, że o nic. Po prostu nie miałem pomysłu jak go zatytułować, więc wygenerowałem sobie coś takiego :) A to dlatego, że wpis ten nie ma żadnego konkretnego tematu. No dobrze, może i ten tytuł ma pewien ukryty sens, ale to mocno poboczna sprawa.

Czytaj dalej...

Przynajmniej dwie osoby rozwiązały moje wyzwanie, to znaczy rozwiązały wszystkie pierwotnie opublikowane zadania, nie mam na razie żadnych informacji odnośnie zadania siódmego. Oczywiście zadania rozwiązać mogło więcej osób, mogły się po prostu nie pochwalić :) Feedback jest znikomy, choć raczej pozytywny:

Thanks for the nice challenges, really enjoyed it, especially number 5 was really good. Just solved the last one (...)

Czekam na więcej :)

Czytaj dalej...

Challenge without an interesting name.

Oryginał tego wpisu dostępny jest pod adresem No i wyknułem

Autor: Paweł Goleń

Tak, knuję. Mianowicie nad tym, by przygotować pewnego rodzaju challenge. Koncepcja mam taką, by kolejne etapy były udostępniane w ramach zaszyfrowanego kontenera TrueCrypt. By dostać hasło do poziomu n+1 trzeba będzie rozwiązać poziom n. Zadania będą różne, nie tylko aplikacje webowe. Myślę, że zabawa ruszy, jak będę miał gotowych co najmniej 5 zadań.

Oryginał tego wpisu dostępny jest pod adresem Knuję

Autor: Paweł Goleń

Rzucił mi się dziś w oczy dość stary felieton, w którym autor “rozprawia się” z narzekaniem nauczycieli/wykładowców na młode pokolenia, że jego przedstawiciele “nic się nie uczą na pamięć, wszystkiego szukają”. Autor wykazywał różnice w dostępności wiedzy kiedyś i teraz, powoływał się również na książkę The Wisdom of Crowds. A ja się z nim nie do końca zgadzam.

Czytaj dalej...

Czasami zastanawiam się intensywnie nad sensownością szyfrowania danych, nawet jeśli klucz użyty do szyfrowania tych danych jest potencjalnie łatwy do ustalenia (czyli właściwie bardziej obfuskacja niż szyfrowanie). Już wyjaśniam o co mi chodzi.

Załóżmy, że tworzę serwis podobny w koncepcji do Pastebin. Nie ma on służyć do przekazywania szczególnie istotnych danych, ale chciałbym ograniczyć prawdopodobieństwo masowego ich ujawnienia. Załóżmy, że:

  • w bazie danych przechowywana jest tylko “metryczka” wklejki,
  • same wklejki przechowywane są jako pliki na dysku,

Nagle okazuje się, że z jakiegoś powodu mamy do czynienia z klasycznym głębokim ukryciem i wszystkie pliki zawierające wklejki stają się publicznie dostępne...

Załóżmy teraz, że każdy z tych plików jest szyfrowany, a klucz szyfrowania jest generowany np. w oparciu o:

  • identyfikator pliku,
  • losowy salt przechowywany w metryczce pliku,
  • sekret zawarty w (konfiguracji) aplikacji,

Jeśli ktoś przejmie pełną kontrolę nad serwerem, będzie on oczywiście w stanie odszyfrować każdy plik, jeśli jednak mamy do czynienia wyłącznie z “głębokim ukryciem”, to jego szczęśliwi odkrywcy nie bardzo będą mieli się czym chwalić.

Zastanawiam się też nad podobnym podejściem w przypadku części danych przechowywanych w bazach SQL. Wówczas klucz mógłby być unikalny dla użytkownika, ładowany przy jego uwierzytelnieniu i wykorzystywany przy odczycie/zapisie pewnych danych. Mogłoby to chronić do pewnego stopnia przed skutkami SQLi czy błędami kontroli dostępu – atakujący nie otrzymałby danych innego użytkownika, ponieważ nie dysponowałby odpowiednim kluczem. Co więcej, jeśli byłby wykorzystany tryb szyfrowania z kontrolą integralności (authenticated encryption), w bonusie dostalibyśmy wykrywanie próby dostępu do cudzych danych.

Tu warto też wspomnieć o szyfrowaniu homomorficznym, ale to już trochę wyższa szkoła jazdy.

Oryginał tego wpisu dostępny jest pod adresem A może jednak szyfrować?

Autor: Paweł Goleń