Марат Вышегородцев

Марат Вышегородцев

Темы
Неделя
Nov 17, 2015 → Nov 22, 2015

Архив недели @touzoku

Вторник


Привет! Немного запоздало в эфире появляется @MaratVy (англ. твиттер про инфосек) или @touzoku (русск. твиттер про Японию)

Я работаю security инженером в японской интернет-компании Ракутен. В России она больше известна брендом Viber (недавний acquisition).

На этой неделе мы поговорим про: безопасность фронтенда и клиентской части, фреймворки, работу в японских компаниях и японских школьниц :-)

Разумеется, смело задавайте вопросы. Как говорится, よろしくお願いします! orz

Учебник "Я открыла глаза на функциональное программирование!". И снизу подпись: "Ну и отстойный код ты пишешь".
notion image

Ладно, к профессиональным темам: с чего начать фронтэнд-инженеру изучать безопасность? Ответ: с фундаментальных основ — Same-origin policy!

Вся браузерная безопасность строится вокруг концепта SOP и безопасных способов этот концепт нарушать.

Второй столп браузерной безопасности: DOM. Правильно организованное разделение кода от контента исключает вероятность XSS уязвимостей.

Ну и стандартный опрос для затравки разговора, ггг... Какой фреймворк по-вашему безопаснее?
🤔 72.3% ReactJS
🤔 27.7% Angular 2

Каждый день я буду советовать одну must-read книжку по безопасной разработке. #1 в моем списке: The Tangled Web. amazon.com/Tangled-Web-Se…

По этой книжке задают вопросы на собеседованиях в Гугл на позицию Information Security Engineer. Ее нужно обязательно прочитать всем.

Ну и в нагрузку к книжке, каждый день по рекомендованной научной статье с последних конференций. Сегодня: usenix.org/conference/use…

Ладно, все хотят японок. Вот вам видео из соседней геймдев компании "Кибер Агент". youtube.com/watch?v=nCNI3J…

Кибер Агент имеет славу компании молодых хипстероватых сотрудников. Даром что прям в центре тусовочного района Сибуя расположены.

Видео танцующих сотрудниц Кибер Агента напомнило вот это видео youtube.com/watch?v=5rcIsH… Ладно, что-то я отвлекся…

Многие рекомендую OWASP, но я его не люблю. Он слишком generic, быстро устаревает и не следует современным концептам.

Среда


Я уже понял, что опрос не про безопасность получился, а про любовь. И что Реакт это не фреймворк :-)

Пока все спят, расскажу про то, как попал в Японию. Step 1: Закончил ЮУрГУ по специальности "Теория управления": всякая лапласова математика

Step 2: Заинтересовался security еще в школе, начал тусить с единомышленниками, играть в CTF (команда More Smoked Leet Chicken).

Step 3: Начал учить японский for fun (to exercise my brain). Подал на японскую правительственную стипендию MEXT: ru.emb-japan.go.jp/EDUCATION/PROB…

Что удивительно, прошел. По ней можно выбрать любой вуз, ну я и выбрал Токийский университет. Закончил магистратуру, решил в Ракутен пойти.

В 2009 году, в Тодай поступил в 2011 (стипендию рассматривают год).

Где-то с 3 курса ЮУрГУ до 2 года в Тодае я работал в Информзащите пентестером. 5 лет хакал банки всякие и телекомы. В основном сети и веб.

Мой диплом, если кому интересно. Сумбурно написан немного, но идея мне до сих пор нравится repository.dl.itc.u-tokyo.ac.jp/dspace/handle/…

Если вкратце: то я предлагал включать SSL CA в браузеры на основе их репутации, которая считается из их продаж зафиксированных в блокчейне.

Голосовалка про безопасность React vs Angular 2 почти закончилась. Но все проголосовали "какой фреймворк мне больше нравится".

Забавно что все так любят React. На самом деле Angular 2 намного безопаснее. В нем можно использовать только статические темплейты.

Статические темплейты исключают возможность XSS целиком.

Была интересная вики на тему безопасности фреймворков, но что-то ее обновлять перестали code.google.com/p/mustache-sec…

А валиться с эксэпшенами в рантайме это садизм по-моему.

Окей, твиттер. Квиз тайм. Назовите в реплай 4 HTTP security хэдэра, которые нужно включить на каждом современном сайте. Можно сокращенно.

@jsunderhood потому что ты так и не ответил, почему нужно выбирать из одного фреймворка.
Я попросил выбрать из двух, т.к. я не спрашивал "какой самый безопасный" twitter.com/blia/status/66…

@jsunderhood бля
Не думаю, что nginx поймет такой хедер... twitter.com/volodymyrlut/s…

Можно не четыре называть, а сколько получится. Подсказка: у многих есть слово Security в названии.

Даже странно, что до сир пор нет @fullstackunderhood в дополнение к @jsunderhood, @cssunderhood и @backendsecret.
Нужно @robinhoodundertheredhood #съюморнул twitter.com/sapegin/status…

notion image

И в догонку к квизу всеми любимый опрос! Что безопасней использовать для коммуникации между разными origins?
🤔 25.5% JSONP
🤔 74.5% CORS

@jsunderhood почтовых голубей и морзянку на коротких волнах
Главное, чтобы в соответствии с RFC1149! twitter.com/naorunaoru/sta…

Интересно, никогда не было шанса сразу на такой куче народа проверить свои гипотезы относительно понимания веб-безопасности.

@jsunderhood но ведь реакт - это всего лишь рендерилка компонентов. Какой же это фреймворк? Фремворки это эмбер, релей, ангуляр.
Рендерилка — это самый важный кусок в безопасности. twitter.com/blia/status/66…

@jsunderhood @raxpost что непонтяно? ну точнее, что самое непонятное?
Самое непонятное было сначала, что японцам надо мычать в ответ. Аидзучи называется. twitter.com/sushkazzlo/sta…

@jsunderhood рассажи все же пересекаешься ли ты как то с tor/freenet/etc? И в каком ключе?
Особо не пересекаюсь twitter.com/silentimp/stat…

Вторая книжка из моего списка по безопасности веб-приложений: amazon.com/gp/aw/d/111802…

@jsunderhood есть ли какие то учебники/ресурсы, которые не только расскажут как безопасно, но и покажут какие есть уязвимости и как их…
Рекомендую начать с Damn Vulnerable Web Application. dvwa.co.uk Можно и попрактиковаться в хакинге twitter.com/silentimp/stat…

Еще вот мой коллега бывший классный секурити контест сделал сто лет назад, и до сих пор актуально. Там много веба: ahack.ru/contest/

Сегодняшняя научная статья про тайминг атаки на браузеры. Можете использовать, чтобы свой adtech подкрутить :-) securitee.org/files/timing-a…

Про HTTP заголовки для secuirty: несколько людей знают больше 4-х заголовков, еще несколько смогли назвать три.

Советую прогнать свой сайт через securityheaders.io и поглядеть каких не хватает.

Самый важные заголовоки для фронтэндов — это Content Security Policy, X-Frame-Options, X-Content-Type-Options, и X-XSS-Protection.

Как их правильно выставить лучше всего посмотреть на выдаче yandex.ru. В Яндексе ребята шарят в безопасности.

@jsunderhood и сколько оно обходится в месяц? Сколько вообще в месяц обходится жизнь в Токио на 1 человека?
Рядом с работой у нас снимают приличные квартиры за 150000 йен в месяц. Около 60 кв.м. Дорого, конечно, но это Токио twitter.com/silentimp/stat…

Средние зарплаты в Токио не очень высокие. Около $80K в год (до налогов) — это зарплата, после которой говорят "жизнь удалась".

Четверг


@jsunderhood X-Content-Type-Options=nosniff? А что, кто-то ещё автодетектит Content-Type?
Inernet Explorer все еще детектит twitter.com/subzey/status/…

@jsunderhood @mista_k @touzoku еще есть CORS: Allow-Control-Allow-Origin: * и все, привет родителям ;)
Да, но этот хэдэр наоборот ставить НЕ нужно :-) twitter.com/a66at/status/6…

32% предпочитают JSONP над CORS. Советик: не пользуйтесь JSONP ваще никогда, это тупо хак. CORS был придуман, чтобы решить эту проблему.

Единственный плюс JSONP — он работает в старых IE. Если у вас современный сайт, не пользуйтесь JSONP.

@barlog_m @jsunderhood ну я думаю по собственной воле его и не используют. А вот если API не поддерживает cors?
Значит надо дописать поддержку CORS? twitter.com/blia/status/66…

Важная заметка про хэдэр X-XSS-Protection. У него есть 3 значения: 0, 1, и 1; mode=block. Правильней всего использовать последнее.

Если же где-то сломалось что, то лучше вырубить его нафиг (выставить ноль). Единица — самый рискованный вариант.

@jsunderhood ну если api не твой? Например VK.com
Ну тогда либо ругаться на них, либо принять риск (они, наверно, знают что делают). twitter.com/blia/status/66…

@jsunderhood @a66at @mista_k @touzoku * ни к чему плохому не приводит, куки/auth не передаются. Да, даже при allow-credentials: true.
Зависит от того, что выдает ручка. Если прогноз погоды, то, конечно, можно что угодно ставить в CORS. twitter.com/sergeybelove/s…

Рекомендованная статья сегодня cure53.de/es6-for-penetr… Вообще Mario @0x6D6172696F Heiderich — это один из моих кумиров в плане вебсека.

Развивая тему крутых веб-безопасников. Топ ресерчеры: @hasegawayosuke @kinugawamasato. Классный еще slideshare.net/muneakinishimu…

Удивительно, из четырех самых крутых XSS-еров, три японца и один немец. В остальных секурити темах японцы явно проседают.

@a66at @jsunderhood @mista_k @touzoku анонимно, без кредов (basic auth/cookies). Где импакт?
Например, накрутить голосовалку на сайте. Или подгрузить сайт из корп. сети жертвы. twitter.com/sergeybelove/s…

@jsunderhood больше похоже на какое-то супер исключение, учитывая, что CORS используют обычно для API. Но ок, пусть будет так.
Еще есть целая пачка timing атак на кэшируемый контент. twitter.com/sergeybelove/s…

Пятница


notion image

Я хочу начать писать про TLS, и как его разворачивать на фронтэнде, но пятница, десять вечера. Коллеги из Испании и Германии приехали...

так что задавайте вопросы, буду отвечать :-)

@jsunderhood кем ты станешь когда вырастишь? ;)
Когда я вырасту, я стану grammar nazi. Вырастешь! Вырастешь!!! twitter.com/dcromster/stat…

@jsunderhood первый вопрос, что такое TLS?
Transport layer security. Кривоногий протокол, придуманный Netscape :-) twitter.com/aod_toxic/stat…

@jsunderhood отстань. Я тут играю роль бессмертного пони. Да ещё и в пятницу! :)
Давайте играть в силиконового ослика Федю :-) И каменное лицо. RT если читал журнал Хакер в 12 лет под партой. twitter.com/dcromster/stat…

Суббота


Один костыль затыкает другой, куча легаси, софт написан криво, нет четкой спецификации state machine twitter.com/kostyandrew/st…

@jsunderhood как ты любишь отдыхать в Японии? Был ли на лисоферме?
На лисоферме?! Не был. Люблю выездые активные виды спорта: open water, бег, вел. twitter.com/silentimp/stat…

@jsunderhood нравятся тебе японки? Японцы?
Нравятся точно так же, как и любые другие расы и национальности. twitter.com/silentimp/stat…

@jsunderhood что рекомендуешь посмотреть в Японии при случае?
Рекомендую полуостров Идзу летом, очень там классно. Или в горы, где-нибудь в Нагано. twitter.com/silentimp/stat…

@jsunderhood японцы правда такие извращенцы!? Или ты сейчас покупаешь женское нижнее бельё?))
А что в этом плохого? :-) twitter.com/talgautb/statu…

@jsunderhood увлечение секурити откуда пошло? Из ][?
Да, как сейчас помню когда купил свой первый журнал. Но интерес разломать что-нибудь был с раннего детства еще. twitter.com/shiroginne/sta…

@jsunderhood Эскейпинг - в шаблонизаторе, на клиенте/на сервере, по умолчанию On/Off? ;)
В новых фреймворках типа Angular 2 больше нет понятия "эскейпинг" даже. Просто данные биндятся как текст. twitter.com/kyprizel/statu…

Напишу про TLS. При разворачивании веб-морды важно спроектировать фронт так, чтобы он работал ТОЛЬКО через TLS.

Например, часто можно увидеть совет включать js вот так: <script src="//cdn.something.com/blah.js">. Забудьте этот рецепт.

Свой сайт выкатывать только через https, включая все ссылки. Mixed content — это самая частая ошибка фронтов и головная боль инфосеков

@jsunderhood что конкретно плохо? В смысле не безопасно? Почему
Потом сложно апгрейдить до TLS. Бывает, что для TLS домен другой (например, у google analytics). twitter.com/sushkazzlo/sta…

Какие алгоритмы и версии TLS правильно поддерживать на сервере? Отвечает Александр Друзь^W^W @ivladdalvi m.habrahabr.ru/company/yandex…

Так что проверяйте свой сайт на ssllabs.com и если там меньше "A" стоит, то шлите статью на Хабре своим админам.

Еще есть огромная секция изврата — это выбор алгоритма подписи сертификата. Есть 3 опции: RSA+SHA1, RSA+SHA2, ECDSA+SHA2.

В идеале надо поддерживать все три. Зайдите на ctftime.org через Chrome, увидите ECDSA сертификат. А если через IE, то RSA.

Проблема в том, что современные веб-серверы не умеют отдавать правильные сертификаты в сложных случаях.

Например Google Chrome на Windows XP SP1 говорит в Client Hello, что он умеет SHA2. #насамомделенет
notion image

Или, например, что лучше поддерживать AES_CBC без патча против BEAST или RC4? В cloudflare выбирают второй вариант — RC4 сложнее сломать.

Поддержка TLS для legacy-клиентов это просто nightmare. Поэтому лучше довериться специалистам и юзать грамотных CDN-щиков.

@jsunderhood практика показывает, что сложные случаи очень редки :) типовому фронтендеру об этом не нужно даже задумываться
См. мой последний совет :-) twitter.com/kyprizel/statu…

По моему скромному мнению, грамотные и дешевые CDN so far — cloudflare и fastly. Расскажите в реплаях, какими CDN вы пользуетесь?

@jsunderhood а про SSL-сертификаты можно? Сейчас стали предлагать бесплатные варианты, можно/нельзя их использовать, почему?
Let's encrypt по-моему прикольная тема. Но непонятно насколько широко он поддерживается уже (еще сам не смотрел). twitter.com/amureki/status…

Но этот патч явно не умеет эвристики в духе "если Хром на ХР СП1" :-) twitter.com/ivladdalvi/sta…

А какие CDN в России популярные? twitter.com/ivladdalvi/sta…

@jsunderhood Они только в декабре публик бету запускают. А их корневой уже вроде как засунули во всех браузерах ну или близко к этому
Помимо браузеров есть Linux trust store, NSS, curl, JDK и прочее добро.. Говорю же, TLS и PKI — это жаба с гадюкой twitter.com/pos_troi/statu…

Воскресенье


Чего-то я забыл книжек советовать каждый день, поэтому сразу несколько за раз. Отличная книжка: amazon.com/Bug-Hunters-Di…

Вот эту книжку я еще сам не читал, но она свеженькая. Прочитаю на досуге. amazon.com/gp/aw/d/146659…

А вот эту книжку я читал, но начинающим не советую. Если вы не менеджер security веб-команды, то можно не читать. amazon.co.jp/Threat-Modelin…

Из статей, что недавно читал, интересно про запаркованные домены (полезно для валидации мыл юзеров) internetsociety.org/doc/parking-se…

Вот еще статья с NDSS 2015 про тайпсквоттинг. Рекомендую читать и регать созвучные домены со своим :-) internetsociety.org/doc/seven-mont…

Вообще следите за публикациями NDSS, ACM CCS, Usenix Security, IEEE Security & Privacy. Хотя бы статьи про веб, полезно быть в курсе.

Читайте меньше Stack Overflow, больше официальной документации, исходных кодов и открытых issue на гитхабе.

Например, первый же ответ по запросу "how to generate random password javascript" выдает неверный результат. Пароль будет предсказуемый.

Из издательств, хорошие книги по веб безопасности у No Starch Press, Syngress и Wiley. У O'Reilly почти нет ничего по секьюрити толкового.

Личная просьба от @kyprizel: "не забудь пожалуйста сказать, что эскейпинг в шаблонизаторе должен быть по умолчанию включен!!! ))))"

Так что включайте (не выключайте) эскейпинг в шаблонизаторах, избегайте document.write и innerHTML в javascript, и не будет вам XSS.

Выдавайте все по HTTPS, включите CSP, не добавляйте динамический javascript от всяких левых баннерообменников.

Выполнив только эти простые шаги, вы обезопасите свой сайт лучше, чем 80% "сайтоделов".

Важно делать это даже для лэндингов. Самый простой, но небезопасный сайт может открыть целые ворота для фишинга и раздачи малвари.

С переменным успехом на этой неделе с вами был @touzoku (aka @MaratVy), безопасник из Ракутена, Токио. Мы разговаривали про веб-секьюрити

Спасибо всем большое за комментарии, конструктивную критику и участие в опросах. Если остались вопросы, задавайте, пока акк не отжали :-)

Я, наверно, не раскрыл тему японских школьниц, но тут нельзя сексистских твитов, так что сорри, пишите в мой личный твиттер.

Ссылки