Wczoraj, 23 października, odbyło się kolejne spotkanie OWASP w Krakowie.
Kraków, spotkanie OWASP
Na prezentację Przemka Skowrona niestety się spóźniłem. Okazuje się, że przebycie 4 kilometrów komunikacją miejską może trwać ponad godzinę, przy czym większość czasu spędza się oczywiście na oczekiwaniu na autobus. Hasło reklamowe MPK "spokojnie, już jadę" nabiera nowego sensu. Prezentacja Łukasza Pliorza dotyczyła IDS/IPS/WAF. Ostatnia prezentacja, moja, poświęcona była zarządzania sesją w aplikacjach internetowych. Mam nadzieję, że nie zanudziłem słuchaczy na śmierć... Niestety, byliśmy nieco "poza czasem", w związku z czym musiałem pędzić i nieco spłycić to, co chciałem powiedzieć. Prezentację (i uwaga - tekst) wysłałem już do Przemka, więc prawdopodobnie materiały te będą dostępne już wkrótce. Jeśli nie, sam wrzucę to u siebie na WiKi.
W trakcie prezentacji Łukasza, Wojtek (Securing) poruszył temat, który chciałbym nieco rozwinąć. Mianowicie zastanawiał się dlaczego IPS/IDS/WAF nie korzystają z "metadanych" dostępnych w aplikacji do tworzenia reguł. Tak, takie "metadane" mogą istnieć. Jako przykład podałem na przykład walidatory w ASP.NET czy też Struts Validator. Na podstawie tych danych można określić określić, jakich danych spodziewa się aplikacja i stworzyć, nawet (pół)automatycznie, zestaw reguł dla WAF. Problem w tym, że trochę nie ma to sensu. Dlaczego? Skoro informacja na temat walidacji brana jest z aplikacji, to można założyć, że aplikacja walidację realizuje (pomijam tu kwestię wyłączenia walidacji "bo coś nie działa" po przejściu aplikacji na produkcję). By miało to sens, w zasadzie WAF powinien odrzucać wszystko, co jest mu obce, czyli jeśli jakiś parametr nie ma reguły walidacji, żądanie, w którym taki parametr się pojawia, powinno być odrzucone. Wtedy okazuje się, że wygenerowane automatycznie reguły są tak "ciasne", że aplikacja nie działa. Reasumując - choć koncepcja jest słuszna, z wykonaniem może być (pewien) problem.
Do tematu generowania reguł dla WAF można jednak podejść w nieco inny sposób. Po prostu obserwując normalne zachowanie aplikacji (i ruch do niej kierowany), można stworzyć jej profil i w oparciu o niego stosowny zestaw reguł. Kiedy obserwować to "normalne zachowanie" aplikacji? Na przykład w trakcie testów akceptacyjnych. Teoretycznie w trakcie takich testów powinien być przetestowany każdy przypadek użycia, co pozwala na stworzenie w miarę pełnego profilu aplikacji. Teoria niestety jak zwykle rozmywa się z praktyką, o czym mógłby napisać na przykład Puklos, ale pisać mu się nie chce.
Dla ModSecurity powstał (powstaje) ModProfiler, który właśnie realizuje ten pomysł, system "sam się uczy". Osoby bardziej zainteresowane tym tematem mogą przeczytać sobie posty:
PS
Prezentacje znajdują się na stronie OWASP Poland Local Chapter.