scholar_vit: (Default)
[personal profile] scholar_vit
Stephen Checkoway, Hovav Shacham and Eric Rescorla will present the first TeX-based virus at the next USENIX.

The paper is here.

Date: 2010-04-16 04:34 pm (UTC)
vitus_wagner: My photo 2005 (Default)
From: [personal profile] vitus_wagner
Класс!! Но вообще, насколько же сложен этот язык, что эксплойта пришлось ждать тридцать с хвостом лет.

Date: 2010-04-17 09:37 am (UTC)
From: [identity profile] igoretz.livejournal.com
Так там, судя по статье, не TeX-эксплойт, всего лишь используется то, что реализация MiKTeX позволяет писать куда угодно, в том числе в папку автозапуска; а собственно malicious часть должна быть не на TeX, а на JS (ну или VB). То есть все достаточно тривиально (и защититься установкой подходящих виндовых прав должно быть несложно).

То, что Turing-complete кодом можно задосить сервер, тоже понятно, и тоже вроде в статье не приведено чего-либо более нетривиального, чем \loop...\repeat.

Date: 2010-04-16 05:41 pm (UTC)
From: [identity profile] daniilm.livejournal.com
ну и как теперь жить дальше?

Date: 2010-04-16 05:48 pm (UTC)
From: [identity profile] ygam.livejournal.com
Rule 34.1 of the Internet: if it is Turing-complete, you can write a virus in it.

Date: 2010-04-17 10:05 am (UTC)
From: [identity profile] igoretz.livejournal.com
Даже если это и так, это никого волновать не должно: ни одна из реализаций не является Turing-complete, из-за ограничений на ресурсы.

(И я не слышал о практической концепции вируса, использующей именно универсальную вычислимость, а не конкретные мисфичи; а было бы интересно).

Date: 2010-04-16 10:32 pm (UTC)
From: [identity profile] faceted-jacinth.livejournal.com
Видели ли http://cseweb.ucsd.edu/~hovav/talks/blackhat08.html -- чуваки обнаружили, что внутри достаточно больших библиотек типа libc обычно есть Форт-система, которую можно использовать для исполнения direct-threaded code injected to the stack via buffer overflow, с игнорированием NX бита.

Типа, в современных ОС стек и прочие volatile memory areas помечаются NX (No Execute) битом, поэтому стандартный buffer overflow с переписыванием адреса возврата на записанный далее в стек код не работает.

Но есть замечательный приём, использовавшийся в большинстве реализаций Форта: представим программу как последовательность адресов написанных на ассемблере процедур плюс какой-то регистр, указывающий на текущую исполняемую Форт-инструкцию, каждая такая процедура в конце своего исполнения должна увеличить значение этого регистра и выполнить косвенный jump по указываемому им адресу. Причём разумеется процедуры могут использовать и изменять значение этого виртуального Instruction Pointer, например, есть процедура LIT которая читает следующий адрес как число, пушит его в особый стек и увеличивает указатель не на 1, а на 2. То есть "LIT 10 LIT 20 ADD PRINT" (где всё, кроме чисел, является указателями на соответствующие процедуры) печатает "30".

Ну и вот, 80x86 Stack Pointer является совершенно замечательным кандидатом на роль виртуального Instruction Pointer, потому что однобайтовая инструкция ret делает в точности то, что нам нужно: уменьшает SP (поэтому программа должна быть записана в обратном направлении) и прыгает на указываемый им адрес.

Вот эти чуваки в своей оригинальной статье обнаружили, что если воспринимать libc (например) как просто кусок случайных данных, то там есть достаточно интересных последовательностей инструкций заканчивающихся ret, чтобы построить из них Тьюринг-полный интерпретатор, да ещё и умеющий вызывать функции ОС. Причём, если мне не изменяет память, ни один из использованных ими ret не был оригинальной инструкцией, все были кусками каких-то других инструкций, которые случайно оказались имевшими нужное численное значение.

Вспомнил я про это потому, что я же правильно понимаю, что TeX является кривым вариантом Форта, без компиляции и IMMEDIATE слов, поэтому в нём например очень криво работают вложенные \if ? Впрочем, в статье всё как-то довольно просто и без изысков -- можно читать исполняющийся файл, можно писать что угодно куда угодно в файловую систему, ну и всё.

Date: 2010-04-17 10:09 am (UTC)
From: [identity profile] igoretz.livejournal.com
ret-based - здорово, не знал, спасибо за ссылку.

Profile

scholar_vit: (Default)
scholar_vit

January 2019

S M T W T F S
  12345
678 9101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 1st, 2026 09:13 pm
Powered by Dreamwidth Studios