deemru / Chromium-Gost

Chromium с поддержкой алгоритмов ГОСТ
https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=9991
MIT License
394 stars 43 forks source link

Стало много попыток найти библиотеки #7

Closed mikhailnov closed 4 years ago

mikhailnov commented 4 years ago

С новым патчем, когда его переделали на статическую линковку, в strace -f стало видно очень много попыток найти библиотеки:

user@pay2:/tmp$ cat chromium.log | grep -i /opt/cprocsp
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
562   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
562   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
562   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
562   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
562   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
562   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
533   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
534   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
562   open("/opt/cprocsp/lib/amd64/libcapi20.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (Нет такого файла или каталога)
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
532   open("/opt/cprocsp/lib/amd64/libssp.so", O_RDONLY|O_CLOEXEC <unfinished ...>
user@pay2:/tmp$ 

При этом Криптопро не установлен.

со старым патчем было вот так:

user@rosa-2016 ~ $ strace -f chromium-browser 2>&1 | grep gostssl
[pid   138] open("/usr/lib64/chromium-browser/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/lib64/tls/x86_64/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/lib64/tls/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/lib64/x86_64/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/lib64/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/usr/lib64/tls/x86_64/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/usr/lib64/tls/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/usr/lib64/x86_64/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid   138] open("/usr/lib64/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>

А если gostssl.so присутствует в системе, но Криптопро нет, то вот так было:

user@rosa-2016 ~ $ strace -f chromium-browser 2>&1 | grep gostssl
[pid   337] open("/usr/lib64/chromium-browser/gostssl.so", O_RDONLY|O_CLOEXEC <unfinished ...>
user@rosa-2016 ~ $
user@rosa-2016 ~ $ strace -f chromium-browser 2>&1 | grep /opt/cprocsp
user@rosa-2016 ~ $ 

Это все самосборный Хромиум (https://abf.io/import/chromium-browser-stable), а не готовые бинарники отсюда. Я его собирал еще со старым патчем до рефакторинга и исходил из того, что если у пользователя нет криптопро, то ничего страшного, не помешает. С новым патчем в принципе все так же, но смущает множество попыток найти библиотеки. Код не смотрел, не вникал, почему так происходит.

deemru commented 4 years ago

Принято, да, как-то подзабыли, что без КриптоПро тоже надо чисто работать. Исправим.

mikhailnov commented 4 years ago

Отлично, спасибо! А в чем был смысл перехода на новую схему линковки, можно в кратце, если не секрет?

deemru commented 4 years ago

Не секрет.

Chromium постоянно движется в сторону закручивания гаек от уязвимостей, вирусам больно, но сторонним библиотекам и приложениям от этого тоже жить с каждой версией всё сложнее.

Вот например классная история с антивирусом: https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=107684#post107684

Итого, начиная с 77 версии на Windows была запрещена любая загрузка библиотек не из системного каталога ОС, что просто нивелировало наш подход с динамической загрузкой.

Было решено перебраться в общий с Chromium-ом бинарник, здесь хоть как-то можно жить.

На остальных системах вектор тот же, например на MacOS уже начали экспериментальное тестирование ограничений системных вызовов предопределённым заранее набором: https://chromium.googlesource.com/chromium/src.git/+/f46f318737e0c51ef280dd89106d37ce253c1ade%5E%21/#F10

deemru commented 4 years ago

Исправлено в https://github.com/deemru/chromium-gost/releases/tag/78.0.3904.97