W sieci pojawił się bardzo interesujący wpis na temat bezpiecznego programowania. Czytamy:
Muszę przyznać, że pierwsze dwie mnie zaniepokoiły...
Czy naprawdę jest tak źle. Czy rzeczywiście większość programistów twierdzi, że problem ich nie dotyczy? Czy firmy faktycznie robią tak mało, żeby przekazać swoim pracowników podstawową wiedzę z zakresu bezpieczeństwa? I wreszcie, czy 65% programistów nie czuje po prostu potrzeby dokształcania się w tym zakresie?
Dziwię się, bo sam należę do umiarkowanych (ale jednak) paranoików, jeśli chodzi o bezpieczeństwo i nie jawi mi się ta dziedzina jako jakiś "rocket science", coś nie do przejścia. To raczej kilka zasad, na których przestrzeganie stać każdego, choć wymaga cierpliwości i nie chodzenia na skróty. Widząc takie liczby ciarki przechodzą po plecach i aż strach korzystać z jakichkolwiek systemów informatycznych...
Niebawem będzie miała miejsce konferencja CONFidence 2009, na której jedna z sesji poświęcona będzie właśnie bezpieczeństwu aplikacji. Jak sięgnę pamięcią, bardzo mało miejsca poświęcane było na konferencjach Java (JDD, nasz TechConf, Javarsovia, etc.) właśnie tej tematyce. A przecież byłoby o czym opowiadać i może powinniśmy, jako społeczność, włączyć tę tematykę do harmonogramów również naszych konferencji?
Ciekawi mnie jak dużą wagę przywiązuje się w Waszych projektach do aspektów bezpieczeństwa? Czy są robione regularne audyty kodu? Czy macie dobrych testerów? Myślę, że to dobry temat na jedną z najbliższych ankietek!
Comments
Re. Bezpiecznie programowanie
Cześć Piotr,
Wiele projektów pisania aplikacji webowych w dużych firmach jest nastawiona na wyniki. Aplikacja musi działać. A bezpieczeństwo jest często rzeczą drugorzędną. Dlatego tak rzadko spotyka się ludzi, którzy musieli napisać bezpieczną aplikację.
Szefostwo zakłada, że jak się korzysta z najnowszych technologii to są one bezpieczne. Również twierdzenie że "74% programistów uważa, że za bezpieczeństwo odpowiadają administratorzy systemów" jest częściowo prawdziwe, przede wszystkich w korporacjach. Ale to wg mnie nie programiści tak uważają, tylko mówią im to menedżerowie IT. Oni to są zdania, że to dział security od systemów jest odpowiedzialny za bezpieczeństwo. Ludzie z security ustawiają firewalle, konfigurują systemy tak żeby wszystko było bezpieczne. Ale jak wiadomo to nie wystarczy. Czego świetnym przykładem była seria artykułów jakiś czas temu w polskiej prasie na temat dziur w polskich bankach elektronicznych, domach aukcjowych itp. To były właśnie standardowe błędy, popełniane przez ludzi, którzy wcześniej się nie spotkali z tymi problemami.
No bo bądźmy szczerzy, i wróćmy do czasów kiedy pisaliśmy na studiach pierwsze aplikacje webowe w naszych projektach. Czy one wtedy w 2000 roku były aż tak bardzo bezpieczne?
Jednak z tym bezpieczeństwem to jest tak jak napisałeś, to nie jest "rocket science". Osobiście zajmowałem się tym problemem dosyć intensywnie przed trzema laty. Byłem odpowiedzialny za architekturę i implementację aplikacji internetowej dla zachodniego banku należącego do jednej z największych korporacji finansowych na świecie.
Napisanie bezpiecznej aplikacji webowej dla systemu bankowego w JAVAie przy pomocy popularnych frameworków MVC nie jest specjalnie trudne. Podstawa to mądra architektura. Stosowanie się do best-practicies, poznanie wszystkich popularnych błędów jak kodowanie parametrów w JSP, bronienie się przed obcym JavaScriptem i takie tam różności. Jest to dobrze opisane na stronie OWASP Top 10.
Wracając do Twoich pytań.
1. Jak dużą wagę przywiązuje się do bezpieczeństwa w projektach?
To zależy od projektu. Wiadomo, że systemy które maja globalną "publiczność" i bardzo duże obciążenie muszą być bezpieczniejsze niż te lokalne i mało popularne. Druga rzecz to potencjalne straty jakie firma może ponieść jeśli system zostanie "złamany".
W projektach, w których ja brałem udział ludzie podchodzili do tematu bezpieczeństwa rozsądnie.
2. Czy są robione regularne audyty kodu?
W bankach są określone procesy. Robi się audyty kodu. Część rzeczy pisze się na zasadzie 2 par oczu. I niezależne jednostki przeprowadzają kontrolowane ataki, która ma działać w internecie. Jeśli zostają wykryte błędy wtedy trzeba to poprawiać. I test przeprowadzać ponownie.
W innych instytucjach bywa różnie, wszystko zależy od projektu
3. Czy macie dobrych testerów?
To równiez zależy od projektu. Są takie projekty, w których jest cały sztab testerów i testują oni wszystko. Do tego test security jest przeprowadzany przez ludzi technicznych, którzy żyją z hakowania aplikacji.
Reasumując, bezpieczeństwo aplikacji jest dla ludzi. Każdy skrupulatny programista, który jest na czasie z nowymi rozwiązaniami i potrafi dobrze zaprojektować aplikację z mądrymi wastwami, nie będzie miał większych problemów z pisaniem bezpiecznych aplikacji. Dodatkowo, jeśli już raz w życiu napisaliśmy bezpieczny system, to później każdą następną aplikację już piszemy tak żeby była bezpieczna od początku. To wchodzi w krew, jak dobre obiektowe pisanie kodu. Stąd może poprostu brak jakiegoś większego zainteresowania tym tematem.
A jak to jest w Twoim projekcie? Czy teraz macie jakieś ciekawe zagadnienia do rozwiązania w tej materii?
Pozdrawiam,
Gabriel.
Z ciekawych zagadnień,
Z ciekawych zagadnień, którymi ostatnio się zajmujemy w Polar Rose to integracja z Facebook Connect. W najnowszej odsłonie zrezygnowaliśmy z własnych loginów i haseł i polegamy na integracji z FC, a w niedalekiej przyszłości również z kontami google i dowolnymi, zgodnymi z OpenID. Jest to bardzo wygodne, bo to nie my martwimy się o te najbardziej wrażliwe dane - w ogóle nie mamy ich w naszej bazie danych.
Tak wiec zostają mam typowe problemy zwiazane z XSS, SQL-injection itp. oraz ograniczenie dostępu do niektórych danych osobom, które nie powinny ich widzieć. W usuwaniu błędów w tym zakresie pomaga nam niezwykle szczwana bestia, czyli nasz Tester, który jest bezlitosny i jeśli tylko się da, rozwali wszystko co napiszemy w drobny mak.