Bezpieczeństwo WebAplikacji
Prelegent: Tomasz Banasiak
Bezpieczeństwo WebAplikacji
Runda początkowa!
Jakie znacie zagrożenia dla WebAplikacji?
Bezpieczeństwo WebAplikacji
Agenda
- Zagrożenia na poziomie infrastruktury
- Zagrożenia na poziomie kodu - backend
- Zagrożenia na poziomie kodu - frontend
- Zagrożenia na pozomie człowieka: użytkownika, redaktora, administratora
Bezpieczeństwo WebAplikacji
Zagrożenia dla infrastruktury
Bezpieczeństwo WebAplikacji
Distributed Denial Of Service
Skutki:
- Przeciążenie infrastruktury serwerowej
- Brak dostępu do aplikacji przez klientów
- Potencjalne wycieki pamięci
Przeciwdziałanie:
- Poprawna konfiguracja serwerów (firewalle, balancery)
- Narzędzia anty-ddos (np. CloudFlare)
- Dystrybucja serwerów na wiele podsieci
Bezpieczeństwo WebAplikacji
0days
Skutki:
- Wykorzystanie błędów w oprogramowaniu do przejęcia kontroli nad serwerem
- Wyłączenie lub zablokowanie serwera lub usługi
- Kradzież danych
Przeciwdziałanie:
- Poprawna konfiguracja serwerów (strategia)
- Regularna (automatyczna) aktualizacja oprogramowania
- Zasada ograniczonego zaufania
Bezpieczeństwo WebAplikacji
Ataki hakerskie
Skutki:
- Przejęcie kontroli nad infrastrukturą IT
- Wykorzystanie infrastruktury do działalności przestępczej
- Kradzież danych, wyłączanie usług, podmiana witryny..
Przeciwdziałanie:
- Poprawna konfiguracja serwerów (dostępy, zabezpieczenia)
- Regularna (automatyczna) aktualizacja oprogramowania
- Zasada ograniczonego zaufania, minimalny dostęp
Bezpieczeństwo WebAplikacji
Zagrożenia dla backendu
Bezpieczeństwo WebAplikacji
Upload plików
Skutki:
- Potencjalne ryzyko uruchomienia złośliwego kodu
- Celowe zużycie dostępnej przestrzeni dyskowej
- Rozprzestrzenianie złośliwego oprogramowania
Przeciwdziałanie:
- Sprawdzony walidator przesłanych danych
- Upload do zewnętrznego serwera, np. CDN
- Zasada ograniczonego zaufania
Bezpieczeństwo WebAplikacji
Przykład
// Check if only image has been uploaded
if (!preg_match('/^[a-zA-Z0-9\-\.\_]{2,100}\.(jpg|gif|png)/i', $fileName)) {
throw new Exception('Unsupported file type!');
}
- picture.jpg
- some-Other_picture09.png
- some-nasty-code.jpg.php
Bezpieczeństwo WebAplikacji
SQL Injection
Skutki:
- Kradzież lub uszkodzenie danych
- Nadanie sobie uprawnień (np. admina)
- Modyfikacja zachowania oprogramowania
Przeciwdziałanie:
- Korzystanie ze sprawdzonego ORM
- Walidacja każdej danej wykorzystywanej w SQL
- Rzutowanie typów
Bezpieczeństwo WebAplikacji
Przykład
$stmt = $db->prepare('SELECT * FROM table WHERE AND name = ?');
$stmt->bindValue(1, $this->input->get('name'), PDO::PARAM_STR);
$stmt->execute();
$stmt = $db->prepare('SELECT * FROM table WHERE name = ? '
. ($this->input->get('age') ? ' OR age = ' . $this->input->get('age') : ''));
$stmt->bindValue(1, $this->input->get('name'), PDO::PARAM_STR);
$stmt->execute();
http://app.com/api/get?name=.&age=1 OR 1=1
SELECT * FROM table WHERE name = '.' OR age = 1 OR 1=1
Bezpieczeństwo WebAplikacji
Błędy w logice aplikacji
Skutki:
- Wykonywanie niedozwolonych akcji
- Uszkodzenie danych
- Wycieki pamięci, przeciążenie usług
Przeciwdziałanie:
- Testowanie kodu pod kątem bezpieczeństwa
- Używanie sprawdzonych wzorców projektowych
- Code-Review, audyty bezpieczeństwa
Bezpieczeństwo WebAplikacji
Kontrola dostępu
Skutki:
- Wykonywanie niedozwolonych akcji
- Kradzież danych
- Dostęp do zabezpieczonych części aplikacji
Przeciwdziałanie:
- Użycie sprawdzonego wzorca autoryzacji
- Testy bezpieczeństwa
- Code-Review, audyty bezpieczeństwa
Bezpieczeństwo WebAplikacji
Przykład
$adminRole = ADMIN_NULL;
if ($this->input->post('user') == 'admin' && $this->checkAdminPassword($_POST['password'])) {
$adminRole = ADMIN_ADMIN;
}
if ($this->input->post('log_in_as_a_user') {
$adminRole = ADMIN_USER;
}
Bezpieczeństwo WebAplikacji
Boty, automaty
Skutki:
- Wielokrotne duplikowanie wykonywanych akcji
- Crawling, czyli kradzież informacji
- Próby dodania niechcianych informacji (spamu)
Przeciwdziałanie:
- CSRF
- Zabezpieczenie przed wielokrotnymi requestami
- Logowanie podejrzanych zachowań
Bezpieczeństwo WebAplikacji
Zagrożenia dla frontendu
Bezpieczeństwo WebAplikacji
Modyfikacja parametrów
Skutki:
- Wykonywanie akcji nie przewidzianych we froncie
- Wstrzykiwanie fałszywych danych do aplikacji
- Uzyskanie nieautoryzowanego dostępu do danych
Przeciwdziałanie:
- Walidacja wszystkich przychodzących danych
- Walidacja uprawnień dla każdego requestu
- Dbanie o brak wskazówek dla atakującego
Bezpieczeństwo WebAplikacji
Sniffning
Skutki:
- Podsłuchiwanie wrażliwych danych
- Ataki man-in-the-middle
- Przechwycenie danych autoryzacyjnych
Przeciwdziałanie:
- Użycie SSL dla wrażliwych części aplikacji
- Trzymanie wrażliwych danych po stronie serwera
- Autoryzacja za pomocą bezpiecznych tokenów
Bezpieczeństwo WebAplikacji
Zagrożenia dla użytkownika końcowego
Bezpieczeństwo WebAplikacji
Clickjacking
Skutki:
- Wykonywanie akcji "w imieniu" użytkownika
- Rozprzestrzenianie informacji bez wiedzy użytkownika
- Użycie uprawnień użytkownika do przejęcia aplikacji
Przeciwdziałanie:
- Analiza wystawionych publicznie metod
- Zabezpieczanie akcji tokenami / cookies
- Edukacja użytkowników
Bezpieczeństwo WebAplikacji
Pishing
Skutki:
- Kradzież danych użytkownika
- Wykonywanie akcji "w imieniu użytkownika"
- Wprowadzenie użytkownika w błąd
Przeciwdziałanie:
- CSRF
- SSL
- Edukacja użytkowników
Bezpieczeństwo WebAplikacji
Podsumowanie
- Zabezpieczenia na poziomie architektury aplikacji
- Sprawdzona metoda kontroli dostępów
- Dobry zespół Administratorów
- Brak zaufania do przesłanych danych
- Testy i kontrola jakości
Bezpieczeństwo WebAplikacji
Dziękuję za uwagę!
Kontakt ze mną:
E-mail: tomasz.banasiak@rst.com.pl
WEB: http://banasiak.pro
Bezpieczeństwo WebAplikacji
By Tomasz Banasiak
Bezpieczeństwo WebAplikacji
- 939