маскировку объектов (процессов, файлов, каталогов, драйверов);
управление (событиями, происходящими в системе);
сбор данных (параметров системы).
Термин Rootkit исторически пришёл из мира UNIX, и под этим термином понимается набор утилит или специальный модуль ядра, которые злоумышленник устанавливает на взломанной им компьютерной системе сразу после получения прав суперпользователя. Этот набор, как правило, включает в себя разнообразные утилиты для «заметания следов» вторжения в систему, делает незаметными снифферы, сканеры, кейлоггеры, троянские программы, замещающие основные утилиты UNIX (в случае неядерного руткита). Rootkit позволяет взломщику закрепиться во взломанной системе и скрыть следы своей деятельности путём скрытия файлов, процессов, а также самого присутствия руткита в системе.
В систему руткит может быть установлен различными способами: загрузка посредством эксплойта, после получения шелл-доступа (в таком случае, может использоваться средство типа wget или исходный FTP-клиент для загрузки руткита с удалённого устройства), в исходном коде или ресурсах программного продукта.
изменяющие алгоритмы выполнения системных функций (Modify execution path)
изменяющие системные структуры данных (Direct kernel object manipulation)[1]
Основные методы реализации
В Microsoft Windows
Существуют разнообразные технологии руткитов, наиболее распространённые: захват таблиц вызовов (IAT, IDT, SSDT, GDT), перехват функций (например, модификацией начальных байт), непосредственное изменение системных объектов (DKOM), методы использования драйверов.
Захват таблиц вызовов
Таблица вызовов представляет собой массив, в котором каждый элемент хранит адрес соответствующей процедуры. Такие таблицы существуют и в режиме ядра (IDT, CPU MSRs, GDT, SSDT, IRP dispatch table), и в режиме пользователя (IAT).
Import Address Table (IAT) — основная таблица вызовов модулей пользовательского режима. Большинство исполняемых файлов имеет одну или несколько встроенных IAT, содержащих адреса библиотечных процедур, импортируемых из DLL[2].
На многопроцессорной машине существуют несколько экземпляров таблиц вызовов (например, IDT, GDT, MSR). Так как каждый процессор имеет собственные системные регистры (в частности, GDTR — регистр глобальной таблицы дескрипторов (GDT), IDTR — регистр дескриптора таблицы прерываний (IDT) и IA32_SYSENTER_EIP — содержит виртуальный адрес входной точки в режим ядра (MSR)), он также имеет собственные системные структуры[3].
При изменении записи в таблице вызовов контролируется исполнение программ и, при необходимости, перенаправляется на требуемые функции. Перехваченная процедура может[4]:
блокировать вызовы, производимые определёнными приложениями (например, антивирус)
замещать исходную процедуру
производить мониторинг системы путём перехвата вводимых параметров
Идентифицировать таблицу вызовов, получить её адрес
Сохранить существующую в таблице запись
Подменить запись новым адресом
Восстановить исходную запись
Если функция перехвата предполагает вызов исходной процедуры, то блокирование и мониторинг производятся до вызова, фильтрация параметров после.
IAT — таблица вызовов, размещаемая в файловой структуре приложения. IAT сохраняет адрес процедур, экспортируемых определённой DLL. Каждая DLL, с которой сцепляется приложение во время загрузки, имеет собственную IAT. Для захвата IAT необходимо выполнить следующие действия:
Получить доступ к адресному пространству процессора
Локализировать IAT в образе памяти процессора
Модифицировать требуемую IAT
Для манипуляции IAT, требуется доступ к адресному пространству приложения, которому таблица принадлежит. Одним из способов является внедрение DLL. Среди методов внедрения DLL в адресное пространство процесса можно указать[5]:
Модификация значения реестра AppInit_DLL
API-вызов SetWindowsHookEx()
Использование удаленных потоков
Перехват модификацией кода функции
Принцип работы основан на том, что первые байты перехватываемых функций замещаются на код перехватчика. Необходимо подчеркнуть, что при установке перехватчика не производится анализ кода перехватываемой функции: изменяется N первых байт, а не первые N машинных команд. Следствием этого факта является[6]:
код перехватчика может быть установлен только в начале функции;
для каждого вызова перехваченной функции перехватчику необходимо восстановить её машинный код до вызова и повторно перехватить после завершения вызова.
Алгоритм работы руткита:
В теле перехватчика создаётся массив, в который записываются первые N байт каждой из перехваченных функций (обычно размер модифицированного кода не превышает 20 байт)
Восстановление первых N байт перехваченной функции.
Вызов перехваченной функции.
Повторная модификация машинного кода перехваченной функции: перезапись кода, передающего управление перехватчику, в первые байты.
Анализ и, при необходимости, модификация результатов выполнения исходной функции.
Выполнение операции ret, возвращение управления вызвавшей функцию программе.
Для перехвата достаточно модификации пяти первых байт функции, на место которых записывается операция jmp, передающая управление перехватчику руткита.
Следует отметить, что простейшие системы защиты от атак такого типа проверяют первый байт вызываемых функций на предмет наличия в них машинного кода операции jmp. В качестве меры противодействия разработчики руткитов применяют методики «маскировки» кода, записываемого в начало функции перехватчика(применения команд вида PUSH/RET, размещения нескольких операторов NOP или мусорного кода типа PUSH AX/POP АХ, а также элементы полиморфизма).
Метод модификации первых байт функций имеет ряд недостатков, связанных, в основном, с необходимостью восстановления машинного кода перехваченных функций перед их вызовом и повторного перехвата после вызова. Данные операции снижают быстродействие системы и могут послужить причиной сбоев в работе многопоточных приложений.
Операционные системы семейства Windows NT используют стандартные модели объектов. Различные компоненты исполняющей системы определяют один или несколько типов объектов. Каждый компонент экспортирует в режиме ядра набор поддерживаемых функции и свойств, называемый COM-интерфейсом, для манипуляции этим типом объектов. Ни один компонент не может напрямую получить доступ к другому объекту компонента. Типичными объектами режима ядра являются[7]:
объект типа устройства (определяемый менеджером ввода-вывода тип объекта привилегированного режима, используемый для представления физического, логического или виртуального устройства)
файловый объект
символьные ссылки
ключи реестра
потоки и процессы
диспетчерский объект (класс типов объектов привилегированного режима, используемый для управления процессами диспетчеризации и синхронизации)
Такой дизайн обеспечивает гибкость и портируемость (переносимость), например, будущие релизы операционной системы могут содержать компоненты ядра, определяющие аналогичные объекты, но имеющие совершенно другую внутреннюю структуру. Если такие компоненты будут экспортировать функции с сохранившимися названиями и параметрами, изменение не возымеет эффекта[3].
Непосредственное манипулирование объектами ядра является достаточно мощной технологией, трудной для обнаружения. Однако при этом существует ряд недостатков, таких как нестабильность метода, зависимость от версий, сложность реализации в силу отсутствия документированного описания структур и свойств объектов. Несмотря на эти ограничения, данный метод позволяет скрывать процессы, драйверы устройств, порты, повышать уровень привилегий потоков (следовательно, процессов).
EPROCESS — это структура, служащая для внутреннего представления процесса (объект процесса). Windows использует круговой двусвязный список структур EPROCESS для отслеживания процесса исполнения. Ссылки, связывающие объекты EPROCESS, содержатся в поле ActiveProcessLink, структура которого LIST_ENTRY[8]:
Получение указателя на процесс, к которому принадлежит текущий поток, с помощью вызова PsGetCurrentProcess()
Получение PID процесса
При несовпадении PID с искомым осуществляется переход по двусвязному списку (поле ActiveProcessLinks, тип LIST_ENTRY)
Изменение полей ActiveProcessLinks. В частности, ссылка на следующий блок EPROCESS блока А устанавливается на блок С, аналогично ссылка на предыдущий блок в блоке С. Ссылки блока B замыкаются на своей записи. Таким образом, создаются два списка, один из которых состоит из одного элемента
Исключение процесса из списка процессов не влияет на его исполнение. В Windows планирование кода на исполнение производится на уровне потоков, процессы определяют контекст, в котором запускаются потоки. Скрытие процесса производится на внешнем уровне в инструментах, опирающихся на объекты процессов EPROCESS, таких как Диспетчер задач. Диспетчер ядра использует другую схему учёта ресурсов, полагающуюся на другие структуры данных (главным образом объекта ETHREAD). Данный метод позволяет скрывать процессы без потери функциональности[9].
Драйверы
Модель драйверов Microsoft поддерживает многоуровневую архитектуру, поэтому запрос ввода/вывода (I/O request, обмен данными между приложениями и драйверами) может обслуживаться серией подключённых драйверов, каждый из которых выполняет свою задачу. Цепь драйверов, обслуживающих физическое устройство, называется стеком. Такой модульный подход позволяет новым драйверам быть включёнными в стек для увеличения функциональности. При этом изменяется или добавляется только отдельный участок цепи. Также некоторые периферийные устройства используют одинаковые контроллеры (и, соответственно, шины ввода/вывода). Модульность позволяет оптимизировать использование одинаковых блоков кода, вместо написания отдельного драйвера для каждого устройства.
В модели WDM определено три типа драйверов: драйвер шины, функциональные драйверы и драйверы-фильтры. Драйверы-фильтры обычно располагаются между другими модулями и захватывают проходящие через них IRPs. Перед отправлением IRP смежному драйверу фильтр может просмотреть содержимое или изменить его для воздействия на дальнейшее поведение системы. Пример, при снятии образа диска с сервера, критичного к простою, драйвер-фильтр может использоваться для изменения потока данных с целью скрытия некоторых файлов.
IRP пакет (I/O request packet) — структура данных ядра Windows, обеспечивающая обмен данными между приложениями и драйвером, а также между драйвером и драйвером. При поступлении запроса от приложения менеджер ввода/вывода формирует соответствующий IRP, который локализует и пересылается верхнему объекту в стеке драйверов. Если верхний драйвер смог самостоятельно обработать поступивший IRP, он завершает запрос и возвращает IRP менеджеру ввода/вывода. В противном случае, драйвер выполняет частичную обработку, локализует нижележащий объект в стеке и запрашивает менеджер ввода/вывода на передачу IRP следующему драйверу
При создании IRP менеджер ввода/вывода резервирует область памяти, находящуюся после заголовка. Выделенная память используется для записи массива структур IO_STACK_LOCATION, выделяемых для каждого драйвера стека:
Размер памяти соответствует количеству драйверов в стеке. Массив нумеруется с 1, соответствующую нижнему драйверу стека. Структура содержит информацию о вызываемой менеджером ввода/вывода функции управления драйвера (поля MajorFunction и MinorFunction), передаваемые функции параметры (поле Parameters, содержимое варьируется в зависимости от функции), указатель на объект драйвера (DeviceObject), указатель на функцию завершения (поле CompletionRoutine, данная функция находится в драйвере верхнего уровня).
Функция управления драйвера при первом получении IRP восстанавливает из соответствующей позиции стека ввода/вывода параметры, производя вызов IoGetCurrentIrpStackLocation(). Далее выполняются предписанные действия, после чего, в случае пересылки IRP нижнему драйверу стека, происходит:
установка позиции стека ввода/вывода в IRP
регистрация функции завершения (опционально)
отправка IRP нижнему драйверу
возврат кода статуса (NTSTATUS)
Существуют два стандартных способа установить позицию стека для следующего драйвера[10]:
Текущая позиция пересылается без изменений, функция:
VOIDIoSkipCurrentIrpStackLocation(INPIRPIrp);
Функция уменьшает на единицу указатель на массив IO_STACK_LOCATION. Таким образом, при пересылке IRP произойдёт восстановление указателя (автоматически увеличится на единицу), в итоге, будет использован тот же участок стека. При использовании данного способа, возникнет неиспользуемый участок в конце стека.
Если необходимо передать содержимое текущей позиции стека, за исключением указателя на функцию завершения (поле CompletionRoutine), используется:
Первым аргументом является указатель на нижележащий объект драйвера. Способ получения такого адреса определяется конкретной функцией управления, стандартного метода не существует.
Каждый запрос должен быть завершен либо последним драйвером в стеке (дальнейшая пересылка IRP невозможна), либо одним из вышестоящих.
Менеджер ввода/вывода инициализирует процесс завершения для данного IRP, когда любой из драйверов, обрабатывающих IRP, вызывает функцию завершения IoCompleteRoutine(). При её вызове менеджер ввода/вывода заполняет участок стека ввода/вывода текущего драйвера нулями, после чего вызывает драйвер более высокого уровня с установленной функцией завершения к данному IRP. Для определения способа обработки запроса драйвером нижнего уровня функции завершения драйвера более высокого уровня доступен только блок статуса ввода вывода в IRP.
Собственно, установленный таким образом драйвер-фильтр позволяет обрабатывать не только приходящие IRP-пакеты (например, блокировать чтение определенного сектора диска), но и управлять результатами обработки нижестоящих драйверов посредством инициализации функции завершения[11].
Еще одним методом реализации руткитов является модификация MBR и загрузка до ядра операционной системы — буткиты (например, BackDoor.MaosBoot).
Данный вид вредоносных кодов в среде Windows известен с начала 1990-х годов под названием стелс-вирусов.
В UNIX и Linux
реализуемые подменой основных системных утилит (очень легко обнаруживаются средствами контроля целостности, кроме того, легко блокируются средствами мандатного управления доступом типа SELinux или AppArmor);
реализованные в виде модуля ядра и основанные на патчинге VFS или перехвате таблицы системных вызовов (sys_call_table);
основанные на модификации физической памяти ядра.
Дополнительные возможности
Кроме непосредственно себя, руткит, как правило, может маскировать присутствие в системе любых описанных в его конфигурации каталогов и файлов на диске, ключей в реестре. По этой причине естественным образом появились «навесные» руткитные библиотеки. Многие руткиты устанавливают в систему свои драйверы и службы (они, естественно, также являются «невидимыми»).
Это утилиты или резидентные модули, обнаруживающие в системе присутствие руткитов и (в разной мере) удаляющие их. Существует множество конкурирующих средств для этого — как платных, так и бесплатных, но все они используют сходные принципы действия.
Методы детектирования руткитов
Известен алгоритм отлова MEP-руткитов. Его суть заключается в том, что одна и та же информация регистрируется несколькими способами - с использованием API и «напрямую», после чего полученные данные сравниваются в поисках расхождений. Наиболее часто сканируются таблицы импорта и таблицы вызовов Native API, а также структурно вся файловaя система.
Базовый арсенал средств отлова руткитов основывается на следующих методах.
Сигнатурный поиск. Применяется ещё со времён первых антивирусов и представляет собой поиск в проверяемом файле уникальной цепочки байтов (сигнатуры), присущей вредоносной программе.
Эвристический или поведенческий анализатор. Эта технология основывается на поиске отклонений в настройках системы, конфигурационных файлах Linux или реестре Windows, подозрительном поведении процессов и модулей и так далее.
Контроль целостности. Этот тип поиска основан на сравнении контрольной суммы (MD5 и тому подобное) или цифровой подписи разнообразных системных файлов с базой, содержащей контрольную сумму оригинальных файлов. В случае несовпадения программа делает вывод, что файл был модифицирован или вовсе заменен.
Jimmy Gomez Membro della Camera dei rappresentanti - California, distretto n.34Durata mandato11 luglio 2017 - In carica PredecessoreXavier Becerra Membro dell'Assemblea generale della California, distretto n.51Durata mandato3 dicembre 2012 - 11 luglio 2017 Dati generaliPartito politicoDemocratico Jimmy Gomez (Fullerton, 25 novembre 1974) è un politico statunitense, membro della Camera dei Rappresentanti per lo stato della California. Biografia Gomez, figlio di immigrati messic...
Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada November 2022. Thar Pike KaungNama lainBurmaသားပိုက်ကောင် SutradaraSteel (Dwe Myittar)SkenarioNay Soe ThaeCeritaZan Thazin ThwayPemeran Htun Htun Soe Myat Thuzar Shwe Thamee SinematograferMano V. NarayananPerusahaanproduksiArr Mhan Fi...
Armenian physiologist Leon OrbeliBorn7 July [O.S. 25 June] 1882Tsaghkadzor, Tiflis Governorate, Russian EmpireDied9 December 1958(1958-12-09) (aged 76)Leningrad, Soviet UnionAwardsHero of Socialist Labour A commemorative plaque to Leon Orbeli in Saint Petersburg Leon Abgarovich Orbeli (Armenian: Լևոն Աբգարի Օրբելի, Levon Abgari Orbeli; Russian: Леон Абгарович Орбели, Levon Abgarovich Orbeli; 7 July [O.S. 25 June] 1882...
Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada November 2022. Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Oktober 2022. Johann...
Vous lisez un « article de qualité » labellisé en 2010. Pour les articles homonymes, voir Gaïa (homonymie). « Car les métaphores sont plus que jamais nécessaires pour faire comprendre au plus grand nombre la véritable nature de la Terre et les périls mortels qui se profilent à l'horizon » — James Lovelock[1]. L'hypothèse Gaïa, appelée également hypothèse biogéochimique[2], est une hypothèse controversée, initialement avancée en 1970 par le climatolo...
جينهوا 金华市 مدينة على مستوى محافظة [الإنجليزية] Clockwise from top: Bridging Tea House in Jinhua Architecture Park, محطة سكة حديد جينهوا [لغات أخرى], Jinhua City 1, Jinhua City 2 الاسم الرسمي (بالصينية: 金华市) Location of Jinhua City jurisdiction in Zhejiang الإحداثيات 29°05′N 119°39′E / 29.083°N 119.650°E / 29.083; 119.650 تقسيم إ...
ليشوي 丽水市 مدينة على مستوى محافظة [الإنجليزية] Liyang Street (丽阳街) الاسم الرسمي (بالصينية: 丽水市) Location of Lishui City jurisdiction in the province الإحداثيات 28°27′N 119°55′E / 28.450°N 119.917°E / 28.450; 119.917 تقسيم إداري البلد الصين مقاطعات الصين تشيجيانغ التقسيم الإداري في الصين 9 ...
Oksima adalah suatu senyawa kimia yang termasuk dalam kelompok imina, dengan rumus umum R1R2C=NOH, di mana R1 adalah suatu rantai samping organik dan R2 dapat berupa hidrogen, membentuk suatu aldoksima, atau gugus organik lain, membentuk suatu ketoksima. Oksima tersubstitusi-O membentuk suatu keluarga senyawa yang terkait erat. Amidoksima adalah oksima amida dengan struktur umum RC(=NOH)(NRR'). Oksima biasanya dihasilkan oleh reaksi hidroksilamina dengan aldehida atau keton. Istilah oksima b...
Claudio Sánchez-Albornoz y Menduiña 7º Primo ministro della Repubblica Spagnola in esilioDurata mandatomarzo 1962 –febbraio 1971 PredecessoreEmilio Herrera Linares SuccessoreFernando Valera Aparicio Dati generaliPrefisso onorificoDon Partito politicoRepublican Action Titolo di studiodottore UniversitàUniversidad Complutense de Madrid Firma Claudio Sánchez-Albornoz y Menduiña (Madrid, 7 aprile 1893 – Avila, 8 luglio 1984) è stato uno storico e arabi...
Football clubGarbarnia KrakówFull nameRobotniczy Klub SportowyGarbarnia KrakówNickname(s)Garbarze (The Tanners)Founded1921; 103 years ago (1921)GroundStadion RKS GarbarniaCapacity1,000[1]ChairmanPaweł CiszekManagerMarcin PlutaLeagueIII liga, group IV2022–23II liga, 17th of 18 (relegated)[2] Home colours Away colours K.S. Garbarnia Kraków is a Polish football and sports club from Ludwinów, a historical district of the city of Kraków. The club's name co...
Lembaga Pendidikan Perkebunan (LPP) yang merupakan asosiasi milik BUMN Perkebunan, merupakan sebuah lembaga pendidikan yang diperuntukkan bagi karyawan industri perkebunan. Lembaga ini telah beridiri sejak tahun 1950. Sebelumnya, nama lembaga ini adalah College Gula Negara (CGN). Sejarah Sejarah LPP diawali oleh berdirinya College Gula Negara (CGN) pada tahun 1950, untuk memenuhi kebutuhan tenaga ahli bidang industri gula pasca rasionalisasi perusahan-perusahaan eks Belanda yang kemudian diub...
Pour les articles homonymes, voir Newkirk (homonymie). Anastacia Anastacia en 2009.Informations générales Nom de naissance Anastacia Lyn Newkirk Naissance 17 septembre 1968 (55 ans)Chicago, Illinois États-Unis Activité principale Auteure-compositrice-interprètechanteusedanseuse Genre musical Pop, rock, R&B, soul, dance Années actives 1983 - 1992 (Danseuse)1993 - présent (Chanteuse) Labels Epic, Mercury, BMG, Sony Music Entertainment modifier Anastacia Lyn Newkirk, née le 17 ...
Bagian dari seri tentang:Islamisme Dasar Islam Sejarah Budaya Ekonomi Politik Sekularisme Ideologi Islamisme Qutbisme Salafisme Islamisme Syiah Fundamentalisme Islam Konsep Kekhalifahan Demokrasi Islam Sosialisme Islam Negara Islam Monarki Islam Republik Islam Islamisasi (pengetahuan) Jihad Pan-Islamisme Pasca-Islamisme Syariah Syura Perbudakan Teori dua bangsa Umat Pengaruh Anti-imperialisme Anti-Zionisme Kebangkitan Islam Zaman Kejayaan Islam GerakanMazhab Ahl-i Hadith Deobandi Madkhal...
Irish private coach operator This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: JJ Kavanagh and Sons – news · newspapers · books · scholar · JSTOR (April 2024) (Learn how and when to remove this message) JJ Kavanagh and SonsFounded1919HeadquartersUrlingford, County Kilkenny, IrelandService areaIrelandUnited Kin...
Railway station in Sakaki, Nagano Prefecture, Japan This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Sakaki Station – news · newspapers · books · scholar · JSTOR (December 2016) (Learn how and when to remove this message) Sakaki Station坂城駅Sakaki Station entrance in August 2008General informationLocation...
هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (مارس 2022) داونتون آبي: حقبة جديدةDownton Abbey: A New Era (بالإنجليزية) معلومات عامةالصنف الفني دراما تاريخية تاريخ الصدور 27 أبريل 2022[1] (فرنسا)28 أبريل 2022[2] (ألمانيا، المج...
Pandu Kertawiguna, 1954 Pandu Kartawiguna (lahir di Cirebon, 13 Februari 1913 – meninggal pada 4 September)[1][2] adalah pejuang Angkatan 1945, salah satu Tokoh Pers Indonesia yang mempelopori berdirinya Lembaga Kantor Berita Nasional Antara pada 1937 berkantor di JI. Pinangsia 38 Jakarta Kota. Dengan modal satu meja tulis tua, satu mesin tulis tua, dan satu mesin roneo tua, mereka menyuplai berita ke berbagai surat kabar nasional.[3][4][5][6]...
Questa voce sugli argomenti banche e Marocco è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Banca centrale del Marocco Area valutaria Marocco Istituita1959 PresidenteAbdellatif Jouahri (dal 2003) SedeBank Al Maghrib Building Sito web e Sito web Modifica dati su Wikidata · Manuale La Bank Al-Maghrib è la banca centrale del Marocco. È stata fondata nel 1959 ed ha sede a Rabat. Detiene riserve di valuta estera con un patrimonio stimato di c...
Artikel atau sebagian dari artikel ini mungkin diterjemahkan dari History of evolutionary thought di en.wikipedia.org. Isinya masih belum akurat, karena bagian yang diterjemahkan masih perlu diperhalus dan disempurnakan. Jika Anda menguasai bahasa aslinya, harap pertimbangkan untuk menelusuri referensinya dan menyempurnakan terjemahan ini. Anda juga dapat ikut bergotong royong pada ProyekWiki Perbaikan Terjemahan. (Pesan ini dapat dihapus jika terjemahan dirasa sudah cukup tepat. Lihat pula: ...
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne s'appuie pas, ou pas assez, sur des sources secondaires ou tertiaires (mai 2022). Pour améliorer la vérifiabilité de l'article ainsi que son intérêt encyclopédique, il est nécessaire, quand des sources primaires sont citées, de les associer à des analyses faites par des sources secondaires. Si l'art islamique n'est pas un art strictement religieux, puisque le terme Islam est alors pris dan...