Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid Tomasz Kuczyński Dział Aplikacji Tomasz Nowak Zespół Bezpieczeństwa Wrocław, 2.12.2010 r. Konferencja i3: internet - infrastruktury - innowacje
Wprowadzenie Projekt krajowy Polska Infrastruktura Informatycznego Wspomagania Nauki w Europejskiej Przestrzeni Badawczej Pl-Grid http://www.plgrid.pl Zadanie 6 Bezpieczeństwo e-infrastruktury W ramach podzadania 6.2 Monitorowanie bezpieczeństwa i zarządzanie zagrożeniami, zgodnie z wypracowanymi procedurami, prowadzi się testy bezpieczeństwa rozwiązań przed ich wdrożeniem Obecnie możemy już opublikować wyniki analiz 3
Informacje ogólne Liferay darmowe rozwiązanie portalowe Wersja 5.2.3 z serwerem aplikacji Tomcat 5.5.27 Testy objęły podstawową funkcjonalność portalu wykluczono aplikacje dodatkowe (np. portlety wiki, blogi) Kompleksowy test oprogramowania Co dziś pokażemy: Błędy oraz przykłady złego kodowania Demonstracja przejęcie konta administratora Demonstracja przejęcie konta użytkownika 4
Metodyka testów Analiza kodu źródłowego Java Wielka liczba linii Wsparcie narzędzi do statycznej analizy (FindBugs) Test penetracyjny Dogłębna analiza reakcji oprogramowania na dane ukierunkowana na podniesienie uprawnień Użycie proxy, hakerskich wtyczek do przeglądarek Weryfikacja bibliotek pod kątem znanych błędów bezpieczeństwa w używanych wersjach 5
Błędy w kodzie (1) HTTP response splitting public class RenderPortletAction extends Action { public ActionForward execute(..., HttpServletRequest request, HttpServletResponse response) {... String ajaxid = request.getparameter("ajax_id");... if (ajaxid!= null) { response.setheader("ajax-id", ajaxid);... 6
Błędy w kodzie (2) Flow control by exceptions protected String getcode() throws SystemException { String code = PwdGenerator.getPassword(KEY1 + KEY2, 8); try { shoppingcouponpersistence.findbycode(code); return getcode(); catch (NoSuchCouponException nsce) { return code; 7
Błędy w kodzie (3) Sprawdzenie wartości obiektu niegwarantujące poprawnego użycia metody if (is == null) { // zmienna is typu InputStream _log.error("invalid path " + path); String template = StringUtil.read(is); // mimo błędu próba odczytu is.close(); Niepotrzebne i błędne użycie mechanizmu synchronizacji public void setportalport(httpservletrequest request) { if (_portalport.intvalue() == -1) { synchronized (_portalport) { _portalport = new Integer(request.getServerPort()); 8
Błędy w kodzie (4) Błąd w szczególnym przypadku: Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE int y = Math.abs(randomGenerator.nextInt()) % numsaltchars; Nieskończona pętla public static String getportlettitle(portlet portlet, long companyid, String languageid) { return getportlettitle(portlet, companyid, languageid); Ignorowanie wyniku datestring.replacefirst(_todaystring, dateformatdate.format(yesterday)); Błąd w warunku (podwójne sprawdzenie jednego argumentu) private String _geturl(httpservletrequest request, boolean resetmaxstate, boolean resetrenderparameters) throws... {... if (!resetmaxstate &&!resetmaxstate) { return url;... 9
3. Administrator wchodzi na profil użytkownika 4. Przeglądarka administratora wysyła dane o sesji administratora 2. Prośba o sprawdzenie profilu 1. Zapisanie ataku na profilu użytkownika 5. Zły użytkownik przejmuje sesję administratora 10
3. Mail z wstrzykniętym atakiem oraz nowym hasłem 4. Wejście na profil z załączonego linku i Cancel 5. Przeglądarka użytkownika wysyła dane o sesji użytkownika 1. Próby logowania na serwerze przy użyciu znalezionych identyfikatorów kont 2. Wywołanie funkcji przypomnienia hasła 6. Przejęcie sesji użytkownika 11
Kto używa Liferaya 12
Więcej informacji Liferay http://www.liferay.com Szkolenia Zespołu Bezpieczeństwa PCSS http://security.psnc.pl/szkolenia.html Open Web Application Security Project http://www.owasp.org FindBugs http://findbugs.sourceforge.net 13
Dane kontaktowe Zespół Bezpieczeństwa PCSS http://security.psnc.pl security@man.poznan.pl Tomasz Kuczyński docentt@man.poznan.pl Tomasz Nowak tomasz.nowak@man.poznan.pl PCSS http://www.pcss.pl office@man.poznan.pl 14
Pytania, dyskusja 15
Dziękuję za uwagę!