Software security budowa bezpiecznych aplikacji

3

Click here to load reader

Transcript of Software security budowa bezpiecznych aplikacji

Page 1: Software security budowa bezpiecznych aplikacji

Autor: Tomasz Jarmuł, Sales Manager Poland, Enterprise Security Products, HP.

Budowa bezpiecznych aplikacji z HP Fortify

Przedsiębiorstwa i instytucje rządowe w coraz większym stopniu udostępniają w sieci dedykowane aplikacje wspomagające działalność danej organizacji lub realizujące istotne funkcje biznesowe. Nie są to standardowe produkty z pudełka, lecz własne lub pisane na zamówienie aplikacje, których funkcjonalność, efektywność a również bezpieczeństwo kontrolowane jest przez daną organizację. Bezpieczeństwo tych aplikacji uzależnione jest od wielu czynników i choć szeroka gama rozwiązań adresuje różne aspekty bezpieczeństwa aplikacji, to jednak zapewnienie bezpieczeństwa samego kodu pozostaje stosunkowo rzadko uwzględnianą kwestią.

Klasycznie przy w szkoleniu i ocenie pracy programistów zwraca się głównie uwagę na aspekty związane z funkcjonalnością, niezawodnością czy wydajnością, natomiast często zapomina się o bezpieczeństwie. Pozornie doskonały z funkcjonalnego punktu, efektywny kod źródłowy może zaowocować dziurawą aplikacją, która z upływem czasu będzie ujawniała coraz to nowe furtki dla hakerów. Zapewnienie bezpieczeństwa samych aplikacji stanowi to duże wyzwanie, gdyż na ogół mamy do czynienia z doraźnym poprawianiem luk, które albo ujawniane są przypadkowo albo podczas audytów bezpieczeństwa. Rzadko bezpieczeństwo uwzględniane jest na etapie programowania a jeszcze rzadziej w fazie koncepcyjnej.

Wg opublikowanego w 2011r. przez firmę HP raportu 2011 Top Cyber Security Risks Report obejmującego wyniki testów statycznych (dotyczących kodu źródłowego) 359 różnych aplikacji internetowych, 54% aplikacji było podatnych na stosunkowo proste ataki typu cross-site scripting, a bardziej wyrafinowanym atakom typu SQL injection uległo już 83% badanych aplikacji.Wspomniany wcześniej raport HP omawia testy dynamiczne (testowanie znanych podatności na działających aplikacjach) dotyczące 2714 aplikacji i również tutaj okazuje się, ponad 50% było podatnych na cross-site scripting, a 67% w niewystarczający sposób zabezpieczało przesyłane dane.

Aplikacje biznesowe stanowią obecnie najsłabsze ogniwo w łańcuchu zabezpieczeń systemów, czas zatem pomyśleć w jaki sposób można tworzyć nie tylko dobre, ale i bezpieczne programy. Programiści, kierownicy projektów i zespoły ds. bezpieczeństwa muszą wypracować metodologię pozwalającą na włączenie bezpieczeństwa do cyklu tworzenia oprogramowania.

Proces bezpiecznego tworzenia aplikacji

Zagadnienie nie jest oczywiście nowe, istnieją dobre praktyki, a modele bezpieczeństwa opracowują zrzeszające specjalistów grupy robocze. Należą do nich między innymi Open Software Assurance Maturity Model (OpenSAMM) pozwalający planować proces

Page 2: Software security budowa bezpiecznych aplikacji

bezpiecznego tworzenia aplikacji oraz model Building Security In Maturity Model (BSIMM), który powstał na bazie realnych doświadczeń 30 uczestniczących w inicjatywie firm. W pracach obu grup zaangażowana jest również firma HP oferująca rozwiązania HP Fortify wspomagające proces bezpiecznego tworzenia aplikacji.

Wspólną cechą powyższych modeli jest rozmieszczenie funkcji związanych z bezpiecznym tworzeniem aplikacji w czterech podstawowych domenach: w obszarze zarządzania (governance), procesie budowy aplikacji, weryfikacji i wdrożenia. W dalszej części artykułu omówimy poszczególne domeny i rozwiązania poprawiające bezpieczeństwo w ich obszarze.

Zarządzanie

Proces obejmujący definiowanie polityk, standardów oraz kontrolowanie ich przestrzegania. W ramach zarządzania powinno uwzględnić się również edukację – szkolenia, ich dopasowanie do potrzeb oraz implementację wiedzy w projektach.Ponieważ cykl życia oprogramowania obejmuje wiele faz będących w gestii różnych zespołów, zarządzanie bezpieczeństwem powinno być procesem nadrzędnym w stosunku do poszczególnych projektów programistycznych i powinno być spójne dla całego przedsiębiorstwa. Projekt wdrożenia odpowiednich standardów zarządzania może być zatem niezależny od poszczególnych inicjatyw programistycznych.

Budowa aplikacji

Wiedza, w jaki sposób aplikacja może zostać zaatakowana jest przekładana na praktyki przy projektowaniu i pisaniu kodu. W tym obszarze istotne jest przełożenie znajomości sposobów atakowania aplikacji (ataków takich jak SQL injection czy cross site scripting) na metodologię bezpiecznego tworzenia oprogramowania. Oczywistym sposobem jest pewnego rodzaju metoda prób i błędów – piszemy aplikację, sprawdzamy bezpieczeństwo w oparciu o wiedzę poszczególnych specjalistów a w przypadku znalezienia problemów staramy się znaleźć błędy w kodzie. Jeśli robione jest to skrupulatnie to wypadkowa aplikacja będzie bezpieczna, ale sam proces jej budowy wydłuży się o wiele miesięcy. Alternatywnym podejściem jest zastosowanie specjalistycznych narzędzi zawierających wiedzę ekspercką o zagrożeniach i efektywny silnik testujący kod źródłowy. Analizując kod przy pomocy HP Fortify Static Code Analyzer programiści mogą dowiedzieć się, jakie podatności po skompilowaniu będzie posiadała pisana przez nich aplikacja, otrzymać raport ułożony według stopnia zagrożenia i co najważniejsze uzyskać informację, które wiersze kodu źródłowego należy poprawić by uniknąć problemów.

HP Fortify oferuje również środowisko (Fortify Collaboration) umożliwiające współpracę zespołów programistycznych, analizujące wspólne efekty pracy i pozwalające na implementację poprawek w trakcie pracy. Fortify integruje się z szeroko stosowanymi

Page 3: Software security budowa bezpiecznych aplikacji

środowiskami deweloperskimi (IDE) umożliwiając śledzenie problemów z bezpieczeństwem analogicznie do innych błędów w kodzie.

Weryfikacja

Jak wspomnieliśmy wcześniej najlepiej by bezpieczeństwo było uwzględniane w całym cyklu programowania, jednak często mamy do czynienia z programami, za którymi stoją lata rozwoju – nie zawsze uwzględniającego dzisiejszy stan ekspozycji na ataki. Ręczne testowanie i szukanie błędów w złożonej strukturze kodu źródłowego jest żmudne a niekiedy prawie niemożliwe. Logicznym rozwiązaniem jest automatyzacja tego procesu przy pomocy narzędzi takich jak HP Fortify.

Istnieje również możliwość sprawdzenia kodu źródłowego w chmurze, w tym wypadku kod trafia do bezpiecznego centrum przetwarzania danych HP Fortify, gdzie poddawany jest testom a następnie zwracany jest szczegółowy raport zawierający listę błędów i rekomendacje jak je usunąć.

Wdrożenie

Do czasu pojawienia się nowej wersji, proces tworzenia oprogramowania zatrzymuje się po wdrożeniu, jednak z punktu widzenia bezpieczeństwa konieczne jest upewnienie się czy środowisko operacyjne (hardware, system operacyjny) jest skonfigurowane zgodnie z założeniami projektowymi. Błędy we wdrożeniu mogą mieć poważne konsekwencje. Po wdrożeniu konieczna jest również weryfikacja czy personel odpowiedzialny za utrzymanie aplikacji został odpowiednio przeszkolony. Okresowo, w trakcie trwania eksploatacji zalecane jest skanowanie działającej aplikacji w poszukiwaniu potencjalnych problemów. Tutaj z pomocą przychodzi oprogramowanie HP WebInspect umożliwiające automatyczne wykonywanie dynamicznych testów penetracyjnych w oparciu o stale aktualizowaną metodykę. W przypadku wykrycia podatności, wyniki skanowania przy pomocy WebInspect można skorelować z testami statycznymi Fortify SSA i dzięki temu raz na zawsze usunąć błędy z kodu źródłowego.