LINUX.ORG.RU

Google выпустил Native Client SDK

 , ,


0

0

Native Client - это кроссплатформенная технология с открытым исходным кодом от Google, позволяющая запуск нативного кода C/C++ в браузере. SDK основан на GNU Compiler Collection и доступен для Linux, Windows и Mac OS X. Поддерживаемые платформы x86, x86_64 и ARM. Разработчики заявляют, что технология Native Client безопаснее Flash и JavaScript, а так же значительно превосходит их по скорости выполнения. На текущий момент доступны клиент-плагины для браузеров Chrome, Safari, Firefox, и Opera.

>>> Подробности



Проверено: Aceler ()
Ответ на: комментарий от vga

vga> У кода нет доступа никуда, кроме своей страницы и процессора.

Вспоминается баг в штеудовских процессорах, позволяющий внедрить трояна в компьютер в обход операционной системы.

Quasar ★★★★★
()
Ответ на: комментарий от Reset

Reset> IE это 60% рынка и только фанатики с этим не считаются

Только ущербные фанатики не считаются с тем, что IE дерьмо by design, а также не поддерживает современные технологии, и орут, что IE - это 60% рынка. И при этом забывают о том, что IE скоро скопытится благодаря тому, что надвигается очередной бум мобильных платформ.

Quasar ★★★★★
()
Ответ на: комментарий от demmsnt

demmsnt> Безопасность за счет того, что в STDLIB нет функций доступа за пределы клетки...

А если таковые функции написать? Безопасность вся коту под хвост пойдёт.

Quasar ★★★★★
()
Ответ на: комментарий от mkfifo

> кто там уже успел разобраться...?



# доступ к чтению/редактированию Document-Object-Model из ГНК —


будет?




# возможность задействования ГНК на web-страницце но не нарисовав его


ГНК-квадратик (даже размером в 1 пиксель) — можно будет осуществлять?





отвечаю сам.. (посмотрел ГНК-примеры)

# доступ к DOM — скорее всего есть.. покрайней мере функции проинициализированных ГНК-модулей запускаются прямо из Javascript!

# ГНК-модуль во ВСЕХ примерах загружался через <embed ... /> , :-/
...
значит чтобы НЕ отрисовывать однопиксельные ГНК-квадритики — видимо придётся засовывать эти <embed ... /> — внутрь <html><head><!--СЮДА/--></head></html>

mkfifo
()
Ответ на: комментарий от Joe_Bishop

Ссылка на видео выше. Есть и документы, детально рассказывающие, что именно делается, ну и есть собственно код плагина, можно посмотреть, его там не очень много.

vga ★★
()
Ответ на: комментарий от vga

vga> Как? Учти, что любой левый call вырезается верификатором.

Последовательность кода, приводящая к доступу в обход ОС, например. Вырежет?

Quasar ★★★★★
()

>плагины для браузеров Chrome, Safari, Firefox, и Opera.

По ссылке нашёл только хром.

GladAlex ★★★★★
()

Нет, погодите-погодите. Т.е. по сути гугль скачал НЕЧТО уже скомпилированное, проверил, и если ОК, то запустил? Тогда скажите, пожалуйста, чем отличается это от антивирусной проверки кода?

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

alexey_
()
Ответ на: комментарий от vaulter

левый jmp в стек

ret

и т. д. Все это тоже, ЕМНИМ там для арма например вообще далеко не прыгнешь, только в пределах своего кода, это обеспечивается их компилятором, в котором все эти инструкции не используются, а заменяются другими, а верификатор проверяет, что в коде таких инструкций нет.

vga ★★
()

Тоесть они что, jmp запретят что ли? Или mov? В умелых руках даже jmp+mov+int могут натворить ТА-КО-ГО, что гуглу мало не покажется.

alexey_
()
Ответ на: комментарий от alexey_

чем отличается это от антивирусной проверки

Тем, что он не работает с базой вирусов, а всего лишь с перечнем запрещенных ассемблерных инструкций. Код не может ничего вызвать за своими пределами. Код, который пытается - просто не запускается.

Ява работает так же, только там код не очень нативный. То есть это очень похоже на ява-машину, потому что не все инструкции доступны, а любые левые инструкции приводят к тому, что код не работает.

vga ★★
()

Да и что толку от фильтрации компилятором? Я могу откомпилировать, потом открыть HEXEDIT-ом и вставить прям в бинарник парочку новых инструкций. И что тогда???

Бинарник подписан? Ну если мой GCC смог его подписать, значит ключи у него есть по определению, и значит модифицированный тоже можно подписать.

alexey_
()

гугле изобрёл активех. ура. у того древнего активеха тоже доступа никуда не было но сплойты на нём до сих пор успешно работают.

занимался бы гугль лучше сугубо поисковиком. цены б не было.

gigabito
()
Ответ на: комментарий от vga

Плюс есть еще такая штука, как модификация кода на лету. Т.е. например в памяти написан «помятый» код, который внешне выглядит как белиберда. Или как просто данные в сегменте данных.

После чего при помощи обычных MOV он переносится в код, и потом через какой-нибудь XOR расшифровывается и запускается. Во время скачивания в коде все было нормально. Инструкции типа MOV запретить нельзя по определению, т.к. без них ни одна программа работать не будет.

Что тогда?

alexey_
()
Ответ на: комментарий от alexey_

Оно не компилятором фильтруется, а верификатором на целевой машине. Добавлю, что пока что никто верификатор не обошел, если хочется - вперед. Ну и еще раз рекомендую посмотреть видео по ссылке выше, лучше чем там я не расскажу.

vga ★★
()
Ответ на: комментарий от alexey_

Плюс есть еще такая штука, как модификация кода на лету.

Нет такой штуки там. Просто нет.

vga ★★
()
Ответ на: комментарий от vga

Я так понимаю что плагин скачивает программу вообще в другом формате, т.е С/C++ компилируются в графы ветви которых в принципе не могут указывать на запрещенные функции.
Далее граф преобразуется в нативный код под платформу.

Тут вообще не будет возможности что-либо делать на уровне ассемблера.

OxiD ★★★★
()
Ответ на: комментарий от gigabito

у того древнего активеха тоже доступа никуда не было

Что, серьезно? А мужики из МС и не знают, что у них такую фичу реализовали.

vga ★★
()
Ответ на: комментарий от OxiD

Нет, не в другом. Это обрезанный нативный код, в котором не допускаются некоторые инструкции. А то, что ты говоришь, тоже есть, это NaCl на LLVM, но оно еще в разработке.

vga ★★
()
Ответ на: комментарий от OxiD

Гм, хотя может я долго сидел в криокамере, и LLVM они уже тоже сделали.

vga ★★
()
Ответ на: комментарий от mkfifo

и вот:

http://www.omploader.org/vNGJubw/Screenshot-get_video-1.png
(тут видно что элемент «applcitation/x-nacl-srpc» сделан размером в нульль пикселей :-D, а отображение всего — через Document-Object-Model.... правда засунуть <embed.../> внутрь <head.../> они недогадались чото %) %))

mkfifo
()
Ответ на: комментарий от mkfifo

тут видно что элемент «applcitation/x-nacl-srpc» сделан размером в нульль пикселей

Угу. ЕМНИП в NPAPI просто нельзя без «окна», поэтому и приходится вот так вот...

vga ★★
()
Ответ на: комментарий от OxiD

Я тоже так сначала подумал. Но выясняется что скачивает он-таки бинарник. Если скачивает байт-код, то беру свои слова обратно.

Но если бинарник, то все-таки скажите мне, пожалуйста, как все-таки можно отфильтровать «хорошее» применение MOV/JMP/INT/RET от «плохого»?
Или вы не согласны что этими инструкциями можно натворить ОГО-ГО?

Например в этом роде:

mov eax, <АДРЕС ИЗ СЕГМЕНТА ДАННЫХ> ; читаем из сегмента данных кусочек «зашифрованной» каки с запрещенными инструкциями
xor eax, <КОНСТАНТНАЯ МАСКА> ; Как-то его расшифровываем. Альтернатива - SHL
mov eax, <АДРЕС ПАМЯТИ ВНУТРИ ПРОЦЕССА БРАУЗЕРА> ; и дарим «подарочек» браузеру.

Альтернатива последней строчке:
mov eax, <АДРЕС ВНУТРИ СВОЕГО ЖЕ КОДА>
jmp <АДРЕС ВНУТРИ СВОЕГО ЖЕ КОДА, куда записана кака>

И как с этим предполагается бороться? Все инструкции, что я описал - абсолютно безобидные на вид и пройдут любую проверку. А в сегменте данных можно любые бинарные данные по определению т.к. туда кладут всякие ресурсы, картинки и т.п.

alexey_
()
Ответ на: комментарий от alexey_

посмотри видо презентаци... там описано как с этим борються

anonymous
()
Ответ на: комментарий от alexey_

Если интересно именно это - видео где-то с 30-й минуты.

vga ★★
()
Ответ на: комментарий от alexey_

Вкратце JMP/INT/RET - обрезано

mov eax, <АДРЕС ПАМЯТИ ВНУТРИ ПРОЦЕССА БРАУЗЕРА> - в другой процесс? Просто упадешь.

vga ★★
()

Граждане, а кто-нибудь может популярно объяснить как оно работает, как собирается, сторонное библиотеки можно будет использовать, например, Qt?

GladAlex ★★★★★
()
Ответ на: комментарий от alexey_

> А в сегменте данных можно любые бинарные данные по определению

Сегмент данных можно сделать неисполняемым, и при попытке выполнения данных получите #GP

sjinks ★★★
()
Ответ на: комментарий от RedPossum

А если ты имел ввиду операционки, то это не важно, там где работают перечисленные браузеры (Windows, Linux, MaсOS). Ну и код открыт, давно, можно на всякие фряхи с солярисами портировать, если хочется. Хотя подозреваю, что там и линуксовая версия откомпилится. А если хайку - ну это вопрос к хайкистам, а не к гуглу.

vga ★★
()
Ответ на: комментарий от vga

>Гм, а я не так все это понял. NaCl скачивает откомпилированный код для нужной платформы, верифицирует его на опасные инструкции (очень быстро) и если все хорошо - запускает.

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

Тоесть если делать как говориш ты, то на текущий момент нет скажем ARM, я написал программу и она компилируется под ВСЕ существующие на текущий момент платформы. А тут выходит АРМ и я должен озаботится о доступности моей программы для АРМ?

Кроме того либы тогда тоже надо тянуть...

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

Кто тут сведущий, подскажите как там на самом деле?

demmsnt
()
Ответ на: комментарий от RedPossum

Ну так это в первую очередь для ChromeOS, так что не удивительно как раз.

vga ★★
()
Ответ на: комментарий от Quasar

>А если таковые функции написать? Безопасность вся коту под хвост пойдёт.

Ну как их написать? Ассемблерные вставки использовать? Так они для каждой платформы разные и вероятно запрещены. Там скорее всего еще и все jump под контролем

demmsnt
()
Ответ на: комментарий от demmsnt

Ну есть и такое как ты пишешь, через LLVM, я там ссылку выше давал. Но в этом случает код плагина усложняется, что может добавить дырок. А либы - их нет, кажется, там один бинарник получается, все вкомпилено в него.

я написал программу и она компилируется под ВСЕ существующие на текущий момент платформы

Ну а так ты получишь сразу три бинарника (x86, x86-64 и ARM), клиент загрузит нужный. В том же макосе что-то подобное, только бинарник один, универсальный, в который запихнуты все поддерживаемые платформы.

vga ★★
()
Ответ на: комментарий от alexey_

>Да и что толку от фильтрации компилятором? Я могу откомпилировать, потом открыть HEXEDIT-ом и вставить прям в бинарник парочку новых инструкций. И что тогда???

На своей машине? Ну делай, лучше rm -rf / сразу делай.

Яж говорю там по описанию окончательная сборка бинаря на клиенте.

demmsnt
()
Ответ на: комментарий от alexey_

>После чего при помощи обычных MOV он переносится в код, и потом через какой-нибудь XOR расшифровывается и запускается. Во время скачивания в коде все было нормально. Инструкции типа MOV запретить нельзя по определению, т.к. без них ни одна программа работать не будет.

В наше время запрет модификации сегмента кода и исполнения сегмента данных и все.

demmsnt
()
Ответ на: комментарий от RedPossum

Да, особым, там дальше рассказывается. Один и тот же бинарник будет работать в Linux-X86, MacOS-X86 и Windows-X86. То есть операционка - неважно, важна архитектура процессора.

vga ★★
()
Ответ на: комментарий от alexey_

>Я тоже так сначала подумал. Но выясняется что скачивает он-таки бинарник. Если скачивает байт-код, то беру свои слова обратно.

Бинарник и байткод собственно говря это одно и тоже. Вон у трансметы проц внутри соооооооовсем по другому работал. Так, что то, что бинарник для Интеля, для Трансметы становится байткод?

demmsnt
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.