Архив недели @touzoku
Вторник
Привет! Немного запоздало в эфире появляется @MaratVy (англ. твиттер про инфосек) или @touzoku (русск. твиттер про Японию)
Я работаю security инженером в японской интернет-компании Ракутен. В России она больше известна брендом Viber (недавний acquisition).
На этой неделе мы поговорим про: безопасность фронтенда и клиентской части, фреймворки, работу в японских компаниях и японских школьниц :-)
Разумеется, смело задавайте вопросы. Как говорится, よろしくお願いします! orz
Учебник "Я открыла глаза на функциональное программирование!". И снизу подпись: "Ну и отстойный код ты пишешь".
Ладно, к профессиональным темам: с чего начать фронтэнд-инженеру изучать безопасность? Ответ: с фундаментальных основ — 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…
И в догонку к квизу всеми любимый опрос! Что безопасней использовать для коммуникации между разными 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…
Пятница
Я хочу начать писать про 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. #насамомделенет
Или, например, что лучше поддерживать 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), безопасник из Ракутена, Токио. Мы разговаривали про веб-секьюрити
Спасибо всем большое за комментарии, конструктивную критику и участие в опросах. Если остались вопросы, задавайте, пока акк не отжали :-)
Я, наверно, не раскрыл тему японских школьниц, но тут нельзя сексистских твитов, так что сорри, пишите в мой личный твиттер.