LINUX.ORG.RU

Защищаемся от Meltdown и Spectre

 , ,


14

6

Привет

Предлагаю собирать инфу о Meltdown и Spectre.

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

О чем говорим:

Spectre     - Variant 1 - 2017-5753 - Bounds Check Bypass
Spectre     - Variant 2 - 2017-5715 - Branch Target Injection
Meltdown    - Variant 3 - 2017-5754 - Rogue Data Cache Load
BranchScope -           -           - Attack on Directional Branch Predictor
(еще восемь - см. ниже)
LazyFP                  - 2018-3665 - Exploiting lazy FPU state switching
Wiki
8 новых уязвимостей

SpectrePrime, MeltdownPrime:
То, же что и Spectre, Meltdown, но использующие альтернативный способ восстановления данных из кеша, который увеличивает точность восстановления.
Считается что программные методы защиты от Spectre и Meltdown также защищают и от SpectrePrime и MeltdownPrime. А вот аппаратная защита должна отельно учитывать учитывать SpectrePrime и MeltdownPrime.
Источник: Opennet

BranchScope:
Напоминает второй вариант атаки Spectre но отличается способом создания условий для влияния на состояние блока предсказания переходов.
Метод был протестирован на процессорах Intel Sandy Bridge, Haswell и Skylake, и продемонстрировал уровень ошибок менее 1%.
Утверждается, что предложенный для Spectre V2 метод защиты (Retpoline) не эффективен против BranchScope, но для блокирования атаки предложен иной метод защиты, который может быть реализован как программно, так и на аппаратном уровне. По мнению компании Intel предложенная в обновлении микрокода техника защиты от первого варианта Spectre (на основе инструкции LFENCE) будет эффективна и для защиты от атаки BranchScope. Для защиты важных данных также могут применяться типовые криптографические методы защиты от утечки по сторонним каналам.
Больше деталей - на OpenNet.

LazyFP:
Через проведение атаки по сторонним каналам атакующий может определить значения регистров FPU, MMX, SSE, AVX и AVX-512, используемых другим процессом. Например, в данных регистрах могут содержаться параметры для криптографических вычислений и имеющий доступ к локальной системе злоумышленник может попытаться использовать их для определения ключа шифрования. При использовании систем виртуализации проблема может применяться для определения состояния регистров другой гостевой системы или другого процесса в текущей гостевой системе.
Больше деталей - на OpenNet, Intel, blog.cyberus-technology.de.

Уязвимые архитектуры:
- Meltdown - только Intel, притом практически все начиная с выпуска 1995 года (источник).
- Spectre - все процессоры с фичей speculative execution, то есть почти все современные процессоры, в т. ч. Intel, AMD, ARM, IBM Power, IBM System Z (источник).
- Еще 8 - подтверждено на Intel на AMD и ARM не тестировалось (источник).
- LazyFP - только процессоры линейки Intel Core. Не проявляется на чипах Intel Atom/Knights и CPU AMD.

Тесты на наличие уязвимостей:
- https://github.com/IAIK/meltdown/ - реальный эксплоит.
- https://github.com/speed47/spectre-meltdown-checker - это скорее проверяет наличие фиксо/mitigations в системе.
- https://github.com/tesla707/Spectreprime-attack - SpectrePrime реальный эксплоит - https://blog.cyberus-technology.de/posts/2018-06-06-intel-lazyfp-vulnerabilit... - здесь только куски эксплоита в разделе «The Attack», рабочие версии пока не опубликованы. Если знаете лучше или более полные - говорите.

Защита:
Meltdown
Для защиты активируется Kernel page-table isolation (KPTI, старое название - KEISER)
1. Обновление ядра до версий 4.14.12, 4.9.75, and 4.4.110 или выше (Gentoo Wiki)
2. Активировать Kernel/User page tables isolation в ядре - опция ядра CONFIG_PAGE_TABLE_ISOLATION (askubuntu.com) - доступно только для 64-битного ядра.
- Отключать, если не в ядре - с помощью параметра ядра nopti (источник) или echo 0 > /sys/kernel/debug/x86/pti_enabled (источник - Redhat). Нужно владельцам процессоров не-Intel (например, AMD), так как KPTI дает проседание по performance'у, а для AMD это не актуально, так как уязвимость затрагивает только Intel.
Патчинг компиляторов и гипервизоры не требуется.
Как я понял, это полностью устраняет проблему Meltdown.
Фичи процессоров process-context identifiers (PCID) и invalidate process-context identifiers (INVPCID) позволяет снизить проседание перформанса из-за включения KPTI (источник, источник, источник). Доступна только на процессорах Intel: PCID - некоторые Westmere family, Sandy Bridge, INVPCID - Haswell и выше (источник). Также требуется ядро 4.14.12 или выше (источник). Проверить наличие фич в процессоре можно в /proc/cpuinfo (источник)

Spectre
1. Подгрузка микрокода процессора - Intel Microcode update 01/08/2018
- Мануал для Gentoo
- Если я правильно понял, то критерий успеха подгрузки микрокода процессора с фиксом можно узнать так: grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo (askubuntu.com)
Но как я понял, микрокод есть не для всех процессоров, в частности нет для Core 2 Duo . Подозреваю что здесь полный перечень Интеловских процессоров, для которых есть обновление.
2. Поддержка на уровне ядра начиная с какой верии - непонятно):
- Indirect Branch Restricted Speculation (IBRS) (Как выставлять). Притом у него 2 режима, подробней здесь. как проверять/выставлять - Redhat. Но - создана новая атака
- Indirect Branch Prediction Barrier (IBPB) (SGX - Software Guard Extensions) - тоже описан здесь и здесь, как проверять/выставлять - Redhat. Но новая атака SgxPectre показывает что данный механизм не эффективен.
- STIBP - иногда упоминают (раз, два), но детальной информации вообще не нашел.
3. Патчинг компиляторов
- Для GCC:
- - Добавление опции -mindirect-branch, -mindirect-branch-loop, -mfunction-return, -mindirect-branch-register с которыми нужно перекомпилить... всё? Где скачать - непонятно. Насколько полно решают проблему - непонятно.
- - retpoline - добавление опции -mindirect-branch=thunk-extern. С ней нужно перекомпилить ядро с наложенным патчем (где скачать?). Пока есть для gcc 8 (mailing list) и gcc 7.3 (OpenNet, Phoronix); в планах портировать фикс gcc 6/5/4. Похоже, что для процессоров архитектуры Skylake и более поздних проблему решает не полностью (источник).
- LLVM - TBD
4. Патчинг гипервизоров - https://github.com/hannob/meltdownspectre-patches , раздел Virtualization Не ясно закрывает ли это проблему полностью.
- VirtualBox 5.2.6 и 5.1.32 (источник).
5. Патчинг браузеров (потому как уязвимость можно эксплуатировать даже через JavaScript):
- Chrome 63 - нужно включить опцию chrome://flags#enable-site-per-process ; в Chrome 64 включено по дефолту.
- Firefox 57.0.4 (источник)

LazyFP
- В ядре Linux защита была реализована ещё в феврале 2016 года, путём применения по умолчанию режима Eager FP (eagerfpu=on) и удаления возможности активации Lazy FP. Уязвимость затрагивает ядра Linux до версии 4.6 или системы с процессорами без поддержки инструкции XSAVE (до Sandy Bridge), в которых по умолчанию применялся режим Lazy FP. В старых ядрах Linux для защиты можно использовать опцию «eagerfpu=on», которая присутствует начиная с ядра 3.7.
Влияние на performance:
- Хороший отчет Redhat о том, какое проседание performance'а на каких операциях
- Бенчмарки Phoronix: разные режимы IBRS/IBPB, Spectre, Meltdown
. Как сказано выше, наличие PCID и INVPCID в процессорах делает проседание по performance'у меньше.
Методология (как проверить у себя) - TBD
- Конкретный софт: bind

В каких процессорах Intel какая защита релизована
Habr: Больше кофе, меньше кофеина: Intel 9th Gen (часть 1), искать глава «Исправления безопасности оборудования и программного обеспечения»

Открытые вопросы:
1. Ваш набор тестов на наличие уязвимостей Meltdown и Spectre
2. Ваш рецепт по фиксу
3. Как включать/выключать IBPB и STIBP?
4. Ссылки на патчи для компиляторов
5. Приведите тест (не результаты, а методику), который бы показал влияние на performance
6. Если покупать железо, как знать что оно не подвержено Meltdown и Spectre?

Пожалуйста, дополняйте информацию, особенно там, где написано TBD, где видите неточности или пробелы. Давайте вместе расставим точки над i и победим этот недуг.

★★★★★

Добавлять .git в конце ссылок на Github не надо.

atsym ★★★★★ ()

Пройдись граблями по комментариям данного топика, там есть много ссылок
>>> Meltdown и Spectre — названия двух атак на процессоры Intel/AMD/ARM64/Power

Также стоит порыться на HackerNews по комментариям к новостям по теме Meltdown/Spectre
>>> http://news.ycombinator.com

В Твиттере может что-то быть

atsym ★★★★★ ()
Последнее исправление: atsym (всего исправлений: 1)
Ответ на: комментарий от anonymous

На гитхабе есть похожий пост:
https://github.com/hannob/meltdownspectre-patches/blob/master/README.md

Добавил в топик - про виртуализацию там хорошо описано.
Но остальные вопросы открыты: работа с IBPB и STIBP, где брать патчи для gcc (особенно для 6.4), как запускать performance тесты и др.

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)

Как я понял, это полностью устраняет проблему MeltDown на Intel и AMD.

Так AMD процессоры не подвержены этому эксплойту, разве нет?

anonymous ()

А ЧО ЭТО ТАКОЕ

Как я понял, наличие PCID в процессорах делает проседание по performance'у меньше.

anonymous ()

поясните за retpoline, если я пересоберу ядро с ним это поможет? или нужно пересобрать все приложения и либы?

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

retpoline - добавление опции -mindirect-branch=thunk-extern. С ней нужно перекомпилить ядро. Версии копилятора и где взять патчи - непонятно. Похоже, что для процессоров архитектуры Skylake и более поздних проблему решает не полностью (источник).

Kroz ★★★★★ ()

а как проверить, подвержена ли моя система Meltdown и Spectre?
есть какие-то скрипты или тесты, которые проверяют?

teod0r ★★★★★ ()
Последнее исправление: teod0r (всего исправлений: 1)

Допустим, с Meltdown более-менее понятно - включаем KPTI (4.14.12+, 4.9.75+, 4.4.110+) - и волосы гладкие и шелковистые

А может кто пояснить за спектр?
1. Обновление микрокода необходимо, но не достаточно, дополнительно нужны патчи для поддержки IBRS на ядро. Или нет?
2. Где есть ядро с этими патчами IBRS из коробки?
В гентушном ядре вроде нету, в рачике в linux-hardened тоже не видно.
Я так понимаю, подсуетились только всякие Red Hat и SUSE, даже в убунте пока болт?
А в основные ванильные ветки эти патчи добавлять собираются, и когда?
3. Есть другой вариант - retpoline и пересборка всего софта, при этом, эффективность невысокая на Skylake и выше.
Как бы то ни было, опять же, где берут этот патченный компилятор, и где ебилды?
4. Всё, что выше, относится только к CVE-2017-5715, а с СVE-2017-5753 надо что-то делать отдельно?

TheAnonymous ★★★★★ ()

А вот мне интересно, как держать систему в актуальном состоянии и при этом защититься от самих патчей против Meltdown и Spectre.

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

IIUC, полной защиты от Spectre нет. Всё перечисленное - mitigations.

1. Обновление микрокода необходимо, но не достаточно, дополнительно нужны патчи для поддержки IBRS на ядро. Или нет?

Да.

3. Есть другой вариант - retpoline и пересборка всего софта, при этом, эффективность невысокая на Skylake и выше.

AFAIK, поддержка trampolines еще пилится.

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

А вот мне интересно, как держать систему в актуальном состоянии и при этом защититься от самих патчей против Meltdown и Spectre.

Собирать ядро самому.

tailgunner ★★★★★ ()
Ответ на: А ЧО ЭТО ТАКОЕ от anonymous

Как я понял, наличие PCID в процессорах делает проседание по performance'у меньше.

Добавил детали в топик - поиск по «PCID».

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

а как проверить, подвержена ли моя система Meltdown и Spectre?
есть какие-то скрипты или тесты, которые проверяют?

В топике ж описаны тесты!

Kroz ★★★★★ ()

Firefox 57.0.4

А что интересно говорят, поэтому поводу разработчики tor браузера. Оно же на старых версиях mozill-ы

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

поддержка trampolines еще пилится

поддержка для gcc?

А что с патчами на ядро для IBRS? Имхо, это как более общее решение было бы лучше, т.к. софт не всегда можно пересобрать.
Хотя, одно другому не мешает, тем более что

Всё перечисленное - mitigations

Ну, кроме потери производительности

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

Собери, плиз, экзешники тестов для винды.

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

поддержка trampolines еще пилится

поддержка для gcc?

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

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

Точнее я хотел защититься от последствия патчей, а именно от затормаживания производительности. Хрен с безопасностью, я сам решу, жертвовать ею или нет и при каких условиях. Это параметры ядра позволяют сделать?

rumgot ★★★★★ ()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от Kroz

Исправил

Нет.

смотри в абзаце

Защита:
MeltDown
Как я понял, это полностью устраняет проблему MeltDown на Intel и AMD.

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

А что с патчами на ядро для IBRS? Имхо, это как более общее решение было бы лучше, т.к. софт не всегда можно пересобрать.

Хотя, одно другому не мешает, тем более что
А там или-или? Или компилятор или ядро?

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

Нет.
смотри в абзаце
Как я понял, это полностью устраняет проблему MeltDown на Intel и AMD.

Исправил. Спасибо.

Kroz ★★★★★ ()
Пн янв 15_08:30 $dmesg -wH | grep 'Kernel/User page tables isolation'
[  +0,000000] Kernel/User page tables isolation: enabled

Пока не заметил.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)

Патчи патчами... Но у меня вопрос: эти вот штуки можно в конфиге ядра где-то отключать?

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

эти вот штуки можно в конфиге ядра где-то отключать?

Какие именно?

KPTI отключается как минимум параметрами ядра или в /sys/kernel; в топике описано ( Защита: > MeltDown > 2. ... Отключать, если не в ядре ...)

gcc - опции компилятора, если source-based дистрибутив, то там всё можно.
Сhrome - отключается - в топике описано как
Для остального нужно смотреть. Если найдешь - поделись сюда.

Kroz ★★★★★ ()

2. Ваш рецепт по фиксу

Оставатся на актуальных версиях ПО и следить за скорыми фиксами ПО подверженого известным CVE.

5. Приведите тест (не результаты, а методику), который бы показал влияние на performance

Тест влияния исключительно ядерных патчей - любой бенчмарк из существующих на выбор на двух версиях ядер до и после 4.14.12, 4.9.75, 4.4.110.

Тест влияния ядерных патчей + тулчейн + юзерспэйс - любой бенчмарк из существующих на выбор на двух системах. Одна до 4.14.12, 4.9.75, 4.4.110 и без патчей gcc и софт как был. Вторая ядро после 4.14.12, 4.9.75, 4.4.110 + залатанное gcc и пересобранный тулчейн и юзерспэйс.

6. Если покупать железо, как знать что оно не подвержено Meltdown и Spectre?

Выбирать из архитектур не подверженных сабжу.

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

2. Ваш рецепт по фиксу

Оставатся на актуальных версиях ПО и следить за скорыми фиксами ПО подверженого известным CVE.

У меня складывается подозрение, что обновления софта, которые сейчас выпускают, это просто точечные заплатки. Весь софт так не починить. Полное решение проблемы должно быть какое-то другое: на уровне компилятора, ядра, библиотек.
Если мир перекомпилить с помощью gcc -mindirect-branch=thunk-extern - это защитит от Spectre?

5. Приведите тест (не результаты, а методику), который бы показал влияние на performance

Тест влияния исключительно ядерных патчей - любой бенчмарк из существующих на выбор на двух версиях ядер до и после 4.14.12, 4.9.75, 4.4.110.

Назови конкретные тесты.
Я придумал только sysbench --test=cpu/threads/mutex , не знаю адекватно ли.

6. Если покупать железо, как знать что оно не подвержено Meltdown и Spectre?

Выбирать из архитектур не подверженных сабжу.

80486?
Spectre ж подвержено практически всё.
Понятно, что CPU с фиксами появятся примерно через год. Как бы словить первую зафикшеную модель? Врядли на коробки будет красоваться яркая надпись «Spectre-free, Meltdown-free».

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz

80486?

Атом 330 интереснее, 2 ядра, 1.6ГГц, короче, ищи на помойке старый нетбук

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

У меня складывается подозрение, что обновления софта, которые сейчас выпускают, это просто точечные заплатки.

Да и те, в некоторых дистрибутивах, начинающихся на букву g а заканчивающихся на enta, не страдают особой скоростью реакции даже на уже известные проблемы ну ибо нафиг?

Полное решение проблемы должно быть какое-то другое: на уровне компилятора, ядра, библиотек.

Кстати насчет grsec. На нём одну секундочку помоему и было то самое либо схожее «проседание производительности» которое мы сейчас и пытаемся измерить. По крайней мере это проседание примерно где-то такое-же и должно быть как от vanilla vs hardened-grsec.

Если мир перекомпилить с помощью gcc -mindirect-branch=thunk-extern - это защитит от Spectre?

Ну по идее да.

Назови конкретные тесты.

Графику тестилками от unigine, остальное типичными операциями - сборка ядра, gcc, llvm? Если просядет сильно это сразу заметно будет же и без тестов а на современных многоядерных системах оно по сути то и не так сильно будет заметно скорее всего.

Spectre ж подвержено практически всё.

IBM System Z, POWER8 (Big Endian and Little Endian), POWER9 (Little Endian), Байкал-М не пойдет он на ARMv8-A, sparc, risc… Байкал-Т1 на MIPS P5600, Эльбрус-4С, Эльбрус-8С или Zilog Z80 в конце то концов!?

Правило чем более неординарно железо и ось продолжает действовать.

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

В случае Spectre патча ядра не достаточно.

А что нужно?

Пропатчить gcc патчем retpoline. И пересобрать весь софт в системе c gcc -mindirect-branch=thunk-extern ?

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

Ну, это я уже понял, почитав новости и статьи. Ясно, в общем, опции в конфиге ядра, отключающей «падение производительности» на моем AMD, не будет :)

Gonzo ★★★★★ ()

пришлось для 24 федоры собрать gcc и ядро им пересобрать, получаю что-то типа

/root/spectre-meltdown-checker.sh 
Spectre and Meltdown mitigation detection tool v0.31

Checking for vulnerabilities against running kernel Linux 4.14.13-200.fc24.x86_64 #1 SMP Fri Jan 19 10:22:50 EET 2018 x86_64
CPU is Intel Xeon E312xx (Sandy Bridge)

CVE-2017-5753 [bounds check bypass] aka 'Spectre Variant 1'
* Checking whether we're safe according to the /sys interface:  NO  (kernel confirms your system is vulnerable)
> STATUS:  VULNERABLE  (Vulnerable)

CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'
* Checking whether we're safe according to the /sys interface:  YES  (kernel confirms that the mitigation is active)
> STATUS:  NOT VULNERABLE  (Mitigation: Full generic retpoline)

CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Checking whether we're safe according to the /sys interface:  YES  (kernel confirms that the mitigation is active)
> STATUS:  NOT VULNERABLE  (Mitigation: PTI)

но если так

/root/spectre-meltdown-checker.sh --no-sysfs
Spectre and Meltdown mitigation detection tool v0.31

Checking for vulnerabilities against running kernel Linux 4.14.13-200.fc24.x86_64 #1 SMP Fri Jan 19 10:22:50 EET 2018 x86_64
CPU is Intel Xeon E312xx (Sandy Bridge)

CVE-2017-5753 [bounds check bypass] aka 'Spectre Variant 1'
* Checking count of LFENCE opcodes in kernel:  YES 
> STATUS:  NOT VULNERABLE  (286 opcodes found, which is >= 70, heuristic to be improved when official patches become available)

CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'
* Mitigation 1
*   Hardware (CPU microcode) support for mitigation
*     The SPEC_CTRL MSR is available:  NO 
*     The SPEC_CTRL CPUID feature bit is set:  NO 
*   Kernel support for IBRS:  NO 
*   IBRS enabled for Kernel space:  NO 
*   IBRS enabled for User space:  NO 
* Mitigation 2
*   Kernel compiled with retpoline option:  YES 
*   Kernel compiled with a retpoline-aware compiler:  NO 
> STATUS:  VULNERABLE  (IBRS hardware + kernel support OR kernel with retpoline are needed to mitigate the vulnerability)

CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Kernel supports Page Table Isolation (PTI):  YES 
* PTI enabled and active:  YES 
* Checking if we're running under Xen PV (64 bits):  NO 
> STATUS:  NOT VULNERABLE  (PTI mitigates the vulnerability)

одно говорит что вариант 1 еще уязвим, другой редим что вариант 2 уязвим.

Novell-ch ★★★★★ ()
Ответ на: комментарий от anonymous

Пропатчить gcc патчем retpoline. И пересобрать весь софт в системе c gcc -mindirect-branch=thunk-extern ?

Я бы тоже хотел знать ответ на этот вопрос.

Как я понял, по Spectre там есть две проблемы.
Для одной нужен микрокод + патч ядра
Для второй - патч ядра + gcc -mindirect-branch=thunk-extern на весь софт, и то «для процессоров архитектуры Skylake и более поздних проблему решает не полностью». А нормального решение нет.

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

Zilog Z80 в конце то концов!?

Back to девяностые?

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

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

Ну, это я уже понял, почитав новости и статьи. Ясно, в общем, опции в конфиге ядра, отключающей «падение производительности» на моем AMD, не будет :)

Только лишь опции ядра - нет. А комбинации опции ядра с другими выключателями - будет.

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)

Я вот сколько читал про Bounds Check Bypass, так и не понял: его описывают по аналогии с meltdown. то есть «позволяет читать память других процессов» но это происходило у интела потому что вся-вся-вся память размаплена в 86-64 в пространство ядра и поэтому-то её и можно читать как хочешь.

а как spectre то её читает?

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