Wprowadzenie
Profil klienta
Beesset specjalizuje się w projektowaniu i wdrażaniu zaawansowanych rozwiązań programowo-sprzętowych dla transportu publicznego i pokrewnych sektorów. Firma oferuje systemy dynamicznej informacji pasażerskiej, systemy biletu elektronicznego oraz narzędzia do zarządzania flotą. Dostarcza kompleksowe rozwiązania, w skład których wchodzą: dedykowane portale webowe, aplikacje mobilne i oprogramowanie IoT, np. dla kasowników biletów.
O projekcie
Audytowany przez nas system służy do obsługi krakowskiej Strefy Czystego Transportu (SCT). Umożliwia kierowcom rejestrację pojazdu w celu uzyskania pozwolenia na wjazd do strefy. W tym procesie użytkownik podaje numer rejestracyjny, a system automatycznie sprawdza w CEPiK-u, czy pojazd spełnia normy emisji spalin. Następnie generowana jest opłata oraz odpowiednia nalepka. System udostępnia API, które umożliwia innym systemom i aplikacjom weryfikację prawa do wjazdu do SCT.
Audytowany system składał się z dwóch głównych komponentów:
- System składania wniosków – panel dla obywateli, umożliwiający rejestrację pojazdu, weryfikację jego zgodności z przyjętym algorytmem norm oraz dokonanie opłaty i wygenerowanie nalepki.
- Panel administracyjny – narzędzie do przeglądania złożonych wniosków oraz zarządzania ustawieniami systemu, np. szablonem wysyłanych wiadomości e-mail.

Cel audytu
Firma Beesset zgłosiła się do ImpiCode z prośbą o przeprowadzenie kompleksowego audytu bezpieczeństwa i architektury oprogramowania. Audyt był wymagany przez odbiorcę systemu. Również samej firmie Beesset zależało na nim, gdyż dąży do zapewnienia najwyższego poziomu bezpieczeństwa oraz zgodności z najlepszymi praktykami branżowymi.
Wyzwania
Zagrożenia i badane podatności
Celem audytu były dwie aplikacje webowe, z czego jedna z nich pełniąca funkcję panelu dla obywateli jest dostępna w Internecie dla wszystkich. Ponadto system przechowuje dane użytkowników, które nie powinny być ujawnione. W takim wypadku bardzo istotne jest wyeliminowanie możliwych furtek bezpieczeństwa chroniąc system przed wyciekiem zarówno danych jak i informacji o architekturze i użytych technologii.
System został poddany analizie zarówno pod kątem standardowego użytkowania jak również scenariuszy celowych ataków mających na celu destabilizację systemu lub uzyskanie dodatkowych informacji. Następnie dokonano analizy kodu, aby ocenić zgodność z najlepszymi praktykami oraz zidentyfikować potencjalne podatności niewykryte w etapie testów penetracyjnych. Wszystkie używane biblioteki zostały sprawdzone pod kątem znanych podatności w zastosowanych wersjach. Na sam koniec przeanalizowano całą architekturę systemu i zastosowane zabezpieczenia.
Przykłady badanych podatności:
- ataki SQL injection,
- ataki Cross-Site Scripting,
- bezpieczeństwo API i używanych kluczy,
- badanie obsługi błędów,
- badanie walidacji wejścia,
- próby obejścia uwierzytelnienia.
Audyty bezpieczeństwa odgrywają kluczową rolę w procesie tworzenia oprogramowania. W dobie, gdy ochrona danych jest priorytetem, a nawet krótkotrwała przerwa w działaniu aplikacji może skutkować poważnymi stratami, identyfikacja potencjalnych podatności staje się niezbędna. Świadomość istnienia luk w projektowanym systemie pozwala na wdrożenie odpowiednich zabezpieczeń przed ich wykorzystaniem, co zwiększa niezawodność systemu oraz minimalizuje ryzyko strat finansowych.
Regularne audyty umożliwiają nie tylko wykrywanie zagrożeń, ale także optymalizację zabezpieczeń i dostosowanie ich do zmieniającego się środowiska IT. Dzięki temu organizacje mogą skutecznie przeciwdziałać atakom i zapewnić ciągłość działania swoich usług. Audyty bezpieczeństwa to nie tylko reakcja na potencjalne zagrożenia, lecz przede wszystkim proaktywne podejście do zarządzania ryzykiem.



Standard w jakim wykonano audyt
Audyt został wykonany na podstawie ogólno uznawanych standardów, między innymi wykorzystaliśmy standard organizacji OWASP (Open Web Application Security Project), która to udostępnia ogromną checklistę znanych podatności do zweryfikowania. W projekcie wykorzystaliśmy najnowszą jej wersję 4.03.

Do oceny poziomu zagrożenia wykorzystaliśmy między innymi system CVSS w wersji 4.0, który klasyfikuje w skali od 0 do 10 podatności. W końcowym raporcie audytu pogrupowaliśmy podatności na 5 kategorii w zależności od uzyskanych punktów:
Krytyczna | 9.0 - 10 |
Wysoka | 7.0 - 8.9 |
Średnia | 4.0 - 6.9 |
Niska | 0.1 - 3.9 |
Brak wpływu na bezpieczeństwo | 0.0 |

Wykorzystywane narzędzia w audycie aplikacji
Przeprowadzenie audytu systemu webowego wymaga dokładnego sprawdzenia podatności, w tym również wykonania testów penetracyjnych. Na szczęście dostępne są specjalistyczne narzędzia, które znacznie przyspieszają audyt oraz minimalizują ryzyko błędów. Poniżej przedstawiamy niektóre z narzędzi użytych podczas audytu:
- ZAP 2.15.0 — Wszechstronne narzędzie stosowane w różnych aspektach audytu, pozwalające m.in. na przechwytywanie żądań i wykonywanie testów automatycznych.
- sqlmap — Narzędzie skoncentrowane na identyfikacji i analizie podatności związanych z SQL injection.
- nmap — Program do skanowania otwartych portów oraz analizy bezpieczeństwa sieciowego.
- bearer — Statyczny skaner kodu identyfikujący potencjalne podatności w kodzie oraz użytych funkcjach i bibliotekach.
Rezultat
Przebieg audytów
W pierwszej kolejności firma Beesset powierzyła nam wykonanie audytu bezpieczeństwa, zawierał on między innymi testy penetracyjne.
Po wykonanym audycie przekazaliśmy klientowi dokument z podsumowaniem oraz rekomendacjami do wdrożenia. Analizowany przez nas system był bardzo dobrze zabezpieczony i zaprojektowany z zachowaniem dbałości o kwestie bezpieczeństwa. Przyczyniło się to do braku podatności o krytycznym poziomie bezpieczeństwa i pojawieniu się tylko jednej podatności, o wysokim poziomie zagrożenia oraz pojedynczych o poziomach niższych.
Nasz klient zaaplikował wszystkie sugestie wynikające z raportu i zlecił nam ponowy re-audyt. Ponowne przetestowaniu aplikacji nie wykryło żadnych podatności, czyniąc system w pełni zgodny z wymaganymi standardami bezpieczeństwa, w tym standardem OWASP.
Zespół ImpiCode wykazał się profesjonalizmem, rzetelnością i zaangażowaniem na każdym etapie współpracy. Projekt był dobrze zorganizowany, a prace przebiegały zgodnie z ustalonym harmonogramem. Zespół potrafił elastycznie reagować na nietypowe sytuacje i zmieniające się wymagania.
Komunikacja była sprawna i przejrzysta, co ułatwiało wspólne podejmowanie decyzji i szybką reakcję na pojawiające się potrzeby. Mieliśmy poczucie, że nasze uwagi są uwzględniane na bieżąco.
Efekty współpracy spełniły nasze oczekiwania. Zespół ImpiCode to solidny partner, którego możemy zarekomendować firmom poszukującym sprawdzonego wykonawcy oprogramowania.



W ramach tych prac weryfikowaliśmy między innymi podatności w zastosowanych bibliotekach. Warto zwrócić uwagę, że nawet używając jedynie sprawdzonych i najpopularniejszych bibliotek nie mamy gwarancji, że dane rozwiązanie w danej wersji nie ma podatności. Do wszystkich wykrytych podatności zaproponowaliśmy sposób ich naprawienia (czasami wystarczyła aktualizacja biblioteki, wgranie patch z poprawką lub zastosowanie alternatywnego narzędzia). Programiści klienta wdrożyli odpowiednie zmiany, czyniąc tym samym system bezpieczny na wszystkie znane podatności we wszystkich używanych przez nich bibliotekach w momencie wykonywania audytu.
Na samym końcu audytowaliśmy całą architekturę systemu oraz przeanalizowaliśmy zastosowane mechanizmy bezpieczeństwa. System okazał się bardzo dobrze zaprojektowany i nie wymagał wprowadzania poprawek. W wyniku tego audytu powstał dokument opisujący zastosowane rozwiązania i oceniający poziom bezpieczeństwa infrastruktury i aplikacji na bardzo wysoki.
Współpraca z zespołem Beesset przebiegała sprawnie i efektywnie. Materiały oraz wymagane dostępy do systemów zostały przekazane terminowo, co pozwoliło uniknąć opóźnień w realizacji prac. Kod systemu został napisany zgodnie z dobrymi praktykami programistycznymi, co znacząco ułatwiło jego analizę.



Wnioski końcowe
System stworzony przez firmę Beesset został zaprojektowany i zaimplementowany przy zachowaniu należytej staranności o bezpieczeństwo i z zastosowaniem dobrych praktyk. Na żadnym etapie nie zostały ujawnione krytyczne luki bezpieczeństwa, zaś nieliczne o niższej randze zostały naprawione i ponownie zweryfikowane. System spełnia rygorystyczne wymogi między innymi standardu OWASP.
Posiadając choćby najlepszy zespół programistów, przed ostatecznym wypuszczeniem produktu na rynek, warto sięgnąć po audyt bezpieczeństwa. Programiści nie są w stanie posiadać wiedzy o wszystkich błędach, jakie wystąpiły w używanych przez nich bibliotekach, mogą przeoczyć zmianę działania jakiejś funkcji lub zapomnieć o wyłączeniu wszystkich niebezpiecznych rzeczy w domyślnej konfiguracji (np. wypisywanie stack trace). Dopiero przeprowadzenia audytu sprawdza wszystkie obszary bezpieczeństwa w usystematyzowany sposób. Część testów odbywa się w sposób zautomatyzowany, eliminując dodatkowo ryzyko błędu ludzkiego. Sam zaś koszt audytu stanowi niewielki ułamek całego systemu a jest w stanie znacząco poprawić bezpieczeństwo danych i systemu.
Inne nasze realizacje
Zaufali nam:
Polski Związek Motorowy
Adamed
Polska Agencja Prasowa
Astor
IFX Payments
TEB Edukacja
Fundacja Moc Pomocy
Elemental Holding
French Touch
Polski Komitet Normalizacyjny
TU
Bergakademie Freiberg
Bank Nowy BFG
Narodowe Centrum Promieniowania Synchrotronowego SOLARIS
Astorino Kawasaki Robotics
DTK&W Zespół Ogłoszeniowy
Opegieka
Crazy shop
PartyBox
WUOZ w Krakowie
Uniwersytet Medyczny w Łodzi
Grupa Mo
Jeleniogórska Organizacja Turystyczna
eFitness
Instytut Badań Literackich PAN
Danhoss
Fundacja Sztuki, Przygody i Przyjemności ARTS
Opennet.pl
Centrum Medyczne Intermed
Centrum Rozwoju Edukacji Edicon
Winner Europe
Po amputacji
MamMoc.pl
EtnoStoria
Widzisz Wszystko
EMKA Project
NowaLed ILL
Eco Light LED
LoxiMide
Fundacja AVLab.pl
RCC Nova
Vector Controls
Virtual SMS
Parus Holdings
Biuro Partner
Optime.AI
M2M Team