?

Log in

No account? Create an account

Previous Entry | Next Entry

TeX-based virus

Stephen Checkoway, Hovav Shacham and Eric Rescorla will present the first TeX-based virus at the next USENIX.

The paper is here.

Tags:

Comments

( 7 comments — Leave a comment )
vitus_wagner
Apr. 16th, 2010 04:34 pm (UTC)
Класс!! Но вообще, насколько же сложен этот язык, что эксплойта пришлось ждать тридцать с хвостом лет.
igoretz
Apr. 17th, 2010 09:37 am (UTC)
Так там, судя по статье, не TeX-эксплойт, всего лишь используется то, что реализация MiKTeX позволяет писать куда угодно, в том числе в папку автозапуска; а собственно malicious часть должна быть не на TeX, а на JS (ну или VB). То есть все достаточно тривиально (и защититься установкой подходящих виндовых прав должно быть несложно).

То, что Turing-complete кодом можно задосить сервер, тоже понятно, и тоже вроде в статье не приведено чего-либо более нетривиального, чем \loop...\repeat.
daniilm
Apr. 16th, 2010 05:41 pm (UTC)
ну и как теперь жить дальше?
ygam
Apr. 16th, 2010 05:48 pm (UTC)
Rule 34.1 of the Internet: if it is Turing-complete, you can write a virus in it.
igoretz
Apr. 17th, 2010 10:05 am (UTC)
Даже если это и так, это никого волновать не должно: ни одна из реализаций не является Turing-complete, из-за ограничений на ресурсы.

(И я не слышал о практической концепции вируса, использующей именно универсальную вычислимость, а не конкретные мисфичи; а было бы интересно).
faceted_jacinth
Apr. 16th, 2010 10:32 pm (UTC)
Видели ли 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 ? Впрочем, в статье всё как-то довольно просто и без изысков -- можно читать исполняющийся файл, можно писать что угодно куда угодно в файловую систему, ну и всё.
igoretz
Apr. 17th, 2010 10:09 am (UTC)
ret-based - здорово, не знал, спасибо за ссылку.
( 7 comments — Leave a comment )

Profile

knot
scholar_vit
scholar_vit

Latest Month

November 2017
S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930  

Tags

Powered by LiveJournal.com
Designed by Paulina Bozek